Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
d236fbb8
Commit
d236fbb8
authored
Jun 08, 2002
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://linuxusb.bkbits.net/linus-2.5
into home.transmeta.com:/home/torvalds/v2.5/linux
parents
b0a19b4f
7fc47df1
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
84 additions
and
86 deletions
+84
-86
drivers/hotplug/ibmphp_core.c
drivers/hotplug/ibmphp_core.c
+3
-3
drivers/hotplug/ibmphp_ebda.c
drivers/hotplug/ibmphp_ebda.c
+9
-8
drivers/hotplug/ibmphp_hpc.c
drivers/hotplug/ibmphp_hpc.c
+63
-68
drivers/hotplug/ibmphp_res.c
drivers/hotplug/ibmphp_res.c
+8
-7
drivers/hotplug/pci_hotplug_core.c
drivers/hotplug/pci_hotplug_core.c
+1
-0
No files found.
drivers/hotplug/ibmphp_core.c
View file @
d236fbb8
...
...
@@ -44,7 +44,7 @@
#define get_ctrl_revision(sl, rev) ibmphp_hpc_readslot (sl, READ_REVLEVEL, rev)
#define get_hpc_options(sl, opt) ibmphp_hpc_readslot (sl, READ_HPCOPTIONS, opt)
#define DRIVER_VERSION "0.
2
"
#define DRIVER_VERSION "0.
3
"
#define DRIVER_DESC "IBM Hot Plug PCI Controller Driver"
int
ibmphp_debug
;
...
...
@@ -106,7 +106,7 @@ static inline int slot_update (struct slot **sl)
return
rc
;
}
static
int
get_max_slots
(
void
)
static
int
__init
get_max_slots
(
void
)
{
struct
list_head
*
tmp
;
int
slot_count
=
0
;
...
...
@@ -528,7 +528,7 @@ static int get_card_bus_names (struct hotplug_slot *hotplug_slot, char * value)
* function. It will also power off empty slots that are powered on since BIOS
* leaves those on, albeit disconnected
******************************************************************************/
static
int
init_ops
(
void
)
static
int
__init
init_ops
(
void
)
{
struct
slot
*
slot_cur
;
int
retval
;
...
...
drivers/hotplug/ibmphp_ebda.c
View file @
d236fbb8
...
...
@@ -34,6 +34,7 @@
#include <linux/slab.h>
#include <linux/pci.h>
#include <linux/list.h>
#include <linux/init.h>
#include "ibmphp.h"
/*
...
...
@@ -76,7 +77,7 @@ static struct slot *alloc_ibm_slot (void)
return
slot
;
}
static
struct
ebda_hpc_list
*
alloc_ebda_hpc_list
(
void
)
static
struct
ebda_hpc_list
*
__init
alloc_ebda_hpc_list
(
void
)
{
struct
ebda_hpc_list
*
list
;
...
...
@@ -127,7 +128,7 @@ static void free_ebda_hpc (struct controller *controller)
kfree
(
controller
);
}
static
struct
ebda_rsrc_list
*
alloc_ebda_rsrc_list
(
void
)
static
struct
ebda_rsrc_list
*
__init
alloc_ebda_rsrc_list
(
void
)
{
struct
ebda_rsrc_list
*
list
;
...
...
@@ -149,7 +150,7 @@ static struct ebda_pci_rsrc *alloc_ebda_pci_rsrc (void)
return
resource
;
}
static
void
print_bus_info
(
void
)
static
void
__init
print_bus_info
(
void
)
{
struct
bus_info
*
ptr
;
struct
list_head
*
ptr1
;
...
...
@@ -184,7 +185,7 @@ static void print_ebda_pci_rsrc (void)
}
}
static
void
print_ebda_hpc
(
void
)
static
void
__init
print_ebda_hpc
(
void
)
{
struct
controller
*
hpc_ptr
;
struct
list_head
*
ptr1
;
...
...
@@ -228,7 +229,7 @@ static void print_ebda_hpc (void)
}
}
int
ibmphp_access_ebda
(
void
)
int
__init
ibmphp_access_ebda
(
void
)
{
u8
format
,
num_ctlrs
,
rio_complete
,
hs_complete
;
u16
ebda_seg
,
num_entries
,
next_offset
,
offset
,
blk_id
,
sub_addr
,
rc
,
re
,
rc_id
,
re_id
,
base
;
...
...
@@ -387,7 +388,7 @@ int ibmphp_access_ebda (void)
* each hpc from physical address to a list of hot plug controllers based on
* hpc descriptors.
*/
static
int
ebda_rsrc_controller
(
void
)
static
int
__init
ebda_rsrc_controller
(
void
)
{
u16
addr
,
addr_slot
,
addr_bus
;
u8
ctlr_id
,
temp
,
bus_index
;
...
...
@@ -649,7 +650,7 @@ static int ebda_rsrc_controller (void)
* map info (bus, devfun, start addr, end addr..) of i/o, memory,
* pfm from the physical addr to a list of resource.
*/
static
int
ebda_rsrc_rsrc
(
void
)
static
int
__init
ebda_rsrc_rsrc
(
void
)
{
u16
addr
;
short
rsrc
;
...
...
@@ -717,7 +718,7 @@ static int ebda_rsrc_rsrc (void)
/*
* map info of scalability details and rio details from physical address
*/
static
int
ebda_rio_table
(
void
)
static
int
__init
ebda_rio_table
(
void
)
{
u16
offset
;
u8
i
;
...
...
drivers/hotplug/ibmphp_hpc.c
View file @
d236fbb8
...
...
@@ -3,7 +3,7 @@
*
* Written By: Jyoti Shah, IBM Corporation
*
* Copyright (c) 2001
,2001
IBM Corp.
* Copyright (c) 2001
-2002
IBM Corp.
*
* All rights reserved.
*
...
...
@@ -27,17 +27,14 @@
*
*/
//#include <linux/delay.h>
#include <linux/wait.h>
#include <linux/time.h>
#include <linux/module.h>
#include <linux/pci.h>
#include <linux/smp_lock.h>
#include <linux/init.h>
#include "ibmphp.h"
#define POLL_NO 0x01
#define POLL_YES 0x00
static
int
to_debug
=
FALSE
;
#define debug_polling(fmt, arg...) do { if (to_debug) debug (fmt, arg); } while (0)
...
...
@@ -98,19 +95,15 @@ static int to_debug = FALSE;
// if bits 20,22,25,26,27,29,30 are OFF return TRUE
#define HPC_I2CSTATUS_CHECK(s) ((u8)((s & 0x00000A76) ? FALSE : TRUE))
// return code 0:poll slots, 1-POLL_LATCH_CNT:poll latch register
#define INCREMENT_POLLCNT(i) ((i < POLL_LATCH_CNT) ? i++ : (i=0))
//----------------------------------------------------------------------------
// global variables
//----------------------------------------------------------------------------
static
int
ibmphp_shutdown
;
static
int
tid_poll
;
static
int
stop_polling
;
// 2 values: poll, don't poll
static
struct
semaphore
sem_hpcaccess
;
// lock access to HPC
static
struct
semaphore
semOperations
;
// lock all operations and
// access to data structures
static
struct
semaphore
sem_exit
;
// make sure polling thread goes away
static
struct
semaphore
sem_poll
;
// make sure poll is idle
//----------------------------------------------------------------------------
// local function prototypes
//----------------------------------------------------------------------------
...
...
@@ -134,15 +127,13 @@ static int hpc_wait_ctlr_notworking (int, struct controller *, void *, u8 *);
*
* Action: initialize semaphores and variables
*---------------------------------------------------------------------*/
void
ibmphp_hpc_initvars
(
void
)
void
__init
ibmphp_hpc_initvars
(
void
)
{
debug
(
"%s - Entry
\n
"
,
__FUNCTION__
);
init_MUTEX
(
&
sem_hpcaccess
);
init_MUTEX
(
&
semOperations
);
init_MUTEX_LOCKED
(
&
sem_exit
);
init_MUTEX_LOCKED
(
&
sem_poll
);
stop_polling
=
POLL_YES
;
to_debug
=
FALSE
;
ibmphp_shutdown
=
FALSE
;
tid_poll
=
0
;
...
...
@@ -710,11 +701,6 @@ void free_hpc_access (void)
void
ibmphp_lock_operations
(
void
)
{
down
(
&
semOperations
);
stop_polling
=
POLL_NO
;
to_debug
=
TRUE
;
/* waiting for polling to actually stop */
down
(
&
sem_poll
);
}
/*----------------------------------------------------------------------
...
...
@@ -723,8 +709,6 @@ void ibmphp_lock_operations (void)
void
ibmphp_unlock_operations
(
void
)
{
debug
(
"%s - Entry
\n
"
,
__FUNCTION__
);
stop_polling
=
POLL_YES
;
to_debug
=
FALSE
;
up
(
&
semOperations
);
debug
(
"%s - Exit
\n
"
,
__FUNCTION__
);
}
...
...
@@ -732,34 +716,30 @@ void ibmphp_unlock_operations (void)
/*----------------------------------------------------------------------
* Name: poll_hpc()
*---------------------------------------------------------------------*/
#define POLL_LATCH_REGISTER 0
#define POLL_SLOTS 1
#define POLL_SLEEP 2
static
void
poll_hpc
(
void
)
{
struct
slot
myslot
,
*
pslot
=
NULL
;
struct
slot
myslot
;
struct
slot
*
pslot
=
NULL
;
struct
list_head
*
pslotlist
;
int
rc
;
int
poll_state
=
POLL_LATCH_REGISTER
;
u8
oldlatchlow
=
0x00
;
u8
curlatchlow
=
0x00
;
int
poll
c
nt
=
0
;
int
poll
_cou
nt
=
0
;
u8
ctrl_count
=
0x00
;
debug
(
"
poll_hpc - Entry
\n
"
);
debug
(
"
%s - Entry
\n
"
,
__FUNCTION__
);
while
(
!
ibmphp_shutdown
)
{
if
(
stop_polling
)
{
debug
(
"poll_hpc - stop_polling
\n
"
);
up
(
&
sem_poll
);
/* to prevent deadlock */
if
(
ibmphp_shutdown
)
break
;
/* to make the thread sleep */
down
(
&
semOperations
);
up
(
&
semOperations
);
debug
(
"poll_hpc - after stop_polling sleep
\n
"
);
}
else
{
if
(
pollcnt
)
{
// only poll the latch register
oldlatchlow
=
curlatchlow
;
/* try to get the lock to do some kind of harware access */
down
(
&
semOperations
);
switch
(
poll_state
)
{
case
POLL_LATCH_REGISTER
:
oldlatchlow
=
curlatchlow
;
ctrl_count
=
0x00
;
list_for_each
(
pslotlist
,
&
ibmphp_slot_head
)
{
if
(
ctrl_count
>=
ibmphp_get_total_controllers
())
...
...
@@ -773,14 +753,16 @@ static void poll_hpc (void)
&
curlatchlow
);
if
(
oldlatchlow
!=
curlatchlow
)
process_changeinlatch
(
oldlatchlow
,
curlatchlow
,
pslot
->
ctrl
);
curlatchlow
,
pslot
->
ctrl
);
}
}
}
}
else
{
poll_state
=
POLL_SLOTS
;
break
;
case
POLL_SLOTS
:
list_for_each
(
pslotlist
,
&
ibmphp_slot_head
)
{
if
(
stop_polling
)
break
;
pslot
=
list_entry
(
pslotlist
,
struct
slot
,
ibm_slot_list
);
// make a copy of the old status
memcpy
((
void
*
)
&
myslot
,
(
void
*
)
pslot
,
...
...
@@ -791,31 +773,45 @@ static void poll_hpc (void)
process_changeinstatus
(
pslot
,
&
myslot
);
}
if
(
!
stop_polling
)
{
ctrl_count
=
0x00
;
list_for_each
(
pslotlist
,
&
ibmphp_slot_head
)
{
if
(
ctrl_count
>=
ibmphp_get_total_controllers
())
break
;
pslot
=
list_entry
(
pslotlist
,
struct
slot
,
ibm_slot_list
);
if
(
pslot
->
ctrl
->
ctlr_relative_id
==
ctrl_count
)
{
ctrl_count
++
;
if
(
READ_SLOT_LATCH
(
pslot
->
ctrl
))
rc
=
ibmphp_hpc_readslot
(
pslot
,
READ_SLOTLATCHLOWREG
,
&
curlatchlow
);
}
ctrl_count
=
0x00
;
list_for_each
(
pslotlist
,
&
ibmphp_slot_head
)
{
if
(
ctrl_count
>=
ibmphp_get_total_controllers
())
break
;
pslot
=
list_entry
(
pslotlist
,
struct
slot
,
ibm_slot_list
);
if
(
pslot
->
ctrl
->
ctlr_relative_id
==
ctrl_count
)
{
ctrl_count
++
;
if
(
READ_SLOT_LATCH
(
pslot
->
ctrl
))
rc
=
ibmphp_hpc_readslot
(
pslot
,
READ_SLOTLATCHLOWREG
,
&
curlatchlow
);
}
}
}
INCREMENT_POLLCNT
(
pollcnt
);
long_delay
(
POLL_INTERVAL_SEC
*
HZ
);
// snooze
++
poll_count
;
if
(
poll_count
>=
POLL_LATCH_CNT
)
{
poll_count
=
0
;
poll_state
=
POLL_SLEEP
;
}
break
;
case
POLL_SLEEP
:
/* don't sleep with a lock on the hardware */
up
(
&
semOperations
);
long_delay
(
POLL_INTERVAL_SEC
*
HZ
);
down
(
&
semOperations
);
poll_state
=
POLL_LATCH_REGISTER
;
break
;
}
/* give up the harware semaphore */
up
(
&
semOperations
);
/* sleep for a short time just for good measure */
set_current_state
(
TASK_INTERRUPTIBLE
);
schedule_timeout
(
HZ
/
10
);
}
up
(
&
sem_poll
);
up
(
&
sem_exit
);
debug
(
"
poll_hpc - Exit
\n
"
);
debug
(
"
%s - Exit
\n
"
,
__FUNCTION__
);
}
...
...
@@ -1049,19 +1045,19 @@ static int hpc_poll_thread (void *data)
*
* Action: start polling thread
*---------------------------------------------------------------------*/
int
ibmphp_hpc_start_poll_thread
(
void
)
int
__init
ibmphp_hpc_start_poll_thread
(
void
)
{
int
rc
=
0
;
debug
(
"
ibmphp_hpc_start_poll_thread - Entry
\n
"
);
debug
(
"
%s - Entry
\n
"
,
__FUNCTION__
);
tid_poll
=
kernel_thread
(
hpc_poll_thread
,
0
,
0
);
if
(
tid_poll
<
0
)
{
err
(
"
ibmphp_hpc_start_poll_thread - Error, thread not started
\n
"
);
err
(
"
%s - Error, thread not started
\n
"
,
__FUNCTION__
);
rc
=
-
1
;
}
debug
(
"
ibmphp_hpc_start_poll_thread - Exit tid_poll[%d] rc[%d]
\n
"
,
tid_poll
,
rc
);
debug
(
"
%s - Exit tid_poll[%d] rc[%d]
\n
"
,
__FUNCTION__
,
tid_poll
,
rc
);
return
rc
;
}
...
...
@@ -1070,9 +1066,9 @@ int ibmphp_hpc_start_poll_thread (void)
*
* Action: stop polling thread and cleanup
*---------------------------------------------------------------------*/
void
ibmphp_hpc_stop_poll_thread
(
void
)
void
__exit
ibmphp_hpc_stop_poll_thread
(
void
)
{
debug
(
"
ibmphp_hpc_stop_poll_thread - Entry
\n
"
);
debug
(
"
%s - Entry
\n
"
,
__FUNCTION__
);
ibmphp_shutdown
=
TRUE
;
ibmphp_lock_operations
();
...
...
@@ -1083,10 +1079,9 @@ void ibmphp_hpc_stop_poll_thread (void)
// cleanup
free_hpc_access
();
ibmphp_unlock_operations
();
up
(
&
sem_poll
);
up
(
&
sem_exit
);
debug
(
"
ibmphp_hpc_stop_poll_thread - Exit
\n
"
);
debug
(
"
%s - Exit
\n
"
,
__FUNCTION__
);
}
/*----------------------------------------------------------------------
...
...
drivers/hotplug/ibmphp_res.c
View file @
d236fbb8
...
...
@@ -31,6 +31,7 @@
#include <linux/slab.h>
#include <linux/pci.h>
#include <linux/list.h>
#include <linux/init.h>
#include "ibmphp.h"
static
int
flags
=
0
;
/* for testing */
...
...
@@ -45,7 +46,7 @@ static inline struct bus_node *find_bus_wprev (u8, struct bus_node **, u8);
static
LIST_HEAD
(
gbuses
);
static
struct
bus_node
*
alloc_error_bus
(
struct
ebda_pci_rsrc
*
curr
)
static
struct
bus_node
*
__init
alloc_error_bus
(
struct
ebda_pci_rsrc
*
curr
)
{
struct
bus_node
*
newbus
;
...
...
@@ -61,7 +62,7 @@ static struct bus_node * alloc_error_bus (struct ebda_pci_rsrc * curr)
return
newbus
;
}
static
struct
resource_node
*
alloc_resources
(
struct
ebda_pci_rsrc
*
curr
)
static
struct
resource_node
*
__init
alloc_resources
(
struct
ebda_pci_rsrc
*
curr
)
{
struct
resource_node
*
rs
=
kmalloc
(
sizeof
(
struct
resource_node
),
GFP_KERNEL
);
if
(
!
rs
)
{
...
...
@@ -77,7 +78,7 @@ static struct resource_node * alloc_resources (struct ebda_pci_rsrc * curr)
return
rs
;
}
static
int
alloc_bus_range
(
struct
bus_node
**
new_bus
,
struct
range_node
**
new_range
,
struct
ebda_pci_rsrc
*
curr
,
int
flag
,
u8
first_bus
)
static
int
__init
alloc_bus_range
(
struct
bus_node
**
new_bus
,
struct
range_node
**
new_range
,
struct
ebda_pci_rsrc
*
curr
,
int
flag
,
u8
first_bus
)
{
struct
bus_node
*
newbus
;
struct
range_node
*
newrange
;
...
...
@@ -184,7 +185,7 @@ static int alloc_bus_range (struct bus_node **new_bus, struct range_node **new_r
* Input: ptr to the head of the resource list from EBDA
* Output: 0, -1 or error codes
***************************************************************************/
int
ibmphp_rsrc_init
(
void
)
int
__init
ibmphp_rsrc_init
(
void
)
{
struct
ebda_pci_rsrc
*
curr
;
struct
range_node
*
newrange
=
NULL
;
...
...
@@ -1650,7 +1651,7 @@ void ibmphp_free_resources (void)
* a new Mem node
* This routine is called right after initialization
*******************************************************************************/
static
int
once_over
(
void
)
static
int
__init
once_over
(
void
)
{
struct
resource_node
*
pfmem_cur
;
struct
resource_node
*
pfmem_prev
;
...
...
@@ -1871,7 +1872,7 @@ void ibmphp_print_test (void)
* behind them All these are TO DO.
* Also need to add more error checkings... (from fnc returns etc)
*/
static
int
update_bridge_ranges
(
struct
bus_node
**
bus
)
static
int
__init
update_bridge_ranges
(
struct
bus_node
**
bus
)
{
u8
sec_busno
,
device
,
function
,
busno
,
hdr_type
,
start_io_address
,
end_io_address
;
u16
vendor_id
,
upper_io_start
,
upper_io_end
,
start_mem_address
,
end_mem_address
;
...
...
@@ -1885,7 +1886,7 @@ static int update_bridge_ranges (struct bus_node **bus)
bus_cur
=
*
bus
;
busno
=
bus_cur
->
busno
;
debug
(
"inside
update_bridge_ranges
\n
"
);
debug
(
"inside
%s
\n
"
,
__FUNCTION__
);
debug
(
"bus_cur->busno = %x
\n
"
,
bus_cur
->
busno
);
for
(
device
=
0
;
device
<
32
;
device
++
)
{
...
...
drivers/hotplug/pci_hotplug_core.c
View file @
d236fbb8
...
...
@@ -36,6 +36,7 @@
#include <linux/slab.h>
#include <linux/smp_lock.h>
#include <linux/init.h>
#include <linux/namei.h>
#include <linux/pci.h>
#include <asm/uaccess.h>
#include "pci_hotplug.h"
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment