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
bce0670d
Commit
bce0670d
authored
Jun 30, 2004
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://linux-dj.bkbits.net/agpgart
into ppc970.osdl.org:/home/torvalds/v2.6/linux
parents
6079e248
67221af3
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
84 additions
and
35 deletions
+84
-35
drivers/char/agp/Kconfig
drivers/char/agp/Kconfig
+1
-1
drivers/char/agp/amd64-agp.c
drivers/char/agp/amd64-agp.c
+9
-0
drivers/char/agp/generic.c
drivers/char/agp/generic.c
+64
-30
drivers/char/agp/sworks-agp.c
drivers/char/agp/sworks-agp.c
+7
-3
drivers/char/agp/via-agp.c
drivers/char/agp/via-agp.c
+1
-0
include/linux/pci_ids.h
include/linux/pci_ids.h
+2
-1
No files found.
drivers/char/agp/Kconfig
View file @
bce0670d
...
...
@@ -165,7 +165,7 @@ config AGP_EFFICEON
tristate "Transmeta Efficeon support"
depends on AGP && X86 && !X86_64
help
This option
f
ives you AGP support for the Transmeta Efficeon
This option
g
ives you AGP support for the Transmeta Efficeon
series processors with integrated northbridges.
You should say Y here if you use XFree86 3.3.6 or 4.x and want to
...
...
drivers/char/agp/amd64-agp.c
View file @
bce0670d
...
...
@@ -536,6 +536,15 @@ static struct pci_device_id agp_amd64_pci_table[] = {
.
subvendor
=
PCI_ANY_ID
,
.
subdevice
=
PCI_ANY_ID
,
},
/* VIA K8T800Pro */
{
.
class
=
(
PCI_CLASS_BRIDGE_HOST
<<
8
),
.
class_mask
=
~
0
,
.
vendor
=
PCI_VENDOR_ID_VIA
,
.
device
=
PCI_DEVICE_ID_VIA_K8T800PRO_0
,
.
subvendor
=
PCI_ANY_ID
,
.
subdevice
=
PCI_ANY_ID
,
},
/* VIA K8T800 */
{
.
class
=
(
PCI_CLASS_BRIDGE_HOST
<<
8
),
...
...
drivers/char/agp/generic.c
View file @
bce0670d
/*
* AGPGART driver.
* Copyright (C) 2002-200
3
Dave Jones.
* Copyright (C) 2002-200
4
Dave Jones.
* Copyright (C) 1999 Jeff Hartmann.
* Copyright (C) 1999 Precision Insight, Inc.
* Copyright (C) 1999 Xi Graphics, Inc.
...
...
@@ -18,12 +18,12 @@
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* JEFF HARTMANN, OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM,
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
* JEFF HARTMANN, OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM,
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
* TODO:
* TODO:
* - Allocate more than order 0 pages to avoid too much linear map splitting.
*/
#include <linux/config.h>
...
...
@@ -37,7 +37,7 @@
#include <linux/vmalloc.h>
#include "agp.h"
__u32
*
agp_gatt_table
;
__u32
*
agp_gatt_table
;
int
agp_memory_reserved
;
/*
...
...
@@ -46,7 +46,7 @@ int agp_memory_reserved;
*/
EXPORT_SYMBOL_GPL
(
agp_memory_reserved
);
/*
/*
* Generic routines for handling agp_memory structures -
* They use the basic page allocation routines to do the brunt of the work.
*/
...
...
@@ -142,12 +142,12 @@ EXPORT_SYMBOL(agp_free_memory);
* agp_allocate_memory - allocate a group of pages of a certain type.
*
* @page_count: size_t argument of the number of pages
* @type: u32 argument of the type of memory to be allocated.
* @type: u32 argument of the type of memory to be allocated.
*
* Every agp bridge device will allow you to allocate AGP_NORMAL_MEMORY which
* maps to physical ram. Any other type is device dependent.
*
* It returns NULL whenever memory is unavailable.
* It returns NULL whenever memory is unavailable.
*/
struct
agp_memory
*
agp_allocate_memory
(
size_t
page_count
,
u32
type
)
{
...
...
@@ -311,7 +311,7 @@ EXPORT_SYMBOL(agp_copy_info);
/**
* agp_bind_memory - Bind an agp_memory structure into the GATT.
*
*
* @curr: agp_memory pointer
* @pg_start: an offset into the graphics aperture translation table
*
...
...
@@ -347,9 +347,9 @@ EXPORT_SYMBOL(agp_bind_memory);
/**
* agp_unbind_memory - Removes an agp_memory structure from the GATT
*
*
* @curr: agp_memory pointer to be removed from the GATT.
*
*
* It returns -EINVAL if this piece of agp_memory is not currently bound to
* the graphics aperture translation table or if the agp_memory pointer == NULL
*/
...
...
@@ -404,12 +404,18 @@ static void agp_v2_parse_one(u32 *mode, u32 *cmd, u32 *tmp)
*
cmd
&=
~
(
AGPSTAT2_1X
|
AGPSTAT2_4X
);
/* 2X */
if
(
*
cmd
&
AGPSTAT2_1X
)
*
cmd
&=
~
(
AGPSTAT2_2X
|
AGPSTAT2_4X
);
/* 1X
f
*/
*
cmd
&=
~
(
AGPSTAT2_2X
|
AGPSTAT2_4X
);
/* 1X */
}
/*
* mode = requested mode.
* cmd = PCI_AGP_STATUS from agp bridge.
* tmp = PCI_AGP_STATUS from graphic card.
*/
static
void
agp_v3_parse_one
(
u32
*
mode
,
u32
*
cmd
,
u32
*
tmp
)
{
u32
origcmd
=*
cmd
,
origtmp
=*
tmp
;
/* ARQSZ - Set the value to the maximum one.
* Don't allow the mode register to override values. */
*
cmd
=
((
*
cmd
&
~
AGPSTAT_ARQSZ
)
|
...
...
@@ -452,17 +458,43 @@ static void agp_v3_parse_one(u32 *mode, u32 *cmd, u32 *tmp)
*
mode
|=
AGPSTAT3_4X
;
}
if
(
!
((
*
cmd
&
AGPSTAT3_8X
)
&&
(
*
tmp
&
AGPSTAT3_8X
)
&&
(
*
mode
&
AGPSTAT3_8X
)))
*
cmd
&=
~
AGPSTAT3_8X
;
if
(
*
mode
&
AGPSTAT3_8X
)
{
if
(
!
(
*
cmd
&
AGPSTAT3_8X
))
{
*
cmd
&=
~
(
AGPSTAT3_8X
|
AGPSTAT3_RSVD
);
*
cmd
|=
AGPSTAT3_4X
;
printk
(
"%s requested AGPx8 but bridge not capable.
\n
"
,
current
->
comm
);
return
;
}
if
(
!
(
*
tmp
&
AGPSTAT3_8X
))
{
*
cmd
&=
~
(
AGPSTAT3_8X
|
AGPSTAT3_RSVD
);
*
cmd
|=
AGPSTAT3_4X
;
printk
(
"%s requested AGPx8 but graphic card not capable.
\n
"
,
current
->
comm
);
return
;
}
/* All set, bridge & device can do AGP x8*/
*
cmd
&=
~
(
AGPSTAT3_4X
|
AGPSTAT3_RSVD
);
return
;
if
(
!
((
*
cmd
&
AGPSTAT3_4X
)
&&
(
*
tmp
&
AGPSTAT3_4X
)
&&
(
*
mode
&
AGPSTAT3_4X
)))
*
cmd
&=
~
AGPSTAT3_4X
;
}
else
{
/* Clear out unwanted bits. */
if
(
*
cmd
&
AGPSTAT3_8X
)
*
cmd
&=
~
(
AGPSTAT3_4X
|
AGPSTAT3_RSVD
);
if
(
*
cmd
&
AGPSTAT3_4X
)
/*
* If we didn't specify AGPx8, we can only do x4.
* If the hardware can't do x4, we're up shit creek, and never
* should have got this far.
*/
*
cmd
&=
~
(
AGPSTAT3_8X
|
AGPSTAT3_RSVD
);
if
((
*
cmd
&
AGPSTAT3_4X
)
&&
(
*
tmp
&
AGPSTAT3_4X
))
*
cmd
|=
AGPSTAT3_4X
;
else
{
printk
(
KERN_INFO
PFX
"Badness. Don't know which AGP mode to set. "
"[cmd:%x tmp:%x fell back to:- cmd:%x tmp:%x]
\n
"
,
origcmd
,
origtmp
,
*
cmd
,
*
tmp
);
if
(
!
(
*
cmd
&
AGPSTAT3_4X
))
printk
(
KERN_INFO
PFX
"Bridge couldn't do AGP x4.
\n
"
);
if
(
!
(
*
tmp
&
AGPSTAT3_4X
))
printk
(
KERN_INFO
PFX
"Graphic card couldn't do AGP x4.
\n
"
);
}
}
}
//FIXME: This doesn't smell right.
...
...
@@ -479,8 +511,10 @@ u32 agp_collect_device_status(u32 mode, u32 cmd)
if
(
!
cap_ptr
)
continue
;
//FIXME: We should probably skip anything here that
// isn't an AGP graphic card.
/*
* Ok, here we have a AGP device. Disable impossible
* Ok, here we have a AGP device. Disable impossible
* settings, and adjust the readqueue to the minimum.
*/
pci_read_config_dword
(
device
,
cap_ptr
+
PCI_AGP_STATUS
,
&
tmp
);
...
...
@@ -489,7 +523,7 @@ u32 agp_collect_device_status(u32 mode, u32 cmd)
cmd
=
((
cmd
&
~
AGPSTAT_RQ_DEPTH
)
|
min_t
(
u32
,
(
mode
&
AGPSTAT_RQ_DEPTH
),
min_t
(
u32
,
(
cmd
&
AGPSTAT_RQ_DEPTH
),
(
tmp
&
AGPSTAT_RQ_DEPTH
))));
/* disable FW if it's not supported */
if
(
!
((
cmd
&
AGPSTAT_FW
)
&&
(
tmp
&
AGPSTAT_FW
)
&&
(
mode
&
AGPSTAT_FW
)))
cmd
&=
~
AGPSTAT_FW
;
...
...
@@ -663,7 +697,7 @@ int agp_generic_create_gatt_table(void)
agp_bridge
->
current_size
;
break
;
}
temp
=
agp_bridge
->
current_size
;
temp
=
agp_bridge
->
current_size
;
}
else
{
agp_bridge
->
aperture_size_idx
=
i
;
}
...
...
@@ -684,7 +718,7 @@ int agp_generic_create_gatt_table(void)
SetPageReserved
(
page
);
agp_bridge
->
gatt_table_real
=
(
u32
*
)
table
;
agp_gatt_table
=
(
void
*
)
table
;
agp_gatt_table
=
(
void
*
)
table
;
agp_bridge
->
driver
->
cache_flush
();
agp_bridge
->
gatt_table
=
ioremap_nocache
(
virt_to_phys
(
table
),
...
...
@@ -870,9 +904,9 @@ void agp_generic_free_by_type(struct agp_memory *curr)
EXPORT_SYMBOL
(
agp_generic_free_by_type
);
/*
/*
* Basic Page Allocation Routines -
* These routines handle page allocation and by default they reserve the allocated
* These routines handle page allocation and by default they reserve the allocated
* memory. They also handle incrementing the current_memory_agp value, Which is checked
* against a maximum value.
*/
...
...
@@ -914,9 +948,9 @@ EXPORT_SYMBOL(agp_generic_destroy_page);
/* End Basic Page Allocation Routines */
/**
/**
* agp_enable - initialise the agp point-to-point connection.
*
*
* @mode: agp mode register value to configure with.
*/
void
agp_enable
(
u32
mode
)
...
...
drivers/char/agp/sworks-agp.c
View file @
bce0670d
...
...
@@ -447,6 +447,7 @@ static int __devinit agp_serverworks_probe(struct pci_dev *pdev,
struct
agp_bridge_data
*
bridge
;
struct
pci_dev
*
bridge_dev
;
u32
temp
,
temp2
;
u8
cap_ptr
=
0
;
/* Everything is on func 1 here so we are hardcoding function one */
bridge_dev
=
pci_find_slot
((
unsigned
int
)
pdev
->
bus
->
number
,
...
...
@@ -457,6 +458,8 @@ static int __devinit agp_serverworks_probe(struct pci_dev *pdev,
return
-
ENODEV
;
}
cap_ptr
=
pci_find_capability
(
pdev
,
PCI_CAP_ID_AGP
);
switch
(
pdev
->
device
)
{
case
0x0006
:
/* ServerWorks CNB20HE
...
...
@@ -470,14 +473,15 @@ static int __devinit agp_serverworks_probe(struct pci_dev *pdev,
break
;
default:
printk
(
KERN_ERR
PFX
"Unsupported Serverworks chipset "
"(device id: %04x)
\n
"
,
pdev
->
device
);
if
(
cap_ptr
)
printk
(
KERN_ERR
PFX
"Unsupported Serverworks chipset "
"(device id: %04x)
\n
"
,
pdev
->
device
);
return
-
ENODEV
;
}
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
);
...
...
drivers/char/agp/via-agp.c
View file @
bce0670d
...
...
@@ -434,6 +434,7 @@ static struct pci_device_id agp_via_pci_table[] = {
.subvendor = PCI_ANY_ID, \
.subdevice = PCI_ANY_ID, \
}
ID
(
PCI_DEVICE_ID_VIA_82C597_0
),
ID
(
PCI_DEVICE_ID_VIA_82C598_0
),
ID
(
PCI_DEVICE_ID_VIA_8501_0
),
ID
(
PCI_DEVICE_ID_VIA_8601_0
),
...
...
include/linux/pci_ids.h
View file @
bce0670d
...
...
@@ -1176,7 +1176,8 @@
#define PCI_DEVICE_ID_VIA_8763_0 0x0198
#define PCI_DEVICE_ID_VIA_8380_0 0x0204
#define PCI_DEVICE_ID_VIA_PX8X0_0 0x0259
#define PCI_DEVICE_ID_VIA_8363_0 0x0305
#define PCI_DEVICE_ID_VIA_K8T800PRO_0 0x0282
#define PCI_DEVICE_ID_VIA_8363_0 0x0305
#define PCI_DEVICE_ID_VIA_8371_0 0x0391
#define PCI_DEVICE_ID_VIA_8501_0 0x0501
#define PCI_DEVICE_ID_VIA_82C505 0x0505
...
...
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