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
aa056739
Commit
aa056739
authored
Apr 25, 2003
by
Dave Jones
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[AGPGART] More setup routine -> static struct conversions.
Again from Christoph Hellwig.
parent
e544a3bd
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
580 additions
and
744 deletions
+580
-744
drivers/char/agp/ali-agp.c
drivers/char/agp/ali-agp.c
+94
-112
drivers/char/agp/alpha-agp.c
drivers/char/agp/alpha-agp.c
+48
-45
drivers/char/agp/amd-k7-agp.c
drivers/char/agp/amd-k7-agp.c
+63
-82
drivers/char/agp/amd-k8-agp.c
drivers/char/agp/amd-k8-agp.c
+54
-65
drivers/char/agp/hp-agp.c
drivers/char/agp/hp-agp.c
+43
-53
drivers/char/agp/i460-agp.c
drivers/char/agp/i460-agp.c
+40
-47
drivers/char/agp/sis-agp.c
drivers/char/agp/sis-agp.c
+62
-96
drivers/char/agp/sworks-agp.c
drivers/char/agp/sworks-agp.c
+68
-99
drivers/char/agp/via-agp.c
drivers/char/agp/via-agp.c
+108
-145
No files found.
drivers/char/agp/ali-agp.c
View file @
aa056739
...
...
@@ -195,34 +195,30 @@ static struct aper_size_info_32 ali_generic_sizes[7] =
{
4
,
1024
,
0
,
3
}
};
static
int
__init
ali_generic_setup
(
struct
pci_dev
*
pdev
)
{
agp_bridge
->
masks
=
ali_generic_masks
;
agp_bridge
->
aperture_sizes
=
(
void
*
)
ali_generic_sizes
;
agp_bridge
->
size_type
=
U32_APER_SIZE
;
agp_bridge
->
num_aperture_sizes
=
7
;
agp_bridge
->
dev_private_data
=
NULL
;
agp_bridge
->
needs_scratch_page
=
FALSE
;
agp_bridge
->
configure
=
ali_configure
;
agp_bridge
->
fetch_size
=
ali_fetch_size
;
agp_bridge
->
cleanup
=
ali_cleanup
;
agp_bridge
->
tlb_flush
=
ali_tlbflush
;
agp_bridge
->
mask_memory
=
ali_mask_memory
;
agp_bridge
->
agp_enable
=
agp_generic_enable
;
agp_bridge
->
cache_flush
=
ali_cache_flush
;
agp_bridge
->
create_gatt_table
=
agp_generic_create_gatt_table
;
agp_bridge
->
free_gatt_table
=
agp_generic_free_gatt_table
;
agp_bridge
->
insert_memory
=
agp_generic_insert_memory
;
agp_bridge
->
remove_memory
=
agp_generic_remove_memory
;
agp_bridge
->
alloc_by_type
=
agp_generic_alloc_by_type
;
agp_bridge
->
free_by_type
=
agp_generic_free_by_type
;
agp_bridge
->
agp_alloc_page
=
ali_alloc_page
;
agp_bridge
->
agp_destroy_page
=
ali_destroy_page
;
agp_bridge
->
suspend
=
agp_generic_suspend
;
agp_bridge
->
resume
=
agp_generic_resume
;
agp_bridge
->
cant_use_aperture
=
0
;
return
0
;
}
struct
agp_bridge_data
ali_generic_bridge
=
{
.
type
=
ALI_GENERIC
,
.
masks
=
ali_generic_masks
,
.
aperture_sizes
=
(
void
*
)
ali_generic_sizes
,
.
size_type
=
U32_APER_SIZE
,
.
num_aperture_sizes
=
7
,
.
configure
=
ali_configure
,
.
fetch_size
=
ali_fetch_size
,
.
cleanup
=
ali_cleanup
,
.
tlb_flush
=
ali_tlbflush
,
.
mask_memory
=
ali_mask_memory
,
.
agp_enable
=
agp_generic_enable
,
.
cache_flush
=
ali_cache_flush
,
.
create_gatt_table
=
agp_generic_create_gatt_table
,
.
free_gatt_table
=
agp_generic_free_gatt_table
,
.
insert_memory
=
agp_generic_insert_memory
,
.
remove_memory
=
agp_generic_remove_memory
,
.
alloc_by_type
=
agp_generic_alloc_by_type
,
.
free_by_type
=
agp_generic_free_by_type
,
.
agp_alloc_page
=
ali_alloc_page
,
.
agp_destroy_page
=
ali_destroy_page
,
.
suspend
=
agp_generic_suspend
,
.
resume
=
agp_generic_resume
,
};
struct
agp_device_ids
ali_agp_device_ids
[]
__initdata
=
{
...
...
@@ -266,93 +262,85 @@ struct agp_device_ids ali_agp_device_ids[] __initdata =
{
},
/* dummy final entry, always present */
};
/* scan table above for supported devices */
static
int
__init
agp_lookup_host_bridge
(
struct
pci_dev
*
pdev
)
{
int
j
=
0
;
struct
agp_device_ids
*
devs
;
devs
=
ali_agp_device_ids
;
while
(
devs
[
j
].
chipset_name
!=
NULL
)
{
if
(
pdev
->
device
==
devs
[
j
].
device_id
)
{
if
(
pdev
->
device
==
PCI_DEVICE_ID_AL_M1621
)
{
u8
hidden_1621_id
;
pci_read_config_byte
(
pdev
,
0xFB
,
&
hidden_1621_id
);
switch
(
hidden_1621_id
)
{
case
0x31
:
devs
[
j
].
chipset_name
=
"M1631"
;
break
;
case
0x32
:
devs
[
j
].
chipset_name
=
"M1632"
;
break
;
case
0x41
:
devs
[
j
].
chipset_name
=
"M1641"
;
break
;
case
0x43
:
break
;
case
0x47
:
devs
[
j
].
chipset_name
=
"M1647"
;
break
;
case
0x51
:
devs
[
j
].
chipset_name
=
"M1651"
;
break
;
default:
break
;
}
}
printk
(
KERN_INFO
PFX
"Detected ALi %s chipset
\n
"
,
devs
[
j
].
chipset_name
);
if
(
devs
[
j
].
chipset
!=
0
)
agp_bridge
->
type
=
devs
[
j
].
chipset
;
else
agp_bridge
->
type
=
ALI_GENERIC
;
if
(
devs
[
j
].
chipset_setup
!=
NULL
)
return
devs
[
j
].
chipset_setup
(
pdev
);
else
return
ali_generic_setup
(
pdev
);
}
j
++
;
}
/* try init anyway, if user requests it */
if
(
agp_try_unsupported
)
{
printk
(
KERN_WARNING
PFX
"Trying generic ALi routines"
" for device id: %04x
\n
"
,
pdev
->
device
);
agp_bridge
->
type
=
ALI_GENERIC
;
return
ali_generic_setup
(
pdev
);
}
printk
(
KERN_ERR
PFX
"Unsupported ALi chipset (device id: %04x),"
" you might want to try agp_try_unsupported=1.
\n
"
,
pdev
->
device
);
return
-
ENODEV
;
}
static
struct
agp_driver
ali_agp_driver
=
{
.
owner
=
THIS_MODULE
,
};
static
int
__init
agp_ali_probe
(
struct
pci_dev
*
dev
,
const
struct
pci_device_id
*
ent
)
static
int
__init
agp_ali_probe
(
struct
pci_dev
*
pdev
,
const
struct
pci_device_id
*
ent
)
{
u8
cap_ptr
=
0
;
struct
agp_device_ids
*
devs
=
ali_agp_device_ids
;
u8
hidden_1621_id
,
cap_ptr
;
int
j
;
cap_ptr
=
pci_find_capability
(
dev
,
PCI_CAP_ID_AGP
);
if
(
cap_ptr
==
0
)
cap_ptr
=
pci_find_capability
(
p
dev
,
PCI_CAP_ID_AGP
);
if
(
!
cap_ptr
)
return
-
ENODEV
;
/* probe for known chipsets */
if
(
agp_lookup_host_bridge
(
dev
)
!=
-
ENODEV
)
{
agp_bridge
->
dev
=
dev
;
agp_bridge
->
capndx
=
cap_ptr
;
/* Fill in the mode register */
pci_read_config_dword
(
agp_bridge
->
dev
,
agp_bridge
->
capndx
+
PCI_AGP_STATUS
,
&
agp_bridge
->
mode
);
ali_agp_driver
.
dev
=
dev
;
agp_register_driver
(
&
ali_agp_driver
);
return
0
;
for
(
j
=
0
;
devs
[
j
].
chipset_name
;
j
++
)
{
if
(
pdev
->
device
==
devs
[
j
].
device_id
)
goto
found
;
}
return
-
ENODEV
;
if
(
!
agp_try_unsupported
)
{
printk
(
KERN_ERR
PFX
"Unsupported ALi chipset (device id: %04x),"
" you might want to try agp_try_unsupported=1.
\n
"
,
pdev
->
device
);
return
-
ENODEV
;
}
printk
(
KERN_WARNING
PFX
"Trying generic ALi routines"
" for device id: %04x
\n
"
,
pdev
->
device
);
goto
generic
;
found:
switch
(
pdev
->
device
==
PCI_DEVICE_ID_AL_M1621
)
{
case
PCI_DEVICE_ID_AL_M1541
:
ali_generic_bridge
.
type
=
ALI_M1541
;
break
;
case
PCI_DEVICE_ID_AL_M1621
:
pci_read_config_byte
(
pdev
,
0xFB
,
&
hidden_1621_id
);
switch
(
hidden_1621_id
)
{
case
0x31
:
devs
[
j
].
chipset_name
=
"M1631"
;
break
;
case
0x32
:
devs
[
j
].
chipset_name
=
"M1632"
;
break
;
case
0x41
:
devs
[
j
].
chipset_name
=
"M1641"
;
break
;
case
0x43
:
break
;
case
0x47
:
devs
[
j
].
chipset_name
=
"M1647"
;
break
;
case
0x51
:
devs
[
j
].
chipset_name
=
"M1651"
;
break
;
default:
break
;
}
}
printk
(
KERN_INFO
PFX
"Detected ALi %s chipset
\n
"
,
devs
[
j
].
chipset_name
);
generic:
ali_generic_bridge
.
dev
=
pdev
;
ali_generic_bridge
.
capndx
=
cap_ptr
;
/* Fill in the mode register */
pci_read_config_dword
(
pdev
,
ali_generic_bridge
.
capndx
+
PCI_AGP_STATUS
,
&
ali_generic_bridge
.
mode
);
memcpy
(
agp_bridge
,
&
ali_generic_bridge
,
sizeof
(
struct
agp_bridge_data
));
ali_agp_driver
.
dev
=
pdev
;
agp_register_driver
(
&
ali_agp_driver
);
return
0
;
}
static
struct
pci_device_id
agp_ali_pci_table
[]
__initdata
=
{
...
...
@@ -377,13 +365,7 @@ static struct __initdata pci_driver agp_ali_pci_driver = {
static
int
__init
agp_ali_init
(
void
)
{
int
ret_val
;
ret_val
=
pci_module_init
(
&
agp_ali_pci_driver
);
if
(
ret_val
)
agp_bridge
->
type
=
NOT_SUPPORTED
;
return
ret_val
;
return
pci_module_init
(
&
agp_ali_pci_driver
);
}
static
void
__exit
agp_ali_cleanup
(
void
)
...
...
drivers/char/agp/alpha-agp.c
View file @
aa056739
...
...
@@ -129,21 +129,53 @@ static int alpha_core_agp_remove_memory(agp_memory *mem, off_t pg_start,
static
struct
agp_driver
alpha_core_agp_driver
=
{
.
owner
=
THIS_MODULE
,
};
struct
agp_bridge_data
alpha_core_agp_bridge
=
{
.
type
=
ALPHA_CORE_AGP
,
.
masks
=
alpha_core_agp_masks
,
.
aperture_sizes
=
aper_size
,
.
current_size
=
aper_size
,
/* only one entry */
.
size_type
=
FIXED_APER_SIZE
,
.
num_aperture_sizes
=
1
,
.
dev_private_data
=
agp
,
.
configure
=
alpha_core_agp_configure
,
.
fetch_size
=
alpha_core_agp_fetch_size
,
.
cleanup
=
alpha_core_agp_cleanup
,
.
tlb_flush
=
alpha_core_agp_tlbflush
,
.
mask_memory
=
alpha_core_agp_mask_memory
,
.
agp_enable
=
alpha_core_agp_enable
,
.
cache_flush
=
global_cache_flush
,
.
create_gatt_table
=
alpha_core_agp_nop
,
.
free_gatt_table
=
alpha_core_agp_nop
,
.
insert_memory
=
alpha_core_agp_insert_memory
,
.
remove_memory
=
alpha_core_agp_remove_memory
,
.
alloc_by_type
=
agp_generic_alloc_by_type
,
.
free_by_type
=
agp_generic_free_by_type
,
.
agp_alloc_page
=
agp_generic_alloc_page
,
.
agp_destroy_page
=
agp_generic_destroy_page
,
.
mode
=
agp
->
capability
.
lw
,
.
cant_use_aperture
=
1
,
.
vm_ops
=
&
alpha_core_agp_vm_ops
,
};
int
__init
alpha_core_agp_setup
(
void
)
{
alpha_agp_info
*
agp
=
alpha_mv
.
agp_info
();
struct
pci_dev
*
pdev
;
/* faked */
struct
aper_size_info_fixed
*
aper_size
;
if
(
!
agp
)
return
-
ENODEV
;
if
(
agp
->
ops
->
setup
(
agp
))
return
-
ENODEV
;
if
(
!
agp
)
return
-
ENODEV
;
if
(
agp
->
ops
->
setup
(
agp
))
return
-
ENODEV
;
/*
* Build the aperture size descriptor
*/
aper_size
=
alpha_core_agp_sizes
;
if
(
!
aper_size
)
return
-
ENOMEM
;
if
(
!
aper_size
)
return
-
ENOMEM
;
aper_size
->
size
=
agp
->
aperture
.
size
/
(
1024
*
1024
);
aper_size
->
num_entries
=
agp
->
aperture
.
size
/
PAGE_SIZE
;
aper_size
->
page_order
=
ffs
(
aper_size
->
num_entries
/
1024
)
-
1
;
...
...
@@ -151,43 +183,18 @@ alpha_core_agp_setup(void)
/*
* Build a fake pci_dev struct
*/
if
(
!
(
agp_bridge
->
dev
=
kmalloc
(
sizeof
(
struct
pci_dev
),
GFP_KERNEL
)))
{
pdev
=
kmalloc
(
sizeof
(
struct
pci_dev
),
GFP_KERNEL
);
if
(
!
pdev
)
return
-
ENOMEM
;
}
agp_bridge
->
dev
->
vendor
=
0xffff
;
agp_bridge
->
dev
->
device
=
0xffff
;
agp_bridge
->
dev
->
sysdata
=
agp
->
hose
;
pdev
->
vendor
=
0xffff
;
pdev
->
device
=
0xffff
;
pdev
->
sysdata
=
agp
->
hose
;
/*
* Fill in the rest of the agp_bridge struct
*/
agp_bridge
->
masks
=
alpha_core_agp_masks
;
agp_bridge
->
aperture_sizes
=
aper_size
;
agp_bridge
->
current_size
=
aper_size
;
/* only one entry */
agp_bridge
->
size_type
=
FIXED_APER_SIZE
;
agp_bridge
->
num_aperture_sizes
=
1
;
agp_bridge
->
dev_private_data
=
agp
;
agp_bridge
->
needs_scratch_page
=
FALSE
;
agp_bridge
->
configure
=
alpha_core_agp_configure
;
agp_bridge
->
fetch_size
=
alpha_core_agp_fetch_size
;
agp_bridge
->
cleanup
=
alpha_core_agp_cleanup
;
agp_bridge
->
tlb_flush
=
alpha_core_agp_tlbflush
;
agp_bridge
->
mask_memory
=
alpha_core_agp_mask_memory
;
agp_bridge
->
agp_enable
=
alpha_core_agp_enable
;
agp_bridge
->
cache_flush
=
global_cache_flush
;
agp_bridge
->
create_gatt_table
=
alpha_core_agp_nop
;
agp_bridge
->
free_gatt_table
=
alpha_core_agp_nop
;
agp_bridge
->
insert_memory
=
alpha_core_agp_insert_memory
;
agp_bridge
->
remove_memory
=
alpha_core_agp_remove_memory
;
agp_bridge
->
alloc_by_type
=
agp_generic_alloc_by_type
;
agp_bridge
->
free_by_type
=
agp_generic_free_by_type
;
agp_bridge
->
agp_alloc_page
=
agp_generic_alloc_page
;
agp_bridge
->
agp_destroy_page
=
agp_generic_destroy_page
;
agp_bridge
->
mode
=
agp
->
capability
.
lw
;
agp_bridge
->
cant_use_aperture
=
1
;
agp_bridge
->
vm_ops
=
&
alpha_core_agp_vm_ops
;
alpha_core_agp_driver
.
dev
=
agp_bridge
->
dev
;
alpha_core_agp_bridge
.
dev
=
pdev
;
memcpy
(
agp_bridge
,
&
alpha_core_agp_bridge
,
sizeof
(
struct
agp_bridge_data
));
alpha_core_agp_driver
.
dev
=
pdev
;
agp_register_driver
(
&
alpha_core_agp_driver
);
printk
(
KERN_INFO
"Detected AGP on hose %d
\n
"
,
agp
->
hose
->
index
);
return
0
;
...
...
@@ -195,13 +202,9 @@ alpha_core_agp_setup(void)
static
int
__init
agp_alpha_core_init
(
void
)
{
int
ret_val
=
-
ENODEV
;
if
(
alpha_mv
.
agp_info
)
{
agp_bridge
->
type
=
ALPHA_CORE_AGP
;
ret_val
=
alpha_core_agp_setup
();
}
return
ret_val
;
if
(
alpha_mv
.
agp_info
)
return
alpha_core_agp_setup
();
return
-
ENODEV
;
}
static
void
__exit
agp_alpha_core_cleanup
(
void
)
...
...
drivers/char/agp/amd-k7-agp.c
View file @
aa056739
...
...
@@ -355,34 +355,31 @@ static struct gatt_mask amd_irongate_masks[] =
{.
mask
=
0x00000001
,
.
type
=
0
}
};
static
int
__init
amd_irongate_setup
(
struct
pci_dev
*
pdev
)
{
agp_bridge
->
masks
=
amd_irongate_masks
;
agp_bridge
->
aperture_sizes
=
(
void
*
)
amd_irongate_sizes
;
agp_bridge
->
size_type
=
LVL2_APER_SIZE
;
agp_bridge
->
num_aperture_sizes
=
7
;
agp_bridge
->
dev_private_data
=
(
void
*
)
&
amd_irongate_private
;
agp_bridge
->
needs_scratch_page
=
FALSE
;
agp_bridge
->
configure
=
amd_irongate_configure
;
agp_bridge
->
fetch_size
=
amd_irongate_fetch_size
;
agp_bridge
->
cleanup
=
amd_irongate_cleanup
;
agp_bridge
->
tlb_flush
=
amd_irongate_tlbflush
;
agp_bridge
->
mask_memory
=
amd_irongate_mask_memory
;
agp_bridge
->
agp_enable
=
agp_generic_enable
;
agp_bridge
->
cache_flush
=
global_cache_flush
;
agp_bridge
->
create_gatt_table
=
amd_create_gatt_table
;
agp_bridge
->
free_gatt_table
=
amd_free_gatt_table
;
agp_bridge
->
insert_memory
=
amd_insert_memory
;
agp_bridge
->
remove_memory
=
amd_remove_memory
;
agp_bridge
->
alloc_by_type
=
agp_generic_alloc_by_type
;
agp_bridge
->
free_by_type
=
agp_generic_free_by_type
;
agp_bridge
->
agp_alloc_page
=
agp_generic_alloc_page
;
agp_bridge
->
agp_destroy_page
=
agp_generic_destroy_page
;
agp_bridge
->
suspend
=
agp_generic_suspend
;
agp_bridge
->
resume
=
agp_generic_resume
;
agp_bridge
->
cant_use_aperture
=
0
;
return
0
;
}
struct
agp_bridge_data
amd_irongate_bridge
=
{
.
type
=
AMD_GENERIC
,
.
masks
=
amd_irongate_masks
,
.
aperture_sizes
=
(
void
*
)
amd_irongate_sizes
,
.
size_type
=
LVL2_APER_SIZE
,
.
num_aperture_sizes
=
7
,
.
dev_private_data
=
(
void
*
)
&
amd_irongate_private
,
.
configure
=
amd_irongate_configure
,
.
fetch_size
=
amd_irongate_fetch_size
,
.
cleanup
=
amd_irongate_cleanup
,
.
tlb_flush
=
amd_irongate_tlbflush
,
.
mask_memory
=
amd_irongate_mask_memory
,
.
agp_enable
=
agp_generic_enable
,
.
cache_flush
=
global_cache_flush
,
.
create_gatt_table
=
amd_create_gatt_table
,
.
free_gatt_table
=
amd_free_gatt_table
,
.
insert_memory
=
amd_insert_memory
,
.
remove_memory
=
amd_remove_memory
,
.
alloc_by_type
=
agp_generic_alloc_by_type
,
.
free_by_type
=
agp_generic_free_by_type
,
.
agp_alloc_page
=
agp_generic_alloc_page
,
.
agp_destroy_page
=
agp_generic_destroy_page
,
.
suspend
=
agp_generic_suspend
,
.
resume
=
agp_generic_resume
,
};
struct
agp_device_ids
amd_agp_device_ids
[]
__initdata
=
{
...
...
@@ -401,66 +398,56 @@ struct agp_device_ids amd_agp_device_ids[] __initdata =
{
},
/* dummy final entry, always present */
};
static
struct
agp_driver
amd_k7_agp_driver
=
{
.
owner
=
THIS_MODULE
,
};
/* scan table above for supported devices */
static
int
__init
agp_lookup_host_bridge
(
struct
pci_dev
*
pdev
)
/* Supported Device Scanning routine */
static
int
__init
agp_amdk7_probe
(
struct
pci_dev
*
pdev
,
const
struct
pci_device_id
*
ent
)
{
int
j
=
0
;
struct
agp_device_ids
*
devs
;
devs
=
amd_agp_device_ids
;
struct
agp_device_ids
*
devs
=
amd_agp_device_ids
;
u8
cap_ptr
;
int
j
;
while
(
devs
[
j
].
chipset_name
!=
NULL
)
{
if
(
pdev
->
device
==
devs
[
j
].
device_id
)
{
printk
(
KERN_INFO
PFX
"Detected AMD %s chipset
\n
"
,
devs
[
j
].
chipset_name
);
agp_bridge
->
type
=
AMD_GENERIC
;
cap_ptr
=
pci_find_capability
(
pdev
,
PCI_CAP_ID_AGP
);
if
(
!
cap_ptr
)
return
-
ENODEV
;
if
(
devs
[
j
].
chipset_setup
!=
NULL
)
return
devs
[
j
].
chipset_setup
(
pdev
);
else
return
amd_irongate_setup
(
pdev
);
for
(
j
=
0
;
devs
[
j
].
chipset_name
;
j
++
)
{
if
(
pdev
->
device
==
devs
[
j
].
device_id
)
{
printk
(
KERN_INFO
PFX
"Detected AMD %s chipset
\n
"
,
devs
[
j
].
chipset_name
);
amd_irongate_bridge
.
type
=
devs
[
j
].
chipset
;
goto
found
;
}
j
++
;
}
/* try init anyway, if user requests it */
if
(
agp_try_unsupported
)
{
printk
(
KERN_WARNING
PFX
"Trying generic AMD routines
"
" for device id: %04x
\n
"
,
pdev
->
device
);
agp_bridge
->
type
=
AMD_GENERIC
;
return
amd_irongate_setup
(
pdev
)
;
if
(
!
agp_try_unsupported
)
{
printk
(
KERN_ERR
PFX
"Unsupported AMD chipset (device id: %04x),
"
" you might want to try agp_try_unsupported=1.
\n
"
,
pdev
->
device
)
;
return
-
ENODEV
;
}
printk
(
KERN_ERR
PFX
"Unsupported AMD chipset (device id: %04x),"
" you might want to try agp_try_unsupported=1.
\n
"
,
pdev
->
device
);
return
-
ENODEV
;
}
printk
(
KERN_WARNING
PFX
"Trying generic AMD routines"
" for device id: %04x
\n
"
,
pdev
->
device
);
found:
amd_irongate_bridge
.
dev
=
pdev
;
amd_irongate_bridge
.
capndx
=
cap_ptr
;
static
struct
agp_driver
amd_k7_agp_driver
=
{
.
owner
=
THIS_MODULE
,
};
/* Fill in the mode register */
pci_read_config_dword
(
pdev
,
amd_irongate_bridge
.
capndx
+
PCI_AGP_STATUS
,
&
amd_irongate_bridge
.
mode
);
/* Supported Device Scanning routine */
static
int
__init
agp_amdk7_probe
(
struct
pci_dev
*
dev
,
const
struct
pci_device_id
*
ent
)
{
u8
cap_ptr
=
0
;
memcpy
(
agp_bridge
,
&
amd_irongate_bridge
,
sizeof
(
struct
agp_bridge_data
));
cap_ptr
=
pci_find_capability
(
dev
,
PCI_CAP_ID_AGP
);
if
(
cap_ptr
==
0
)
return
-
ENODEV
;
if
(
agp_lookup_host_bridge
(
dev
)
!=
-
ENODEV
)
{
agp_bridge
->
dev
=
dev
;
agp_bridge
->
capndx
=
cap_ptr
;
/* Fill in the mode register */
pci_read_config_dword
(
agp_bridge
->
dev
,
agp_bridge
->
capndx
+
PCI_AGP_STATUS
,
&
agp_bridge
->
mode
);
amd_k7_agp_driver
.
dev
=
dev
;
agp_register_driver
(
&
amd_k7_agp_driver
);
return
0
;
}
return
-
ENODEV
;
amd_k7_agp_driver
.
dev
=
pdev
;
agp_register_driver
(
&
amd_k7_agp_driver
);
return
0
;
}
static
struct
pci_device_id
agp_amdk7_pci_table
[]
__initdata
=
{
...
...
@@ -485,13 +472,7 @@ static struct __initdata pci_driver agp_amdk7_pci_driver = {
static
int
__init
agp_amdk7_init
(
void
)
{
int
ret_val
;
ret_val
=
pci_module_init
(
&
agp_amdk7_pci_driver
);
if
(
ret_val
)
agp_bridge
->
type
=
NOT_SUPPORTED
;
return
ret_val
;
return
pci_module_init
(
&
agp_amdk7_pci_driver
);
}
static
void
__exit
agp_amdk7_cleanup
(
void
)
...
...
drivers/char/agp/amd-k8-agp.c
View file @
aa056739
...
...
@@ -227,74 +227,71 @@ static struct gatt_mask amd_8151_masks[] =
{.
mask
=
0x00000001
,
.
type
=
0
}
};
static
int
__init
amd_8151_setup
(
struct
pci_dev
*
pdev
)
{
struct
pci_dev
*
dev
;
int
i
=
0
;
agp_bridge
->
masks
=
amd_8151_masks
;
agp_bridge
->
aperture_sizes
=
(
void
*
)
amd_8151_sizes
;
agp_bridge
->
size_type
=
U32_APER_SIZE
;
agp_bridge
->
num_aperture_sizes
=
7
;
agp_bridge
->
dev_private_data
=
NULL
;
agp_bridge
->
needs_scratch_page
=
FALSE
;
agp_bridge
->
configure
=
amd_8151_configure
;
agp_bridge
->
fetch_size
=
amd_x86_64_fetch_size
;
agp_bridge
->
cleanup
=
amd_8151_cleanup
;
agp_bridge
->
tlb_flush
=
amd_x86_64_tlbflush
;
agp_bridge
->
mask_memory
=
amd_8151_mask_memory
;
agp_bridge
->
agp_enable
=
agp_generic_enable
;
agp_bridge
->
cache_flush
=
global_cache_flush
;
agp_bridge
->
create_gatt_table
=
agp_generic_create_gatt_table
;
agp_bridge
->
free_gatt_table
=
agp_generic_free_gatt_table
;
agp_bridge
->
insert_memory
=
x86_64_insert_memory
;
agp_bridge
->
remove_memory
=
agp_generic_remove_memory
;
agp_bridge
->
alloc_by_type
=
agp_generic_alloc_by_type
;
agp_bridge
->
free_by_type
=
agp_generic_free_by_type
;
agp_bridge
->
agp_alloc_page
=
agp_generic_alloc_page
;
agp_bridge
->
agp_destroy_page
=
agp_generic_destroy_page
;
agp_bridge
->
suspend
=
agp_generic_suspend
;
agp_bridge
->
resume
=
agp_generic_resume
;
agp_bridge
->
cant_use_aperture
=
0
;
/* cache pci_devs of northbridges. */
pci_for_each_dev
(
dev
)
{
if
(
dev
->
bus
->
number
==
0
&&
PCI_FUNC
(
dev
->
devfn
)
==
3
&&
(
PCI_SLOT
(
dev
->
devfn
)
>=
24
)
&&
(
PCI_SLOT
(
dev
->
devfn
)
<=
31
))
{
hammers
[
i
++
]
=
dev
;
nr_garts
=
i
;
if
(
i
==
MAX_HAMMER_GARTS
)
return
0
;
}
}
return
0
;
}
struct
agp_bridge_data
amd_8151_bridge
=
{
.
masks
=
amd_8151_masks
,
.
aperture_sizes
=
(
void
*
)
amd_8151_sizes
,
.
size_type
=
U32_APER_SIZE
,
.
num_aperture_sizes
=
7
,
.
configure
=
amd_8151_configure
,
.
fetch_size
=
amd_x86_64_fetch_size
,
.
cleanup
=
amd_8151_cleanup
,
.
tlb_flush
=
amd_x86_64_tlbflush
,
.
mask_memory
=
amd_8151_mask_memory
,
.
agp_enable
=
agp_generic_enable
,
.
cache_flush
=
global_cache_flush
,
.
create_gatt_table
=
agp_generic_create_gatt_table
,
.
free_gatt_table
=
agp_generic_free_gatt_table
,
.
insert_memory
=
x86_64_insert_memory
,
.
remove_memory
=
agp_generic_remove_memory
,
.
alloc_by_type
=
agp_generic_alloc_by_type
,
.
free_by_type
=
agp_generic_free_by_type
,
.
agp_alloc_page
=
agp_generic_alloc_page
,
.
agp_destroy_page
=
agp_generic_destroy_page
,
.
suspend
=
agp_generic_suspend
,
.
resume
=
agp_generic_resume
,
};
static
struct
agp_driver
amd_k8_agp_driver
=
{
.
owner
=
THIS_MODULE
,
};
static
int
__init
agp_amdk8_probe
(
struct
pci_dev
*
dev
,
const
struct
pci_device_id
*
ent
)
static
int
__init
agp_amdk8_probe
(
struct
pci_dev
*
pdev
,
const
struct
pci_device_id
*
ent
)
{
u8
cap_ptr
=
0
;
struct
pci_dev
*
loop_dev
;
u8
cap_ptr
;
int
i
=
0
;
cap_ptr
=
pci_find_capability
(
dev
,
PCI_CAP_ID_AGP
);
if
(
cap_ptr
==
0
)
cap_ptr
=
pci_find_capability
(
p
dev
,
PCI_CAP_ID_AGP
);
if
(
!
cap_ptr
)
return
-
ENODEV
;
printk
(
KERN_INFO
PFX
"Detected Opteron/Athlon64 on-CPU GART
\n
"
);
printk
(
KERN_INFO
PFX
"Detected Opteron/Athlon64 on-CPU GART
\n
"
);
a
gp_bridge
->
dev
=
dev
;
a
gp_bridge
->
capndx
=
cap_ptr
;
a
md_8151_bridge
.
dev
=
p
dev
;
a
md_8151_bridge
.
capndx
=
cap_ptr
;
/* Fill in the mode register */
pci_read_config_dword
(
agp_bridge
->
dev
,
agp_bridge
->
capndx
+
PCI_AGP_STATUS
,
&
agp_bridge
->
mode
);
amd_8151_setup
(
dev
);
amd_k8_agp_driver
.
dev
=
dev
;
pci_read_config_dword
(
pdev
,
amd_8151_bridge
.
capndx
+
PCI_AGP_STATUS
,
&
amd_8151_bridge
.
mode
);
/* cache pci_devs of northbridges. */
pci_for_each_dev
(
loop_dev
)
{
if
(
loop_dev
->
bus
->
number
==
0
&&
PCI_FUNC
(
loop_dev
->
devfn
)
==
3
&&
PCI_SLOT
(
loop_dev
->
devfn
)
>=
24
&&
PCI_SLOT
(
loop_dev
->
devfn
)
<=
31
)
{
hammers
[
i
++
]
=
loop_dev
;
nr_garts
=
i
;
if
(
i
==
MAX_HAMMER_GARTS
)
return
0
;
}
}
memcpy
(
agp_bridge
,
&
amd_8151_bridge
,
sizeof
(
struct
agp_bridge_data
));
amd_k8_agp_driver
.
dev
=
pdev
;
agp_register_driver
(
&
amd_k8_agp_driver
);
return
0
;
}
...
...
@@ -322,15 +319,7 @@ static struct __initdata pci_driver agp_amdk8_pci_driver = {
/* Not static due to IOMMU code calling it early. */
int
__init
agp_amdk8_init
(
void
)
{
int
ret_val
;
ret_val
=
pci_module_init
(
&
agp_amdk8_pci_driver
);
if
(
ret_val
)
agp_bridge
->
type
=
NOT_SUPPORTED
;
agp_bridge
->
type
=
AMD_8151
;
return
ret_val
;
return
pci_module_init
(
&
agp_amdk8_pci_driver
);
}
static
void
__exit
agp_amdk8_cleanup
(
void
)
...
...
drivers/char/agp/hp-agp.c
View file @
aa056739
...
...
@@ -328,58 +328,54 @@ static unsigned long hp_zx1_mask_memory(unsigned long addr, int type)
return
HP_ZX1_PDIR_VALID_BIT
|
addr
;
}
static
int
__init
hp_zx1_setup
(
struct
pci_dev
*
pdev
__attribute__
((
unused
)))
{
agp_bridge
->
masks
=
hp_zx1_masks
;
agp_bridge
->
dev_private_data
=
NULL
;
agp_bridge
->
size_type
=
FIXED_APER_SIZE
;
agp_bridge
->
needs_scratch_page
=
FALSE
;
agp_bridge
->
configure
=
hp_zx1_configure
;
agp_bridge
->
fetch_size
=
hp_zx1_fetch_size
;
agp_bridge
->
cleanup
=
hp_zx1_cleanup
;
agp_bridge
->
tlb_flush
=
hp_zx1_tlbflush
;
agp_bridge
->
mask_memory
=
hp_zx1_mask_memory
;
agp_bridge
->
agp_enable
=
agp_generic_enable
;
agp_bridge
->
cache_flush
=
global_cache_flush
;
agp_bridge
->
create_gatt_table
=
hp_zx1_create_gatt_table
;
agp_bridge
->
free_gatt_table
=
hp_zx1_free_gatt_table
;
agp_bridge
->
insert_memory
=
hp_zx1_insert_memory
;
agp_bridge
->
remove_memory
=
hp_zx1_remove_memory
;
agp_bridge
->
alloc_by_type
=
agp_generic_alloc_by_type
;
agp_bridge
->
free_by_type
=
agp_generic_free_by_type
;
agp_bridge
->
agp_alloc_page
=
agp_generic_alloc_page
;
agp_bridge
->
agp_destroy_page
=
agp_generic_destroy_page
;
agp_bridge
->
cant_use_aperture
=
1
;
return
hp_zx1_ioc_init
();
}
struct
agp_bridge_data
hp_zx1_bridge
=
{
.
type
=
HP_ZX1
,
.
masks
=
hp_zx1_masks
,
.
size_type
=
FIXED_APER_SIZE
,
.
configure
=
hp_zx1_configure
,
.
fetch_size
=
hp_zx1_fetch_size
,
.
cleanup
=
hp_zx1_cleanup
,
.
tlb_flush
=
hp_zx1_tlbflush
,
.
mask_memory
=
hp_zx1_mask_memory
,
.
agp_enable
=
agp_generic_enable
,
.
cache_flush
=
global_cache_flush
,
.
create_gatt_table
=
hp_zx1_create_gatt_table
,
.
free_gatt_table
=
hp_zx1_free_gatt_table
,
.
insert_memory
=
hp_zx1_insert_memory
,
.
remove_memory
=
hp_zx1_remove_memory
,
.
alloc_by_type
=
agp_generic_alloc_by_type
,
.
free_by_type
=
agp_generic_free_by_type
,
.
agp_alloc_page
=
agp_generic_alloc_page
,
.
agp_destroy_page
=
agp_generic_destroy_page
,
.
cant_use_aperture
=
1
,
};
static
int
__init
agp_find_supported_device
(
struct
pci_dev
*
dev
)
static
struct
agp_driver
hp_agp_driver
=
{
.
owner
=
THIS_MODULE
,
};
static
int
__init
agp_hp_probe
(
struct
pci_dev
*
pdev
,
const
struct
pci_device_id
*
ent
)
{
agp_bridge
->
dev
=
dev
;
int
error
;
/* ZX1 LBAs can be either PCI or AGP bridges */
if
(
pci_find_capability
(
dev
,
PCI_CAP_ID_AGP
))
{
printk
(
KERN_INFO
PFX
"Detected HP ZX1 AGP chipset at %s
\n
"
,
dev
->
slot_name
);
agp_bridge
->
type
=
HP_ZX1
;
agp_bridge
->
dev
=
dev
;
return
hp_zx1_setup
(
dev
);
}
return
-
ENODEV
;
}
if
(
!
pci_find_capability
(
pdev
,
PCI_CAP_ID_AGP
))
return
-
ENODEV
;
static
struct
agp_driver
hp_agp_driver
=
{
.
owner
=
THIS_MODULE
,
};
printk
(
KERN_INFO
PFX
"Detected HP ZX1 AGP chipset at %s
\n
"
,
pdev
->
slot_name
);
static
int
__init
agp_hp_probe
(
struct
pci_dev
*
dev
,
const
struct
pci_device_id
*
ent
)
{
if
(
agp_find_supported_device
(
dev
)
==
0
)
{
hp_agp_driver
.
dev
=
dev
;
agp_register_driver
(
&
hp_agp_driver
);
return
0
;
}
return
-
ENODEV
;
error
=
hp_zx1_ioc_init
();
if
(
error
)
return
error
;
hp_zx1_bridge
.
dev
=
pdev
;
memcpy
(
agp_bridge
,
&
hp_zx1_bridge
,
sizeof
(
struct
agp_bridge_data
));
hp_agp_driver
.
dev
=
pdev
;
agp_register_driver
(
&
hp_agp_driver
);
return
0
;
}
static
struct
pci_device_id
agp_hp_pci_table
[]
__initdata
=
{
...
...
@@ -404,13 +400,7 @@ static struct __initdata pci_driver agp_hp_pci_driver = {
static
int
__init
agp_hp_init
(
void
)
{
int
ret_val
;
ret_val
=
pci_module_init
(
&
agp_hp_pci_driver
);
if
(
ret_val
)
agp_bridge
->
type
=
NOT_SUPPORTED
;
return
ret_val
;
return
pci_module_init
(
&
agp_hp_pci_driver
);
}
static
void
__exit
agp_hp_cleanup
(
void
)
...
...
drivers/char/agp/i460-agp.c
View file @
aa056739
...
...
@@ -523,58 +523,57 @@ static unsigned long i460_mask_memory (unsigned long addr, int type)
|
(((
addr
&
~
((
1
<<
I460_IO_PAGE_SHIFT
)
-
1
))
&
0xffffff000
)
>>
12
));
}
static
int
__init
intel_i460_setup
(
struct
pci_dev
*
pdev
__attribute__
((
unused
)))
{
agp_bridge
->
masks
=
i460_masks
;
agp_bridge
->
aperture_sizes
=
(
void
*
)
i460_sizes
;
agp_bridge
->
size_type
=
U8_APER_SIZE
;
agp_bridge
->
num_aperture_sizes
=
3
;
agp_bridge
->
dev_private_data
=
NULL
;
agp_bridge
->
needs_scratch_page
=
FALSE
;
agp_bridge
->
configure
=
i460_configure
;
agp_bridge
->
fetch_size
=
i460_fetch_size
;
agp_bridge
->
cleanup
=
i460_cleanup
;
agp_bridge
->
tlb_flush
=
i460_tlb_flush
;
agp_bridge
->
mask_memory
=
i460_mask_memory
;
agp_bridge
->
agp_enable
=
agp_generic_enable
;
agp_bridge
->
cache_flush
=
global_cache_flush
;
agp_bridge
->
create_gatt_table
=
i460_create_gatt_table
;
agp_bridge
->
free_gatt_table
=
i460_free_gatt_table
;
struct
agp_bridge_data
intel_i460_bridge
=
{
.
masks
=
i460_masks
,
.
aperture_sizes
=
(
void
*
)
i460_sizes
,
.
size_type
=
U8_APER_SIZE
,
.
num_aperture_sizes
=
3
,
.
configure
=
i460_configure
,
.
fetch_size
=
i460_fetch_size
,
.
cleanup
=
i460_cleanup
,
.
tlb_flush
=
i460_tlb_flush
,
.
mask_memory
=
i460_mask_memory
,
.
agp_enable
=
agp_generic_enable
,
.
cache_flush
=
global_cache_flush
,
.
create_gatt_table
=
i460_create_gatt_table
,
.
free_gatt_table
=
i460_free_gatt_table
,
#if I460_LARGE_IO_PAGES
agp_bridge
->
insert_memory
=
i460_insert_memory
;
agp_bridge
->
remove_memory
=
i460_remove_memory
;
agp_bridge
->
agp_alloc_page
=
i460_alloc_page
;
agp_bridge
->
agp_destroy_page
=
i460_destroy_page
;
.
insert_memory
=
i460_insert_memory
,
.
remove_memory
=
i460_remove_memory
,
.
agp_alloc_page
=
i460_alloc_page
,
.
agp_destroy_page
=
i460_destroy_page
,
#else
agp_bridge
->
insert_memory
=
i460_insert_memory_small_io_page
;
agp_bridge
->
remove_memory
=
i460_remove_memory_small_io_page
;
agp_bridge
->
agp_alloc_page
=
agp_generic_alloc_page
;
agp_bridge
->
agp_destroy_page
=
agp_generic_destroy_page
;
.
insert_memory
=
i460_insert_memory_small_io_page
,
.
remove_memory
=
i460_remove_memory_small_io_page
,
.
agp_alloc_page
=
agp_generic_alloc_page
,
.
agp_destroy_page
=
agp_generic_destroy_page
,
#endif
agp_bridge
->
alloc_by_type
=
agp_generic_alloc_by_type
;
agp_bridge
->
free_by_type
=
agp_generic_free_by_type
;
agp_bridge
->
suspend
=
agp_generic_suspend
;
agp_bridge
->
resume
=
agp_generic_resume
;
agp_bridge
->
cant_use_aperture
=
1
;
return
0
;
}
.
alloc_by_type
=
agp_generic_alloc_by_type
,
.
free_by_type
=
agp_generic_free_by_type
,
.
suspend
=
agp_generic_suspend
,
.
resume
=
agp_generic_resume
,
.
cant_use_aperture
=
1
,
};
static
struct
agp_driver
i460_agp_driver
=
{
.
owner
=
THIS_MODULE
,
};
static
int
__init
agp_intel_i460_probe
(
struct
pci_dev
*
dev
,
const
struct
pci_device_id
*
ent
)
static
int
__init
agp_intel_i460_probe
(
struct
pci_dev
*
pdev
,
const
struct
pci_device_id
*
ent
)
{
u8
cap_ptr
=
0
;
u8
cap_ptr
;
cap_ptr
=
pci_find_capability
(
dev
,
PCI_CAP_ID_AGP
);
if
(
cap_ptr
==
0
)
cap_ptr
=
pci_find_capability
(
p
dev
,
PCI_CAP_ID_AGP
);
if
(
!
cap_ptr
)
return
-
ENODEV
;
agp_bridge
->
dev
=
dev
;
agp_bridge
->
capndx
=
cap_ptr
;
intel_i460_setup
(
dev
);
i460_agp_driver
.
dev
=
dev
;
intel_i460_bridge
.
dev
=
pdev
;
intel_i460_bridge
.
capndx
=
cap_ptr
;
memcpy
(
agp_bridge
,
&
intel_i460_bridge
,
sizeof
(
struct
agp_bridge_data
));
i460_agp_driver
.
dev
=
pdev
;
agp_register_driver
(
&
i460_agp_driver
);
return
0
;
}
...
...
@@ -601,13 +600,7 @@ static struct __initdata pci_driver agp_intel_i460_pci_driver = {
static
int
__init
agp_intel_i460_init
(
void
)
{
int
ret_val
;
ret_val
=
pci_module_init
(
&
agp_intel_i460_pci_driver
);
if
(
ret_val
)
agp_bridge
->
type
=
NOT_SUPPORTED
;
return
ret_val
;
return
pci_module_init
(
&
agp_intel_i460_pci_driver
);
}
static
void
__exit
agp_intel_i460_cleanup
(
void
)
...
...
drivers/char/agp/sis-agp.c
View file @
aa056739
...
...
@@ -86,164 +86,136 @@ static struct gatt_mask sis_generic_masks[] =
{.
mask
=
0x00000000
,
.
type
=
0
}
};
static
int
__init
sis_generic_setup
(
struct
pci_dev
*
pdev
)
{
agp_bridge
->
masks
=
sis_generic_masks
;
agp_bridge
->
aperture_sizes
=
(
void
*
)
sis_generic_sizes
;
agp_bridge
->
size_type
=
U8_APER_SIZE
;
agp_bridge
->
num_aperture_sizes
=
7
;
agp_bridge
->
dev_private_data
=
NULL
;
agp_bridge
->
needs_scratch_page
=
FALSE
;
agp_bridge
->
configure
=
sis_configure
;
agp_bridge
->
fetch_size
=
sis_fetch_size
;
agp_bridge
->
cleanup
=
sis_cleanup
;
agp_bridge
->
tlb_flush
=
sis_tlbflush
;
agp_bridge
->
mask_memory
=
sis_mask_memory
;
agp_bridge
->
agp_enable
=
agp_generic_enable
;
agp_bridge
->
cache_flush
=
global_cache_flush
;
agp_bridge
->
create_gatt_table
=
agp_generic_create_gatt_table
;
agp_bridge
->
free_gatt_table
=
agp_generic_free_gatt_table
;
agp_bridge
->
insert_memory
=
agp_generic_insert_memory
;
agp_bridge
->
remove_memory
=
agp_generic_remove_memory
;
agp_bridge
->
alloc_by_type
=
agp_generic_alloc_by_type
;
agp_bridge
->
free_by_type
=
agp_generic_free_by_type
;
agp_bridge
->
agp_alloc_page
=
agp_generic_alloc_page
;
agp_bridge
->
agp_destroy_page
=
agp_generic_destroy_page
;
agp_bridge
->
suspend
=
agp_generic_suspend
;
agp_bridge
->
resume
=
agp_generic_resume
;
agp_bridge
->
cant_use_aperture
=
0
;
return
0
;
}
struct
agp_bridge_data
sis_generic_bridge
=
{
.
type
=
SIS_GENERIC
,
.
masks
=
sis_generic_masks
,
.
aperture_sizes
=
(
void
*
)
sis_generic_sizes
,
.
size_type
=
U8_APER_SIZE
,
.
num_aperture_sizes
=
7
,
.
configure
=
sis_configure
,
.
fetch_size
=
sis_fetch_size
,
.
cleanup
=
sis_cleanup
,
.
tlb_flush
=
sis_tlbflush
,
.
mask_memory
=
sis_mask_memory
,
.
agp_enable
=
agp_generic_enable
,
.
cache_flush
=
global_cache_flush
,
.
create_gatt_table
=
agp_generic_create_gatt_table
,
.
free_gatt_table
=
agp_generic_free_gatt_table
,
.
insert_memory
=
agp_generic_insert_memory
,
.
remove_memory
=
agp_generic_remove_memory
,
.
alloc_by_type
=
agp_generic_alloc_by_type
,
.
free_by_type
=
agp_generic_free_by_type
,
.
agp_alloc_page
=
agp_generic_alloc_page
,
.
agp_destroy_page
=
agp_generic_destroy_page
,
.
suspend
=
agp_generic_suspend
,
.
resume
=
agp_generic_resume
,
};
struct
agp_device_ids
sis_agp_device_ids
[]
__initdata
=
{
{
.
device_id
=
PCI_DEVICE_ID_SI_740
,
.
chipset
=
SIS_GENERIC
,
.
chipset_name
=
"740"
,
},
{
.
device_id
=
PCI_DEVICE_ID_SI_650
,
.
chipset
=
SIS_GENERIC
,
.
chipset_name
=
"650"
,
},
{
.
device_id
=
PCI_DEVICE_ID_SI_651
,
.
chipset
=
SIS_GENERIC
,
.
chipset_name
=
"651"
,
},
{
.
device_id
=
PCI_DEVICE_ID_SI_645
,
.
chipset
=
SIS_GENERIC
,
.
chipset_name
=
"645"
,
},
{
.
device_id
=
PCI_DEVICE_ID_SI_646
,
.
chipset
=
SIS_GENERIC
,
.
chipset_name
=
"646"
,
},
{
.
device_id
=
PCI_DEVICE_ID_SI_735
,
.
chipset
=
SIS_GENERIC
,
.
chipset_name
=
"735"
,
},
{
.
device_id
=
PCI_DEVICE_ID_SI_745
,
.
chipset
=
SIS_GENERIC
,
.
chipset_name
=
"745"
,
},
{
.
device_id
=
PCI_DEVICE_ID_SI_730
,
.
chipset
=
SIS_GENERIC
,
.
chipset_name
=
"730"
,
},
{
.
device_id
=
PCI_DEVICE_ID_SI_630
,
.
chipset
=
SIS_GENERIC
,
.
chipset_name
=
"630"
,
},
{
.
device_id
=
PCI_DEVICE_ID_SI_540
,
.
chipset
=
SIS_GENERIC
,
.
chipset_name
=
"540"
,
},
{
.
device_id
=
PCI_DEVICE_ID_SI_620
,
.
chipset
=
SIS_GENERIC
,
.
chipset_name
=
"620"
,
},
{
.
device_id
=
PCI_DEVICE_ID_SI_530
,
.
chipset
=
SIS_GENERIC
,
.
chipset_name
=
"530"
,
},
{
.
device_id
=
PCI_DEVICE_ID_SI_550
,
.
chipset
=
SIS_GENERIC
,
.
chipset_name
=
"550"
,
},
{
},
/* dummy final entry, always present */
};
/* scan table above for supported devices */
static
int
__init
agp_lookup_host_bridge
(
struct
pci_dev
*
pdev
)
static
struct
agp_driver
sis_agp_driver
=
{
.
owner
=
THIS_MODULE
,
};
static
int
__init
agp_sis_probe
(
struct
pci_dev
*
pdev
,
const
struct
pci_device_id
*
ent
)
{
int
j
=
0
;
struct
agp_device_ids
*
devs
;
devs
=
sis_agp_device_ids
;
struct
agp_device_ids
*
devs
=
sis_agp_device_ids
;
u8
cap_ptr
;
int
j
;
cap_ptr
=
pci_find_capability
(
pdev
,
PCI_CAP_ID_AGP
);
if
(
!
cap_ptr
)
return
-
ENODEV
;
while
(
devs
[
j
].
chipset_name
!=
NULL
)
{
/* probe for known chipsets */
for
(
j
=
0
;
devs
[
j
].
chipset_name
;
j
++
)
{
if
(
pdev
->
device
==
devs
[
j
].
device_id
)
{
printk
(
KERN_INFO
PFX
"Detected SiS %s chipset
\n
"
,
devs
[
j
].
chipset_name
);
agp_bridge
->
type
=
devs
[
j
].
chipset
;
if
(
devs
[
j
].
chipset_setup
!=
NULL
)
return
devs
[
j
].
chipset_setup
(
pdev
);
else
return
sis_generic_setup
(
pdev
);
printk
(
KERN_INFO
PFX
"Detected SiS %s chipset
\n
"
,
devs
[
j
].
chipset_name
);
goto
found
;
}
j
++
;
}
/* try init anyway, if user requests it */
if
(
agp_try_unsupported
)
{
printk
(
KERN_WARNING
PFX
"Trying generic SiS routines
"
" for device id: %04x
\n
"
,
pdev
->
device
);
agp_bridge
->
type
=
SIS_GENERIC
;
return
sis_generic_setup
(
pdev
)
;
if
(
!
agp_try_unsupported
)
{
printk
(
KERN_ERR
PFX
"Unsupported SiS chipset (device id: %04x),
"
" you might want to try agp_try_unsupported=1.
\n
"
,
pdev
->
device
)
;
return
-
ENODEV
;
}
printk
(
KERN_ERR
PFX
"Unsupported SiS chipset (device id: %04x),"
" you might want to try agp_try_unsupported=1.
\n
"
,
pdev
->
device
);
return
-
ENODEV
;
}
static
struct
agp_driver
sis_agp_driver
=
{
.
owner
=
THIS_MODULE
,
};
printk
(
KERN_WARNING
PFX
"Trying generic SiS routines"
" for device id: %04x
\n
"
,
pdev
->
device
);
static
int
__init
agp_sis_probe
(
struct
pci_dev
*
dev
,
const
struct
pci_device_id
*
ent
)
{
u8
cap_ptr
=
0
;
found:
sis_generic_bridge
.
dev
=
pdev
;
sis_generic_bridge
.
capndx
=
cap_ptr
;
cap_ptr
=
pci_find_capability
(
dev
,
PCI_CAP_ID_AGP
);
if
(
cap_ptr
==
0
)
return
-
ENODEV
;
/* Fill in the mode register */
pci_read_config_dword
(
pdev
,
sis_generic_bridge
.
capndx
+
PCI_AGP_STATUS
,
&
sis_generic_bridge
.
mode
)
;
/* probe for known chipsets */
if
(
agp_lookup_host_bridge
(
dev
)
!=
-
ENODEV
)
{
agp_bridge
->
dev
=
dev
;
agp_bridge
->
capndx
=
cap_ptr
;
/* Fill in the mode register */
pci_read_config_dword
(
agp_bridge
->
dev
,
agp_bridge
->
capndx
+
PCI_AGP_STATUS
,
&
agp_bridge
->
mode
);
sis_agp_driver
.
dev
=
dev
;
agp_register_driver
(
&
sis_agp_driver
);
return
0
;
}
return
-
ENODEV
;
memcpy
(
agp_bridge
,
&
sis_generic_bridge
,
sizeof
(
struct
agp_bridge_data
));
sis_agp_driver
.
dev
=
pdev
;
agp_register_driver
(
&
sis_agp_driver
);
return
0
;
}
static
struct
pci_device_id
agp_sis_pci_table
[]
__initdata
=
{
...
...
@@ -268,13 +240,7 @@ static struct __initdata pci_driver agp_sis_pci_driver = {
static
int
__init
agp_sis_init
(
void
)
{
int
ret_val
;
ret_val
=
pci_module_init
(
&
agp_sis_pci_driver
);
if
(
ret_val
)
agp_bridge
->
type
=
NOT_SUPPORTED
;
return
ret_val
;
return
pci_module_init
(
&
agp_sis_pci_driver
);
}
static
void
__exit
agp_sis_cleanup
(
void
)
...
...
drivers/char/agp/sworks-agp.c
View file @
aa056739
...
...
@@ -420,120 +420,95 @@ static void serverworks_agp_enable(u32 mode)
agp_device_command
(
command
,
0
);
}
static
int
__init
serverworks_setup
(
struct
pci_dev
*
pdev
)
{
u32
temp
;
u32
temp2
;
serverworks_private
.
svrwrks_dev
=
pdev
;
agp_bridge
->
masks
=
serverworks_masks
;
agp_bridge
->
aperture_sizes
=
(
void
*
)
serverworks_sizes
;
agp_bridge
->
size_type
=
LVL2_APER_SIZE
;
agp_bridge
->
num_aperture_sizes
=
7
;
agp_bridge
->
dev_private_data
=
(
void
*
)
&
serverworks_private
;
agp_bridge
->
needs_scratch_page
=
TRUE
;
agp_bridge
->
configure
=
serverworks_configure
;
agp_bridge
->
fetch_size
=
serverworks_fetch_size
;
agp_bridge
->
cleanup
=
serverworks_cleanup
;
agp_bridge
->
tlb_flush
=
serverworks_tlbflush
;
agp_bridge
->
mask_memory
=
serverworks_mask_memory
;
agp_bridge
->
agp_enable
=
serverworks_agp_enable
;
agp_bridge
->
cache_flush
=
global_cache_flush
;
agp_bridge
->
create_gatt_table
=
serverworks_create_gatt_table
;
agp_bridge
->
free_gatt_table
=
serverworks_free_gatt_table
;
agp_bridge
->
insert_memory
=
serverworks_insert_memory
;
agp_bridge
->
remove_memory
=
serverworks_remove_memory
;
agp_bridge
->
alloc_by_type
=
agp_generic_alloc_by_type
;
agp_bridge
->
free_by_type
=
agp_generic_free_by_type
;
agp_bridge
->
agp_alloc_page
=
agp_generic_alloc_page
;
agp_bridge
->
agp_destroy_page
=
agp_generic_destroy_page
;
agp_bridge
->
suspend
=
agp_generic_suspend
;
agp_bridge
->
resume
=
agp_generic_resume
;
agp_bridge
->
cant_use_aperture
=
0
;
pci_read_config_dword
(
agp_bridge
->
dev
,
SVWRKS_APSIZE
,
&
temp
);
serverworks_private
.
gart_addr_ofs
=
0x10
;
if
(
temp
&
PCI_BASE_ADDRESS_MEM_TYPE_64
)
{
pci_read_config_dword
(
agp_bridge
->
dev
,
SVWRKS_APSIZE
+
4
,
&
temp2
);
if
(
temp2
!=
0
)
{
printk
(
"Detected 64 bit aperture address, but top "
"bits are not zero. Disabling agp
\n
"
);
return
-
ENODEV
;
}
serverworks_private
.
mm_addr_ofs
=
0x18
;
}
else
{
serverworks_private
.
mm_addr_ofs
=
0x14
;
}
pci_read_config_dword
(
agp_bridge
->
dev
,
serverworks_private
.
mm_addr_ofs
,
&
temp
);
if
(
temp
&
PCI_BASE_ADDRESS_MEM_TYPE_64
)
{
pci_read_config_dword
(
agp_bridge
->
dev
,
serverworks_private
.
mm_addr_ofs
+
4
,
&
temp2
);
if
(
temp2
!=
0
)
{
printk
(
"Detected 64 bit MMIO address, but top "
"bits are not zero. Disabling agp
\n
"
);
return
-
ENODEV
;
}
}
return
0
;
}
struct
agp_bridge_data
sworks_bridge
=
{
.
type
=
SVWRKS_GENERIC
,
.
masks
=
serverworks_masks
,
.
aperture_sizes
=
(
void
*
)
serverworks_sizes
,
.
size_type
=
LVL2_APER_SIZE
,
.
num_aperture_sizes
=
7
,
.
dev_private_data
=
&
serverworks_private
,
.
configure
=
serverworks_configure
,
.
fetch_size
=
serverworks_fetch_size
,
.
cleanup
=
serverworks_cleanup
,
.
tlb_flush
=
serverworks_tlbflush
,
.
mask_memory
=
serverworks_mask_memory
,
.
agp_enable
=
serverworks_agp_enable
,
.
cache_flush
=
global_cache_flush
,
.
create_gatt_table
=
serverworks_create_gatt_table
,
.
free_gatt_table
=
serverworks_free_gatt_table
,
.
insert_memory
=
serverworks_insert_memory
,
.
remove_memory
=
serverworks_remove_memory
,
.
alloc_by_type
=
agp_generic_alloc_by_type
,
.
free_by_type
=
agp_generic_free_by_type
,
.
agp_alloc_page
=
agp_generic_alloc_page
,
.
agp_destroy_page
=
agp_generic_destroy_page
,
.
suspend
=
agp_generic_suspend
,
.
resume
=
agp_generic_resume
,
};
static
struct
agp_driver
serverworks_agp_driver
=
{
.
owner
=
THIS_MODULE
,
};
static
int
__init
agp_find_supported_device
(
struct
pci_dev
*
dev
)
static
int
__init
agp_serverworks_probe
(
struct
pci_dev
*
pdev
,
const
struct
pci_device_id
*
ent
)
{
struct
pci_dev
*
bridge_dev
;
u32
temp
,
temp2
;
/* Everything is on func 1 here so we are hardcoding function one */
bridge_dev
=
pci_find_slot
((
unsigned
int
)
dev
->
bus
->
number
,
PCI_DEVFN
(
0
,
1
));
if
(
bridge_dev
==
NULL
)
{
bridge_dev
=
pci_find_slot
((
unsigned
int
)
pdev
->
bus
->
number
,
PCI_DEVFN
(
0
,
1
));
if
(
!
bridge_dev
)
{
printk
(
KERN_INFO
PFX
"agpgart: Detected a Serverworks "
"Chipset, but could not find the secondary "
"device.
\n
"
);
return
-
ENODEV
;
}
agp_bridge
->
dev
=
dev
;
sworks_bridge
.
dev
=
p
dev
;
switch
(
dev
->
device
)
{
switch
(
p
dev
->
device
)
{
case
PCI_DEVICE_ID_SERVERWORKS_HE
:
case
PCI_DEVICE_ID_SERVERWORKS_LE
:
case
0x0007
:
agp_bridge
->
type
=
SVWRKS_GENERIC
;
return
serverworks_setup
(
bridge_dev
);
break
;
default:
if
(
agp_try_unsupported
)
{
agp_bridge
->
type
=
SVWRKS_GENERIC
;
return
serverworks_setup
(
bridge_dev
);
}
if
(
!
agp_try_unsupported
)
return
-
ENODEV
;
break
;
}
return
-
ENODEV
;
}
static
struct
agp_driver
serverworks_agp_driver
=
{
.
owner
=
THIS_MODULE
,
};
serverworks_private
.
svrwrks_dev
=
bridge_dev
;
serverworks_private
.
gart_addr_ofs
=
0x10
;
pci_read_config_dword
(
pdev
,
SVWRKS_APSIZE
,
&
temp
);
if
(
temp
&
PCI_BASE_ADDRESS_MEM_TYPE_64
)
{
pci_read_config_dword
(
pdev
,
SVWRKS_APSIZE
+
4
,
&
temp2
);
if
(
temp2
!=
0
)
{
printk
(
"Detected 64 bit aperture address, but top "
"bits are not zero. Disabling agp
\n
"
);
return
-
ENODEV
;
}
serverworks_private
.
mm_addr_ofs
=
0x18
;
}
else
serverworks_private
.
mm_addr_ofs
=
0x14
;
static
int
__init
agp_serverworks_probe
(
struct
pci_dev
*
dev
,
const
struct
pci_device_id
*
ent
)
{
if
(
agp_find_supported_device
(
dev
)
==
0
)
{
serverworks_agp_driver
.
dev
=
dev
;
agp_register_driver
(
&
serverworks_agp_driver
);
return
0
;
pci_read_config_dword
(
pdev
,
serverworks_private
.
mm_addr_ofs
,
&
temp
);
if
(
temp
&
PCI_BASE_ADDRESS_MEM_TYPE_64
)
{
pci_read_config_dword
(
pdev
,
serverworks_private
.
mm_addr_ofs
+
4
,
&
temp2
);
if
(
temp2
!=
0
)
{
printk
(
"Detected 64 bit MMIO address, but top "
"bits are not zero. Disabling agp
\n
"
);
return
-
ENODEV
;
}
}
return
-
ENODEV
;
memcpy
(
agp_bridge
,
&
sworks_bridge
,
sizeof
(
struct
agp_bridge_data
));
serverworks_agp_driver
.
dev
=
pdev
;
agp_register_driver
(
&
serverworks_agp_driver
);
return
0
;
}
static
struct
pci_device_id
agp_serverworks_pci_table
[]
__initdata
=
{
...
...
@@ -558,13 +533,7 @@ static struct __initdata pci_driver agp_serverworks_pci_driver = {
static
int
__init
agp_serverworks_init
(
void
)
{
int
ret_val
;
ret_val
=
pci_module_init
(
&
agp_serverworks_pci_driver
);
if
(
ret_val
)
agp_bridge
->
type
=
NOT_SUPPORTED
;
return
ret_val
;
return
pci_module_init
(
&
agp_serverworks_pci_driver
);
}
static
void
__exit
agp_serverworks_cleanup
(
void
)
...
...
drivers/char/agp/via-agp.c
View file @
aa056739
...
...
@@ -174,99 +174,55 @@ static struct aper_size_info_16 via_generic_agp3_sizes[11] =
{
2048
,
524288
,
9
,
1
<<
11
}
/* 2GB <- Max supported */
};
struct
agp_bridge_data
via_generic_agp3_bridge
=
{
.
type
=
VIA_GENERIC
,
.
masks
=
via_generic_masks
,
.
aperture_sizes
=
(
void
*
)
via_generic_agp3_sizes
,
.
size_type
=
U8_APER_SIZE
,
.
num_aperture_sizes
=
10
,
.
configure
=
via_configure_agp3
,
.
fetch_size
=
via_fetch_size_agp3
,
.
cleanup
=
via_cleanup_agp3
,
.
tlb_flush
=
via_tlbflush_agp3
,
.
mask_memory
=
via_mask_memory
,
.
agp_enable
=
agp_generic_enable
,
.
cache_flush
=
global_cache_flush
,
.
create_gatt_table
=
agp_generic_create_gatt_table
,
.
free_gatt_table
=
agp_generic_free_gatt_table
,
.
insert_memory
=
agp_generic_insert_memory
,
.
remove_memory
=
agp_generic_remove_memory
,
.
alloc_by_type
=
agp_generic_alloc_by_type
,
.
free_by_type
=
agp_generic_free_by_type
,
.
agp_alloc_page
=
agp_generic_alloc_page
,
.
agp_destroy_page
=
agp_generic_destroy_page
,
.
suspend
=
agp_generic_suspend
,
.
resume
=
agp_generic_resume
,
};
static
int
__init
via_generic_agp3_setup
(
struct
pci_dev
*
pdev
)
{
agp_bridge
->
dev
=
pdev
;
agp_bridge
->
type
=
VIA_GENERIC
;
agp_bridge
->
masks
=
via_generic_masks
;
agp_bridge
->
aperture_sizes
=
(
void
*
)
via_generic_agp3_sizes
;
agp_bridge
->
size_type
=
U16_APER_SIZE
;
agp_bridge
->
num_aperture_sizes
=
10
;
agp_bridge
->
dev_private_data
=
NULL
;
agp_bridge
->
needs_scratch_page
=
FALSE
;
agp_bridge
->
agp_enable
=
agp_generic_enable
;
agp_bridge
->
configure
=
via_configure_agp3
;
agp_bridge
->
fetch_size
=
via_fetch_size_agp3
;
agp_bridge
->
cleanup
=
via_cleanup_agp3
;
agp_bridge
->
tlb_flush
=
via_tlbflush_agp3
;
agp_bridge
->
mask_memory
=
via_mask_memory
;
agp_bridge
->
cache_flush
=
global_cache_flush
;
agp_bridge
->
create_gatt_table
=
agp_generic_create_gatt_table
;
agp_bridge
->
free_gatt_table
=
agp_generic_free_gatt_table
;
agp_bridge
->
insert_memory
=
agp_generic_insert_memory
;
agp_bridge
->
remove_memory
=
agp_generic_remove_memory
;
agp_bridge
->
alloc_by_type
=
agp_generic_alloc_by_type
;
agp_bridge
->
free_by_type
=
agp_generic_free_by_type
;
agp_bridge
->
agp_alloc_page
=
agp_generic_alloc_page
;
agp_bridge
->
agp_destroy_page
=
agp_generic_destroy_page
;
agp_bridge
->
suspend
=
agp_generic_suspend
;
agp_bridge
->
resume
=
agp_generic_resume
;
agp_bridge
->
cant_use_aperture
=
0
;
return
0
;
}
static
int
__init
via_generic_setup
(
struct
pci_dev
*
pdev
)
{
/* Garg, there are KT400s with KT266 IDs. */
if
(
pdev
->
device
==
PCI_DEVICE_ID_VIA_8367_0
)
{
/* Is there a KT400 subsystem ? */
if
(
pdev
->
subsystem_device
==
PCI_DEVICE_ID_VIA_8377_0
)
{
u8
reg
;
printk
(
KERN_INFO
PFX
"Found KT400 in disguise as a KT266.
\n
"
);
/* Check AGP compatibility mode. */
pci_read_config_byte
(
pdev
,
VIA_AGPSEL
,
&
reg
);
if
((
reg
&
(
1
<<
1
))
==
0
)
return
via_generic_agp3_setup
(
pdev
);
/* Its in 2.0 mode, drop through. */
}
}
agp_bridge
->
masks
=
via_generic_masks
;
agp_bridge
->
aperture_sizes
=
(
void
*
)
via_generic_sizes
;
agp_bridge
->
size_type
=
U8_APER_SIZE
;
agp_bridge
->
num_aperture_sizes
=
7
;
agp_bridge
->
dev_private_data
=
NULL
;
agp_bridge
->
needs_scratch_page
=
FALSE
;
agp_bridge
->
configure
=
via_configure
;
agp_bridge
->
fetch_size
=
via_fetch_size
;
agp_bridge
->
cleanup
=
via_cleanup
;
agp_bridge
->
tlb_flush
=
via_tlbflush
;
agp_bridge
->
mask_memory
=
via_mask_memory
;
agp_bridge
->
agp_enable
=
agp_generic_enable
;
agp_bridge
->
cache_flush
=
global_cache_flush
;
agp_bridge
->
create_gatt_table
=
agp_generic_create_gatt_table
;
agp_bridge
->
free_gatt_table
=
agp_generic_free_gatt_table
;
agp_bridge
->
insert_memory
=
agp_generic_insert_memory
;
agp_bridge
->
remove_memory
=
agp_generic_remove_memory
;
agp_bridge
->
alloc_by_type
=
agp_generic_alloc_by_type
;
agp_bridge
->
free_by_type
=
agp_generic_free_by_type
;
agp_bridge
->
agp_alloc_page
=
agp_generic_alloc_page
;
agp_bridge
->
agp_destroy_page
=
agp_generic_destroy_page
;
agp_bridge
->
suspend
=
agp_generic_suspend
;
agp_bridge
->
resume
=
agp_generic_resume
;
agp_bridge
->
cant_use_aperture
=
0
;
return
0
;
}
/* The KT400 does magick to put the AGP bridge compliant with the same
* standards version as the graphics card. */
static
int
__init
via_kt400_setup
(
struct
pci_dev
*
pdev
)
{
u8
reg
;
pci_read_config_byte
(
pdev
,
VIA_AGPSEL
,
&
reg
);
/* Check AGP 2.0 compatibility mode. */
if
((
reg
&
(
1
<<
1
))
==
0
)
return
via_generic_agp3_setup
(
pdev
);
return
via_generic_setup
(
pdev
);
}
struct
agp_bridge_data
via_generic_bridge
=
{
.
type
=
VIA_GENERIC
,
.
masks
=
via_generic_masks
,
.
aperture_sizes
=
(
void
*
)
via_generic_sizes
,
.
size_type
=
U8_APER_SIZE
,
.
num_aperture_sizes
=
7
,
.
configure
=
via_configure
,
.
fetch_size
=
via_fetch_size
,
.
cleanup
=
via_cleanup
,
.
tlb_flush
=
via_tlbflush
,
.
mask_memory
=
via_mask_memory
,
.
agp_enable
=
agp_generic_enable
,
.
cache_flush
=
global_cache_flush
,
.
create_gatt_table
=
agp_generic_create_gatt_table
,
.
free_gatt_table
=
agp_generic_free_gatt_table
,
.
insert_memory
=
agp_generic_insert_memory
,
.
remove_memory
=
agp_generic_remove_memory
,
.
alloc_by_type
=
agp_generic_alloc_by_type
,
.
free_by_type
=
agp_generic_free_by_type
,
.
agp_alloc_page
=
agp_generic_alloc_page
,
.
agp_destroy_page
=
agp_generic_destroy_page
,
.
suspend
=
agp_generic_suspend
,
.
resume
=
agp_generic_resume
,
};
static
struct
agp_device_ids
via_agp_device_ids
[]
__initdata
=
{
...
...
@@ -353,7 +309,6 @@ static struct agp_device_ids via_agp_device_ids[] __initdata =
{
.
device_id
=
PCI_DEVICE_ID_VIA_8377_0
,
.
chipset_name
=
"Apollo Pro KT400"
,
.
chipset_setup
=
via_kt400_setup
,
},
/* VT8604 / VT8605 / VT8603 / TwisterT
...
...
@@ -408,69 +363,83 @@ static struct agp_device_ids via_agp_device_ids[] __initdata =
{
},
/* dummy final entry, always present */
};
static
struct
agp_driver
via_agp_driver
=
{
.
owner
=
THIS_MODULE
,
};
/* scan table above for supported devices */
static
int
__init
agp_lookup_host_bridge
(
struct
pci_dev
*
pdev
)
static
int
__init
agp_via_probe
(
struct
pci_dev
*
pdev
,
const
struct
pci_device_id
*
ent
)
{
int
j
=
0
;
struct
agp_
device_ids
*
devs
;
devs
=
via_agp_device_ids
;
struct
agp_device_ids
*
devs
=
via_agp_device_ids
;
struct
agp_
bridge_data
*
bridge
=
&
via_generic_bridge
;
int
j
=
0
;
u8
cap_ptr
,
reg
;
while
(
devs
[
j
].
chipset_name
!=
NULL
)
{
if
(
pdev
->
device
==
devs
[
j
].
device_id
)
{
printk
(
KERN_INFO
PFX
"Detected VIA %s chipset
\n
"
,
devs
[
j
].
chipset_name
);
agp_bridge
->
type
=
VIA_GENERIC
;
cap_ptr
=
pci_find_capability
(
pdev
,
PCI_CAP_ID_AGP
);
if
(
!
cap_ptr
)
return
-
ENODEV
;
if
(
devs
[
j
].
chipset_setup
!=
NULL
)
return
devs
[
j
].
chipset_setup
(
pdev
);
else
return
via_generic_setup
(
pdev
);
/* probe for known chipsets */
for
(
j
=
0
;
devs
[
j
].
chipset_name
;
j
++
)
{
if
(
pdev
->
device
==
devs
[
j
].
device_id
)
{
printk
(
KERN_INFO
PFX
"Detected VIA %s chipset
\n
"
,
devs
[
j
].
chipset_name
);
goto
found
;
}
j
++
;
}
/* try init anyway, if user requests it */
if
(
agp_try_unsupported
)
{
printk
(
KERN_WARNING
PFX
"Trying generic VIA routines"
" for device id: %04x
\n
"
,
pdev
->
device
);
agp_bridge
->
type
=
VIA_GENERIC
;
return
via_generic_setup
(
pdev
);
printk
(
KERN_ERR
PFX
"Unsupported VIA chipset (device id: %04x),"
" you might want to try agp_try_unsupported=1.
\n
"
,
pdev
->
device
);
return
-
ENODEV
;
}
printk
(
KERN_ERR
PFX
"Unsupported VIA chipset (device id: %04x),"
" you might want to try agp_try_unsupported=1.
\n
"
,
pdev
->
device
);
return
-
ENODEV
;
}
printk
(
KERN_WARNING
PFX
"Trying generic VIA routines"
" for device id: %04x
\n
"
,
pdev
->
device
);
found:
switch
(
pdev
->
device
)
{
case
PCI_DEVICE_ID_VIA_8367_0
:
/*
* Garg, there are KT400s with KT266 IDs.
*/
/* Is there a KT400 subsystem ? */
if
(
pdev
->
subsystem_device
!=
PCI_DEVICE_ID_VIA_8377_0
)
break
;
printk
(
KERN_INFO
PFX
"Found KT400 in disguise as a KT266.
\n
"
);
/*FALLTHROUGH*/
case
PCI_DEVICE_ID_VIA_8377_0
:
/*
* The KT400 does magick to put the AGP bridge compliant
* with the same standards version as the graphics card.
*/
pci_read_config_byte
(
pdev
,
VIA_AGPSEL
,
&
reg
);
/* Check AGP 2.0 compatibility mode. */
if
((
reg
&
(
1
<<
1
))
==
0
)
{
bridge
=
&
via_generic_agp3_bridge
;
break
;
}
}
static
struct
agp_driver
via_agp_driver
=
{
.
owner
=
THIS_MODULE
,
};
bridge
->
dev
=
pdev
;
bridge
->
capndx
=
cap_ptr
;
static
int
__init
agp_via_probe
(
struct
pci_dev
*
dev
,
const
struct
pci_device_id
*
ent
)
{
u8
cap_ptr
=
0
;
/* Fill in the mode register */
pci_read_config_dword
(
pdev
,
bridge
->
capndx
+
PCI_AGP_STATUS
,
&
bridge
->
mode
)
;
cap_ptr
=
pci_find_capability
(
dev
,
PCI_CAP_ID_AGP
);
if
(
cap_ptr
==
0
)
return
-
ENODEV
;
memcpy
(
agp_bridge
,
bridge
,
sizeof
(
struct
agp_bridge_data
));
/* probe for known chipsets */
if
(
agp_lookup_host_bridge
(
dev
)
!=
-
ENODEV
)
{
agp_bridge
->
dev
=
dev
;
agp_bridge
->
capndx
=
cap_ptr
;
/* Fill in the mode register */
pci_read_config_dword
(
agp_bridge
->
dev
,
agp_bridge
->
capndx
+
PCI_AGP_STATUS
,
&
agp_bridge
->
mode
);
via_agp_driver
.
dev
=
dev
;
agp_register_driver
(
&
via_agp_driver
);
return
0
;
}
return
-
ENODEV
;
via_agp_driver
.
dev
=
pdev
;
agp_register_driver
(
&
via_agp_driver
);
return
0
;
}
static
struct
pci_device_id
agp_via_pci_table
[]
__initdata
=
{
{
.
class
=
(
PCI_CLASS_BRIDGE_HOST
<<
8
),
...
...
@@ -495,13 +464,7 @@ static struct __initdata pci_driver agp_via_pci_driver = {
static
int
__init
agp_via_init
(
void
)
{
int
ret_val
;
ret_val
=
pci_module_init
(
&
agp_via_pci_driver
);
if
(
ret_val
)
agp_bridge
->
type
=
NOT_SUPPORTED
;
return
ret_val
;
return
pci_module_init
(
&
agp_via_pci_driver
);
}
...
...
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