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