blob: c7ca21b5d1831a379baaff6131e18ef1a565b4fa (
plain)
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
/* Copyright 2013-2014 IBM Corp.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
* implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef __LXVPD_H
#define __LXVPD_H
#define LX_VPD_1S2U_BACKPLANE 0x3100040100300041ull
#define LX_VPD_2S2U_BACKPLANE 0x3100040100300042ull
#define LX_VPD_SHARK_BACKPLANE 0x3100040100300942ull
#define LX_VPD_1S4U_BACKPLANE 0x3100040100300043ull
#define LX_VPD_2S4U_BACKPLANE 0x3100040100300044ull
struct slot_p0 {
union {
uint8_t byte;
struct {
uint8_t pluggable:1;
uint8_t pluggable_location:3;
uint8_t power_ctl:1;
uint8_t rsvd_5:1;
uint8_t upstream_port:1;
uint8_t alt_load_source:1;
};
};
};
struct slot_p1 {
uint8_t rsvd_0:1;
uint8_t wired_lanes:3;
uint8_t rsvd_4:4;
};
struct slot_p2 {
uint8_t rsvd_0:1;
uint8_t bus_clock:3;
uint8_t connector_type:4;
};
struct slot_p3 {
union {
uint8_t byte;
struct {
uint8_t height:1;
uint8_t length:1;
uint8_t left_mech:1;
uint8_t right_mech:1;
uint8_t pow_led_kvm:1;
uint8_t pow_led_fsp:1;
uint8_t attn_led_kvm:1;
uint8_t attn_led_fsp:1;
};
};
};
struct pci_slot_entry_1004 {
uint8_t pba;
uint8_t sba;
uint8_t phb_or_slot_type;
char label[3];
uint16_t bis;
struct slot_p0 p0;
struct slot_p1 p1;
struct slot_p2 p2;
struct slot_p3 p3;
uint8_t left_pitch;
uint8_t right_pitch;
uint8_t slot_index;
uint8_t max_slot_power;
};
/* P8 PCI Slot Entry Definitions -- 1005 */
struct pci_slot_entry_1005 {
union {
uint8_t pba;
struct {
uint8_t switch_id:4;
uint8_t vswitch_id:4;
};
};
uint8_t switch_device_id;
uint8_t slot_type:4;
uint8_t phb_id:4;
char label[8];
uint8_t rsvd_11[4];
struct slot_p0 p0;
struct slot_p1 p1;
struct slot_p2 p2;
struct slot_p3 p3;
uint8_t left_pitch;
uint8_t right_pitch;
uint8_t slot_index;
uint8_t rsvd_22[2];
};
struct lxvpd_pci_slot {
struct pci_slot *pci_slot;
uint8_t switch_id;
uint8_t vswitch_id;
uint8_t dev_id;
char label[9];
bool pluggable;
bool power_ctl;
uint8_t wired_lanes;
uint8_t bus_clock;
uint8_t connector_type;
uint8_t card_desc;
uint8_t card_mech;
uint8_t pwr_led_ctl;
uint8_t attn_led_ctl;
uint8_t slot_index;
};
extern void lxvpd_process_slot_entries(struct phb *phb, struct dt_node *node,
uint8_t chip_id, uint8_t index,
uint32_t slot_size);
extern void *lxvpd_get_slot(struct pci_slot *slot);
extern void lxvpd_extract_info(struct pci_slot *slot,
struct lxvpd_pci_slot *s);
extern void lxvpd_add_slot_properties(struct pci_slot *slot,
struct dt_node *np);
#endif /* __LXVPD_H */
|