aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-x86_64/rio.h
blob: 1f315c39d76e89a18ea43baa8621ca62064ac0eb (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/*
 * Derived from include/asm-i386/mach-summit/mach_mpparse.h
 *          and include/asm-i386/mach-default/bios_ebda.h
 *
 * Author: Laurent Vivier <Laurent.Vivier@bull.net>
 *
 */

#ifndef __ASM_RIO_H
#define __ASM_RIO_H

#define RIO_TABLE_VERSION	3

struct rio_table_hdr {
	u8 version;      /* Version number of this data structure  */
	u8 num_scal_dev; /* # of Scalability devices               */
	u8 num_rio_dev;  /* # of RIO I/O devices                   */
} __attribute__((packed));

struct scal_detail {
	u8 node_id;      /* Scalability Node ID                    */
	u32  CBAR;       /* Address of 1MB register space          */
	u8 port0node;    /* Node ID port connected to: 0xFF=None   */
	u8 port0port;    /* Port num port connected to: 0,1,2, or  */
	                 /* 0xFF=None                              */
	u8 port1node;    /* Node ID port connected to: 0xFF = None */
	u8 port1port;    /* Port num port connected to: 0,1,2, or  */
	                 /* 0xFF=None                              */
	u8 port2node;    /* Node ID port connected to: 0xFF = None */
	u8 port2port;    /* Port num port connected to: 0,1,2, or  */
	                 /* 0xFF=None                              */
	u8 chassis_num;  /* 1 based Chassis number (1 = boot node) */
} __attribute__((packed));

struct rio_detail {
	u8 node_id;      /* RIO Node ID                            */
	u32  BBAR;       /* Address of 1MB register space          */
	u8 type;         /* Type of device                         */
	u8 owner_id;     /* Node ID of Hurricane that owns this    */
	                 /* node                                   */
	u8 port0node;    /* Node ID port connected to: 0xFF=None   */
	u8 port0port;    /* Port num port connected to: 0,1,2, or  */
	                 /* 0xFF=None                              */
	u8 port1node;    /* Node ID port connected to: 0xFF=None   */
	u8 port1port;    /* Port num port connected to: 0,1,2, or  */
	                 /* 0xFF=None                              */
	u8 first_slot;   /* Lowest slot number below this Calgary  */
	u8 status;       /* Bit 0 = 1 : the XAPIC is used          */
	                 /*       = 0 : the XAPIC is not used, ie: */
	                 /*            ints fwded to another XAPIC */
	                 /*           Bits1:7 Reserved             */
	u8 WP_index;     /* instance index - lower ones have       */
	                 /*     lower slot numbers/PCI bus numbers */
	u8 chassis_num;  /* 1 based Chassis number                 */
} __attribute__((packed));

enum {
	HURR_SCALABILTY	= 0,  /* Hurricane Scalability info */
	HURR_RIOIB	= 2,  /* Hurricane RIOIB info       */
	COMPAT_CALGARY	= 4,  /* Compatibility Calgary      */
	ALT_CALGARY	= 5,  /* Second Planar Calgary      */
};

/*
 * there is a real-mode segmented pointer pointing to the
 * 4K EBDA area at 0x40E.
 */

static inline unsigned long get_bios_ebda(void)
{
	unsigned long address= *(unsigned short *)phys_to_virt(0x40Eul);
	address <<= 4;
	return address;
}

#endif /* __ASM_RIO_H */