Merge master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6
[linux-2.6] / include / asm-powerpc / iseries / hv_call_xm.h
1 /*
2  * This file contains the "hypervisor call" interface which is used to
3  * drive the hypervisor from SLIC.
4  */
5 #ifndef _ASM_POWERPC_ISERIES_HV_CALL_XM_H
6 #define _ASM_POWERPC_ISERIES_HV_CALL_XM_H
7
8 #include <asm/iseries/hv_call_sc.h>
9 #include <asm/iseries/hv_types.h>
10
11 #define HvCallXmGetTceTableParms        HvCallXm +  0
12 #define HvCallXmTestBus                 HvCallXm +  1
13 #define HvCallXmConnectBusUnit          HvCallXm +  2
14 #define HvCallXmLoadTod                 HvCallXm +  8
15 #define HvCallXmTestBusUnit             HvCallXm +  9
16 #define HvCallXmSetTce                  HvCallXm + 11
17 #define HvCallXmSetTces                 HvCallXm + 13
18
19 /*
20  * Structure passed to HvCallXm_getTceTableParms
21  */
22 struct iommu_table_cb {
23         unsigned long   itc_busno;      /* Bus number for this tce table */
24         unsigned long   itc_start;      /* Will be NULL for secondary */
25         unsigned long   itc_totalsize;  /* Size (in pages) of whole table */
26         unsigned long   itc_offset;     /* Index into real tce table of the
27                                            start of our section */
28         unsigned long   itc_size;       /* Size (in pages) of our section */
29         unsigned long   itc_index;      /* Index of this tce table */
30         unsigned short  itc_maxtables;  /* Max num of tables for partition */
31         unsigned char   itc_virtbus;    /* Flag to indicate virtual bus */
32         unsigned char   itc_slotno;     /* IOA Tce Slot Index */
33         unsigned char   itc_rsvd[4];
34 };
35
36 static inline void HvCallXm_getTceTableParms(u64 cb)
37 {
38         HvCall1(HvCallXmGetTceTableParms, cb);
39 }
40
41 static inline u64 HvCallXm_setTce(u64 tceTableToken, u64 tceOffset, u64 tce)
42 {
43         return HvCall3(HvCallXmSetTce, tceTableToken, tceOffset, tce);
44 }
45
46 static inline u64 HvCallXm_setTces(u64 tceTableToken, u64 tceOffset,
47                 u64 numTces, u64 tce1, u64 tce2, u64 tce3, u64 tce4)
48 {
49         return HvCall7(HvCallXmSetTces, tceTableToken, tceOffset, numTces,
50                              tce1, tce2, tce3, tce4);
51 }
52
53 static inline u64 HvCallXm_testBus(u16 busNumber)
54 {
55         return HvCall1(HvCallXmTestBus, busNumber);
56 }
57
58 static inline u64 HvCallXm_testBusUnit(u16 busNumber, u8 subBusNumber,
59                 u8 deviceId)
60 {
61         return HvCall2(HvCallXmTestBusUnit, busNumber,
62                         (subBusNumber << 8) | deviceId);
63 }
64
65 static inline u64 HvCallXm_connectBusUnit(u16 busNumber, u8 subBusNumber,
66                 u8 deviceId, u64 interruptToken)
67 {
68         return HvCall5(HvCallXmConnectBusUnit, busNumber,
69                         (subBusNumber << 8) | deviceId, interruptToken, 0,
70                         0 /* HvLpConfig::mapDsaToQueueIndex(HvLpDSA(busNumber, xBoard, xCard)) */);
71 }
72
73 static inline u64 HvCallXm_loadTod(void)
74 {
75         return HvCall0(HvCallXmLoadTod);
76 }
77
78 #endif /* _ASM_POWERPC_ISERIES_HV_CALL_XM_H */