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
d04b51de
Commit
d04b51de
authored
Mar 25, 2003
by
Adam Belay
Browse files
Options
Browse Files
Download
Plain Diff
Merge
http://linux.bkbits.net/linux-2.5
into neo.rr.com:/home/ambx1/src/bk/linus-2.5
parents
b4f6270e
b822f83d
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
200 additions
and
117 deletions
+200
-117
drivers/isdn/hisax/hisax_fcpcipnp.c
drivers/isdn/hisax/hisax_fcpcipnp.c
+2
-2
drivers/pnp/card.c
drivers/pnp/card.c
+46
-26
drivers/pnp/pnpbios/core.c
drivers/pnp/pnpbios/core.c
+102
-35
drivers/pnp/pnpbios/proc.c
drivers/pnp/pnpbios/proc.c
+25
-40
include/linux/pnp.h
include/linux/pnp.h
+4
-3
include/linux/pnpbios.h
include/linux/pnpbios.h
+10
-1
sound/isa/als100.c
sound/isa/als100.c
+5
-4
sound/isa/sb/es968.c
sound/isa/sb/es968.c
+4
-4
sound/oss/sb_card.c
sound/oss/sb_card.c
+1
-1
sound/oss/sb_card.h
sound/oss/sb_card.h
+1
-1
No files found.
drivers/isdn/hisax/hisax_fcpcipnp.c
View file @
d04b51de
...
...
@@ -909,7 +909,7 @@ static struct pci_driver fcpci_driver = {
#ifdef CONFIG_PNP_CARD
static
int
__devinit
fcpnp_probe
(
struct
pnp_card
*
card
,
const
struct
pnp_card_id
*
card_id
)
const
struct
pnp_card_
device_
id
*
card_id
)
{
struct
fritz_adapter
*
adapter
;
struct
pnp_dev
*
pnp_dev
;
...
...
@@ -955,7 +955,7 @@ static void __devexit fcpnp_remove(struct pnp_card *pcard)
delete_adapter
(
adapter
);
}
static
struct
pnp_card_id
fcpnp_ids
[]
__devinitdata
=
{
static
struct
pnp_card_
device_
id
fcpnp_ids
[]
__devinitdata
=
{
{
.
id
=
"AVM0900"
,
.
driver_data
=
(
unsigned
long
)
"Fritz!Card PnP"
,
.
devs
=
{
{
"AVM0900"
}
},
...
...
drivers/pnp/card.c
View file @
d04b51de
...
...
@@ -19,11 +19,12 @@
#include "base.h"
LIST_HEAD
(
pnp_cards
);
LIST_HEAD
(
pnp_card_drivers
);
static
const
struct
pnp_card_id
*
match_card
(
struct
pnp_card_driver
*
drv
,
struct
pnp_card
*
card
)
static
const
struct
pnp_card_
device_
id
*
match_card
(
struct
pnp_card_driver
*
drv
,
struct
pnp_card
*
card
)
{
const
struct
pnp_card_id
*
drv_id
=
drv
->
id_table
;
const
struct
pnp_card_
device_
id
*
drv_id
=
drv
->
id_table
;
while
(
*
drv_id
->
id
){
if
(
compare_pnp_id
(
card
->
id
,
drv_id
->
id
))
return
drv_id
;
...
...
@@ -32,21 +33,41 @@ static const struct pnp_card_id * match_card(struct pnp_card_driver * drv, struc
return
NULL
;
}
static
void
generic_
card_remove
(
struct
pnp_dev
*
dev
)
static
void
card_remove
(
struct
pnp_dev
*
dev
)
{
dev
->
card_link
=
NULL
;
}
static
void
generic_
card_remove_first
(
struct
pnp_dev
*
dev
)
static
void
card_remove_first
(
struct
pnp_dev
*
dev
)
{
struct
pnp_card_driver
*
drv
=
to_pnp_card_driver
(
dev
->
driver
);
if
(
!
dev
->
card
||
!
drv
)
return
;
if
(
drv
->
remove
)
drv
->
remove
(
dev
->
card_link
);
drv
->
link
.
remove
=
&
generic_
card_remove
;
drv
->
link
.
remove
=
&
card_remove
;
kfree
(
dev
->
card_link
);
generic_card_remove
(
dev
);
card_remove
(
dev
);
}
static
int
card_probe
(
struct
pnp_card
*
card
,
struct
pnp_card_driver
*
drv
)
{
const
struct
pnp_card_device_id
*
id
=
match_card
(
drv
,
card
);
if
(
id
)
{
struct
pnp_card_link
*
clink
=
pnp_alloc
(
sizeof
(
struct
pnp_card_link
));
if
(
!
clink
)
return
0
;
clink
->
card
=
card
;
clink
->
driver
=
drv
;
if
(
drv
->
probe
)
{
if
(
drv
->
probe
(
clink
,
id
)
>=
0
)
return
1
;
else
kfree
(
clink
);
}
else
return
1
;
}
return
0
;
}
/**
...
...
@@ -103,7 +124,7 @@ static void pnp_release_card(struct device *dmdev)
int
pnp_add_card
(
struct
pnp_card
*
card
)
{
int
error
;
struct
list_head
*
pos
;
struct
list_head
*
pos
,
*
temp
;
if
(
!
card
||
!
card
->
protocol
)
return
-
EINVAL
;
...
...
@@ -112,6 +133,7 @@ int pnp_add_card(struct pnp_card * card)
card
->
dev
.
bus
=
NULL
;
card
->
dev
.
release
=
&
pnp_release_card
;
error
=
device_register
(
&
card
->
dev
);
if
(
error
==
0
)
{
spin_lock
(
&
pnp_lock
);
list_add_tail
(
&
card
->
global_list
,
&
pnp_cards
);
...
...
@@ -125,6 +147,12 @@ int pnp_add_card(struct pnp_card * card)
struct
pnp_dev
*
dev
=
card_to_pnp_dev
(
pos
);
__pnp_add_device
(
dev
);
}
/* match with card drivers */
list_for_each_safe
(
pos
,
temp
,
&
pnp_card_drivers
){
struct
pnp_card_driver
*
drv
=
list_entry
(
pos
,
struct
pnp_card_driver
,
global_list
);
card_probe
(
card
,
drv
);
}
}
else
pnp_err
(
"sysfs failure, card '%s' will be unavailable"
,
card
->
dev
.
bus_id
);
return
error
;
...
...
@@ -248,9 +276,9 @@ void pnp_release_card_device(struct pnp_dev * dev)
if
(
!
drv
)
return
;
down_write
(
&
dev
->
dev
.
bus
->
subsys
.
rwsem
);
drv
->
link
.
remove
=
&
generic_
card_remove
;
drv
->
link
.
remove
=
&
card_remove
;
device_release_driver
(
&
dev
->
dev
);
drv
->
link
.
remove
=
&
generic_
card_remove_first
;
drv
->
link
.
remove
=
&
card_remove_first
;
up_write
(
&
dev
->
dev
.
bus
->
subsys
.
rwsem
);
}
...
...
@@ -268,25 +296,16 @@ int pnp_register_card_driver(struct pnp_card_driver * drv)
drv
->
link
.
id_table
=
NULL
;
/* this will disable auto matching */
drv
->
link
.
flags
=
drv
->
flags
;
drv
->
link
.
probe
=
NULL
;
drv
->
link
.
remove
=
&
generic_
card_remove_first
;
drv
->
link
.
remove
=
&
card_remove_first
;
spin_lock
(
&
pnp_lock
);
list_add_tail
(
&
drv
->
global_list
,
&
pnp_card_drivers
);
spin_unlock
(
&
pnp_lock
);
pnp_register_driver
(
&
drv
->
link
);
list_for_each_safe
(
pos
,
temp
,
&
pnp_cards
){
struct
pnp_card
*
card
=
list_entry
(
pos
,
struct
pnp_card
,
global_list
);
const
struct
pnp_card_id
*
id
=
match_card
(
drv
,
card
);
if
(
id
)
{
struct
pnp_card_link
*
clink
=
pnp_alloc
(
sizeof
(
struct
pnp_card_link
));
if
(
!
clink
)
continue
;
clink
->
card
=
card
;
clink
->
driver
=
drv
;
if
(
drv
->
probe
)
{
if
(
drv
->
probe
(
clink
,
id
)
>=
0
)
count
++
;
}
else
count
++
;
}
count
+=
card_probe
(
card
,
drv
);
}
return
count
;
}
...
...
@@ -298,9 +317,10 @@ int pnp_register_card_driver(struct pnp_card_driver * drv)
void
pnp_unregister_card_driver
(
struct
pnp_card_driver
*
drv
)
{
spin_lock
(
&
pnp_lock
);
list_del
(
&
drv
->
global_list
);
spin_unlock
(
&
pnp_lock
);
pnp_unregister_driver
(
&
drv
->
link
);
pnp_dbg
(
"the card driver '%s' has been unregistered"
,
drv
->
name
);
}
EXPORT_SYMBOL
(
pnp_add_card
);
...
...
drivers/pnp/pnpbios/core.c
View file @
d04b51de
...
...
@@ -32,6 +32,18 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/* Change Log
*
* Adam Belay - <ambx1@neo.rr.com> - March 16, 2003
* rev 1.01 Only call pnp_bios_dev_node_info once
* Added pnpbios_print_status
* Added several new error messages and info messages
* Added pnpbios_interface_attach_device
* integrated core and proc init system
* Introduced PNPMODE flags
* Removed some useless includes
*/
#include <linux/types.h>
#include <linux/module.h>
...
...
@@ -46,9 +58,7 @@
#include <linux/mm.h>
#include <linux/smp.h>
#include <asm/desc.h>
#include <linux/ioport.h>
#include <linux/slab.h>
#include <linux/pci.h>
#include <linux/kmod.h>
#include <linux/completion.h>
#include <linux/spinlock.h>
...
...
@@ -93,6 +103,7 @@ static struct {
}
pnp_bios_callpoint
;
static
union
pnp_bios_expansion_header
*
pnp_bios_hdr
=
NULL
;
struct
pnp_dev_node_info
node_info
;
/* The PnP BIOS entries in the GDT */
#define PNP_GDT (GDT_ENTRY_PNPBIOS_BASE * 8)
...
...
@@ -237,9 +248,46 @@ static inline u16 call_pnp_bios(u16 func, u16 arg1, u16 arg2, u16 arg3,
*
*/
static
void
pnpbios_
warn_unexpected
_status
(
const
char
*
module
,
u16
status
)
static
void
pnpbios_
print
_status
(
const
char
*
module
,
u16
status
)
{
printk
(
KERN_ERR
"PnPBIOS: %s: Unexpected status 0x%x
\n
"
,
module
,
status
);
switch
(
status
)
{
case
PNP_SUCCESS
:
printk
(
KERN_ERR
"PnPBIOS: %s: function successful
\n
"
,
module
);
case
PNP_NOT_SET_STATICALLY
:
printk
(
KERN_ERR
"PnPBIOS: %s: unable to set static resources
\n
"
,
module
);
case
PNP_UNKNOWN_FUNCTION
:
printk
(
KERN_ERR
"PnPBIOS: %s: invalid function number passed
\n
"
,
module
);
case
PNP_FUNCTION_NOT_SUPPORTED
:
printk
(
KERN_ERR
"PnPBIOS: %s: function not supported on this system
\n
"
,
module
);
case
PNP_INVALID_HANDLE
:
printk
(
KERN_ERR
"PnPBIOS: %s: invalid handle
\n
"
,
module
);
case
PNP_BAD_PARAMETER
:
printk
(
KERN_ERR
"PnPBIOS: %s: invalid parameters were passed
\n
"
,
module
);
case
PNP_SET_FAILED
:
printk
(
KERN_ERR
"PnPBIOS: %s: unable to set resources
\n
"
,
module
);
case
PNP_EVENTS_NOT_PENDING
:
printk
(
KERN_ERR
"PnPBIOS: %s: no events are pending
\n
"
,
module
);
case
PNP_SYSTEM_NOT_DOCKED
:
printk
(
KERN_ERR
"PnPBIOS: %s: the system is not docked
\n
"
,
module
);
case
PNP_NO_ISA_PNP_CARDS
:
printk
(
KERN_ERR
"PnPBIOS: %s: no isapnp cards are installed on this system
\n
"
,
module
);
case
PNP_UNABLE_TO_DETERMINE_DOCK_CAPABILITIES
:
printk
(
KERN_ERR
"PnPBIOS: %s: cannot determine the capabilities of the docking station
\n
"
,
module
);
case
PNP_CONFIG_CHANGE_FAILED_NO_BATTERY
:
printk
(
KERN_ERR
"PnPBIOS: %s: unable to undock, the system does not have a battery
\n
"
,
module
);
case
PNP_CONFIG_CHANGE_FAILED_RESOURCE_CONFLICT
:
printk
(
KERN_ERR
"PnPBIOS: %s: could not dock due to resource conflicts
\n
"
,
module
);
case
PNP_BUFFER_TOO_SMALL
:
printk
(
KERN_ERR
"PnPBIOS: %s: the buffer passed is too small
\n
"
,
module
);
case
PNP_USE_ESCD_SUPPORT
:
printk
(
KERN_ERR
"PnPBIOS: %s: use ESCD instead
\n
"
,
module
);
case
PNP_MESSAGE_NOT_SUPPORTED
:
printk
(
KERN_ERR
"PnPBIOS: %s: the message is unsupported
\n
"
,
module
);
case
PNP_HARDWARE_ERROR
:
printk
(
KERN_ERR
"PnPBIOS: %s: a hardware failure has occured
\n
"
,
module
);
default:
printk
(
KERN_ERR
"PnPBIOS: %s: unexpected status 0x%x
\n
"
,
module
,
status
);
}
}
void
*
pnpbios_kmalloc
(
size_t
size
,
int
f
)
...
...
@@ -299,7 +347,7 @@ int pnp_bios_dev_node_info(struct pnp_dev_node_info *data)
{
int
status
=
__pnp_bios_dev_node_info
(
data
);
if
(
status
)
pnpbios_
warn_unexpected
_status
(
"dev_node_info"
,
status
);
pnpbios_
print
_status
(
"dev_node_info"
,
status
);
return
status
;
}
...
...
@@ -334,7 +382,7 @@ int pnp_bios_get_dev_node(u8 *nodenum, char boot, struct pnp_bios_node *data)
int
status
;
status
=
__pnp_bios_get_dev_node
(
nodenum
,
boot
,
data
);
if
(
status
)
pnpbios_
warn_unexpected
_status
(
"get_dev_node"
,
status
);
pnpbios_
print
_status
(
"get_dev_node"
,
status
);
return
status
;
}
...
...
@@ -362,7 +410,7 @@ int pnp_bios_set_dev_node(u8 nodenum, char boot, struct pnp_bios_node *data)
int
status
;
status
=
__pnp_bios_set_dev_node
(
nodenum
,
boot
,
data
);
if
(
status
)
{
pnpbios_
warn_unexpected
_status
(
"set_dev_node"
,
status
);
pnpbios_
print
_status
(
"set_dev_node"
,
status
);
return
status
;
}
if
(
!
boot
)
{
/* Update devlist */
...
...
@@ -452,7 +500,7 @@ int pnp_bios_get_stat_res(char *info)
int
status
;
status
=
__pnp_bios_get_stat_res
(
info
);
if
(
status
)
pnpbios_
warn_unexpected
_status
(
"get_stat_res"
,
status
);
pnpbios_
print
_status
(
"get_stat_res"
,
status
);
return
status
;
}
...
...
@@ -489,7 +537,7 @@ int pnp_bios_isapnp_config(struct pnp_isa_config_struc *data)
int
status
;
status
=
__pnp_bios_isapnp_config
(
data
);
if
(
status
)
pnpbios_
warn_unexpected
_status
(
"isapnp_config"
,
status
);
pnpbios_
print
_status
(
"isapnp_config"
,
status
);
return
status
;
}
...
...
@@ -511,7 +559,7 @@ int pnp_bios_escd_info(struct escd_info_struc *data)
int
status
;
status
=
__pnp_bios_escd_info
(
data
);
if
(
status
)
pnpbios_
warn_unexpected
_status
(
"escd_info"
,
status
);
pnpbios_
print
_status
(
"escd_info"
,
status
);
return
status
;
}
...
...
@@ -534,7 +582,7 @@ int pnp_bios_read_escd(char *data, u32 nvram_base)
int
status
;
status
=
__pnp_bios_read_escd
(
data
,
nvram_base
);
if
(
status
)
pnpbios_
warn_unexpected
_status
(
"read_escd"
,
status
);
pnpbios_
print
_status
(
"read_escd"
,
status
);
return
status
;
}
...
...
@@ -658,7 +706,7 @@ static int pnp_dock_thread(void * unused)
d
=
1
;
break
;
default:
pnpbios_
warn_unexpected
_status
(
"pnp_dock_thread"
,
status
);
pnpbios_
print
_status
(
"pnp_dock_thread"
,
status
);
continue
;
}
if
(
d
!=
docked
)
...
...
@@ -753,19 +801,17 @@ static void node_id_data_to_dev(unsigned char *p, struct pnp_bios_node *node, st
static
int
pnpbios_get_resources
(
struct
pnp_dev
*
dev
,
struct
pnp_resource_table
*
res
)
{
struct
pnp_dev_node_info
node_info
;
u8
nodenum
=
dev
->
number
;
struct
pnp_bios_node
*
node
;
/* just in case */
if
(
!
pnpbios_is_dynamic
(
dev
))
return
-
EPERM
;
if
(
pnp_bios_dev_node_info
(
&
node_info
)
!=
0
)
return
-
ENODEV
;
node
=
pnpbios_kmalloc
(
node_info
.
max_node_size
,
GFP_KERNEL
);
if
(
!
node
)
return
-
1
;
if
(
pnp_bios_get_dev_node
(
&
nodenum
,
(
char
)
0
,
node
))
{
if
(
pnp_bios_get_dev_node
(
&
nodenum
,
(
char
)
PNPMODE_DYNAMIC
,
node
))
{
kfree
(
node
);
return
-
ENODEV
;
}
...
...
@@ -777,7 +823,6 @@ static int pnpbios_get_resources(struct pnp_dev * dev, struct pnp_resource_table
static
int
pnpbios_set_resources
(
struct
pnp_dev
*
dev
,
struct
pnp_resource_table
*
res
)
{
struct
pnp_dev_node_info
node_info
;
u8
nodenum
=
dev
->
number
;
struct
pnp_bios_node
*
node
;
int
ret
;
...
...
@@ -785,18 +830,17 @@ static int pnpbios_set_resources(struct pnp_dev * dev, struct pnp_resource_table
/* just in case */
if
(
!
pnpbios_is_dynamic
(
dev
))
return
-
EPERM
;
if
(
pnp_bios_dev_node_info
(
&
node_info
)
!=
0
)
return
-
ENODEV
;
node
=
pnpbios_kmalloc
(
node_info
.
max_node_size
,
GFP_KERNEL
);
if
(
!
node
)
return
-
1
;
if
(
pnp_bios_get_dev_node
(
&
nodenum
,
(
char
)
1
,
node
))
if
(
pnp_bios_get_dev_node
(
&
nodenum
,
(
char
)
PNPMODE_STATIC
,
node
))
return
-
ENODEV
;
if
(
!
pnp_write_resources
((
char
*
)
node
->
data
,(
char
*
)
node
->
data
+
node
->
size
,
res
)){
kfree
(
node
);
return
-
1
;
}
ret
=
pnp_bios_set_dev_node
(
node
->
handle
,
(
char
)
0
,
node
);
ret
=
pnp_bios_set_dev_node
(
node
->
handle
,
(
char
)
PNPMODE_DYNAMIC
,
node
);
kfree
(
node
);
if
(
ret
>
0
)
ret
=
-
1
;
...
...
@@ -805,23 +849,18 @@ static int pnpbios_set_resources(struct pnp_dev * dev, struct pnp_resource_table
static
int
pnpbios_disable_resources
(
struct
pnp_dev
*
dev
)
{
struct
pnp_dev_node_info
node_info
;
struct
pnp_bios_node
*
node
;
int
ret
;
/* just in case */
if
(
dev
->
flags
&
PNPBIOS_NO_DISABLE
||
!
pnpbios_is_dynamic
(
dev
))
return
-
EPERM
;
if
(
!
dev
||
!
dev
->
active
)
return
-
EINVAL
;
if
(
pnp_bios_dev_node_info
(
&
node_info
)
!=
0
)
return
-
ENODEV
;
/* the value of this will be zero */
node
=
pnpbios_kmalloc
(
node_info
.
max_node_size
,
GFP_KERNEL
);
if
(
!
node
)
return
-
ENOMEM
;
ret
=
pnp_bios_set_dev_node
(
dev
->
number
,
(
char
)
0
,
node
);
dev
->
active
=
0
;
ret
=
pnp_bios_set_dev_node
(
dev
->
number
,
(
char
)
PNPMODE_DYNAMIC
,
node
);
kfree
(
node
);
if
(
ret
>
0
)
ret
=
-
1
;
...
...
@@ -879,6 +918,8 @@ static int insert_device(struct pnp_dev *dev, struct pnp_bios_node * node)
dev
->
protocol
=
&
pnpbios_protocol
;
pnp_add_device
(
dev
);
pnpbios_interface_attach_device
(
node
);
return
0
;
}
...
...
@@ -903,8 +944,16 @@ static void __init build_devlist(void)
for
(
nodenum
=
0
;
nodenum
<
0xff
;
)
{
u8
thisnodenum
=
nodenum
;
if
(
pnp_bios_get_dev_node
(
&
nodenum
,
(
char
)
0
,
node
))
break
;
/* eventually we will want to use PNPMODE_STATIC here but for now
* dynamic will help us catch buggy bioses to add to the blacklist.
*/
if
(
!
pnpbios_dont_use_current_config
)
{
if
(
pnp_bios_get_dev_node
(
&
nodenum
,
(
char
)
PNPMODE_DYNAMIC
,
node
))
break
;
}
else
{
if
(
pnp_bios_get_dev_node
(
&
nodenum
,
(
char
)
PNPMODE_STATIC
,
node
))
break
;
}
nodes_got
++
;
dev
=
pnpbios_kmalloc
(
sizeof
(
struct
pnp_dev
),
GFP_KERNEL
);
if
(
!
dev
)
...
...
@@ -972,7 +1021,8 @@ int __init pnpbios_init(void)
if
(
pnpbios_disabled
||
(
dmi_broken
&
BROKEN_PNP_BIOS
))
{
printk
(
KERN_INFO
"PnPBIOS: Disabled
\n
"
);
return
-
ENODEV
;
}
}
else
printk
(
KERN_INFO
"PnPBIOS: Scanning system for PnP BIOS support...
\n
"
);
/*
* Search the defined area (0xf0000-0xffff0) for a valid PnP BIOS
...
...
@@ -1016,17 +1066,34 @@ int __init pnpbios_init(void)
}
break
;
}
if
(
!
pnp_bios_present
())
if
(
!
pnp_bios_present
())
{
printk
(
KERN_INFO
"PnPBIOS: A PnP BIOS was not detected.
\n
"
);
return
-
ENODEV
;
}
/*
* we found a pnpbios, now let's load the rest of the driver
*/
/* read the node info */
if
(
pnp_bios_dev_node_info
(
&
node_info
))
{
printk
(
KERN_ERR
"PnPBIOS: Unable to get node info. Aborting.
\n
"
);
return
-
EIO
;
}
/* register with the pnp layer */
pnp_register_protocol
(
&
pnpbios_protocol
);
build_devlist
();
/*if ( ! dont_reserve_resources )*/
/*reserve_resources();*/
#ifdef CONFIG_PROC_FS
/* start the proc interface */
r
=
pnpbios_proc_init
();
if
(
r
)
return
r
;
#endif
/* scan for pnpbios devices */
build_devlist
();
return
0
;
}
...
...
drivers/pnp/pnpbios/proc.c
View file @
d04b51de
...
...
@@ -31,7 +31,6 @@
static
struct
proc_dir_entry
*
proc_pnp
=
NULL
;
static
struct
proc_dir_entry
*
proc_pnp_boot
=
NULL
;
static
struct
pnp_dev_node_info
node_info
;
static
int
proc_read_pnpconfig
(
char
*
buf
,
char
**
start
,
off_t
pos
,
int
count
,
int
*
eof
,
void
*
data
)
...
...
@@ -136,7 +135,7 @@ static int proc_read_devices(char *buf, char **start, off_t pos,
/* 26 = the number of characters per line sprintf'ed */
if
((
p
-
buf
+
26
)
>
count
)
break
;
if
(
pnp_bios_get_dev_node
(
&
nodenum
,
1
,
node
))
if
(
pnp_bios_get_dev_node
(
&
nodenum
,
PNPMODE_STATIC
,
node
))
break
;
p
+=
sprintf
(
p
,
"%02x
\t
%08x
\t
%02x:%02x:%02x
\t
%04x
\n
"
,
node
->
handle
,
node
->
eisa_id
,
...
...
@@ -193,6 +192,30 @@ static int proc_write_node(struct file *file, const char *buf,
return
count
;
}
int
pnpbios_interface_attach_device
(
struct
pnp_bios_node
*
node
)
{
char
name
[
3
];
struct
proc_dir_entry
*
ent
;
sprintf
(
name
,
"%02x"
,
node
->
handle
);
if
(
!
pnpbios_dont_use_current_config
)
{
ent
=
create_proc_entry
(
name
,
0
,
proc_pnp
);
if
(
ent
)
{
ent
->
read_proc
=
proc_read_node
;
ent
->
write_proc
=
proc_write_node
;
ent
->
data
=
(
void
*
)(
long
)(
node
->
handle
);
}
}
ent
=
create_proc_entry
(
name
,
0
,
proc_pnp_boot
);
if
(
ent
)
{
ent
->
read_proc
=
proc_read_node
;
ent
->
write_proc
=
proc_write_node
;
ent
->
data
=
(
void
*
)(
long
)(
node
->
handle
+
0x100
);
return
0
;
}
return
-
EIO
;
}
/*
* When this is called, pnpbios functions are assumed to
* work and the pnpbios_dont_use_current_config flag
...
...
@@ -200,14 +223,6 @@ static int proc_write_node(struct file *file, const char *buf,
*/
int
__init
pnpbios_proc_init
(
void
)
{
struct
pnp_bios_node
*
node
;
struct
proc_dir_entry
*
ent
;
char
name
[
3
];
u8
nodenum
;
if
(
pnp_bios_dev_node_info
(
&
node_info
))
return
-
EIO
;
proc_pnp
=
proc_mkdir
(
"pnp"
,
proc_bus
);
if
(
!
proc_pnp
)
return
-
EIO
;
...
...
@@ -219,36 +234,6 @@ int __init pnpbios_proc_init( void )
create_proc_read_entry
(
"escd_info"
,
0
,
proc_pnp
,
proc_read_escdinfo
,
NULL
);
create_proc_read_entry
(
"escd"
,
S_IRUSR
,
proc_pnp
,
proc_read_escd
,
NULL
);
create_proc_read_entry
(
"legacy_device_resources"
,
0
,
proc_pnp
,
proc_read_legacyres
,
NULL
);
node
=
pnpbios_kmalloc
(
node_info
.
max_node_size
,
GFP_KERNEL
);
if
(
!
node
)
return
-
ENOMEM
;
for
(
nodenum
=
0
;
nodenum
<
0xff
;
)
{
u8
thisnodenum
=
nodenum
;
if
(
pnp_bios_get_dev_node
(
&
nodenum
,
1
,
node
)
!=
0
)
break
;
sprintf
(
name
,
"%02x"
,
node
->
handle
);
if
(
!
pnpbios_dont_use_current_config
)
{
ent
=
create_proc_entry
(
name
,
0
,
proc_pnp
);
if
(
ent
)
{
ent
->
read_proc
=
proc_read_node
;
ent
->
write_proc
=
proc_write_node
;
ent
->
data
=
(
void
*
)(
long
)(
node
->
handle
);
}
}
ent
=
create_proc_entry
(
name
,
0
,
proc_pnp_boot
);
if
(
ent
)
{
ent
->
read_proc
=
proc_read_node
;
ent
->
write_proc
=
proc_write_node
;
ent
->
data
=
(
void
*
)(
long
)(
node
->
handle
+
0x100
);
}
if
(
nodenum
<=
thisnodenum
)
{
printk
(
KERN_ERR
"%s Node number 0x%x is out of sequence following node 0x%x. Aborting.
\n
"
,
"PnPBIOS: proc_init:"
,
(
unsigned
int
)
nodenum
,
(
unsigned
int
)
thisnodenum
);
break
;
}
}
kfree
(
node
);
return
0
;
}
...
...
include/linux/pnp.h
View file @
d04b51de
...
...
@@ -295,7 +295,7 @@ struct pnp_device_id {
unsigned
long
driver_data
;
/* data private to the driver */
};
struct
pnp_card_id
{
struct
pnp_card_
device_
id
{
char
id
[
PNP_ID_LEN
];
unsigned
long
driver_data
;
/* data private to the driver */
struct
{
...
...
@@ -315,10 +315,11 @@ struct pnp_driver {
#define to_pnp_driver(drv) container_of(drv, struct pnp_driver, driver)
struct
pnp_card_driver
{
struct
list_head
global_list
;
char
*
name
;
const
struct
pnp_card_id
*
id_table
;
const
struct
pnp_card_
device_
id
*
id_table
;
unsigned
int
flags
;
int
(
*
probe
)
(
struct
pnp_card_link
*
card
,
const
struct
pnp_card_id
*
card_id
);
int
(
*
probe
)
(
struct
pnp_card_link
*
card
,
const
struct
pnp_card_
device_
id
*
card_id
);
void
(
*
remove
)
(
struct
pnp_card_link
*
card
);
struct
pnp_driver
link
;
};
...
...
include/linux/pnpbios.h
View file @
d04b51de
...
...
@@ -29,7 +29,7 @@
#include <linux/pci.h>
/*
*
Status codes (warnings and errors)
*
Return codes
*/
#define PNP_SUCCESS 0x00
#define PNP_NOT_SET_STATICALLY 0x7f
...
...
@@ -75,6 +75,7 @@
#define PNPMSG_POWER_OFF 0x41
#define PNPMSG_PNP_OS_ACTIVE 0x42
#define PNPMSG_PNP_OS_INACTIVE 0x43
/*
* Plug and Play BIOS flags
*/
...
...
@@ -88,6 +89,12 @@
#define pnpbios_is_static(x) (((x)->flags & 0x0100) == 0x0000)
#define pnpbios_is_dynamic(x) ((x)->flags & 0x0080)
/*
* Function Parameters
*/
#define PNPMODE_STATIC 1
#define PNPMODE_DYNAMIC 0
/* 0x8000 through 0xffff are OEM defined */
#pragma pack(1)
...
...
@@ -125,8 +132,10 @@ struct pnp_bios_node {
/* non-exported */
extern
int
pnpbios_dont_use_current_config
;
extern
struct
pnp_dev_node_info
node_info
;
extern
void
*
pnpbios_kmalloc
(
size_t
size
,
int
f
);
extern
int
pnpbios_init
(
void
);
extern
int
pnpbios_interface_attach_device
(
struct
pnp_bios_node
*
node
);
extern
int
pnpbios_proc_init
(
void
);
extern
void
pnpbios_proc_exit
(
void
);
...
...
sound/isa/als100.c
View file @
d04b51de
...
...
@@ -98,7 +98,7 @@ struct snd_card_als100 {
struct
pnp_dev
*
devopl
;
};
static
struct
pnp_card_id
snd_als100_pnpids
[]
__devinitdata
=
{
static
struct
pnp_card_
device_
id
snd_als100_pnpids
[]
__devinitdata
=
{
/* ALS100 - PRO16PNP */
{
.
id
=
"ALS0001"
,
.
devs
=
{
{
"@@@0001"
},
{
"@X@0001"
},
{
"@H@0001"
},
}
},
/* ALS110 - MF1000 - Digimate 3D Sound */
...
...
@@ -118,7 +118,7 @@ MODULE_DEVICE_TABLE(pnp_card, snd_als100_pnpids);
static
int
__devinit
snd_card_als100_isapnp
(
int
dev
,
struct
snd_card_als100
*
acard
,
struct
pnp_card_link
*
card
,
const
struct
pnp_card_id
*
id
)
const
struct
pnp_card_
device_
id
*
id
)
{
struct
pnp_dev
*
pdev
;
struct
pnp_resource_table
*
cfg
=
kmalloc
(
GFP_ATOMIC
,
sizeof
(
struct
pnp_resource_table
));
...
...
@@ -151,6 +151,7 @@ static int __devinit snd_card_als100_isapnp(int dev, struct snd_card_als100 *aca
err
=
pnp_activate_dev
(
pdev
);
if
(
err
<
0
)
{
printk
(
KERN_ERR
PFX
"AUDIO pnp configure failure
\n
"
);
kfree
(
cfg
);
return
err
;
}
port
[
dev
]
=
pnp_port_start
(
pdev
,
0
);
...
...
@@ -209,7 +210,7 @@ static int __devinit snd_card_als100_isapnp(int dev, struct snd_card_als100 *aca
static
int
__init
snd_card_als100_probe
(
int
dev
,
struct
pnp_card_link
*
pcard
,
const
struct
pnp_card_id
*
pid
)
const
struct
pnp_card_
device_
id
*
pid
)
{
int
error
;
sb_t
*
chip
;
...
...
@@ -287,7 +288,7 @@ static int __init snd_card_als100_probe(int dev,
}
static
int
__devinit
snd_als100_pnp_detect
(
struct
pnp_card_link
*
card
,
const
struct
pnp_card_id
*
id
)
const
struct
pnp_card_
device_
id
*
id
)
{
static
int
dev
;
int
res
;
...
...
sound/isa/sb/es968.c
View file @
d04b51de
...
...
@@ -69,7 +69,7 @@ struct snd_card_es968 {
struct
pnp_dev
*
dev
;
};
static
struct
pnp_card_id
snd_es968_pnpids
[]
__devinitdata
=
{
static
struct
pnp_card_
device_
id
snd_es968_pnpids
[]
__devinitdata
=
{
{
.
id
=
"ESS0968"
,
.
devs
=
{
{
"@@@0968"
},
}
},
{
.
id
=
""
,
}
/* end */
};
...
...
@@ -92,7 +92,7 @@ static void snd_card_es968_interrupt(int irq, void *dev_id,
static
int
__devinit
snd_card_es968_isapnp
(
int
dev
,
struct
snd_card_es968
*
acard
,
struct
pnp_card_link
*
card
,
const
struct
pnp_card_id
*
id
)
const
struct
pnp_card_
device_
id
*
id
)
{
struct
pnp_dev
*
pdev
;
struct
pnp_resource_table
*
cfg
=
kmalloc
(
GFP_ATOMIC
,
sizeof
(
struct
pnp_resource_table
));
...
...
@@ -133,7 +133,7 @@ static int __devinit snd_card_es968_isapnp(int dev, struct snd_card_es968 *acard
static
int
__init
snd_card_es968_probe
(
int
dev
,
struct
pnp_card_link
*
pcard
,
const
struct
pnp_card_id
*
pid
)
const
struct
pnp_card_
device_
id
*
pid
)
{
int
error
;
sb_t
*
chip
;
...
...
@@ -188,7 +188,7 @@ static int __init snd_card_es968_probe(int dev,
}
static
int
__devinit
snd_es968_pnp_detect
(
struct
pnp_card_link
*
card
,
const
struct
pnp_card_id
*
id
)
const
struct
pnp_card_
device_
id
*
id
)
{
static
int
dev
;
int
res
;
...
...
sound/oss/sb_card.c
View file @
d04b51de
...
...
@@ -224,7 +224,7 @@ static void sb_dev2cfg(struct pnp_dev *dev, struct sb_card_config *scc)
}
/* Probe callback function for the PnP API */
static
int
sb_pnp_probe
(
struct
pnp_card_link
*
card
,
const
struct
pnp_card_id
*
card_id
)
static
int
sb_pnp_probe
(
struct
pnp_card_link
*
card
,
const
struct
pnp_card_
device_
id
*
card_id
)
{
struct
sb_card_config
*
scc
;
struct
sb_module_options
sbmo
=
{
0
};
/* Default to 0 for PnP */
...
...
sound/oss/sb_card.h
View file @
d04b51de
...
...
@@ -23,7 +23,7 @@ struct sb_card_config {
*/
/* Card PnP ID Table */
static
struct
pnp_card_id
sb_pnp_card_table
[]
=
{
static
struct
pnp_card_
device_
id
sb_pnp_card_table
[]
=
{
/* Sound Blaster 16 */
{.
id
=
"CTL0024"
,
.
driver_data
=
0
,
devs
:
{
{.
id
=
"CTL0031"
},
}
},
/* Sound Blaster 16 */
...
...
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