This source file includes following definitions.
- slot_name
- to_ctrl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 #ifndef _PCIEHP_H
16 #define _PCIEHP_H
17
18 #include <linux/types.h>
19 #include <linux/pci.h>
20 #include <linux/pci_hotplug.h>
21 #include <linux/delay.h>
22 #include <linux/mutex.h>
23 #include <linux/rwsem.h>
24 #include <linux/workqueue.h>
25
26 #include "../pcie/portdrv.h"
27
28 extern bool pciehp_poll_mode;
29 extern int pciehp_poll_time;
30
31
32
33
34
35 #define ctrl_dbg(ctrl, format, arg...) \
36 pci_dbg(ctrl->pcie->port, format, ## arg)
37 #define ctrl_err(ctrl, format, arg...) \
38 pci_err(ctrl->pcie->port, format, ## arg)
39 #define ctrl_info(ctrl, format, arg...) \
40 pci_info(ctrl->pcie->port, format, ## arg)
41 #define ctrl_warn(ctrl, format, arg...) \
42 pci_warn(ctrl->pcie->port, format, ## arg)
43
44 #define SLOT_NAME_SIZE 10
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 struct controller {
84 struct pcie_device *pcie;
85
86 u32 slot_cap;
87
88 u16 slot_ctrl;
89 struct mutex ctrl_lock;
90 unsigned long cmd_started;
91 unsigned int cmd_busy:1;
92 wait_queue_head_t queue;
93
94 atomic_t pending_events;
95 unsigned int notification_enabled:1;
96 unsigned int power_fault_detected;
97 struct task_struct *poll_thread;
98
99 u8 state;
100 struct mutex state_lock;
101 struct delayed_work button_work;
102
103 struct hotplug_slot hotplug_slot;
104 struct rw_semaphore reset_lock;
105 unsigned int ist_running;
106 int request_result;
107 wait_queue_head_t requester;
108 };
109
110
111
112
113
114
115
116
117
118
119
120
121
122 #define OFF_STATE 0
123 #define BLINKINGON_STATE 1
124 #define BLINKINGOFF_STATE 2
125 #define POWERON_STATE 3
126 #define POWEROFF_STATE 4
127 #define ON_STATE 5
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142 #define DISABLE_SLOT (1 << 16)
143 #define RERUN_ISR (1 << 17)
144
145 #define ATTN_BUTTN(ctrl) ((ctrl)->slot_cap & PCI_EXP_SLTCAP_ABP)
146 #define POWER_CTRL(ctrl) ((ctrl)->slot_cap & PCI_EXP_SLTCAP_PCP)
147 #define MRL_SENS(ctrl) ((ctrl)->slot_cap & PCI_EXP_SLTCAP_MRLSP)
148 #define ATTN_LED(ctrl) ((ctrl)->slot_cap & PCI_EXP_SLTCAP_AIP)
149 #define PWR_LED(ctrl) ((ctrl)->slot_cap & PCI_EXP_SLTCAP_PIP)
150 #define HP_SUPR_RM(ctrl) ((ctrl)->slot_cap & PCI_EXP_SLTCAP_HPS)
151 #define EMI(ctrl) ((ctrl)->slot_cap & PCI_EXP_SLTCAP_EIP)
152 #define NO_CMD_CMPL(ctrl) ((ctrl)->slot_cap & PCI_EXP_SLTCAP_NCCS)
153 #define PSN(ctrl) (((ctrl)->slot_cap & PCI_EXP_SLTCAP_PSN) >> 19)
154
155 void pciehp_request(struct controller *ctrl, int action);
156 void pciehp_handle_button_press(struct controller *ctrl);
157 void pciehp_handle_disable_request(struct controller *ctrl);
158 void pciehp_handle_presence_or_link_change(struct controller *ctrl, u32 events);
159 int pciehp_configure_device(struct controller *ctrl);
160 void pciehp_unconfigure_device(struct controller *ctrl, bool presence);
161 void pciehp_queue_pushbutton_work(struct work_struct *work);
162 struct controller *pcie_init(struct pcie_device *dev);
163 int pcie_init_notification(struct controller *ctrl);
164 void pcie_shutdown_notification(struct controller *ctrl);
165 void pcie_clear_hotplug_events(struct controller *ctrl);
166 void pcie_enable_interrupt(struct controller *ctrl);
167 void pcie_disable_interrupt(struct controller *ctrl);
168 int pciehp_power_on_slot(struct controller *ctrl);
169 void pciehp_power_off_slot(struct controller *ctrl);
170 void pciehp_get_power_status(struct controller *ctrl, u8 *status);
171
172 #define INDICATOR_NOOP -1
173 void pciehp_set_indicators(struct controller *ctrl, int pwr, int attn);
174
175 void pciehp_get_latch_status(struct controller *ctrl, u8 *status);
176 int pciehp_query_power_fault(struct controller *ctrl);
177 int pciehp_card_present(struct controller *ctrl);
178 int pciehp_card_present_or_link_active(struct controller *ctrl);
179 int pciehp_check_link_status(struct controller *ctrl);
180 int pciehp_check_link_active(struct controller *ctrl);
181 void pciehp_release_ctrl(struct controller *ctrl);
182
183 int pciehp_sysfs_enable_slot(struct hotplug_slot *hotplug_slot);
184 int pciehp_sysfs_disable_slot(struct hotplug_slot *hotplug_slot);
185 int pciehp_reset_slot(struct hotplug_slot *hotplug_slot, int probe);
186 int pciehp_get_attention_status(struct hotplug_slot *hotplug_slot, u8 *status);
187 int pciehp_set_raw_indicator_status(struct hotplug_slot *h_slot, u8 status);
188 int pciehp_get_raw_indicator_status(struct hotplug_slot *h_slot, u8 *status);
189
190 static inline const char *slot_name(struct controller *ctrl)
191 {
192 return hotplug_slot_name(&ctrl->hotplug_slot);
193 }
194
195 static inline struct controller *to_ctrl(struct hotplug_slot *hotplug_slot)
196 {
197 return container_of(hotplug_slot, struct controller, hotplug_slot);
198 }
199
200 #endif