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