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