Home | History | Annotate | Line # | Download | only in altboot
globals.h revision 1.13.2.3
      1  1.13.2.3      yamt /* $NetBSD: globals.h,v 1.13.2.3 2012/05/23 10:07:48 yamt Exp $ */
      2       1.3       phx 
      3       1.3       phx #ifdef DEBUG
      4       1.3       phx #define	DPRINTF(x)	printf x
      5       1.3       phx #else
      6       1.3       phx #define	DPRINTF(x)
      7       1.3       phx #endif
      8       1.1  nisimura 
      9       1.1  nisimura /* clock feed */
     10       1.1  nisimura #ifndef EXT_CLK_FREQ
     11       1.1  nisimura #define EXT_CLK_FREQ	33333333	/* external clock (PCI clock) */
     12       1.1  nisimura #endif
     13       1.1  nisimura 
     14       1.1  nisimura /* brd type */
     15       1.1  nisimura extern int brdtype;
     16       1.1  nisimura #define BRD_SANDPOINTX2		2
     17       1.1  nisimura #define BRD_SANDPOINTX3		3
     18       1.1  nisimura #define BRD_ENCOREPP1		10
     19       1.1  nisimura #define BRD_KUROBOX		100
     20      1.12       phx #define BRD_QNAPTS		101
     21       1.1  nisimura #define BRD_SYNOLOGY		102
     22       1.1  nisimura #define BRD_STORCENTER		103
     23       1.5  nisimura #define BRD_DLINKDSM		104
     24       1.6  nisimura #define BRD_NH230NAS		105
     25  1.13.2.2      yamt #define BRD_KUROBOXT4		106
     26       1.1  nisimura #define BRD_UNKNOWN		-1
     27       1.1  nisimura 
     28       1.1  nisimura struct brdprop {
     29       1.1  nisimura 	const char *family;
     30       1.1  nisimura 	const char *verbose;
     31       1.1  nisimura 	int brdtype;
     32       1.1  nisimura 	uint32_t extclk;
     33       1.1  nisimura 	char *consname;
     34       1.1  nisimura 	int consport;
     35       1.1  nisimura 	int consspeed;
     36       1.1  nisimura 	void (*setup)(struct brdprop *);
     37       1.1  nisimura 	void (*brdfix)(struct brdprop *);
     38       1.1  nisimura 	void (*pcifix)(struct brdprop *);
     39  1.13.2.3      yamt 	void (*launch)(struct brdprop *);
     40       1.1  nisimura 	void (*reset)(void);
     41       1.1  nisimura };
     42       1.1  nisimura 
     43       1.1  nisimura extern uint32_t cpuclock, busclock;
     44       1.1  nisimura 
     45       1.1  nisimura /* board specific support code */
     46       1.1  nisimura struct brdprop *brd_lookup(int);
     47  1.13.2.2      yamt int get_drive_config(int);
     48      1.11       phx int tstchar(void);
     49  1.13.2.1      yamt #ifdef DEBUG
     50  1.13.2.1      yamt void sat_write(char *, int);
     51  1.13.2.1      yamt int sat_getch(void);
     52  1.13.2.1      yamt int sat_tstch(void);
     53  1.13.2.1      yamt #endif
     54       1.1  nisimura void read_mac_from_flash(uint8_t *);
     55       1.1  nisimura 
     56       1.1  nisimura /* PPC processor ctl */
     57       1.1  nisimura void __syncicache(void *, size_t);
     58       1.1  nisimura 
     59      1.13       phx /* i/o access */
     60      1.13       phx void out8(unsigned, unsigned);
     61      1.13       phx unsigned in8(unsigned);
     62       1.1  nisimura void out16rb(unsigned, unsigned);
     63       1.1  nisimura void out32rb(unsigned, unsigned);
     64       1.1  nisimura unsigned in16rb(unsigned);
     65       1.1  nisimura unsigned in32rb(unsigned);
     66       1.1  nisimura void iohtole16(unsigned, unsigned);
     67       1.1  nisimura void iohtole32(unsigned, unsigned);
     68       1.1  nisimura unsigned iole32toh(unsigned);
     69       1.1  nisimura unsigned iole16toh(unsigned);
     70       1.1  nisimura 
     71       1.1  nisimura /* far call would never return */
     72       1.1  nisimura void run(void *, void *, void *, void *, void *);
     73       1.1  nisimura 
     74       1.1  nisimura /* micro second precision delay */
     75       1.1  nisimura void delay(unsigned);
     76       1.1  nisimura 
     77       1.1  nisimura /* PCI stuff */
     78       1.5  nisimura struct pcidev {
     79       1.5  nisimura 	unsigned bdf;	/* bus.dev.func */
     80       1.5  nisimura 	unsigned pvd;	/* device ID */
     81       1.5  nisimura 	void *drv;	/* driver */
     82       1.5  nisimura };
     83  1.13.2.3      yamt extern struct pcidev lata[2];
     84  1.13.2.3      yamt extern struct pcidev lnif[2];
     85  1.13.2.3      yamt extern struct pcidev lusb[3];
     86  1.13.2.3      yamt extern int nata, nnif, nusb;
     87  1.13.2.3      yamt 
     88       1.1  nisimura void  pcisetup(void);
     89       1.1  nisimura void  pcifixup(void);
     90  1.13.2.3      yamt void  launchfixup(void);
     91       1.1  nisimura unsigned pcimaketag(int, int, int);
     92       1.1  nisimura void  pcidecomposetag(unsigned, int *, int *, int *);
     93       1.1  nisimura int   pcifinddev(unsigned, unsigned, unsigned *);
     94       1.5  nisimura int   pcilookup(unsigned, struct pcidev *, int);
     95       1.1  nisimura unsigned pcicfgread(unsigned, int);
     96       1.1  nisimura void  pcicfgwrite(unsigned, int, unsigned);
     97       1.1  nisimura 
     98       1.1  nisimura #define PCI_ID_REG			0x00
     99       1.1  nisimura #define  PCI_VENDOR(id)			((id) & 0xffff)
    100       1.1  nisimura #define  PCI_PRODUCT(id)		(((id) >> 16) & 0xffff)
    101       1.1  nisimura #define  PCI_VENDOR_INVALID		0xffff
    102       1.1  nisimura #define  PCI_DEVICE(v,p)		((v) | ((p) << 16))
    103       1.9       phx #define PCI_COMMAND_STATUS_REG		0x04
    104       1.1  nisimura #define PCI_CLASS_REG			0x08
    105       1.9       phx #define  PCI_CLASS(v)			(((v) >> 16) & 0xffff)
    106       1.9       phx #define  PCI_SUBCLASS(v)		(((v) >> 16) & 0xff)
    107       1.9       phx #define  PCI_INTERFACE(v)		(((v) & 0xff00) >> 8)
    108       1.9       phx #define  PCI_REVISION(v)		((v) & 0xff)
    109       1.1  nisimura #define  PCI_CLASS_PPB			0x0604
    110       1.1  nisimura #define  PCI_CLASS_ETH			0x0200
    111       1.7       phx #define  PCI_CLASS_SCSI			0x0100
    112       1.1  nisimura #define  PCI_CLASS_IDE			0x0101
    113       1.1  nisimura #define  PCI_CLASS_RAID			0x0104
    114       1.1  nisimura #define  PCI_CLASS_SATA			0x0106
    115       1.1  nisimura #define  PCI_CLASS_MISCSTORAGE		0x0180
    116       1.5  nisimura #define  PCI_CLASS_USB			0x0c03
    117       1.1  nisimura #define PCI_BHLC_REG			0x0c
    118       1.1  nisimura #define  PCI_HDRTYPE_TYPE(r)		(((r) >> 16) & 0x7f)
    119       1.1  nisimura #define  PCI_HDRTYPE_MULTIFN(r)		((r) & (0x80 << 16))
    120       1.1  nisimura 
    121       1.1  nisimura /*
    122       1.1  nisimura  * "Map B" layout
    123       1.1  nisimura  *
    124       1.1  nisimura  * practice direct mode configuration scheme with CONFIG_ADDR
    125       1.1  nisimura  * (0xfec0'0000) and CONFIG_DATA (0xfee0'0000).
    126       1.1  nisimura  */
    127       1.1  nisimura #define PCI_MEMBASE	0x80000000	/* PCI memory space */
    128       1.1  nisimura #define PCI_MEMLIMIT	0xfbffffff	/* EUMB is next to this */
    129       1.1  nisimura #define PCI_IOBASE	0x00001000	/* reserves room for southbridge */
    130       1.1  nisimura #define PCI_IOLIMIT	0x000fffff
    131       1.1  nisimura #define PCI_XIOBASE	0xfe000000	/* ISA/PCI io space */
    132       1.1  nisimura #define CONFIG_ADDR	0xfec00000
    133       1.1  nisimura #define CONFIG_DATA	0xfee00000
    134       1.1  nisimura 
    135       1.1  nisimura /* cache ops */
    136       1.1  nisimura void _wb(uint32_t, uint32_t);
    137       1.1  nisimura void _wbinv(uint32_t, uint32_t);
    138       1.1  nisimura void _inv(uint32_t, uint32_t);
    139       1.1  nisimura 
    140       1.8       phx /* parsing */
    141       1.8       phx uint32_t read_hex(const char *);
    142       1.8       phx 
    143       1.1  nisimura /* heap */
    144       1.1  nisimura void *allocaligned(size_t, size_t);
    145       1.1  nisimura 
    146       1.1  nisimura /* NIF support */
    147       1.1  nisimura int net_open(struct open_file *, ...);
    148       1.1  nisimura int net_close(struct open_file *);
    149       1.1  nisimura int net_strategy(void *, int, daddr_t, size_t, void *, size_t *);
    150       1.1  nisimura 
    151       1.5  nisimura int netif_init(void *);
    152      1.10       phx void netif_shutdown_all(void);
    153       1.1  nisimura int netif_open(void *);
    154       1.1  nisimura int netif_close(int);
    155       1.1  nisimura 
    156       1.1  nisimura #define NIF_DECL(xxx) \
    157       1.1  nisimura     int xxx ## _match(unsigned, void *); \
    158       1.1  nisimura     void * xxx ## _init(unsigned, void *); \
    159       1.1  nisimura     int xxx ## _send(void *, char *, unsigned); \
    160      1.10       phx     int xxx ## _recv(void *, char *, unsigned, unsigned); \
    161      1.10       phx     void xxx ## _shutdown(void *)
    162       1.1  nisimura 
    163       1.1  nisimura NIF_DECL(fxp);
    164       1.1  nisimura NIF_DECL(tlp);
    165       1.1  nisimura NIF_DECL(rge);
    166       1.1  nisimura NIF_DECL(skg);
    167       1.7       phx NIF_DECL(stg);
    168       1.1  nisimura 
    169       1.1  nisimura /* DSK support */
    170  1.13.2.3      yamt #define MAX_UNITS 4
    171  1.13.2.3      yamt 
    172  1.13.2.3      yamt struct disk {
    173  1.13.2.3      yamt 	char xname[8];
    174  1.13.2.3      yamt 	void *dvops;
    175  1.13.2.3      yamt 	unsigned unittag;
    176  1.13.2.3      yamt 	uint16_t ident[128];
    177  1.13.2.3      yamt 	uint64_t nsect;
    178  1.13.2.3      yamt 	uint64_t first;
    179  1.13.2.3      yamt 	void *dlabel;
    180  1.13.2.3      yamt 	int part;
    181  1.13.2.3      yamt 	void *fsops;
    182  1.13.2.3      yamt 	int (*lba_read)(struct disk *, int64_t, int, void *);
    183  1.13.2.3      yamt };
    184       1.1  nisimura 
    185  1.13.2.3      yamt int dskdv_init(void *);
    186  1.13.2.3      yamt int dlabel_valid(int);
    187       1.1  nisimura int dsk_open(struct open_file *, ...);
    188       1.1  nisimura int dsk_close(struct open_file *);
    189       1.1  nisimura int dsk_strategy(void *, int, daddr_t, size_t, void *, size_t *);
    190       1.1  nisimura struct fs_ops *dsk_fsops(struct open_file *);
    191       1.1  nisimura 
    192       1.7       phx #define DSK_DECL(xxx) \
    193       1.7       phx     int xxx ## _match(unsigned, void *); \
    194       1.7       phx     void * xxx ## _init(unsigned, void *)
    195       1.7       phx 
    196       1.7       phx DSK_DECL(pciide);
    197       1.7       phx DSK_DECL(siisata);
    198       1.7       phx 
    199       1.1  nisimura /* status */
    200       1.1  nisimura #define ATA_STS_BUSY		0x80
    201       1.1  nisimura #define ATA_STS_DRDY		0x40
    202       1.1  nisimura #define ATA_STS_ERR 		0x01
    203       1.1  nisimura /* command */
    204  1.13.2.2      yamt #define ATA_CMD_CHKPWR		0xe5
    205       1.1  nisimura #define ATA_CMD_IDENT		0xec
    206  1.13.2.2      yamt #define ATA_CMD_IDLE		0xe3
    207       1.1  nisimura #define ATA_CMD_READ		0x20
    208       1.1  nisimura #define ATA_CMD_READ_EXT	0x24
    209       1.1  nisimura #define ATA_CMD_SETF		0xef
    210  1.13.2.2      yamt #define ATA_CMD_STANDBY		0xe2
    211       1.1  nisimura /* device */
    212       1.1  nisimura #define ATA_DEV_LBA		0xe0
    213       1.1  nisimura #define ATA_DEV_OBS		0x90
    214       1.1  nisimura /* control */
    215       1.1  nisimura #define ATA_DREQ		0x08
    216       1.1  nisimura #define ATA_SRST		0x04
    217  1.13.2.2      yamt /* power state */
    218  1.13.2.2      yamt #define ATA_PWR_ACTIVE		0xff
    219  1.13.2.2      yamt #define ATA_PWR_IDLE		0x80
    220  1.13.2.2      yamt #define ATA_PWR_STANDBY		0x00
    221       1.1  nisimura 
    222       1.1  nisimura #define ATA_XFER		0x03
    223       1.1  nisimura #define XFER_PIO4		0x0c
    224       1.1  nisimura #define XFER_PIO0		0x08
    225       1.1  nisimura 
    226       1.1  nisimura struct dvata_chan {
    227       1.1  nisimura 	uint32_t cmd, ctl, alt, dma;
    228       1.1  nisimura };
    229       1.1  nisimura #define _DAT	0	/* RW */
    230       1.1  nisimura #define _ERR	1	/* R */
    231       1.1  nisimura #define _FEA	1	/* W */
    232       1.1  nisimura #define _NSECT	2	/* RW */
    233       1.1  nisimura #define _LBAL	3	/* RW */
    234       1.1  nisimura #define _LBAM	4	/* RW */
    235       1.1  nisimura #define _LBAH	5	/* RW */
    236       1.1  nisimura #define _DEV	6	/* W */
    237       1.1  nisimura #define _STS	7	/* R */
    238       1.1  nisimura #define _CMD	7	/* W */
    239       1.1  nisimura 
    240       1.1  nisimura struct dkdev_ata {
    241       1.1  nisimura 	unsigned tag;
    242       1.1  nisimura 	uint32_t bar[6];
    243       1.1  nisimura 	struct dvata_chan chan[4];
    244       1.1  nisimura 	int presense[4];
    245       1.1  nisimura 	char *iobuf;
    246       1.1  nisimura };
    247       1.1  nisimura 
    248       1.1  nisimura int spinwait_unbusy(struct dkdev_ata *, int, int, const char **);
    249       1.1  nisimura int perform_atareset(struct dkdev_ata *, int);
    250  1.13.2.2      yamt void wakeup_drive(struct dkdev_ata *, int);
    251  1.13.2.2      yamt int atachkpwr(struct dkdev_ata *, int);
    252