1 1.18 tsutsui /* $NetBSD: prom.h,v 1.18 2013/09/23 01:39:27 tsutsui Exp $ */ 2 1.1 chuck 3 1.1 chuck /* 4 1.1 chuck * Copyright (c) 1995 Theo de Raadt 5 1.1 chuck * All rights reserved. 6 1.1 chuck * 7 1.1 chuck * Redistribution and use in source and binary forms, with or without 8 1.1 chuck * modification, are permitted provided that the following conditions 9 1.1 chuck * are met: 10 1.1 chuck * 1. Redistributions of source code must retain the above copyright 11 1.1 chuck * notice, this list of conditions and the following disclaimer. 12 1.1 chuck * 2. Redistributions in binary form must reproduce the above copyright 13 1.1 chuck * notice, this list of conditions and the following disclaimer in the 14 1.1 chuck * documentation and/or other materials provided with the distribution. 15 1.1 chuck * 16 1.1 chuck * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 17 1.1 chuck * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 18 1.1 chuck * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 19 1.1 chuck * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 20 1.1 chuck * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 21 1.1 chuck * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22 1.1 chuck * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 23 1.1 chuck * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 1.1 chuck * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 25 1.1 chuck * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 1.1 chuck */ 27 1.1 chuck 28 1.1 chuck #define MVMEPROM_INCHR 0x00 29 1.1 chuck #define MVMEPROM_INSTAT 0x01 30 1.1 chuck #define MVMEPROM_INLN 0x02 31 1.1 chuck #define MVMEPROM_READSTR 0x03 32 1.1 chuck #define MVMEPROM_READLN 0x04 33 1.1 chuck #define MVMEPROM_OUTCHR 0x20 34 1.1 chuck #define MVMEPROM_OUTSTR 0x21 35 1.1 chuck #define MVMEPROM_DSKRD 0x10 36 1.1 chuck #define MVMEPROM_DSKWR 0x11 37 1.1 chuck #define MVMEPROM_DSKCFIG 0x12 38 1.1 chuck #define MVMEPROM_DSKFMT 0x14 39 1.1 chuck #define MVMEPROM_DSKCTRL 0x15 40 1.1 chuck #define MVMEPROM_NETCTRL 0x1d 41 1.1 chuck #define MVMEPROM_OUTSTRCRLF 0x22 42 1.1 chuck #define MVMEPROM_WRITE 0x23 43 1.1 chuck #define MVMEPROM_WRITELN 0x24 44 1.1 chuck #define MVMEPROM_DELAY 0x43 45 1.1 chuck #define MVMEPROM_RTC_RD 0x53 46 1.1 chuck #define MVMEPROM_EXIT 0x63 47 1.1 chuck #define MVMEPROM_GETBRDID 0x70 48 1.1 chuck #define MVMEPROM_ENVIRON 0x71 49 1.1 chuck 50 1.1 chuck #define NETCTRLCMD_GETETHER 1 51 1.1 chuck 52 1.1 chuck #define ENVIRONCMD_WRITE 1 53 1.1 chuck #define ENVIRONCMD_READ 2 54 1.1 chuck #define ENVIRONTYPE_EOL 0 55 1.1 chuck #define ENVIRONTYPE_START 1 56 1.1 chuck #define ENVIRONTYPE_DISKBOOT 2 57 1.1 chuck #define ENVIRONTYPE_ROMBOOT 3 58 1.1 chuck #define ENVIRONTYPE_NETBOOT 4 59 1.1 chuck #define ENVIRONTYPE_MEMSIZE 5 60 1.1 chuck 61 1.1 chuck #ifndef _LOCORE 62 1.1 chuck struct prom_netctrl { 63 1.1 chuck u_char dev; 64 1.1 chuck u_char ctrl; 65 1.1 chuck u_short status; 66 1.1 chuck u_long cmd; 67 1.1 chuck u_long addr; 68 1.1 chuck u_long len; 69 1.1 chuck u_long flags; 70 1.1 chuck }; 71 1.1 chuck 72 1.1 chuck struct prom_environ_hdr { 73 1.1 chuck u_char type; 74 1.1 chuck u_char len; 75 1.1 chuck }; 76 1.1 chuck 77 1.1 chuck struct mvmeprom_brdid { 78 1.1 chuck u_long eye_catcher; 79 1.1 chuck u_char rev; 80 1.1 chuck u_char month; 81 1.1 chuck u_char day; 82 1.1 chuck u_char year; 83 1.1 chuck u_short size; 84 1.1 chuck u_short rsv1; 85 1.1 chuck u_short model; 86 1.1 chuck u_short suffix; 87 1.1 chuck u_short options; 88 1.1 chuck u_char family; 89 1.1 chuck u_char cpu; 90 1.1 chuck u_short ctrlun; 91 1.1 chuck u_short devlun; 92 1.1 chuck u_short devtype; 93 1.1 chuck u_short devnum; 94 1.1 chuck u_long bug; 95 1.1 chuck 96 1.1 chuck /* 97 1.1 chuck * XXX: I have seen no documentation for these! 98 1.1 chuck * 99 1.1 chuck * The following (appears to) exist only on the MVME162 and 100 1.1 chuck * upwards. We should figure out what the other fields are. 101 1.1 chuck */ 102 1.1 chuck u_char xx1[16]; 103 1.1 chuck u_char xx2[4]; 104 1.1 chuck u_char longname[12]; 105 1.1 chuck u_char xx3[16]; 106 1.1 chuck u_char speed[4]; 107 1.1 chuck u_char xx4[12]; 108 1.1 chuck }; 109 1.1 chuck 110 1.1 chuck struct mvmeprom_time { 111 1.1 chuck u_char year_BCD; 112 1.1 chuck u_char month_BCD; 113 1.1 chuck u_char day_BCD; 114 1.1 chuck u_char wday_BCD; 115 1.1 chuck u_char hour_BCD; 116 1.1 chuck u_char min_BCD; 117 1.1 chuck u_char sec_BCD; 118 1.1 chuck u_char cal_BCD; 119 1.1 chuck }; 120 1.1 chuck 121 1.1 chuck struct mvmeprom_dskio { 122 1.1 chuck u_char ctrl_lun; 123 1.1 chuck u_char dev_lun; 124 1.1 chuck u_short status; 125 1.1 chuck void *pbuffer; 126 1.1 chuck u_long blk_num; 127 1.1 chuck u_short blk_cnt; 128 1.1 chuck u_char flag; 129 1.1 chuck #define BUG_FILE_MARK 0x80 130 1.1 chuck #define IGNORE_FILENUM 0x02 131 1.1 chuck #define END_OF_FILE 0x01 132 1.1 chuck u_char addr_mod; 133 1.1 chuck }; 134 1.1 chuck #define MVMEPROM_BLOCK_SIZE 256 135 1.1 chuck 136 1.1 chuck struct mvmeprom_args { 137 1.1 chuck u_int dev_lun; 138 1.1 chuck u_int ctrl_lun; 139 1.1 chuck u_int flags; 140 1.1 chuck u_int ctrl_addr; 141 1.1 chuck u_int entry; 142 1.1 chuck u_int conf_blk; 143 1.11 scw char *nbarg_start; 144 1.11 scw char *nbarg_end; 145 1.1 chuck char *arg_start; 146 1.1 chuck char *arg_end; 147 1.1 chuck u_int cputyp; 148 1.1 chuck }; 149 1.1 chuck 150 1.1 chuck #endif 151 1.1 chuck 152 1.1 chuck #define MVMEPROM_CALL(x) \ 153 1.17 perry __asm volatile ("trap #15; .short " __STRING(x)) 154 1.1 chuck #define MVMEPROM_NOARG() \ 155 1.17 perry __asm volatile ("clrl %sp@-") 156 1.1 chuck #define MVMEPROM_ARG1(arg) \ 157 1.17 perry __asm volatile ("movel %0, %%sp@-"::"d" (arg)) 158 1.18 tsutsui #define MVMEPROM_ARG2(arg0, arg1) \ 159 1.18 tsutsui __asm volatile ("movel %0, %%sp@-;" \ 160 1.18 tsutsui "movel %1, %%sp@-;" \ 161 1.18 tsutsui :: "d" (arg0), "d" (arg1):) 162 1.1 chuck #define MVMEPROM_GETRES(ret) \ 163 1.17 perry __asm volatile ("movel %%sp@+,%0": "=d" (ret):) 164 1.12 scw #define MVMEPROM_GETSR(ret) \ 165 1.17 perry __asm volatile ("movew %%sr,%0": "=d" (ret):) 166 1.1 chuck #define MVMEPROM_RETURN(ret) \ 167 1.1 chuck MVMEPROM_GETRES(ret); \ 168 1.1 chuck return (ret); /* return a value (int) */ 169 1.5 scw /* return a byte, ret must be int */ 170 1.1 chuck #define MVMEPROM_RETURN_BYTE(ret) \ 171 1.1 chuck MVMEPROM_GETRES(ret); \ 172 1.5 scw return(int)((((unsigned int)(ret)) >> 24) & 0xff); 173 1.1 chuck #define MVMEPROM_STATRET(ret) \ 174 1.12 scw MVMEPROM_GETSR(ret); \ 175 1.12 scw return ((ret & 0x4) == 0); /* return a 'status' in the Z flag */ 176 1.1 chuck 177 1.10 scw #define MVMEPROM_REG_DEVLUN %d0 178 1.10 scw #define MVMEPROM_REG_CTRLLUN %d1 179 1.10 scw #define MVMEPROM_REG_FLAGS %d4 180 1.10 scw #define MVMEPROM_REG_CTRLADDR %a0 181 1.10 scw #define MVMEPROM_REG_ENTRY %a1 182 1.10 scw #define MVMEPROM_REG_CONFBLK %a2 183 1.10 scw #define MVMEPROM_REG_NBARGSTART %a3 184 1.10 scw #define MVMEPROM_REG_NBARGEND %a4 185 1.10 scw #define MVMEPROM_REG_ARGSTART %a5 186 1.10 scw #define MVMEPROM_REG_ARGEND %a6 187 1.10 scw 188 1.10 scw #define MVMEPROM_ARGS_DEVLUN 0x00 189 1.10 scw #define MVMEPROM_ARGS_CTRLLUN 0x04 190 1.10 scw #define MVMEPROM_ARGS_FLAGS 0x08 191 1.10 scw #define MVMEPROM_ARGS_CTRLADDR 0x0c 192 1.10 scw #define MVMEPROM_ARGS_ENTRY 0x10 193 1.10 scw #define MVMEPROM_ARGS_CONFBLK 0x14 194 1.10 scw #define MVMEPROM_ARGS_NBARGSTART 0x18 195 1.10 scw #define MVMEPROM_ARGS_NBARGEND 0x1c 196 1.10 scw #define MVMEPROM_ARGS_ARGSTART 0x20 197 1.10 scw #define MVMEPROM_ARGS_ARGEND 0x24 198 1.10 scw #define MVMEPROM_ARGS_CPUTYP 0x28 199 1.10 scw #define MVMEPROM_ARGS_MAX 0x2c 200 1.10 scw 201 1.2 chuck 202 1.2 chuck #ifndef RB_NOSYM 203 1.2 chuck #define RB_NOSYM 0x400 204 1.2 chuck #endif 205 1.2 chuck #ifndef RB_SBOOT 206 1.2 chuck #define RB_SBOOT 0x800 207 1.2 chuck #endif 208 1.2 chuck 209