Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
linux
pci_hotplug.h
Go to the documentation of this file.
1
/*
2
* PCI HotPlug Core Functions
3
*
4
* Copyright (C) 1995,2001 Compaq Computer Corporation
5
* Copyright (C) 2001 Greg Kroah-Hartman (
[email protected]
)
6
* Copyright (C) 2001 IBM Corp.
7
*
8
* All rights reserved.
9
*
10
* This program is free software; you can redistribute it and/or modify
11
* it under the terms of the GNU General Public License as published by
12
* the Free Software Foundation; either version 2 of the License, or (at
13
* your option) any later version.
14
*
15
* This program is distributed in the hope that it will be useful, but
16
* WITHOUT ANY WARRANTY; without even the implied warranty of
17
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
18
* NON INFRINGEMENT. See the GNU General Public License for more
19
* details.
20
*
21
* You should have received a copy of the GNU General Public License
22
* along with this program; if not, write to the Free Software
23
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
24
*
25
* Send feedback to <
[email protected]
>
26
*
27
*/
28
#ifndef _PCI_HOTPLUG_H
29
#define _PCI_HOTPLUG_H
30
31
/* These values come from the PCI Express Spec */
32
enum
pcie_link_width
{
33
PCIE_LNK_WIDTH_RESRV
= 0x00,
34
PCIE_LNK_X1
= 0x01,
35
PCIE_LNK_X2
= 0x02,
36
PCIE_LNK_X4
= 0x04,
37
PCIE_LNK_X8
= 0x08,
38
PCIE_LNK_X12
= 0x0C,
39
PCIE_LNK_X16
= 0x10,
40
PCIE_LNK_X32
= 0x20,
41
PCIE_LNK_WIDTH_UNKNOWN
= 0xFF,
42
};
43
72
struct
hotplug_slot_ops
{
73
struct
module
*
owner
;
74
const
char
*
mod_name
;
75
int
(*
enable_slot
) (
struct
hotplug_slot *
slot
);
76
int
(*
disable_slot
) (
struct
hotplug_slot *
slot
);
77
int
(*
set_attention_status
) (
struct
hotplug_slot *
slot
,
u8
value
);
78
int
(*
hardware_test
) (
struct
hotplug_slot *
slot
,
u32
value
);
79
int
(*
get_power_status
) (
struct
hotplug_slot *
slot
,
u8
*
value
);
80
int
(*
get_attention_status
) (
struct
hotplug_slot *
slot
,
u8
*
value
);
81
int
(*
get_latch_status
) (
struct
hotplug_slot *
slot
,
u8
*
value
);
82
int
(*
get_adapter_status
) (
struct
hotplug_slot *
slot
,
u8
*
value
);
83
};
84
94
struct
hotplug_slot_info
{
95
u8
power_status
;
96
u8
attention_status
;
97
u8
latch_status
;
98
u8
adapter_status
;
99
};
100
111
struct
hotplug_slot {
112
struct
hotplug_slot_ops
*
ops
;
113
struct
hotplug_slot_info
*
info
;
114
void
(*
release
) (
struct
hotplug_slot *
slot
);
115
void
*
private
;
116
117
/* Variables below this are for use only by the hotplug pci core. */
118
struct
list_head
slot_list;
119
struct
pci_slot
*
pci_slot
;
120
};
121
#define to_hotplug_slot(n) container_of(n, struct hotplug_slot, kobj)
122
123
static
inline
const
char
*hotplug_slot_name(
const
struct
hotplug_slot *
slot
)
124
{
125
return
pci_slot_name(slot->pci_slot);
126
}
127
128
extern
int
__pci_hp_register
(
struct
hotplug_slot *
slot
,
struct
pci_bus
*pbus,
129
int
nr
,
const
char
*
name
,
130
struct
module
*
owner
,
const
char
*mod_name);
131
extern
int
pci_hp_deregister
(
struct
hotplug_slot *
slot
);
132
extern
int
__must_check
pci_hp_change_slot_info
(
struct
hotplug_slot *
slot
,
133
struct
hotplug_slot_info
*
info
);
134
135
/* use a define to avoid include chaining to get THIS_MODULE & friends */
136
#define pci_hp_register(slot, pbus, devnr, name) \
137
__pci_hp_register(slot, pbus, devnr, name, THIS_MODULE, KBUILD_MODNAME)
138
139
/* PCI Setting Record (Type 0) */
140
struct
hpp_type0
{
141
u32
revision
;
142
u8
cache_line_size
;
143
u8
latency_timer
;
144
u8
enable_serr
;
145
u8
enable_perr
;
146
};
147
148
/* PCI-X Setting Record (Type 1) */
149
struct
hpp_type1
{
150
u32
revision
;
151
u8
max_mem_read
;
152
u8
avg_max_split
;
153
u16
tot_max_split
;
154
};
155
156
/* PCI Express Setting Record (Type 2) */
157
struct
hpp_type2
{
158
u32
revision
;
159
u32
unc_err_mask_and
;
160
u32
unc_err_mask_or
;
161
u32
unc_err_sever_and
;
162
u32
unc_err_sever_or
;
163
u32
cor_err_mask_and
;
164
u32
cor_err_mask_or
;
165
u32
adv_err_cap_and
;
166
u32
adv_err_cap_or
;
167
u16
pci_exp_devctl_and
;
168
u16
pci_exp_devctl_or
;
169
u16
pci_exp_lnkctl_and
;
170
u16
pci_exp_lnkctl_or
;
171
u32
sec_unc_err_sever_and
;
172
u32
sec_unc_err_sever_or
;
173
u32
sec_unc_err_mask_and
;
174
u32
sec_unc_err_mask_or
;
175
};
176
177
struct
hotplug_params
{
178
struct
hpp_type0
*
t0
;
/* Type0: NULL if not available */
179
struct
hpp_type1
*
t1
;
/* Type1: NULL if not available */
180
struct
hpp_type2
*
t2
;
/* Type2: NULL if not available */
181
struct
hpp_type0
type0_data
;
182
struct
hpp_type1
type1_data
;
183
struct
hpp_type2
type2_data
;
184
};
185
186
#ifdef CONFIG_ACPI
187
#include <
acpi/acpi.h
>
188
#include <
acpi/acpi_bus.h
>
189
int
pci_get_hp_params
(
struct
pci_dev
*
dev
,
struct
hotplug_params
*hpp);
190
int
acpi_get_hp_hw_control_from_firmware
(
struct
pci_dev
*
dev
,
u32
flags
);
191
int
acpi_pci_check_ejectable
(
struct
pci_bus
*pbus,
acpi_handle
handle
);
192
int
acpi_pci_detect_ejectable
(
acpi_handle
handle
);
193
#else
194
static
inline
int
pci_get_hp_params
(
struct
pci_dev
*
dev
,
195
struct
hotplug_params
*hpp)
196
{
197
return
-
ENODEV
;
198
}
199
#endif
200
201
void
pci_configure_slot
(
struct
pci_dev
*
dev
);
202
#endif
203
Generated on Thu Jan 10 2013 14:52:17 for Linux Kernel by
1.8.2