aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/netlabel/draft-ietf-cipso-ipsecurity-01.txt791
-rw-r--r--arch/powerpc/platforms/8xx/micropatch.c388
-rw-r--r--drivers/media/i2c/vs6624.c856
-rw-r--r--drivers/media/usb/dvb-usb/af9005-script.h204
-rw-r--r--drivers/net/appletalk/cops.c1005
-rw-r--r--drivers/net/appletalk/cops.h61
-rw-r--r--drivers/net/appletalk/cops_ffdrv.h532
-rw-r--r--drivers/net/appletalk/cops_ltdrv.h241
-rw-r--r--drivers/video/fbdev/nvidia/Makefile13
-rw-r--r--drivers/video/fbdev/nvidia/nv_accel.c418
-rw-r--r--drivers/video/fbdev/nvidia/nv_backlight.c137
-rw-r--r--drivers/video/fbdev/nvidia/nv_dma.h188
-rw-r--r--drivers/video/fbdev/nvidia/nv_hw.c1688
-rw-r--r--drivers/video/fbdev/nvidia/nv_i2c.c171
-rw-r--r--drivers/video/fbdev/nvidia/nv_local.h114
-rw-r--r--drivers/video/fbdev/nvidia/nv_of.c79
-rw-r--r--drivers/video/fbdev/nvidia/nv_proto.h68
-rw-r--r--drivers/video/fbdev/nvidia/nv_setup.c652
-rw-r--r--drivers/video/fbdev/nvidia/nv_type.h176
-rw-r--r--drivers/video/fbdev/nvidia/nvidia.c1581
-rw-r--r--drivers/video/fbdev/riva/Makefile12
-rw-r--r--drivers/video/fbdev/riva/fbdev.c2195
-rw-r--r--drivers/video/fbdev/riva/nv_driver.c423
-rw-r--r--drivers/video/fbdev/riva/nv_type.h59
-rw-r--r--drivers/video/fbdev/riva/nvreg.h188
-rw-r--r--drivers/video/fbdev/riva/riva_hw.c2254
-rw-r--r--drivers/video/fbdev/riva/riva_hw.h564
-rw-r--r--drivers/video/fbdev/riva/riva_tbl.h1008
-rw-r--r--drivers/video/fbdev/riva/rivafb-i2c.c166
-rw-r--r--drivers/video/fbdev/riva/rivafb.h76
30 files changed, 0 insertions, 16308 deletions
diff --git a/Documentation/netlabel/draft-ietf-cipso-ipsecurity-01.txt b/Documentation/netlabel/draft-ietf-cipso-ipsecurity-01.txt
deleted file mode 100644
index 256c2c9d4f50..000000000000
--- a/Documentation/netlabel/draft-ietf-cipso-ipsecurity-01.txt
+++ /dev/null
@@ -1,791 +0,0 @@
-IETF CIPSO Working Group
-16 July, 1992
-
-
-
- COMMERCIAL IP SECURITY OPTION (CIPSO 2.2)
-
-
-
-1. Status
-
-This Internet Draft provides the high level specification for a Commercial
-IP Security Option (CIPSO). This draft reflects the version as approved by
-the CIPSO IETF Working Group. Distribution of this memo is unlimited.
-
-This document is an Internet Draft. Internet Drafts are working documents
-of the Internet Engineering Task Force (IETF), its Areas, and its Working
-Groups. Note that other groups may also distribute working documents as
-Internet Drafts.
-
-Internet Drafts are draft documents valid for a maximum of six months.
-Internet Drafts may be updated, replaced, or obsoleted by other documents
-at any time. It is not appropriate to use Internet Drafts as reference
-material or to cite them other than as a "working draft" or "work in
-progress."
-
-Please check the I-D abstract listing contained in each Internet Draft
-directory to learn the current status of this or any other Internet Draft.
-
-
-
-
-2. Background
-
-Currently the Internet Protocol includes two security options. One of
-these options is the DoD Basic Security Option (BSO) (Type 130) which allows
-IP datagrams to be labeled with security classifications. This option
-provides sixteen security classifications and a variable number of handling
-restrictions. To handle additional security information, such as security
-categories or compartments, another security option (Type 133) exists and
-is referred to as the DoD Extended Security Option (ESO). The values for
-the fixed fields within these two options are administered by the Defense
-Information Systems Agency (DISA).
-
-Computer vendors are now building commercial operating systems with
-mandatory access controls and multi-level security. These systems are
-no longer built specifically for a particular group in the defense or
-intelligence communities. They are generally available commercial systems
-for use in a variety of government and civil sector environments.
-
-The small number of ESO format codes can not support all the possible
-applications of a commercial security option. The BSO and ESO were
-designed to only support the United States DoD. CIPSO has been designed
-to support multiple security policies. This Internet Draft provides the
-format and procedures required to support a Mandatory Access Control
-security policy. Support for additional security policies shall be
-defined in future RFCs.
-
-
-
-
-Internet Draft, Expires 15 Jan 93 [PAGE 1]
-
-
-
-CIPSO INTERNET DRAFT 16 July, 1992
-
-
-
-
-3. CIPSO Format
-
-Option type: 134 (Class 0, Number 6, Copy on Fragmentation)
-Option length: Variable
-
-This option permits security related information to be passed between
-systems within a single Domain of Interpretation (DOI). A DOI is a
-collection of systems which agree on the meaning of particular values
-in the security option. An authority that has been assigned a DOI
-identifier will define a mapping between appropriate CIPSO field values
-and their human readable equivalent. This authority will distribute that
-mapping to hosts within the authority's domain. These mappings may be
-sensitive, therefore a DOI authority is not required to make these
-mappings available to anyone other than the systems that are included in
-the DOI.
-
-This option MUST be copied on fragmentation. This option appears at most
-once in a datagram. All multi-octet fields in the option are defined to be
-transmitted in network byte order. The format of this option is as follows:
-
-+----------+----------+------//------+-----------//---------+
-| 10000110 | LLLLLLLL | DDDDDDDDDDDD | TTTTTTTTTTTTTTTTTTTT |
-+----------+----------+------//------+-----------//---------+
-
- TYPE=134 OPTION DOMAIN OF TAGS
- LENGTH INTERPRETATION
-
-
- Figure 1. CIPSO Format
-
-
-3.1 Type
-
-This field is 1 octet in length. Its value is 134.
-
-
-3.2 Length
-
-This field is 1 octet in length. It is the total length of the option
-including the type and length fields. With the current IP header length
-restriction of 40 octets the value of this field MUST not exceed 40.
-
-
-3.3 Domain of Interpretation Identifier
-
-This field is an unsigned 32 bit integer. The value 0 is reserved and MUST
-not appear as the DOI identifier in any CIPSO option. Implementations
-should assume that the DOI identifier field is not aligned on any particular
-byte boundary.
-
-To conserve space in the protocol, security levels and categories are
-represented by numbers rather than their ASCII equivalent. This requires
-a mapping table within CIPSO hosts to map these numbers to their
-corresponding ASCII representations. Non-related groups of systems may
-
-
-
-Internet Draft, Expires 15 Jan 93 [PAGE 2]
-
-
-
-CIPSO INTERNET DRAFT 16 July, 1992
-
-
-
-have their own unique mappings. For example, one group of systems may
-use the number 5 to represent Unclassified while another group may use the
-number 1 to represent that same security level. The DOI identifier is used
-to identify which mapping was used for the values within the option.
-
-
-3.4 Tag Types
-
-A common format for passing security related information is necessary
-for interoperability. CIPSO uses sets of "tags" to contain the security
-information relevant to the data in the IP packet. Each tag begins with
-a tag type identifier followed by the length of the tag and ends with the
-actual security information to be passed. All multi-octet fields in a tag
-are defined to be transmitted in network byte order. Like the DOI
-identifier field in the CIPSO header, implementations should assume that
-all tags, as well as fields within a tag, are not aligned on any particular
-octet boundary. The tag types defined in this document contain alignment
-bytes to assist alignment of some information, however alignment can not
-be guaranteed if CIPSO is not the first IP option.
-
-CIPSO tag types 0 through 127 are reserved for defining standard tag
-formats. Their definitions will be published in RFCs. Tag types whose
-identifiers are greater than 127 are defined by the DOI authority and may
-only be meaningful in certain Domains of Interpretation. For these tag
-types, implementations will require the DOI identifier as well as the tag
-number to determine the security policy and the format associated with the
-tag. Use of tag types above 127 are restricted to closed networks where
-interoperability with other networks will not be an issue. Implementations
-that support a tag type greater than 127 MUST support at least one DOI that
-requires only tag types 1 to 127.
-
-Tag type 0 is reserved. Tag types 1, 2, and 5 are defined in this
-Internet Draft. Types 3 and 4 are reserved for work in progress.
-The standard format for all current and future CIPSO tags is shown below:
-
-+----------+----------+--------//--------+
-| TTTTTTTT | LLLLLLLL | IIIIIIIIIIIIIIII |
-+----------+----------+--------//--------+
- TAG TAG TAG
- TYPE LENGTH INFORMATION
-
- Figure 2: Standard Tag Format
-
-In the three tag types described in this document, the length and count
-restrictions are based on the current IP limitation of 40 octets for all
-IP options. If the IP header is later expanded, then the length and count
-restrictions specified in this document may increase to use the full area
-provided for IP options.
-
-
-3.4.1 Tag Type Classes
-
-Tag classes consist of tag types that have common processing requirements
-and support the same security policy. The three tags defined in this
-Internet Draft belong to the Mandatory Access Control (MAC) Sensitivity
-
-
-
-Internet Draft, Expires 15 Jan 93 [PAGE 3]
-
-
-
-CIPSO INTERNET DRAFT 16 July, 1992
-
-
-
-class and support the MAC Sensitivity security policy.
-
-
-3.4.2 Tag Type 1
-
-This is referred to as the "bit-mapped" tag type. Tag type 1 is included
-in the MAC Sensitivity tag type class. The format of this tag type is as
-follows:
-
-+----------+----------+----------+----------+--------//---------+
-| 00000001 | LLLLLLLL | 00000000 | LLLLLLLL | CCCCCCCCCCCCCCCCC |
-+----------+----------+----------+----------+--------//---------+
-
- TAG TAG ALIGNMENT SENSITIVITY BIT MAP OF
- TYPE LENGTH OCTET LEVEL CATEGORIES
-
- Figure 3. Tag Type 1 Format
-
-
-3.4.2.1 Tag Type
-
-This field is 1 octet in length and has a value of 1.
-
-
-3.4.2.2 Tag Length
-
-This field is 1 octet in length. It is the total length of the tag type
-including the type and length fields. With the current IP header length
-restriction of 40 bytes the value within this field is between 4 and 34.
-
-
-3.4.2.3 Alignment Octet
-
-This field is 1 octet in length and always has the value of 0. Its purpose
-is to align the category bitmap field on an even octet boundary. This will
-speed many implementations including router implementations.
-
-
-3.4.2.4 Sensitivity Level
-
-This field is 1 octet in length. Its value is from 0 to 255. The values
-are ordered with 0 being the minimum value and 255 representing the maximum
-value.
-
-
-3.4.2.5 Bit Map of Categories
-
-The length of this field is variable and ranges from 0 to 30 octets. This
-provides representation of categories 0 to 239. The ordering of the bits
-is left to right or MSB to LSB. For example category 0 is represented by
-the most significant bit of the first byte and category 15 is represented
-by the least significant bit of the second byte. Figure 4 graphically
-shows this ordering. Bit N is binary 1 if category N is part of the label
-for the datagram, and bit N is binary 0 if category N is not part of the
-label. Except for the optimized tag 1 format described in the next section,
-
-
-
-Internet Draft, Expires 15 Jan 93 [PAGE 4]
-
-
-
-CIPSO INTERNET DRAFT 16 July, 1992
-
-
-
-minimal encoding SHOULD be used resulting in no trailing zero octets in the
-category bitmap.
-
- octet 0 octet 1 octet 2 octet 3 octet 4 octet 5
- XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX . . .
-bit 01234567 89111111 11112222 22222233 33333333 44444444
-number 012345 67890123 45678901 23456789 01234567
-
- Figure 4. Ordering of Bits in Tag 1 Bit Map
-
-
-3.4.2.6 Optimized Tag 1 Format
-
-Routers work most efficiently when processing fixed length fields. To
-support these routers there is an optimized form of tag type 1. The format
-does not change. The only change is to the category bitmap which is set to
-a constant length of 10 octets. Trailing octets required to fill out the 10
-octets are zero filled. Ten octets, allowing for 80 categories, was chosen
-because it makes the total length of the CIPSO option 20 octets. If CIPSO
-is the only option then the option will be full word aligned and additional
-filler octets will not be required.
-
-
-3.4.3 Tag Type 2
-
-This is referred to as the "enumerated" tag type. It is used to describe
-large but sparsely populated sets of categories. Tag type 2 is in the MAC
-Sensitivity tag type class. The format of this tag type is as follows:
-
-+----------+----------+----------+----------+-------------//-------------+
-| 00000010 | LLLLLLLL | 00000000 | LLLLLLLL | CCCCCCCCCCCCCCCCCCCCCCCCCC |
-+----------+----------+----------+----------+-------------//-------------+
-
- TAG TAG ALIGNMENT SENSITIVITY ENUMERATED
- TYPE LENGTH OCTET LEVEL CATEGORIES
-
- Figure 5. Tag Type 2 Format
-
-
-3.4.3.1 Tag Type
-
-This field is one octet in length and has a value of 2.
-
-
-3.4.3.2 Tag Length
-
-This field is 1 octet in length. It is the total length of the tag type
-including the type and length fields. With the current IP header length
-restriction of 40 bytes the value within this field is between 4 and 34.
-
-
-3.4.3.3 Alignment Octet
-
-This field is 1 octet in length and always has the value of 0. Its purpose
-is to align the category field on an even octet boundary. This will
-
-
-
-Internet Draft, Expires 15 Jan 93 [PAGE 5]
-
-
-
-CIPSO INTERNET DRAFT 16 July, 1992
-
-
-
-speed many implementations including router implementations.
-
-
-3.4.3.4 Sensitivity Level
-
-This field is 1 octet in length. Its value is from 0 to 255. The values
-are ordered with 0 being the minimum value and 255 representing the
-maximum value.
-
-
-3.4.3.5 Enumerated Categories
-
-In this tag, categories are represented by their actual value rather than
-by their position within a bit field. The length of each category is 2
-octets. Up to 15 categories may be represented by this tag. Valid values
-for categories are 0 to 65534. Category 65535 is not a valid category
-value. The categories MUST be listed in ascending order within the tag.
-
-
-3.4.4 Tag Type 5
-
-This is referred to as the "range" tag type. It is used to represent
-labels where all categories in a range, or set of ranges, are included
-in the sensitivity label. Tag type 5 is in the MAC Sensitivity tag type
-class. The format of this tag type is as follows:
-
-+----------+----------+----------+----------+------------//-------------+
-| 00000101 | LLLLLLLL | 00000000 | LLLLLLLL | Top/Bottom | Top/Bottom |
-+----------+----------+----------+----------+------------//-------------+
-
- TAG TAG ALIGNMENT SENSITIVITY CATEGORY RANGES
- TYPE LENGTH OCTET LEVEL
-
- Figure 6. Tag Type 5 Format
-
-
-3.4.4.1 Tag Type
-
-This field is one octet in length and has a value of 5.
-
-
-3.4.4.2 Tag Length
-
-This field is 1 octet in length. It is the total length of the tag type
-including the type and length fields. With the current IP header length
-restriction of 40 bytes the value within this field is between 4 and 34.
-
-
-3.4.4.3 Alignment Octet
-
-This field is 1 octet in length and always has the value of 0. Its purpose
-is to align the category range field on an even octet boundary. This will
-speed many implementations including router implementations.
-
-
-
-
-
-Internet Draft, Expires 15 Jan 93 [PAGE 6]
-
-
-
-CIPSO INTERNET DRAFT 16 July, 1992
-
-
-
-3.4.4.4 Sensitivity Level
-
-This field is 1 octet in length. Its value is from 0 to 255. The values
-are ordered with 0 being the minimum value and 255 representing the maximum
-value.
-
-
-3.4.4.5 Category Ranges
-
-A category range is a 4 octet field comprised of the 2 octet index of the
-highest numbered category followed by the 2 octet index of the lowest
-numbered category. These range endpoints are inclusive within the range of
-categories. All categories within a range are included in the sensitivity
-label. This tag may contain a maximum of 7 category pairs. The bottom
-category endpoint for the last pair in the tag MAY be omitted and SHOULD be
-assumed to be 0. The ranges MUST be non-overlapping and be listed in
-descending order. Valid values for categories are 0 to 65534. Category
-65535 is not a valid category value.
-
-
-3.4.5 Minimum Requirements
-
-A CIPSO implementation MUST be capable of generating at least tag type 1 in
-the non-optimized form. In addition, a CIPSO implementation MUST be able
-to receive any valid tag type 1 even those using the optimized tag type 1
-format.
-
-
-4. Configuration Parameters
-
-The configuration parameters defined below are required for all CIPSO hosts,
-gateways, and routers that support multiple sensitivity labels. A CIPSO
-host is defined to be the origination or destination system for an IP
-datagram. A CIPSO gateway provides IP routing services between two or more
-IP networks and may be required to perform label translations between
-networks. A CIPSO gateway may be an enhanced CIPSO host or it may just
-provide gateway services with no end system CIPSO capabilities. A CIPSO
-router is a dedicated IP router that routes IP datagrams between two or more
-IP networks.
-
-An implementation of CIPSO on a host MUST have the capability to reject a
-datagram for reasons that the information contained can not be adequately
-protected by the receiving host or if acceptance may result in violation of
-the host or network security policy. In addition, a CIPSO gateway or router
-MUST be able to reject datagrams going to networks that can not provide
-adequate protection or may violate the network's security policy. To
-provide this capability the following minimal set of configuration
-parameters are required for CIPSO implementations:
-
-HOST_LABEL_MAX - This parameter contains the maximum sensitivity label that
-a CIPSO host is authorized to handle. All datagrams that have a label
-greater than this maximum MUST be rejected by the CIPSO host. This
-parameter does not apply to CIPSO gateways or routers. This parameter need
-not be defined explicitly as it can be implicitly derived from the
-PORT_LABEL_MAX parameters for the associated interfaces.
-
-
-
-Internet Draft, Expires 15 Jan 93 [PAGE 7]
-
-
-
-CIPSO INTERNET DRAFT 16 July, 1992
-
-
-
-
-HOST_LABEL_MIN - This parameter contains the minimum sensitivity label that
-a CIPSO host is authorized to handle. All datagrams that have a label less
-than this minimum MUST be rejected by the CIPSO host. This parameter does
-not apply to CIPSO gateways or routers. This parameter need not be defined
-explicitly as it can be implicitly derived from the PORT_LABEL_MIN
-parameters for the associated interfaces.
-
-PORT_LABEL_MAX - This parameter contains the maximum sensitivity label for
-all datagrams that may exit a particular network interface port. All
-outgoing datagrams that have a label greater than this maximum MUST be
-rejected by the CIPSO system. The label within this parameter MUST be
-less than or equal to the label within the HOST_LABEL_MAX parameter. This
-parameter does not apply to CIPSO hosts that support only one network port.
-
-PORT_LABEL_MIN - This parameter contains the minimum sensitivity label for
-all datagrams that may exit a particular network interface port. All
-outgoing datagrams that have a label less than this minimum MUST be
-rejected by the CIPSO system. The label within this parameter MUST be
-greater than or equal to the label within the HOST_LABEL_MIN parameter.
-This parameter does not apply to CIPSO hosts that support only one network
-port.
-
-PORT_DOI - This parameter is used to assign a DOI identifier value to a
-particular network interface port. All CIPSO labels within datagrams
-going out this port MUST use the specified DOI identifier. All CIPSO
-hosts and gateways MUST support either this parameter, the NET_DOI
-parameter, or the HOST_DOI parameter.
-
-NET_DOI - This parameter is used to assign a DOI identifier value to a
-particular IP network address. All CIPSO labels within datagrams destined
-for the particular IP network MUST use the specified DOI identifier. All
-CIPSO hosts and gateways MUST support either this parameter, the PORT_DOI
-parameter, or the HOST_DOI parameter.
-
-HOST_DOI - This parameter is used to assign a DOI identifier value to a
-particular IP host address. All CIPSO labels within datagrams destined for
-the particular IP host will use the specified DOI identifier. All CIPSO
-hosts and gateways MUST support either this parameter, the PORT_DOI
-parameter, or the NET_DOI parameter.
-
-This list represents the minimal set of configuration parameters required
-to be compliant. Implementors are encouraged to add to this list to
-provide enhanced functionality and control. For example, many security
-policies may require both incoming and outgoing datagrams be checked against
-the port and host label ranges.
-
-
-4.1 Port Range Parameters
-
-The labels represented by the PORT_LABEL_MAX and PORT_LABEL_MIN parameters
-MAY be in CIPSO or local format. Some CIPSO systems, such as routers, may
-want to have the range parameters expressed in CIPSO format so that incoming
-labels do not have to be converted to a local format before being compared
-against the range. If multiple DOIs are supported by one of these CIPSO
-
-
-
-Internet Draft, Expires 15 Jan 93 [PAGE 8]
-
-
-
-CIPSO INTERNET DRAFT 16 July, 1992
-
-
-
-systems then multiple port range parameters would be needed, one set for
-each DOI supported on a particular port.
-
-The port range will usually represent the total set of labels that may
-exist on the logical network accessed through the corresponding network
-interface. It may, however, represent a subset of these labels that are
-allowed to enter the CIPSO system.
-
-
-4.2 Single Label CIPSO Hosts
-
-CIPSO implementations that support only one label are not required to
-support the parameters described above. These limited implementations are
-only required to support a NET_LABEL parameter. This parameter contains
-the CIPSO label that may be inserted in datagrams that exit the host. In
-addition, the host MUST reject any incoming datagram that has a label which
-is not equivalent to the NET_LABEL parameter.
-
-
-5. Handling Procedures
-
-This section describes the processing requirements for incoming and
-outgoing IP datagrams. Just providing the correct CIPSO label format
-is not enough. Assumptions will be made by one system on how a
-receiving system will handle the CIPSO label. Wrong assumptions may
-lead to non-interoperability or even a security incident. The
-requirements described below represent the minimal set needed for
-interoperability and that provide users some level of confidence.
-Many other requirements could be added to increase user confidence,
-however at the risk of restricting creativity and limiting vendor
-participation.
-
-
-5.1 Input Procedures
-
-All datagrams received through a network port MUST have a security label
-associated with them, either contained in the datagram or assigned to the
-receiving port. Without this label the host, gateway, or router will not
-have the information it needs to make security decisions. This security
-label will be obtained from the CIPSO if the option is present in the
-datagram. See section 4.1.2 for handling procedures for unlabeled
-datagrams. This label will be compared against the PORT (if appropriate)
-and HOST configuration parameters defined in section 3.
-
-If any field within the CIPSO option, such as the DOI identifier, is not
-recognized the IP datagram is discarded and an ICMP "parameter problem"
-(type 12) is generated and returned. The ICMP code field is set to "bad
-parameter" (code 0) and the pointer is set to the start of the CIPSO field
-that is unrecognized.
-
-If the contents of the CIPSO are valid but the security label is
-outside of the configured host or port label range, the datagram is
-discarded and an ICMP "destination unreachable" (type 3) is generated
-and returned. The code field of the ICMP is set to "communication with
-destination network administratively prohibited" (code 9) or to
-
-
-
-Internet Draft, Expires 15 Jan 93 [PAGE 9]
-
-
-
-CIPSO INTERNET DRAFT 16 July, 1992
-
-
-
-"communication with destination host administratively prohibited"
-(code 10). The value of the code field used is dependent upon whether
-the originator of the ICMP message is acting as a CIPSO host or a CIPSO
-gateway. The recipient of the ICMP message MUST be able to handle either
-value. The same procedure is performed if a CIPSO can not be added to an
-IP packet because it is too large to fit in the IP options area.
-
-If the error is triggered by receipt of an ICMP message, the message
-is discarded and no response is permitted (consistent with general ICMP
-processing rules).
-
-
-5.1.1 Unrecognized tag types
-
-The default condition for any CIPSO implementation is that an
-unrecognized tag type MUST be treated as a "parameter problem" and
-handled as described in section 4.1. A CIPSO implementation MAY allow
-the system administrator to identify tag types that may safely be
-ignored. This capability is an allowable enhancement, not a
-requirement.
-
-
-5.1.2 Unlabeled Packets
-
-A network port may be configured to not require a CIPSO label for all
-incoming datagrams. For this configuration a CIPSO label must be
-assigned to that network port and associated with all unlabeled IP
-datagrams. This capability might be used for single level networks or
-networks that have CIPSO and non-CIPSO hosts and the non-CIPSO hosts
-all operate at the same label.
-
-If a CIPSO option is required and none is found, the datagram is
-discarded and an ICMP "parameter problem" (type 12) is generated and
-returned to the originator of the datagram. The code field of the ICMP
-is set to "option missing" (code 1) and the ICMP pointer is set to 134
-(the value of the option type for the missing CIPSO option).
-
-
-5.2 Output Procedures
-
-A CIPSO option MUST appear only once in a datagram. Only one tag type
-from the MAC Sensitivity class MAY be included in a CIPSO option. Given
-the current set of defined tag types, this means that CIPSO labels at
-first will contain only one tag.
-
-All datagrams leaving a CIPSO system MUST meet the following condition:
-
- PORT_LABEL_MIN <= CIPSO label <= PORT_LABEL_MAX
-
-If this condition is not satisfied the datagram MUST be discarded.
-If the CIPSO system only supports one port, the HOST_LABEL_MIN and the
-HOST_LABEL_MAX parameters MAY be substituted for the PORT parameters in
-the above condition.
-
-The DOI identifier to be used for all outgoing datagrams is configured by
-
-
-
-Internet Draft, Expires 15 Jan 93 [PAGE 10]
-
-
-
-CIPSO INTERNET DRAFT 16 July, 1992
-
-
-
-the administrator. If port level DOI identifier assignment is used, then
-the PORT_DOI configuration parameter MUST contain the DOI identifier to
-use. If network level DOI assignment is used, then the NET_DOI parameter
-MUST contain the DOI identifier to use. And if host level DOI assignment
-is employed, then the HOST_DOI parameter MUST contain the DOI identifier
-to use. A CIPSO implementation need only support one level of DOI
-assignment.
-
-
-5.3 DOI Processing Requirements
-
-A CIPSO implementation MUST support at least one DOI and SHOULD support
-multiple DOIs. System and network administrators are cautioned to
-ensure that at least one DOI is common within an IP network to allow for
-broadcasting of IP datagrams.
-
-CIPSO gateways MUST be capable of translating a CIPSO option from one
-DOI to another when forwarding datagrams between networks. For
-efficiency purposes this capability is only a desired feature for CIPSO
-routers.
-
-
-5.4 Label of ICMP Messages
-
-The CIPSO label to be used on all outgoing ICMP messages MUST be equivalent
-to the label of the datagram that caused the ICMP message. If the ICMP was
-generated due to a problem associated with the original CIPSO label then the
-following responses are allowed:
-
- a. Use the CIPSO label of the original IP datagram
- b. Drop the original datagram with no return message generated
-
-In most cases these options will have the same effect. If you can not
-interpret the label or if it is outside the label range of your host or
-interface then an ICMP message with the same label will probably not be
-able to exit the system.
-
-
-6. Assignment of DOI Identifier Numbers =
-
-Requests for assignment of a DOI identifier number should be addressed to
-the Internet Assigned Numbers Authority (IANA).
-
-
-7. Acknowledgements
-
-Much of the material in this RFC is based on (and copied from) work
-done by Gary Winiger of Sun Microsystems and published as Commercial
-IP Security Option at the INTEROP 89, Commercial IPSO Workshop.
-
-
-8. Author's Address
-
-To submit mail for distribution to members of the IETF CIPSO Working
-Group, send mail to: cipso@wdl1.wdl.loral.com.
-
-
-
-Internet Draft, Expires 15 Jan 93 [PAGE 11]
-
-
-
-CIPSO INTERNET DRAFT 16 July, 1992
-
-
-
-
-To be added to or deleted from this distribution, send mail to:
-cipso-request@wdl1.wdl.loral.com.
-
-
-9. References
-
-RFC 1038, "Draft Revised IP Security Option", M. St. Johns, IETF, January
-1988.
-
-RFC 1108, "U.S. Department of Defense Security Options
-for the Internet Protocol", Stephen Kent, IAB, 1 March, 1991.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Internet Draft, Expires 15 Jan 93 [PAGE 12]
-
-
-
diff --git a/arch/powerpc/platforms/8xx/micropatch.c b/arch/powerpc/platforms/8xx/micropatch.c
deleted file mode 100644
index aef179fcbd4f..000000000000
--- a/arch/powerpc/platforms/8xx/micropatch.c
+++ /dev/null
@@ -1,388 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-
-/*
- * Microcode patches for the CPM as supplied by Motorola.
- * This is the one for IIC/SPI. There is a newer one that
- * also relocates SMC2, but this would require additional changes
- * to uart.c, so I am holding off on that for a moment.
- */
-#include <linux/init.h>
-#include <linux/errno.h>
-#include <linux/sched.h>
-#include <linux/kernel.h>
-#include <linux/param.h>
-#include <linux/string.h>
-#include <linux/mm.h>
-#include <linux/interrupt.h>
-#include <asm/irq.h>
-#include <asm/page.h>
-#include <asm/8xx_immap.h>
-#include <asm/cpm.h>
-#include <asm/cpm1.h>
-
-struct patch_params {
- ushort rccr;
- ushort cpmcr1;
- ushort cpmcr2;
- ushort cpmcr3;
- ushort cpmcr4;
-};
-
-/*
- * I2C/SPI relocation patch arrays.
- */
-
-#ifdef CONFIG_I2C_SPI_UCODE_PATCH
-
-static char patch_name[] __initdata = "I2C/SPI";
-
-static struct patch_params patch_params __initdata = {
- 1, 0x802a, 0x8028, 0x802e, 0x802c,
-};
-
-static uint patch_2000[] __initdata = {
- 0x7FFFEFD9, 0x3FFD0000, 0x7FFB49F7, 0x7FF90000,
- 0x5FEFADF7, 0x5F89ADF7, 0x5FEFAFF7, 0x5F89AFF7,
- 0x3A9CFBC8, 0xE7C0EDF0, 0x77C1E1BB, 0xF4DC7F1D,
- 0xABAD932F, 0x4E08FDCF, 0x6E0FAFF8, 0x7CCF76CF,
- 0xFD1FF9CF, 0xABF88DC6, 0xAB5679F7, 0xB0937383,
- 0xDFCE79F7, 0xB091E6BB, 0xE5BBE74F, 0xB3FA6F0F,
- 0x6FFB76CE, 0xEE0DF9CF, 0x2BFBEFEF, 0xCFEEF9CF,
- 0x76CEAD24, 0x90B2DF9A, 0x7FDDD0BF, 0x4BF847FD,
- 0x7CCF76CE, 0xCFEF7E1F, 0x7F1D7DFD, 0xF0B6EF71,
- 0x7FC177C1, 0xFBC86079, 0xE722FBC8, 0x5FFFDFFF,
- 0x5FB2FFFB, 0xFBC8F3C8, 0x94A67F01, 0x7F1D5F39,
- 0xAFE85F5E, 0xFFDFDF96, 0xCB9FAF7D, 0x5FC1AFED,
- 0x8C1C5FC1, 0xAFDD5FC3, 0xDF9A7EFD, 0xB0B25FB2,
- 0xFFFEABAD, 0x5FB2FFFE, 0x5FCE600B, 0xE6BB600B,
- 0x5FCEDFC6, 0x27FBEFDF, 0x5FC8CFDE, 0x3A9CE7C0,
- 0xEDF0F3C8, 0x7F0154CD, 0x7F1D2D3D, 0x363A7570,
- 0x7E0AF1CE, 0x37EF2E68, 0x7FEE10EC, 0xADF8EFDE,
- 0xCFEAE52F, 0x7D0FE12B, 0xF1CE5F65, 0x7E0A4DF8,
- 0xCFEA5F72, 0x7D0BEFEE, 0xCFEA5F74, 0xE522EFDE,
- 0x5F74CFDA, 0x0B627385, 0xDF627E0A, 0x30D8145B,
- 0xBFFFF3C8, 0x5FFFDFFF, 0xA7F85F5E, 0xBFFE7F7D,
- 0x10D31450, 0x5F36BFFF, 0xAF785F5E, 0xBFFDA7F8,
- 0x5F36BFFE, 0x77FD30C0, 0x4E08FDCF, 0xE5FF6E0F,
- 0xAFF87E1F, 0x7E0FFD1F, 0xF1CF5F1B, 0xABF80D5E,
- 0x5F5EFFEF, 0x79F730A2, 0xAFDD5F34, 0x47F85F34,
- 0xAFED7FDD, 0x50B24978, 0x47FD7F1D, 0x7DFD70AD,
- 0xEF717EC1, 0x6BA47F01, 0x2D267EFD, 0x30DE5F5E,
- 0xFFFD5F5E, 0xFFEF5F5E, 0xFFDF0CA0, 0xAFED0A9E,
- 0xAFDD0C3A, 0x5F3AAFBD, 0x7FBDB082, 0x5F8247F8
-};
-
-static uint patch_2f00[] __initdata = {
- 0x3E303430, 0x34343737, 0xABF7BF9B, 0x994B4FBD,
- 0xBD599493, 0x349FFF37, 0xFB9B177D, 0xD9936956,
- 0xBBFDD697, 0xBDD2FD11, 0x31DB9BB3, 0x63139637,
- 0x93733693, 0x193137F7, 0x331737AF, 0x7BB9B999,
- 0xBB197957, 0x7FDFD3D5, 0x73B773F7, 0x37933B99,
- 0x1D115316, 0x99315315, 0x31694BF4, 0xFBDBD359,
- 0x31497353, 0x76956D69, 0x7B9D9693, 0x13131979,
- 0x79376935
-};
-
-static uint patch_2e00[] __initdata = {};
-#endif
-
-/*
- * I2C/SPI/SMC1 relocation patch arrays.
- */
-
-#ifdef CONFIG_I2C_SPI_SMC1_UCODE_PATCH
-
-static char patch_name[] __initdata = "I2C/SPI/SMC1";
-
-static struct patch_params patch_params __initdata = {
- 3, 0x8080, 0x808a, 0x8028, 0x802a,
-};
-
-static uint patch_2000[] __initdata = {
- 0x3fff0000, 0x3ffd0000, 0x3ffb0000, 0x3ff90000,
- 0x5f13eff8, 0x5eb5eff8, 0x5f88adf7, 0x5fefadf7,
- 0x3a9cfbc8, 0x77cae1bb, 0xf4de7fad, 0xabae9330,
- 0x4e08fdcf, 0x6e0faff8, 0x7ccf76cf, 0xfdaff9cf,
- 0xabf88dc8, 0xab5879f7, 0xb0925d8d, 0xdfd079f7,
- 0xb090e6bb, 0xe5bbe74f, 0x9e046f0f, 0x6ffb76ce,
- 0xee0cf9cf, 0x2bfbefef, 0xcfeef9cf, 0x76cead23,
- 0x90b3df99, 0x7fddd0c1, 0x4bf847fd, 0x7ccf76ce,
- 0xcfef77ca, 0x7eaf7fad, 0x7dfdf0b7, 0xef7a7fca,
- 0x77cafbc8, 0x6079e722, 0xfbc85fff, 0xdfff5fb3,
- 0xfffbfbc8, 0xf3c894a5, 0xe7c9edf9, 0x7f9a7fad,
- 0x5f36afe8, 0x5f5bffdf, 0xdf95cb9e, 0xaf7d5fc3,
- 0xafed8c1b, 0x5fc3afdd, 0x5fc5df99, 0x7efdb0b3,
- 0x5fb3fffe, 0xabae5fb3, 0xfffe5fd0, 0x600be6bb,
- 0x600b5fd0, 0xdfc827fb, 0xefdf5fca, 0xcfde3a9c,
- 0xe7c9edf9, 0xf3c87f9e, 0x54ca7fed, 0x2d3a3637,
- 0x756f7e9a, 0xf1ce37ef, 0x2e677fee, 0x10ebadf8,
- 0xefdecfea, 0xe52f7d9f, 0xe12bf1ce, 0x5f647e9a,
- 0x4df8cfea, 0x5f717d9b, 0xefeecfea, 0x5f73e522,
- 0xefde5f73, 0xcfda0b61, 0x5d8fdf61, 0xe7c9edf9,
- 0x7e9a30d5, 0x1458bfff, 0xf3c85fff, 0xdfffa7f8,
- 0x5f5bbffe, 0x7f7d10d0, 0x144d5f33, 0xbfffaf78,
- 0x5f5bbffd, 0xa7f85f33, 0xbffe77fd, 0x30bd4e08,
- 0xfdcfe5ff, 0x6e0faff8, 0x7eef7e9f, 0xfdeff1cf,
- 0x5f17abf8, 0x0d5b5f5b, 0xffef79f7, 0x309eafdd,
- 0x5f3147f8, 0x5f31afed, 0x7fdd50af, 0x497847fd,
- 0x7f9e7fed, 0x7dfd70a9, 0xef7e7ece, 0x6ba07f9e,
- 0x2d227efd, 0x30db5f5b, 0xfffd5f5b, 0xffef5f5b,
- 0xffdf0c9c, 0xafed0a9a, 0xafdd0c37, 0x5f37afbd,
- 0x7fbdb081, 0x5f8147f8, 0x3a11e710, 0xedf0ccdd,
- 0xf3186d0a, 0x7f0e5f06, 0x7fedbb38, 0x3afe7468,
- 0x7fedf4fc, 0x8ffbb951, 0xb85f77fd, 0xb0df5ddd,
- 0xdefe7fed, 0x90e1e74d, 0x6f0dcbf7, 0xe7decfed,
- 0xcb74cfed, 0xcfeddf6d, 0x91714f74, 0x5dd2deef,
- 0x9e04e7df, 0xefbb6ffb, 0xe7ef7f0e, 0x9e097fed,
- 0xebdbeffa, 0xeb54affb, 0x7fea90d7, 0x7e0cf0c3,
- 0xbffff318, 0x5fffdfff, 0xac59efea, 0x7fce1ee5,
- 0xe2ff5ee1, 0xaffbe2ff, 0x5ee3affb, 0xf9cc7d0f,
- 0xaef8770f, 0x7d0fb0c6, 0xeffbbfff, 0xcfef5ede,
- 0x7d0fbfff, 0x5ede4cf8, 0x7fddd0bf, 0x49f847fd,
- 0x7efdf0bb, 0x7fedfffd, 0x7dfdf0b7, 0xef7e7e1e,
- 0x5ede7f0e, 0x3a11e710, 0xedf0ccab, 0xfb18ad2e,
- 0x1ea9bbb8, 0x74283b7e, 0x73c2e4bb, 0x2ada4fb8,
- 0xdc21e4bb, 0xb2a1ffbf, 0x5e2c43f8, 0xfc87e1bb,
- 0xe74ffd91, 0x6f0f4fe8, 0xc7ba32e2, 0xf396efeb,
- 0x600b4f78, 0xe5bb760b, 0x53acaef8, 0x4ef88b0e,
- 0xcfef9e09, 0xabf8751f, 0xefef5bac, 0x741f4fe8,
- 0x751e760d, 0x7fdbf081, 0x741cafce, 0xefcc7fce,
- 0x751e70ac, 0x741ce7bb, 0x3372cfed, 0xafdbefeb,
- 0xe5bb760b, 0x53f2aef8, 0xafe8e7eb, 0x4bf8771e,
- 0x7e247fed, 0x4fcbe2cc, 0x7fbc30a9, 0x7b0f7a0f,
- 0x34d577fd, 0x308b5db7, 0xde553e5f, 0xaf78741f,
- 0x741f30f0, 0xcfef5e2c, 0x741f3eac, 0xafb8771e,
- 0x5e677fed, 0x0bd3e2cc, 0x741ccfec, 0xe5ca53cd,
- 0x6fcb4f74, 0x5dadde4b, 0x2ab63d38, 0x4bb3de30,
- 0x751f741c, 0x6c42effa, 0xefea7fce, 0x6ffc30be,
- 0xefec3fca, 0x30b3de2e, 0xadf85d9e, 0xaf7daefd,
- 0x5d9ede2e, 0x5d9eafdd, 0x761f10ac, 0x1da07efd,
- 0x30adfffe, 0x4908fb18, 0x5fffdfff, 0xafbb709b,
- 0x4ef85e67, 0xadf814ad, 0x7a0f70ad, 0xcfef50ad,
- 0x7a0fde30, 0x5da0afed, 0x3c12780f, 0xefef780f,
- 0xefef790f, 0xa7f85e0f, 0xffef790f, 0xefef790f,
- 0x14adde2e, 0x5d9eadfd, 0x5e2dfffb, 0xe79addfd,
- 0xeff96079, 0x607ae79a, 0xddfceff9, 0x60795dff,
- 0x607acfef, 0xefefefdf, 0xefbfef7f, 0xeeffedff,
- 0xebffe7ff, 0xafefafdf, 0xafbfaf7f, 0xaeffadff,
- 0xabffa7ff, 0x6fef6fdf, 0x6fbf6f7f, 0x6eff6dff,
- 0x6bff67ff, 0x2fef2fdf, 0x2fbf2f7f, 0x2eff2dff,
- 0x2bff27ff, 0x4e08fd1f, 0xe5ff6e0f, 0xaff87eef,
- 0x7e0ffdef, 0xf11f6079, 0xabf8f542, 0x7e0af11c,
- 0x37cfae3a, 0x7fec90be, 0xadf8efdc, 0xcfeae52f,
- 0x7d0fe12b, 0xf11c6079, 0x7e0a4df8, 0xcfea5dc4,
- 0x7d0befec, 0xcfea5dc6, 0xe522efdc, 0x5dc6cfda,
- 0x4e08fd1f, 0x6e0faff8, 0x7c1f761f, 0xfdeff91f,
- 0x6079abf8, 0x761cee24, 0xf91f2bfb, 0xefefcfec,
- 0xf91f6079, 0x761c27fb, 0xefdf5da7, 0xcfdc7fdd,
- 0xd09c4bf8, 0x47fd7c1f, 0x761ccfcf, 0x7eef7fed,
- 0x7dfdf093, 0xef7e7f1e, 0x771efb18, 0x6079e722,
- 0xe6bbe5bb, 0xae0ae5bb, 0x600bae85, 0xe2bbe2bb,
- 0xe2bbe2bb, 0xaf02e2bb, 0xe2bb2ff9, 0x6079e2bb
-};
-
-static uint patch_2f00[] __initdata = {
- 0x30303030, 0x3e3e3434, 0xabbf9b99, 0x4b4fbdbd,
- 0x59949334, 0x9fff37fb, 0x9b177dd9, 0x936956bb,
- 0xfbdd697b, 0xdd2fd113, 0x1db9f7bb, 0x36313963,
- 0x79373369, 0x3193137f, 0x7331737a, 0xf7bb9b99,
- 0x9bb19795, 0x77fdfd3d, 0x573b773f, 0x737933f7,
- 0xb991d115, 0x31699315, 0x31531694, 0xbf4fbdbd,
- 0x35931497, 0x35376956, 0xbd697b9d, 0x96931313,
- 0x19797937, 0x6935af78, 0xb9b3baa3, 0xb8788683,
- 0x368f78f7, 0x87778733, 0x3ffffb3b, 0x8e8f78b8,
- 0x1d118e13, 0xf3ff3f8b, 0x6bd8e173, 0xd1366856,
- 0x68d1687b, 0x3daf78b8, 0x3a3a3f87, 0x8f81378f,
- 0xf876f887, 0x77fd8778, 0x737de8d6, 0xbbf8bfff,
- 0xd8df87f7, 0xfd876f7b, 0x8bfff8bd, 0x8683387d,
- 0xb873d87b, 0x3b8fd7f8, 0xf7338883, 0xbb8ee1f8,
- 0xef837377, 0x3337b836, 0x817d11f8, 0x7378b878,
- 0xd3368b7d, 0xed731b7d, 0x833731f3, 0xf22f3f23
-};
-
-static uint patch_2e00[] __initdata = {
- 0x27eeeeee, 0xeeeeeeee, 0xeeeeeeee, 0xeeeeeeee,
- 0xee4bf4fb, 0xdbd259bb, 0x1979577f, 0xdfd2d573,
- 0xb773f737, 0x4b4fbdbd, 0x25b9b177, 0xd2d17376,
- 0x956bbfdd, 0x697bdd2f, 0xff9f79ff, 0xff9ff22f
-};
-#endif
-
-/*
- * USB SOF patch arrays.
- */
-
-#ifdef CONFIG_USB_SOF_UCODE_PATCH
-
-static char patch_name[] __initdata = "USB SOF";
-
-static struct patch_params patch_params __initdata = {
- 9,
-};
-
-static uint patch_2000[] __initdata = {
- 0x7fff0000, 0x7ffd0000, 0x7ffb0000, 0x49f7ba5b,
- 0xba383ffb, 0xf9b8b46d, 0xe5ab4e07, 0xaf77bffe,
- 0x3f7bbf79, 0xba5bba38, 0xe7676076, 0x60750000
-};
-
-static uint patch_2f00[] __initdata = {
- 0x3030304c, 0xcab9e441, 0xa1aaf220
-};
-
-static uint patch_2e00[] __initdata = {};
-#endif
-
-/*
- * SMC relocation patch arrays.
- */
-
-#ifdef CONFIG_SMC_UCODE_PATCH
-
-static char patch_name[] __initdata = "SMC";
-
-static struct patch_params patch_params __initdata = {
- 2, 0x8080, 0x8088,
-};
-
-static uint patch_2000[] __initdata = {
- 0x3fff0000, 0x3ffd0000, 0x3ffb0000, 0x3ff90000,
- 0x5fefeff8, 0x5f91eff8, 0x3ff30000, 0x3ff10000,
- 0x3a11e710, 0xedf0ccb9, 0xf318ed66, 0x7f0e5fe2,
- 0x7fedbb38, 0x3afe7468, 0x7fedf4d8, 0x8ffbb92d,
- 0xb83b77fd, 0xb0bb5eb9, 0xdfda7fed, 0x90bde74d,
- 0x6f0dcbd3, 0xe7decfed, 0xcb50cfed, 0xcfeddf6d,
- 0x914d4f74, 0x5eaedfcb, 0x9ee0e7df, 0xefbb6ffb,
- 0xe7ef7f0e, 0x9ee57fed, 0xebb7effa, 0xeb30affb,
- 0x7fea90b3, 0x7e0cf09f, 0xbffff318, 0x5fffdfff,
- 0xac35efea, 0x7fce1fc1, 0xe2ff5fbd, 0xaffbe2ff,
- 0x5fbfaffb, 0xf9a87d0f, 0xaef8770f, 0x7d0fb0a2,
- 0xeffbbfff, 0xcfef5fba, 0x7d0fbfff, 0x5fba4cf8,
- 0x7fddd09b, 0x49f847fd, 0x7efdf097, 0x7fedfffd,
- 0x7dfdf093, 0xef7e7e1e, 0x5fba7f0e, 0x3a11e710,
- 0xedf0cc87, 0xfb18ad0a, 0x1f85bbb8, 0x74283b7e,
- 0x7375e4bb, 0x2ab64fb8, 0x5c7de4bb, 0x32fdffbf,
- 0x5f0843f8, 0x7ce3e1bb, 0xe74f7ded, 0x6f0f4fe8,
- 0xc7ba32be, 0x73f2efeb, 0x600b4f78, 0xe5bb760b,
- 0x5388aef8, 0x4ef80b6a, 0xcfef9ee5, 0xabf8751f,
- 0xefef5b88, 0x741f4fe8, 0x751e760d, 0x7fdb70dd,
- 0x741cafce, 0xefcc7fce, 0x751e7088, 0x741ce7bb,
- 0x334ecfed, 0xafdbefeb, 0xe5bb760b, 0x53ceaef8,
- 0xafe8e7eb, 0x4bf8771e, 0x7e007fed, 0x4fcbe2cc,
- 0x7fbc3085, 0x7b0f7a0f, 0x34b177fd, 0xb0e75e93,
- 0xdf313e3b, 0xaf78741f, 0x741f30cc, 0xcfef5f08,
- 0x741f3e88, 0xafb8771e, 0x5f437fed, 0x0bafe2cc,
- 0x741ccfec, 0xe5ca53a9, 0x6fcb4f74, 0x5e89df27,
- 0x2a923d14, 0x4b8fdf0c, 0x751f741c, 0x6c1eeffa,
- 0xefea7fce, 0x6ffc309a, 0xefec3fca, 0x308fdf0a,
- 0xadf85e7a, 0xaf7daefd, 0x5e7adf0a, 0x5e7aafdd,
- 0x761f1088, 0x1e7c7efd, 0x3089fffe, 0x4908fb18,
- 0x5fffdfff, 0xafbbf0f7, 0x4ef85f43, 0xadf81489,
- 0x7a0f7089, 0xcfef5089, 0x7a0fdf0c, 0x5e7cafed,
- 0xbc6e780f, 0xefef780f, 0xefef790f, 0xa7f85eeb,
- 0xffef790f, 0xefef790f, 0x1489df0a, 0x5e7aadfd,
- 0x5f09fffb, 0xe79aded9, 0xeff96079, 0x607ae79a,
- 0xded8eff9, 0x60795edb, 0x607acfef, 0xefefefdf,
- 0xefbfef7f, 0xeeffedff, 0xebffe7ff, 0xafefafdf,
- 0xafbfaf7f, 0xaeffadff, 0xabffa7ff, 0x6fef6fdf,
- 0x6fbf6f7f, 0x6eff6dff, 0x6bff67ff, 0x2fef2fdf,
- 0x2fbf2f7f, 0x2eff2dff, 0x2bff27ff, 0x4e08fd1f,
- 0xe5ff6e0f, 0xaff87eef, 0x7e0ffdef, 0xf11f6079,
- 0xabf8f51e, 0x7e0af11c, 0x37cfae16, 0x7fec909a,
- 0xadf8efdc, 0xcfeae52f, 0x7d0fe12b, 0xf11c6079,
- 0x7e0a4df8, 0xcfea5ea0, 0x7d0befec, 0xcfea5ea2,
- 0xe522efdc, 0x5ea2cfda, 0x4e08fd1f, 0x6e0faff8,
- 0x7c1f761f, 0xfdeff91f, 0x6079abf8, 0x761cee00,
- 0xf91f2bfb, 0xefefcfec, 0xf91f6079, 0x761c27fb,
- 0xefdf5e83, 0xcfdc7fdd, 0x50f84bf8, 0x47fd7c1f,
- 0x761ccfcf, 0x7eef7fed, 0x7dfd70ef, 0xef7e7f1e,
- 0x771efb18, 0x6079e722, 0xe6bbe5bb, 0x2e66e5bb,
- 0x600b2ee1, 0xe2bbe2bb, 0xe2bbe2bb, 0x2f5ee2bb,
- 0xe2bb2ff9, 0x6079e2bb,
-};
-
-static uint patch_2f00[] __initdata = {
- 0x30303030, 0x3e3e3030, 0xaf79b9b3, 0xbaa3b979,
- 0x9693369f, 0x79f79777, 0x97333fff, 0xfb3b9e9f,
- 0x79b91d11, 0x9e13f3ff, 0x3f9b6bd9, 0xe173d136,
- 0x695669d1, 0x697b3daf, 0x79b93a3a, 0x3f979f91,
- 0x379ff976, 0xf99777fd, 0x9779737d, 0xe9d6bbf9,
- 0xbfffd9df, 0x97f7fd97, 0x6f7b9bff, 0xf9bd9683,
- 0x397db973, 0xd97b3b9f, 0xd7f9f733, 0x9993bb9e,
- 0xe1f9ef93, 0x73773337, 0xb936917d, 0x11f87379,
- 0xb979d336, 0x8b7ded73, 0x1b7d9337, 0x31f3f22f,
- 0x3f2327ee, 0xeeeeeeee, 0xeeeeeeee, 0xeeeeeeee,
- 0xeeeeee4b, 0xf4fbdbd2, 0x58bb1878, 0x577fdfd2,
- 0xd573b773, 0xf7374b4f, 0xbdbd25b8, 0xb177d2d1,
- 0x7376856b, 0xbfdd687b, 0xdd2fff8f, 0x78ffff8f,
- 0xf22f0000,
-};
-
-static uint patch_2e00[] __initdata = {};
-#endif
-
-static void __init cpm_write_patch(cpm8xx_t *cp, int offset, uint *patch, int len)
-{
- if (!len)
- return;
- memcpy_toio(cp->cp_dpmem + offset, patch, len);
-}
-
-void __init cpm_load_patch(cpm8xx_t *cp)
-{
- out_be16(&cp->cp_rccr, 0);
-
- cpm_write_patch(cp, 0, patch_2000, sizeof(patch_2000));
- cpm_write_patch(cp, 0xf00, patch_2f00, sizeof(patch_2f00));
- cpm_write_patch(cp, 0xe00, patch_2e00, sizeof(patch_2e00));
-
- if (IS_ENABLED(CONFIG_I2C_SPI_UCODE_PATCH) ||
- IS_ENABLED(CONFIG_I2C_SPI_SMC1_UCODE_PATCH)) {
- u16 rpbase = 0x500;
- iic_t *iip;
- struct spi_pram *spp;
-
- iip = (iic_t *)&cp->cp_dparam[PROFF_IIC];
- out_be16(&iip->iic_rpbase, rpbase);
-
- /* Put SPI above the IIC, also 32-byte aligned. */
- spp = (struct spi_pram *)&cp->cp_dparam[PROFF_SPI];
- out_be16(&spp->rpbase, (rpbase + sizeof(iic_t) + 31) & ~31);
-
- if (IS_ENABLED(CONFIG_I2C_SPI_SMC1_UCODE_PATCH)) {
- smc_uart_t *smp;
-
- smp = (smc_uart_t *)&cp->cp_dparam[PROFF_SMC1];
- out_be16(&smp->smc_rpbase, 0x1FC0);
- }
- }
-
- if (IS_ENABLED(CONFIG_SMC_UCODE_PATCH)) {
- smc_uart_t *smp;
-
- if (IS_ENABLED(CONFIG_PPC_EARLY_DEBUG_CPM)) {
- int i;
-
- for (i = 0; i < sizeof(*smp); i += 4) {
- u32 __iomem *src = (u32 __iomem *)&cp->cp_dparam[PROFF_SMC1 + i];
- u32 __iomem *dst = (u32 __iomem *)&cp->cp_dparam[PROFF_DSP1 + i];
-
- out_be32(dst, in_be32(src));
- }
- }
-
- smp = (smc_uart_t *)&cp->cp_dparam[PROFF_SMC1];
- out_be16(&smp->smc_rpbase, 0x1ec0);
- smp = (smc_uart_t *)&cp->cp_dparam[PROFF_SMC2];
- out_be16(&smp->smc_rpbase, 0x1fc0);
- }
-
- out_be16(&cp->cp_cpmcr1, patch_params.cpmcr1);
- out_be16(&cp->cp_cpmcr2, patch_params.cpmcr2);
- out_be16(&cp->cp_cpmcr3, patch_params.cpmcr3);
- out_be16(&cp->cp_cpmcr4, patch_params.cpmcr4);
-
- out_be16(&cp->cp_rccr, patch_params.rccr);
-
- pr_info("%s microcode patch installed\n", patch_name);
-}
diff --git a/drivers/media/i2c/vs6624.c b/drivers/media/i2c/vs6624.c
deleted file mode 100644
index c292c92e37b9..000000000000
--- a/drivers/media/i2c/vs6624.c
+++ /dev/null
@@ -1,856 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * vs6624.c ST VS6624 CMOS image sensor driver
- *
- * Copyright (c) 2011 Analog Devices Inc.
- */
-
-#include <linux/delay.h>
-#include <linux/errno.h>
-#include <linux/gpio.h>
-#include <linux/i2c.h>
-#include <linux/init.h>
-#include <linux/module.h>
-#include <linux/slab.h>
-#include <linux/types.h>
-#include <linux/videodev2.h>
-
-#include <media/v4l2-ctrls.h>
-#include <media/v4l2-device.h>
-#include <media/v4l2-mediabus.h>
-#include <media/v4l2-image-sizes.h>
-
-#include "vs6624_regs.h"
-
-#define MAX_FRAME_RATE 30
-
-struct vs6624 {
- struct v4l2_subdev sd;
- struct v4l2_ctrl_handler hdl;
- struct v4l2_fract frame_rate;
- struct v4l2_mbus_framefmt fmt;
- unsigned ce_pin;
-};
-
-static const struct vs6624_format {
- u32 mbus_code;
- enum v4l2_colorspace colorspace;
-} vs6624_formats[] = {
- {
- .mbus_code = MEDIA_BUS_FMT_UYVY8_2X8,
- .colorspace = V4L2_COLORSPACE_JPEG,
- },
- {
- .mbus_code = MEDIA_BUS_FMT_YUYV8_2X8,
- .colorspace = V4L2_COLORSPACE_JPEG,
- },
- {
- .mbus_code = MEDIA_BUS_FMT_RGB565_2X8_LE,
- .colorspace = V4L2_COLORSPACE_SRGB,
- },
-};
-
-static const struct v4l2_mbus_framefmt vs6624_default_fmt = {
- .width = VGA_WIDTH,
- .height = VGA_HEIGHT,
- .code = MEDIA_BUS_FMT_UYVY8_2X8,
- .field = V4L2_FIELD_NONE,
- .colorspace = V4L2_COLORSPACE_JPEG,
-};
-
-static const u16 vs6624_p1[] = {
- 0x8104, 0x03,
- 0x8105, 0x01,
- 0xc900, 0x03,
- 0xc904, 0x47,
- 0xc905, 0x10,
- 0xc906, 0x80,
- 0xc907, 0x3a,
- 0x903a, 0x02,
- 0x903b, 0x47,
- 0x903c, 0x15,
- 0xc908, 0x31,
- 0xc909, 0xdc,
- 0xc90a, 0x80,
- 0xc90b, 0x44,
- 0x9044, 0x02,
- 0x9045, 0x31,
- 0x9046, 0xe2,
- 0xc90c, 0x07,
- 0xc90d, 0xe0,
- 0xc90e, 0x80,
- 0xc90f, 0x47,
- 0x9047, 0x90,
- 0x9048, 0x83,
- 0x9049, 0x81,
- 0x904a, 0xe0,
- 0x904b, 0x60,
- 0x904c, 0x08,
- 0x904d, 0x90,
- 0x904e, 0xc0,
- 0x904f, 0x43,
- 0x9050, 0x74,
- 0x9051, 0x01,
- 0x9052, 0xf0,
- 0x9053, 0x80,
- 0x9054, 0x05,
- 0x9055, 0xE4,
- 0x9056, 0x90,
- 0x9057, 0xc0,
- 0x9058, 0x43,
- 0x9059, 0xf0,
- 0x905a, 0x02,
- 0x905b, 0x07,
- 0x905c, 0xec,
- 0xc910, 0x5d,
- 0xc911, 0xca,
- 0xc912, 0x80,
- 0xc913, 0x5d,
- 0x905d, 0xa3,
- 0x905e, 0x04,
- 0x905f, 0xf0,
- 0x9060, 0xa3,
- 0x9061, 0x04,
- 0x9062, 0xf0,
- 0x9063, 0x22,
- 0xc914, 0x72,
- 0xc915, 0x92,
- 0xc916, 0x80,
- 0xc917, 0x64,
- 0x9064, 0x74,
- 0x9065, 0x01,
- 0x9066, 0x02,
- 0x9067, 0x72,
- 0x9068, 0x95,
- 0xc918, 0x47,
- 0xc919, 0xf2,
- 0xc91a, 0x81,
- 0xc91b, 0x69,
- 0x9169, 0x74,
- 0x916a, 0x02,
- 0x916b, 0xf0,
- 0x916c, 0xec,
- 0x916d, 0xb4,
- 0x916e, 0x10,
- 0x916f, 0x0a,
- 0x9170, 0x90,
- 0x9171, 0x80,
- 0x9172, 0x16,
- 0x9173, 0xe0,
- 0x9174, 0x70,
- 0x9175, 0x04,
- 0x9176, 0x90,
- 0x9177, 0xd3,
- 0x9178, 0xc4,
- 0x9179, 0xf0,
- 0x917a, 0x22,
- 0xc91c, 0x0a,
- 0xc91d, 0xbe,
- 0xc91e, 0x80,
- 0xc91f, 0x73,
- 0x9073, 0xfc,
- 0x9074, 0xa3,
- 0x9075, 0xe0,
- 0x9076, 0xf5,
- 0x9077, 0x82,
- 0x9078, 0x8c,
- 0x9079, 0x83,
- 0x907a, 0xa3,
- 0x907b, 0xa3,
- 0x907c, 0xe0,
- 0x907d, 0xfc,
- 0x907e, 0xa3,
- 0x907f, 0xe0,
- 0x9080, 0xc3,
- 0x9081, 0x9f,
- 0x9082, 0xff,
- 0x9083, 0xec,
- 0x9084, 0x9e,
- 0x9085, 0xfe,
- 0x9086, 0x02,
- 0x9087, 0x0a,
- 0x9088, 0xea,
- 0xc920, 0x47,
- 0xc921, 0x38,
- 0xc922, 0x80,
- 0xc923, 0x89,
- 0x9089, 0xec,
- 0x908a, 0xd3,
- 0x908b, 0x94,
- 0x908c, 0x20,
- 0x908d, 0x40,
- 0x908e, 0x01,
- 0x908f, 0x1c,
- 0x9090, 0x90,
- 0x9091, 0xd3,
- 0x9092, 0xd4,
- 0x9093, 0xec,
- 0x9094, 0xf0,
- 0x9095, 0x02,
- 0x9096, 0x47,
- 0x9097, 0x3d,
- 0xc924, 0x45,
- 0xc925, 0xca,
- 0xc926, 0x80,
- 0xc927, 0x98,
- 0x9098, 0x12,
- 0x9099, 0x77,
- 0x909a, 0xd6,
- 0x909b, 0x02,
- 0x909c, 0x45,
- 0x909d, 0xcd,
- 0xc928, 0x20,
- 0xc929, 0xd5,
- 0xc92a, 0x80,
- 0xc92b, 0x9e,
- 0x909e, 0x90,
- 0x909f, 0x82,
- 0x90a0, 0x18,
- 0x90a1, 0xe0,
- 0x90a2, 0xb4,
- 0x90a3, 0x03,
- 0x90a4, 0x0e,
- 0x90a5, 0x90,
- 0x90a6, 0x83,
- 0x90a7, 0xbf,
- 0x90a8, 0xe0,
- 0x90a9, 0x60,
- 0x90aa, 0x08,
- 0x90ab, 0x90,
- 0x90ac, 0x81,
- 0x90ad, 0xfc,
- 0x90ae, 0xe0,
- 0x90af, 0xff,
- 0x90b0, 0xc3,
- 0x90b1, 0x13,
- 0x90b2, 0xf0,
- 0x90b3, 0x90,
- 0x90b4, 0x81,
- 0x90b5, 0xfc,
- 0x90b6, 0xe0,
- 0x90b7, 0xff,
- 0x90b8, 0x02,
- 0x90b9, 0x20,
- 0x90ba, 0xda,
- 0xc92c, 0x70,
- 0xc92d, 0xbc,
- 0xc92e, 0x80,
- 0xc92f, 0xbb,
- 0x90bb, 0x90,
- 0x90bc, 0x82,
- 0x90bd, 0x18,
- 0x90be, 0xe0,
- 0x90bf, 0xb4,
- 0x90c0, 0x03,
- 0x90c1, 0x06,
- 0x90c2, 0x90,
- 0x90c3, 0xc1,
- 0x90c4, 0x06,
- 0x90c5, 0x74,
- 0x90c6, 0x05,
- 0x90c7, 0xf0,
- 0x90c8, 0x90,
- 0x90c9, 0xd3,
- 0x90ca, 0xa0,
- 0x90cb, 0x02,
- 0x90cc, 0x70,
- 0x90cd, 0xbf,
- 0xc930, 0x72,
- 0xc931, 0x21,
- 0xc932, 0x81,
- 0xc933, 0x3b,
- 0x913b, 0x7d,
- 0x913c, 0x02,
- 0x913d, 0x7f,
- 0x913e, 0x7b,
- 0x913f, 0x02,
- 0x9140, 0x72,
- 0x9141, 0x25,
- 0xc934, 0x28,
- 0xc935, 0xae,
- 0xc936, 0x80,
- 0xc937, 0xd2,
- 0x90d2, 0xf0,
- 0x90d3, 0x90,
- 0x90d4, 0xd2,
- 0x90d5, 0x0a,
- 0x90d6, 0x02,
- 0x90d7, 0x28,
- 0x90d8, 0xb4,
- 0xc938, 0x28,
- 0xc939, 0xb1,
- 0xc93a, 0x80,
- 0xc93b, 0xd9,
- 0x90d9, 0x90,
- 0x90da, 0x83,
- 0x90db, 0xba,
- 0x90dc, 0xe0,
- 0x90dd, 0xff,
- 0x90de, 0x90,
- 0x90df, 0xd2,
- 0x90e0, 0x08,
- 0x90e1, 0xe0,
- 0x90e2, 0xe4,
- 0x90e3, 0xef,
- 0x90e4, 0xf0,
- 0x90e5, 0xa3,
- 0x90e6, 0xe0,
- 0x90e7, 0x74,
- 0x90e8, 0xff,
- 0x90e9, 0xf0,
- 0x90ea, 0x90,
- 0x90eb, 0xd2,
- 0x90ec, 0x0a,
- 0x90ed, 0x02,
- 0x90ee, 0x28,
- 0x90ef, 0xb4,
- 0xc93c, 0x29,
- 0xc93d, 0x79,
- 0xc93e, 0x80,
- 0xc93f, 0xf0,
- 0x90f0, 0xf0,
- 0x90f1, 0x90,
- 0x90f2, 0xd2,
- 0x90f3, 0x0e,
- 0x90f4, 0x02,
- 0x90f5, 0x29,
- 0x90f6, 0x7f,
- 0xc940, 0x29,
- 0xc941, 0x7c,
- 0xc942, 0x80,
- 0xc943, 0xf7,
- 0x90f7, 0x90,
- 0x90f8, 0x83,
- 0x90f9, 0xba,
- 0x90fa, 0xe0,
- 0x90fb, 0xff,
- 0x90fc, 0x90,
- 0x90fd, 0xd2,
- 0x90fe, 0x0c,
- 0x90ff, 0xe0,
- 0x9100, 0xe4,
- 0x9101, 0xef,
- 0x9102, 0xf0,
- 0x9103, 0xa3,
- 0x9104, 0xe0,
- 0x9105, 0x74,
- 0x9106, 0xff,
- 0x9107, 0xf0,
- 0x9108, 0x90,
- 0x9109, 0xd2,
- 0x910a, 0x0e,
- 0x910b, 0x02,
- 0x910c, 0x29,
- 0x910d, 0x7f,
- 0xc944, 0x2a,
- 0xc945, 0x42,
- 0xc946, 0x81,
- 0xc947, 0x0e,
- 0x910e, 0xf0,
- 0x910f, 0x90,
- 0x9110, 0xd2,
- 0x9111, 0x12,
- 0x9112, 0x02,
- 0x9113, 0x2a,
- 0x9114, 0x48,
- 0xc948, 0x2a,
- 0xc949, 0x45,
- 0xc94a, 0x81,
- 0xc94b, 0x15,
- 0x9115, 0x90,
- 0x9116, 0x83,
- 0x9117, 0xba,
- 0x9118, 0xe0,
- 0x9119, 0xff,
- 0x911a, 0x90,
- 0x911b, 0xd2,
- 0x911c, 0x10,
- 0x911d, 0xe0,
- 0x911e, 0xe4,
- 0x911f, 0xef,
- 0x9120, 0xf0,
- 0x9121, 0xa3,
- 0x9122, 0xe0,
- 0x9123, 0x74,
- 0x9124, 0xff,
- 0x9125, 0xf0,
- 0x9126, 0x90,
- 0x9127, 0xd2,
- 0x9128, 0x12,
- 0x9129, 0x02,
- 0x912a, 0x2a,
- 0x912b, 0x48,
- 0xc900, 0x01,
- 0x0000, 0x00,
-};
-
-static const u16 vs6624_p2[] = {
- 0x806f, 0x01,
- 0x058c, 0x01,
- 0x0000, 0x00,
-};
-
-static const u16 vs6624_run_setup[] = {
- 0x1d18, 0x00, /* Enableconstrainedwhitebalance */
- VS6624_PEAK_MIN_OUT_G_MSB, 0x3c, /* Damper PeakGain Output MSB */
- VS6624_PEAK_MIN_OUT_G_LSB, 0x66, /* Damper PeakGain Output LSB */
- VS6624_CM_LOW_THR_MSB, 0x65, /* Damper Low MSB */
- VS6624_CM_LOW_THR_LSB, 0xd1, /* Damper Low LSB */
- VS6624_CM_HIGH_THR_MSB, 0x66, /* Damper High MSB */
- VS6624_CM_HIGH_THR_LSB, 0x62, /* Damper High LSB */
- VS6624_CM_MIN_OUT_MSB, 0x00, /* Damper Min output MSB */
- VS6624_CM_MIN_OUT_LSB, 0x00, /* Damper Min output LSB */
- VS6624_NORA_DISABLE, 0x00, /* Nora fDisable */
- VS6624_NORA_USAGE, 0x04, /* Nora usage */
- VS6624_NORA_LOW_THR_MSB, 0x63, /* Damper Low MSB Changed 0x63 to 0x65 */
- VS6624_NORA_LOW_THR_LSB, 0xd1, /* Damper Low LSB */
- VS6624_NORA_HIGH_THR_MSB, 0x68, /* Damper High MSB */
- VS6624_NORA_HIGH_THR_LSB, 0xdd, /* Damper High LSB */
- VS6624_NORA_MIN_OUT_MSB, 0x3a, /* Damper Min output MSB */
- VS6624_NORA_MIN_OUT_LSB, 0x00, /* Damper Min output LSB */
- VS6624_F2B_DISABLE, 0x00, /* Disable */
- 0x1d8a, 0x30, /* MAXWeightHigh */
- 0x1d91, 0x62, /* fpDamperLowThresholdHigh MSB */
- 0x1d92, 0x4a, /* fpDamperLowThresholdHigh LSB */
- 0x1d95, 0x65, /* fpDamperHighThresholdHigh MSB */
- 0x1d96, 0x0e, /* fpDamperHighThresholdHigh LSB */
- 0x1da1, 0x3a, /* fpMinimumDamperOutputLow MSB */
- 0x1da2, 0xb8, /* fpMinimumDamperOutputLow LSB */
- 0x1e08, 0x06, /* MAXWeightLow */
- 0x1e0a, 0x0a, /* MAXWeightHigh */
- 0x1601, 0x3a, /* Red A MSB */
- 0x1602, 0x14, /* Red A LSB */
- 0x1605, 0x3b, /* Blue A MSB */
- 0x1606, 0x85, /* BLue A LSB */
- 0x1609, 0x3b, /* RED B MSB */
- 0x160a, 0x85, /* RED B LSB */
- 0x160d, 0x3a, /* Blue B MSB */
- 0x160e, 0x14, /* Blue B LSB */
- 0x1611, 0x30, /* Max Distance from Locus MSB */
- 0x1612, 0x8f, /* Max Distance from Locus MSB */
- 0x1614, 0x01, /* Enable constrainer */
- 0x0000, 0x00,
-};
-
-static const u16 vs6624_default[] = {
- VS6624_CONTRAST0, 0x84,
- VS6624_SATURATION0, 0x75,
- VS6624_GAMMA0, 0x11,
- VS6624_CONTRAST1, 0x84,
- VS6624_SATURATION1, 0x75,
- VS6624_GAMMA1, 0x11,
- VS6624_MAN_RG, 0x80,
- VS6624_MAN_GG, 0x80,
- VS6624_MAN_BG, 0x80,
- VS6624_WB_MODE, 0x1,
- VS6624_EXPO_COMPENSATION, 0xfe,
- VS6624_EXPO_METER, 0x0,
- VS6624_LIGHT_FREQ, 0x64,
- VS6624_PEAK_GAIN, 0xe,
- VS6624_PEAK_LOW_THR, 0x28,
- VS6624_HMIRROR0, 0x0,
- VS6624_VFLIP0, 0x0,
- VS6624_ZOOM_HSTEP0_MSB, 0x0,
- VS6624_ZOOM_HSTEP0_LSB, 0x1,
- VS6624_ZOOM_VSTEP0_MSB, 0x0,
- VS6624_ZOOM_VSTEP0_LSB, 0x1,
- VS6624_PAN_HSTEP0_MSB, 0x0,
- VS6624_PAN_HSTEP0_LSB, 0xf,
- VS6624_PAN_VSTEP0_MSB, 0x0,
- VS6624_PAN_VSTEP0_LSB, 0xf,
- VS6624_SENSOR_MODE, 0x1,
- VS6624_SYNC_CODE_SETUP, 0x21,
- VS6624_DISABLE_FR_DAMPER, 0x0,
- VS6624_FR_DEN, 0x1,
- VS6624_FR_NUM_LSB, 0xf,
- VS6624_INIT_PIPE_SETUP, 0x0,
- VS6624_IMG_FMT0, 0x0,
- VS6624_YUV_SETUP, 0x1,
- VS6624_IMAGE_SIZE0, 0x2,
- 0x0000, 0x00,
-};
-
-static inline struct vs6624 *to_vs6624(struct v4l2_subdev *sd)
-{
- return container_of(sd, struct vs6624, sd);
-}
-static inline struct v4l2_subdev *to_sd(struct v4l2_ctrl *ctrl)
-{
- return &container_of(ctrl->handler, struct vs6624, hdl)->sd;
-}
-
-#ifdef CONFIG_VIDEO_ADV_DEBUG
-static int vs6624_read(struct v4l2_subdev *sd, u16 index)
-{
- struct i2c_client *client = v4l2_get_subdevdata(sd);
- u8 buf[2];
-
- buf[0] = index >> 8;
- buf[1] = index;
- i2c_master_send(client, buf, 2);
- i2c_master_recv(client, buf, 1);
-
- return buf[0];
-}
-#endif
-
-static int vs6624_write(struct v4l2_subdev *sd, u16 index,
- u8 value)
-{
- struct i2c_client *client = v4l2_get_subdevdata(sd);
- u8 buf[3];
-
- buf[0] = index >> 8;
- buf[1] = index;
- buf[2] = value;
-
- return i2c_master_send(client, buf, 3);
-}
-
-static int vs6624_writeregs(struct v4l2_subdev *sd, const u16 *regs)
-{
- u16 reg;
- u8 data;
-
- while (*regs != 0x00) {
- reg = *regs++;
- data = *regs++;
-
- vs6624_write(sd, reg, data);
- }
- return 0;
-}
-
-static int vs6624_s_ctrl(struct v4l2_ctrl *ctrl)
-{
- struct v4l2_subdev *sd = to_sd(ctrl);
-
- switch (ctrl->id) {
- case V4L2_CID_CONTRAST:
- vs6624_write(sd, VS6624_CONTRAST0, ctrl->val);
- break;
- case V4L2_CID_SATURATION:
- vs6624_write(sd, VS6624_SATURATION0, ctrl->val);
- break;
- case V4L2_CID_HFLIP:
- vs6624_write(sd, VS6624_HMIRROR0, ctrl->val);
- break;
- case V4L2_CID_VFLIP:
- vs6624_write(sd, VS6624_VFLIP0, ctrl->val);
- break;
- default:
- return -EINVAL;
- }
-
- return 0;
-}
-
-static int vs6624_enum_mbus_code(struct v4l2_subdev *sd,
- struct v4l2_subdev_pad_config *cfg,
- struct v4l2_subdev_mbus_code_enum *code)
-{
- if (code->pad || code->index >= ARRAY_SIZE(vs6624_formats))
- return -EINVAL;
-
- code->code = vs6624_formats[code->index].mbus_code;
- return 0;
-}
-
-static int vs6624_set_fmt(struct v4l2_subdev *sd,
- struct v4l2_subdev_pad_config *cfg,
- struct v4l2_subdev_format *format)
-{
- struct v4l2_mbus_framefmt *fmt = &format->format;
- struct vs6624 *sensor = to_vs6624(sd);
- int index;
-
- if (format->pad)
- return -EINVAL;
-
- for (index = 0; index < ARRAY_SIZE(vs6624_formats); index++)
- if (vs6624_formats[index].mbus_code == fmt->code)
- break;
- if (index >= ARRAY_SIZE(vs6624_formats)) {
- /* default to first format */
- index = 0;
- fmt->code = vs6624_formats[0].mbus_code;
- }
-
- /* sensor mode is VGA */
- if (fmt->width > VGA_WIDTH)
- fmt->width = VGA_WIDTH;
- if (fmt->height > VGA_HEIGHT)
- fmt->height = VGA_HEIGHT;
- fmt->width = fmt->width & (~3);
- fmt->height = fmt->height & (~3);
- fmt->field = V4L2_FIELD_NONE;
- fmt->colorspace = vs6624_formats[index].colorspace;
-
- if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
- cfg->try_fmt = *fmt;
- return 0;
- }
-
- /* set image format */
- switch (fmt->code) {
- case MEDIA_BUS_FMT_UYVY8_2X8:
- vs6624_write(sd, VS6624_IMG_FMT0, 0x0);
- vs6624_write(sd, VS6624_YUV_SETUP, 0x1);
- break;
- case MEDIA_BUS_FMT_YUYV8_2X8:
- vs6624_write(sd, VS6624_IMG_FMT0, 0x0);
- vs6624_write(sd, VS6624_YUV_SETUP, 0x3);
- break;
- case MEDIA_BUS_FMT_RGB565_2X8_LE:
- vs6624_write(sd, VS6624_IMG_FMT0, 0x4);
- vs6624_write(sd, VS6624_RGB_SETUP, 0x0);
- break;
- default:
- return -EINVAL;
- }
-
- /* set image size */
- if ((fmt->width == VGA_WIDTH) && (fmt->height == VGA_HEIGHT))
- vs6624_write(sd, VS6624_IMAGE_SIZE0, 0x2);
- else if ((fmt->width == QVGA_WIDTH) && (fmt->height == QVGA_HEIGHT))
- vs6624_write(sd, VS6624_IMAGE_SIZE0, 0x4);
- else if ((fmt->width == QQVGA_WIDTH) && (fmt->height == QQVGA_HEIGHT))
- vs6624_write(sd, VS6624_IMAGE_SIZE0, 0x6);
- else if ((fmt->width == CIF_WIDTH) && (fmt->height == CIF_HEIGHT))
- vs6624_write(sd, VS6624_IMAGE_SIZE0, 0x3);
- else if ((fmt->width == QCIF_WIDTH) && (fmt->height == QCIF_HEIGHT))
- vs6624_write(sd, VS6624_IMAGE_SIZE0, 0x5);
- else if ((fmt->width == QQCIF_WIDTH) && (fmt->height == QQCIF_HEIGHT))
- vs6624_write(sd, VS6624_IMAGE_SIZE0, 0x7);
- else {
- vs6624_write(sd, VS6624_IMAGE_SIZE0, 0x8);
- vs6624_write(sd, VS6624_MAN_HSIZE0_MSB, fmt->width >> 8);
- vs6624_write(sd, VS6624_MAN_HSIZE0_LSB, fmt->width & 0xFF);
- vs6624_write(sd, VS6624_MAN_VSIZE0_MSB, fmt->height >> 8);
- vs6624_write(sd, VS6624_MAN_VSIZE0_LSB, fmt->height & 0xFF);
- vs6624_write(sd, VS6624_CROP_CTRL0, 0x1);
- }
-
- sensor->fmt = *fmt;
-
- return 0;
-}
-
-static int vs6624_get_fmt(struct v4l2_subdev *sd,
- struct v4l2_subdev_pad_config *cfg,
- struct v4l2_subdev_format *format)
-{
- struct vs6624 *sensor = to_vs6624(sd);
-
- if (format->pad)
- return -EINVAL;
-
- format->format = sensor->fmt;
- return 0;
-}
-
-static int vs6624_g_frame_interval(struct v4l2_subdev *sd,
- struct v4l2_subdev_frame_interval *ival)
-{
- struct vs6624 *sensor = to_vs6624(sd);
-
- ival->interval.numerator = sensor->frame_rate.denominator;
- ival->interval.denominator = sensor->frame_rate.numerator;
- return 0;
-}
-
-static int vs6624_s_frame_interval(struct v4l2_subdev *sd,
- struct v4l2_subdev_frame_interval *ival)
-{
- struct vs6624 *sensor = to_vs6624(sd);
- struct v4l2_fract *tpf = &ival->interval;
-
-
- if (tpf->numerator == 0 || tpf->denominator == 0
- || (tpf->denominator > tpf->numerator * MAX_FRAME_RATE)) {
- /* reset to max frame rate */
- tpf->numerator = 1;
- tpf->denominator = MAX_FRAME_RATE;
- }
- sensor->frame_rate.numerator = tpf->denominator;
- sensor->frame_rate.denominator = tpf->numerator;
- vs6624_write(sd, VS6624_DISABLE_FR_DAMPER, 0x0);
- vs6624_write(sd, VS6624_FR_NUM_MSB,
- sensor->frame_rate.numerator >> 8);
- vs6624_write(sd, VS6624_FR_NUM_LSB,
- sensor->frame_rate.numerator & 0xFF);
- vs6624_write(sd, VS6624_FR_DEN,
- sensor->frame_rate.denominator & 0xFF);
- return 0;
-}
-
-static int vs6624_s_stream(struct v4l2_subdev *sd, int enable)
-{
- if (enable)
- vs6624_write(sd, VS6624_USER_CMD, 0x2);
- else
- vs6624_write(sd, VS6624_USER_CMD, 0x4);
- udelay(100);
- return 0;
-}
-
-#ifdef CONFIG_VIDEO_ADV_DEBUG
-static int vs6624_g_register(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg)
-{
- reg->val = vs6624_read(sd, reg->reg & 0xffff);
- reg->size = 1;
- return 0;
-}
-
-static int vs6624_s_register(struct v4l2_subdev *sd, const struct v4l2_dbg_register *reg)
-{
- vs6624_write(sd, reg->reg & 0xffff, reg->val & 0xff);
- return 0;
-}
-#endif
-
-static const struct v4l2_ctrl_ops vs6624_ctrl_ops = {
- .s_ctrl = vs6624_s_ctrl,
-};
-
-static const struct v4l2_subdev_core_ops vs6624_core_ops = {
-#ifdef CONFIG_VIDEO_ADV_DEBUG
- .g_register = vs6624_g_register,
- .s_register = vs6624_s_register,
-#endif
-};
-
-static const struct v4l2_subdev_video_ops vs6624_video_ops = {
- .s_frame_interval = vs6624_s_frame_interval,
- .g_frame_interval = vs6624_g_frame_interval,
- .s_stream = vs6624_s_stream,
-};
-
-static const struct v4l2_subdev_pad_ops vs6624_pad_ops = {
- .enum_mbus_code = vs6624_enum_mbus_code,
- .get_fmt = vs6624_get_fmt,
- .set_fmt = vs6624_set_fmt,
-};
-
-static const struct v4l2_subdev_ops vs6624_ops = {
- .core = &vs6624_core_ops,
- .video = &vs6624_video_ops,
- .pad = &vs6624_pad_ops,
-};
-
-static int vs6624_probe(struct i2c_client *client,
- const struct i2c_device_id *id)
-{
- struct vs6624 *sensor;
- struct v4l2_subdev *sd;
- struct v4l2_ctrl_handler *hdl;
- const unsigned *ce;
- int ret;
-
- /* Check if the adapter supports the needed features */
- if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C))
- return -EIO;
-
- ce = client->dev.platform_data;
- if (ce == NULL)
- return -EINVAL;
-
- ret = devm_gpio_request_one(&client->dev, *ce, GPIOF_OUT_INIT_HIGH,
- "VS6624 Chip Enable");
- if (ret) {
- v4l_err(client, "failed to request GPIO %d\n", *ce);
- return ret;
- }
- /* wait 100ms before any further i2c writes are performed */
- msleep(100);
-
- sensor = devm_kzalloc(&client->dev, sizeof(*sensor), GFP_KERNEL);
- if (sensor == NULL)
- return -ENOMEM;
-
- sd = &sensor->sd;
- v4l2_i2c_subdev_init(sd, client, &vs6624_ops);
-
- vs6624_writeregs(sd, vs6624_p1);
- vs6624_write(sd, VS6624_MICRO_EN, 0x2);
- vs6624_write(sd, VS6624_DIO_EN, 0x1);
- usleep_range(10000, 11000);
- vs6624_writeregs(sd, vs6624_p2);
-
- vs6624_writeregs(sd, vs6624_default);
- vs6624_write(sd, VS6624_HSYNC_SETUP, 0xF);
- vs6624_writeregs(sd, vs6624_run_setup);
-
- /* set frame rate */
- sensor->frame_rate.numerator = MAX_FRAME_RATE;
- sensor->frame_rate.denominator = 1;
- vs6624_write(sd, VS6624_DISABLE_FR_DAMPER, 0x0);
- vs6624_write(sd, VS6624_FR_NUM_MSB,
- sensor->frame_rate.numerator >> 8);
- vs6624_write(sd, VS6624_FR_NUM_LSB,
- sensor->frame_rate.numerator & 0xFF);
- vs6624_write(sd, VS6624_FR_DEN,
- sensor->frame_rate.denominator & 0xFF);
-
- sensor->fmt = vs6624_default_fmt;
- sensor->ce_pin = *ce;
-
- v4l_info(client, "chip found @ 0x%02x (%s)\n",
- client->addr << 1, client->adapter->name);
-
- hdl = &sensor->hdl;
- v4l2_ctrl_handler_init(hdl, 4);
- v4l2_ctrl_new_std(hdl, &vs6624_ctrl_ops,
- V4L2_CID_CONTRAST, 0, 0xFF, 1, 0x87);
- v4l2_ctrl_new_std(hdl, &vs6624_ctrl_ops,
- V4L2_CID_SATURATION, 0, 0xFF, 1, 0x78);
- v4l2_ctrl_new_std(hdl, &vs6624_ctrl_ops,
- V4L2_CID_HFLIP, 0, 1, 1, 0);
- v4l2_ctrl_new_std(hdl, &vs6624_ctrl_ops,
- V4L2_CID_VFLIP, 0, 1, 1, 0);
- /* hook the control handler into the driver */
- sd->ctrl_handler = hdl;
- if (hdl->error) {
- int err = hdl->error;
-
- v4l2_ctrl_handler_free(hdl);
- return err;
- }
-
- /* initialize the hardware to the default control values */
- ret = v4l2_ctrl_handler_setup(hdl);
- if (ret)
- v4l2_ctrl_handler_free(hdl);
- return ret;
-}
-
-static int vs6624_remove(struct i2c_client *client)
-{
- struct v4l2_subdev *sd = i2c_get_clientdata(client);
-
- v4l2_device_unregister_subdev(sd);
- v4l2_ctrl_handler_free(sd->ctrl_handler);
- return 0;
-}
-
-static const struct i2c_device_id vs6624_id[] = {
- {"vs6624", 0},
- {},
-};
-
-MODULE_DEVICE_TABLE(i2c, vs6624_id);
-
-static struct i2c_driver vs6624_driver = {
- .driver = {
- .name = "vs6624",
- },
- .probe = vs6624_probe,
- .remove = vs6624_remove,
- .id_table = vs6624_id,
-};
-
-module_i2c_driver(vs6624_driver);
-
-MODULE_DESCRIPTION("VS6624 sensor driver");
-MODULE_AUTHOR("Scott Jiang <Scott.Jiang.Linux@gmail.com>");
-MODULE_LICENSE("GPL v2");
diff --git a/drivers/media/usb/dvb-usb/af9005-script.h b/drivers/media/usb/dvb-usb/af9005-script.h
deleted file mode 100644
index 870cb59cd904..000000000000
--- a/drivers/media/usb/dvb-usb/af9005-script.h
+++ /dev/null
@@ -1,204 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/*
-File automatically generated by createinit.py using data
-extracted from AF05BDA.sys (windows driver):
-
-dd if=AF05BDA.sys of=initsequence bs=1 skip=88316 count=1110
-python createinit.py > af9005-script.h
-
-*/
-
-typedef struct {
- u16 reg;
- u8 pos;
- u8 len;
- u8 val;
-} RegDesc;
-
-static RegDesc script[] = {
- {0xa180, 0x0, 0x8, 0xa},
- {0xa181, 0x0, 0x8, 0xd7},
- {0xa182, 0x0, 0x8, 0xa3},
- {0xa0a0, 0x0, 0x8, 0x0},
- {0xa0a1, 0x0, 0x5, 0x0},
- {0xa0a1, 0x5, 0x1, 0x1},
- {0xa0c0, 0x0, 0x4, 0x1},
- {0xa20e, 0x4, 0x4, 0xa},
- {0xa20f, 0x0, 0x8, 0x40},
- {0xa210, 0x0, 0x8, 0x8},
- {0xa32a, 0x0, 0x4, 0xa},
- {0xa32c, 0x0, 0x8, 0x20},
- {0xa32b, 0x0, 0x8, 0x15},
- {0xa1a0, 0x1, 0x1, 0x1},
- {0xa000, 0x0, 0x1, 0x1},
- {0xa000, 0x1, 0x1, 0x0},
- {0xa001, 0x1, 0x1, 0x1},
- {0xa001, 0x0, 0x1, 0x0},
- {0xa001, 0x5, 0x1, 0x0},
- {0xa00e, 0x0, 0x5, 0x10},
- {0xa00f, 0x0, 0x3, 0x4},
- {0xa00f, 0x3, 0x3, 0x5},
- {0xa010, 0x0, 0x3, 0x4},
- {0xa010, 0x3, 0x3, 0x5},
- {0xa016, 0x4, 0x4, 0x3},
- {0xa01f, 0x0, 0x6, 0xa},
- {0xa020, 0x0, 0x6, 0xa},
- {0xa2bc, 0x0, 0x1, 0x1},
- {0xa2bc, 0x5, 0x1, 0x1},
- {0xa015, 0x0, 0x8, 0x50},
- {0xa016, 0x0, 0x1, 0x0},
- {0xa02a, 0x0, 0x8, 0x50},
- {0xa029, 0x0, 0x8, 0x4b},
- {0xa614, 0x0, 0x8, 0x46},
- {0xa002, 0x0, 0x5, 0x19},
- {0xa003, 0x0, 0x5, 0x1a},
- {0xa004, 0x0, 0x5, 0x19},
- {0xa005, 0x0, 0x5, 0x1a},
- {0xa008, 0x0, 0x8, 0x69},
- {0xa009, 0x0, 0x2, 0x2},
- {0xae1b, 0x0, 0x8, 0x69},
- {0xae1c, 0x0, 0x8, 0x2},
- {0xae1d, 0x0, 0x8, 0x2a},
- {0xa022, 0x0, 0x8, 0xaa},
- {0xa006, 0x0, 0x8, 0xc8},
- {0xa007, 0x0, 0x2, 0x0},
- {0xa00c, 0x0, 0x8, 0xba},
- {0xa00d, 0x0, 0x2, 0x2},
- {0xa608, 0x0, 0x8, 0xba},
- {0xa60e, 0x0, 0x2, 0x2},
- {0xa609, 0x0, 0x8, 0x80},
- {0xa60e, 0x2, 0x2, 0x3},
- {0xa00a, 0x0, 0x8, 0xb6},
- {0xa00b, 0x0, 0x2, 0x0},
- {0xa011, 0x0, 0x8, 0xb9},
- {0xa012, 0x0, 0x2, 0x0},
- {0xa013, 0x0, 0x8, 0xbd},
- {0xa014, 0x0, 0x2, 0x2},
- {0xa366, 0x0, 0x1, 0x1},
- {0xa2bc, 0x3, 0x1, 0x0},
- {0xa2bd, 0x0, 0x8, 0xa},
- {0xa2be, 0x0, 0x8, 0x14},
- {0xa2bf, 0x0, 0x8, 0x8},
- {0xa60a, 0x0, 0x8, 0xbd},
- {0xa60e, 0x4, 0x2, 0x2},
- {0xa60b, 0x0, 0x8, 0x86},
- {0xa60e, 0x6, 0x2, 0x3},
- {0xa001, 0x2, 0x2, 0x1},
- {0xa1c7, 0x0, 0x8, 0xf5},
- {0xa03d, 0x0, 0x8, 0xb1},
- {0xa616, 0x0, 0x8, 0xff},
- {0xa617, 0x0, 0x8, 0xad},
- {0xa618, 0x0, 0x8, 0xad},
- {0xa61e, 0x3, 0x1, 0x1},
- {0xae1a, 0x0, 0x8, 0x0},
- {0xae19, 0x0, 0x8, 0xc8},
- {0xae18, 0x0, 0x8, 0x61},
- {0xa140, 0x0, 0x8, 0x0},
- {0xa141, 0x0, 0x8, 0xc8},
- {0xa142, 0x0, 0x7, 0x61},
- {0xa023, 0x0, 0x8, 0xff},
- {0xa021, 0x0, 0x8, 0xad},
- {0xa026, 0x0, 0x1, 0x0},
- {0xa024, 0x0, 0x8, 0xff},
- {0xa025, 0x0, 0x8, 0xff},
- {0xa1c8, 0x0, 0x8, 0xf},
- {0xa2bc, 0x1, 0x1, 0x0},
- {0xa60c, 0x0, 0x4, 0x5},
- {0xa60c, 0x4, 0x4, 0x6},
- {0xa60d, 0x0, 0x8, 0xa},
- {0xa371, 0x0, 0x1, 0x1},
- {0xa366, 0x1, 0x3, 0x7},
- {0xa338, 0x0, 0x8, 0x10},
- {0xa339, 0x0, 0x6, 0x7},
- {0xa33a, 0x0, 0x6, 0x1f},
- {0xa33b, 0x0, 0x8, 0xf6},
- {0xa33c, 0x3, 0x5, 0x4},
- {0xa33d, 0x4, 0x4, 0x0},
- {0xa33d, 0x1, 0x1, 0x1},
- {0xa33d, 0x2, 0x1, 0x1},
- {0xa33d, 0x3, 0x1, 0x1},
- {0xa16d, 0x0, 0x4, 0xf},
- {0xa161, 0x0, 0x5, 0x5},
- {0xa162, 0x0, 0x4, 0x5},
- {0xa165, 0x0, 0x8, 0xff},
- {0xa166, 0x0, 0x8, 0x9c},
- {0xa2c3, 0x0, 0x4, 0x5},
- {0xa61a, 0x0, 0x6, 0xf},
- {0xb200, 0x0, 0x8, 0xa1},
- {0xb201, 0x0, 0x8, 0x7},
- {0xa093, 0x0, 0x1, 0x0},
- {0xa093, 0x1, 0x5, 0xf},
- {0xa094, 0x0, 0x8, 0xff},
- {0xa095, 0x0, 0x8, 0xf},
- {0xa080, 0x2, 0x5, 0x3},
- {0xa081, 0x0, 0x4, 0x0},
- {0xa081, 0x4, 0x4, 0x9},
- {0xa082, 0x0, 0x5, 0x1f},
- {0xa08d, 0x0, 0x8, 0x1},
- {0xa083, 0x0, 0x8, 0x32},
- {0xa084, 0x0, 0x1, 0x0},
- {0xa08e, 0x0, 0x8, 0x3},
- {0xa085, 0x0, 0x8, 0x32},
- {0xa086, 0x0, 0x3, 0x0},
- {0xa087, 0x0, 0x8, 0x6e},
- {0xa088, 0x0, 0x5, 0x15},
- {0xa089, 0x0, 0x8, 0x0},
- {0xa08a, 0x0, 0x5, 0x19},
- {0xa08b, 0x0, 0x8, 0x92},
- {0xa08c, 0x0, 0x5, 0x1c},
- {0xa120, 0x0, 0x8, 0x0},
- {0xa121, 0x0, 0x5, 0x10},
- {0xa122, 0x0, 0x8, 0x0},
- {0xa123, 0x0, 0x7, 0x40},
- {0xa123, 0x7, 0x1, 0x0},
- {0xa124, 0x0, 0x8, 0x13},
- {0xa125, 0x0, 0x7, 0x10},
- {0xa1c0, 0x0, 0x8, 0x0},
- {0xa1c1, 0x0, 0x5, 0x4},
- {0xa1c2, 0x0, 0x8, 0x0},
- {0xa1c3, 0x0, 0x5, 0x10},
- {0xa1c3, 0x5, 0x3, 0x0},
- {0xa1c4, 0x0, 0x6, 0x0},
- {0xa1c5, 0x0, 0x7, 0x10},
- {0xa100, 0x0, 0x8, 0x0},
- {0xa101, 0x0, 0x5, 0x10},
- {0xa102, 0x0, 0x8, 0x0},
- {0xa103, 0x0, 0x7, 0x40},
- {0xa103, 0x7, 0x1, 0x0},
- {0xa104, 0x0, 0x8, 0x18},
- {0xa105, 0x0, 0x7, 0xa},
- {0xa106, 0x0, 0x8, 0x20},
- {0xa107, 0x0, 0x8, 0x40},
- {0xa108, 0x0, 0x4, 0x0},
- {0xa38c, 0x0, 0x8, 0xfc},
- {0xa38d, 0x0, 0x8, 0x0},
- {0xa38e, 0x0, 0x8, 0x7e},
- {0xa38f, 0x0, 0x8, 0x0},
- {0xa390, 0x0, 0x8, 0x2f},
- {0xa60f, 0x5, 0x1, 0x1},
- {0xa170, 0x0, 0x8, 0xdc},
- {0xa171, 0x0, 0x2, 0x0},
- {0xa2ae, 0x0, 0x1, 0x1},
- {0xa2ae, 0x1, 0x1, 0x1},
- {0xa392, 0x0, 0x1, 0x1},
- {0xa391, 0x2, 0x1, 0x0},
- {0xabc1, 0x0, 0x8, 0xff},
- {0xabc2, 0x0, 0x8, 0x0},
- {0xabc8, 0x0, 0x8, 0x8},
- {0xabca, 0x0, 0x8, 0x10},
- {0xabcb, 0x0, 0x1, 0x0},
- {0xabc3, 0x5, 0x3, 0x7},
- {0xabc0, 0x6, 0x1, 0x0},
- {0xabc0, 0x4, 0x2, 0x0},
- {0xa344, 0x4, 0x4, 0x1},
- {0xabc0, 0x7, 0x1, 0x1},
- {0xabc0, 0x2, 0x1, 0x1},
- {0xa345, 0x0, 0x8, 0x66},
- {0xa346, 0x0, 0x8, 0x66},
- {0xa347, 0x0, 0x4, 0x0},
- {0xa343, 0x0, 0x4, 0xa},
- {0xa347, 0x4, 0x4, 0x2},
- {0xa348, 0x0, 0x4, 0xc},
- {0xa348, 0x4, 0x4, 0x7},
- {0xa349, 0x0, 0x6, 0x2},
-};
diff --git a/drivers/net/appletalk/cops.c b/drivers/net/appletalk/cops.c
deleted file mode 100644
index 6b12ce822e51..000000000000
--- a/drivers/net/appletalk/cops.c
+++ /dev/null
@@ -1,1005 +0,0 @@
-/* cops.c: LocalTalk driver for Linux.
- *
- * Authors:
- * - Jay Schulist <jschlst@samba.org>
- *
- * With more than a little help from;
- * - Alan Cox <alan@lxorguk.ukuu.org.uk>
- *
- * Derived from:
- * - skeleton.c: A network driver outline for linux.
- * Written 1993-94 by Donald Becker.
- * - ltpc.c: A driver for the LocalTalk PC card.
- * Written by Bradford W. Johnson.
- *
- * Copyright 1993 United States Government as represented by the
- * Director, National Security Agency.
- *
- * This software may be used and distributed according to the terms
- * of the GNU General Public License, incorporated herein by reference.
- *
- * Changes:
- * 19970608 Alan Cox Allowed dual card type support
- * Can set board type in insmod
- * Hooks for cops_setup routine
- * (not yet implemented).
- * 19971101 Jay Schulist Fixes for multiple lt* devices.
- * 19980607 Steven Hirsch Fixed the badly broken support
- * for Tangent type cards. Only
- * tested on Daystar LT200. Some
- * cleanup of formatting and program
- * logic. Added emacs 'local-vars'
- * setup for Jay's brace style.
- * 20000211 Alan Cox Cleaned up for softnet
- */
-
-static const char *version =
-"cops.c:v0.04 6/7/98 Jay Schulist <jschlst@samba.org>\n";
-/*
- * Sources:
- * COPS Localtalk SDK. This provides almost all of the information
- * needed.
- */
-
-/*
- * insmod/modprobe configurable stuff.
- * - IO Port, choose one your card supports or 0 if you dare.
- * - IRQ, also choose one your card supports or nothing and let
- * the driver figure it out.
- */
-
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/types.h>
-#include <linux/fcntl.h>
-#include <linux/interrupt.h>
-#include <linux/ptrace.h>
-#include <linux/ioport.h>
-#include <linux/in.h>
-#include <linux/string.h>
-#include <linux/errno.h>
-#include <linux/init.h>
-#include <linux/netdevice.h>
-#include <linux/etherdevice.h>
-#include <linux/skbuff.h>
-#include <linux/if_arp.h>
-#include <linux/if_ltalk.h>
-#include <linux/delay.h> /* For udelay() */
-#include <linux/atalk.h>
-#include <linux/spinlock.h>
-#include <linux/bitops.h>
-#include <linux/jiffies.h>
-
-#include <net/Space.h>
-
-#include <asm/io.h>
-#include <asm/dma.h>
-
-#include "cops.h" /* Our Stuff */
-#include "cops_ltdrv.h" /* Firmware code for Tangent type cards. */
-#include "cops_ffdrv.h" /* Firmware code for Dayna type cards. */
-
-/*
- * The name of the card. Is used for messages and in the requests for
- * io regions, irqs and dma channels
- */
-
-static const char *cardname = "cops";
-
-#ifdef CONFIG_COPS_DAYNA
-static int board_type = DAYNA; /* Module exported */
-#else
-static int board_type = TANGENT;
-#endif
-
-static int io = 0x240; /* Default IO for Dayna */
-static int irq = 5; /* Default IRQ */
-
-/*
- * COPS Autoprobe information.
- * Right now if port address is right but IRQ is not 5 this will
- * return a 5 no matter what since we will still get a status response.
- * Need one more additional check to narrow down after we have gotten
- * the ioaddr. But since only other possible IRQs is 3 and 4 so no real
- * hurry on this. I *STRONGLY* recommend using IRQ 5 for your card with
- * this driver.
- *
- * This driver has 2 modes and they are: Dayna mode and Tangent mode.
- * Each mode corresponds with the type of card. It has been found
- * that there are 2 main types of cards and all other cards are
- * the same and just have different names or only have minor differences
- * such as more IO ports. As this driver is tested it will
- * become more clear on exactly what cards are supported. The driver
- * defaults to using Dayna mode. To change the drivers mode, simply
- * select Dayna or Tangent mode when configuring the kernel.
- *
- * This driver should support:
- * TANGENT driver mode:
- * Tangent ATB-II, Novell NL-1000, Daystar Digital LT-200,
- * COPS LT-1
- * DAYNA driver mode:
- * Dayna DL2000/DaynaTalk PC (Half Length), COPS LT-95,
- * Farallon PhoneNET PC III, Farallon PhoneNET PC II
- * Other cards possibly supported mode unknown though:
- * Dayna DL2000 (Full length), COPS LT/M (Micro-Channel)
- *
- * Cards NOT supported by this driver but supported by the ltpc.c
- * driver written by Bradford W. Johnson <johns393@maroon.tc.umn.edu>
- * Farallon PhoneNET PC
- * Original Apple LocalTalk PC card
- *
- * N.B.
- *
- * The Daystar Digital LT200 boards do not support interrupt-driven
- * IO. You must specify 'irq=0xff' as a module parameter to invoke
- * polled mode. I also believe that the port probing logic is quite
- * dangerous at best and certainly hopeless for a polled card. Best to
- * specify both. - Steve H.
- *
- */
-
-/*
- * Zero terminated list of IO ports to probe.
- */
-
-static unsigned int ports[] = {
- 0x240, 0x340, 0x200, 0x210, 0x220, 0x230, 0x260,
- 0x2A0, 0x300, 0x310, 0x320, 0x330, 0x350, 0x360,
- 0
-};
-
-/*
- * Zero terminated list of IRQ ports to probe.
- */
-
-static int cops_irqlist[] = {
- 5, 4, 3, 0
-};
-
-static struct timer_list cops_timer;
-static struct net_device *cops_timer_dev;
-
-/* use 0 for production, 1 for verification, 2 for debug, 3 for verbose debug */
-#ifndef COPS_DEBUG
-#define COPS_DEBUG 1
-#endif
-static unsigned int cops_debug = COPS_DEBUG;
-
-/* The number of low I/O ports used by the card. */
-#define COPS_IO_EXTENT 8
-
-/* Information that needs to be kept for each board. */
-
-struct cops_local
-{
- int board; /* Holds what board type is. */
- int nodeid; /* Set to 1 once have nodeid. */
- unsigned char node_acquire; /* Node ID when acquired. */
- struct atalk_addr node_addr; /* Full node address */
- spinlock_t lock; /* RX/TX lock */
-};
-
-/* Index to functions, as function prototypes. */
-static int cops_probe1 (struct net_device *dev, int ioaddr);
-static int cops_irq (int ioaddr, int board);
-
-static int cops_open (struct net_device *dev);
-static int cops_jumpstart (struct net_device *dev);
-static void cops_reset (struct net_device *dev, int sleep);
-static void cops_load (struct net_device *dev);
-static int cops_nodeid (struct net_device *dev, int nodeid);
-
-static irqreturn_t cops_interrupt (int irq, void *dev_id);
-static void cops_poll(struct timer_list *t);
-static void cops_timeout(struct net_device *dev, unsigned int txqueue);
-static void cops_rx (struct net_device *dev);
-static netdev_tx_t cops_send_packet (struct sk_buff *skb,
- struct net_device *dev);
-static void set_multicast_list (struct net_device *dev);
-static int cops_ioctl (struct net_device *dev, struct ifreq *rq, int cmd);
-static int cops_close (struct net_device *dev);
-
-static void cleanup_card(struct net_device *dev)
-{
- if (dev->irq)
- free_irq(dev->irq, dev);
- release_region(dev->base_addr, COPS_IO_EXTENT);
-}
-
-/*
- * Check for a network adaptor of this type, and return '0' iff one exists.
- * If dev->base_addr == 0, probe all likely locations.
- * If dev->base_addr in [1..0x1ff], always return failure.
- * otherwise go with what we pass in.
- */
-struct net_device * __init cops_probe(int unit)
-{
- struct net_device *dev;
- unsigned *port;
- int base_addr;
- int err = 0;
-
- dev = alloc_ltalkdev(sizeof(struct cops_local));
- if (!dev)
- return ERR_PTR(-ENOMEM);
-
- if (unit >= 0) {
- sprintf(dev->name, "lt%d", unit);
- netdev_boot_setup_check(dev);
- irq = dev->irq;
- base_addr = dev->base_addr;
- } else {
- base_addr = dev->base_addr = io;
- }
-
- if (base_addr > 0x1ff) { /* Check a single specified location. */
- err = cops_probe1(dev, base_addr);
- } else if (base_addr != 0) { /* Don't probe at all. */
- err = -ENXIO;
- } else {
- /* FIXME Does this really work for cards which generate irq?
- * It's definitely N.G. for polled Tangent. sh
- * Dayna cards don't autoprobe well at all, but if your card is
- * at IRQ 5 & IO 0x240 we find it every time. ;) JS
- */
- for (port = ports; *port && cops_probe1(dev, *port) < 0; port++)
- ;
- if (!*port)
- err = -ENODEV;
- }
- if (err)
- goto out;
- err = register_netdev(dev);
- if (err)
- goto out1;
- return dev;
-out1:
- cleanup_card(dev);
-out:
- free_netdev(dev);
- return ERR_PTR(err);
-}
-
-static const struct net_device_ops cops_netdev_ops = {
- .ndo_open = cops_open,
- .ndo_stop = cops_close,
- .ndo_start_xmit = cops_send_packet,
- .ndo_tx_timeout = cops_timeout,
- .ndo_do_ioctl = cops_ioctl,
- .ndo_set_rx_mode = set_multicast_list,
-};
-
-/*
- * This is the real probe routine. Linux has a history of friendly device
- * probes on the ISA bus. A good device probes avoids doing writes, and
- * verifies that the correct device exists and functions.
- */
-static int __init cops_probe1(struct net_device *dev, int ioaddr)
-{
- struct cops_local *lp;
- static unsigned version_printed;
- int board = board_type;
- int retval;
-
- if(cops_debug && version_printed++ == 0)
- printk("%s", version);
-
- /* Grab the region so no one else tries to probe our ioports. */
- if (!request_region(ioaddr, COPS_IO_EXTENT, dev->name))
- return -EBUSY;
-
- /*
- * Since this board has jumpered interrupts, allocate the interrupt
- * vector now. There is no point in waiting since no other device
- * can use the interrupt, and this marks the irq as busy. Jumpered
- * interrupts are typically not reported by the boards, and we must
- * used AutoIRQ to find them.
- */
- dev->irq = irq;
- switch (dev->irq)
- {
- case 0:
- /* COPS AutoIRQ routine */
- dev->irq = cops_irq(ioaddr, board);
- if (dev->irq)
- break;
- fallthrough; /* Once no IRQ found on this port */
- case 1:
- retval = -EINVAL;
- goto err_out;
-
- /* Fixup for users that don't know that IRQ 2 is really
- * IRQ 9, or don't know which one to set.
- */
- case 2:
- dev->irq = 9;
- break;
-
- /* Polled operation requested. Although irq of zero passed as
- * a parameter tells the init routines to probe, we'll
- * overload it to denote polled operation at runtime.
- */
- case 0xff:
- dev->irq = 0;
- break;
-
- default:
- break;
- }
-
- dev->base_addr = ioaddr;
-
- /* Reserve any actual interrupt. */
- if (dev->irq) {
- retval = request_irq(dev->irq, cops_interrupt, 0, dev->name, dev);
- if (retval)
- goto err_out;
- }
-
- lp = netdev_priv(dev);
- spin_lock_init(&lp->lock);
-
- /* Copy local board variable to lp struct. */
- lp->board = board;
-
- dev->netdev_ops = &cops_netdev_ops;
- dev->watchdog_timeo = HZ * 2;
-
-
- /* Tell the user where the card is and what mode we're in. */
- if(board==DAYNA)
- printk("%s: %s at %#3x, using IRQ %d, in Dayna mode.\n",
- dev->name, cardname, ioaddr, dev->irq);
- if(board==TANGENT) {
- if(dev->irq)
- printk("%s: %s at %#3x, IRQ %d, in Tangent mode\n",
- dev->name, cardname, ioaddr, dev->irq);
- else
- printk("%s: %s at %#3x, using polled IO, in Tangent mode.\n",
- dev->name, cardname, ioaddr);
-
- }
- return 0;
-
-err_out:
- release_region(ioaddr, COPS_IO_EXTENT);
- return retval;
-}
-
-static int __init cops_irq (int ioaddr, int board)
-{ /*
- * This does not use the IRQ to determine where the IRQ is. We just
- * assume that when we get a correct status response that it's the IRQ.
- * This really just verifies the IO port but since we only have access
- * to such a small number of IRQs (5, 4, 3) this is not bad.
- * This will probably not work for more than one card.
- */
- int irqaddr=0;
- int i, x, status;
-
- if(board==DAYNA)
- {
- outb(0, ioaddr+DAYNA_RESET);
- inb(ioaddr+DAYNA_RESET);
- mdelay(333);
- }
- if(board==TANGENT)
- {
- inb(ioaddr);
- outb(0, ioaddr);
- outb(0, ioaddr+TANG_RESET);
- }
-
- for(i=0; cops_irqlist[i] !=0; i++)
- {
- irqaddr = cops_irqlist[i];
- for(x = 0xFFFF; x>0; x --) /* wait for response */
- {
- if(board==DAYNA)
- {
- status = (inb(ioaddr+DAYNA_CARD_STATUS)&3);
- if(status == 1)
- return irqaddr;
- }
- if(board==TANGENT)
- {
- if((inb(ioaddr+TANG_CARD_STATUS)& TANG_TX_READY) !=0)
- return irqaddr;
- }
- }
- }
- return 0; /* no IRQ found */
-}
-
-/*
- * Open/initialize the board. This is called (in the current kernel)
- * sometime after booting when the 'ifconfig' program is run.
- */
-static int cops_open(struct net_device *dev)
-{
- struct cops_local *lp = netdev_priv(dev);
-
- if(dev->irq==0)
- {
- /*
- * I don't know if the Dayna-style boards support polled
- * operation. For now, only allow it for Tangent.
- */
- if(lp->board==TANGENT) /* Poll 20 times per second */
- {
- cops_timer_dev = dev;
- timer_setup(&cops_timer, cops_poll, 0);
- cops_timer.expires = jiffies + HZ/20;
- add_timer(&cops_timer);
- }
- else
- {
- printk(KERN_WARNING "%s: No irq line set\n", dev->name);
- return -EAGAIN;
- }
- }
-
- cops_jumpstart(dev); /* Start the card up. */
-
- netif_start_queue(dev);
- return 0;
-}
-
-/*
- * This allows for a dynamic start/restart of the entire card.
- */
-static int cops_jumpstart(struct net_device *dev)
-{
- struct cops_local *lp = netdev_priv(dev);
-
- /*
- * Once the card has the firmware loaded and has acquired
- * the nodeid, if it is reset it will lose it all.
- */
- cops_reset(dev,1); /* Need to reset card before load firmware. */
- cops_load(dev); /* Load the firmware. */
-
- /*
- * If atalkd already gave us a nodeid we will use that
- * one again, else we wait for atalkd to give us a nodeid
- * in cops_ioctl. This may cause a problem if someone steals
- * our nodeid while we are resetting.
- */
- if(lp->nodeid == 1)
- cops_nodeid(dev,lp->node_acquire);
-
- return 0;
-}
-
-static void tangent_wait_reset(int ioaddr)
-{
- int timeout=0;
-
- while(timeout++ < 5 && (inb(ioaddr+TANG_CARD_STATUS)&TANG_TX_READY)==0)
- mdelay(1); /* Wait 1 second */
-}
-
-/*
- * Reset the LocalTalk board.
- */
-static void cops_reset(struct net_device *dev, int sleep)
-{
- struct cops_local *lp = netdev_priv(dev);
- int ioaddr=dev->base_addr;
-
- if(lp->board==TANGENT)
- {
- inb(ioaddr); /* Clear request latch. */
- outb(0,ioaddr); /* Clear the TANG_TX_READY flop. */
- outb(0, ioaddr+TANG_RESET); /* Reset the adapter. */
-
- tangent_wait_reset(ioaddr);
- outb(0, ioaddr+TANG_CLEAR_INT);
- }
- if(lp->board==DAYNA)
- {
- outb(0, ioaddr+DAYNA_RESET); /* Assert the reset port */
- inb(ioaddr+DAYNA_RESET); /* Clear the reset */
- if (sleep)
- msleep(333);
- else
- mdelay(333);
- }
-
- netif_wake_queue(dev);
-}
-
-static void cops_load (struct net_device *dev)
-{
- struct ifreq ifr;
- struct ltfirmware *ltf= (struct ltfirmware *)&ifr.ifr_ifru;
- struct cops_local *lp = netdev_priv(dev);
- int ioaddr=dev->base_addr;
- int length, i = 0;
-
- strcpy(ifr.ifr_name,"lt0");
-
- /* Get card's firmware code and do some checks on it. */
-#ifdef CONFIG_COPS_DAYNA
- if(lp->board==DAYNA)
- {
- ltf->length=sizeof(ffdrv_code);
- ltf->data=ffdrv_code;
- }
- else
-#endif
-#ifdef CONFIG_COPS_TANGENT
- if(lp->board==TANGENT)
- {
- ltf->length=sizeof(ltdrv_code);
- ltf->data=ltdrv_code;
- }
- else
-#endif
- {
- printk(KERN_INFO "%s; unsupported board type.\n", dev->name);
- return;
- }
-
- /* Check to make sure firmware is correct length. */
- if(lp->board==DAYNA && ltf->length!=5983)
- {
- printk(KERN_WARNING "%s: Firmware is not length of FFDRV.BIN.\n", dev->name);
- return;
- }
- if(lp->board==TANGENT && ltf->length!=2501)
- {
- printk(KERN_WARNING "%s: Firmware is not length of DRVCODE.BIN.\n", dev->name);
- return;
- }
-
- if(lp->board==DAYNA)
- {
- /*
- * We must wait for a status response
- * with the DAYNA board.
- */
- while(++i<65536)
- {
- if((inb(ioaddr+DAYNA_CARD_STATUS)&3)==1)
- break;
- }
-
- if(i==65536)
- return;
- }
-
- /*
- * Upload the firmware and kick. Byte-by-byte works nicely here.
- */
- i=0;
- length = ltf->length;
- while(length--)
- {
- outb(ltf->data[i], ioaddr);
- i++;
- }
-
- if(cops_debug > 1)
- printk("%s: Uploaded firmware - %d bytes of %d bytes.\n",
- dev->name, i, ltf->length);
-
- if(lp->board==DAYNA) /* Tell Dayna to run the firmware code. */
- outb(1, ioaddr+DAYNA_INT_CARD);
- else /* Tell Tang to run the firmware code. */
- inb(ioaddr);
-
- if(lp->board==TANGENT)
- {
- tangent_wait_reset(ioaddr);
- inb(ioaddr); /* Clear initial ready signal. */
- }
-}
-
-/*
- * Get the LocalTalk Nodeid from the card. We can suggest
- * any nodeid 1-254. The card will try and get that exact
- * address else we can specify 0 as the nodeid and the card
- * will autoprobe for a nodeid.
- */
-static int cops_nodeid (struct net_device *dev, int nodeid)
-{
- struct cops_local *lp = netdev_priv(dev);
- int ioaddr = dev->base_addr;
-
- if(lp->board == DAYNA)
- {
- /* Empty any pending adapter responses. */
- while((inb(ioaddr+DAYNA_CARD_STATUS)&DAYNA_TX_READY)==0)
- {
- outb(0, ioaddr+COPS_CLEAR_INT); /* Clear interrupts. */
- if((inb(ioaddr+DAYNA_CARD_STATUS)&0x03)==DAYNA_RX_REQUEST)
- cops_rx(dev); /* Kick any packets waiting. */
- schedule();
- }
-
- outb(2, ioaddr); /* Output command packet length as 2. */
- outb(0, ioaddr);
- outb(LAP_INIT, ioaddr); /* Send LAP_INIT command byte. */
- outb(nodeid, ioaddr); /* Suggest node address. */
- }
-
- if(lp->board == TANGENT)
- {
- /* Empty any pending adapter responses. */
- while(inb(ioaddr+TANG_CARD_STATUS)&TANG_RX_READY)
- {
- outb(0, ioaddr+COPS_CLEAR_INT); /* Clear interrupt. */
- cops_rx(dev); /* Kick out packets waiting. */
- schedule();
- }
-
- /* Not sure what Tangent does if nodeid picked is used. */
- if(nodeid == 0) /* Seed. */
- nodeid = jiffies&0xFF; /* Get a random try */
- outb(2, ioaddr); /* Command length LSB */
- outb(0, ioaddr); /* Command length MSB */
- outb(LAP_INIT, ioaddr); /* Send LAP_INIT byte */
- outb(nodeid, ioaddr); /* LAP address hint. */
- outb(0xFF, ioaddr); /* Int. level to use */
- }
-
- lp->node_acquire=0; /* Set nodeid holder to 0. */
- while(lp->node_acquire==0) /* Get *True* nodeid finally. */
- {
- outb(0, ioaddr+COPS_CLEAR_INT); /* Clear any interrupt. */
-
- if(lp->board == DAYNA)
- {
- if((inb(ioaddr+DAYNA_CARD_STATUS)&0x03)==DAYNA_RX_REQUEST)
- cops_rx(dev); /* Grab the nodeid put in lp->node_acquire. */
- }
- if(lp->board == TANGENT)
- {
- if(inb(ioaddr+TANG_CARD_STATUS)&TANG_RX_READY)
- cops_rx(dev); /* Grab the nodeid put in lp->node_acquire. */
- }
- schedule();
- }
-
- if(cops_debug > 1)
- printk(KERN_DEBUG "%s: Node ID %d has been acquired.\n",
- dev->name, lp->node_acquire);
-
- lp->nodeid=1; /* Set got nodeid to 1. */
-
- return 0;
-}
-
-/*
- * Poll the Tangent type cards to see if we have work.
- */
-
-static void cops_poll(struct timer_list *unused)
-{
- int ioaddr, status;
- int boguscount = 0;
- struct net_device *dev = cops_timer_dev;
-
- del_timer(&cops_timer);
-
- if(dev == NULL)
- return; /* We've been downed */
-
- ioaddr = dev->base_addr;
- do {
- status=inb(ioaddr+TANG_CARD_STATUS);
- if(status & TANG_RX_READY)
- cops_rx(dev);
- if(status & TANG_TX_READY)
- netif_wake_queue(dev);
- status = inb(ioaddr+TANG_CARD_STATUS);
- } while((++boguscount < 20) && (status&(TANG_RX_READY|TANG_TX_READY)));
-
- /* poll 20 times per second */
- cops_timer.expires = jiffies + HZ/20;
- add_timer(&cops_timer);
-}
-
-/*
- * The typical workload of the driver:
- * Handle the network interface interrupts.
- */
-static irqreturn_t cops_interrupt(int irq, void *dev_id)
-{
- struct net_device *dev = dev_id;
- struct cops_local *lp;
- int ioaddr, status;
- int boguscount = 0;
-
- ioaddr = dev->base_addr;
- lp = netdev_priv(dev);
-
- if(lp->board==DAYNA)
- {
- do {
- outb(0, ioaddr + COPS_CLEAR_INT);
- status=inb(ioaddr+DAYNA_CARD_STATUS);
- if((status&0x03)==DAYNA_RX_REQUEST)
- cops_rx(dev);
- netif_wake_queue(dev);
- } while(++boguscount < 20);
- }
- else
- {
- do {
- status=inb(ioaddr+TANG_CARD_STATUS);
- if(status & TANG_RX_READY)
- cops_rx(dev);
- if(status & TANG_TX_READY)
- netif_wake_queue(dev);
- status=inb(ioaddr+TANG_CARD_STATUS);
- } while((++boguscount < 20) && (status&(TANG_RX_READY|TANG_TX_READY)));
- }
-
- return IRQ_HANDLED;
-}
-
-/*
- * We have a good packet(s), get it/them out of the buffers.
- */
-static void cops_rx(struct net_device *dev)
-{
- int pkt_len = 0;
- int rsp_type = 0;
- struct sk_buff *skb = NULL;
- struct cops_local *lp = netdev_priv(dev);
- int ioaddr = dev->base_addr;
- int boguscount = 0;
- unsigned long flags;
-
-
- spin_lock_irqsave(&lp->lock, flags);
-
- if(lp->board==DAYNA)
- {
- outb(0, ioaddr); /* Send out Zero length. */
- outb(0, ioaddr);
- outb(DATA_READ, ioaddr); /* Send read command out. */
-
- /* Wait for DMA to turn around. */
- while(++boguscount<1000000)
- {
- barrier();
- if((inb(ioaddr+DAYNA_CARD_STATUS)&0x03)==DAYNA_RX_READY)
- break;
- }
-
- if(boguscount==1000000)
- {
- printk(KERN_WARNING "%s: DMA timed out.\n",dev->name);
- spin_unlock_irqrestore(&lp->lock, flags);
- return;
- }
- }
-
- /* Get response length. */
- pkt_len = inb(ioaddr);
- pkt_len |= (inb(ioaddr) << 8);
- /* Input IO code. */
- rsp_type=inb(ioaddr);
-
- /* Malloc up new buffer. */
- skb = dev_alloc_skb(pkt_len);
- if(skb == NULL)
- {
- printk(KERN_WARNING "%s: Memory squeeze, dropping packet.\n",
- dev->name);
- dev->stats.rx_dropped++;
- while(pkt_len--) /* Discard packet */
- inb(ioaddr);
- spin_unlock_irqrestore(&lp->lock, flags);
- return;
- }
- skb->dev = dev;
- skb_put(skb, pkt_len);
- skb->protocol = htons(ETH_P_LOCALTALK);
-
- insb(ioaddr, skb->data, pkt_len); /* Eat the Data */
-
- if(lp->board==DAYNA)
- outb(1, ioaddr+DAYNA_INT_CARD); /* Interrupt the card */
-
- spin_unlock_irqrestore(&lp->lock, flags); /* Restore interrupts. */
-
- /* Check for bad response length */
- if(pkt_len < 0 || pkt_len > MAX_LLAP_SIZE)
- {
- printk(KERN_WARNING "%s: Bad packet length of %d bytes.\n",
- dev->name, pkt_len);
- dev->stats.tx_errors++;
- dev_kfree_skb_any(skb);
- return;
- }
-
- /* Set nodeid and then get out. */
- if(rsp_type == LAP_INIT_RSP)
- { /* Nodeid taken from received packet. */
- lp->node_acquire = skb->data[0];
- dev_kfree_skb_any(skb);
- return;
- }
-
- /* One last check to make sure we have a good packet. */
- if(rsp_type != LAP_RESPONSE)
- {
- printk(KERN_WARNING "%s: Bad packet type %d.\n", dev->name, rsp_type);
- dev->stats.tx_errors++;
- dev_kfree_skb_any(skb);
- return;
- }
-
- skb_reset_mac_header(skb); /* Point to entire packet. */
- skb_pull(skb,3);
- skb_reset_transport_header(skb); /* Point to data (Skip header). */
-
- /* Update the counters. */
- dev->stats.rx_packets++;
- dev->stats.rx_bytes += skb->len;
-
- /* Send packet to a higher place. */
- netif_rx(skb);
-}
-
-static void cops_timeout(struct net_device *dev, unsigned int txqueue)
-{
- struct cops_local *lp = netdev_priv(dev);
- int ioaddr = dev->base_addr;
-
- dev->stats.tx_errors++;
- if(lp->board==TANGENT)
- {
- if((inb(ioaddr+TANG_CARD_STATUS)&TANG_TX_READY)==0)
- printk(KERN_WARNING "%s: No TX complete interrupt.\n", dev->name);
- }
- printk(KERN_WARNING "%s: Transmit timed out.\n", dev->name);
- cops_jumpstart(dev); /* Restart the card. */
- netif_trans_update(dev); /* prevent tx timeout */
- netif_wake_queue(dev);
-}
-
-
-/*
- * Make the card transmit a LocalTalk packet.
- */
-
-static netdev_tx_t cops_send_packet(struct sk_buff *skb,
- struct net_device *dev)
-{
- struct cops_local *lp = netdev_priv(dev);
- int ioaddr = dev->base_addr;
- unsigned long flags;
-
- /*
- * Block a timer-based transmit from overlapping.
- */
-
- netif_stop_queue(dev);
-
- spin_lock_irqsave(&lp->lock, flags);
- if(lp->board == DAYNA) /* Wait for adapter transmit buffer. */
- while((inb(ioaddr+DAYNA_CARD_STATUS)&DAYNA_TX_READY)==0)
- cpu_relax();
- if(lp->board == TANGENT) /* Wait for adapter transmit buffer. */
- while((inb(ioaddr+TANG_CARD_STATUS)&TANG_TX_READY)==0)
- cpu_relax();
-
- /* Output IO length. */
- outb(skb->len, ioaddr);
- outb(skb->len >> 8, ioaddr);
-
- /* Output IO code. */
- outb(LAP_WRITE, ioaddr);
-
- if(lp->board == DAYNA) /* Check the transmit buffer again. */
- while((inb(ioaddr+DAYNA_CARD_STATUS)&DAYNA_TX_READY)==0);
-
- outsb(ioaddr, skb->data, skb->len); /* Send out the data. */
-
- if(lp->board==DAYNA) /* Dayna requires you kick the card */
- outb(1, ioaddr+DAYNA_INT_CARD);
-
- spin_unlock_irqrestore(&lp->lock, flags); /* Restore interrupts. */
-
- /* Done sending packet, update counters and cleanup. */
- dev->stats.tx_packets++;
- dev->stats.tx_bytes += skb->len;
- dev_kfree_skb (skb);
- return NETDEV_TX_OK;
-}
-
-/*
- * Dummy function to keep the Appletalk layer happy.
- */
-
-static void set_multicast_list(struct net_device *dev)
-{
- if(cops_debug >= 3)
- printk("%s: set_multicast_list executed\n", dev->name);
-}
-
-/*
- * System ioctls for the COPS LocalTalk card.
- */
-
-static int cops_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
-{
- struct cops_local *lp = netdev_priv(dev);
- struct sockaddr_at *sa = (struct sockaddr_at *)&ifr->ifr_addr;
- struct atalk_addr *aa = &lp->node_addr;
-
- switch(cmd)
- {
- case SIOCSIFADDR:
- /* Get and set the nodeid and network # atalkd wants. */
- cops_nodeid(dev, sa->sat_addr.s_node);
- aa->s_net = sa->sat_addr.s_net;
- aa->s_node = lp->node_acquire;
-
- /* Set broardcast address. */
- dev->broadcast[0] = 0xFF;
-
- /* Set hardware address. */
- dev->dev_addr[0] = aa->s_node;
- dev->addr_len = 1;
- return 0;
-
- case SIOCGIFADDR:
- sa->sat_addr.s_net = aa->s_net;
- sa->sat_addr.s_node = aa->s_node;
- return 0;
-
- default:
- return -EOPNOTSUPP;
- }
-}
-
-/*
- * The inverse routine to cops_open().
- */
-
-static int cops_close(struct net_device *dev)
-{
- struct cops_local *lp = netdev_priv(dev);
-
- /* If we were running polled, yank the timer.
- */
- if(lp->board==TANGENT && dev->irq==0)
- del_timer(&cops_timer);
-
- netif_stop_queue(dev);
- return 0;
-}
-
-
-#ifdef MODULE
-static struct net_device *cops_dev;
-
-MODULE_LICENSE("GPL");
-module_param_hw(io, int, ioport, 0);
-module_param_hw(irq, int, irq, 0);
-module_param_hw(board_type, int, other, 0);
-
-static int __init cops_module_init(void)
-{
- if (io == 0)
- printk(KERN_WARNING "%s: You shouldn't autoprobe with insmod\n",
- cardname);
- cops_dev = cops_probe(-1);
- return PTR_ERR_OR_ZERO(cops_dev);
-}
-
-static void __exit cops_module_exit(void)
-{
- unregister_netdev(cops_dev);
- cleanup_card(cops_dev);
- free_netdev(cops_dev);
-}
-module_init(cops_module_init);
-module_exit(cops_module_exit);
-#endif /* MODULE */
diff --git a/drivers/net/appletalk/cops.h b/drivers/net/appletalk/cops.h
deleted file mode 100644
index 7a0bfb351929..000000000000
--- a/drivers/net/appletalk/cops.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/* cops.h: LocalTalk driver for Linux.
- *
- * Authors:
- * - Jay Schulist <jschlst@samba.org>
- */
-
-#ifndef __LINUX_COPSLTALK_H
-#define __LINUX_COPSLTALK_H
-
-#ifdef __KERNEL__
-
-/* Max LLAP size we will accept. */
-#define MAX_LLAP_SIZE 603
-
-/* Tangent */
-#define TANG_CARD_STATUS 1
-#define TANG_CLEAR_INT 1
-#define TANG_RESET 3
-
-#define TANG_TX_READY 1
-#define TANG_RX_READY 2
-
-/* Dayna */
-#define DAYNA_CMD_DATA 0
-#define DAYNA_CLEAR_INT 1
-#define DAYNA_CARD_STATUS 2
-#define DAYNA_INT_CARD 3
-#define DAYNA_RESET 4
-
-#define DAYNA_RX_READY 0
-#define DAYNA_TX_READY 1
-#define DAYNA_RX_REQUEST 3
-
-/* Same on both card types */
-#define COPS_CLEAR_INT 1
-
-/* LAP response codes received from the cards. */
-#define LAP_INIT 1 /* Init cmd */
-#define LAP_INIT_RSP 2 /* Init response */
-#define LAP_WRITE 3 /* Write cmd */
-#define DATA_READ 4 /* Data read */
-#define LAP_RESPONSE 4 /* Received ALAP frame response */
-#define LAP_GETSTAT 5 /* Get LAP and HW status */
-#define LAP_RSPSTAT 6 /* Status response */
-
-#endif
-
-/*
- * Structure to hold the firmware information.
- */
-struct ltfirmware
-{
- unsigned int length;
- const unsigned char *data;
-};
-
-#define DAYNA 1
-#define TANGENT 2
-
-#endif
diff --git a/drivers/net/appletalk/cops_ffdrv.h b/drivers/net/appletalk/cops_ffdrv.h
deleted file mode 100644
index b02005087c1b..000000000000
--- a/drivers/net/appletalk/cops_ffdrv.h
+++ /dev/null
@@ -1,532 +0,0 @@
-
-/*
- * The firmware this driver downloads into the Localtalk card is a
- * separate program and is not GPL'd source code, even though the Linux
- * side driver and the routine that loads this data into the card are.
- *
- * It is taken from the COPS SDK and is under the following license
- *
- * This material is licensed to you strictly for use in conjunction with
- * the use of COPS LocalTalk adapters.
- * There is no charge for this SDK. And no waranty express or implied
- * about its fitness for any purpose. However, we will cheerefully
- * refund every penny you paid for this SDK...
- * Regards,
- *
- * Thomas F. Divine
- * Chief Scientist
- */
-
-
-/* cops_ffdrv.h: LocalTalk driver firmware dump for Linux.
- *
- * Authors:
- * - Jay Schulist <jschlst@samba.org>
- */
-
-
-#ifdef CONFIG_COPS_DAYNA
-
-static const unsigned char ffdrv_code[] = {
- 58,3,0,50,228,149,33,255,255,34,226,149,
- 249,17,40,152,33,202,154,183,237,82,77,68,
- 11,107,98,19,54,0,237,176,175,50,80,0,
- 62,128,237,71,62,32,237,57,51,62,12,237,
- 57,50,237,57,54,62,6,237,57,52,62,12,
- 237,57,49,33,107,137,34,32,128,33,83,130,
- 34,40,128,33,86,130,34,42,128,33,112,130,
- 34,36,128,33,211,130,34,38,128,62,0,237,
- 57,16,33,63,148,34,34,128,237,94,205,15,
- 130,251,205,168,145,24,141,67,111,112,121,114,
- 105,103,104,116,32,40,67,41,32,49,57,56,
- 56,32,45,32,68,97,121,110,97,32,67,111,
- 109,109,117,110,105,99,97,116,105,111,110,115,
- 32,32,32,65,108,108,32,114,105,103,104,116,
- 115,32,114,101,115,101,114,118,101,100,46,32,
- 32,40,68,40,68,7,16,8,34,7,22,6,
- 16,5,12,4,8,3,6,140,0,16,39,128,
- 0,4,96,10,224,6,0,7,126,2,64,11,
- 118,12,6,13,0,14,193,15,0,5,96,3,
- 192,1,64,9,8,62,9,211,66,62,192,211,
- 66,62,100,61,32,253,6,28,33,205,129,14,
- 66,237,163,194,253,129,6,28,33,205,129,14,
- 64,237,163,194,9,130,201,62,47,50,71,152,
- 62,47,211,68,58,203,129,237,57,20,58,204,
- 129,237,57,21,33,77,152,54,132,205,233,129,
- 58,228,149,254,209,40,6,56,4,62,0,24,
- 2,219,96,33,233,149,119,230,62,33,232,149,
- 119,213,33,8,152,17,7,0,25,119,19,25,
- 119,209,201,251,237,77,245,197,213,229,221,229,
- 205,233,129,62,1,50,106,137,205,158,139,221,
- 225,225,209,193,241,251,237,77,245,197,213,219,
- 72,237,56,16,230,46,237,57,16,237,56,12,
- 58,72,152,183,32,26,6,20,17,128,2,237,
- 56,46,187,32,35,237,56,47,186,32,29,219,
- 72,230,1,32,3,5,32,232,175,50,72,152,
- 229,221,229,62,1,50,106,137,205,158,139,221,
- 225,225,24,25,62,1,50,72,152,58,201,129,
- 237,57,12,58,202,129,237,57,13,237,56,16,
- 246,17,237,57,16,209,193,241,251,237,77,245,
- 197,229,213,221,229,237,56,16,230,17,237,57,
- 16,237,56,20,58,34,152,246,16,246,8,211,
- 68,62,6,61,32,253,58,34,152,246,8,211,
- 68,58,203,129,237,57,20,58,204,129,237,57,
- 21,237,56,16,246,34,237,57,16,221,225,209,
- 225,193,241,251,237,77,33,2,0,57,126,230,
- 3,237,100,1,40,2,246,128,230,130,245,62,
- 5,211,64,241,211,64,201,229,213,243,237,56,
- 16,230,46,237,57,16,237,56,12,251,70,35,
- 35,126,254,175,202,77,133,254,129,202,15,133,
- 230,128,194,191,132,43,58,44,152,119,33,76,
- 152,119,35,62,132,119,120,254,255,40,4,58,
- 49,152,119,219,72,43,43,112,17,3,0,237,
- 56,52,230,248,237,57,52,219,72,230,1,194,
- 141,131,209,225,237,56,52,246,6,237,57,52,
- 62,1,55,251,201,62,3,211,66,62,192,211,
- 66,62,48,211,66,0,0,219,66,230,1,40,
- 4,219,67,24,240,205,203,135,58,75,152,254,
- 255,202,128,132,58,49,152,254,161,250,207,131,
- 58,34,152,211,68,62,10,211,66,62,128,211,
- 66,62,11,211,66,62,6,211,66,24,0,62,
- 14,211,66,62,33,211,66,62,1,211,66,62,
- 64,211,66,62,3,211,66,62,209,211,66,62,
- 100,71,219,66,230,1,32,6,5,32,247,195,
- 248,132,219,67,71,58,44,152,184,194,248,132,
- 62,100,71,219,66,230,1,32,6,5,32,247,
- 195,248,132,219,67,62,100,71,219,66,230,1,
- 32,6,5,32,247,195,248,132,219,67,254,133,
- 32,7,62,0,50,74,152,24,17,254,173,32,
- 7,62,1,50,74,152,24,6,254,141,194,248,
- 132,71,209,225,58,49,152,254,132,32,10,62,
- 50,205,2,134,205,144,135,24,27,254,140,32,
- 15,62,110,205,2,134,62,141,184,32,5,205,
- 144,135,24,8,62,10,205,2,134,205,8,134,
- 62,1,50,106,137,205,158,139,237,56,52,246,
- 6,237,57,52,175,183,251,201,62,20,135,237,
- 57,20,175,237,57,21,237,56,16,246,2,237,
- 57,16,237,56,20,95,237,56,21,123,254,10,
- 48,244,237,56,16,230,17,237,57,16,209,225,
- 205,144,135,62,1,50,106,137,205,158,139,237,
- 56,52,246,6,237,57,52,175,183,251,201,209,
- 225,243,219,72,230,1,40,13,62,10,211,66,
- 0,0,219,66,230,192,202,226,132,237,56,52,
- 246,6,237,57,52,62,1,55,251,201,205,203,
- 135,62,1,50,106,137,205,158,139,237,56,52,
- 246,6,237,57,52,183,251,201,209,225,62,1,
- 50,106,137,205,158,139,237,56,52,246,6,237,
- 57,52,62,2,55,251,201,209,225,243,219,72,
- 230,1,202,213,132,62,10,211,66,0,0,219,
- 66,230,192,194,213,132,229,62,1,50,106,137,
- 42,40,152,205,65,143,225,17,3,0,205,111,
- 136,62,6,211,66,58,44,152,211,66,237,56,
- 52,246,6,237,57,52,183,251,201,209,197,237,
- 56,52,230,248,237,57,52,219,72,230,1,32,
- 15,193,225,237,56,52,246,6,237,57,52,62,
- 1,55,251,201,14,23,58,37,152,254,0,40,
- 14,14,2,254,1,32,5,62,140,119,24,3,
- 62,132,119,43,43,197,205,203,135,193,62,1,
- 211,66,62,64,211,66,62,3,211,66,62,193,
- 211,66,62,100,203,39,71,219,66,230,1,32,
- 6,5,32,247,195,229,133,33,238,151,219,67,
- 71,58,44,152,184,194,229,133,119,62,100,71,
- 219,66,230,1,32,6,5,32,247,195,229,133,
- 219,67,35,119,13,32,234,193,225,62,1,50,
- 106,137,205,158,139,237,56,52,246,6,237,57,
- 52,175,183,251,201,33,234,151,35,35,62,255,
- 119,193,225,62,1,50,106,137,205,158,139,237,
- 56,52,246,6,237,57,52,175,251,201,243,61,
- 32,253,251,201,62,3,211,66,62,192,211,66,
- 58,49,152,254,140,32,19,197,229,213,17,181,
- 129,33,185,129,1,2,0,237,176,209,225,193,
- 24,27,229,213,33,187,129,58,49,152,230,15,
- 87,30,2,237,92,25,17,181,129,126,18,19,
- 35,126,18,209,225,58,34,152,246,8,211,68,
- 58,49,152,254,165,40,14,254,164,40,10,62,
- 10,211,66,62,224,211,66,24,25,58,74,152,
- 254,0,40,10,62,10,211,66,62,160,211,66,
- 24,8,62,10,211,66,62,128,211,66,62,11,
- 211,66,62,6,211,66,205,147,143,62,5,211,
- 66,62,224,211,66,62,5,211,66,62,96,211,
- 66,62,5,61,32,253,62,5,211,66,62,224,
- 211,66,62,14,61,32,253,62,5,211,66,62,
- 233,211,66,62,128,211,66,58,181,129,61,32,
- 253,62,1,211,66,62,192,211,66,1,254,19,
- 237,56,46,187,32,6,13,32,247,195,226,134,
- 62,192,211,66,0,0,219,66,203,119,40,250,
- 219,66,203,87,40,250,243,237,56,16,230,17,
- 237,57,16,237,56,20,251,62,5,211,66,62,
- 224,211,66,58,182,129,61,32,253,229,33,181,
- 129,58,183,129,203,63,119,35,58,184,129,119,
- 225,62,10,211,66,62,224,211,66,62,11,211,
- 66,62,118,211,66,62,47,211,68,62,5,211,
- 66,62,233,211,66,58,181,129,61,32,253,62,
- 5,211,66,62,224,211,66,58,182,129,61,32,
- 253,62,5,211,66,62,96,211,66,201,229,213,
- 58,50,152,230,15,87,30,2,237,92,33,187,
- 129,25,17,181,129,126,18,35,19,126,18,209,
- 225,58,71,152,246,8,211,68,58,50,152,254,
- 165,40,14,254,164,40,10,62,10,211,66,62,
- 224,211,66,24,8,62,10,211,66,62,128,211,
- 66,62,11,211,66,62,6,211,66,195,248,135,
- 62,3,211,66,62,192,211,66,197,229,213,17,
- 181,129,33,183,129,1,2,0,237,176,209,225,
- 193,62,47,211,68,62,10,211,66,62,224,211,
- 66,62,11,211,66,62,118,211,66,62,1,211,
- 66,62,0,211,66,205,147,143,195,16,136,62,
- 3,211,66,62,192,211,66,197,229,213,17,181,
- 129,33,183,129,1,2,0,237,176,209,225,193,
- 62,47,211,68,62,10,211,66,62,224,211,66,
- 62,11,211,66,62,118,211,66,205,147,143,62,
- 5,211,66,62,224,211,66,62,5,211,66,62,
- 96,211,66,62,5,61,32,253,62,5,211,66,
- 62,224,211,66,62,14,61,32,253,62,5,211,
- 66,62,233,211,66,62,128,211,66,58,181,129,
- 61,32,253,62,1,211,66,62,192,211,66,1,
- 254,19,237,56,46,187,32,6,13,32,247,195,
- 88,136,62,192,211,66,0,0,219,66,203,119,
- 40,250,219,66,203,87,40,250,62,5,211,66,
- 62,224,211,66,58,182,129,61,32,253,62,5,
- 211,66,62,96,211,66,201,197,14,67,6,0,
- 62,3,211,66,62,192,211,66,62,48,211,66,
- 0,0,219,66,230,1,40,4,219,67,24,240,
- 62,5,211,66,62,233,211,66,62,128,211,66,
- 58,181,129,61,32,253,237,163,29,62,192,211,
- 66,219,66,230,4,40,250,237,163,29,32,245,
- 219,66,230,4,40,250,62,255,71,219,66,230,
- 4,40,3,5,32,247,219,66,230,4,40,250,
- 62,5,211,66,62,224,211,66,58,182,129,61,
- 32,253,62,5,211,66,62,96,211,66,58,71,
- 152,254,1,202,18,137,62,16,211,66,62,56,
- 211,66,62,14,211,66,62,33,211,66,62,1,
- 211,66,62,248,211,66,237,56,48,246,153,230,
- 207,237,57,48,62,3,211,66,62,221,211,66,
- 193,201,58,71,152,211,68,62,10,211,66,62,
- 128,211,66,62,11,211,66,62,6,211,66,62,
- 6,211,66,58,44,152,211,66,62,16,211,66,
- 62,56,211,66,62,48,211,66,0,0,62,14,
- 211,66,62,33,211,66,62,1,211,66,62,248,
- 211,66,237,56,48,246,145,246,8,230,207,237,
- 57,48,62,3,211,66,62,221,211,66,193,201,
- 44,3,1,0,70,69,1,245,197,213,229,175,
- 50,72,152,237,56,16,230,46,237,57,16,237,
- 56,12,62,1,211,66,0,0,219,66,95,230,
- 160,32,3,195,20,139,123,230,96,194,72,139,
- 62,48,211,66,62,1,211,66,62,64,211,66,
- 237,91,40,152,205,207,143,25,43,55,237,82,
- 218,70,139,34,42,152,98,107,58,44,152,190,
- 194,210,138,35,35,62,130,190,194,200,137,62,
- 1,50,48,152,62,175,190,202,82,139,62,132,
- 190,32,44,50,50,152,62,47,50,71,152,229,
- 175,50,106,137,42,40,152,205,65,143,225,54,
- 133,43,70,58,44,152,119,43,112,17,3,0,
- 62,10,205,2,134,205,111,136,195,158,138,62,
- 140,190,32,19,50,50,152,58,233,149,230,4,
- 202,222,138,62,1,50,71,152,195,219,137,126,
- 254,160,250,185,138,254,166,242,185,138,50,50,
- 152,43,126,35,229,213,33,234,149,95,22,0,
- 25,126,254,132,40,18,254,140,40,14,58,50,
- 152,230,15,87,126,31,21,242,65,138,56,2,
- 175,119,58,50,152,230,15,87,58,233,149,230,
- 62,31,21,242,85,138,218,98,138,209,225,195,
- 20,139,58,50,152,33,100,137,230,15,95,22,
- 0,25,126,50,71,152,209,225,58,50,152,254,
- 164,250,135,138,58,73,152,254,0,40,4,54,
- 173,24,2,54,133,43,70,58,44,152,119,43,
- 112,17,3,0,205,70,135,175,50,106,137,205,
- 208,139,58,199,129,237,57,12,58,200,129,237,
- 57,13,237,56,16,246,17,237,57,16,225,209,
- 193,241,251,237,77,62,129,190,194,227,138,54,
- 130,43,70,58,44,152,119,43,112,17,3,0,
- 205,144,135,195,20,139,35,35,126,254,132,194,
- 227,138,175,50,106,137,205,158,139,24,42,58,
- 201,154,254,1,40,7,62,1,50,106,137,24,
- 237,58,106,137,254,1,202,222,138,62,128,166,
- 194,222,138,221,229,221,33,67,152,205,127,142,
- 205,109,144,221,225,225,209,193,241,251,237,77,
- 58,106,137,254,1,202,44,139,58,50,152,254,
- 164,250,44,139,58,73,152,238,1,50,73,152,
- 221,229,221,33,51,152,205,127,142,221,225,62,
- 1,50,106,137,205,158,139,195,13,139,24,208,
- 24,206,24,204,230,64,40,3,195,20,139,195,
- 20,139,43,126,33,8,152,119,35,58,44,152,
- 119,43,237,91,35,152,205,203,135,205,158,139,
- 195,13,139,175,50,78,152,62,3,211,66,62,
- 192,211,66,201,197,33,4,0,57,126,35,102,
- 111,62,1,50,106,137,219,72,205,141,139,193,
- 201,62,1,50,78,152,34,40,152,54,0,35,
- 35,54,0,195,163,139,58,78,152,183,200,229,
- 33,181,129,58,183,129,119,35,58,184,129,119,
- 225,62,47,211,68,62,14,211,66,62,193,211,
- 66,62,10,211,66,62,224,211,66,62,11,211,
- 66,62,118,211,66,195,3,140,58,78,152,183,
- 200,58,71,152,211,68,254,69,40,4,254,70,
- 32,17,58,73,152,254,0,40,10,62,10,211,
- 66,62,160,211,66,24,8,62,10,211,66,62,
- 128,211,66,62,11,211,66,62,6,211,66,62,
- 6,211,66,58,44,152,211,66,62,16,211,66,
- 62,56,211,66,62,48,211,66,0,0,219,66,
- 230,1,40,4,219,67,24,240,62,14,211,66,
- 62,33,211,66,42,40,152,205,65,143,62,1,
- 211,66,62,248,211,66,237,56,48,246,145,246,
- 8,230,207,237,57,48,62,3,211,66,62,221,
- 211,66,201,62,16,211,66,62,56,211,66,62,
- 48,211,66,0,0,219,66,230,1,40,4,219,
- 67,24,240,62,14,211,66,62,33,211,66,62,
- 1,211,66,62,248,211,66,237,56,48,246,153,
- 230,207,237,57,48,62,3,211,66,62,221,211,
- 66,201,229,213,33,234,149,95,22,0,25,126,
- 254,132,40,4,254,140,32,2,175,119,123,209,
- 225,201,6,8,14,0,31,48,1,12,16,250,
- 121,201,33,4,0,57,94,35,86,33,2,0,
- 57,126,35,102,111,221,229,34,89,152,237,83,
- 91,152,221,33,63,152,205,127,142,58,81,152,
- 50,82,152,58,80,152,135,50,80,152,205,162,
- 140,254,3,56,16,58,81,152,135,60,230,15,
- 50,81,152,175,50,80,152,24,23,58,79,152,
- 205,162,140,254,3,48,13,58,81,152,203,63,
- 50,81,152,62,255,50,79,152,58,81,152,50,
- 82,152,58,79,152,135,50,79,152,62,32,50,
- 83,152,50,84,152,237,56,16,230,17,237,57,
- 16,219,72,62,192,50,93,152,62,93,50,94,
- 152,58,93,152,61,50,93,152,32,9,58,94,
- 152,61,50,94,152,40,44,62,170,237,57,20,
- 175,237,57,21,237,56,16,246,2,237,57,16,
- 219,72,230,1,202,29,141,237,56,20,71,237,
- 56,21,120,254,10,48,237,237,56,16,230,17,
- 237,57,16,243,62,14,211,66,62,65,211,66,
- 251,58,39,152,23,23,60,50,39,152,71,58,
- 82,152,160,230,15,40,22,71,14,10,219,66,
- 230,16,202,186,141,219,72,230,1,202,186,141,
- 13,32,239,16,235,42,89,152,237,91,91,152,
- 205,47,131,48,7,61,202,186,141,195,227,141,
- 221,225,33,0,0,201,221,33,55,152,205,127,
- 142,58,84,152,61,50,84,152,40,19,58,82,
- 152,246,1,50,82,152,58,79,152,246,1,50,
- 79,152,195,29,141,221,225,33,1,0,201,221,
- 33,59,152,205,127,142,58,80,152,246,1,50,
- 80,152,58,82,152,135,246,1,50,82,152,58,
- 83,152,61,50,83,152,194,29,141,221,225,33,
- 2,0,201,221,229,33,0,0,57,17,4,0,
- 25,126,50,44,152,230,128,50,85,152,58,85,
- 152,183,40,6,221,33,88,2,24,4,221,33,
- 150,0,58,44,152,183,40,53,60,40,50,60,
- 40,47,61,61,33,86,152,119,35,119,35,54,
- 129,175,50,48,152,221,43,221,229,225,124,181,
- 40,42,33,86,152,17,3,0,205,189,140,17,
- 232,3,27,123,178,32,251,58,48,152,183,40,
- 224,58,44,152,71,62,7,128,230,127,71,58,
- 85,152,176,50,44,152,24,162,221,225,201,183,
- 221,52,0,192,221,52,1,192,221,52,2,192,
- 221,52,3,192,55,201,245,62,1,211,100,241,
- 201,245,62,1,211,96,241,201,33,2,0,57,
- 126,35,102,111,237,56,48,230,175,237,57,48,
- 62,48,237,57,49,125,237,57,32,124,237,57,
- 33,62,0,237,57,34,62,88,237,57,35,62,
- 0,237,57,36,237,57,37,33,128,2,125,237,
- 57,38,124,237,57,39,237,56,48,246,97,230,
- 207,237,57,48,62,0,237,57,0,62,0,211,
- 96,211,100,201,33,2,0,57,126,35,102,111,
- 237,56,48,230,175,237,57,48,62,12,237,57,
- 49,62,76,237,57,32,62,0,237,57,33,237,
- 57,34,125,237,57,35,124,237,57,36,62,0,
- 237,57,37,33,128,2,125,237,57,38,124,237,
- 57,39,237,56,48,246,97,230,207,237,57,48,
- 62,1,211,96,201,33,2,0,57,126,35,102,
- 111,229,237,56,48,230,87,237,57,48,125,237,
- 57,40,124,237,57,41,62,0,237,57,42,62,
- 67,237,57,43,62,0,237,57,44,58,106,137,
- 254,1,32,5,33,6,0,24,3,33,128,2,
- 125,237,57,46,124,237,57,47,237,56,50,230,
- 252,246,2,237,57,50,225,201,33,4,0,57,
- 94,35,86,33,2,0,57,126,35,102,111,237,
- 56,48,230,87,237,57,48,125,237,57,40,124,
- 237,57,41,62,0,237,57,42,62,67,237,57,
- 43,62,0,237,57,44,123,237,57,46,122,237,
- 57,47,237,56,50,230,244,246,0,237,57,50,
- 237,56,48,246,145,230,207,237,57,48,201,213,
- 237,56,46,95,237,56,47,87,237,56,46,111,
- 237,56,47,103,183,237,82,32,235,33,128,2,
- 183,237,82,209,201,213,237,56,38,95,237,56,
- 39,87,237,56,38,111,237,56,39,103,183,237,
- 82,32,235,33,128,2,183,237,82,209,201,245,
- 197,1,52,0,237,120,230,253,237,121,193,241,
- 201,245,197,1,52,0,237,120,246,2,237,121,
- 193,241,201,33,2,0,57,126,35,102,111,126,
- 35,110,103,201,33,0,0,34,102,152,34,96,
- 152,34,98,152,33,202,154,34,104,152,237,91,
- 104,152,42,226,149,183,237,82,17,0,255,25,
- 34,100,152,203,124,40,6,33,0,125,34,100,
- 152,42,104,152,35,35,35,229,205,120,139,193,
- 201,205,186,149,229,42,40,152,35,35,35,229,
- 205,39,144,193,124,230,3,103,221,117,254,221,
- 116,255,237,91,42,152,35,35,35,183,237,82,
- 32,12,17,5,0,42,42,152,205,171,149,242,
- 169,144,42,40,152,229,205,120,139,193,195,198,
- 149,237,91,42,152,42,98,152,25,34,98,152,
- 19,19,19,42,102,152,25,34,102,152,237,91,
- 100,152,33,158,253,25,237,91,102,152,205,171,
- 149,242,214,144,33,0,0,34,102,152,62,1,
- 50,95,152,205,225,144,195,198,149,58,95,152,
- 183,200,237,91,96,152,42,102,152,205,171,149,
- 242,5,145,237,91,102,152,33,98,2,25,237,
- 91,96,152,205,171,149,250,37,145,237,91,96,
- 152,42,102,152,183,237,82,32,7,42,98,152,
- 125,180,40,13,237,91,102,152,42,96,152,205,
- 171,149,242,58,145,237,91,104,152,42,102,152,
- 25,35,35,35,229,205,120,139,193,175,50,95,
- 152,201,195,107,139,205,206,149,250,255,243,205,
- 225,144,251,58,230,149,183,194,198,149,17,1,
- 0,42,98,152,205,171,149,250,198,149,62,1,
- 50,230,149,237,91,96,152,42,104,152,25,221,
- 117,252,221,116,253,237,91,104,152,42,96,152,
- 25,35,35,35,221,117,254,221,116,255,35,35,
- 35,229,205,39,144,124,230,3,103,35,35,35,
- 221,117,250,221,116,251,235,221,110,252,221,102,
- 253,115,35,114,35,54,4,62,1,211,100,211,
- 84,195,198,149,33,0,0,34,102,152,34,96,
- 152,34,98,152,33,202,154,34,104,152,237,91,
- 104,152,42,226,149,183,237,82,17,0,255,25,
- 34,100,152,33,109,152,54,0,33,107,152,229,
- 205,240,142,193,62,47,50,34,152,62,132,50,
- 49,152,205,241,145,205,61,145,58,39,152,60,
- 50,39,152,24,241,205,206,149,251,255,33,109,
- 152,126,183,202,198,149,110,221,117,251,33,109,
- 152,54,0,221,126,251,254,1,40,28,254,3,
- 40,101,254,4,202,190,147,254,5,202,147,147,
- 254,8,40,87,33,107,152,229,205,240,142,195,
- 198,149,58,201,154,183,32,21,33,111,152,126,
- 50,229,149,205,52,144,33,110,152,110,38,0,
- 229,205,11,142,193,237,91,96,152,42,104,152,
- 25,221,117,254,221,116,255,35,35,54,2,17,
- 2,0,43,43,115,35,114,58,44,152,35,35,
- 119,58,228,149,35,119,62,1,211,100,211,84,
- 62,1,50,201,154,24,169,205,153,142,58,231,
- 149,183,40,250,175,50,231,149,33,110,152,126,
- 254,255,40,91,58,233,149,230,63,183,40,83,
- 94,22,0,33,234,149,25,126,183,40,13,33,
- 110,152,94,33,234,150,25,126,254,3,32,36,
- 205,81,148,125,180,33,110,152,94,22,0,40,
- 17,33,234,149,25,54,0,33,107,152,229,205,
- 240,142,193,195,198,149,33,234,150,25,54,0,
- 33,110,152,94,22,0,33,234,149,25,126,50,
- 49,152,254,132,32,37,62,47,50,34,152,42,
- 107,152,229,33,110,152,229,205,174,140,193,193,
- 125,180,33,110,152,94,22,0,33,234,150,202,
- 117,147,25,52,195,120,147,58,49,152,254,140,
- 32,7,62,1,50,34,152,24,210,62,32,50,
- 106,152,24,19,58,49,152,95,58,106,152,163,
- 183,58,106,152,32,11,203,63,50,106,152,58,
- 106,152,183,32,231,254,2,40,51,254,4,40,
- 38,254,8,40,26,254,16,40,13,254,32,32,
- 158,62,165,50,49,152,62,69,24,190,62,164,
- 50,49,152,62,70,24,181,62,163,50,49,152,
- 175,24,173,62,162,50,49,152,62,1,24,164,
- 62,161,50,49,152,62,3,24,155,25,54,0,
- 221,126,251,254,8,40,7,58,230,149,183,202,
- 32,146,33,107,152,229,205,240,142,193,211,84,
- 195,198,149,237,91,96,152,42,104,152,25,221,
- 117,254,221,116,255,35,35,54,6,17,2,0,
- 43,43,115,35,114,58,228,149,35,35,119,58,
- 233,149,35,119,205,146,142,195,32,146,237,91,
- 96,152,42,104,152,25,229,205,160,142,193,58,
- 231,149,183,40,250,175,50,231,149,243,237,91,
- 96,152,42,104,152,25,221,117,254,221,116,255,
- 78,35,70,221,113,252,221,112,253,89,80,42,
- 98,152,183,237,82,34,98,152,203,124,40,19,
- 33,0,0,34,98,152,34,102,152,34,96,152,
- 62,1,50,95,152,24,40,221,94,252,221,86,
- 253,19,19,19,42,96,152,25,34,96,152,237,
- 91,100,152,33,158,253,25,237,91,96,152,205,
- 171,149,242,55,148,33,0,0,34,96,152,175,
- 50,230,149,251,195,32,146,245,62,1,50,231,
- 149,62,16,237,57,0,211,80,241,251,237,77,
- 201,205,186,149,229,229,33,0,0,34,37,152,
- 33,110,152,126,50,234,151,58,44,152,33,235,
- 151,119,221,54,253,0,221,54,254,0,195,230,
- 148,33,236,151,54,175,33,3,0,229,33,234,
- 151,229,205,174,140,193,193,33,236,151,126,254,
- 255,40,74,33,245,151,110,221,117,255,33,249,
- 151,126,221,166,255,221,119,255,33,253,151,126,
- 221,166,255,221,119,255,58,232,149,95,221,126,
- 255,163,221,119,255,183,40,15,230,191,33,110,
- 152,94,22,0,33,234,149,25,119,24,12,33,
- 110,152,94,22,0,33,234,149,25,54,132,33,
- 0,0,195,198,149,221,110,253,221,102,254,35,
- 221,117,253,221,116,254,17,32,0,221,110,253,
- 221,102,254,205,171,149,250,117,148,58,233,149,
- 203,87,40,84,33,1,0,34,37,152,221,54,
- 253,0,221,54,254,0,24,53,33,236,151,54,
- 175,33,3,0,229,33,234,151,229,205,174,140,
- 193,193,33,236,151,126,254,255,40,14,33,110,
- 152,94,22,0,33,234,149,25,54,140,24,159,
- 221,110,253,221,102,254,35,221,117,253,221,116,
- 254,17,32,0,221,110,253,221,102,254,205,171,
- 149,250,12,149,33,2,0,34,37,152,221,54,
- 253,0,221,54,254,0,24,54,33,236,151,54,
- 175,33,3,0,229,33,234,151,229,205,174,140,
- 193,193,33,236,151,126,254,255,40,15,33,110,
- 152,94,22,0,33,234,149,25,54,132,195,211,
- 148,221,110,253,221,102,254,35,221,117,253,221,
- 116,254,17,32,0,221,110,253,221,102,254,205,
- 171,149,250,96,149,33,1,0,195,198,149,124,
- 170,250,179,149,237,82,201,124,230,128,237,82,
- 60,201,225,253,229,221,229,221,33,0,0,221,
- 57,233,221,249,221,225,253,225,201,233,225,253,
- 229,221,229,221,33,0,0,221,57,94,35,86,
- 35,235,57,249,235,233,0,0,0,0,0,0,
- 62,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 175,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,133,1,0,0,0,63,
- 255,255,255,255,0,0,0,63,0,0,0,0,
- 0,0,0,0,0,0,0,24,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0
- } ;
-
-#endif
diff --git a/drivers/net/appletalk/cops_ltdrv.h b/drivers/net/appletalk/cops_ltdrv.h
deleted file mode 100644
index c699b1ad31da..000000000000
--- a/drivers/net/appletalk/cops_ltdrv.h
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
- * The firmware this driver downloads into the Localtalk card is a
- * separate program and is not GPL'd source code, even though the Linux
- * side driver and the routine that loads this data into the card are.
- *
- * It is taken from the COPS SDK and is under the following license
- *
- * This material is licensed to you strictly for use in conjunction with
- * the use of COPS LocalTalk adapters.
- * There is no charge for this SDK. And no waranty express or implied
- * about its fitness for any purpose. However, we will cheerefully
- * refund every penny you paid for this SDK...
- * Regards,
- *
- * Thomas F. Divine
- * Chief Scientist
- */
-
-
-/* cops_ltdrv.h: LocalTalk driver firmware dump for Linux.
- *
- * Authors:
- * - Jay Schulist <jschlst@samba.org>
- */
-
-
-#ifdef CONFIG_COPS_TANGENT
-
-static const unsigned char ltdrv_code[] = {
- 58,3,0,50,148,10,33,143,15,62,85,119,
- 190,32,9,62,170,119,190,32,3,35,24,241,
- 34,146,10,249,17,150,10,33,143,15,183,237,
- 82,77,68,11,107,98,19,54,0,237,176,62,
- 16,237,57,51,62,0,237,57,50,237,57,54,
- 62,12,237,57,49,62,195,33,39,2,50,56,
- 0,34,57,0,237,86,205,30,2,251,205,60,
- 10,24,169,67,111,112,121,114,105,103,104,116,
- 32,40,99,41,32,49,57,56,56,45,49,57,
- 57,50,44,32,80,114,105,110,116,105,110,103,
- 32,67,111,109,109,117,110,105,99,97,116,105,
- 111,110,115,32,65,115,115,111,99,105,97,116,
- 101,115,44,32,73,110,99,46,65,108,108,32,
- 114,105,103,104,116,115,32,114,101,115,101,114,
- 118,101,100,46,32,32,4,4,22,40,255,60,
- 4,96,10,224,6,0,7,126,2,64,11,246,
- 12,6,13,0,14,193,15,0,5,96,3,192,
- 1,0,9,8,62,3,211,82,62,192,211,82,
- 201,62,3,211,82,62,213,211,82,201,62,5,
- 211,82,62,224,211,82,201,62,5,211,82,62,
- 224,211,82,201,62,5,211,82,62,96,211,82,
- 201,6,28,33,180,1,14,82,237,163,194,4,
- 2,33,39,2,34,64,0,58,3,0,230,1,
- 192,62,11,237,121,62,118,237,121,201,33,182,
- 10,54,132,205,253,1,201,245,197,213,229,42,
- 150,10,14,83,17,98,2,67,20,237,162,58,
- 179,1,95,219,82,230,1,32,6,29,32,247,
- 195,17,3,62,1,211,82,219,82,95,230,160,
- 32,10,237,162,32,225,21,32,222,195,15,3,
- 237,162,123,230,96,194,21,3,62,48,211,82,
- 62,1,211,82,175,211,82,237,91,150,10,43,
- 55,237,82,218,19,3,34,152,10,98,107,58,
- 154,10,190,32,81,62,1,50,158,10,35,35,
- 62,132,190,32,44,54,133,43,70,58,154,10,
- 119,43,112,17,3,0,205,137,3,62,16,211,
- 82,62,56,211,82,205,217,1,42,150,10,14,
- 83,17,98,2,67,20,58,178,1,95,195,59,
- 2,62,129,190,194,227,2,54,130,43,70,58,
- 154,10,119,43,112,17,3,0,205,137,3,195,
- 254,2,35,35,126,254,132,194,227,2,205,61,
- 3,24,20,62,128,166,194,222,2,221,229,221,
- 33,175,10,205,93,6,205,144,7,221,225,225,
- 209,193,241,251,237,77,221,229,221,33,159,10,
- 205,93,6,221,225,205,61,3,195,247,2,24,
- 237,24,235,24,233,230,64,40,2,24,227,24,
- 225,175,50,179,10,205,208,1,201,197,33,4,
- 0,57,126,35,102,111,205,51,3,193,201,62,
- 1,50,179,10,34,150,10,54,0,58,179,10,
- 183,200,62,14,211,82,62,193,211,82,62,10,
- 211,82,62,224,211,82,62,6,211,82,58,154,
- 10,211,82,62,16,211,82,62,56,211,82,62,
- 48,211,82,219,82,230,1,40,4,219,83,24,
- 242,62,14,211,82,62,33,211,82,62,1,211,
- 82,62,9,211,82,62,32,211,82,205,217,1,
- 201,14,83,205,208,1,24,23,14,83,205,208,
- 1,205,226,1,58,174,1,61,32,253,205,244,
- 1,58,174,1,61,32,253,205,226,1,58,175,
- 1,61,32,253,62,5,211,82,62,233,211,82,
- 62,128,211,82,58,176,1,61,32,253,237,163,
- 27,62,192,211,82,219,82,230,4,40,250,237,
- 163,27,122,179,32,243,219,82,230,4,40,250,
- 58,178,1,71,219,82,230,4,40,3,5,32,
- 247,219,82,230,4,40,250,205,235,1,58,177,
- 1,61,32,253,205,244,1,201,229,213,35,35,
- 126,230,128,194,145,4,43,58,154,10,119,43,
- 70,33,181,10,119,43,112,17,3,0,243,62,
- 10,211,82,219,82,230,128,202,41,4,209,225,
- 62,1,55,251,201,205,144,3,58,180,10,254,
- 255,202,127,4,205,217,1,58,178,1,71,219,
- 82,230,1,32,6,5,32,247,195,173,4,219,
- 83,71,58,154,10,184,194,173,4,58,178,1,
- 71,219,82,230,1,32,6,5,32,247,195,173,
- 4,219,83,58,178,1,71,219,82,230,1,32,
- 6,5,32,247,195,173,4,219,83,254,133,194,
- 173,4,58,179,1,24,4,58,179,1,135,61,
- 32,253,209,225,205,137,3,205,61,3,183,251,
- 201,209,225,243,62,10,211,82,219,82,230,128,
- 202,164,4,62,1,55,251,201,205,144,3,205,
- 61,3,183,251,201,209,225,62,2,55,251,201,
- 243,62,14,211,82,62,33,211,82,251,201,33,
- 4,0,57,94,35,86,33,2,0,57,126,35,
- 102,111,221,229,34,193,10,237,83,195,10,221,
- 33,171,10,205,93,6,58,185,10,50,186,10,
- 58,184,10,135,50,184,10,205,112,6,254,3,
- 56,16,58,185,10,135,60,230,15,50,185,10,
- 175,50,184,10,24,23,58,183,10,205,112,6,
- 254,3,48,13,58,185,10,203,63,50,185,10,
- 62,255,50,183,10,58,185,10,50,186,10,58,
- 183,10,135,50,183,10,62,32,50,187,10,50,
- 188,10,6,255,219,82,230,16,32,3,5,32,
- 247,205,180,4,6,40,219,82,230,16,40,3,
- 5,32,247,62,10,211,82,219,82,230,128,194,
- 46,5,219,82,230,16,40,214,237,95,71,58,
- 186,10,160,230,15,40,32,71,14,10,62,10,
- 211,82,219,82,230,128,202,119,5,205,180,4,
- 195,156,5,219,82,230,16,202,156,5,13,32,
- 229,16,225,42,193,10,237,91,195,10,205,252,
- 3,48,7,61,202,156,5,195,197,5,221,225,
- 33,0,0,201,221,33,163,10,205,93,6,58,
- 188,10,61,50,188,10,40,19,58,186,10,246,
- 1,50,186,10,58,183,10,246,1,50,183,10,
- 195,46,5,221,225,33,1,0,201,221,33,167,
- 10,205,93,6,58,184,10,246,1,50,184,10,
- 58,186,10,135,246,1,50,186,10,58,187,10,
- 61,50,187,10,194,46,5,221,225,33,2,0,
- 201,221,229,33,0,0,57,17,4,0,25,126,
- 50,154,10,230,128,50,189,10,58,189,10,183,
- 40,6,221,33,88,2,24,4,221,33,150,0,
- 58,154,10,183,40,49,60,40,46,61,33,190,
- 10,119,35,119,35,54,129,175,50,158,10,221,
- 43,221,229,225,124,181,40,42,33,190,10,17,
- 3,0,205,206,4,17,232,3,27,123,178,32,
- 251,58,158,10,183,40,224,58,154,10,71,62,
- 7,128,230,127,71,58,189,10,176,50,154,10,
- 24,166,221,225,201,183,221,52,0,192,221,52,
- 1,192,221,52,2,192,221,52,3,192,55,201,
- 6,8,14,0,31,48,1,12,16,250,121,201,
- 33,2,0,57,94,35,86,35,78,35,70,35,
- 126,35,102,105,79,120,68,103,237,176,201,33,
- 2,0,57,126,35,102,111,62,17,237,57,48,
- 125,237,57,40,124,237,57,41,62,0,237,57,
- 42,62,64,237,57,43,62,0,237,57,44,33,
- 128,2,125,237,57,46,124,237,57,47,62,145,
- 237,57,48,211,68,58,149,10,211,66,201,33,
- 2,0,57,126,35,102,111,62,33,237,57,48,
- 62,64,237,57,32,62,0,237,57,33,237,57,
- 34,125,237,57,35,124,237,57,36,62,0,237,
- 57,37,33,128,2,125,237,57,38,124,237,57,
- 39,62,97,237,57,48,211,67,58,149,10,211,
- 66,201,237,56,46,95,237,56,47,87,237,56,
- 46,111,237,56,47,103,183,237,82,32,235,33,
- 128,2,183,237,82,201,237,56,38,95,237,56,
- 39,87,237,56,38,111,237,56,39,103,183,237,
- 82,32,235,33,128,2,183,237,82,201,205,106,
- 10,221,110,6,221,102,7,126,35,110,103,195,
- 118,10,205,106,10,33,0,0,34,205,10,34,
- 198,10,34,200,10,33,143,15,34,207,10,237,
- 91,207,10,42,146,10,183,237,82,17,0,255,
- 25,34,203,10,203,124,40,6,33,0,125,34,
- 203,10,42,207,10,229,205,37,3,195,118,10,
- 205,106,10,229,42,150,10,35,35,35,229,205,
- 70,7,193,124,230,3,103,221,117,254,221,116,
- 255,237,91,152,10,35,35,35,183,237,82,32,
- 12,17,5,0,42,152,10,205,91,10,242,203,
- 7,42,150,10,229,205,37,3,195,118,10,237,
- 91,152,10,42,200,10,25,34,200,10,42,205,
- 10,25,34,205,10,237,91,203,10,33,158,253,
- 25,237,91,205,10,205,91,10,242,245,7,33,
- 0,0,34,205,10,62,1,50,197,10,205,5,
- 8,33,0,0,57,249,195,118,10,205,106,10,
- 58,197,10,183,202,118,10,237,91,198,10,42,
- 205,10,205,91,10,242,46,8,237,91,205,10,
- 33,98,2,25,237,91,198,10,205,91,10,250,
- 78,8,237,91,198,10,42,205,10,183,237,82,
- 32,7,42,200,10,125,180,40,13,237,91,205,
- 10,42,198,10,205,91,10,242,97,8,237,91,
- 207,10,42,205,10,25,229,205,37,3,175,50,
- 197,10,195,118,10,205,29,3,33,0,0,57,
- 249,195,118,10,205,106,10,58,202,10,183,40,
- 22,205,14,7,237,91,209,10,19,19,19,205,
- 91,10,242,139,8,33,1,0,195,118,10,33,
- 0,0,195,118,10,205,126,10,252,255,205,108,
- 8,125,180,194,118,10,237,91,200,10,33,0,
- 0,205,91,10,242,118,10,237,91,207,10,42,
- 198,10,25,221,117,254,221,116,255,35,35,35,
- 229,205,70,7,193,124,230,3,103,35,35,35,
- 221,117,252,221,116,253,229,221,110,254,221,102,
- 255,229,33,212,10,229,205,124,6,193,193,221,
- 110,252,221,102,253,34,209,10,33,211,10,54,
- 4,33,209,10,227,205,147,6,193,62,1,50,
- 202,10,243,221,94,252,221,86,253,42,200,10,
- 183,237,82,34,200,10,203,124,40,17,33,0,
- 0,34,200,10,34,205,10,34,198,10,50,197,
- 10,24,37,221,94,252,221,86,253,42,198,10,
- 25,34,198,10,237,91,203,10,33,158,253,25,
- 237,91,198,10,205,91,10,242,68,9,33,0,
- 0,34,198,10,205,5,8,33,0,0,57,249,
- 251,195,118,10,205,106,10,33,49,13,126,183,
- 40,16,205,42,7,237,91,47,13,19,19,19,
- 205,91,10,242,117,9,58,142,15,198,1,50,
- 142,15,195,118,10,33,49,13,126,254,1,40,
- 25,254,3,202,7,10,254,5,202,21,10,33,
- 49,13,54,0,33,47,13,229,205,207,6,195,
- 118,10,58,141,15,183,32,72,33,51,13,126,
- 50,149,10,205,86,7,33,50,13,126,230,127,
- 183,32,40,58,142,15,230,127,50,142,15,183,
- 32,5,198,1,50,142,15,33,50,13,126,111,
- 23,159,103,203,125,58,142,15,40,5,198,128,
- 50,142,15,33,50,13,119,33,50,13,126,111,
- 23,159,103,229,205,237,5,193,33,211,10,54,
- 2,33,2,0,34,209,10,58,154,10,33,212,
- 10,119,58,148,10,33,213,10,119,33,209,10,
- 229,205,147,6,193,24,128,42,47,13,229,33,
- 50,13,229,205,191,4,193,24,239,33,211,10,
- 54,6,33,3,0,34,209,10,58,154,10,33,
- 212,10,119,58,148,10,33,213,10,119,33,214,
- 10,54,5,33,209,10,229,205,147,6,24,200,
- 205,106,10,33,49,13,54,0,33,47,13,229,
- 205,207,6,33,209,10,227,205,147,6,193,205,
- 80,9,205,145,8,24,248,124,170,250,99,10,
- 237,82,201,124,230,128,237,82,60,201,225,253,
- 229,221,229,221,33,0,0,221,57,233,221,249,
- 221,225,253,225,201,233,225,253,229,221,229,221,
- 33,0,0,221,57,94,35,86,35,235,57,249,
- 235,233,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0
- } ;
-
-#endif
diff --git a/drivers/video/fbdev/nvidia/Makefile b/drivers/video/fbdev/nvidia/Makefile
deleted file mode 100644
index cdd6e8ac454a..000000000000
--- a/drivers/video/fbdev/nvidia/Makefile
+++ /dev/null
@@ -1,13 +0,0 @@
-# SPDX-License-Identifier: GPL-2.0
-#
-# Makefile for the nVidia framebuffer driver
-#
-
-obj-$(CONFIG_FB_NVIDIA) += nvidiafb.o
-
-nvidiafb-y := nvidia.o nv_hw.o nv_setup.o \
- nv_accel.o nv_of.o
-nvidiafb-$(CONFIG_FB_NVIDIA_I2C) += nv_i2c.o
-nvidiafb-$(CONFIG_FB_NVIDIA_BACKLIGHT) += nv_backlight.o
-
-nvidiafb-objs := $(nvidiafb-y)
diff --git a/drivers/video/fbdev/nvidia/nv_accel.c b/drivers/video/fbdev/nvidia/nv_accel.c
deleted file mode 100644
index 7341fed63e35..000000000000
--- a/drivers/video/fbdev/nvidia/nv_accel.c
+++ /dev/null
@@ -1,418 +0,0 @@
- /***************************************************************************\
-|* *|
-|* Copyright 1993-2003 NVIDIA, Corporation. All rights reserved. *|
-|* *|
-|* NOTICE TO USER: The source code is copyrighted under U.S. and *|
-|* international laws. Users and possessors of this source code are *|
-|* hereby granted a nonexclusive, royalty-free copyright license to *|
-|* use this code in individual and commercial software. *|
-|* *|
-|* Any use of this source code must include, in the user documenta- *|
-|* tion and internal comments to the code, notices to the end user *|
-|* as follows: *|
-|* *|
-|* Copyright 1993-2003 NVIDIA, Corporation. All rights reserved. *|
-|* *|
-|* NVIDIA, CORPORATION MAKES NO REPRESENTATION ABOUT THE SUITABILITY *|
-|* OF THIS SOURCE CODE FOR ANY PURPOSE. IT IS PROVIDED "AS IS" *|
-|* WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND. NVIDIA, CORPOR- *|
-|* ATION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOURCE CODE, *|
-|* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGE- *|
-|* MENT, AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL *|
-|* NVIDIA, CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT, INCI- *|
-|* DENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RE- *|
-|* SULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION *|
-|* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF *|
-|* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOURCE CODE. *|
-|* *|
-|* U.S. Government End Users. This source code is a "commercial *|
-|* item," as that term is defined at 48 C.F.R. 2.101 (OCT 1995), *|
-|* consisting of "commercial computer software" and "commercial *|
-|* computer software documentation," as such terms are used in *|
-|* 48 C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Govern- *|
-|* ment only as a commercial end item. Consistent with 48 C.F.R. *|
-|* 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), *|
-|* all U.S. Government End Users acquire the source code with only *|
-|* those rights set forth herein. *|
-|* *|
- \***************************************************************************/
-
-/*
- * GPL Licensing Note - According to Mark Vojkovich, author of the Xorg/
- * XFree86 'nv' driver, this source code is provided under MIT-style licensing
- * where the source code is provided "as is" without warranty of any kind.
- * The only usage restriction is for the copyright notices to be retained
- * whenever code is used.
- *
- * Antonino Daplas <adaplas@pol.net> 2005-03-11
- */
-
-#include <linux/fb.h>
-#include <linux/nmi.h>
-
-#include "nv_type.h"
-#include "nv_proto.h"
-#include "nv_dma.h"
-#include "nv_local.h"
-
-/* There is a HW race condition with videoram command buffers.
- You can't jump to the location of your put offset. We write put
- at the jump offset + SKIPS dwords with noop padding in between
- to solve this problem */
-#define SKIPS 8
-
-static const int NVCopyROP[16] = {
- 0xCC, /* copy */
- 0x55 /* invert */
-};
-
-static const int NVCopyROP_PM[16] = {
- 0xCA, /* copy */
- 0x5A, /* invert */
-};
-
-static inline void nvidiafb_safe_mode(struct fb_info *info)
-{
- struct nvidia_par *par = info->par;
-
- touch_softlockup_watchdog();
- info->pixmap.scan_align = 1;
- par->lockup = 1;
-}
-
-static inline void NVFlush(struct fb_info *info)
-{
- struct nvidia_par *par = info->par;
- int count = 1000000000;
-
- while (--count && READ_GET(par) != par->dmaPut) ;
-
- if (!count) {
- printk("nvidiafb: DMA Flush lockup\n");
- nvidiafb_safe_mode(info);
- }
-}
-
-static inline void NVSync(struct fb_info *info)
-{
- struct nvidia_par *par = info->par;
- int count = 1000000000;
-
- while (--count && NV_RD32(par->PGRAPH, 0x0700)) ;
-
- if (!count) {
- printk("nvidiafb: DMA Sync lockup\n");
- nvidiafb_safe_mode(info);
- }
-}
-
-static void NVDmaKickoff(struct nvidia_par *par)
-{
- if (par->dmaCurrent != par->dmaPut) {
- par->dmaPut = par->dmaCurrent;
- WRITE_PUT(par, par->dmaPut);
- }
-}
-
-static void NVDmaWait(struct fb_info *info, int size)
-{
- struct nvidia_par *par = info->par;
- int dmaGet;
- int count = 1000000000, cnt;
- size++;
-
- while (par->dmaFree < size && --count && !par->lockup) {
- dmaGet = READ_GET(par);
-
- if (par->dmaPut >= dmaGet) {
- par->dmaFree = par->dmaMax - par->dmaCurrent;
- if (par->dmaFree < size) {
- NVDmaNext(par, 0x20000000);
- if (dmaGet <= SKIPS) {
- if (par->dmaPut <= SKIPS)
- WRITE_PUT(par, SKIPS + 1);
- cnt = 1000000000;
- do {
- dmaGet = READ_GET(par);
- } while (--cnt && dmaGet <= SKIPS);
- if (!cnt) {
- printk("DMA Get lockup\n");
- par->lockup = 1;
- }
- }
- WRITE_PUT(par, SKIPS);
- par->dmaCurrent = par->dmaPut = SKIPS;
- par->dmaFree = dmaGet - (SKIPS + 1);
- }
- } else
- par->dmaFree = dmaGet - par->dmaCurrent - 1;
- }
-
- if (!count) {
- printk("nvidiafb: DMA Wait Lockup\n");
- nvidiafb_safe_mode(info);
- }
-}
-
-static void NVSetPattern(struct fb_info *info, u32 clr0, u32 clr1,
- u32 pat0, u32 pat1)
-{
- struct nvidia_par *par = info->par;
-
- NVDmaStart(info, par, PATTERN_COLOR_0, 4);
- NVDmaNext(par, clr0);
- NVDmaNext(par, clr1);
- NVDmaNext(par, pat0);
- NVDmaNext(par, pat1);
-}
-
-static void NVSetRopSolid(struct fb_info *info, u32 rop, u32 planemask)
-{
- struct nvidia_par *par = info->par;
-
- if (planemask != ~0) {
- NVSetPattern(info, 0, planemask, ~0, ~0);
- if (par->currentRop != (rop + 32)) {
- NVDmaStart(info, par, ROP_SET, 1);
- NVDmaNext(par, NVCopyROP_PM[rop]);
- par->currentRop = rop + 32;
- }
- } else if (par->currentRop != rop) {
- if (par->currentRop >= 16)
- NVSetPattern(info, ~0, ~0, ~0, ~0);
- NVDmaStart(info, par, ROP_SET, 1);
- NVDmaNext(par, NVCopyROP[rop]);
- par->currentRop = rop;
- }
-}
-
-static void NVSetClippingRectangle(struct fb_info *info, int x1, int y1,
- int x2, int y2)
-{
- struct nvidia_par *par = info->par;
- int h = y2 - y1 + 1;
- int w = x2 - x1 + 1;
-
- NVDmaStart(info, par, CLIP_POINT, 2);
- NVDmaNext(par, (y1 << 16) | x1);
- NVDmaNext(par, (h << 16) | w);
-}
-
-void NVResetGraphics(struct fb_info *info)
-{
- struct nvidia_par *par = info->par;
- u32 surfaceFormat, patternFormat, rectFormat, lineFormat;
- int pitch, i;
-
- pitch = info->fix.line_length;
-
- par->dmaBase = (u32 __iomem *) (&par->FbStart[par->FbUsableSize]);
-
- for (i = 0; i < SKIPS; i++)
- NV_WR32(&par->dmaBase[i], 0, 0x00000000);
-
- NV_WR32(&par->dmaBase[0x0 + SKIPS], 0, 0x00040000);
- NV_WR32(&par->dmaBase[0x1 + SKIPS], 0, 0x80000010);
- NV_WR32(&par->dmaBase[0x2 + SKIPS], 0, 0x00042000);
- NV_WR32(&par->dmaBase[0x3 + SKIPS], 0, 0x80000011);
- NV_WR32(&par->dmaBase[0x4 + SKIPS], 0, 0x00044000);
- NV_WR32(&par->dmaBase[0x5 + SKIPS], 0, 0x80000012);
- NV_WR32(&par->dmaBase[0x6 + SKIPS], 0, 0x00046000);
- NV_WR32(&par->dmaBase[0x7 + SKIPS], 0, 0x80000013);
- NV_WR32(&par->dmaBase[0x8 + SKIPS], 0, 0x00048000);
- NV_WR32(&par->dmaBase[0x9 + SKIPS], 0, 0x80000014);
- NV_WR32(&par->dmaBase[0xA + SKIPS], 0, 0x0004A000);
- NV_WR32(&par->dmaBase[0xB + SKIPS], 0, 0x80000015);
- NV_WR32(&par->dmaBase[0xC + SKIPS], 0, 0x0004C000);
- NV_WR32(&par->dmaBase[0xD + SKIPS], 0, 0x80000016);
- NV_WR32(&par->dmaBase[0xE + SKIPS], 0, 0x0004E000);
- NV_WR32(&par->dmaBase[0xF + SKIPS], 0, 0x80000017);
-
- par->dmaPut = 0;
- par->dmaCurrent = 16 + SKIPS;
- par->dmaMax = 8191;
- par->dmaFree = par->dmaMax - par->dmaCurrent;
-
- switch (info->var.bits_per_pixel) {
- case 32:
- case 24:
- surfaceFormat = SURFACE_FORMAT_DEPTH24;
- patternFormat = PATTERN_FORMAT_DEPTH24;
- rectFormat = RECT_FORMAT_DEPTH24;
- lineFormat = LINE_FORMAT_DEPTH24;
- break;
- case 16:
- surfaceFormat = SURFACE_FORMAT_DEPTH16;
- patternFormat = PATTERN_FORMAT_DEPTH16;
- rectFormat = RECT_FORMAT_DEPTH16;
- lineFormat = LINE_FORMAT_DEPTH16;
- break;
- default:
- surfaceFormat = SURFACE_FORMAT_DEPTH8;
- patternFormat = PATTERN_FORMAT_DEPTH8;
- rectFormat = RECT_FORMAT_DEPTH8;
- lineFormat = LINE_FORMAT_DEPTH8;
- break;
- }
-
- NVDmaStart(info, par, SURFACE_FORMAT, 4);
- NVDmaNext(par, surfaceFormat);
- NVDmaNext(par, pitch | (pitch << 16));
- NVDmaNext(par, 0);
- NVDmaNext(par, 0);
-
- NVDmaStart(info, par, PATTERN_FORMAT, 1);
- NVDmaNext(par, patternFormat);
-
- NVDmaStart(info, par, RECT_FORMAT, 1);
- NVDmaNext(par, rectFormat);
-
- NVDmaStart(info, par, LINE_FORMAT, 1);
- NVDmaNext(par, lineFormat);
-
- par->currentRop = ~0; /* set to something invalid */
- NVSetRopSolid(info, ROP_COPY, ~0);
-
- NVSetClippingRectangle(info, 0, 0, info->var.xres_virtual,
- info->var.yres_virtual);
-
- NVDmaKickoff(par);
-}
-
-int nvidiafb_sync(struct fb_info *info)
-{
- struct nvidia_par *par = info->par;
-
- if (info->state != FBINFO_STATE_RUNNING)
- return 0;
-
- if (!par->lockup)
- NVFlush(info);
-
- if (!par->lockup)
- NVSync(info);
-
- return 0;
-}
-
-void nvidiafb_copyarea(struct fb_info *info, const struct fb_copyarea *region)
-{
- struct nvidia_par *par = info->par;
-
- if (info->state != FBINFO_STATE_RUNNING)
- return;
-
- if (par->lockup) {
- cfb_copyarea(info, region);
- return;
- }
-
- NVDmaStart(info, par, BLIT_POINT_SRC, 3);
- NVDmaNext(par, (region->sy << 16) | region->sx);
- NVDmaNext(par, (region->dy << 16) | region->dx);
- NVDmaNext(par, (region->height << 16) | region->width);
-
- NVDmaKickoff(par);
-}
-
-void nvidiafb_fillrect(struct fb_info *info, const struct fb_fillrect *rect)
-{
- struct nvidia_par *par = info->par;
- u32 color;
-
- if (info->state != FBINFO_STATE_RUNNING)
- return;
-
- if (par->lockup) {
- cfb_fillrect(info, rect);
- return;
- }
-
- if (info->var.bits_per_pixel == 8)
- color = rect->color;
- else
- color = ((u32 *) info->pseudo_palette)[rect->color];
-
- if (rect->rop != ROP_COPY)
- NVSetRopSolid(info, rect->rop, ~0);
-
- NVDmaStart(info, par, RECT_SOLID_COLOR, 1);
- NVDmaNext(par, color);
-
- NVDmaStart(info, par, RECT_SOLID_RECTS(0), 2);
- NVDmaNext(par, (rect->dx << 16) | rect->dy);
- NVDmaNext(par, (rect->width << 16) | rect->height);
-
- NVDmaKickoff(par);
-
- if (rect->rop != ROP_COPY)
- NVSetRopSolid(info, ROP_COPY, ~0);
-}
-
-static void nvidiafb_mono_color_expand(struct fb_info *info,
- const struct fb_image *image)
-{
- struct nvidia_par *par = info->par;
- u32 fg, bg, mask = ~(~0 >> (32 - info->var.bits_per_pixel));
- u32 dsize, width, *data = (u32 *) image->data, tmp;
- int j, k = 0;
-
- width = (image->width + 31) & ~31;
- dsize = (width * image->height) >> 5;
-
- if (info->var.bits_per_pixel == 8) {
- fg = image->fg_color | mask;
- bg = image->bg_color | mask;
- } else {
- fg = ((u32 *) info->pseudo_palette)[image->fg_color] | mask;
- bg = ((u32 *) info->pseudo_palette)[image->bg_color] | mask;
- }
-
- NVDmaStart(info, par, RECT_EXPAND_TWO_COLOR_CLIP, 7);
- NVDmaNext(par, (image->dy << 16) | (image->dx & 0xffff));
- NVDmaNext(par, ((image->dy + image->height) << 16) |
- ((image->dx + image->width) & 0xffff));
- NVDmaNext(par, bg);
- NVDmaNext(par, fg);
- NVDmaNext(par, (image->height << 16) | width);
- NVDmaNext(par, (image->height << 16) | width);
- NVDmaNext(par, (image->dy << 16) | (image->dx & 0xffff));
-
- while (dsize >= RECT_EXPAND_TWO_COLOR_DATA_MAX_DWORDS) {
- NVDmaStart(info, par, RECT_EXPAND_TWO_COLOR_DATA(0),
- RECT_EXPAND_TWO_COLOR_DATA_MAX_DWORDS);
-
- for (j = RECT_EXPAND_TWO_COLOR_DATA_MAX_DWORDS; j--;) {
- tmp = data[k++];
- reverse_order(&tmp);
- NVDmaNext(par, tmp);
- }
-
- dsize -= RECT_EXPAND_TWO_COLOR_DATA_MAX_DWORDS;
- }
-
- if (dsize) {
- NVDmaStart(info, par, RECT_EXPAND_TWO_COLOR_DATA(0), dsize);
-
- for (j = dsize; j--;) {
- tmp = data[k++];
- reverse_order(&tmp);
- NVDmaNext(par, tmp);
- }
- }
-
- NVDmaKickoff(par);
-}
-
-void nvidiafb_imageblit(struct fb_info *info, const struct fb_image *image)
-{
- struct nvidia_par *par = info->par;
-
- if (info->state != FBINFO_STATE_RUNNING)
- return;
-
- if (image->depth == 1 && !par->lockup)
- nvidiafb_mono_color_expand(info, image);
- else
- cfb_imageblit(info, image);
-}
diff --git a/drivers/video/fbdev/nvidia/nv_backlight.c b/drivers/video/fbdev/nvidia/nv_backlight.c
deleted file mode 100644
index 2ce53529f636..000000000000
--- a/drivers/video/fbdev/nvidia/nv_backlight.c
+++ /dev/null
@@ -1,137 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * Backlight code for nVidia based graphic cards
- *
- * Copyright 2004 Antonino Daplas <adaplas@pol.net>
- * Copyright (c) 2006 Michael Hanselmann <linux-kernel@hansmi.ch>
- */
-
-#include <linux/backlight.h>
-#include <linux/fb.h>
-#include <linux/pci.h>
-
-#ifdef CONFIG_PMAC_BACKLIGHT
-#include <asm/backlight.h>
-#endif
-
-#include "nv_local.h"
-#include "nv_type.h"
-#include "nv_proto.h"
-
-/* We do not have any information about which values are allowed, thus
- * we used safe values.
- */
-#define MIN_LEVEL 0x158
-#define MAX_LEVEL 0x534
-#define LEVEL_STEP ((MAX_LEVEL - MIN_LEVEL) / FB_BACKLIGHT_MAX)
-
-static int nvidia_bl_get_level_brightness(struct nvidia_par *par,
- int level)
-{
- struct fb_info *info = pci_get_drvdata(par->pci_dev);
- int nlevel;
-
- /* Get and convert the value */
- /* No locking of bl_curve since we read a single value */
- nlevel = MIN_LEVEL + info->bl_curve[level] * LEVEL_STEP;
-
- if (nlevel < 0)
- nlevel = 0;
- else if (nlevel < MIN_LEVEL)
- nlevel = MIN_LEVEL;
- else if (nlevel > MAX_LEVEL)
- nlevel = MAX_LEVEL;
-
- return nlevel;
-}
-
-static int nvidia_bl_update_status(struct backlight_device *bd)
-{
- struct nvidia_par *par = bl_get_data(bd);
- u32 tmp_pcrt, tmp_pmc, fpcontrol;
- int level;
-
- if (!par->FlatPanel)
- return 0;
-
- if (bd->props.power != FB_BLANK_UNBLANK ||
- bd->props.fb_blank != FB_BLANK_UNBLANK)
- level = 0;
- else
- level = bd->props.brightness;
-
- tmp_pmc = NV_RD32(par->PMC, 0x10F0) & 0x0000FFFF;
- tmp_pcrt = NV_RD32(par->PCRTC0, 0x081C) & 0xFFFFFFFC;
- fpcontrol = NV_RD32(par->PRAMDAC, 0x0848) & 0xCFFFFFCC;
-
- if (level > 0) {
- tmp_pcrt |= 0x1;
- tmp_pmc |= (1 << 31); /* backlight bit */
- tmp_pmc |= nvidia_bl_get_level_brightness(par, level) << 16;
- fpcontrol |= par->fpSyncs;
- } else
- fpcontrol |= 0x20000022;
-
- NV_WR32(par->PCRTC0, 0x081C, tmp_pcrt);
- NV_WR32(par->PMC, 0x10F0, tmp_pmc);
- NV_WR32(par->PRAMDAC, 0x848, fpcontrol);
-
- return 0;
-}
-
-static const struct backlight_ops nvidia_bl_ops = {
- .update_status = nvidia_bl_update_status,
-};
-
-void nvidia_bl_init(struct nvidia_par *par)
-{
- struct backlight_properties props;
- struct fb_info *info = pci_get_drvdata(par->pci_dev);
- struct backlight_device *bd;
- char name[12];
-
- if (!par->FlatPanel)
- return;
-
-#ifdef CONFIG_PMAC_BACKLIGHT
- if (!machine_is(powermac) ||
- !pmac_has_backlight_type("mnca"))
- return;
-#endif
-
- snprintf(name, sizeof(name), "nvidiabl%d", info->node);
-
- memset(&props, 0, sizeof(struct backlight_properties));
- props.type = BACKLIGHT_RAW;
- props.max_brightness = FB_BACKLIGHT_LEVELS - 1;
- bd = backlight_device_register(name, info->dev, par, &nvidia_bl_ops,
- &props);
- if (IS_ERR(bd)) {
- info->bl_dev = NULL;
- printk(KERN_WARNING "nvidia: Backlight registration failed\n");
- goto error;
- }
-
- info->bl_dev = bd;
- fb_bl_default_curve(info, 0,
- 0x158 * FB_BACKLIGHT_MAX / MAX_LEVEL,
- 0x534 * FB_BACKLIGHT_MAX / MAX_LEVEL);
-
- bd->props.brightness = bd->props.max_brightness;
- bd->props.power = FB_BLANK_UNBLANK;
- backlight_update_status(bd);
-
- printk("nvidia: Backlight initialized (%s)\n", name);
-
-error:
- return;
-}
-
-void nvidia_bl_exit(struct nvidia_par *par)
-{
- struct fb_info *info = pci_get_drvdata(par->pci_dev);
- struct backlight_device *bd = info->bl_dev;
-
- backlight_device_unregister(bd);
- printk("nvidia: Backlight unloaded\n");
-}
diff --git a/drivers/video/fbdev/nvidia/nv_dma.h b/drivers/video/fbdev/nvidia/nv_dma.h
deleted file mode 100644
index a7ed1c0acbbb..000000000000
--- a/drivers/video/fbdev/nvidia/nv_dma.h
+++ /dev/null
@@ -1,188 +0,0 @@
-
- /***************************************************************************\
-|* *|
-|* Copyright 2003 NVIDIA, Corporation. All rights reserved. *|
-|* *|
-|* NOTICE TO USER: The source code is copyrighted under U.S. and *|
-|* international laws. Users and possessors of this source code are *|
-|* hereby granted a nonexclusive, royalty-free copyright license to *|
-|* use this code in individual and commercial software. *|
-|* *|
-|* Any use of this source code must include, in the user documenta- *|
-|* tion and internal comments to the code, notices to the end user *|
-|* as follows: *|
-|* *|
-|* Copyright 2003 NVIDIA, Corporation. All rights reserved. *|
-|* *|
-|* NVIDIA, CORPORATION MAKES NO REPRESENTATION ABOUT THE SUITABILITY *|
-|* OF THIS SOURCE CODE FOR ANY PURPOSE. IT IS PROVIDED "AS IS" *|
-|* WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND. NVIDIA, CORPOR- *|
-|* ATION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOURCE CODE, *|
-|* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGE- *|
-|* MENT, AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL *|
-|* NVIDIA, CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT, INCI- *|
-|* DENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RE- *|
-|* SULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION *|
-|* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF *|
-|* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOURCE CODE. *|
-|* *|
-|* U.S. Government End Users. This source code is a "commercial *|
-|* item," as that term is defined at 48 C.F.R. 2.101 (OCT 1995), *|
-|* consisting of "commercial computer software" and "commercial *|
-|* computer software documentation," as such terms are used in *|
-|* 48 C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Govern- *|
-|* ment only as a commercial end item. Consistent with 48 C.F.R. *|
-|* 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), *|
-|* all U.S. Government End Users acquire the source code with only *|
-|* those rights set forth herein. *|
-|* *|
- \***************************************************************************/
-
-/*
- * GPL Licensing Note - According to Mark Vojkovich, author of the Xorg/
- * XFree86 'nv' driver, this source code is provided under MIT-style licensing
- * where the source code is provided "as is" without warranty of any kind.
- * The only usage restriction is for the copyright notices to be retained
- * whenever code is used.
- *
- * Antonino Daplas <adaplas@pol.net> 2005-03-11
- */
-
-#define SURFACE_FORMAT 0x00000300
-#define SURFACE_FORMAT_DEPTH8 0x00000001
-#define SURFACE_FORMAT_DEPTH15 0x00000002
-#define SURFACE_FORMAT_DEPTH16 0x00000004
-#define SURFACE_FORMAT_DEPTH24 0x00000006
-#define SURFACE_PITCH 0x00000304
-#define SURFACE_PITCH_SRC 15:0
-#define SURFACE_PITCH_DST 31:16
-#define SURFACE_OFFSET_SRC 0x00000308
-#define SURFACE_OFFSET_DST 0x0000030C
-
-#define ROP_SET 0x00002300
-
-#define PATTERN_FORMAT 0x00004300
-#define PATTERN_FORMAT_DEPTH8 0x00000003
-#define PATTERN_FORMAT_DEPTH16 0x00000001
-#define PATTERN_FORMAT_DEPTH24 0x00000003
-#define PATTERN_COLOR_0 0x00004310
-#define PATTERN_COLOR_1 0x00004314
-#define PATTERN_PATTERN_0 0x00004318
-#define PATTERN_PATTERN_1 0x0000431C
-
-#define CLIP_POINT 0x00006300
-#define CLIP_POINT_X 15:0
-#define CLIP_POINT_Y 31:16
-#define CLIP_SIZE 0x00006304
-#define CLIP_SIZE_WIDTH 15:0
-#define CLIP_SIZE_HEIGHT 31:16
-
-#define LINE_FORMAT 0x00008300
-#define LINE_FORMAT_DEPTH8 0x00000003
-#define LINE_FORMAT_DEPTH16 0x00000001
-#define LINE_FORMAT_DEPTH24 0x00000003
-#define LINE_COLOR 0x00008304
-#define LINE_MAX_LINES 16
-#define LINE_LINES(i) 0x00008400\
- +(i)*8
-#define LINE_LINES_POINT0_X 15:0
-#define LINE_LINES_POINT0_Y 31:16
-#define LINE_LINES_POINT1_X 47:32
-#define LINE_LINES_POINT1_Y 63:48
-
-#define BLIT_POINT_SRC 0x0000A300
-#define BLIT_POINT_SRC_X 15:0
-#define BLIT_POINT_SRC_Y 31:16
-#define BLIT_POINT_DST 0x0000A304
-#define BLIT_POINT_DST_X 15:0
-#define BLIT_POINT_DST_Y 31:16
-#define BLIT_SIZE 0x0000A308
-#define BLIT_SIZE_WIDTH 15:0
-#define BLIT_SIZE_HEIGHT 31:16
-
-#define RECT_FORMAT 0x0000C300
-#define RECT_FORMAT_DEPTH8 0x00000003
-#define RECT_FORMAT_DEPTH16 0x00000001
-#define RECT_FORMAT_DEPTH24 0x00000003
-#define RECT_SOLID_COLOR 0x0000C3FC
-#define RECT_SOLID_RECTS_MAX_RECTS 32
-#define RECT_SOLID_RECTS(i) 0x0000C400\
- +(i)*8
-#define RECT_SOLID_RECTS_Y 15:0
-#define RECT_SOLID_RECTS_X 31:16
-#define RECT_SOLID_RECTS_HEIGHT 47:32
-#define RECT_SOLID_RECTS_WIDTH 63:48
-
-#define RECT_EXPAND_ONE_COLOR_CLIP 0x0000C7EC
-#define RECT_EXPAND_ONE_COLOR_CLIP_POINT0_X 15:0
-#define RECT_EXPAND_ONE_COLOR_CLIP_POINT0_Y 31:16
-#define RECT_EXPAND_ONE_COLOR_CLIP_POINT1_X 47:32
-#define RECT_EXPAND_ONE_COLOR_CLIP_POINT1_Y 63:48
-#define RECT_EXPAND_ONE_COLOR_COLOR 0x0000C7F4
-#define RECT_EXPAND_ONE_COLOR_SIZE 0x0000C7F8
-#define RECT_EXPAND_ONE_COLOR_SIZE_WIDTH 15:0
-#define RECT_EXPAND_ONE_COLOR_SIZE_HEIGHT 31:16
-#define RECT_EXPAND_ONE_COLOR_POINT 0x0000C7FC
-#define RECT_EXPAND_ONE_COLOR_POINT_X 15:0
-#define RECT_EXPAND_ONE_COLOR_POINT_Y 31:16
-#define RECT_EXPAND_ONE_COLOR_DATA_MAX_DWORDS 128
-#define RECT_EXPAND_ONE_COLOR_DATA(i) 0x0000C800\
- +(i)*4
-
-#define RECT_EXPAND_TWO_COLOR_CLIP 0x0000CBE4
-#define RECT_EXPAND_TWO_COLOR_CLIP_POINT0_X 15:0
-#define RECT_EXPAND_TWO_COLOR_CLIP_POINT0_Y 31:16
-#define RECT_EXPAND_TWO_COLOR_CLIP_POINT1_X 47:32
-#define RECT_EXPAND_TWO_COLOR_CLIP_POINT1_Y 63:48
-#define RECT_EXPAND_TWO_COLOR_COLOR_0 0x0000CBEC
-#define RECT_EXPAND_TWO_COLOR_COLOR_1 0x0000CBF0
-#define RECT_EXPAND_TWO_COLOR_SIZE_IN 0x0000CBF4
-#define RECT_EXPAND_TWO_COLOR_SIZE_IN_WIDTH 15:0
-#define RECT_EXPAND_TWO_COLOR_SIZE_IN_HEIGHT 31:16
-#define RECT_EXPAND_TWO_COLOR_SIZE_OUT 0x0000CBF8
-#define RECT_EXPAND_TWO_COLOR_SIZE_OUT_WIDTH 15:0
-#define RECT_EXPAND_TWO_COLOR_SIZE_OUT_HEIGHT 31:16
-#define RECT_EXPAND_TWO_COLOR_POINT 0x0000CBFC
-#define RECT_EXPAND_TWO_COLOR_POINT_X 15:0
-#define RECT_EXPAND_TWO_COLOR_POINT_Y 31:16
-#define RECT_EXPAND_TWO_COLOR_DATA_MAX_DWORDS 128
-#define RECT_EXPAND_TWO_COLOR_DATA(i) 0x0000CC00\
- +(i)*4
-
-#define STRETCH_BLIT_FORMAT 0x0000E300
-#define STRETCH_BLIT_FORMAT_DEPTH8 0x00000004
-#define STRETCH_BLIT_FORMAT_DEPTH16 0x00000007
-#define STRETCH_BLIT_FORMAT_DEPTH24 0x00000004
-#define STRETCH_BLIT_FORMAT_X8R8G8B8 0x00000004
-#define STRETCH_BLIT_FORMAT_YUYV 0x00000005
-#define STRETCH_BLIT_FORMAT_UYVY 0x00000006
-#define STRETCH_BLIT_CLIP_POINT 0x0000E308
-#define STRETCH_BLIT_CLIP_POINT_X 15:0
-#define STRETCH_BLIT_CLIP_POINT_Y 31:16
-#define STRETCH_BLIT_CLIP_POINT 0x0000E308
-#define STRETCH_BLIT_CLIP_SIZE 0x0000E30C
-#define STRETCH_BLIT_CLIP_SIZE_WIDTH 15:0
-#define STRETCH_BLIT_CLIP_SIZE_HEIGHT 31:16
-#define STRETCH_BLIT_DST_POINT 0x0000E310
-#define STRETCH_BLIT_DST_POINT_X 15:0
-#define STRETCH_BLIT_DST_POINT_Y 31:16
-#define STRETCH_BLIT_DST_SIZE 0x0000E314
-#define STRETCH_BLIT_DST_SIZE_WIDTH 15:0
-#define STRETCH_BLIT_DST_SIZE_HEIGHT 31:16
-#define STRETCH_BLIT_DU_DX 0x0000E318
-#define STRETCH_BLIT_DV_DY 0x0000E31C
-#define STRETCH_BLIT_SRC_SIZE 0x0000E400
-#define STRETCH_BLIT_SRC_SIZE_WIDTH 15:0
-#define STRETCH_BLIT_SRC_SIZE_HEIGHT 31:16
-#define STRETCH_BLIT_SRC_FORMAT 0x0000E404
-#define STRETCH_BLIT_SRC_FORMAT_PITCH 15:0
-#define STRETCH_BLIT_SRC_FORMAT_ORIGIN 23:16
-#define STRETCH_BLIT_SRC_FORMAT_ORIGIN_CENTER 0x00000001
-#define STRETCH_BLIT_SRC_FORMAT_ORIGIN_CORNER 0x00000002
-#define STRETCH_BLIT_SRC_FORMAT_FILTER 31:24
-#define STRETCH_BLIT_SRC_FORMAT_FILTER_POINT_SAMPLE 0x00000000
-#define STRETCH_BLIT_SRC_FORMAT_FILTER_BILINEAR 0x00000001
-#define STRETCH_BLIT_SRC_OFFSET 0x0000E408
-#define STRETCH_BLIT_SRC_POINT 0x0000E40C
-#define STRETCH_BLIT_SRC_POINT_U 15:0
-#define STRETCH_BLIT_SRC_POINT_V 31:16
diff --git a/drivers/video/fbdev/nvidia/nv_hw.c b/drivers/video/fbdev/nvidia/nv_hw.c
deleted file mode 100644
index 9b0a324bb1b4..000000000000
--- a/drivers/video/fbdev/nvidia/nv_hw.c
+++ /dev/null
@@ -1,1688 +0,0 @@
- /***************************************************************************\
-|* *|
-|* Copyright 1993-2003 NVIDIA, Corporation. All rights reserved. *|
-|* *|
-|* NOTICE TO USER: The source code is copyrighted under U.S. and *|
-|* international laws. Users and possessors of this source code are *|
-|* hereby granted a nonexclusive, royalty-free copyright license to *|
-|* use this code in individual and commercial software. *|
-|* *|
-|* Any use of this source code must include, in the user documenta- *|
-|* tion and internal comments to the code, notices to the end user *|
-|* as follows: *|
-|* *|
-|* Copyright 1993-2003 NVIDIA, Corporation. All rights reserved. *|
-|* *|
-|* NVIDIA, CORPORATION MAKES NO REPRESENTATION ABOUT THE SUITABILITY *|
-|* OF THIS SOURCE CODE FOR ANY PURPOSE. IT IS PROVIDED "AS IS" *|
-|* WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND. NVIDIA, CORPOR- *|
-|* ATION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOURCE CODE, *|
-|* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGE- *|
-|* MENT, AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL *|
-|* NVIDIA, CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT, INCI- *|
-|* DENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RE- *|
-|* SULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION *|
-|* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF *|
-|* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOURCE CODE. *|
-|* *|
-|* U.S. Government End Users. This source code is a "commercial *|
-|* item," as that term is defined at 48 C.F.R. 2.101 (OCT 1995), *|
-|* consisting of "commercial computer software" and "commercial *|
-|* computer software documentation," as such terms are used in *|
-|* 48 C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Govern- *|
-|* ment only as a commercial end item. Consistent with 48 C.F.R. *|
-|* 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), *|
-|* all U.S. Government End Users acquire the source code with only *|
-|* those rights set forth herein. *|
-|* *|
- \***************************************************************************/
-
-/*
- * GPL Licensing Note - According to Mark Vojkovich, author of the Xorg/
- * XFree86 'nv' driver, this source code is provided under MIT-style licensing
- * where the source code is provided "as is" without warranty of any kind.
- * The only usage restriction is for the copyright notices to be retained
- * whenever code is used.
- *
- * Antonino Daplas <adaplas@pol.net> 2005-03-11
- */
-
-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_hw.c,v 1.4 2003/11/03 05:11:25 tsi Exp $ */
-
-#include <linux/pci.h>
-#include "nv_type.h"
-#include "nv_local.h"
-#include "nv_proto.h"
-
-void NVLockUnlock(struct nvidia_par *par, int Lock)
-{
- u8 cr11;
-
- VGA_WR08(par->PCIO, 0x3D4, 0x1F);
- VGA_WR08(par->PCIO, 0x3D5, Lock ? 0x99 : 0x57);
-
- VGA_WR08(par->PCIO, 0x3D4, 0x11);
- cr11 = VGA_RD08(par->PCIO, 0x3D5);
- if (Lock)
- cr11 |= 0x80;
- else
- cr11 &= ~0x80;
- VGA_WR08(par->PCIO, 0x3D5, cr11);
-}
-
-int NVShowHideCursor(struct nvidia_par *par, int ShowHide)
-{
- int cur = par->CurrentState->cursor1;
-
- par->CurrentState->cursor1 = (par->CurrentState->cursor1 & 0xFE) |
- (ShowHide & 0x01);
- VGA_WR08(par->PCIO, 0x3D4, 0x31);
- VGA_WR08(par->PCIO, 0x3D5, par->CurrentState->cursor1);
-
- if (par->Architecture == NV_ARCH_40)
- NV_WR32(par->PRAMDAC, 0x0300, NV_RD32(par->PRAMDAC, 0x0300));
-
- return (cur & 0x01);
-}
-
-/****************************************************************************\
-* *
-* The video arbitration routines calculate some "magic" numbers. Fixes *
-* the snow seen when accessing the framebuffer without it. *
-* It just works (I hope). *
-* *
-\****************************************************************************/
-
-typedef struct {
- int graphics_lwm;
- int video_lwm;
- int graphics_burst_size;
- int video_burst_size;
- int valid;
-} nv4_fifo_info;
-
-typedef struct {
- int pclk_khz;
- int mclk_khz;
- int nvclk_khz;
- char mem_page_miss;
- char mem_latency;
- int memory_width;
- char enable_video;
- char gr_during_vid;
- char pix_bpp;
- char mem_aligned;
- char enable_mp;
-} nv4_sim_state;
-
-typedef struct {
- int graphics_lwm;
- int video_lwm;
- int graphics_burst_size;
- int video_burst_size;
- int valid;
-} nv10_fifo_info;
-
-typedef struct {
- int pclk_khz;
- int mclk_khz;
- int nvclk_khz;
- char mem_page_miss;
- char mem_latency;
- u32 memory_type;
- int memory_width;
- char enable_video;
- char gr_during_vid;
- char pix_bpp;
- char mem_aligned;
- char enable_mp;
-} nv10_sim_state;
-
-static void nvGetClocks(struct nvidia_par *par, unsigned int *MClk,
- unsigned int *NVClk)
-{
- unsigned int pll, N, M, MB, NB, P;
-
- if (par->Architecture >= NV_ARCH_40) {
- pll = NV_RD32(par->PMC, 0x4020);
- P = (pll >> 16) & 0x07;
- pll = NV_RD32(par->PMC, 0x4024);
- M = pll & 0xFF;
- N = (pll >> 8) & 0xFF;
- if (((par->Chipset & 0xfff0) == 0x0290) ||
- ((par->Chipset & 0xfff0) == 0x0390)) {
- MB = 1;
- NB = 1;
- } else {
- MB = (pll >> 16) & 0xFF;
- NB = (pll >> 24) & 0xFF;
- }
- *MClk = ((N * NB * par->CrystalFreqKHz) / (M * MB)) >> P;
-
- pll = NV_RD32(par->PMC, 0x4000);
- P = (pll >> 16) & 0x07;
- pll = NV_RD32(par->PMC, 0x4004);
- M = pll & 0xFF;
- N = (pll >> 8) & 0xFF;
- MB = (pll >> 16) & 0xFF;
- NB = (pll >> 24) & 0xFF;
-
- *NVClk = ((N * NB * par->CrystalFreqKHz) / (M * MB)) >> P;
- } else if (par->twoStagePLL) {
- pll = NV_RD32(par->PRAMDAC0, 0x0504);
- M = pll & 0xFF;
- N = (pll >> 8) & 0xFF;
- P = (pll >> 16) & 0x0F;
- pll = NV_RD32(par->PRAMDAC0, 0x0574);
- if (pll & 0x80000000) {
- MB = pll & 0xFF;
- NB = (pll >> 8) & 0xFF;
- } else {
- MB = 1;
- NB = 1;
- }
- *MClk = ((N * NB * par->CrystalFreqKHz) / (M * MB)) >> P;
-
- pll = NV_RD32(par->PRAMDAC0, 0x0500);
- M = pll & 0xFF;
- N = (pll >> 8) & 0xFF;
- P = (pll >> 16) & 0x0F;
- pll = NV_RD32(par->PRAMDAC0, 0x0570);
- if (pll & 0x80000000) {
- MB = pll & 0xFF;
- NB = (pll >> 8) & 0xFF;
- } else {
- MB = 1;
- NB = 1;
- }
- *NVClk = ((N * NB * par->CrystalFreqKHz) / (M * MB)) >> P;
- } else
- if (((par->Chipset & 0x0ff0) == 0x0300) ||
- ((par->Chipset & 0x0ff0) == 0x0330)) {
- pll = NV_RD32(par->PRAMDAC0, 0x0504);
- M = pll & 0x0F;
- N = (pll >> 8) & 0xFF;
- P = (pll >> 16) & 0x07;
- if (pll & 0x00000080) {
- MB = (pll >> 4) & 0x07;
- NB = (pll >> 19) & 0x1f;
- } else {
- MB = 1;
- NB = 1;
- }
- *MClk = ((N * NB * par->CrystalFreqKHz) / (M * MB)) >> P;
-
- pll = NV_RD32(par->PRAMDAC0, 0x0500);
- M = pll & 0x0F;
- N = (pll >> 8) & 0xFF;
- P = (pll >> 16) & 0x07;
- if (pll & 0x00000080) {
- MB = (pll >> 4) & 0x07;
- NB = (pll >> 19) & 0x1f;
- } else {
- MB = 1;
- NB = 1;
- }
- *NVClk = ((N * NB * par->CrystalFreqKHz) / (M * MB)) >> P;
- } else {
- pll = NV_RD32(par->PRAMDAC0, 0x0504);
- M = pll & 0xFF;
- N = (pll >> 8) & 0xFF;
- P = (pll >> 16) & 0x0F;
- *MClk = (N * par->CrystalFreqKHz / M) >> P;
-
- pll = NV_RD32(par->PRAMDAC0, 0x0500);
- M = pll & 0xFF;
- N = (pll >> 8) & 0xFF;
- P = (pll >> 16) & 0x0F;
- *NVClk = (N * par->CrystalFreqKHz / M) >> P;
- }
-}
-
-static void nv4CalcArbitration(nv4_fifo_info * fifo, nv4_sim_state * arb)
-{
- int data, pagemiss, cas, width, video_enable, bpp;
- int nvclks, mclks, pclks, vpagemiss, crtpagemiss, vbs;
- int found, mclk_extra, mclk_loop, cbs, m1, p1;
- int mclk_freq, pclk_freq, nvclk_freq, mp_enable;
- int us_m, us_n, us_p, video_drain_rate, crtc_drain_rate;
- int vpm_us, us_video, vlwm, video_fill_us, cpm_us, us_crt, clwm;
-
- fifo->valid = 1;
- pclk_freq = arb->pclk_khz;
- mclk_freq = arb->mclk_khz;
- nvclk_freq = arb->nvclk_khz;
- pagemiss = arb->mem_page_miss;
- cas = arb->mem_latency;
- width = arb->memory_width >> 6;
- video_enable = arb->enable_video;
- bpp = arb->pix_bpp;
- mp_enable = arb->enable_mp;
- clwm = 0;
- vlwm = 0;
- cbs = 128;
- pclks = 2;
- nvclks = 2;
- nvclks += 2;
- nvclks += 1;
- mclks = 5;
- mclks += 3;
- mclks += 1;
- mclks += cas;
- mclks += 1;
- mclks += 1;
- mclks += 1;
- mclks += 1;
- mclk_extra = 3;
- nvclks += 2;
- nvclks += 1;
- nvclks += 1;
- nvclks += 1;
- if (mp_enable)
- mclks += 4;
- nvclks += 0;
- pclks += 0;
- found = 0;
- vbs = 0;
- while (found != 1) {
- fifo->valid = 1;
- found = 1;
- mclk_loop = mclks + mclk_extra;
- us_m = mclk_loop * 1000 * 1000 / mclk_freq;
- us_n = nvclks * 1000 * 1000 / nvclk_freq;
- us_p = nvclks * 1000 * 1000 / pclk_freq;
- if (video_enable) {
- video_drain_rate = pclk_freq * 2;
- crtc_drain_rate = pclk_freq * bpp / 8;
- vpagemiss = 2;
- vpagemiss += 1;
- crtpagemiss = 2;
- vpm_us =
- (vpagemiss * pagemiss) * 1000 * 1000 / mclk_freq;
- if (nvclk_freq * 2 > mclk_freq * width)
- video_fill_us =
- cbs * 1000 * 1000 / 16 / nvclk_freq;
- else
- video_fill_us =
- cbs * 1000 * 1000 / (8 * width) /
- mclk_freq;
- us_video = vpm_us + us_m + us_n + us_p + video_fill_us;
- vlwm = us_video * video_drain_rate / (1000 * 1000);
- vlwm++;
- vbs = 128;
- if (vlwm > 128)
- vbs = 64;
- if (vlwm > (256 - 64))
- vbs = 32;
- if (nvclk_freq * 2 > mclk_freq * width)
- video_fill_us =
- vbs * 1000 * 1000 / 16 / nvclk_freq;
- else
- video_fill_us =
- vbs * 1000 * 1000 / (8 * width) /
- mclk_freq;
- cpm_us =
- crtpagemiss * pagemiss * 1000 * 1000 / mclk_freq;
- us_crt =
- us_video + video_fill_us + cpm_us + us_m + us_n +
- us_p;
- clwm = us_crt * crtc_drain_rate / (1000 * 1000);
- clwm++;
- } else {
- crtc_drain_rate = pclk_freq * bpp / 8;
- crtpagemiss = 2;
- crtpagemiss += 1;
- cpm_us =
- crtpagemiss * pagemiss * 1000 * 1000 / mclk_freq;
- us_crt = cpm_us + us_m + us_n + us_p;
- clwm = us_crt * crtc_drain_rate / (1000 * 1000);
- clwm++;
- }
- m1 = clwm + cbs - 512;
- p1 = m1 * pclk_freq / mclk_freq;
- p1 = p1 * bpp / 8;
- if ((p1 < m1) && (m1 > 0)) {
- fifo->valid = 0;
- found = 0;
- if (mclk_extra == 0)
- found = 1;
- mclk_extra--;
- } else if (video_enable) {
- if ((clwm > 511) || (vlwm > 255)) {
- fifo->valid = 0;
- found = 0;
- if (mclk_extra == 0)
- found = 1;
- mclk_extra--;
- }
- } else {
- if (clwm > 519) {
- fifo->valid = 0;
- found = 0;
- if (mclk_extra == 0)
- found = 1;
- mclk_extra--;
- }
- }
- if (clwm < 384)
- clwm = 384;
- if (vlwm < 128)
- vlwm = 128;
- data = (int)(clwm);
- fifo->graphics_lwm = data;
- fifo->graphics_burst_size = 128;
- data = (int)((vlwm + 15));
- fifo->video_lwm = data;
- fifo->video_burst_size = vbs;
- }
-}
-
-static void nv4UpdateArbitrationSettings(unsigned VClk,
- unsigned pixelDepth,
- unsigned *burst,
- unsigned *lwm, struct nvidia_par *par)
-{
- nv4_fifo_info fifo_data;
- nv4_sim_state sim_data;
- unsigned int MClk, NVClk, cfg1;
-
- nvGetClocks(par, &MClk, &NVClk);
-
- cfg1 = NV_RD32(par->PFB, 0x00000204);
- sim_data.pix_bpp = (char)pixelDepth;
- sim_data.enable_video = 0;
- sim_data.enable_mp = 0;
- sim_data.memory_width = (NV_RD32(par->PEXTDEV, 0x0000) & 0x10) ?
- 128 : 64;
- sim_data.mem_latency = (char)cfg1 & 0x0F;
- sim_data.mem_aligned = 1;
- sim_data.mem_page_miss =
- (char)(((cfg1 >> 4) & 0x0F) + ((cfg1 >> 31) & 0x01));
- sim_data.gr_during_vid = 0;
- sim_data.pclk_khz = VClk;
- sim_data.mclk_khz = MClk;
- sim_data.nvclk_khz = NVClk;
- nv4CalcArbitration(&fifo_data, &sim_data);
- if (fifo_data.valid) {
- int b = fifo_data.graphics_burst_size >> 4;
- *burst = 0;
- while (b >>= 1)
- (*burst)++;
- *lwm = fifo_data.graphics_lwm >> 3;
- }
-}
-
-static void nv10CalcArbitration(nv10_fifo_info * fifo, nv10_sim_state * arb)
-{
- int data, pagemiss, width, video_enable, bpp;
- int nvclks, mclks, pclks, vpagemiss, crtpagemiss;
- int nvclk_fill;
- int found, mclk_extra, mclk_loop, cbs, m1;
- int mclk_freq, pclk_freq, nvclk_freq, mp_enable;
- int us_m, us_m_min, us_n, us_p, crtc_drain_rate;
- int vus_m;
- int vpm_us, us_video, cpm_us, us_crt, clwm;
- int clwm_rnd_down;
- int m2us, us_pipe_min, p1clk, p2;
- int min_mclk_extra;
- int us_min_mclk_extra;
-
- fifo->valid = 1;
- pclk_freq = arb->pclk_khz; /* freq in KHz */
- mclk_freq = arb->mclk_khz;
- nvclk_freq = arb->nvclk_khz;
- pagemiss = arb->mem_page_miss;
- width = arb->memory_width / 64;
- video_enable = arb->enable_video;
- bpp = arb->pix_bpp;
- mp_enable = arb->enable_mp;
- clwm = 0;
-
- cbs = 512;
-
- pclks = 4; /* lwm detect. */
-
- nvclks = 3; /* lwm -> sync. */
- nvclks += 2; /* fbi bus cycles (1 req + 1 busy) */
- /* 2 edge sync. may be very close to edge so just put one. */
- mclks = 1;
- mclks += 1; /* arb_hp_req */
- mclks += 5; /* ap_hp_req tiling pipeline */
-
- mclks += 2; /* tc_req latency fifo */
- mclks += 2; /* fb_cas_n_ memory request to fbio block */
- mclks += 7; /* sm_d_rdv data returned from fbio block */
-
- /* fb.rd.d.Put_gc need to accumulate 256 bits for read */
- if (arb->memory_type == 0)
- if (arb->memory_width == 64) /* 64 bit bus */
- mclks += 4;
- else
- mclks += 2;
- else if (arb->memory_width == 64) /* 64 bit bus */
- mclks += 2;
- else
- mclks += 1;
-
- if ((!video_enable) && (arb->memory_width == 128)) {
- mclk_extra = (bpp == 32) ? 31 : 42; /* Margin of error */
- min_mclk_extra = 17;
- } else {
- mclk_extra = (bpp == 32) ? 8 : 4; /* Margin of error */
- /* mclk_extra = 4; *//* Margin of error */
- min_mclk_extra = 18;
- }
-
- /* 2 edge sync. may be very close to edge so just put one. */
- nvclks += 1;
- nvclks += 1; /* fbi_d_rdv_n */
- nvclks += 1; /* Fbi_d_rdata */
- nvclks += 1; /* crtfifo load */
-
- if (mp_enable)
- mclks += 4; /* Mp can get in with a burst of 8. */
- /* Extra clocks determined by heuristics */
-
- nvclks += 0;
- pclks += 0;
- found = 0;
- while (found != 1) {
- fifo->valid = 1;
- found = 1;
- mclk_loop = mclks + mclk_extra;
- /* Mclk latency in us */
- us_m = mclk_loop * 1000 * 1000 / mclk_freq;
- /* Minimum Mclk latency in us */
- us_m_min = mclks * 1000 * 1000 / mclk_freq;
- us_min_mclk_extra = min_mclk_extra * 1000 * 1000 / mclk_freq;
- /* nvclk latency in us */
- us_n = nvclks * 1000 * 1000 / nvclk_freq;
- /* nvclk latency in us */
- us_p = pclks * 1000 * 1000 / pclk_freq;
- us_pipe_min = us_m_min + us_n + us_p;
-
- /* Mclk latency in us */
- vus_m = mclk_loop * 1000 * 1000 / mclk_freq;
-
- if (video_enable) {
- crtc_drain_rate = pclk_freq * bpp / 8; /* MB/s */
-
- vpagemiss = 1; /* self generating page miss */
- vpagemiss += 1; /* One higher priority before */
-
- crtpagemiss = 2; /* self generating page miss */
- if (mp_enable)
- crtpagemiss += 1; /* if MA0 conflict */
-
- vpm_us =
- (vpagemiss * pagemiss) * 1000 * 1000 / mclk_freq;
-
- /* Video has separate read return path */
- us_video = vpm_us + vus_m;
-
- cpm_us =
- crtpagemiss * pagemiss * 1000 * 1000 / mclk_freq;
- /* Wait for video */
- us_crt = us_video
- + cpm_us /* CRT Page miss */
- + us_m + us_n + us_p /* other latency */
- ;
-
- clwm = us_crt * crtc_drain_rate / (1000 * 1000);
- /* fixed point <= float_point - 1. Fixes that */
- clwm++;
- } else {
- /* bpp * pclk/8 */
- crtc_drain_rate = pclk_freq * bpp / 8;
-
- crtpagemiss = 1; /* self generating page miss */
- crtpagemiss += 1; /* MA0 page miss */
- if (mp_enable)
- crtpagemiss += 1; /* if MA0 conflict */
- cpm_us =
- crtpagemiss * pagemiss * 1000 * 1000 / mclk_freq;
- us_crt = cpm_us + us_m + us_n + us_p;
- clwm = us_crt * crtc_drain_rate / (1000 * 1000);
- /* fixed point <= float_point - 1. Fixes that */
- clwm++;
-
- /* Finally, a heuristic check when width == 64 bits */
- if (width == 1) {
- nvclk_fill = nvclk_freq * 8;
- if (crtc_drain_rate * 100 >= nvclk_fill * 102)
- /*Large number to fail */
- clwm = 0xfff;
-
- else if (crtc_drain_rate * 100 >=
- nvclk_fill * 98) {
- clwm = 1024;
- cbs = 512;
- }
- }
- }
-
- /*
- Overfill check:
- */
-
- clwm_rnd_down = ((int)clwm / 8) * 8;
- if (clwm_rnd_down < clwm)
- clwm += 8;
-
- m1 = clwm + cbs - 1024; /* Amount of overfill */
- m2us = us_pipe_min + us_min_mclk_extra;
-
- /* pclk cycles to drain */
- p1clk = m2us * pclk_freq / (1000 * 1000);
- p2 = p1clk * bpp / 8; /* bytes drained. */
-
- if ((p2 < m1) && (m1 > 0)) {
- fifo->valid = 0;
- found = 0;
- if (min_mclk_extra == 0) {
- if (cbs <= 32) {
- /* Can't adjust anymore! */
- found = 1;
- } else {
- /* reduce the burst size */
- cbs = cbs / 2;
- }
- } else {
- min_mclk_extra--;
- }
- } else {
- if (clwm > 1023) { /* Have some margin */
- fifo->valid = 0;
- found = 0;
- if (min_mclk_extra == 0)
- /* Can't adjust anymore! */
- found = 1;
- else
- min_mclk_extra--;
- }
- }
-
- if (clwm < (1024 - cbs + 8))
- clwm = 1024 - cbs + 8;
- data = (int)(clwm);
- /* printf("CRT LWM: %f bytes, prog: 0x%x, bs: 256\n",
- clwm, data ); */
- fifo->graphics_lwm = data;
- fifo->graphics_burst_size = cbs;
-
- fifo->video_lwm = 1024;
- fifo->video_burst_size = 512;
- }
-}
-
-static void nv10UpdateArbitrationSettings(unsigned VClk,
- unsigned pixelDepth,
- unsigned *burst,
- unsigned *lwm,
- struct nvidia_par *par)
-{
- nv10_fifo_info fifo_data;
- nv10_sim_state sim_data;
- unsigned int MClk, NVClk, cfg1;
-
- nvGetClocks(par, &MClk, &NVClk);
-
- cfg1 = NV_RD32(par->PFB, 0x0204);
- sim_data.pix_bpp = (char)pixelDepth;
- sim_data.enable_video = 1;
- sim_data.enable_mp = 0;
- sim_data.memory_type = (NV_RD32(par->PFB, 0x0200) & 0x01) ? 1 : 0;
- sim_data.memory_width = (NV_RD32(par->PEXTDEV, 0x0000) & 0x10) ?
- 128 : 64;
- sim_data.mem_latency = (char)cfg1 & 0x0F;
- sim_data.mem_aligned = 1;
- sim_data.mem_page_miss =
- (char)(((cfg1 >> 4) & 0x0F) + ((cfg1 >> 31) & 0x01));
- sim_data.gr_during_vid = 0;
- sim_data.pclk_khz = VClk;
- sim_data.mclk_khz = MClk;
- sim_data.nvclk_khz = NVClk;
- nv10CalcArbitration(&fifo_data, &sim_data);
- if (fifo_data.valid) {
- int b = fifo_data.graphics_burst_size >> 4;
- *burst = 0;
- while (b >>= 1)
- (*burst)++;
- *lwm = fifo_data.graphics_lwm >> 3;
- }
-}
-
-static void nv30UpdateArbitrationSettings (
- struct nvidia_par *par,
- unsigned int *burst,
- unsigned int *lwm
-)
-{
- unsigned int MClk, NVClk;
- unsigned int fifo_size, burst_size, graphics_lwm;
-
- fifo_size = 2048;
- burst_size = 512;
- graphics_lwm = fifo_size - burst_size;
-
- nvGetClocks(par, &MClk, &NVClk);
-
- *burst = 0;
- burst_size >>= 5;
- while(burst_size >>= 1) (*burst)++;
- *lwm = graphics_lwm >> 3;
-}
-
-static void nForceUpdateArbitrationSettings(unsigned VClk,
- unsigned pixelDepth,
- unsigned *burst,
- unsigned *lwm,
- struct nvidia_par *par)
-{
- nv10_fifo_info fifo_data;
- nv10_sim_state sim_data;
- unsigned int M, N, P, pll, MClk, NVClk, memctrl;
- struct pci_dev *dev;
- int domain = pci_domain_nr(par->pci_dev->bus);
-
- if ((par->Chipset & 0x0FF0) == 0x01A0) {
- unsigned int uMClkPostDiv;
- dev = pci_get_domain_bus_and_slot(domain, 0, 3);
- pci_read_config_dword(dev, 0x6C, &uMClkPostDiv);
- uMClkPostDiv = (uMClkPostDiv >> 8) & 0xf;
-
- if (!uMClkPostDiv)
- uMClkPostDiv = 4;
- MClk = 400000 / uMClkPostDiv;
- } else {
- dev = pci_get_domain_bus_and_slot(domain, 0, 5);
- pci_read_config_dword(dev, 0x4c, &MClk);
- MClk /= 1000;
- }
- pci_dev_put(dev);
- pll = NV_RD32(par->PRAMDAC0, 0x0500);
- M = (pll >> 0) & 0xFF;
- N = (pll >> 8) & 0xFF;
- P = (pll >> 16) & 0x0F;
- NVClk = (N * par->CrystalFreqKHz / M) >> P;
- sim_data.pix_bpp = (char)pixelDepth;
- sim_data.enable_video = 0;
- sim_data.enable_mp = 0;
- dev = pci_get_domain_bus_and_slot(domain, 0, 1);
- pci_read_config_dword(dev, 0x7C, &sim_data.memory_type);
- pci_dev_put(dev);
- sim_data.memory_type = (sim_data.memory_type >> 12) & 1;
- sim_data.memory_width = 64;
-
- dev = pci_get_domain_bus_and_slot(domain, 0, 3);
- pci_read_config_dword(dev, 0, &memctrl);
- pci_dev_put(dev);
- memctrl >>= 16;
-
- if ((memctrl == 0x1A9) || (memctrl == 0x1AB) || (memctrl == 0x1ED)) {
- u32 dimm[3];
-
- dev = pci_get_domain_bus_and_slot(domain, 0, 2);
- pci_read_config_dword(dev, 0x40, &dimm[0]);
- dimm[0] = (dimm[0] >> 8) & 0x4f;
- pci_read_config_dword(dev, 0x44, &dimm[1]);
- dimm[1] = (dimm[1] >> 8) & 0x4f;
- pci_read_config_dword(dev, 0x48, &dimm[2]);
- dimm[2] = (dimm[2] >> 8) & 0x4f;
-
- if ((dimm[0] + dimm[1]) != dimm[2]) {
- printk("nvidiafb: your nForce DIMMs are not arranged "
- "in optimal banks!\n");
- }
- pci_dev_put(dev);
- }
-
- sim_data.mem_latency = 3;
- sim_data.mem_aligned = 1;
- sim_data.mem_page_miss = 10;
- sim_data.gr_during_vid = 0;
- sim_data.pclk_khz = VClk;
- sim_data.mclk_khz = MClk;
- sim_data.nvclk_khz = NVClk;
- nv10CalcArbitration(&fifo_data, &sim_data);
- if (fifo_data.valid) {
- int b = fifo_data.graphics_burst_size >> 4;
- *burst = 0;
- while (b >>= 1)
- (*burst)++;
- *lwm = fifo_data.graphics_lwm >> 3;
- }
-}
-
-/****************************************************************************\
-* *
-* RIVA Mode State Routines *
-* *
-\****************************************************************************/
-
-/*
- * Calculate the Video Clock parameters for the PLL.
- */
-static void CalcVClock(int clockIn,
- int *clockOut, u32 * pllOut, struct nvidia_par *par)
-{
- unsigned lowM, highM;
- unsigned DeltaNew, DeltaOld;
- unsigned VClk, Freq;
- unsigned M, N, P;
-
- DeltaOld = 0xFFFFFFFF;
-
- VClk = (unsigned)clockIn;
-
- if (par->CrystalFreqKHz == 13500) {
- lowM = 7;
- highM = 13;
- } else {
- lowM = 8;
- highM = 14;
- }
-
- for (P = 0; P <= 4; P++) {
- Freq = VClk << P;
- if ((Freq >= 128000) && (Freq <= 350000)) {
- for (M = lowM; M <= highM; M++) {
- N = ((VClk << P) * M) / par->CrystalFreqKHz;
- if (N <= 255) {
- Freq =
- ((par->CrystalFreqKHz * N) /
- M) >> P;
- if (Freq > VClk)
- DeltaNew = Freq - VClk;
- else
- DeltaNew = VClk - Freq;
- if (DeltaNew < DeltaOld) {
- *pllOut =
- (P << 16) | (N << 8) | M;
- *clockOut = Freq;
- DeltaOld = DeltaNew;
- }
- }
- }
- }
- }
-}
-
-static void CalcVClock2Stage(int clockIn,
- int *clockOut,
- u32 * pllOut,
- u32 * pllBOut, struct nvidia_par *par)
-{
- unsigned DeltaNew, DeltaOld;
- unsigned VClk, Freq;
- unsigned M, N, P;
-
- DeltaOld = 0xFFFFFFFF;
-
- *pllBOut = 0x80000401; /* fixed at x4 for now */
-
- VClk = (unsigned)clockIn;
-
- for (P = 0; P <= 6; P++) {
- Freq = VClk << P;
- if ((Freq >= 400000) && (Freq <= 1000000)) {
- for (M = 1; M <= 13; M++) {
- N = ((VClk << P) * M) /
- (par->CrystalFreqKHz << 2);
- if ((N >= 5) && (N <= 255)) {
- Freq =
- (((par->CrystalFreqKHz << 2) * N) /
- M) >> P;
- if (Freq > VClk)
- DeltaNew = Freq - VClk;
- else
- DeltaNew = VClk - Freq;
- if (DeltaNew < DeltaOld) {
- *pllOut =
- (P << 16) | (N << 8) | M;
- *clockOut = Freq;
- DeltaOld = DeltaNew;
- }
- }
- }
- }
- }
-}
-
-/*
- * Calculate extended mode parameters (SVGA) and save in a
- * mode state structure.
- */
-void NVCalcStateExt(struct nvidia_par *par,
- RIVA_HW_STATE * state,
- int bpp,
- int width,
- int hDisplaySize, int height, int dotClock, int flags)
-{
- int pixelDepth, VClk = 0;
- /*
- * Save mode parameters.
- */
- state->bpp = bpp; /* this is not bitsPerPixel, it's 8,15,16,32 */
- state->width = width;
- state->height = height;
- /*
- * Extended RIVA registers.
- */
- pixelDepth = (bpp + 1) / 8;
- if (par->twoStagePLL)
- CalcVClock2Stage(dotClock, &VClk, &state->pll, &state->pllB,
- par);
- else
- CalcVClock(dotClock, &VClk, &state->pll, par);
-
- switch (par->Architecture) {
- case NV_ARCH_04:
- nv4UpdateArbitrationSettings(VClk,
- pixelDepth * 8,
- &(state->arbitration0),
- &(state->arbitration1), par);
- state->cursor0 = 0x00;
- state->cursor1 = 0xbC;
- if (flags & FB_VMODE_DOUBLE)
- state->cursor1 |= 2;
- state->cursor2 = 0x00000000;
- state->pllsel = 0x10000700;
- state->config = 0x00001114;
- state->general = bpp == 16 ? 0x00101100 : 0x00100100;
- state->repaint1 = hDisplaySize < 1280 ? 0x04 : 0x00;
- break;
- case NV_ARCH_40:
- if (!par->FlatPanel)
- state->control = NV_RD32(par->PRAMDAC0, 0x0580) &
- 0xeffffeff;
- fallthrough;
- case NV_ARCH_10:
- case NV_ARCH_20:
- case NV_ARCH_30:
- default:
- if ((par->Chipset & 0xfff0) == 0x0240 ||
- (par->Chipset & 0xfff0) == 0x03d0) {
- state->arbitration0 = 256;
- state->arbitration1 = 0x0480;
- } else if (((par->Chipset & 0xffff) == 0x01A0) ||
- ((par->Chipset & 0xffff) == 0x01f0)) {
- nForceUpdateArbitrationSettings(VClk,
- pixelDepth * 8,
- &(state->arbitration0),
- &(state->arbitration1),
- par);
- } else if (par->Architecture < NV_ARCH_30) {
- nv10UpdateArbitrationSettings(VClk,
- pixelDepth * 8,
- &(state->arbitration0),
- &(state->arbitration1),
- par);
- } else {
- nv30UpdateArbitrationSettings(par,
- &(state->arbitration0),
- &(state->arbitration1));
- }
-
- state->cursor0 = 0x80 | (par->CursorStart >> 17);
- state->cursor1 = (par->CursorStart >> 11) << 2;
- state->cursor2 = par->CursorStart >> 24;
- if (flags & FB_VMODE_DOUBLE)
- state->cursor1 |= 2;
- state->pllsel = 0x10000700;
- state->config = NV_RD32(par->PFB, 0x00000200);
- state->general = bpp == 16 ? 0x00101100 : 0x00100100;
- state->repaint1 = hDisplaySize < 1280 ? 0x04 : 0x00;
- break;
- }
-
- if (bpp != 8) /* DirectColor */
- state->general |= 0x00000030;
-
- state->repaint0 = (((width / 8) * pixelDepth) & 0x700) >> 3;
- state->pixel = (pixelDepth > 2) ? 3 : pixelDepth;
-}
-
-void NVLoadStateExt(struct nvidia_par *par, RIVA_HW_STATE * state)
-{
- int i, j;
-
- NV_WR32(par->PMC, 0x0140, 0x00000000);
- NV_WR32(par->PMC, 0x0200, 0xFFFF00FF);
- NV_WR32(par->PMC, 0x0200, 0xFFFFFFFF);
-
- NV_WR32(par->PTIMER, 0x0200 * 4, 0x00000008);
- NV_WR32(par->PTIMER, 0x0210 * 4, 0x00000003);
- NV_WR32(par->PTIMER, 0x0140 * 4, 0x00000000);
- NV_WR32(par->PTIMER, 0x0100 * 4, 0xFFFFFFFF);
-
- if (par->Architecture == NV_ARCH_04) {
- if (state)
- NV_WR32(par->PFB, 0x0200, state->config);
- } else if ((par->Architecture < NV_ARCH_40) ||
- (par->Chipset & 0xfff0) == 0x0040) {
- for (i = 0; i < 8; i++) {
- NV_WR32(par->PFB, 0x0240 + (i * 0x10), 0);
- NV_WR32(par->PFB, 0x0244 + (i * 0x10),
- par->FbMapSize - 1);
- }
- } else {
- int regions = 12;
-
- if (((par->Chipset & 0xfff0) == 0x0090) ||
- ((par->Chipset & 0xfff0) == 0x01D0) ||
- ((par->Chipset & 0xfff0) == 0x0290) ||
- ((par->Chipset & 0xfff0) == 0x0390) ||
- ((par->Chipset & 0xfff0) == 0x03D0))
- regions = 15;
- for(i = 0; i < regions; i++) {
- NV_WR32(par->PFB, 0x0600 + (i * 0x10), 0);
- NV_WR32(par->PFB, 0x0604 + (i * 0x10),
- par->FbMapSize - 1);
- }
- }
-
- if (par->Architecture >= NV_ARCH_40) {
- NV_WR32(par->PRAMIN, 0x0000 * 4, 0x80000010);
- NV_WR32(par->PRAMIN, 0x0001 * 4, 0x00101202);
- NV_WR32(par->PRAMIN, 0x0002 * 4, 0x80000011);
- NV_WR32(par->PRAMIN, 0x0003 * 4, 0x00101204);
- NV_WR32(par->PRAMIN, 0x0004 * 4, 0x80000012);
- NV_WR32(par->PRAMIN, 0x0005 * 4, 0x00101206);
- NV_WR32(par->PRAMIN, 0x0006 * 4, 0x80000013);
- NV_WR32(par->PRAMIN, 0x0007 * 4, 0x00101208);
- NV_WR32(par->PRAMIN, 0x0008 * 4, 0x80000014);
- NV_WR32(par->PRAMIN, 0x0009 * 4, 0x0010120A);
- NV_WR32(par->PRAMIN, 0x000A * 4, 0x80000015);
- NV_WR32(par->PRAMIN, 0x000B * 4, 0x0010120C);
- NV_WR32(par->PRAMIN, 0x000C * 4, 0x80000016);
- NV_WR32(par->PRAMIN, 0x000D * 4, 0x0010120E);
- NV_WR32(par->PRAMIN, 0x000E * 4, 0x80000017);
- NV_WR32(par->PRAMIN, 0x000F * 4, 0x00101210);
- NV_WR32(par->PRAMIN, 0x0800 * 4, 0x00003000);
- NV_WR32(par->PRAMIN, 0x0801 * 4, par->FbMapSize - 1);
- NV_WR32(par->PRAMIN, 0x0802 * 4, 0x00000002);
- NV_WR32(par->PRAMIN, 0x0808 * 4, 0x02080062);
- NV_WR32(par->PRAMIN, 0x0809 * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x080A * 4, 0x00001200);
- NV_WR32(par->PRAMIN, 0x080B * 4, 0x00001200);
- NV_WR32(par->PRAMIN, 0x080C * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x080D * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x0810 * 4, 0x02080043);
- NV_WR32(par->PRAMIN, 0x0811 * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x0812 * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x0813 * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x0814 * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x0815 * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x0818 * 4, 0x02080044);
- NV_WR32(par->PRAMIN, 0x0819 * 4, 0x02000000);
- NV_WR32(par->PRAMIN, 0x081A * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x081B * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x081C * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x081D * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x0820 * 4, 0x02080019);
- NV_WR32(par->PRAMIN, 0x0821 * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x0822 * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x0823 * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x0824 * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x0825 * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x0828 * 4, 0x020A005C);
- NV_WR32(par->PRAMIN, 0x0829 * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x082A * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x082B * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x082C * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x082D * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x0830 * 4, 0x0208009F);
- NV_WR32(par->PRAMIN, 0x0831 * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x0832 * 4, 0x00001200);
- NV_WR32(par->PRAMIN, 0x0833 * 4, 0x00001200);
- NV_WR32(par->PRAMIN, 0x0834 * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x0835 * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x0838 * 4, 0x0208004A);
- NV_WR32(par->PRAMIN, 0x0839 * 4, 0x02000000);
- NV_WR32(par->PRAMIN, 0x083A * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x083B * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x083C * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x083D * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x0840 * 4, 0x02080077);
- NV_WR32(par->PRAMIN, 0x0841 * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x0842 * 4, 0x00001200);
- NV_WR32(par->PRAMIN, 0x0843 * 4, 0x00001200);
- NV_WR32(par->PRAMIN, 0x0844 * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x0845 * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x084C * 4, 0x00003002);
- NV_WR32(par->PRAMIN, 0x084D * 4, 0x00007FFF);
- NV_WR32(par->PRAMIN, 0x084E * 4,
- par->FbUsableSize | 0x00000002);
-
-#ifdef __BIG_ENDIAN
- NV_WR32(par->PRAMIN, 0x080A * 4,
- NV_RD32(par->PRAMIN, 0x080A * 4) | 0x01000000);
- NV_WR32(par->PRAMIN, 0x0812 * 4,
- NV_RD32(par->PRAMIN, 0x0812 * 4) | 0x01000000);
- NV_WR32(par->PRAMIN, 0x081A * 4,
- NV_RD32(par->PRAMIN, 0x081A * 4) | 0x01000000);
- NV_WR32(par->PRAMIN, 0x0822 * 4,
- NV_RD32(par->PRAMIN, 0x0822 * 4) | 0x01000000);
- NV_WR32(par->PRAMIN, 0x082A * 4,
- NV_RD32(par->PRAMIN, 0x082A * 4) | 0x01000000);
- NV_WR32(par->PRAMIN, 0x0832 * 4,
- NV_RD32(par->PRAMIN, 0x0832 * 4) | 0x01000000);
- NV_WR32(par->PRAMIN, 0x083A * 4,
- NV_RD32(par->PRAMIN, 0x083A * 4) | 0x01000000);
- NV_WR32(par->PRAMIN, 0x0842 * 4,
- NV_RD32(par->PRAMIN, 0x0842 * 4) | 0x01000000);
- NV_WR32(par->PRAMIN, 0x0819 * 4, 0x01000000);
- NV_WR32(par->PRAMIN, 0x0839 * 4, 0x01000000);
-#endif
- } else {
- NV_WR32(par->PRAMIN, 0x0000 * 4, 0x80000010);
- NV_WR32(par->PRAMIN, 0x0001 * 4, 0x80011201);
- NV_WR32(par->PRAMIN, 0x0002 * 4, 0x80000011);
- NV_WR32(par->PRAMIN, 0x0003 * 4, 0x80011202);
- NV_WR32(par->PRAMIN, 0x0004 * 4, 0x80000012);
- NV_WR32(par->PRAMIN, 0x0005 * 4, 0x80011203);
- NV_WR32(par->PRAMIN, 0x0006 * 4, 0x80000013);
- NV_WR32(par->PRAMIN, 0x0007 * 4, 0x80011204);
- NV_WR32(par->PRAMIN, 0x0008 * 4, 0x80000014);
- NV_WR32(par->PRAMIN, 0x0009 * 4, 0x80011205);
- NV_WR32(par->PRAMIN, 0x000A * 4, 0x80000015);
- NV_WR32(par->PRAMIN, 0x000B * 4, 0x80011206);
- NV_WR32(par->PRAMIN, 0x000C * 4, 0x80000016);
- NV_WR32(par->PRAMIN, 0x000D * 4, 0x80011207);
- NV_WR32(par->PRAMIN, 0x000E * 4, 0x80000017);
- NV_WR32(par->PRAMIN, 0x000F * 4, 0x80011208);
- NV_WR32(par->PRAMIN, 0x0800 * 4, 0x00003000);
- NV_WR32(par->PRAMIN, 0x0801 * 4, par->FbMapSize - 1);
- NV_WR32(par->PRAMIN, 0x0802 * 4, 0x00000002);
- NV_WR32(par->PRAMIN, 0x0803 * 4, 0x00000002);
- if (par->Architecture >= NV_ARCH_10)
- NV_WR32(par->PRAMIN, 0x0804 * 4, 0x01008062);
- else
- NV_WR32(par->PRAMIN, 0x0804 * 4, 0x01008042);
- NV_WR32(par->PRAMIN, 0x0805 * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x0806 * 4, 0x12001200);
- NV_WR32(par->PRAMIN, 0x0807 * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x0808 * 4, 0x01008043);
- NV_WR32(par->PRAMIN, 0x0809 * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x080A * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x080B * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x080C * 4, 0x01008044);
- NV_WR32(par->PRAMIN, 0x080D * 4, 0x00000002);
- NV_WR32(par->PRAMIN, 0x080E * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x080F * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x0810 * 4, 0x01008019);
- NV_WR32(par->PRAMIN, 0x0811 * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x0812 * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x0813 * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x0814 * 4, 0x0100A05C);
- NV_WR32(par->PRAMIN, 0x0815 * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x0816 * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x0817 * 4, 0x00000000);
- if (par->WaitVSyncPossible)
- NV_WR32(par->PRAMIN, 0x0818 * 4, 0x0100809F);
- else
- NV_WR32(par->PRAMIN, 0x0818 * 4, 0x0100805F);
- NV_WR32(par->PRAMIN, 0x0819 * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x081A * 4, 0x12001200);
- NV_WR32(par->PRAMIN, 0x081B * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x081C * 4, 0x0100804A);
- NV_WR32(par->PRAMIN, 0x081D * 4, 0x00000002);
- NV_WR32(par->PRAMIN, 0x081E * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x081F * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x0820 * 4, 0x01018077);
- NV_WR32(par->PRAMIN, 0x0821 * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x0822 * 4, 0x12001200);
- NV_WR32(par->PRAMIN, 0x0823 * 4, 0x00000000);
- NV_WR32(par->PRAMIN, 0x0824 * 4, 0x00003002);
- NV_WR32(par->PRAMIN, 0x0825 * 4, 0x00007FFF);
- NV_WR32(par->PRAMIN, 0x0826 * 4,
- par->FbUsableSize | 0x00000002);
- NV_WR32(par->PRAMIN, 0x0827 * 4, 0x00000002);
-#ifdef __BIG_ENDIAN
- NV_WR32(par->PRAMIN, 0x0804 * 4,
- NV_RD32(par->PRAMIN, 0x0804 * 4) | 0x00080000);
- NV_WR32(par->PRAMIN, 0x0808 * 4,
- NV_RD32(par->PRAMIN, 0x0808 * 4) | 0x00080000);
- NV_WR32(par->PRAMIN, 0x080C * 4,
- NV_RD32(par->PRAMIN, 0x080C * 4) | 0x00080000);
- NV_WR32(par->PRAMIN, 0x0810 * 4,
- NV_RD32(par->PRAMIN, 0x0810 * 4) | 0x00080000);
- NV_WR32(par->PRAMIN, 0x0814 * 4,
- NV_RD32(par->PRAMIN, 0x0814 * 4) | 0x00080000);
- NV_WR32(par->PRAMIN, 0x0818 * 4,
- NV_RD32(par->PRAMIN, 0x0818 * 4) | 0x00080000);
- NV_WR32(par->PRAMIN, 0x081C * 4,
- NV_RD32(par->PRAMIN, 0x081C * 4) | 0x00080000);
- NV_WR32(par->PRAMIN, 0x0820 * 4,
- NV_RD32(par->PRAMIN, 0x0820 * 4) | 0x00080000);
- NV_WR32(par->PRAMIN, 0x080D * 4, 0x00000001);
- NV_WR32(par->PRAMIN, 0x081D * 4, 0x00000001);
-#endif
- }
- if (par->Architecture < NV_ARCH_10) {
- if ((par->Chipset & 0x0fff) == 0x0020) {
- NV_WR32(par->PRAMIN, 0x0824 * 4,
- NV_RD32(par->PRAMIN, 0x0824 * 4) | 0x00020000);
- NV_WR32(par->PRAMIN, 0x0826 * 4,
- NV_RD32(par->PRAMIN,
- 0x0826 * 4) + par->FbAddress);
- }
- NV_WR32(par->PGRAPH, 0x0080, 0x000001FF);
- NV_WR32(par->PGRAPH, 0x0080, 0x1230C000);
- NV_WR32(par->PGRAPH, 0x0084, 0x72111101);
- NV_WR32(par->PGRAPH, 0x0088, 0x11D5F071);
- NV_WR32(par->PGRAPH, 0x008C, 0x0004FF31);
- NV_WR32(par->PGRAPH, 0x008C, 0x4004FF31);
- NV_WR32(par->PGRAPH, 0x0140, 0x00000000);
- NV_WR32(par->PGRAPH, 0x0100, 0xFFFFFFFF);
- NV_WR32(par->PGRAPH, 0x0170, 0x10010100);
- NV_WR32(par->PGRAPH, 0x0710, 0xFFFFFFFF);
- NV_WR32(par->PGRAPH, 0x0720, 0x00000001);
- NV_WR32(par->PGRAPH, 0x0810, 0x00000000);
- NV_WR32(par->PGRAPH, 0x0608, 0xFFFFFFFF);
- } else {
- NV_WR32(par->PGRAPH, 0x0080, 0xFFFFFFFF);
- NV_WR32(par->PGRAPH, 0x0080, 0x00000000);
-
- NV_WR32(par->PGRAPH, 0x0140, 0x00000000);
- NV_WR32(par->PGRAPH, 0x0100, 0xFFFFFFFF);
- NV_WR32(par->PGRAPH, 0x0144, 0x10010100);
- NV_WR32(par->PGRAPH, 0x0714, 0xFFFFFFFF);
- NV_WR32(par->PGRAPH, 0x0720, 0x00000001);
- NV_WR32(par->PGRAPH, 0x0710,
- NV_RD32(par->PGRAPH, 0x0710) & 0x0007ff00);
- NV_WR32(par->PGRAPH, 0x0710,
- NV_RD32(par->PGRAPH, 0x0710) | 0x00020100);
-
- if (par->Architecture == NV_ARCH_10) {
- NV_WR32(par->PGRAPH, 0x0084, 0x00118700);
- NV_WR32(par->PGRAPH, 0x0088, 0x24E00810);
- NV_WR32(par->PGRAPH, 0x008C, 0x55DE0030);
-
- for (i = 0; i < 32; i++)
- NV_WR32(&par->PGRAPH[(0x0B00 / 4) + i], 0,
- NV_RD32(&par->PFB[(0x0240 / 4) + i],
- 0));
-
- NV_WR32(par->PGRAPH, 0x640, 0);
- NV_WR32(par->PGRAPH, 0x644, 0);
- NV_WR32(par->PGRAPH, 0x684, par->FbMapSize - 1);
- NV_WR32(par->PGRAPH, 0x688, par->FbMapSize - 1);
-
- NV_WR32(par->PGRAPH, 0x0810, 0x00000000);
- NV_WR32(par->PGRAPH, 0x0608, 0xFFFFFFFF);
- } else {
- if (par->Architecture >= NV_ARCH_40) {
- NV_WR32(par->PGRAPH, 0x0084, 0x401287c0);
- NV_WR32(par->PGRAPH, 0x008C, 0x60de8051);
- NV_WR32(par->PGRAPH, 0x0090, 0x00008000);
- NV_WR32(par->PGRAPH, 0x0610, 0x00be3c5f);
- NV_WR32(par->PGRAPH, 0x0bc4,
- NV_RD32(par->PGRAPH, 0x0bc4) |
- 0x00008000);
-
- j = NV_RD32(par->REGS, 0x1540) & 0xff;
-
- if (j) {
- for (i = 0; !(j & 1); j >>= 1, i++);
- NV_WR32(par->PGRAPH, 0x5000, i);
- }
-
- if ((par->Chipset & 0xfff0) == 0x0040) {
- NV_WR32(par->PGRAPH, 0x09b0,
- 0x83280fff);
- NV_WR32(par->PGRAPH, 0x09b4,
- 0x000000a0);
- } else {
- NV_WR32(par->PGRAPH, 0x0820,
- 0x83280eff);
- NV_WR32(par->PGRAPH, 0x0824,
- 0x000000a0);
- }
-
- switch (par->Chipset & 0xfff0) {
- case 0x0040:
- case 0x0210:
- NV_WR32(par->PGRAPH, 0x09b8,
- 0x0078e366);
- NV_WR32(par->PGRAPH, 0x09bc,
- 0x0000014c);
- NV_WR32(par->PFB, 0x033C,
- NV_RD32(par->PFB, 0x33C) &
- 0xffff7fff);
- break;
- case 0x00C0:
- case 0x0120:
- NV_WR32(par->PGRAPH, 0x0828,
- 0x007596ff);
- NV_WR32(par->PGRAPH, 0x082C,
- 0x00000108);
- break;
- case 0x0160:
- case 0x01D0:
- case 0x0240:
- case 0x03D0:
- NV_WR32(par->PMC, 0x1700,
- NV_RD32(par->PFB, 0x020C));
- NV_WR32(par->PMC, 0x1704, 0);
- NV_WR32(par->PMC, 0x1708, 0);
- NV_WR32(par->PMC, 0x170C,
- NV_RD32(par->PFB, 0x020C));
- NV_WR32(par->PGRAPH, 0x0860, 0);
- NV_WR32(par->PGRAPH, 0x0864, 0);
- NV_WR32(par->PRAMDAC, 0x0608,
- NV_RD32(par->PRAMDAC,
- 0x0608) | 0x00100000);
- break;
- case 0x0140:
- NV_WR32(par->PGRAPH, 0x0828,
- 0x0072cb77);
- NV_WR32(par->PGRAPH, 0x082C,
- 0x00000108);
- break;
- case 0x0220:
- NV_WR32(par->PGRAPH, 0x0860, 0);
- NV_WR32(par->PGRAPH, 0x0864, 0);
- NV_WR32(par->PRAMDAC, 0x0608,
- NV_RD32(par->PRAMDAC, 0x0608) |
- 0x00100000);
- break;
- case 0x0090:
- case 0x0290:
- case 0x0390:
- NV_WR32(par->PRAMDAC, 0x0608,
- NV_RD32(par->PRAMDAC, 0x0608) |
- 0x00100000);
- NV_WR32(par->PGRAPH, 0x0828,
- 0x07830610);
- NV_WR32(par->PGRAPH, 0x082C,
- 0x0000016A);
- break;
- default:
- break;
- }
-
- NV_WR32(par->PGRAPH, 0x0b38, 0x2ffff800);
- NV_WR32(par->PGRAPH, 0x0b3c, 0x00006000);
- NV_WR32(par->PGRAPH, 0x032C, 0x01000000);
- NV_WR32(par->PGRAPH, 0x0220, 0x00001200);
- } else if (par->Architecture == NV_ARCH_30) {
- NV_WR32(par->PGRAPH, 0x0084, 0x40108700);
- NV_WR32(par->PGRAPH, 0x0890, 0x00140000);
- NV_WR32(par->PGRAPH, 0x008C, 0xf00e0431);
- NV_WR32(par->PGRAPH, 0x0090, 0x00008000);
- NV_WR32(par->PGRAPH, 0x0610, 0xf04b1f36);
- NV_WR32(par->PGRAPH, 0x0B80, 0x1002d888);
- NV_WR32(par->PGRAPH, 0x0B88, 0x62ff007f);
- } else {
- NV_WR32(par->PGRAPH, 0x0084, 0x00118700);
- NV_WR32(par->PGRAPH, 0x008C, 0xF20E0431);
- NV_WR32(par->PGRAPH, 0x0090, 0x00000000);
- NV_WR32(par->PGRAPH, 0x009C, 0x00000040);
-
- if ((par->Chipset & 0x0ff0) >= 0x0250) {
- NV_WR32(par->PGRAPH, 0x0890,
- 0x00080000);
- NV_WR32(par->PGRAPH, 0x0610,
- 0x304B1FB6);
- NV_WR32(par->PGRAPH, 0x0B80,
- 0x18B82880);
- NV_WR32(par->PGRAPH, 0x0B84,
- 0x44000000);
- NV_WR32(par->PGRAPH, 0x0098,
- 0x40000080);
- NV_WR32(par->PGRAPH, 0x0B88,
- 0x000000ff);
- } else {
- NV_WR32(par->PGRAPH, 0x0880,
- 0x00080000);
- NV_WR32(par->PGRAPH, 0x0094,
- 0x00000005);
- NV_WR32(par->PGRAPH, 0x0B80,
- 0x45CAA208);
- NV_WR32(par->PGRAPH, 0x0B84,
- 0x24000000);
- NV_WR32(par->PGRAPH, 0x0098,
- 0x00000040);
- NV_WR32(par->PGRAPH, 0x0750,
- 0x00E00038);
- NV_WR32(par->PGRAPH, 0x0754,
- 0x00000030);
- NV_WR32(par->PGRAPH, 0x0750,
- 0x00E10038);
- NV_WR32(par->PGRAPH, 0x0754,
- 0x00000030);
- }
- }
-
- if ((par->Architecture < NV_ARCH_40) ||
- ((par->Chipset & 0xfff0) == 0x0040)) {
- for (i = 0; i < 32; i++) {
- NV_WR32(par->PGRAPH, 0x0900 + i*4,
- NV_RD32(par->PFB, 0x0240 +i*4));
- NV_WR32(par->PGRAPH, 0x6900 + i*4,
- NV_RD32(par->PFB, 0x0240 +i*4));
- }
- } else {
- if (((par->Chipset & 0xfff0) == 0x0090) ||
- ((par->Chipset & 0xfff0) == 0x01D0) ||
- ((par->Chipset & 0xfff0) == 0x0290) ||
- ((par->Chipset & 0xfff0) == 0x0390) ||
- ((par->Chipset & 0xfff0) == 0x03D0)) {
- for (i = 0; i < 60; i++) {
- NV_WR32(par->PGRAPH,
- 0x0D00 + i*4,
- NV_RD32(par->PFB,
- 0x0600 + i*4));
- NV_WR32(par->PGRAPH,
- 0x6900 + i*4,
- NV_RD32(par->PFB,
- 0x0600 + i*4));
- }
- } else {
- for (i = 0; i < 48; i++) {
- NV_WR32(par->PGRAPH,
- 0x0900 + i*4,
- NV_RD32(par->PFB,
- 0x0600 + i*4));
- if(((par->Chipset & 0xfff0)
- != 0x0160) &&
- ((par->Chipset & 0xfff0)
- != 0x0220) &&
- ((par->Chipset & 0xfff0)
- != 0x240))
- NV_WR32(par->PGRAPH,
- 0x6900 + i*4,
- NV_RD32(par->PFB,
- 0x0600 + i*4));
- }
- }
- }
-
- if (par->Architecture >= NV_ARCH_40) {
- if ((par->Chipset & 0xfff0) == 0x0040) {
- NV_WR32(par->PGRAPH, 0x09A4,
- NV_RD32(par->PFB, 0x0200));
- NV_WR32(par->PGRAPH, 0x09A8,
- NV_RD32(par->PFB, 0x0204));
- NV_WR32(par->PGRAPH, 0x69A4,
- NV_RD32(par->PFB, 0x0200));
- NV_WR32(par->PGRAPH, 0x69A8,
- NV_RD32(par->PFB, 0x0204));
-
- NV_WR32(par->PGRAPH, 0x0820, 0);
- NV_WR32(par->PGRAPH, 0x0824, 0);
- NV_WR32(par->PGRAPH, 0x0864,
- par->FbMapSize - 1);
- NV_WR32(par->PGRAPH, 0x0868,
- par->FbMapSize - 1);
- } else {
- if ((par->Chipset & 0xfff0) == 0x0090 ||
- (par->Chipset & 0xfff0) == 0x01D0 ||
- (par->Chipset & 0xfff0) == 0x0290 ||
- (par->Chipset & 0xfff0) == 0x0390) {
- NV_WR32(par->PGRAPH, 0x0DF0,
- NV_RD32(par->PFB, 0x0200));
- NV_WR32(par->PGRAPH, 0x0DF4,
- NV_RD32(par->PFB, 0x0204));
- } else {
- NV_WR32(par->PGRAPH, 0x09F0,
- NV_RD32(par->PFB, 0x0200));
- NV_WR32(par->PGRAPH, 0x09F4,
- NV_RD32(par->PFB, 0x0204));
- }
- NV_WR32(par->PGRAPH, 0x69F0,
- NV_RD32(par->PFB, 0x0200));
- NV_WR32(par->PGRAPH, 0x69F4,
- NV_RD32(par->PFB, 0x0204));
-
- NV_WR32(par->PGRAPH, 0x0840, 0);
- NV_WR32(par->PGRAPH, 0x0844, 0);
- NV_WR32(par->PGRAPH, 0x08a0,
- par->FbMapSize - 1);
- NV_WR32(par->PGRAPH, 0x08a4,
- par->FbMapSize - 1);
- }
- } else {
- NV_WR32(par->PGRAPH, 0x09A4,
- NV_RD32(par->PFB, 0x0200));
- NV_WR32(par->PGRAPH, 0x09A8,
- NV_RD32(par->PFB, 0x0204));
- NV_WR32(par->PGRAPH, 0x0750, 0x00EA0000);
- NV_WR32(par->PGRAPH, 0x0754,
- NV_RD32(par->PFB, 0x0200));
- NV_WR32(par->PGRAPH, 0x0750, 0x00EA0004);
- NV_WR32(par->PGRAPH, 0x0754,
- NV_RD32(par->PFB, 0x0204));
-
- NV_WR32(par->PGRAPH, 0x0820, 0);
- NV_WR32(par->PGRAPH, 0x0824, 0);
- NV_WR32(par->PGRAPH, 0x0864,
- par->FbMapSize - 1);
- NV_WR32(par->PGRAPH, 0x0868,
- par->FbMapSize - 1);
- }
- NV_WR32(par->PGRAPH, 0x0B20, 0x00000000);
- NV_WR32(par->PGRAPH, 0x0B04, 0xFFFFFFFF);
- }
- }
- NV_WR32(par->PGRAPH, 0x053C, 0);
- NV_WR32(par->PGRAPH, 0x0540, 0);
- NV_WR32(par->PGRAPH, 0x0544, 0x00007FFF);
- NV_WR32(par->PGRAPH, 0x0548, 0x00007FFF);
-
- NV_WR32(par->PFIFO, 0x0140 * 4, 0x00000000);
- NV_WR32(par->PFIFO, 0x0141 * 4, 0x00000001);
- NV_WR32(par->PFIFO, 0x0480 * 4, 0x00000000);
- NV_WR32(par->PFIFO, 0x0494 * 4, 0x00000000);
- if (par->Architecture >= NV_ARCH_40)
- NV_WR32(par->PFIFO, 0x0481 * 4, 0x00010000);
- else
- NV_WR32(par->PFIFO, 0x0481 * 4, 0x00000100);
- NV_WR32(par->PFIFO, 0x0490 * 4, 0x00000000);
- NV_WR32(par->PFIFO, 0x0491 * 4, 0x00000000);
- if (par->Architecture >= NV_ARCH_40)
- NV_WR32(par->PFIFO, 0x048B * 4, 0x00001213);
- else
- NV_WR32(par->PFIFO, 0x048B * 4, 0x00001209);
- NV_WR32(par->PFIFO, 0x0400 * 4, 0x00000000);
- NV_WR32(par->PFIFO, 0x0414 * 4, 0x00000000);
- NV_WR32(par->PFIFO, 0x0084 * 4, 0x03000100);
- NV_WR32(par->PFIFO, 0x0085 * 4, 0x00000110);
- NV_WR32(par->PFIFO, 0x0086 * 4, 0x00000112);
- NV_WR32(par->PFIFO, 0x0143 * 4, 0x0000FFFF);
- NV_WR32(par->PFIFO, 0x0496 * 4, 0x0000FFFF);
- NV_WR32(par->PFIFO, 0x0050 * 4, 0x00000000);
- NV_WR32(par->PFIFO, 0x0040 * 4, 0xFFFFFFFF);
- NV_WR32(par->PFIFO, 0x0415 * 4, 0x00000001);
- NV_WR32(par->PFIFO, 0x048C * 4, 0x00000000);
- NV_WR32(par->PFIFO, 0x04A0 * 4, 0x00000000);
-#ifdef __BIG_ENDIAN
- NV_WR32(par->PFIFO, 0x0489 * 4, 0x800F0078);
-#else
- NV_WR32(par->PFIFO, 0x0489 * 4, 0x000F0078);
-#endif
- NV_WR32(par->PFIFO, 0x0488 * 4, 0x00000001);
- NV_WR32(par->PFIFO, 0x0480 * 4, 0x00000001);
- NV_WR32(par->PFIFO, 0x0494 * 4, 0x00000001);
- NV_WR32(par->PFIFO, 0x0495 * 4, 0x00000001);
- NV_WR32(par->PFIFO, 0x0140 * 4, 0x00000001);
-
- if (!state) {
- par->CurrentState = NULL;
- return;
- }
-
- if (par->Architecture >= NV_ARCH_10) {
- if (par->twoHeads) {
- NV_WR32(par->PCRTC0, 0x0860, state->head);
- NV_WR32(par->PCRTC0, 0x2860, state->head2);
- }
- NV_WR32(par->PRAMDAC, 0x0404, NV_RD32(par->PRAMDAC, 0x0404) |
- (1 << 25));
-
- NV_WR32(par->PMC, 0x8704, 1);
- NV_WR32(par->PMC, 0x8140, 0);
- NV_WR32(par->PMC, 0x8920, 0);
- NV_WR32(par->PMC, 0x8924, 0);
- NV_WR32(par->PMC, 0x8908, par->FbMapSize - 1);
- NV_WR32(par->PMC, 0x890C, par->FbMapSize - 1);
- NV_WR32(par->PMC, 0x1588, 0);
-
- NV_WR32(par->PCRTC, 0x0810, state->cursorConfig);
- NV_WR32(par->PCRTC, 0x0830, state->displayV - 3);
- NV_WR32(par->PCRTC, 0x0834, state->displayV - 1);
-
- if (par->FlatPanel) {
- if ((par->Chipset & 0x0ff0) == 0x0110) {
- NV_WR32(par->PRAMDAC, 0x0528, state->dither);
- } else if (par->twoHeads) {
- NV_WR32(par->PRAMDAC, 0x083C, state->dither);
- }
-
- VGA_WR08(par->PCIO, 0x03D4, 0x53);
- VGA_WR08(par->PCIO, 0x03D5, state->timingH);
- VGA_WR08(par->PCIO, 0x03D4, 0x54);
- VGA_WR08(par->PCIO, 0x03D5, state->timingV);
- VGA_WR08(par->PCIO, 0x03D4, 0x21);
- VGA_WR08(par->PCIO, 0x03D5, 0xfa);
- }
-
- VGA_WR08(par->PCIO, 0x03D4, 0x41);
- VGA_WR08(par->PCIO, 0x03D5, state->extra);
- }
-
- VGA_WR08(par->PCIO, 0x03D4, 0x19);
- VGA_WR08(par->PCIO, 0x03D5, state->repaint0);
- VGA_WR08(par->PCIO, 0x03D4, 0x1A);
- VGA_WR08(par->PCIO, 0x03D5, state->repaint1);
- VGA_WR08(par->PCIO, 0x03D4, 0x25);
- VGA_WR08(par->PCIO, 0x03D5, state->screen);
- VGA_WR08(par->PCIO, 0x03D4, 0x28);
- VGA_WR08(par->PCIO, 0x03D5, state->pixel);
- VGA_WR08(par->PCIO, 0x03D4, 0x2D);
- VGA_WR08(par->PCIO, 0x03D5, state->horiz);
- VGA_WR08(par->PCIO, 0x03D4, 0x1C);
- VGA_WR08(par->PCIO, 0x03D5, state->fifo);
- VGA_WR08(par->PCIO, 0x03D4, 0x1B);
- VGA_WR08(par->PCIO, 0x03D5, state->arbitration0);
- VGA_WR08(par->PCIO, 0x03D4, 0x20);
- VGA_WR08(par->PCIO, 0x03D5, state->arbitration1);
-
- if(par->Architecture >= NV_ARCH_30) {
- VGA_WR08(par->PCIO, 0x03D4, 0x47);
- VGA_WR08(par->PCIO, 0x03D5, state->arbitration1 >> 8);
- }
-
- VGA_WR08(par->PCIO, 0x03D4, 0x30);
- VGA_WR08(par->PCIO, 0x03D5, state->cursor0);
- VGA_WR08(par->PCIO, 0x03D4, 0x31);
- VGA_WR08(par->PCIO, 0x03D5, state->cursor1);
- VGA_WR08(par->PCIO, 0x03D4, 0x2F);
- VGA_WR08(par->PCIO, 0x03D5, state->cursor2);
- VGA_WR08(par->PCIO, 0x03D4, 0x39);
- VGA_WR08(par->PCIO, 0x03D5, state->interlace);
-
- if (!par->FlatPanel) {
- if (par->Architecture >= NV_ARCH_40)
- NV_WR32(par->PRAMDAC0, 0x0580, state->control);
-
- NV_WR32(par->PRAMDAC0, 0x050C, state->pllsel);
- NV_WR32(par->PRAMDAC0, 0x0508, state->vpll);
- if (par->twoHeads)
- NV_WR32(par->PRAMDAC0, 0x0520, state->vpll2);
- if (par->twoStagePLL) {
- NV_WR32(par->PRAMDAC0, 0x0578, state->vpllB);
- NV_WR32(par->PRAMDAC0, 0x057C, state->vpll2B);
- }
- } else {
- NV_WR32(par->PRAMDAC, 0x0848, state->scale);
- NV_WR32(par->PRAMDAC, 0x0828, state->crtcSync +
- par->PanelTweak);
- }
-
- NV_WR32(par->PRAMDAC, 0x0600, state->general);
-
- NV_WR32(par->PCRTC, 0x0140, 0);
- NV_WR32(par->PCRTC, 0x0100, 1);
-
- par->CurrentState = state;
-}
-
-void NVUnloadStateExt(struct nvidia_par *par, RIVA_HW_STATE * state) {
- VGA_WR08(par->PCIO, 0x03D4, 0x19);
- state->repaint0 = VGA_RD08(par->PCIO, 0x03D5);
- VGA_WR08(par->PCIO, 0x03D4, 0x1A);
- state->repaint1 = VGA_RD08(par->PCIO, 0x03D5);
- VGA_WR08(par->PCIO, 0x03D4, 0x25);
- state->screen = VGA_RD08(par->PCIO, 0x03D5);
- VGA_WR08(par->PCIO, 0x03D4, 0x28);
- state->pixel = VGA_RD08(par->PCIO, 0x03D5);
- VGA_WR08(par->PCIO, 0x03D4, 0x2D);
- state->horiz = VGA_RD08(par->PCIO, 0x03D5);
- VGA_WR08(par->PCIO, 0x03D4, 0x1C);
- state->fifo = VGA_RD08(par->PCIO, 0x03D5);
- VGA_WR08(par->PCIO, 0x03D4, 0x1B);
- state->arbitration0 = VGA_RD08(par->PCIO, 0x03D5);
- VGA_WR08(par->PCIO, 0x03D4, 0x20);
- state->arbitration1 = VGA_RD08(par->PCIO, 0x03D5);
-
- if(par->Architecture >= NV_ARCH_30) {
- VGA_WR08(par->PCIO, 0x03D4, 0x47);
- state->arbitration1 |= (VGA_RD08(par->PCIO, 0x03D5) & 1) << 8;
- }
-
- VGA_WR08(par->PCIO, 0x03D4, 0x30);
- state->cursor0 = VGA_RD08(par->PCIO, 0x03D5);
- VGA_WR08(par->PCIO, 0x03D4, 0x31);
- state->cursor1 = VGA_RD08(par->PCIO, 0x03D5);
- VGA_WR08(par->PCIO, 0x03D4, 0x2F);
- state->cursor2 = VGA_RD08(par->PCIO, 0x03D5);
- VGA_WR08(par->PCIO, 0x03D4, 0x39);
- state->interlace = VGA_RD08(par->PCIO, 0x03D5);
- state->vpll = NV_RD32(par->PRAMDAC0, 0x0508);
- if (par->twoHeads)
- state->vpll2 = NV_RD32(par->PRAMDAC0, 0x0520);
- if (par->twoStagePLL) {
- state->vpllB = NV_RD32(par->PRAMDAC0, 0x0578);
- state->vpll2B = NV_RD32(par->PRAMDAC0, 0x057C);
- }
- state->pllsel = NV_RD32(par->PRAMDAC0, 0x050C);
- state->general = NV_RD32(par->PRAMDAC, 0x0600);
- state->scale = NV_RD32(par->PRAMDAC, 0x0848);
- state->config = NV_RD32(par->PFB, 0x0200);
-
- if (par->Architecture >= NV_ARCH_40 && !par->FlatPanel)
- state->control = NV_RD32(par->PRAMDAC0, 0x0580);
-
- if (par->Architecture >= NV_ARCH_10) {
- if (par->twoHeads) {
- state->head = NV_RD32(par->PCRTC0, 0x0860);
- state->head2 = NV_RD32(par->PCRTC0, 0x2860);
- VGA_WR08(par->PCIO, 0x03D4, 0x44);
- state->crtcOwner = VGA_RD08(par->PCIO, 0x03D5);
- }
- VGA_WR08(par->PCIO, 0x03D4, 0x41);
- state->extra = VGA_RD08(par->PCIO, 0x03D5);
- state->cursorConfig = NV_RD32(par->PCRTC, 0x0810);
-
- if ((par->Chipset & 0x0ff0) == 0x0110) {
- state->dither = NV_RD32(par->PRAMDAC, 0x0528);
- } else if (par->twoHeads) {
- state->dither = NV_RD32(par->PRAMDAC, 0x083C);
- }
-
- if (par->FlatPanel) {
- VGA_WR08(par->PCIO, 0x03D4, 0x53);
- state->timingH = VGA_RD08(par->PCIO, 0x03D5);
- VGA_WR08(par->PCIO, 0x03D4, 0x54);
- state->timingV = VGA_RD08(par->PCIO, 0x03D5);
- }
- }
-}
-
-void NVSetStartAddress(struct nvidia_par *par, u32 start)
-{
- NV_WR32(par->PCRTC, 0x800, start);
-}
diff --git a/drivers/video/fbdev/nvidia/nv_i2c.c b/drivers/video/fbdev/nvidia/nv_i2c.c
deleted file mode 100644
index d7994a173245..000000000000
--- a/drivers/video/fbdev/nvidia/nv_i2c.c
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * linux/drivers/video/nvidia/nvidia-i2c.c - nVidia i2c
- *
- * Copyright 2004 Antonino A. Daplas <adaplas @pol.net>
- *
- * Based on rivafb-i2c.c
- *
- * This file is subject to the terms and conditions of the GNU General Public
- * License. See the file COPYING in the main directory of this archive
- * for more details.
- */
-
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/delay.h>
-#include <linux/gfp.h>
-#include <linux/pci.h>
-#include <linux/fb.h>
-
-#include <asm/io.h>
-
-#include "nv_type.h"
-#include "nv_local.h"
-#include "nv_proto.h"
-
-#include "../edid.h"
-
-static void nvidia_gpio_setscl(void *data, int state)
-{
- struct nvidia_i2c_chan *chan = data;
- struct nvidia_par *par = chan->par;
- u32 val;
-
- val = NVReadCrtc(par, chan->ddc_base + 1) & 0xf0;
-
- if (state)
- val |= 0x20;
- else
- val &= ~0x20;
-
- NVWriteCrtc(par, chan->ddc_base + 1, val | 0x01);
-}
-
-static void nvidia_gpio_setsda(void *data, int state)
-{
- struct nvidia_i2c_chan *chan = data;
- struct nvidia_par *par = chan->par;
- u32 val;
-
- val = NVReadCrtc(par, chan->ddc_base + 1) & 0xf0;
-
- if (state)
- val |= 0x10;
- else
- val &= ~0x10;
-
- NVWriteCrtc(par, chan->ddc_base + 1, val | 0x01);
-}
-
-static int nvidia_gpio_getscl(void *data)
-{
- struct nvidia_i2c_chan *chan = data;
- struct nvidia_par *par = chan->par;
- u32 val = 0;
-
- if (NVReadCrtc(par, chan->ddc_base) & 0x04)
- val = 1;
-
- return val;
-}
-
-static int nvidia_gpio_getsda(void *data)
-{
- struct nvidia_i2c_chan *chan = data;
- struct nvidia_par *par = chan->par;
- u32 val = 0;
-
- if (NVReadCrtc(par, chan->ddc_base) & 0x08)
- val = 1;
-
- return val;
-}
-
-static int nvidia_setup_i2c_bus(struct nvidia_i2c_chan *chan, const char *name,
- unsigned int i2c_class)
-{
- int rc;
-
- strcpy(chan->adapter.name, name);
- chan->adapter.owner = THIS_MODULE;
- chan->adapter.class = i2c_class;
- chan->adapter.algo_data = &chan->algo;
- chan->adapter.dev.parent = &chan->par->pci_dev->dev;
- chan->algo.setsda = nvidia_gpio_setsda;
- chan->algo.setscl = nvidia_gpio_setscl;
- chan->algo.getsda = nvidia_gpio_getsda;
- chan->algo.getscl = nvidia_gpio_getscl;
- chan->algo.udelay = 40;
- chan->algo.timeout = msecs_to_jiffies(2);
- chan->algo.data = chan;
-
- i2c_set_adapdata(&chan->adapter, chan);
-
- /* Raise SCL and SDA */
- nvidia_gpio_setsda(chan, 1);
- nvidia_gpio_setscl(chan, 1);
- udelay(20);
-
- rc = i2c_bit_add_bus(&chan->adapter);
- if (rc == 0)
- dev_dbg(&chan->par->pci_dev->dev,
- "I2C bus %s registered.\n", name);
- else {
- dev_warn(&chan->par->pci_dev->dev,
- "Failed to register I2C bus %s.\n", name);
- chan->par = NULL;
- }
-
- return rc;
-}
-
-void nvidia_create_i2c_busses(struct nvidia_par *par)
-{
- par->chan[0].par = par;
- par->chan[1].par = par;
- par->chan[2].par = par;
-
- par->chan[0].ddc_base = (par->reverse_i2c) ? 0x36 : 0x3e;
- nvidia_setup_i2c_bus(&par->chan[0], "nvidia #0",
- (par->reverse_i2c) ? I2C_CLASS_HWMON : 0);
-
- par->chan[1].ddc_base = (par->reverse_i2c) ? 0x3e : 0x36;
- nvidia_setup_i2c_bus(&par->chan[1], "nvidia #1",
- (par->reverse_i2c) ? 0 : I2C_CLASS_HWMON);
-
- par->chan[2].ddc_base = 0x50;
- nvidia_setup_i2c_bus(&par->chan[2], "nvidia #2", 0);
-}
-
-void nvidia_delete_i2c_busses(struct nvidia_par *par)
-{
- int i;
-
- for (i = 0; i < 3; i++) {
- if (!par->chan[i].par)
- continue;
- i2c_del_adapter(&par->chan[i].adapter);
- par->chan[i].par = NULL;
- }
-}
-
-int nvidia_probe_i2c_connector(struct fb_info *info, int conn, u8 **out_edid)
-{
- struct nvidia_par *par = info->par;
- u8 *edid = NULL;
-
- if (par->chan[conn - 1].par)
- edid = fb_ddc_read(&par->chan[conn - 1].adapter);
-
- if (!edid && conn == 1) {
- /* try to get from firmware */
- const u8 *e = fb_firmware_edid(info->device);
-
- if (e != NULL)
- edid = kmemdup(e, EDID_LENGTH, GFP_KERNEL);
- }
-
- *out_edid = edid;
-
- return (edid) ? 0 : 1;
-}
diff --git a/drivers/video/fbdev/nvidia/nv_local.h b/drivers/video/fbdev/nvidia/nv_local.h
deleted file mode 100644
index 68e508daa417..000000000000
--- a/drivers/video/fbdev/nvidia/nv_local.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/***************************************************************************\
-|* *|
-|* Copyright 1993-2003 NVIDIA, Corporation. All rights reserved. *|
-|* *|
-|* NOTICE TO USER: The source code is copyrighted under U.S. and *|
-|* international laws. Users and possessors of this source code are *|
-|* hereby granted a nonexclusive, royalty-free copyright license to *|
-|* use this code in individual and commercial software. *|
-|* *|
-|* Any use of this source code must include, in the user documenta- *|
-|* tion and internal comments to the code, notices to the end user *|
-|* as follows: *|
-|* *|
-|* Copyright 1993-1999 NVIDIA, Corporation. All rights reserved. *|
-|* *|
-|* NVIDIA, CORPORATION MAKES NO REPRESENTATION ABOUT THE SUITABILITY *|
-|* OF THIS SOURCE CODE FOR ANY PURPOSE. IT IS PROVIDED "AS IS" *|
-|* WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND. NVIDIA, CORPOR- *|
-|* ATION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOURCE CODE, *|
-|* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGE- *|
-|* MENT, AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL *|
-|* NVIDIA, CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT, INCI- *|
-|* DENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RE- *|
-|* SULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION *|
-|* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF *|
-|* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOURCE CODE. *|
-|* *|
-|* U.S. Government End Users. This source code is a "commercial *|
-|* item," as that term is defined at 48 C.F.R. 2.101 (OCT 1995), *|
-|* consisting of "commercial computer software" and "commercial *|
-|* computer software documentation," as such terms are used in *|
-|* 48 C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Govern- *|
-|* ment only as a commercial end item. Consistent with 48 C.F.R. *|
-|* 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), *|
-|* all U.S. Government End Users acquire the source code with only *|
-|* those rights set forth herein. *|
-|* *|
- \***************************************************************************/
-
-/*
- * GPL Licensing Note - According to Mark Vojkovich, author of the Xorg/
- * XFree86 'nv' driver, this source code is provided under MIT-style licensing
- * where the source code is provided "as is" without warranty of any kind.
- * The only usage restriction is for the copyright notices to be retained
- * whenever code is used.
- *
- * Antonino Daplas <adaplas@pol.net> 2005-03-11
- */
-
-#ifndef __NV_LOCAL_H__
-#define __NV_LOCAL_H__
-
-/*
- * This file includes any environment or machine specific values to access the
- * HW. Put all affected includes, typdefs, etc. here so the riva_hw.* files
- * can stay generic in nature.
- */
-
-/*
- * HW access macros. These assume memory-mapped I/O, and not normal I/O space.
- */
-#define NV_WR08(p,i,d) (__raw_writeb((d), (void __iomem *)(p) + (i)))
-#define NV_RD08(p,i) (__raw_readb((void __iomem *)(p) + (i)))
-#define NV_WR16(p,i,d) (__raw_writew((d), (void __iomem *)(p) + (i)))
-#define NV_RD16(p,i) (__raw_readw((void __iomem *)(p) + (i)))
-#define NV_WR32(p,i,d) (__raw_writel((d), (void __iomem *)(p) + (i)))
-#define NV_RD32(p,i) (__raw_readl((void __iomem *)(p) + (i)))
-
-/* VGA I/O is now always done through MMIO */
-#define VGA_WR08(p,i,d) (writeb((d), (void __iomem *)(p) + (i)))
-#define VGA_RD08(p,i) (readb((void __iomem *)(p) + (i)))
-
-#define NVDmaNext(par, data) \
- NV_WR32(&(par)->dmaBase[(par)->dmaCurrent++], 0, (data))
-
-#define NVDmaStart(info, par, tag, size) { \
- if((par)->dmaFree <= (size)) \
- NVDmaWait(info, size); \
- NVDmaNext(par, ((size) << 18) | (tag)); \
- (par)->dmaFree -= ((size) + 1); \
-}
-
-#if defined(__i386__)
-#define _NV_FENCE() outb(0, 0x3D0);
-#else
-#define _NV_FENCE() mb();
-#endif
-
-#define WRITE_PUT(par, data) { \
- _NV_FENCE() \
- NV_RD08((par)->FbStart, 0); \
- NV_WR32(&(par)->FIFO[0x0010], 0, (data) << 2); \
- mb(); \
-}
-
-#define READ_GET(par) (NV_RD32(&(par)->FIFO[0x0011], 0) >> 2)
-
-#ifdef __LITTLE_ENDIAN
-
-#include <linux/bitrev.h>
-
-#define reverse_order(l) \
-do { \
- u8 *a = (u8 *)(l); \
- a[0] = bitrev8(a[0]); \
- a[1] = bitrev8(a[1]); \
- a[2] = bitrev8(a[2]); \
- a[3] = bitrev8(a[3]); \
-} while(0)
-#else
-#define reverse_order(l) do { } while(0)
-#endif /* __LITTLE_ENDIAN */
-
-#endif /* __NV_LOCAL_H__ */
diff --git a/drivers/video/fbdev/nvidia/nv_of.c b/drivers/video/fbdev/nvidia/nv_of.c
deleted file mode 100644
index 5f3e5179c25a..000000000000
--- a/drivers/video/fbdev/nvidia/nv_of.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * linux/drivers/video/nvidia/nv_of.c
- *
- * Copyright 2004 Antonino A. Daplas <adaplas @pol.net>
- *
- * Based on rivafb-i2c.c
- *
- * This file is subject to the terms and conditions of the GNU General Public
- * License. See the file COPYING in the main directory of this archive
- * for more details.
- */
-
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/delay.h>
-#include <linux/gfp.h>
-#include <linux/pci.h>
-#include <linux/fb.h>
-
-#include <asm/io.h>
-
-#include "nv_type.h"
-#include "nv_local.h"
-#include "nv_proto.h"
-
-#include "../edid.h"
-
-int nvidia_probe_of_connector(struct fb_info *info, int conn, u8 **out_edid)
-{
- struct nvidia_par *par = info->par;
- struct device_node *parent, *dp;
- const unsigned char *pedid = NULL;
- static char *propnames[] = {
- "DFP,EDID", "LCD,EDID", "EDID", "EDID1",
- "EDID,B", "EDID,A", NULL };
- int i;
-
- parent = pci_device_to_OF_node(par->pci_dev);
- if (parent == NULL)
- return -1;
- if (par->twoHeads) {
- const char *pname;
- int len;
-
- for (dp = NULL;
- (dp = of_get_next_child(parent, dp)) != NULL;) {
- pname = of_get_property(dp, "name", NULL);
- if (!pname)
- continue;
- len = strlen(pname);
- if ((pname[len-1] == 'A' && conn == 1) ||
- (pname[len-1] == 'B' && conn == 2)) {
- for (i = 0; propnames[i] != NULL; ++i) {
- pedid = of_get_property(dp,
- propnames[i], NULL);
- if (pedid != NULL)
- break;
- }
- of_node_put(dp);
- break;
- }
- }
- }
- if (pedid == NULL) {
- for (i = 0; propnames[i] != NULL; ++i) {
- pedid = of_get_property(parent, propnames[i], NULL);
- if (pedid != NULL)
- break;
- }
- }
- if (pedid) {
- *out_edid = kmemdup(pedid, EDID_LENGTH, GFP_KERNEL);
- if (*out_edid == NULL)
- return -1;
- printk(KERN_DEBUG "nvidiafb: Found OF EDID for head %d\n", conn);
- return 0;
- }
- return -1;
-}
diff --git a/drivers/video/fbdev/nvidia/nv_proto.h b/drivers/video/fbdev/nvidia/nv_proto.h
deleted file mode 100644
index fb9c5ebf2958..000000000000
--- a/drivers/video/fbdev/nvidia/nv_proto.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_proto.h,v 1.10 2003/07/31 20:24:29 mvojkovi Exp $ */
-
-#ifndef __NV_PROTO_H__
-#define __NV_PROTO_H__
-
-/* in nv_setup.c */
-int NVCommonSetup(struct fb_info *info);
-void NVWriteCrtc(struct nvidia_par *par, u8 index, u8 value);
-u8 NVReadCrtc(struct nvidia_par *par, u8 index);
-void NVWriteGr(struct nvidia_par *par, u8 index, u8 value);
-u8 NVReadGr(struct nvidia_par *par, u8 index);
-void NVWriteSeq(struct nvidia_par *par, u8 index, u8 value);
-u8 NVReadSeq(struct nvidia_par *par, u8 index);
-void NVWriteAttr(struct nvidia_par *par, u8 index, u8 value);
-u8 NVReadAttr(struct nvidia_par *par, u8 index);
-void NVWriteMiscOut(struct nvidia_par *par, u8 value);
-u8 NVReadMiscOut(struct nvidia_par *par);
-void NVWriteDacMask(struct nvidia_par *par, u8 value);
-void NVWriteDacReadAddr(struct nvidia_par *par, u8 value);
-void NVWriteDacWriteAddr(struct nvidia_par *par, u8 value);
-void NVWriteDacData(struct nvidia_par *par, u8 value);
-u8 NVReadDacData(struct nvidia_par *par);
-
-/* in nv_hw.c */
-void NVCalcStateExt(struct nvidia_par *par, struct _riva_hw_state *,
- int, int, int, int, int, int);
-void NVLoadStateExt(struct nvidia_par *par, struct _riva_hw_state *);
-void NVUnloadStateExt(struct nvidia_par *par, struct _riva_hw_state *);
-void NVSetStartAddress(struct nvidia_par *par, u32);
-int NVShowHideCursor(struct nvidia_par *par, int);
-void NVLockUnlock(struct nvidia_par *par, int);
-
-/* in nvidia-i2c.c */
-#ifdef CONFIG_FB_NVIDIA_I2C
-void nvidia_create_i2c_busses(struct nvidia_par *par);
-void nvidia_delete_i2c_busses(struct nvidia_par *par);
-int nvidia_probe_i2c_connector(struct fb_info *info, int conn,
- u8 ** out_edid);
-#else
-#define nvidia_create_i2c_busses(...)
-#define nvidia_delete_i2c_busses(...)
-#define nvidia_probe_i2c_connector(p, c, edid) (-1)
-#endif
-
-int nvidia_probe_of_connector(struct fb_info *info, int conn,
- u8 ** out_edid);
-
-/* in nv_accel.c */
-extern void NVResetGraphics(struct fb_info *info);
-extern void nvidiafb_copyarea(struct fb_info *info,
- const struct fb_copyarea *region);
-extern void nvidiafb_fillrect(struct fb_info *info,
- const struct fb_fillrect *rect);
-extern void nvidiafb_imageblit(struct fb_info *info,
- const struct fb_image *image);
-extern int nvidiafb_sync(struct fb_info *info);
-
-/* in nv_backlight.h */
-#ifdef CONFIG_FB_NVIDIA_BACKLIGHT
-extern void nvidia_bl_init(struct nvidia_par *par);
-extern void nvidia_bl_exit(struct nvidia_par *par);
-#else
-static inline void nvidia_bl_init(struct nvidia_par *par) {}
-static inline void nvidia_bl_exit(struct nvidia_par *par) {}
-#endif
-
-#endif /* __NV_PROTO_H__ */
diff --git a/drivers/video/fbdev/nvidia/nv_setup.c b/drivers/video/fbdev/nvidia/nv_setup.c
deleted file mode 100644
index 2fa68669613a..000000000000
--- a/drivers/video/fbdev/nvidia/nv_setup.c
+++ /dev/null
@@ -1,652 +0,0 @@
- /***************************************************************************\
-|* *|
-|* Copyright 2003 NVIDIA, Corporation. All rights reserved. *|
-|* *|
-|* NOTICE TO USER: The source code is copyrighted under U.S. and *|
-|* international laws. Users and possessors of this source code are *|
-|* hereby granted a nonexclusive, royalty-free copyright license to *|
-|* use this code in individual and commercial software. *|
-|* *|
-|* Any use of this source code must include, in the user documenta- *|
-|* tion and internal comments to the code, notices to the end user *|
-|* as follows: *|
-|* *|
-|* Copyright 2003 NVIDIA, Corporation. All rights reserved. *|
-|* *|
-|* NVIDIA, CORPORATION MAKES NO REPRESENTATION ABOUT THE SUITABILITY *|
-|* OF THIS SOURCE CODE FOR ANY PURPOSE. IT IS PROVIDED "AS IS" *|
-|* WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND. NVIDIA, CORPOR- *|
-|* ATION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOURCE CODE, *|
-|* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGE- *|
-|* MENT, AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL *|
-|* NVIDIA, CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT, INCI- *|
-|* DENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RE- *|
-|* SULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION *|
-|* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF *|
-|* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOURCE CODE. *|
-|* *|
-|* U.S. Government End Users. This source code is a "commercial *|
-|* item," as that term is defined at 48 C.F.R. 2.101 (OCT 1995), *|
-|* consisting of "commercial computer software" and "commercial *|
-|* computer software documentation," as such terms are used in *|
-|* 48 C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Govern- *|
-|* ment only as a commercial end item. Consistent with 48 C.F.R. *|
-|* 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), *|
-|* all U.S. Government End Users acquire the source code with only *|
-|* those rights set forth herein. *|
-|* *|
- \***************************************************************************/
-
-/*
- * GPL Licensing Note - According to Mark Vojkovich, author of the Xorg/
- * XFree86 'nv' driver, this source code is provided under MIT-style licensing
- * where the source code is provided "as is" without warranty of any kind.
- * The only usage restriction is for the copyright notices to be retained
- * whenever code is used.
- *
- * Antonino Daplas <adaplas@pol.net> 2005-03-11
- */
-
-#include <video/vga.h>
-#include <linux/delay.h>
-#include <linux/pci.h>
-#include <linux/slab.h>
-#include "nv_type.h"
-#include "nv_local.h"
-#include "nv_proto.h"
-/*
- * Override VGA I/O routines.
- */
-void NVWriteCrtc(struct nvidia_par *par, u8 index, u8 value)
-{
- VGA_WR08(par->PCIO, par->IOBase + 0x04, index);
- VGA_WR08(par->PCIO, par->IOBase + 0x05, value);
-}
-u8 NVReadCrtc(struct nvidia_par *par, u8 index)
-{
- VGA_WR08(par->PCIO, par->IOBase + 0x04, index);
- return (VGA_RD08(par->PCIO, par->IOBase + 0x05));
-}
-void NVWriteGr(struct nvidia_par *par, u8 index, u8 value)
-{
- VGA_WR08(par->PVIO, VGA_GFX_I, index);
- VGA_WR08(par->PVIO, VGA_GFX_D, value);
-}
-u8 NVReadGr(struct nvidia_par *par, u8 index)
-{
- VGA_WR08(par->PVIO, VGA_GFX_I, index);
- return (VGA_RD08(par->PVIO, VGA_GFX_D));
-}
-void NVWriteSeq(struct nvidia_par *par, u8 index, u8 value)
-{
- VGA_WR08(par->PVIO, VGA_SEQ_I, index);
- VGA_WR08(par->PVIO, VGA_SEQ_D, value);
-}
-u8 NVReadSeq(struct nvidia_par *par, u8 index)
-{
- VGA_WR08(par->PVIO, VGA_SEQ_I, index);
- return (VGA_RD08(par->PVIO, VGA_SEQ_D));
-}
-void NVWriteAttr(struct nvidia_par *par, u8 index, u8 value)
-{
- volatile u8 tmp;
-
- tmp = VGA_RD08(par->PCIO, par->IOBase + 0x0a);
- if (par->paletteEnabled)
- index &= ~0x20;
- else
- index |= 0x20;
- VGA_WR08(par->PCIO, VGA_ATT_IW, index);
- VGA_WR08(par->PCIO, VGA_ATT_W, value);
-}
-u8 NVReadAttr(struct nvidia_par *par, u8 index)
-{
- volatile u8 tmp;
-
- tmp = VGA_RD08(par->PCIO, par->IOBase + 0x0a);
- if (par->paletteEnabled)
- index &= ~0x20;
- else
- index |= 0x20;
- VGA_WR08(par->PCIO, VGA_ATT_IW, index);
- return (VGA_RD08(par->PCIO, VGA_ATT_R));
-}
-void NVWriteMiscOut(struct nvidia_par *par, u8 value)
-{
- VGA_WR08(par->PVIO, VGA_MIS_W, value);
-}
-u8 NVReadMiscOut(struct nvidia_par *par)
-{
- return (VGA_RD08(par->PVIO, VGA_MIS_R));
-}
-void NVWriteDacMask(struct nvidia_par *par, u8 value)
-{
- VGA_WR08(par->PDIO, VGA_PEL_MSK, value);
-}
-void NVWriteDacReadAddr(struct nvidia_par *par, u8 value)
-{
- VGA_WR08(par->PDIO, VGA_PEL_IR, value);
-}
-void NVWriteDacWriteAddr(struct nvidia_par *par, u8 value)
-{
- VGA_WR08(par->PDIO, VGA_PEL_IW, value);
-}
-void NVWriteDacData(struct nvidia_par *par, u8 value)
-{
- VGA_WR08(par->PDIO, VGA_PEL_D, value);
-}
-u8 NVReadDacData(struct nvidia_par *par)
-{
- return (VGA_RD08(par->PDIO, VGA_PEL_D));
-}
-
-static int NVIsConnected(struct nvidia_par *par, int output)
-{
- volatile u32 __iomem *PRAMDAC = par->PRAMDAC0;
- u32 reg52C, reg608, dac0_reg608 = 0;
- int present;
-
- if (output) {
- dac0_reg608 = NV_RD32(PRAMDAC, 0x0608);
- PRAMDAC += 0x800;
- }
-
- reg52C = NV_RD32(PRAMDAC, 0x052C);
- reg608 = NV_RD32(PRAMDAC, 0x0608);
-
- NV_WR32(PRAMDAC, 0x0608, reg608 & ~0x00010000);
-
- NV_WR32(PRAMDAC, 0x052C, reg52C & 0x0000FEEE);
- msleep(1);
- NV_WR32(PRAMDAC, 0x052C, NV_RD32(PRAMDAC, 0x052C) | 1);
-
- NV_WR32(par->PRAMDAC0, 0x0610, 0x94050140);
- NV_WR32(par->PRAMDAC0, 0x0608, NV_RD32(par->PRAMDAC0, 0x0608) |
- 0x00001000);
-
- msleep(1);
-
- present = (NV_RD32(PRAMDAC, 0x0608) & (1 << 28)) ? 1 : 0;
-
- if (present)
- printk("nvidiafb: CRTC%i analog found\n", output);
- else
- printk("nvidiafb: CRTC%i analog not found\n", output);
-
- if (output)
- NV_WR32(par->PRAMDAC0, 0x0608, dac0_reg608);
-
- NV_WR32(PRAMDAC, 0x052C, reg52C);
- NV_WR32(PRAMDAC, 0x0608, reg608);
-
- return present;
-}
-
-static void NVSelectHeadRegisters(struct nvidia_par *par, int head)
-{
- if (head) {
- par->PCIO = par->PCIO0 + 0x2000;
- par->PCRTC = par->PCRTC0 + 0x800;
- par->PRAMDAC = par->PRAMDAC0 + 0x800;
- par->PDIO = par->PDIO0 + 0x2000;
- } else {
- par->PCIO = par->PCIO0;
- par->PCRTC = par->PCRTC0;
- par->PRAMDAC = par->PRAMDAC0;
- par->PDIO = par->PDIO0;
- }
-}
-
-static void nv4GetConfig(struct nvidia_par *par)
-{
- if (NV_RD32(par->PFB, 0x0000) & 0x00000100) {
- par->RamAmountKBytes =
- ((NV_RD32(par->PFB, 0x0000) >> 12) & 0x0F) * 1024 * 2 +
- 1024 * 2;
- } else {
- switch (NV_RD32(par->PFB, 0x0000) & 0x00000003) {
- case 0:
- par->RamAmountKBytes = 1024 * 32;
- break;
- case 1:
- par->RamAmountKBytes = 1024 * 4;
- break;
- case 2:
- par->RamAmountKBytes = 1024 * 8;
- break;
- case 3:
- default:
- par->RamAmountKBytes = 1024 * 16;
- break;
- }
- }
- par->CrystalFreqKHz = (NV_RD32(par->PEXTDEV, 0x0000) & 0x00000040) ?
- 14318 : 13500;
- par->CURSOR = &par->PRAMIN[0x1E00];
- par->MinVClockFreqKHz = 12000;
- par->MaxVClockFreqKHz = 350000;
-}
-
-static void nv10GetConfig(struct nvidia_par *par)
-{
- struct pci_dev *dev;
- u32 implementation = par->Chipset & 0x0ff0;
-
-#ifdef __BIG_ENDIAN
- /* turn on big endian register access */
- if (!(NV_RD32(par->PMC, 0x0004) & 0x01000001)) {
- NV_WR32(par->PMC, 0x0004, 0x01000001);
- mb();
- }
-#endif
-
- dev = pci_get_domain_bus_and_slot(pci_domain_nr(par->pci_dev->bus),
- 0, 1);
- if ((par->Chipset & 0xffff) == 0x01a0) {
- u32 amt;
-
- pci_read_config_dword(dev, 0x7c, &amt);
- par->RamAmountKBytes = (((amt >> 6) & 31) + 1) * 1024;
- } else if ((par->Chipset & 0xffff) == 0x01f0) {
- u32 amt;
-
- pci_read_config_dword(dev, 0x84, &amt);
- par->RamAmountKBytes = (((amt >> 4) & 127) + 1) * 1024;
- } else {
- par->RamAmountKBytes =
- (NV_RD32(par->PFB, 0x020C) & 0xFFF00000) >> 10;
- }
- pci_dev_put(dev);
-
- par->CrystalFreqKHz = (NV_RD32(par->PEXTDEV, 0x0000) & (1 << 6)) ?
- 14318 : 13500;
-
- if (par->twoHeads && (implementation != 0x0110)) {
- if (NV_RD32(par->PEXTDEV, 0x0000) & (1 << 22))
- par->CrystalFreqKHz = 27000;
- }
-
- par->CURSOR = NULL; /* can't set this here */
- par->MinVClockFreqKHz = 12000;
- par->MaxVClockFreqKHz = par->twoStagePLL ? 400000 : 350000;
-}
-
-int NVCommonSetup(struct fb_info *info)
-{
- struct nvidia_par *par = info->par;
- struct fb_var_screeninfo *var;
- u16 implementation = par->Chipset & 0x0ff0;
- u8 *edidA = NULL, *edidB = NULL;
- struct fb_monspecs *monitorA, *monitorB;
- struct fb_monspecs *monA = NULL, *monB = NULL;
- int mobile = 0;
- int tvA = 0;
- int tvB = 0;
- int FlatPanel = -1; /* really means the CRTC is slaved */
- int Television = 0;
- int err = 0;
-
- var = kzalloc(sizeof(struct fb_var_screeninfo), GFP_KERNEL);
- monitorA = kzalloc(sizeof(struct fb_monspecs), GFP_KERNEL);
- monitorB = kzalloc(sizeof(struct fb_monspecs), GFP_KERNEL);
-
- if (!var || !monitorA || !monitorB) {
- err = -ENOMEM;
- goto done;
- }
-
- par->PRAMIN = par->REGS + (0x00710000 / 4);
- par->PCRTC0 = par->REGS + (0x00600000 / 4);
- par->PRAMDAC0 = par->REGS + (0x00680000 / 4);
- par->PFB = par->REGS + (0x00100000 / 4);
- par->PFIFO = par->REGS + (0x00002000 / 4);
- par->PGRAPH = par->REGS + (0x00400000 / 4);
- par->PEXTDEV = par->REGS + (0x00101000 / 4);
- par->PTIMER = par->REGS + (0x00009000 / 4);
- par->PMC = par->REGS + (0x00000000 / 4);
- par->FIFO = par->REGS + (0x00800000 / 4);
-
- /* 8 bit registers */
- par->PCIO0 = (u8 __iomem *) par->REGS + 0x00601000;
- par->PDIO0 = (u8 __iomem *) par->REGS + 0x00681000;
- par->PVIO = (u8 __iomem *) par->REGS + 0x000C0000;
-
- par->twoHeads = (par->Architecture >= NV_ARCH_10) &&
- (implementation != 0x0100) &&
- (implementation != 0x0150) &&
- (implementation != 0x01A0) && (implementation != 0x0200);
-
- par->fpScaler = (par->FpScale && par->twoHeads &&
- (implementation != 0x0110));
-
- par->twoStagePLL = (implementation == 0x0310) ||
- (implementation == 0x0340) || (par->Architecture >= NV_ARCH_40);
-
- par->WaitVSyncPossible = (par->Architecture >= NV_ARCH_10) &&
- (implementation != 0x0100);
-
- par->BlendingPossible = ((par->Chipset & 0xffff) != 0x0020);
-
- /* look for known laptop chips */
- switch (par->Chipset & 0xffff) {
- case 0x0112:
- case 0x0174:
- case 0x0175:
- case 0x0176:
- case 0x0177:
- case 0x0179:
- case 0x017C:
- case 0x017D:
- case 0x0186:
- case 0x0187:
- case 0x018D:
- case 0x01D7:
- case 0x0228:
- case 0x0286:
- case 0x028C:
- case 0x0316:
- case 0x0317:
- case 0x031A:
- case 0x031B:
- case 0x031C:
- case 0x031D:
- case 0x031E:
- case 0x031F:
- case 0x0324:
- case 0x0325:
- case 0x0328:
- case 0x0329:
- case 0x032C:
- case 0x032D:
- case 0x0347:
- case 0x0348:
- case 0x0349:
- case 0x034B:
- case 0x034C:
- case 0x0160:
- case 0x0166:
- case 0x0169:
- case 0x016B:
- case 0x016C:
- case 0x016D:
- case 0x00C8:
- case 0x00CC:
- case 0x0144:
- case 0x0146:
- case 0x0147:
- case 0x0148:
- case 0x0098:
- case 0x0099:
- mobile = 1;
- break;
- default:
- break;
- }
-
- if (par->Architecture == NV_ARCH_04)
- nv4GetConfig(par);
- else
- nv10GetConfig(par);
-
- NVSelectHeadRegisters(par, 0);
-
- NVLockUnlock(par, 0);
-
- par->IOBase = (NVReadMiscOut(par) & 0x01) ? 0x3d0 : 0x3b0;
-
- par->Television = 0;
-
- nvidia_create_i2c_busses(par);
- if (!par->twoHeads) {
- par->CRTCnumber = 0;
- if (nvidia_probe_i2c_connector(info, 1, &edidA))
- nvidia_probe_of_connector(info, 1, &edidA);
- if (edidA && !fb_parse_edid(edidA, var)) {
- printk("nvidiafb: EDID found from BUS1\n");
- monA = monitorA;
- fb_edid_to_monspecs(edidA, monA);
- FlatPanel = (monA->input & FB_DISP_DDI) ? 1 : 0;
-
- /* NV4 doesn't support FlatPanels */
- if ((par->Chipset & 0x0fff) <= 0x0020)
- FlatPanel = 0;
- } else {
- VGA_WR08(par->PCIO, 0x03D4, 0x28);
- if (VGA_RD08(par->PCIO, 0x03D5) & 0x80) {
- VGA_WR08(par->PCIO, 0x03D4, 0x33);
- if (!(VGA_RD08(par->PCIO, 0x03D5) & 0x01))
- Television = 1;
- FlatPanel = 1;
- } else {
- FlatPanel = 0;
- }
- printk("nvidiafb: HW is currently programmed for %s\n",
- FlatPanel ? (Television ? "TV" : "DFP") :
- "CRT");
- }
-
- if (par->FlatPanel == -1) {
- par->FlatPanel = FlatPanel;
- par->Television = Television;
- } else {
- printk("nvidiafb: Forcing display type to %s as "
- "specified\n", par->FlatPanel ? "DFP" : "CRT");
- }
- } else {
- u8 outputAfromCRTC, outputBfromCRTC;
- int CRTCnumber = -1;
- u8 slaved_on_A, slaved_on_B;
- int analog_on_A, analog_on_B;
- u32 oldhead;
- u8 cr44;
-
- if (implementation != 0x0110) {
- if (NV_RD32(par->PRAMDAC0, 0x0000052C) & 0x100)
- outputAfromCRTC = 1;
- else
- outputAfromCRTC = 0;
- if (NV_RD32(par->PRAMDAC0, 0x0000252C) & 0x100)
- outputBfromCRTC = 1;
- else
- outputBfromCRTC = 0;
- analog_on_A = NVIsConnected(par, 0);
- analog_on_B = NVIsConnected(par, 1);
- } else {
- outputAfromCRTC = 0;
- outputBfromCRTC = 1;
- analog_on_A = 0;
- analog_on_B = 0;
- }
-
- VGA_WR08(par->PCIO, 0x03D4, 0x44);
- cr44 = VGA_RD08(par->PCIO, 0x03D5);
-
- VGA_WR08(par->PCIO, 0x03D5, 3);
- NVSelectHeadRegisters(par, 1);
- NVLockUnlock(par, 0);
-
- VGA_WR08(par->PCIO, 0x03D4, 0x28);
- slaved_on_B = VGA_RD08(par->PCIO, 0x03D5) & 0x80;
- if (slaved_on_B) {
- VGA_WR08(par->PCIO, 0x03D4, 0x33);
- tvB = !(VGA_RD08(par->PCIO, 0x03D5) & 0x01);
- }
-
- VGA_WR08(par->PCIO, 0x03D4, 0x44);
- VGA_WR08(par->PCIO, 0x03D5, 0);
- NVSelectHeadRegisters(par, 0);
- NVLockUnlock(par, 0);
-
- VGA_WR08(par->PCIO, 0x03D4, 0x28);
- slaved_on_A = VGA_RD08(par->PCIO, 0x03D5) & 0x80;
- if (slaved_on_A) {
- VGA_WR08(par->PCIO, 0x03D4, 0x33);
- tvA = !(VGA_RD08(par->PCIO, 0x03D5) & 0x01);
- }
-
- oldhead = NV_RD32(par->PCRTC0, 0x00000860);
- NV_WR32(par->PCRTC0, 0x00000860, oldhead | 0x00000010);
-
- if (nvidia_probe_i2c_connector(info, 1, &edidA))
- nvidia_probe_of_connector(info, 1, &edidA);
- if (edidA && !fb_parse_edid(edidA, var)) {
- printk("nvidiafb: EDID found from BUS1\n");
- monA = monitorA;
- fb_edid_to_monspecs(edidA, monA);
- }
-
- if (nvidia_probe_i2c_connector(info, 2, &edidB))
- nvidia_probe_of_connector(info, 2, &edidB);
- if (edidB && !fb_parse_edid(edidB, var)) {
- printk("nvidiafb: EDID found from BUS2\n");
- monB = monitorB;
- fb_edid_to_monspecs(edidB, monB);
- }
-
- if (slaved_on_A && !tvA) {
- CRTCnumber = 0;
- FlatPanel = 1;
- printk("nvidiafb: CRTC 0 is currently programmed for "
- "DFP\n");
- } else if (slaved_on_B && !tvB) {
- CRTCnumber = 1;
- FlatPanel = 1;
- printk("nvidiafb: CRTC 1 is currently programmed "
- "for DFP\n");
- } else if (analog_on_A) {
- CRTCnumber = outputAfromCRTC;
- FlatPanel = 0;
- printk("nvidiafb: CRTC %i appears to have a "
- "CRT attached\n", CRTCnumber);
- } else if (analog_on_B) {
- CRTCnumber = outputBfromCRTC;
- FlatPanel = 0;
- printk("nvidiafb: CRTC %i appears to have a "
- "CRT attached\n", CRTCnumber);
- } else if (slaved_on_A) {
- CRTCnumber = 0;
- FlatPanel = 1;
- Television = 1;
- printk("nvidiafb: CRTC 0 is currently programmed "
- "for TV\n");
- } else if (slaved_on_B) {
- CRTCnumber = 1;
- FlatPanel = 1;
- Television = 1;
- printk("nvidiafb: CRTC 1 is currently programmed for "
- "TV\n");
- } else if (monA) {
- FlatPanel = (monA->input & FB_DISP_DDI) ? 1 : 0;
- } else if (monB) {
- FlatPanel = (monB->input & FB_DISP_DDI) ? 1 : 0;
- }
-
- if (par->FlatPanel == -1) {
- if (FlatPanel != -1) {
- par->FlatPanel = FlatPanel;
- par->Television = Television;
- } else {
- printk("nvidiafb: Unable to detect display "
- "type...\n");
- if (mobile) {
- printk("...On a laptop, assuming "
- "DFP\n");
- par->FlatPanel = 1;
- } else {
- printk("...Using default of CRT\n");
- par->FlatPanel = 0;
- }
- }
- } else {
- printk("nvidiafb: Forcing display type to %s as "
- "specified\n", par->FlatPanel ? "DFP" : "CRT");
- }
-
- if (par->CRTCnumber == -1) {
- if (CRTCnumber != -1)
- par->CRTCnumber = CRTCnumber;
- else {
- printk("nvidiafb: Unable to detect which "
- "CRTCNumber...\n");
- if (par->FlatPanel)
- par->CRTCnumber = 1;
- else
- par->CRTCnumber = 0;
- printk("...Defaulting to CRTCNumber %i\n",
- par->CRTCnumber);
- }
- } else {
- printk("nvidiafb: Forcing CRTCNumber %i as "
- "specified\n", par->CRTCnumber);
- }
-
- if (monA) {
- if (((monA->input & FB_DISP_DDI) &&
- par->FlatPanel) ||
- ((!(monA->input & FB_DISP_DDI)) &&
- !par->FlatPanel)) {
- if (monB) {
- fb_destroy_modedb(monB->modedb);
- monB = NULL;
- }
- } else {
- fb_destroy_modedb(monA->modedb);
- monA = NULL;
- }
- }
-
- if (monB) {
- if (((monB->input & FB_DISP_DDI) &&
- !par->FlatPanel) ||
- ((!(monB->input & FB_DISP_DDI)) &&
- par->FlatPanel)) {
- fb_destroy_modedb(monB->modedb);
- monB = NULL;
- } else
- monA = monB;
- }
-
- if (implementation == 0x0110)
- cr44 = par->CRTCnumber * 0x3;
-
- NV_WR32(par->PCRTC0, 0x00000860, oldhead);
-
- VGA_WR08(par->PCIO, 0x03D4, 0x44);
- VGA_WR08(par->PCIO, 0x03D5, cr44);
- NVSelectHeadRegisters(par, par->CRTCnumber);
- }
-
- printk("nvidiafb: Using %s on CRTC %i\n",
- par->FlatPanel ? (par->Television ? "TV" : "DFP") : "CRT",
- par->CRTCnumber);
-
- if (par->FlatPanel && !par->Television) {
- par->fpWidth = NV_RD32(par->PRAMDAC, 0x0820) + 1;
- par->fpHeight = NV_RD32(par->PRAMDAC, 0x0800) + 1;
- par->fpSyncs = NV_RD32(par->PRAMDAC, 0x0848) & 0x30000033;
-
- printk("nvidiafb: Panel size is %i x %i\n", par->fpWidth, par->fpHeight);
- }
-
- if (monA)
- info->monspecs = *monA;
-
- if (!par->FlatPanel || !par->twoHeads)
- par->FPDither = 0;
-
- par->LVDS = 0;
- if (par->FlatPanel && par->twoHeads) {
- NV_WR32(par->PRAMDAC0, 0x08B0, 0x00010004);
- if (NV_RD32(par->PRAMDAC0, 0x08b4) & 1)
- par->LVDS = 1;
- printk("nvidiafb: Panel is %s\n", par->LVDS ? "LVDS" : "TMDS");
- }
-
- kfree(edidA);
- kfree(edidB);
-done:
- kfree(var);
- kfree(monitorA);
- kfree(monitorB);
- return err;
-}
diff --git a/drivers/video/fbdev/nvidia/nv_type.h b/drivers/video/fbdev/nvidia/nv_type.h
deleted file mode 100644
index d7a1d4363d5f..000000000000
--- a/drivers/video/fbdev/nvidia/nv_type.h
+++ /dev/null
@@ -1,176 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-#ifndef __NV_TYPE_H__
-#define __NV_TYPE_H__
-
-#include <linux/fb.h>
-#include <linux/types.h>
-#include <linux/i2c.h>
-#include <linux/i2c-algo-bit.h>
-#include <video/vga.h>
-
-#define NV_ARCH_04 0x04
-#define NV_ARCH_10 0x10
-#define NV_ARCH_20 0x20
-#define NV_ARCH_30 0x30
-#define NV_ARCH_40 0x40
-
-#define BITMASK(t,b) (((unsigned)(1U << (((t)-(b)+1)))-1) << (b))
-#define MASKEXPAND(mask) BITMASK(1?mask,0?mask)
-#define SetBF(mask,value) ((value) << (0?mask))
-#define GetBF(var,mask) (((unsigned)((var) & MASKEXPAND(mask))) >> (0?mask) )
-#define SetBitField(value,from,to) SetBF(to, GetBF(value,from))
-#define SetBit(n) (1<<(n))
-#define Set8Bits(value) ((value)&0xff)
-
-#define V_DBLSCAN 1
-
-typedef struct {
- int bitsPerPixel;
- int depth;
- int displayWidth;
- int weight;
-} NVFBLayout;
-
-#define NUM_SEQ_REGS 0x05
-#define NUM_CRT_REGS 0x41
-#define NUM_GRC_REGS 0x09
-#define NUM_ATC_REGS 0x15
-
-struct nvidia_par;
-
-struct nvidia_i2c_chan {
- struct nvidia_par *par;
- unsigned long ddc_base;
- struct i2c_adapter adapter;
- struct i2c_algo_bit_data algo;
-};
-
-typedef struct _riva_hw_state {
- u8 attr[NUM_ATC_REGS];
- u8 crtc[NUM_CRT_REGS];
- u8 gra[NUM_GRC_REGS];
- u8 seq[NUM_SEQ_REGS];
- u8 misc_output;
- u32 bpp;
- u32 width;
- u32 height;
- u32 interlace;
- u32 repaint0;
- u32 repaint1;
- u32 screen;
- u32 scale;
- u32 dither;
- u32 extra;
- u32 fifo;
- u32 pixel;
- u32 horiz;
- u32 arbitration0;
- u32 arbitration1;
- u32 pll;
- u32 pllB;
- u32 vpll;
- u32 vpll2;
- u32 vpllB;
- u32 vpll2B;
- u32 pllsel;
- u32 general;
- u32 crtcOwner;
- u32 head;
- u32 head2;
- u32 config;
- u32 cursorConfig;
- u32 cursor0;
- u32 cursor1;
- u32 cursor2;
- u32 timingH;
- u32 timingV;
- u32 displayV;
- u32 crtcSync;
- u32 control;
-} RIVA_HW_STATE;
-
-struct riva_regs {
- RIVA_HW_STATE ext;
-};
-
-struct nvidia_par {
- RIVA_HW_STATE SavedReg;
- RIVA_HW_STATE ModeReg;
- RIVA_HW_STATE initial_state;
- RIVA_HW_STATE *CurrentState;
- struct vgastate vgastate;
- u32 pseudo_palette[16];
- struct pci_dev *pci_dev;
- u32 Architecture;
- u32 CursorStart;
- int Chipset;
- unsigned long FbAddress;
- u8 __iomem *FbStart;
- u32 FbMapSize;
- u32 FbUsableSize;
- u32 ScratchBufferSize;
- u32 ScratchBufferStart;
- int FpScale;
- u32 MinVClockFreqKHz;
- u32 MaxVClockFreqKHz;
- u32 CrystalFreqKHz;
- u32 RamAmountKBytes;
- u32 IOBase;
- NVFBLayout CurrentLayout;
- int cursor_reset;
- int lockup;
- int videoKey;
- int FlatPanel;
- int FPDither;
- int Television;
- int CRTCnumber;
- int alphaCursor;
- int twoHeads;
- int twoStagePLL;
- int fpScaler;
- int fpWidth;
- int fpHeight;
- int PanelTweak;
- int paneltweak;
- int LVDS;
- int pm_state;
- int reverse_i2c;
- u32 crtcSync_read;
- u32 fpSyncs;
- u32 dmaPut;
- u32 dmaCurrent;
- u32 dmaFree;
- u32 dmaMax;
- u32 __iomem *dmaBase;
- u32 currentRop;
- int WaitVSyncPossible;
- int BlendingPossible;
- u32 paletteEnabled;
- u32 forceCRTC;
- u32 open_count;
- u8 DDCBase;
- int wc_cookie;
- struct nvidia_i2c_chan chan[3];
-
- volatile u32 __iomem *REGS;
- volatile u32 __iomem *PCRTC0;
- volatile u32 __iomem *PCRTC;
- volatile u32 __iomem *PRAMDAC0;
- volatile u32 __iomem *PFB;
- volatile u32 __iomem *PFIFO;
- volatile u32 __iomem *PGRAPH;
- volatile u32 __iomem *PEXTDEV;
- volatile u32 __iomem *PTIMER;
- volatile u32 __iomem *PMC;
- volatile u32 __iomem *PRAMIN;
- volatile u32 __iomem *FIFO;
- volatile u32 __iomem *CURSOR;
- volatile u8 __iomem *PCIO0;
- volatile u8 __iomem *PCIO;
- volatile u8 __iomem *PVIO;
- volatile u8 __iomem *PDIO0;
- volatile u8 __iomem *PDIO;
- volatile u32 __iomem *PRAMDAC;
-};
-
-#endif /* __NV_TYPE_H__ */
diff --git a/drivers/video/fbdev/nvidia/nvidia.c b/drivers/video/fbdev/nvidia/nvidia.c
deleted file mode 100644
index a372a183c1f0..000000000000
--- a/drivers/video/fbdev/nvidia/nvidia.c
+++ /dev/null
@@ -1,1581 +0,0 @@
-/*
- * linux/drivers/video/nvidia/nvidia.c - nVidia fb driver
- *
- * Copyright 2004 Antonino Daplas <adaplas@pol.net>
- *
- * This file is subject to the terms and conditions of the GNU General Public
- * License. See the file COPYING in the main directory of this archive
- * for more details.
- *
- */
-
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/errno.h>
-#include <linux/string.h>
-#include <linux/mm.h>
-#include <linux/slab.h>
-#include <linux/delay.h>
-#include <linux/fb.h>
-#include <linux/init.h>
-#include <linux/pci.h>
-#include <linux/console.h>
-#include <linux/backlight.h>
-#ifdef CONFIG_BOOTX_TEXT
-#include <asm/btext.h>
-#endif
-
-#include "nv_local.h"
-#include "nv_type.h"
-#include "nv_proto.h"
-#include "nv_dma.h"
-
-#ifdef CONFIG_FB_NVIDIA_DEBUG
-#define NVTRACE printk
-#else
-#define NVTRACE if (0) printk
-#endif
-
-#define NVTRACE_ENTER(...) NVTRACE("%s START\n", __func__)
-#define NVTRACE_LEAVE(...) NVTRACE("%s END\n", __func__)
-
-#ifdef CONFIG_FB_NVIDIA_DEBUG
-#define assert(expr) \
- if (!(expr)) { \
- printk( "Assertion failed! %s,%s,%s,line=%d\n",\
- #expr,__FILE__,__func__,__LINE__); \
- BUG(); \
- }
-#else
-#define assert(expr)
-#endif
-
-#define PFX "nvidiafb: "
-
-/* HW cursor parameters */
-#define MAX_CURS 32
-
-static const struct pci_device_id nvidiafb_pci_tbl[] = {
- {PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
- PCI_BASE_CLASS_DISPLAY << 16, 0xff0000, 0},
- { 0, }
-};
-MODULE_DEVICE_TABLE(pci, nvidiafb_pci_tbl);
-
-/* command line data, set in nvidiafb_setup() */
-static int flatpanel = -1; /* Autodetect later */
-static int fpdither = -1;
-static int forceCRTC = -1;
-static int hwcur = 0;
-static int noaccel = 0;
-static int noscale = 0;
-static int paneltweak = 0;
-static int vram = 0;
-static int bpp = 8;
-static int reverse_i2c;
-static bool nomtrr = false;
-static int backlight = IS_BUILTIN(CONFIG_PMAC_BACKLIGHT);
-
-static char *mode_option = NULL;
-
-static struct fb_fix_screeninfo nvidiafb_fix = {
- .type = FB_TYPE_PACKED_PIXELS,
- .xpanstep = 8,
- .ypanstep = 1,
-};
-
-static struct fb_var_screeninfo nvidiafb_default_var = {
- .xres = 640,
- .yres = 480,
- .xres_virtual = 640,
- .yres_virtual = 480,
- .bits_per_pixel = 8,
- .red = {0, 8, 0},
- .green = {0, 8, 0},
- .blue = {0, 8, 0},
- .transp = {0, 0, 0},
- .activate = FB_ACTIVATE_NOW,
- .height = -1,
- .width = -1,
- .pixclock = 39721,
- .left_margin = 40,
- .right_margin = 24,
- .upper_margin = 32,
- .lower_margin = 11,
- .hsync_len = 96,
- .vsync_len = 2,
- .vmode = FB_VMODE_NONINTERLACED
-};
-
-static void nvidiafb_load_cursor_image(struct nvidia_par *par, u8 * data8,
- u16 bg, u16 fg, u32 w, u32 h)
-{
- u32 *data = (u32 *) data8;
- int i, j, k = 0;
- u32 b, tmp;
-
- w = (w + 1) & ~1;
-
- for (i = 0; i < h; i++) {
- b = *data++;
- reverse_order(&b);
-
- for (j = 0; j < w / 2; j++) {
- tmp = 0;
-#if defined (__BIG_ENDIAN)
- tmp = (b & (1 << 31)) ? fg << 16 : bg << 16;
- b <<= 1;
- tmp |= (b & (1 << 31)) ? fg : bg;
- b <<= 1;
-#else
- tmp = (b & 1) ? fg : bg;
- b >>= 1;
- tmp |= (b & 1) ? fg << 16 : bg << 16;
- b >>= 1;
-#endif
- NV_WR32(&par->CURSOR[k++], 0, tmp);
- }
- k += (MAX_CURS - w) / 2;
- }
-}
-
-static void nvidia_write_clut(struct nvidia_par *par,
- u8 regnum, u8 red, u8 green, u8 blue)
-{
- NVWriteDacMask(par, 0xff);
- NVWriteDacWriteAddr(par, regnum);
- NVWriteDacData(par, red);
- NVWriteDacData(par, green);
- NVWriteDacData(par, blue);
-}
-
-static void nvidia_read_clut(struct nvidia_par *par,
- u8 regnum, u8 * red, u8 * green, u8 * blue)
-{
- NVWriteDacMask(par, 0xff);
- NVWriteDacReadAddr(par, regnum);
- *red = NVReadDacData(par);
- *green = NVReadDacData(par);
- *blue = NVReadDacData(par);
-}
-
-static int nvidia_panel_tweak(struct nvidia_par *par,
- struct _riva_hw_state *state)
-{
- int tweak = 0;
-
- if (par->paneltweak) {
- tweak = par->paneltweak;
- } else {
- /* Begin flat panel hacks.
- * This is unfortunate, but some chips need this register
- * tweaked or else you get artifacts where adjacent pixels are
- * swapped. There are no hard rules for what to set here so all
- * we can do is experiment and apply hacks.
- */
- if (((par->Chipset & 0xffff) == 0x0328) && (state->bpp == 32)) {
- /* At least one NV34 laptop needs this workaround. */
- tweak = -1;
- }
-
- if ((par->Chipset & 0xfff0) == 0x0310)
- tweak = 1;
- /* end flat panel hacks */
- }
-
- return tweak;
-}
-
-static void nvidia_screen_off(struct nvidia_par *par, int on)
-{
- unsigned char tmp;
-
- if (on) {
- /*
- * Turn off screen and disable sequencer.
- */
- tmp = NVReadSeq(par, 0x01);
-
- NVWriteSeq(par, 0x00, 0x01); /* Synchronous Reset */
- NVWriteSeq(par, 0x01, tmp | 0x20); /* disable the display */
- } else {
- /*
- * Reenable sequencer, then turn on screen.
- */
-
- tmp = NVReadSeq(par, 0x01);
-
- NVWriteSeq(par, 0x01, tmp & ~0x20); /* reenable display */
- NVWriteSeq(par, 0x00, 0x03); /* End Reset */
- }
-}
-
-static void nvidia_save_vga(struct nvidia_par *par,
- struct _riva_hw_state *state)
-{
- int i;
-
- NVTRACE_ENTER();
- NVLockUnlock(par, 0);
-
- NVUnloadStateExt(par, state);
-
- state->misc_output = NVReadMiscOut(par);
-
- for (i = 0; i < NUM_CRT_REGS; i++)
- state->crtc[i] = NVReadCrtc(par, i);
-
- for (i = 0; i < NUM_ATC_REGS; i++)
- state->attr[i] = NVReadAttr(par, i);
-
- for (i = 0; i < NUM_GRC_REGS; i++)
- state->gra[i] = NVReadGr(par, i);
-
- for (i = 0; i < NUM_SEQ_REGS; i++)
- state->seq[i] = NVReadSeq(par, i);
- NVTRACE_LEAVE();
-}
-
-#undef DUMP_REG
-
-static void nvidia_write_regs(struct nvidia_par *par,
- struct _riva_hw_state *state)
-{
- int i;
-
- NVTRACE_ENTER();
-
- NVLoadStateExt(par, state);
-
- NVWriteMiscOut(par, state->misc_output);
-
- for (i = 1; i < NUM_SEQ_REGS; i++) {
-#ifdef DUMP_REG
- printk(" SEQ[%02x] = %08x\n", i, state->seq[i]);
-#endif
- NVWriteSeq(par, i, state->seq[i]);
- }
-
- /* Ensure CRTC registers 0-7 are unlocked by clearing bit 7 of CRTC[17] */
- NVWriteCrtc(par, 0x11, state->crtc[0x11] & ~0x80);
-
- for (i = 0; i < NUM_CRT_REGS; i++) {
- switch (i) {
- case 0x19:
- case 0x20 ... 0x40:
- break;
- default:
-#ifdef DUMP_REG
- printk("CRTC[%02x] = %08x\n", i, state->crtc[i]);
-#endif
- NVWriteCrtc(par, i, state->crtc[i]);
- }
- }
-
- for (i = 0; i < NUM_GRC_REGS; i++) {
-#ifdef DUMP_REG
- printk(" GRA[%02x] = %08x\n", i, state->gra[i]);
-#endif
- NVWriteGr(par, i, state->gra[i]);
- }
-
- for (i = 0; i < NUM_ATC_REGS; i++) {
-#ifdef DUMP_REG
- printk("ATTR[%02x] = %08x\n", i, state->attr[i]);
-#endif
- NVWriteAttr(par, i, state->attr[i]);
- }
-
- NVTRACE_LEAVE();
-}
-
-static int nvidia_calc_regs(struct fb_info *info)
-{
- struct nvidia_par *par = info->par;
- struct _riva_hw_state *state = &par->ModeReg;
- int i, depth = fb_get_color_depth(&info->var, &info->fix);
- int h_display = info->var.xres / 8 - 1;
- int h_start = (info->var.xres + info->var.right_margin) / 8 - 1;
- int h_end = (info->var.xres + info->var.right_margin +
- info->var.hsync_len) / 8 - 1;
- int h_total = (info->var.xres + info->var.right_margin +
- info->var.hsync_len + info->var.left_margin) / 8 - 5;
- int h_blank_s = h_display;
- int h_blank_e = h_total + 4;
- int v_display = info->var.yres - 1;
- int v_start = info->var.yres + info->var.lower_margin - 1;
- int v_end = (info->var.yres + info->var.lower_margin +
- info->var.vsync_len) - 1;
- int v_total = (info->var.yres + info->var.lower_margin +
- info->var.vsync_len + info->var.upper_margin) - 2;
- int v_blank_s = v_display;
- int v_blank_e = v_total + 1;
-
- /*
- * Set all CRTC values.
- */
-
- if (info->var.vmode & FB_VMODE_INTERLACED)
- v_total |= 1;
-
- if (par->FlatPanel == 1) {
- v_start = v_total - 3;
- v_end = v_total - 2;
- v_blank_s = v_start;
- h_start = h_total - 5;
- h_end = h_total - 2;
- h_blank_e = h_total + 4;
- }
-
- state->crtc[0x0] = Set8Bits(h_total);
- state->crtc[0x1] = Set8Bits(h_display);
- state->crtc[0x2] = Set8Bits(h_blank_s);
- state->crtc[0x3] = SetBitField(h_blank_e, 4: 0, 4:0)
- | SetBit(7);
- state->crtc[0x4] = Set8Bits(h_start);
- state->crtc[0x5] = SetBitField(h_blank_e, 5: 5, 7:7)
- | SetBitField(h_end, 4: 0, 4:0);
- state->crtc[0x6] = SetBitField(v_total, 7: 0, 7:0);
- state->crtc[0x7] = SetBitField(v_total, 8: 8, 0:0)
- | SetBitField(v_display, 8: 8, 1:1)
- | SetBitField(v_start, 8: 8, 2:2)
- | SetBitField(v_blank_s, 8: 8, 3:3)
- | SetBit(4)
- | SetBitField(v_total, 9: 9, 5:5)
- | SetBitField(v_display, 9: 9, 6:6)
- | SetBitField(v_start, 9: 9, 7:7);
- state->crtc[0x9] = SetBitField(v_blank_s, 9: 9, 5:5)
- | SetBit(6)
- | ((info->var.vmode & FB_VMODE_DOUBLE) ? 0x80 : 0x00);
- state->crtc[0x10] = Set8Bits(v_start);
- state->crtc[0x11] = SetBitField(v_end, 3: 0, 3:0) | SetBit(5);
- state->crtc[0x12] = Set8Bits(v_display);
- state->crtc[0x13] = ((info->var.xres_virtual / 8) *
- (info->var.bits_per_pixel / 8));
- state->crtc[0x15] = Set8Bits(v_blank_s);
- state->crtc[0x16] = Set8Bits(v_blank_e);
-
- state->attr[0x10] = 0x01;
-
- if (par->Television)
- state->attr[0x11] = 0x00;
-
- state->screen = SetBitField(h_blank_e, 6: 6, 4:4)
- | SetBitField(v_blank_s, 10: 10, 3:3)
- | SetBitField(v_start, 10: 10, 2:2)
- | SetBitField(v_display, 10: 10, 1:1)
- | SetBitField(v_total, 10: 10, 0:0);
-
- state->horiz = SetBitField(h_total, 8: 8, 0:0)
- | SetBitField(h_display, 8: 8, 1:1)
- | SetBitField(h_blank_s, 8: 8, 2:2)
- | SetBitField(h_start, 8: 8, 3:3);
-
- state->extra = SetBitField(v_total, 11: 11, 0:0)
- | SetBitField(v_display, 11: 11, 2:2)
- | SetBitField(v_start, 11: 11, 4:4)
- | SetBitField(v_blank_s, 11: 11, 6:6);
-
- if (info->var.vmode & FB_VMODE_INTERLACED) {
- h_total = (h_total >> 1) & ~1;
- state->interlace = Set8Bits(h_total);
- state->horiz |= SetBitField(h_total, 8: 8, 4:4);
- } else {
- state->interlace = 0xff; /* interlace off */
- }
-
- /*
- * Calculate the extended registers.
- */
-
- if (depth < 24)
- i = depth;
- else
- i = 32;
-
- if (par->Architecture >= NV_ARCH_10)
- par->CURSOR = (volatile u32 __iomem *)(info->screen_base +
- par->CursorStart);
-
- if (info->var.sync & FB_SYNC_HOR_HIGH_ACT)
- state->misc_output &= ~0x40;
- else
- state->misc_output |= 0x40;
- if (info->var.sync & FB_SYNC_VERT_HIGH_ACT)
- state->misc_output &= ~0x80;
- else
- state->misc_output |= 0x80;
-
- NVCalcStateExt(par, state, i, info->var.xres_virtual,
- info->var.xres, info->var.yres_virtual,
- 1000000000 / info->var.pixclock, info->var.vmode);
-
- state->scale = NV_RD32(par->PRAMDAC, 0x00000848) & 0xfff000ff;
- if (par->FlatPanel == 1) {
- state->pixel |= (1 << 7);
-
- if (!par->fpScaler || (par->fpWidth <= info->var.xres)
- || (par->fpHeight <= info->var.yres)) {
- state->scale |= (1 << 8);
- }
-
- if (!par->crtcSync_read) {
- state->crtcSync = NV_RD32(par->PRAMDAC, 0x0828);
- par->crtcSync_read = 1;
- }
-
- par->PanelTweak = nvidia_panel_tweak(par, state);
- }
-
- state->vpll = state->pll;
- state->vpll2 = state->pll;
- state->vpllB = state->pllB;
- state->vpll2B = state->pllB;
-
- VGA_WR08(par->PCIO, 0x03D4, 0x1C);
- state->fifo = VGA_RD08(par->PCIO, 0x03D5) & ~(1<<5);
-
- if (par->CRTCnumber) {
- state->head = NV_RD32(par->PCRTC0, 0x00000860) & ~0x00001000;
- state->head2 = NV_RD32(par->PCRTC0, 0x00002860) | 0x00001000;
- state->crtcOwner = 3;
- state->pllsel |= 0x20000800;
- state->vpll = NV_RD32(par->PRAMDAC0, 0x00000508);
- if (par->twoStagePLL)
- state->vpllB = NV_RD32(par->PRAMDAC0, 0x00000578);
- } else if (par->twoHeads) {
- state->head = NV_RD32(par->PCRTC0, 0x00000860) | 0x00001000;
- state->head2 = NV_RD32(par->PCRTC0, 0x00002860) & ~0x00001000;
- state->crtcOwner = 0;
- state->vpll2 = NV_RD32(par->PRAMDAC0, 0x0520);
- if (par->twoStagePLL)
- state->vpll2B = NV_RD32(par->PRAMDAC0, 0x057C);
- }
-
- state->cursorConfig = 0x00000100;
-
- if (info->var.vmode & FB_VMODE_DOUBLE)
- state->cursorConfig |= (1 << 4);
-
- if (par->alphaCursor) {
- if ((par->Chipset & 0x0ff0) != 0x0110)
- state->cursorConfig |= 0x04011000;
- else
- state->cursorConfig |= 0x14011000;
- state->general |= (1 << 29);
- } else
- state->cursorConfig |= 0x02000000;
-
- if (par->twoHeads) {
- if ((par->Chipset & 0x0ff0) == 0x0110) {
- state->dither = NV_RD32(par->PRAMDAC, 0x0528) &
- ~0x00010000;
- if (par->FPDither)
- state->dither |= 0x00010000;
- } else {
- state->dither = NV_RD32(par->PRAMDAC, 0x083C) & ~1;
- if (par->FPDither)
- state->dither |= 1;
- }
- }
-
- state->timingH = 0;
- state->timingV = 0;
- state->displayV = info->var.xres;
-
- return 0;
-}
-
-static void nvidia_init_vga(struct fb_info *info)
-{
- struct nvidia_par *par = info->par;
- struct _riva_hw_state *state = &par->ModeReg;
- int i;
-
- for (i = 0; i < 0x10; i++)
- state->attr[i] = i;
- state->attr[0x10] = 0x41;
- state->attr[0x11] = 0xff;
- state->attr[0x12] = 0x0f;
- state->attr[0x13] = 0x00;
- state->attr[0x14] = 0x00;
-
- memset(state->crtc, 0x00, NUM_CRT_REGS);
- state->crtc[0x0a] = 0x20;
- state->crtc[0x17] = 0xe3;
- state->crtc[0x18] = 0xff;
- state->crtc[0x28] = 0x40;
-
- memset(state->gra, 0x00, NUM_GRC_REGS);
- state->gra[0x05] = 0x40;
- state->gra[0x06] = 0x05;
- state->gra[0x07] = 0x0f;
- state->gra[0x08] = 0xff;
-
- state->seq[0x00] = 0x03;
- state->seq[0x01] = 0x01;
- state->seq[0x02] = 0x0f;
- state->seq[0x03] = 0x00;
- state->seq[0x04] = 0x0e;
-
- state->misc_output = 0xeb;
-}
-
-static int nvidiafb_cursor(struct fb_info *info, struct fb_cursor *cursor)
-{
- struct nvidia_par *par = info->par;
- u8 data[MAX_CURS * MAX_CURS / 8];
- int i, set = cursor->set;
- u16 fg, bg;
-
- if (cursor->image.width > MAX_CURS || cursor->image.height > MAX_CURS)
- return -ENXIO;
-
- NVShowHideCursor(par, 0);
-
- if (par->cursor_reset) {
- set = FB_CUR_SETALL;
- par->cursor_reset = 0;
- }
-
- if (set & FB_CUR_SETSIZE)
- memset_io(par->CURSOR, 0, MAX_CURS * MAX_CURS * 2);
-
- if (set & FB_CUR_SETPOS) {
- u32 xx, yy, temp;
-
- yy = cursor->image.dy - info->var.yoffset;
- xx = cursor->image.dx - info->var.xoffset;
- temp = xx & 0xFFFF;
- temp |= yy << 16;
-
- NV_WR32(par->PRAMDAC, 0x0000300, temp);
- }
-
- if (set & (FB_CUR_SETSHAPE | FB_CUR_SETCMAP | FB_CUR_SETIMAGE)) {
- u32 bg_idx = cursor->image.bg_color;
- u32 fg_idx = cursor->image.fg_color;
- u32 s_pitch = (cursor->image.width + 7) >> 3;
- u32 d_pitch = MAX_CURS / 8;
- u8 *dat = (u8 *) cursor->image.data;
- u8 *msk = (u8 *) cursor->mask;
- u8 *src;
-
- src = kmalloc_array(s_pitch, cursor->image.height, GFP_ATOMIC);
-
- if (src) {
- switch (cursor->rop) {
- case ROP_XOR:
- for (i = 0; i < s_pitch * cursor->image.height; i++)
- src[i] = dat[i] ^ msk[i];
- break;
- case ROP_COPY:
- default:
- for (i = 0; i < s_pitch * cursor->image.height; i++)
- src[i] = dat[i] & msk[i];
- break;
- }
-
- fb_pad_aligned_buffer(data, d_pitch, src, s_pitch,
- cursor->image.height);
-
- bg = ((info->cmap.red[bg_idx] & 0xf8) << 7) |
- ((info->cmap.green[bg_idx] & 0xf8) << 2) |
- ((info->cmap.blue[bg_idx] & 0xf8) >> 3) | 1 << 15;
-
- fg = ((info->cmap.red[fg_idx] & 0xf8) << 7) |
- ((info->cmap.green[fg_idx] & 0xf8) << 2) |
- ((info->cmap.blue[fg_idx] & 0xf8) >> 3) | 1 << 15;
-
- NVLockUnlock(par, 0);
-
- nvidiafb_load_cursor_image(par, data, bg, fg,
- cursor->image.width,
- cursor->image.height);
- kfree(src);
- }
- }
-
- if (cursor->enable)
- NVShowHideCursor(par, 1);
-
- return 0;
-}
-
-static struct fb_ops nvidia_fb_ops;
-
-static int nvidiafb_set_par(struct fb_info *info)
-{
- struct nvidia_par *par = info->par;
-
- NVTRACE_ENTER();
-
- NVLockUnlock(par, 1);
- if (!par->FlatPanel || !par->twoHeads)
- par->FPDither = 0;
-
- if (par->FPDither < 0) {
- if ((par->Chipset & 0x0ff0) == 0x0110)
- par->FPDither = !!(NV_RD32(par->PRAMDAC, 0x0528)
- & 0x00010000);
- else
- par->FPDither = !!(NV_RD32(par->PRAMDAC, 0x083C) & 1);
- printk(KERN_INFO PFX "Flat panel dithering %s\n",
- par->FPDither ? "enabled" : "disabled");
- }
-
- info->fix.visual = (info->var.bits_per_pixel == 8) ?
- FB_VISUAL_PSEUDOCOLOR : FB_VISUAL_DIRECTCOLOR;
-
- nvidia_init_vga(info);
- nvidia_calc_regs(info);
-
- NVLockUnlock(par, 0);
- if (par->twoHeads) {
- VGA_WR08(par->PCIO, 0x03D4, 0x44);
- VGA_WR08(par->PCIO, 0x03D5, par->ModeReg.crtcOwner);
- NVLockUnlock(par, 0);
- }
-
- nvidia_screen_off(par, 1);
-
- nvidia_write_regs(par, &par->ModeReg);
- NVSetStartAddress(par, 0);
-
-#if defined (__BIG_ENDIAN)
- /* turn on LFB swapping */
- {
- unsigned char tmp;
-
- VGA_WR08(par->PCIO, 0x3d4, 0x46);
- tmp = VGA_RD08(par->PCIO, 0x3d5);
- tmp |= (1 << 7);
- VGA_WR08(par->PCIO, 0x3d5, tmp);
- }
-#endif
-
- info->fix.line_length = (info->var.xres_virtual *
- info->var.bits_per_pixel) >> 3;
- if (info->var.accel_flags) {
- nvidia_fb_ops.fb_imageblit = nvidiafb_imageblit;
- nvidia_fb_ops.fb_fillrect = nvidiafb_fillrect;
- nvidia_fb_ops.fb_copyarea = nvidiafb_copyarea;
- nvidia_fb_ops.fb_sync = nvidiafb_sync;
- info->pixmap.scan_align = 4;
- info->flags &= ~FBINFO_HWACCEL_DISABLED;
- info->flags |= FBINFO_READS_FAST;
- NVResetGraphics(info);
- } else {
- nvidia_fb_ops.fb_imageblit = cfb_imageblit;
- nvidia_fb_ops.fb_fillrect = cfb_fillrect;
- nvidia_fb_ops.fb_copyarea = cfb_copyarea;
- nvidia_fb_ops.fb_sync = NULL;
- info->pixmap.scan_align = 1;
- info->flags |= FBINFO_HWACCEL_DISABLED;
- info->flags &= ~FBINFO_READS_FAST;
- }
-
- par->cursor_reset = 1;
-
- nvidia_screen_off(par, 0);
-
-#ifdef CONFIG_BOOTX_TEXT
- /* Update debug text engine */
- btext_update_display(info->fix.smem_start,
- info->var.xres, info->var.yres,
- info->var.bits_per_pixel, info->fix.line_length);
-#endif
-
- NVLockUnlock(par, 0);
- NVTRACE_LEAVE();
- return 0;
-}
-
-static int nvidiafb_setcolreg(unsigned regno, unsigned red, unsigned green,
- unsigned blue, unsigned transp,
- struct fb_info *info)
-{
- struct nvidia_par *par = info->par;
- int i;
-
- NVTRACE_ENTER();
- if (regno >= (1 << info->var.green.length))
- return -EINVAL;
-
- if (info->var.grayscale) {
- /* gray = 0.30*R + 0.59*G + 0.11*B */
- red = green = blue = (red * 77 + green * 151 + blue * 28) >> 8;
- }
-
- if (regno < 16 && info->fix.visual == FB_VISUAL_DIRECTCOLOR) {
- ((u32 *) info->pseudo_palette)[regno] =
- (regno << info->var.red.offset) |
- (regno << info->var.green.offset) |
- (regno << info->var.blue.offset);
- }
-
- switch (info->var.bits_per_pixel) {
- case 8:
- /* "transparent" stuff is completely ignored. */
- nvidia_write_clut(par, regno, red >> 8, green >> 8, blue >> 8);
- break;
- case 16:
- if (info->var.green.length == 5) {
- for (i = 0; i < 8; i++) {
- nvidia_write_clut(par, regno * 8 + i, red >> 8,
- green >> 8, blue >> 8);
- }
- } else {
- u8 r, g, b;
-
- if (regno < 32) {
- for (i = 0; i < 8; i++) {
- nvidia_write_clut(par, regno * 8 + i,
- red >> 8, green >> 8,
- blue >> 8);
- }
- }
-
- nvidia_read_clut(par, regno * 4, &r, &g, &b);
-
- for (i = 0; i < 4; i++)
- nvidia_write_clut(par, regno * 4 + i, r,
- green >> 8, b);
- }
- break;
- case 32:
- nvidia_write_clut(par, regno, red >> 8, green >> 8, blue >> 8);
- break;
- default:
- /* do nothing */
- break;
- }
-
- NVTRACE_LEAVE();
- return 0;
-}
-
-static int nvidiafb_check_var(struct fb_var_screeninfo *var,
- struct fb_info *info)
-{
- struct nvidia_par *par = info->par;
- int memlen, vramlen, mode_valid = 0;
- int pitch, err = 0;
-
- NVTRACE_ENTER();
-
- var->transp.offset = 0;
- var->transp.length = 0;
-
- var->xres &= ~7;
-
- if (var->bits_per_pixel <= 8)
- var->bits_per_pixel = 8;
- else if (var->bits_per_pixel <= 16)
- var->bits_per_pixel = 16;
- else
- var->bits_per_pixel = 32;
-
- switch (var->bits_per_pixel) {
- case 8:
- var->red.offset = 0;
- var->red.length = 8;
- var->green.offset = 0;
- var->green.length = 8;
- var->blue.offset = 0;
- var->blue.length = 8;
- var->transp.offset = 0;
- var->transp.length = 0;
- break;
- case 16:
- var->green.length = (var->green.length < 6) ? 5 : 6;
- var->red.length = 5;
- var->blue.length = 5;
- var->transp.length = 6 - var->green.length;
- var->blue.offset = 0;
- var->green.offset = 5;
- var->red.offset = 5 + var->green.length;
- var->transp.offset = (5 + var->red.offset) & 15;
- break;
- case 32: /* RGBA 8888 */
- var->red.offset = 16;
- var->red.length = 8;
- var->green.offset = 8;
- var->green.length = 8;
- var->blue.offset = 0;
- var->blue.length = 8;
- var->transp.length = 8;
- var->transp.offset = 24;
- break;
- }
-
- var->red.msb_right = 0;
- var->green.msb_right = 0;
- var->blue.msb_right = 0;
- var->transp.msb_right = 0;
-
- if (!info->monspecs.hfmax || !info->monspecs.vfmax ||
- !info->monspecs.dclkmax || !fb_validate_mode(var, info))
- mode_valid = 1;
-
- /* calculate modeline if supported by monitor */
- if (!mode_valid && info->monspecs.gtf) {
- if (!fb_get_mode(FB_MAXTIMINGS, 0, var, info))
- mode_valid = 1;
- }
-
- if (!mode_valid) {
- const struct fb_videomode *mode;
-
- mode = fb_find_best_mode(var, &info->modelist);
- if (mode) {
- fb_videomode_to_var(var, mode);
- mode_valid = 1;
- }
- }
-
- if (!mode_valid && info->monspecs.modedb_len)
- return -EINVAL;
-
- /*
- * If we're on a flat panel, check if the mode is outside of the
- * panel dimensions. If so, cap it and try for the next best mode
- * before bailing out.
- */
- if (par->fpWidth && par->fpHeight && (par->fpWidth < var->xres ||
- par->fpHeight < var->yres)) {
- const struct fb_videomode *mode;
-
- var->xres = par->fpWidth;
- var->yres = par->fpHeight;
-
- mode = fb_find_best_mode(var, &info->modelist);
- if (!mode) {
- printk(KERN_ERR PFX "mode out of range of flat "
- "panel dimensions\n");
- return -EINVAL;
- }
-
- fb_videomode_to_var(var, mode);
- }
-
- if (var->yres_virtual < var->yres)
- var->yres_virtual = var->yres;
-
- if (var->xres_virtual < var->xres)
- var->xres_virtual = var->xres;
-
- var->xres_virtual = (var->xres_virtual + 63) & ~63;
-
- vramlen = info->screen_size;
- pitch = ((var->xres_virtual * var->bits_per_pixel) + 7) / 8;
- memlen = pitch * var->yres_virtual;
-
- if (memlen > vramlen) {
- var->yres_virtual = vramlen / pitch;
-
- if (var->yres_virtual < var->yres) {
- var->yres_virtual = var->yres;
- var->xres_virtual = vramlen / var->yres_virtual;
- var->xres_virtual /= var->bits_per_pixel / 8;
- var->xres_virtual &= ~63;
- pitch = (var->xres_virtual *
- var->bits_per_pixel + 7) / 8;
- memlen = pitch * var->yres;
-
- if (var->xres_virtual < var->xres) {
- printk("nvidiafb: required video memory, "
- "%d bytes, for %dx%d-%d (virtual) "
- "is out of range\n",
- memlen, var->xres_virtual,
- var->yres_virtual, var->bits_per_pixel);
- err = -ENOMEM;
- }
- }
- }
-
- if (var->accel_flags) {
- if (var->yres_virtual > 0x7fff)
- var->yres_virtual = 0x7fff;
- if (var->xres_virtual > 0x7fff)
- var->xres_virtual = 0x7fff;
- }
-
- var->xres_virtual &= ~63;
-
- NVTRACE_LEAVE();
-
- return err;
-}
-
-static int nvidiafb_pan_display(struct fb_var_screeninfo *var,
- struct fb_info *info)
-{
- struct nvidia_par *par = info->par;
- u32 total;
-
- total = var->yoffset * info->fix.line_length + var->xoffset;
-
- NVSetStartAddress(par, total);
-
- return 0;
-}
-
-static int nvidiafb_blank(int blank, struct fb_info *info)
-{
- struct nvidia_par *par = info->par;
- unsigned char tmp, vesa;
-
- tmp = NVReadSeq(par, 0x01) & ~0x20; /* screen on/off */
- vesa = NVReadCrtc(par, 0x1a) & ~0xc0; /* sync on/off */
-
- NVTRACE_ENTER();
-
- if (blank)
- tmp |= 0x20;
-
- switch (blank) {
- case FB_BLANK_UNBLANK:
- case FB_BLANK_NORMAL:
- break;
- case FB_BLANK_VSYNC_SUSPEND:
- vesa |= 0x80;
- break;
- case FB_BLANK_HSYNC_SUSPEND:
- vesa |= 0x40;
- break;
- case FB_BLANK_POWERDOWN:
- vesa |= 0xc0;
- break;
- }
-
- NVWriteSeq(par, 0x01, tmp);
- NVWriteCrtc(par, 0x1a, vesa);
-
- NVTRACE_LEAVE();
-
- return 0;
-}
-
-/*
- * Because the VGA registers are not mapped linearly in its MMIO space,
- * restrict VGA register saving and restore to x86 only, where legacy VGA IO
- * access is legal. Consequently, we must also check if the device is the
- * primary display.
- */
-#ifdef CONFIG_X86
-static void save_vga_x86(struct nvidia_par *par)
-{
- struct resource *res= &par->pci_dev->resource[PCI_ROM_RESOURCE];
-
- if (res && res->flags & IORESOURCE_ROM_SHADOW) {
- memset(&par->vgastate, 0, sizeof(par->vgastate));
- par->vgastate.flags = VGA_SAVE_MODE | VGA_SAVE_FONTS |
- VGA_SAVE_CMAP;
- save_vga(&par->vgastate);
- }
-}
-
-static void restore_vga_x86(struct nvidia_par *par)
-{
- struct resource *res= &par->pci_dev->resource[PCI_ROM_RESOURCE];
-
- if (res && res->flags & IORESOURCE_ROM_SHADOW)
- restore_vga(&par->vgastate);
-}
-#else
-#define save_vga_x86(x) do {} while (0)
-#define restore_vga_x86(x) do {} while (0)
-#endif /* X86 */
-
-static int nvidiafb_open(struct fb_info *info, int user)
-{
- struct nvidia_par *par = info->par;
-
- if (!par->open_count) {
- save_vga_x86(par);
- nvidia_save_vga(par, &par->initial_state);
- }
-
- par->open_count++;
- return 0;
-}
-
-static int nvidiafb_release(struct fb_info *info, int user)
-{
- struct nvidia_par *par = info->par;
- int err = 0;
-
- if (!par->open_count) {
- err = -EINVAL;
- goto done;
- }
-
- if (par->open_count == 1) {
- nvidia_write_regs(par, &par->initial_state);
- restore_vga_x86(par);
- }
-
- par->open_count--;
-done:
- return err;
-}
-
-static struct fb_ops nvidia_fb_ops = {
- .owner = THIS_MODULE,
- .fb_open = nvidiafb_open,
- .fb_release = nvidiafb_release,
- .fb_check_var = nvidiafb_check_var,
- .fb_set_par = nvidiafb_set_par,
- .fb_setcolreg = nvidiafb_setcolreg,
- .fb_pan_display = nvidiafb_pan_display,
- .fb_blank = nvidiafb_blank,
- .fb_fillrect = nvidiafb_fillrect,
- .fb_copyarea = nvidiafb_copyarea,
- .fb_imageblit = nvidiafb_imageblit,
- .fb_cursor = nvidiafb_cursor,
- .fb_sync = nvidiafb_sync,
-};
-
-static int nvidiafb_suspend_late(struct device *dev, pm_message_t mesg)
-{
- struct fb_info *info = dev_get_drvdata(dev);
- struct nvidia_par *par = info->par;
-
- if (mesg.event == PM_EVENT_PRETHAW)
- mesg.event = PM_EVENT_FREEZE;
- console_lock();
- par->pm_state = mesg.event;
-
- if (mesg.event & PM_EVENT_SLEEP) {
- fb_set_suspend(info, 1);
- nvidiafb_blank(FB_BLANK_POWERDOWN, info);
- nvidia_write_regs(par, &par->SavedReg);
- }
- dev->power.power_state = mesg;
-
- console_unlock();
- return 0;
-}
-
-static int __maybe_unused nvidiafb_suspend(struct device *dev)
-{
- return nvidiafb_suspend_late(dev, PMSG_SUSPEND);
-}
-
-static int __maybe_unused nvidiafb_hibernate(struct device *dev)
-{
- return nvidiafb_suspend_late(dev, PMSG_HIBERNATE);
-}
-
-static int __maybe_unused nvidiafb_freeze(struct device *dev)
-{
- return nvidiafb_suspend_late(dev, PMSG_FREEZE);
-}
-
-static int __maybe_unused nvidiafb_resume(struct device *dev)
-{
- struct fb_info *info = dev_get_drvdata(dev);
- struct nvidia_par *par = info->par;
-
- console_lock();
-
- par->pm_state = PM_EVENT_ON;
- nvidiafb_set_par(info);
- fb_set_suspend (info, 0);
- nvidiafb_blank(FB_BLANK_UNBLANK, info);
-
- console_unlock();
- return 0;
-}
-
-static const struct dev_pm_ops nvidiafb_pm_ops = {
-#ifdef CONFIG_PM_SLEEP
- .suspend = nvidiafb_suspend,
- .resume = nvidiafb_resume,
- .freeze = nvidiafb_freeze,
- .thaw = nvidiafb_resume,
- .poweroff = nvidiafb_hibernate,
- .restore = nvidiafb_resume,
-#endif /* CONFIG_PM_SLEEP */
-};
-
-static int nvidia_set_fbinfo(struct fb_info *info)
-{
- struct fb_monspecs *specs = &info->monspecs;
- struct fb_videomode modedb;
- struct nvidia_par *par = info->par;
- int lpitch;
-
- NVTRACE_ENTER();
- info->flags = FBINFO_DEFAULT
- | FBINFO_HWACCEL_IMAGEBLIT
- | FBINFO_HWACCEL_FILLRECT
- | FBINFO_HWACCEL_COPYAREA
- | FBINFO_HWACCEL_YPAN;
-
- fb_videomode_to_modelist(info->monspecs.modedb,
- info->monspecs.modedb_len, &info->modelist);
- fb_var_to_videomode(&modedb, &nvidiafb_default_var);
-
- switch (bpp) {
- case 0 ... 8:
- bpp = 8;
- break;
- case 9 ... 16:
- bpp = 16;
- break;
- default:
- bpp = 32;
- break;
- }
-
- if (specs->modedb != NULL) {
- const struct fb_videomode *mode;
-
- mode = fb_find_best_display(specs, &info->modelist);
- fb_videomode_to_var(&nvidiafb_default_var, mode);
- nvidiafb_default_var.bits_per_pixel = bpp;
- } else if (par->fpWidth && par->fpHeight) {
- char buf[16];
-
- memset(buf, 0, 16);
- snprintf(buf, 15, "%dx%dMR", par->fpWidth, par->fpHeight);
- fb_find_mode(&nvidiafb_default_var, info, buf, specs->modedb,
- specs->modedb_len, &modedb, bpp);
- }
-
- if (mode_option)
- fb_find_mode(&nvidiafb_default_var, info, mode_option,
- specs->modedb, specs->modedb_len, &modedb, bpp);
-
- info->var = nvidiafb_default_var;
- info->fix.visual = (info->var.bits_per_pixel == 8) ?
- FB_VISUAL_PSEUDOCOLOR : FB_VISUAL_DIRECTCOLOR;
- info->pseudo_palette = par->pseudo_palette;
- fb_alloc_cmap(&info->cmap, 256, 0);
- fb_destroy_modedb(info->monspecs.modedb);
- info->monspecs.modedb = NULL;
-
- /* maximize virtual vertical length */
- lpitch = info->var.xres_virtual *
- ((info->var.bits_per_pixel + 7) >> 3);
- info->var.yres_virtual = info->screen_size / lpitch;
-
- info->pixmap.scan_align = 4;
- info->pixmap.buf_align = 4;
- info->pixmap.access_align = 32;
- info->pixmap.size = 8 * 1024;
- info->pixmap.flags = FB_PIXMAP_SYSTEM;
-
- if (!hwcur)
- nvidia_fb_ops.fb_cursor = NULL;
-
- info->var.accel_flags = (!noaccel);
-
- switch (par->Architecture) {
- case NV_ARCH_04:
- info->fix.accel = FB_ACCEL_NV4;
- break;
- case NV_ARCH_10:
- info->fix.accel = FB_ACCEL_NV_10;
- break;
- case NV_ARCH_20:
- info->fix.accel = FB_ACCEL_NV_20;
- break;
- case NV_ARCH_30:
- info->fix.accel = FB_ACCEL_NV_30;
- break;
- case NV_ARCH_40:
- info->fix.accel = FB_ACCEL_NV_40;
- break;
- }
-
- NVTRACE_LEAVE();
-
- return nvidiafb_check_var(&info->var, info);
-}
-
-static u32 nvidia_get_chipset(struct fb_info *info)
-{
- struct nvidia_par *par = info->par;
- u32 id = (par->pci_dev->vendor << 16) | par->pci_dev->device;
-
- printk(KERN_INFO PFX "Device ID: %x \n", id);
-
- if ((id & 0xfff0) == 0x00f0 ||
- (id & 0xfff0) == 0x02e0) {
- /* pci-e */
- id = NV_RD32(par->REGS, 0x1800);
-
- if ((id & 0x0000ffff) == 0x000010DE)
- id = 0x10DE0000 | (id >> 16);
- else if ((id & 0xffff0000) == 0xDE100000) /* wrong endian */
- id = 0x10DE0000 | ((id << 8) & 0x0000ff00) |
- ((id >> 8) & 0x000000ff);
- printk(KERN_INFO PFX "Subsystem ID: %x \n", id);
- }
-
- return id;
-}
-
-static u32 nvidia_get_arch(struct fb_info *info)
-{
- struct nvidia_par *par = info->par;
- u32 arch = 0;
-
- switch (par->Chipset & 0x0ff0) {
- case 0x0100: /* GeForce 256 */
- case 0x0110: /* GeForce2 MX */
- case 0x0150: /* GeForce2 */
- case 0x0170: /* GeForce4 MX */
- case 0x0180: /* GeForce4 MX (8x AGP) */
- case 0x01A0: /* nForce */
- case 0x01F0: /* nForce2 */
- arch = NV_ARCH_10;
- break;
- case 0x0200: /* GeForce3 */
- case 0x0250: /* GeForce4 Ti */
- case 0x0280: /* GeForce4 Ti (8x AGP) */
- arch = NV_ARCH_20;
- break;
- case 0x0300: /* GeForceFX 5800 */
- case 0x0310: /* GeForceFX 5600 */
- case 0x0320: /* GeForceFX 5200 */
- case 0x0330: /* GeForceFX 5900 */
- case 0x0340: /* GeForceFX 5700 */
- arch = NV_ARCH_30;
- break;
- case 0x0040: /* GeForce 6800 */
- case 0x00C0: /* GeForce 6800 */
- case 0x0120: /* GeForce 6800 */
- case 0x0140: /* GeForce 6600 */
- case 0x0160: /* GeForce 6200 */
- case 0x01D0: /* GeForce 7200, 7300, 7400 */
- case 0x0090: /* GeForce 7800 */
- case 0x0210: /* GeForce 6800 */
- case 0x0220: /* GeForce 6200 */
- case 0x0240: /* GeForce 6100 */
- case 0x0290: /* GeForce 7900 */
- case 0x0390: /* GeForce 7600 */
- case 0x03D0:
- arch = NV_ARCH_40;
- break;
- case 0x0020: /* TNT, TNT2 */
- arch = NV_ARCH_04;
- break;
- default: /* unknown architecture */
- break;
- }
-
- return arch;
-}
-
-static int nvidiafb_probe(struct pci_dev *pd, const struct pci_device_id *ent)
-{
- struct nvidia_par *par;
- struct fb_info *info;
- unsigned short cmd;
-
-
- NVTRACE_ENTER();
- assert(pd != NULL);
-
- info = framebuffer_alloc(sizeof(struct nvidia_par), &pd->dev);
-
- if (!info)
- goto err_out;
-
- par = info->par;
- par->pci_dev = pd;
- info->pixmap.addr = kzalloc(8 * 1024, GFP_KERNEL);
-
- if (info->pixmap.addr == NULL)
- goto err_out_kfree;
-
- if (pci_enable_device(pd)) {
- printk(KERN_ERR PFX "cannot enable PCI device\n");
- goto err_out_enable;
- }
-
- if (pci_request_regions(pd, "nvidiafb")) {
- printk(KERN_ERR PFX "cannot request PCI regions\n");
- goto err_out_enable;
- }
-
- par->FlatPanel = flatpanel;
- if (flatpanel == 1)
- printk(KERN_INFO PFX "flatpanel support enabled\n");
- par->FPDither = fpdither;
-
- par->CRTCnumber = forceCRTC;
- par->FpScale = (!noscale);
- par->paneltweak = paneltweak;
- par->reverse_i2c = reverse_i2c;
-
- /* enable IO and mem if not already done */
- pci_read_config_word(pd, PCI_COMMAND, &cmd);
- cmd |= (PCI_COMMAND_IO | PCI_COMMAND_MEMORY);
- pci_write_config_word(pd, PCI_COMMAND, cmd);
-
- nvidiafb_fix.mmio_start = pci_resource_start(pd, 0);
- nvidiafb_fix.smem_start = pci_resource_start(pd, 1);
- nvidiafb_fix.mmio_len = pci_resource_len(pd, 0);
-
- par->REGS = ioremap(nvidiafb_fix.mmio_start, nvidiafb_fix.mmio_len);
-
- if (!par->REGS) {
- printk(KERN_ERR PFX "cannot ioremap MMIO base\n");
- goto err_out_free_base0;
- }
-
- par->Chipset = nvidia_get_chipset(info);
- par->Architecture = nvidia_get_arch(info);
-
- if (par->Architecture == 0) {
- printk(KERN_ERR PFX "unknown NV_ARCH\n");
- goto err_out_arch;
- }
-
- sprintf(nvidiafb_fix.id, "NV%x", (pd->device & 0x0ff0) >> 4);
-
- if (NVCommonSetup(info))
- goto err_out_arch;
-
- par->FbAddress = nvidiafb_fix.smem_start;
- par->FbMapSize = par->RamAmountKBytes * 1024;
- if (vram && vram * 1024 * 1024 < par->FbMapSize)
- par->FbMapSize = vram * 1024 * 1024;
-
- /* Limit amount of vram to 64 MB */
- if (par->FbMapSize > 64 * 1024 * 1024)
- par->FbMapSize = 64 * 1024 * 1024;
-
- if(par->Architecture >= NV_ARCH_40)
- par->FbUsableSize = par->FbMapSize - (560 * 1024);
- else
- par->FbUsableSize = par->FbMapSize - (128 * 1024);
- par->ScratchBufferSize = (par->Architecture < NV_ARCH_10) ? 8 * 1024 :
- 16 * 1024;
- par->ScratchBufferStart = par->FbUsableSize - par->ScratchBufferSize;
- par->CursorStart = par->FbUsableSize + (32 * 1024);
-
- info->screen_base = ioremap_wc(nvidiafb_fix.smem_start,
- par->FbMapSize);
- info->screen_size = par->FbUsableSize;
- nvidiafb_fix.smem_len = par->RamAmountKBytes * 1024;
-
- if (!info->screen_base) {
- printk(KERN_ERR PFX "cannot ioremap FB base\n");
- goto err_out_free_base1;
- }
-
- par->FbStart = info->screen_base;
-
- if (!nomtrr)
- par->wc_cookie = arch_phys_wc_add(nvidiafb_fix.smem_start,
- par->RamAmountKBytes * 1024);
-
- info->fbops = &nvidia_fb_ops;
- info->fix = nvidiafb_fix;
-
- if (nvidia_set_fbinfo(info) < 0) {
- printk(KERN_ERR PFX "error setting initial video mode\n");
- goto err_out_iounmap_fb;
- }
-
- nvidia_save_vga(par, &par->SavedReg);
-
- pci_set_drvdata(pd, info);
-
- if (backlight)
- nvidia_bl_init(par);
-
- if (register_framebuffer(info) < 0) {
- printk(KERN_ERR PFX "error registering nVidia framebuffer\n");
- goto err_out_iounmap_fb;
- }
-
-
- printk(KERN_INFO PFX
- "PCI nVidia %s framebuffer (%dMB @ 0x%lX)\n",
- info->fix.id,
- par->FbMapSize / (1024 * 1024), info->fix.smem_start);
-
- NVTRACE_LEAVE();
- return 0;
-
-err_out_iounmap_fb:
- iounmap(info->screen_base);
-err_out_free_base1:
- fb_destroy_modedb(info->monspecs.modedb);
- nvidia_delete_i2c_busses(par);
-err_out_arch:
- iounmap(par->REGS);
- err_out_free_base0:
- pci_release_regions(pd);
-err_out_enable:
- kfree(info->pixmap.addr);
-err_out_kfree:
- framebuffer_release(info);
-err_out:
- return -ENODEV;
-}
-
-static void nvidiafb_remove(struct pci_dev *pd)
-{
- struct fb_info *info = pci_get_drvdata(pd);
- struct nvidia_par *par = info->par;
-
- NVTRACE_ENTER();
-
- unregister_framebuffer(info);
-
- nvidia_bl_exit(par);
- arch_phys_wc_del(par->wc_cookie);
- iounmap(info->screen_base);
- fb_destroy_modedb(info->monspecs.modedb);
- nvidia_delete_i2c_busses(par);
- iounmap(par->REGS);
- pci_release_regions(pd);
- kfree(info->pixmap.addr);
- framebuffer_release(info);
- NVTRACE_LEAVE();
-}
-
-/* ------------------------------------------------------------------------- *
- *
- * initialization
- *
- * ------------------------------------------------------------------------- */
-
-#ifndef MODULE
-static int nvidiafb_setup(char *options)
-{
- char *this_opt;
-
- NVTRACE_ENTER();
- if (!options || !*options)
- return 0;
-
- while ((this_opt = strsep(&options, ",")) != NULL) {
- if (!strncmp(this_opt, "forceCRTC", 9)) {
- char *p;
-
- p = this_opt + 9;
- if (!*p || !*(++p))
- continue;
- forceCRTC = *p - '0';
- if (forceCRTC < 0 || forceCRTC > 1)
- forceCRTC = -1;
- } else if (!strncmp(this_opt, "flatpanel", 9)) {
- flatpanel = 1;
- } else if (!strncmp(this_opt, "hwcur", 5)) {
- hwcur = 1;
- } else if (!strncmp(this_opt, "noaccel", 6)) {
- noaccel = 1;
- } else if (!strncmp(this_opt, "noscale", 7)) {
- noscale = 1;
- } else if (!strncmp(this_opt, "reverse_i2c", 11)) {
- reverse_i2c = 1;
- } else if (!strncmp(this_opt, "paneltweak:", 11)) {
- paneltweak = simple_strtoul(this_opt+11, NULL, 0);
- } else if (!strncmp(this_opt, "vram:", 5)) {
- vram = simple_strtoul(this_opt+5, NULL, 0);
- } else if (!strncmp(this_opt, "backlight:", 10)) {
- backlight = simple_strtoul(this_opt+10, NULL, 0);
- } else if (!strncmp(this_opt, "nomtrr", 6)) {
- nomtrr = true;
- } else if (!strncmp(this_opt, "fpdither:", 9)) {
- fpdither = simple_strtol(this_opt+9, NULL, 0);
- } else if (!strncmp(this_opt, "bpp:", 4)) {
- bpp = simple_strtoul(this_opt+4, NULL, 0);
- } else
- mode_option = this_opt;
- }
- NVTRACE_LEAVE();
- return 0;
-}
-#endif /* !MODULE */
-
-static struct pci_driver nvidiafb_driver = {
- .name = "nvidiafb",
- .id_table = nvidiafb_pci_tbl,
- .probe = nvidiafb_probe,
- .driver.pm = &nvidiafb_pm_ops,
- .remove = nvidiafb_remove,
-};
-
-/* ------------------------------------------------------------------------- *
- *
- * modularization
- *
- * ------------------------------------------------------------------------- */
-
-static int nvidiafb_init(void)
-{
-#ifndef MODULE
- char *option = NULL;
-
- if (fb_get_options("nvidiafb", &option))
- return -ENODEV;
- nvidiafb_setup(option);
-#endif
- return pci_register_driver(&nvidiafb_driver);
-}
-
-module_init(nvidiafb_init);
-
-static void __exit nvidiafb_exit(void)
-{
- pci_unregister_driver(&nvidiafb_driver);
-}
-
-module_exit(nvidiafb_exit);
-
-module_param(flatpanel, int, 0);
-MODULE_PARM_DESC(flatpanel,
- "Enables experimental flat panel support for some chipsets. "
- "(0=disabled, 1=enabled, -1=autodetect) (default=-1)");
-module_param(fpdither, int, 0);
-MODULE_PARM_DESC(fpdither,
- "Enables dithering of flat panel for 6 bits panels. "
- "(0=disabled, 1=enabled, -1=autodetect) (default=-1)");
-module_param(hwcur, int, 0);
-MODULE_PARM_DESC(hwcur,
- "Enables hardware cursor implementation. (0 or 1=enabled) "
- "(default=0)");
-module_param(noaccel, int, 0);
-MODULE_PARM_DESC(noaccel,
- "Disables hardware acceleration. (0 or 1=disable) "
- "(default=0)");
-module_param(noscale, int, 0);
-MODULE_PARM_DESC(noscale,
- "Disables screen scaling. (0 or 1=disable) "
- "(default=0, do scaling)");
-module_param(paneltweak, int, 0);
-MODULE_PARM_DESC(paneltweak,
- "Tweak display settings for flatpanels. "
- "(default=0, no tweaks)");
-module_param(forceCRTC, int, 0);
-MODULE_PARM_DESC(forceCRTC,
- "Forces usage of a particular CRTC in case autodetection "
- "fails. (0 or 1) (default=autodetect)");
-module_param(vram, int, 0);
-MODULE_PARM_DESC(vram,
- "amount of framebuffer memory to remap in MiB"
- "(default=0 - remap entire memory)");
-module_param(mode_option, charp, 0);
-MODULE_PARM_DESC(mode_option, "Specify initial video mode");
-module_param(bpp, int, 0);
-MODULE_PARM_DESC(bpp, "pixel width in bits"
- "(default=8)");
-module_param(reverse_i2c, int, 0);
-MODULE_PARM_DESC(reverse_i2c, "reverse port assignment of the i2c bus");
-module_param(nomtrr, bool, false);
-MODULE_PARM_DESC(nomtrr, "Disables MTRR support (0 or 1=disabled) "
- "(default=0)");
-
-MODULE_AUTHOR("Antonino Daplas");
-MODULE_DESCRIPTION("Framebuffer driver for nVidia graphics chipset");
-MODULE_LICENSE("GPL");
diff --git a/drivers/video/fbdev/riva/Makefile b/drivers/video/fbdev/riva/Makefile
deleted file mode 100644
index bdbdd6eb80ec..000000000000
--- a/drivers/video/fbdev/riva/Makefile
+++ /dev/null
@@ -1,12 +0,0 @@
-# SPDX-License-Identifier: GPL-2.0
-#
-# Makefile for the Riva framebuffer driver
-#
-
-obj-$(CONFIG_FB_RIVA) += rivafb.o
-
-rivafb-objs := fbdev.o riva_hw.o nv_driver.o
-
-ifdef CONFIG_FB_RIVA_I2C
- rivafb-objs += rivafb-i2c.o
-endif
diff --git a/drivers/video/fbdev/riva/fbdev.c b/drivers/video/fbdev/riva/fbdev.c
deleted file mode 100644
index 7dd621c7afe4..000000000000
--- a/drivers/video/fbdev/riva/fbdev.c
+++ /dev/null
@@ -1,2195 +0,0 @@
-/*
- * linux/drivers/video/riva/fbdev.c - nVidia RIVA 128/TNT/TNT2 fb driver
- *
- * Maintained by Ani Joshi <ajoshi@shell.unixbox.com>
- *
- * Copyright 1999-2000 Jeff Garzik
- *
- * Contributors:
- *
- * Ani Joshi: Lots of debugging and cleanup work, really helped
- * get the driver going
- *
- * Ferenc Bakonyi: Bug fixes, cleanup, modularization
- *
- * Jindrich Makovicka: Accel code help, hw cursor, mtrr
- *
- * Paul Richards: Bug fixes, updates
- *
- * Initial template from skeletonfb.c, created 28 Dec 1997 by Geert Uytterhoeven
- * Includes riva_hw.c from nVidia, see copyright below.
- * KGI code provided the basis for state storage, init, and mode switching.
- *
- * This file is subject to the terms and conditions of the GNU General Public
- * License. See the file COPYING in the main directory of this archive
- * for more details.
- *
- * Known bugs and issues:
- * restoring text mode fails
- * doublescan modes are broken
- */
-
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/errno.h>
-#include <linux/string.h>
-#include <linux/mm.h>
-#include <linux/slab.h>
-#include <linux/delay.h>
-#include <linux/fb.h>
-#include <linux/init.h>
-#include <linux/pci.h>
-#include <linux/backlight.h>
-#include <linux/bitrev.h>
-#ifdef CONFIG_PMAC_BACKLIGHT
-#include <asm/machdep.h>
-#include <asm/backlight.h>
-#endif
-
-#include "rivafb.h"
-#include "nvreg.h"
-
-/* version number of this driver */
-#define RIVAFB_VERSION "0.9.5b"
-
-/* ------------------------------------------------------------------------- *
- *
- * various helpful macros and constants
- *
- * ------------------------------------------------------------------------- */
-#ifdef CONFIG_FB_RIVA_DEBUG
-#define NVTRACE printk
-#else
-#define NVTRACE if(0) printk
-#endif
-
-#define NVTRACE_ENTER(...) NVTRACE("%s START\n", __func__)
-#define NVTRACE_LEAVE(...) NVTRACE("%s END\n", __func__)
-
-#ifdef CONFIG_FB_RIVA_DEBUG
-#define assert(expr) \
- if(!(expr)) { \
- printk( "Assertion failed! %s,%s,%s,line=%d\n",\
- #expr,__FILE__,__func__,__LINE__); \
- BUG(); \
- }
-#else
-#define assert(expr)
-#endif
-
-#define PFX "rivafb: "
-
-/* macro that allows you to set overflow bits */
-#define SetBitField(value,from,to) SetBF(to,GetBF(value,from))
-#define SetBit(n) (1<<(n))
-#define Set8Bits(value) ((value)&0xff)
-
-/* HW cursor parameters */
-#define MAX_CURS 32
-
-/* ------------------------------------------------------------------------- *
- *
- * prototypes
- *
- * ------------------------------------------------------------------------- */
-
-static int rivafb_blank(int blank, struct fb_info *info);
-
-/* ------------------------------------------------------------------------- *
- *
- * card identification
- *
- * ------------------------------------------------------------------------- */
-
-static const struct pci_device_id rivafb_pci_tbl[] = {
- { PCI_VENDOR_ID_NVIDIA_SGS, PCI_DEVICE_ID_NVIDIA_SGS_RIVA128,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_TNT,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_TNT2,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_UTNT2,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_VTNT2,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_UVTNT2,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_ITNT2,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_GEFORCE_SDR,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_GEFORCE_DDR,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_QUADRO,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_GEFORCE2_MX,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_GEFORCE2_MX2,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_GEFORCE2_GO,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_QUADRO2_MXR,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_GEFORCE2_GTS,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_GEFORCE2_GTS2,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_GEFORCE2_ULTRA,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_QUADRO2_PRO,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_GEFORCE4_MX_460,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_GEFORCE4_MX_440,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- // NF2/IGP version, GeForce 4 MX, NV18
- { PCI_VENDOR_ID_NVIDIA, 0x01f0,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_GEFORCE4_MX_420,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_GEFORCE4_440_GO,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_GEFORCE4_420_GO,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_GEFORCE4_420_GO_M32,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_QUADRO4_500XGL,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_GEFORCE4_440_GO_M64,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_QUADRO4_200,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_QUADRO4_550XGL,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_QUADRO4_500_GOGL,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_IGEFORCE2,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_GEFORCE3,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_GEFORCE3_1,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_GEFORCE3_2,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_QUADRO_DDC,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI_4600,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI_4400,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI_4200,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_QUADRO4_900XGL,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_QUADRO4_750XGL,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_QUADRO4_700XGL,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_GO_5200,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- { 0, } /* terminate list */
-};
-MODULE_DEVICE_TABLE(pci, rivafb_pci_tbl);
-
-/* ------------------------------------------------------------------------- *
- *
- * global variables
- *
- * ------------------------------------------------------------------------- */
-
-/* command line data, set in rivafb_setup() */
-static int flatpanel = -1; /* Autodetect later */
-static int forceCRTC = -1;
-static bool noaccel = 0;
-static bool nomtrr = 0;
-static int backlight = IS_BUILTIN(CONFIG_PMAC_BACKLIGHT);
-
-static char *mode_option = NULL;
-static bool strictmode = 0;
-
-static struct fb_fix_screeninfo rivafb_fix = {
- .type = FB_TYPE_PACKED_PIXELS,
- .xpanstep = 1,
- .ypanstep = 1,
-};
-
-static struct fb_var_screeninfo rivafb_default_var = {
- .xres = 640,
- .yres = 480,
- .xres_virtual = 640,
- .yres_virtual = 480,
- .bits_per_pixel = 8,
- .red = {0, 8, 0},
- .green = {0, 8, 0},
- .blue = {0, 8, 0},
- .transp = {0, 0, 0},
- .activate = FB_ACTIVATE_NOW,
- .height = -1,
- .width = -1,
- .pixclock = 39721,
- .left_margin = 40,
- .right_margin = 24,
- .upper_margin = 32,
- .lower_margin = 11,
- .hsync_len = 96,
- .vsync_len = 2,
- .vmode = FB_VMODE_NONINTERLACED
-};
-
-/* from GGI */
-static const struct riva_regs reg_template = {
- {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* ATTR */
- 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
- 0x41, 0x01, 0x0F, 0x00, 0x00},
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* CRT */
- 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE3, /* 0x10 */
- 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20 */
- 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30 */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, /* 0x40 */
- },
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F, /* GRA */
- 0xFF},
- {0x03, 0x01, 0x0F, 0x00, 0x0E}, /* SEQ */
- 0xEB /* MISC */
-};
-
-/*
- * Backlight control
- */
-#ifdef CONFIG_FB_RIVA_BACKLIGHT
-/* We do not have any information about which values are allowed, thus
- * we used safe values.
- */
-#define MIN_LEVEL 0x158
-#define MAX_LEVEL 0x534
-#define LEVEL_STEP ((MAX_LEVEL - MIN_LEVEL) / FB_BACKLIGHT_MAX)
-
-static int riva_bl_get_level_brightness(struct riva_par *par,
- int level)
-{
- struct fb_info *info = pci_get_drvdata(par->pdev);
- int nlevel;
-
- /* Get and convert the value */
- /* No locking on bl_curve since accessing a single value */
- nlevel = MIN_LEVEL + info->bl_curve[level] * LEVEL_STEP;
-
- if (nlevel < 0)
- nlevel = 0;
- else if (nlevel < MIN_LEVEL)
- nlevel = MIN_LEVEL;
- else if (nlevel > MAX_LEVEL)
- nlevel = MAX_LEVEL;
-
- return nlevel;
-}
-
-static int riva_bl_update_status(struct backlight_device *bd)
-{
- struct riva_par *par = bl_get_data(bd);
- U032 tmp_pcrt, tmp_pmc;
- int level;
-
- if (bd->props.power != FB_BLANK_UNBLANK ||
- bd->props.fb_blank != FB_BLANK_UNBLANK)
- level = 0;
- else
- level = bd->props.brightness;
-
- tmp_pmc = NV_RD32(par->riva.PMC, 0x10F0) & 0x0000FFFF;
- tmp_pcrt = NV_RD32(par->riva.PCRTC0, 0x081C) & 0xFFFFFFFC;
- if(level > 0) {
- tmp_pcrt |= 0x1;
- tmp_pmc |= (1 << 31); /* backlight bit */
- tmp_pmc |= riva_bl_get_level_brightness(par, level) << 16; /* level */
- }
- NV_WR32(par->riva.PCRTC0, 0x081C, tmp_pcrt);
- NV_WR32(par->riva.PMC, 0x10F0, tmp_pmc);
-
- return 0;
-}
-
-static const struct backlight_ops riva_bl_ops = {
- .update_status = riva_bl_update_status,
-};
-
-static void riva_bl_init(struct riva_par *par)
-{
- struct backlight_properties props;
- struct fb_info *info = pci_get_drvdata(par->pdev);
- struct backlight_device *bd;
- char name[12];
-
- if (!par->FlatPanel)
- return;
-
-#ifdef CONFIG_PMAC_BACKLIGHT
- if (!machine_is(powermac) ||
- !pmac_has_backlight_type("mnca"))
- return;
-#endif
-
- snprintf(name, sizeof(name), "rivabl%d", info->node);
-
- memset(&props, 0, sizeof(struct backlight_properties));
- props.type = BACKLIGHT_RAW;
- props.max_brightness = FB_BACKLIGHT_LEVELS - 1;
- bd = backlight_device_register(name, info->dev, par, &riva_bl_ops,
- &props);
- if (IS_ERR(bd)) {
- info->bl_dev = NULL;
- printk(KERN_WARNING "riva: Backlight registration failed\n");
- goto error;
- }
-
- info->bl_dev = bd;
- fb_bl_default_curve(info, 0,
- MIN_LEVEL * FB_BACKLIGHT_MAX / MAX_LEVEL,
- FB_BACKLIGHT_MAX);
-
- bd->props.brightness = bd->props.max_brightness;
- bd->props.power = FB_BLANK_UNBLANK;
- backlight_update_status(bd);
-
- printk("riva: Backlight initialized (%s)\n", name);
-
- return;
-
-error:
- return;
-}
-
-static void riva_bl_exit(struct fb_info *info)
-{
- struct backlight_device *bd = info->bl_dev;
-
- backlight_device_unregister(bd);
- printk("riva: Backlight unloaded\n");
-}
-#else
-static inline void riva_bl_init(struct riva_par *par) {}
-static inline void riva_bl_exit(struct fb_info *info) {}
-#endif /* CONFIG_FB_RIVA_BACKLIGHT */
-
-/* ------------------------------------------------------------------------- *
- *
- * MMIO access macros
- *
- * ------------------------------------------------------------------------- */
-
-static inline void CRTCout(struct riva_par *par, unsigned char index,
- unsigned char val)
-{
- VGA_WR08(par->riva.PCIO, 0x3d4, index);
- VGA_WR08(par->riva.PCIO, 0x3d5, val);
-}
-
-static inline unsigned char CRTCin(struct riva_par *par,
- unsigned char index)
-{
- VGA_WR08(par->riva.PCIO, 0x3d4, index);
- return (VGA_RD08(par->riva.PCIO, 0x3d5));
-}
-
-static inline void GRAout(struct riva_par *par, unsigned char index,
- unsigned char val)
-{
- VGA_WR08(par->riva.PVIO, 0x3ce, index);
- VGA_WR08(par->riva.PVIO, 0x3cf, val);
-}
-
-static inline unsigned char GRAin(struct riva_par *par,
- unsigned char index)
-{
- VGA_WR08(par->riva.PVIO, 0x3ce, index);
- return (VGA_RD08(par->riva.PVIO, 0x3cf));
-}
-
-static inline void SEQout(struct riva_par *par, unsigned char index,
- unsigned char val)
-{
- VGA_WR08(par->riva.PVIO, 0x3c4, index);
- VGA_WR08(par->riva.PVIO, 0x3c5, val);
-}
-
-static inline unsigned char SEQin(struct riva_par *par,
- unsigned char index)
-{
- VGA_WR08(par->riva.PVIO, 0x3c4, index);
- return (VGA_RD08(par->riva.PVIO, 0x3c5));
-}
-
-static inline void ATTRout(struct riva_par *par, unsigned char index,
- unsigned char val)
-{
- VGA_WR08(par->riva.PCIO, 0x3c0, index);
- VGA_WR08(par->riva.PCIO, 0x3c0, val);
-}
-
-static inline unsigned char ATTRin(struct riva_par *par,
- unsigned char index)
-{
- VGA_WR08(par->riva.PCIO, 0x3c0, index);
- return (VGA_RD08(par->riva.PCIO, 0x3c1));
-}
-
-static inline void MISCout(struct riva_par *par, unsigned char val)
-{
- VGA_WR08(par->riva.PVIO, 0x3c2, val);
-}
-
-static inline unsigned char MISCin(struct riva_par *par)
-{
- return (VGA_RD08(par->riva.PVIO, 0x3cc));
-}
-
-static inline void reverse_order(u32 *l)
-{
- u8 *a = (u8 *)l;
- a[0] = bitrev8(a[0]);
- a[1] = bitrev8(a[1]);
- a[2] = bitrev8(a[2]);
- a[3] = bitrev8(a[3]);
-}
-
-/* ------------------------------------------------------------------------- *
- *
- * cursor stuff
- *
- * ------------------------------------------------------------------------- */
-
-/**
- * rivafb_load_cursor_image - load cursor image to hardware
- * @data: address to monochrome bitmap (1 = foreground color, 0 = background)
- * @par: pointer to private data
- * @w: width of cursor image in pixels
- * @h: height of cursor image in scanlines
- * @bg: background color (ARGB1555) - alpha bit determines opacity
- * @fg: foreground color (ARGB1555)
- *
- * DESCRIPTiON:
- * Loads cursor image based on a monochrome source and mask bitmap. The
- * image bits determines the color of the pixel, 0 for background, 1 for
- * foreground. Only the affected region (as determined by @w and @h
- * parameters) will be updated.
- *
- * CALLED FROM:
- * rivafb_cursor()
- */
-static void rivafb_load_cursor_image(struct riva_par *par, u8 *data8,
- u16 bg, u16 fg, u32 w, u32 h)
-{
- int i, j, k = 0;
- u32 b, tmp;
- u32 *data = (u32 *)data8;
- bg = le16_to_cpu(bg);
- fg = le16_to_cpu(fg);
-
- w = (w + 1) & ~1;
-
- for (i = 0; i < h; i++) {
- b = *data++;
- reverse_order(&b);
-
- for (j = 0; j < w/2; j++) {
- tmp = 0;
-#if defined (__BIG_ENDIAN)
- tmp = (b & (1 << 31)) ? fg << 16 : bg << 16;
- b <<= 1;
- tmp |= (b & (1 << 31)) ? fg : bg;
- b <<= 1;
-#else
- tmp = (b & 1) ? fg : bg;
- b >>= 1;
- tmp |= (b & 1) ? fg << 16 : bg << 16;
- b >>= 1;
-#endif
- writel(tmp, &par->riva.CURSOR[k++]);
- }
- k += (MAX_CURS - w)/2;
- }
-}
-
-/* ------------------------------------------------------------------------- *
- *
- * general utility functions
- *
- * ------------------------------------------------------------------------- */
-
-/**
- * riva_wclut - set CLUT entry
- * @chip: pointer to RIVA_HW_INST object
- * @regnum: register number
- * @red: red component
- * @green: green component
- * @blue: blue component
- *
- * DESCRIPTION:
- * Sets color register @regnum.
- *
- * CALLED FROM:
- * rivafb_setcolreg()
- */
-static void riva_wclut(RIVA_HW_INST *chip,
- unsigned char regnum, unsigned char red,
- unsigned char green, unsigned char blue)
-{
- VGA_WR08(chip->PDIO, 0x3c8, regnum);
- VGA_WR08(chip->PDIO, 0x3c9, red);
- VGA_WR08(chip->PDIO, 0x3c9, green);
- VGA_WR08(chip->PDIO, 0x3c9, blue);
-}
-
-/**
- * riva_rclut - read fromCLUT register
- * @chip: pointer to RIVA_HW_INST object
- * @regnum: register number
- * @red: red component
- * @green: green component
- * @blue: blue component
- *
- * DESCRIPTION:
- * Reads red, green, and blue from color register @regnum.
- *
- * CALLED FROM:
- * rivafb_setcolreg()
- */
-static void riva_rclut(RIVA_HW_INST *chip,
- unsigned char regnum, unsigned char *red,
- unsigned char *green, unsigned char *blue)
-{
-
- VGA_WR08(chip->PDIO, 0x3c7, regnum);
- *red = VGA_RD08(chip->PDIO, 0x3c9);
- *green = VGA_RD08(chip->PDIO, 0x3c9);
- *blue = VGA_RD08(chip->PDIO, 0x3c9);
-}
-
-/**
- * riva_save_state - saves current chip state
- * @par: pointer to riva_par object containing info for current riva board
- * @regs: pointer to riva_regs object
- *
- * DESCRIPTION:
- * Saves current chip state to @regs.
- *
- * CALLED FROM:
- * rivafb_probe()
- */
-/* from GGI */
-static void riva_save_state(struct riva_par *par, struct riva_regs *regs)
-{
- int i;
-
- NVTRACE_ENTER();
- par->riva.LockUnlock(&par->riva, 0);
-
- par->riva.UnloadStateExt(&par->riva, &regs->ext);
-
- regs->misc_output = MISCin(par);
-
- for (i = 0; i < NUM_CRT_REGS; i++)
- regs->crtc[i] = CRTCin(par, i);
-
- for (i = 0; i < NUM_ATC_REGS; i++)
- regs->attr[i] = ATTRin(par, i);
-
- for (i = 0; i < NUM_GRC_REGS; i++)
- regs->gra[i] = GRAin(par, i);
-
- for (i = 0; i < NUM_SEQ_REGS; i++)
- regs->seq[i] = SEQin(par, i);
- NVTRACE_LEAVE();
-}
-
-/**
- * riva_load_state - loads current chip state
- * @par: pointer to riva_par object containing info for current riva board
- * @regs: pointer to riva_regs object
- *
- * DESCRIPTION:
- * Loads chip state from @regs.
- *
- * CALLED FROM:
- * riva_load_video_mode()
- * rivafb_probe()
- * rivafb_remove()
- */
-/* from GGI */
-static void riva_load_state(struct riva_par *par, struct riva_regs *regs)
-{
- RIVA_HW_STATE *state = &regs->ext;
- int i;
-
- NVTRACE_ENTER();
- CRTCout(par, 0x11, 0x00);
-
- par->riva.LockUnlock(&par->riva, 0);
-
- par->riva.LoadStateExt(&par->riva, state);
-
- MISCout(par, regs->misc_output);
-
- for (i = 0; i < NUM_CRT_REGS; i++) {
- switch (i) {
- case 0x19:
- case 0x20 ... 0x40:
- break;
- default:
- CRTCout(par, i, regs->crtc[i]);
- }
- }
-
- for (i = 0; i < NUM_ATC_REGS; i++)
- ATTRout(par, i, regs->attr[i]);
-
- for (i = 0; i < NUM_GRC_REGS; i++)
- GRAout(par, i, regs->gra[i]);
-
- for (i = 0; i < NUM_SEQ_REGS; i++)
- SEQout(par, i, regs->seq[i]);
- NVTRACE_LEAVE();
-}
-
-/**
- * riva_load_video_mode - calculate timings
- * @info: pointer to fb_info object containing info for current riva board
- *
- * DESCRIPTION:
- * Calculate some timings and then send em off to riva_load_state().
- *
- * CALLED FROM:
- * rivafb_set_par()
- */
-static int riva_load_video_mode(struct fb_info *info)
-{
- int bpp, width, hDisplaySize, hDisplay, hStart,
- hEnd, hTotal, height, vDisplay, vStart, vEnd, vTotal, dotClock;
- int hBlankStart, hBlankEnd, vBlankStart, vBlankEnd;
- int rc;
- struct riva_par *par = info->par;
- struct riva_regs newmode;
-
- NVTRACE_ENTER();
- /* time to calculate */
- rivafb_blank(FB_BLANK_NORMAL, info);
-
- bpp = info->var.bits_per_pixel;
- if (bpp == 16 && info->var.green.length == 5)
- bpp = 15;
- width = info->var.xres_virtual;
- hDisplaySize = info->var.xres;
- hDisplay = (hDisplaySize / 8) - 1;
- hStart = (hDisplaySize + info->var.right_margin) / 8 - 1;
- hEnd = (hDisplaySize + info->var.right_margin +
- info->var.hsync_len) / 8 - 1;
- hTotal = (hDisplaySize + info->var.right_margin +
- info->var.hsync_len + info->var.left_margin) / 8 - 5;
- hBlankStart = hDisplay;
- hBlankEnd = hTotal + 4;
-
- height = info->var.yres_virtual;
- vDisplay = info->var.yres - 1;
- vStart = info->var.yres + info->var.lower_margin - 1;
- vEnd = info->var.yres + info->var.lower_margin +
- info->var.vsync_len - 1;
- vTotal = info->var.yres + info->var.lower_margin +
- info->var.vsync_len + info->var.upper_margin + 2;
- vBlankStart = vDisplay;
- vBlankEnd = vTotal + 1;
- dotClock = 1000000000 / info->var.pixclock;
-
- memcpy(&newmode, &reg_template, sizeof(struct riva_regs));
-
- if ((info->var.vmode & FB_VMODE_MASK) == FB_VMODE_INTERLACED)
- vTotal |= 1;
-
- if (par->FlatPanel) {
- vStart = vTotal - 3;
- vEnd = vTotal - 2;
- vBlankStart = vStart;
- hStart = hTotal - 3;
- hEnd = hTotal - 2;
- hBlankEnd = hTotal + 4;
- }
-
- newmode.crtc[0x0] = Set8Bits (hTotal);
- newmode.crtc[0x1] = Set8Bits (hDisplay);
- newmode.crtc[0x2] = Set8Bits (hBlankStart);
- newmode.crtc[0x3] = SetBitField (hBlankEnd, 4: 0, 4:0) | SetBit (7);
- newmode.crtc[0x4] = Set8Bits (hStart);
- newmode.crtc[0x5] = SetBitField (hBlankEnd, 5: 5, 7:7)
- | SetBitField (hEnd, 4: 0, 4:0);
- newmode.crtc[0x6] = SetBitField (vTotal, 7: 0, 7:0);
- newmode.crtc[0x7] = SetBitField (vTotal, 8: 8, 0:0)
- | SetBitField (vDisplay, 8: 8, 1:1)
- | SetBitField (vStart, 8: 8, 2:2)
- | SetBitField (vBlankStart, 8: 8, 3:3)
- | SetBit (4)
- | SetBitField (vTotal, 9: 9, 5:5)
- | SetBitField (vDisplay, 9: 9, 6:6)
- | SetBitField (vStart, 9: 9, 7:7);
- newmode.crtc[0x9] = SetBitField (vBlankStart, 9: 9, 5:5)
- | SetBit (6);
- newmode.crtc[0x10] = Set8Bits (vStart);
- newmode.crtc[0x11] = SetBitField (vEnd, 3: 0, 3:0)
- | SetBit (5);
- newmode.crtc[0x12] = Set8Bits (vDisplay);
- newmode.crtc[0x13] = (width / 8) * ((bpp + 1) / 8);
- newmode.crtc[0x15] = Set8Bits (vBlankStart);
- newmode.crtc[0x16] = Set8Bits (vBlankEnd);
-
- newmode.ext.screen = SetBitField(hBlankEnd,6:6,4:4)
- | SetBitField(vBlankStart,10:10,3:3)
- | SetBitField(vStart,10:10,2:2)
- | SetBitField(vDisplay,10:10,1:1)
- | SetBitField(vTotal,10:10,0:0);
- newmode.ext.horiz = SetBitField(hTotal,8:8,0:0)
- | SetBitField(hDisplay,8:8,1:1)
- | SetBitField(hBlankStart,8:8,2:2)
- | SetBitField(hStart,8:8,3:3);
- newmode.ext.extra = SetBitField(vTotal,11:11,0:0)
- | SetBitField(vDisplay,11:11,2:2)
- | SetBitField(vStart,11:11,4:4)
- | SetBitField(vBlankStart,11:11,6:6);
-
- if ((info->var.vmode & FB_VMODE_MASK) == FB_VMODE_INTERLACED) {
- int tmp = (hTotal >> 1) & ~1;
- newmode.ext.interlace = Set8Bits(tmp);
- newmode.ext.horiz |= SetBitField(tmp, 8:8,4:4);
- } else
- newmode.ext.interlace = 0xff; /* interlace off */
-
- if (par->riva.Architecture >= NV_ARCH_10)
- par->riva.CURSOR = (U032 __iomem *)(info->screen_base + par->riva.CursorStart);
-
- if (info->var.sync & FB_SYNC_HOR_HIGH_ACT)
- newmode.misc_output &= ~0x40;
- else
- newmode.misc_output |= 0x40;
- if (info->var.sync & FB_SYNC_VERT_HIGH_ACT)
- newmode.misc_output &= ~0x80;
- else
- newmode.misc_output |= 0x80;
-
- rc = CalcStateExt(&par->riva, &newmode.ext, par->pdev, bpp, width,
- hDisplaySize, height, dotClock);
- if (rc)
- goto out;
-
- newmode.ext.scale = NV_RD32(par->riva.PRAMDAC, 0x00000848) &
- 0xfff000ff;
- if (par->FlatPanel == 1) {
- newmode.ext.pixel |= (1 << 7);
- newmode.ext.scale |= (1 << 8);
- }
- if (par->SecondCRTC) {
- newmode.ext.head = NV_RD32(par->riva.PCRTC0, 0x00000860) &
- ~0x00001000;
- newmode.ext.head2 = NV_RD32(par->riva.PCRTC0, 0x00002860) |
- 0x00001000;
- newmode.ext.crtcOwner = 3;
- newmode.ext.pllsel |= 0x20000800;
- newmode.ext.vpll2 = newmode.ext.vpll;
- } else if (par->riva.twoHeads) {
- newmode.ext.head = NV_RD32(par->riva.PCRTC0, 0x00000860) |
- 0x00001000;
- newmode.ext.head2 = NV_RD32(par->riva.PCRTC0, 0x00002860) &
- ~0x00001000;
- newmode.ext.crtcOwner = 0;
- newmode.ext.vpll2 = NV_RD32(par->riva.PRAMDAC0, 0x00000520);
- }
- if (par->FlatPanel == 1) {
- newmode.ext.pixel |= (1 << 7);
- newmode.ext.scale |= (1 << 8);
- }
- newmode.ext.cursorConfig = 0x02000100;
- par->current_state = newmode;
- riva_load_state(par, &par->current_state);
- par->riva.LockUnlock(&par->riva, 0); /* important for HW cursor */
-
-out:
- rivafb_blank(FB_BLANK_UNBLANK, info);
- NVTRACE_LEAVE();
-
- return rc;
-}
-
-static void riva_update_var(struct fb_var_screeninfo *var,
- const struct fb_videomode *modedb)
-{
- NVTRACE_ENTER();
- var->xres = var->xres_virtual = modedb->xres;
- var->yres = modedb->yres;
- if (var->yres_virtual < var->yres)
- var->yres_virtual = var->yres;
- var->xoffset = var->yoffset = 0;
- var->pixclock = modedb->pixclock;
- var->left_margin = modedb->left_margin;
- var->right_margin = modedb->right_margin;
- var->upper_margin = modedb->upper_margin;
- var->lower_margin = modedb->lower_margin;
- var->hsync_len = modedb->hsync_len;
- var->vsync_len = modedb->vsync_len;
- var->sync = modedb->sync;
- var->vmode = modedb->vmode;
- NVTRACE_LEAVE();
-}
-
-/**
- * rivafb_do_maximize -
- * @info: pointer to fb_info object containing info for current riva board
- * @var:
- * @nom:
- * @den:
- *
- * DESCRIPTION:
- * .
- *
- * RETURNS:
- * -EINVAL on failure, 0 on success
- *
- *
- * CALLED FROM:
- * rivafb_check_var()
- */
-static int rivafb_do_maximize(struct fb_info *info,
- struct fb_var_screeninfo *var,
- int nom, int den)
-{
- static struct {
- int xres, yres;
- } modes[] = {
- {1600, 1280},
- {1280, 1024},
- {1024, 768},
- {800, 600},
- {640, 480},
- {-1, -1}
- };
- int i;
-
- NVTRACE_ENTER();
- /* use highest possible virtual resolution */
- if (var->xres_virtual == -1 && var->yres_virtual == -1) {
- printk(KERN_WARNING PFX
- "using maximum available virtual resolution\n");
- for (i = 0; modes[i].xres != -1; i++) {
- if (modes[i].xres * nom / den * modes[i].yres <
- info->fix.smem_len)
- break;
- }
- if (modes[i].xres == -1) {
- printk(KERN_ERR PFX
- "could not find a virtual resolution that fits into video memory!!\n");
- NVTRACE("EXIT - EINVAL error\n");
- return -EINVAL;
- }
- var->xres_virtual = modes[i].xres;
- var->yres_virtual = modes[i].yres;
-
- printk(KERN_INFO PFX
- "virtual resolution set to maximum of %dx%d\n",
- var->xres_virtual, var->yres_virtual);
- } else if (var->xres_virtual == -1) {
- var->xres_virtual = (info->fix.smem_len * den /
- (nom * var->yres_virtual)) & ~15;
- printk(KERN_WARNING PFX
- "setting virtual X resolution to %d\n", var->xres_virtual);
- } else if (var->yres_virtual == -1) {
- var->xres_virtual = (var->xres_virtual + 15) & ~15;
- var->yres_virtual = info->fix.smem_len * den /
- (nom * var->xres_virtual);
- printk(KERN_WARNING PFX
- "setting virtual Y resolution to %d\n", var->yres_virtual);
- } else {
- var->xres_virtual = (var->xres_virtual + 15) & ~15;
- if (var->xres_virtual * nom / den * var->yres_virtual > info->fix.smem_len) {
- printk(KERN_ERR PFX
- "mode %dx%dx%d rejected...resolution too high to fit into video memory!\n",
- var->xres, var->yres, var->bits_per_pixel);
- NVTRACE("EXIT - EINVAL error\n");
- return -EINVAL;
- }
- }
-
- if (var->xres_virtual * nom / den >= 8192) {
- printk(KERN_WARNING PFX
- "virtual X resolution (%d) is too high, lowering to %d\n",
- var->xres_virtual, 8192 * den / nom - 16);
- var->xres_virtual = 8192 * den / nom - 16;
- }
-
- if (var->xres_virtual < var->xres) {
- printk(KERN_ERR PFX
- "virtual X resolution (%d) is smaller than real\n", var->xres_virtual);
- return -EINVAL;
- }
-
- if (var->yres_virtual < var->yres) {
- printk(KERN_ERR PFX
- "virtual Y resolution (%d) is smaller than real\n", var->yres_virtual);
- return -EINVAL;
- }
- if (var->yres_virtual > 0x7fff/nom)
- var->yres_virtual = 0x7fff/nom;
- if (var->xres_virtual > 0x7fff/nom)
- var->xres_virtual = 0x7fff/nom;
- NVTRACE_LEAVE();
- return 0;
-}
-
-static void
-riva_set_pattern(struct riva_par *par, int clr0, int clr1, int pat0, int pat1)
-{
- RIVA_FIFO_FREE(par->riva, Patt, 4);
- NV_WR32(&par->riva.Patt->Color0, 0, clr0);
- NV_WR32(&par->riva.Patt->Color1, 0, clr1);
- NV_WR32(par->riva.Patt->Monochrome, 0, pat0);
- NV_WR32(par->riva.Patt->Monochrome, 4, pat1);
-}
-
-/* acceleration routines */
-static inline void wait_for_idle(struct riva_par *par)
-{
- while (par->riva.Busy(&par->riva));
-}
-
-/*
- * Set ROP. Translate X rop into ROP3. Internal routine.
- */
-static void
-riva_set_rop_solid(struct riva_par *par, int rop)
-{
- riva_set_pattern(par, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF);
- RIVA_FIFO_FREE(par->riva, Rop, 1);
- NV_WR32(&par->riva.Rop->Rop3, 0, rop);
-
-}
-
-static void riva_setup_accel(struct fb_info *info)
-{
- struct riva_par *par = info->par;
-
- RIVA_FIFO_FREE(par->riva, Clip, 2);
- NV_WR32(&par->riva.Clip->TopLeft, 0, 0x0);
- NV_WR32(&par->riva.Clip->WidthHeight, 0,
- (info->var.xres_virtual & 0xffff) |
- (info->var.yres_virtual << 16));
- riva_set_rop_solid(par, 0xcc);
- wait_for_idle(par);
-}
-
-/**
- * riva_get_cmap_len - query current color map length
- * @var: standard kernel fb changeable data
- *
- * DESCRIPTION:
- * Get current color map length.
- *
- * RETURNS:
- * Length of color map
- *
- * CALLED FROM:
- * rivafb_setcolreg()
- */
-static int riva_get_cmap_len(const struct fb_var_screeninfo *var)
-{
- int rc = 256; /* reasonable default */
-
- switch (var->green.length) {
- case 8:
- rc = 256; /* 256 entries (2^8), 8 bpp and RGB8888 */
- break;
- case 5:
- rc = 32; /* 32 entries (2^5), 16 bpp, RGB555 */
- break;
- case 6:
- rc = 64; /* 64 entries (2^6), 16 bpp, RGB565 */
- break;
- default:
- /* should not occur */
- break;
- }
- return rc;
-}
-
-/* ------------------------------------------------------------------------- *
- *
- * framebuffer operations
- *
- * ------------------------------------------------------------------------- */
-
-static int rivafb_open(struct fb_info *info, int user)
-{
- struct riva_par *par = info->par;
-
- NVTRACE_ENTER();
- mutex_lock(&par->open_lock);
- if (!par->ref_count) {
-#ifdef CONFIG_X86
- memset(&par->state, 0, sizeof(struct vgastate));
- par->state.flags = VGA_SAVE_MODE | VGA_SAVE_FONTS;
- /* save the DAC for Riva128 */
- if (par->riva.Architecture == NV_ARCH_03)
- par->state.flags |= VGA_SAVE_CMAP;
- save_vga(&par->state);
-#endif
- /* vgaHWunlock() + riva unlock (0x7F) */
- CRTCout(par, 0x11, 0xFF);
- par->riva.LockUnlock(&par->riva, 0);
-
- riva_save_state(par, &par->initial_state);
- }
- par->ref_count++;
- mutex_unlock(&par->open_lock);
- NVTRACE_LEAVE();
- return 0;
-}
-
-static int rivafb_release(struct fb_info *info, int user)
-{
- struct riva_par *par = info->par;
-
- NVTRACE_ENTER();
- mutex_lock(&par->open_lock);
- if (!par->ref_count) {
- mutex_unlock(&par->open_lock);
- return -EINVAL;
- }
- if (par->ref_count == 1) {
- par->riva.LockUnlock(&par->riva, 0);
- par->riva.LoadStateExt(&par->riva, &par->initial_state.ext);
- riva_load_state(par, &par->initial_state);
-#ifdef CONFIG_X86
- restore_vga(&par->state);
-#endif
- par->riva.LockUnlock(&par->riva, 1);
- }
- par->ref_count--;
- mutex_unlock(&par->open_lock);
- NVTRACE_LEAVE();
- return 0;
-}
-
-static int rivafb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
-{
- const struct fb_videomode *mode;
- struct riva_par *par = info->par;
- int nom, den; /* translating from pixels->bytes */
- int mode_valid = 0;
-
- NVTRACE_ENTER();
- if (!var->pixclock)
- return -EINVAL;
-
- switch (var->bits_per_pixel) {
- case 1 ... 8:
- var->red.offset = var->green.offset = var->blue.offset = 0;
- var->red.length = var->green.length = var->blue.length = 8;
- var->bits_per_pixel = 8;
- nom = den = 1;
- break;
- case 9 ... 15:
- var->green.length = 5;
- fallthrough;
- case 16:
- var->bits_per_pixel = 16;
- /* The Riva128 supports RGB555 only */
- if (par->riva.Architecture == NV_ARCH_03)
- var->green.length = 5;
- if (var->green.length == 5) {
- /* 0rrrrrgg gggbbbbb */
- var->red.offset = 10;
- var->green.offset = 5;
- var->blue.offset = 0;
- var->red.length = 5;
- var->green.length = 5;
- var->blue.length = 5;
- } else {
- /* rrrrrggg gggbbbbb */
- var->red.offset = 11;
- var->green.offset = 5;
- var->blue.offset = 0;
- var->red.length = 5;
- var->green.length = 6;
- var->blue.length = 5;
- }
- nom = 2;
- den = 1;
- break;
- case 17 ... 32:
- var->red.length = var->green.length = var->blue.length = 8;
- var->bits_per_pixel = 32;
- var->red.offset = 16;
- var->green.offset = 8;
- var->blue.offset = 0;
- nom = 4;
- den = 1;
- break;
- default:
- printk(KERN_ERR PFX
- "mode %dx%dx%d rejected...color depth not supported.\n",
- var->xres, var->yres, var->bits_per_pixel);
- NVTRACE("EXIT, returning -EINVAL\n");
- return -EINVAL;
- }
-
- if (!strictmode) {
- if (!info->monspecs.vfmax || !info->monspecs.hfmax ||
- !info->monspecs.dclkmax || !fb_validate_mode(var, info))
- mode_valid = 1;
- }
-
- /* calculate modeline if supported by monitor */
- if (!mode_valid && info->monspecs.gtf) {
- if (!fb_get_mode(FB_MAXTIMINGS, 0, var, info))
- mode_valid = 1;
- }
-
- if (!mode_valid) {
- mode = fb_find_best_mode(var, &info->modelist);
- if (mode) {
- riva_update_var(var, mode);
- mode_valid = 1;
- }
- }
-
- if (!mode_valid && info->monspecs.modedb_len)
- return -EINVAL;
-
- if (var->xres_virtual < var->xres)
- var->xres_virtual = var->xres;
- if (var->yres_virtual <= var->yres)
- var->yres_virtual = -1;
- if (rivafb_do_maximize(info, var, nom, den) < 0)
- return -EINVAL;
-
- /* truncate xoffset and yoffset to maximum if too high */
- if (var->xoffset > var->xres_virtual - var->xres)
- var->xoffset = var->xres_virtual - var->xres - 1;
-
- if (var->yoffset > var->yres_virtual - var->yres)
- var->yoffset = var->yres_virtual - var->yres - 1;
-
- var->red.msb_right =
- var->green.msb_right =
- var->blue.msb_right =
- var->transp.offset = var->transp.length = var->transp.msb_right = 0;
- NVTRACE_LEAVE();
- return 0;
-}
-
-static int rivafb_set_par(struct fb_info *info)
-{
- struct riva_par *par = info->par;
- int rc = 0;
-
- NVTRACE_ENTER();
- /* vgaHWunlock() + riva unlock (0x7F) */
- CRTCout(par, 0x11, 0xFF);
- par->riva.LockUnlock(&par->riva, 0);
- rc = riva_load_video_mode(info);
- if (rc)
- goto out;
- if(!(info->flags & FBINFO_HWACCEL_DISABLED))
- riva_setup_accel(info);
-
- par->cursor_reset = 1;
- info->fix.line_length = (info->var.xres_virtual * (info->var.bits_per_pixel >> 3));
- info->fix.visual = (info->var.bits_per_pixel == 8) ?
- FB_VISUAL_PSEUDOCOLOR : FB_VISUAL_DIRECTCOLOR;
-
- if (info->flags & FBINFO_HWACCEL_DISABLED)
- info->pixmap.scan_align = 1;
- else
- info->pixmap.scan_align = 4;
-
-out:
- NVTRACE_LEAVE();
- return rc;
-}
-
-/**
- * rivafb_pan_display
- * @var: standard kernel fb changeable data
- * @con: TODO
- * @info: pointer to fb_info object containing info for current riva board
- *
- * DESCRIPTION:
- * Pan (or wrap, depending on the `vmode' field) the display using the
- * `xoffset' and `yoffset' fields of the `var' structure.
- * If the values don't fit, return -EINVAL.
- *
- * This call looks only at xoffset, yoffset and the FB_VMODE_YWRAP flag
- */
-static int rivafb_pan_display(struct fb_var_screeninfo *var,
- struct fb_info *info)
-{
- struct riva_par *par = info->par;
- unsigned int base;
-
- NVTRACE_ENTER();
- base = var->yoffset * info->fix.line_length + var->xoffset;
- par->riva.SetStartAddress(&par->riva, base);
- NVTRACE_LEAVE();
- return 0;
-}
-
-static int rivafb_blank(int blank, struct fb_info *info)
-{
- struct riva_par *par= info->par;
- unsigned char tmp, vesa;
-
- tmp = SEQin(par, 0x01) & ~0x20; /* screen on/off */
- vesa = CRTCin(par, 0x1a) & ~0xc0; /* sync on/off */
-
- NVTRACE_ENTER();
-
- if (blank)
- tmp |= 0x20;
-
- switch (blank) {
- case FB_BLANK_UNBLANK:
- case FB_BLANK_NORMAL:
- break;
- case FB_BLANK_VSYNC_SUSPEND:
- vesa |= 0x80;
- break;
- case FB_BLANK_HSYNC_SUSPEND:
- vesa |= 0x40;
- break;
- case FB_BLANK_POWERDOWN:
- vesa |= 0xc0;
- break;
- }
-
- SEQout(par, 0x01, tmp);
- CRTCout(par, 0x1a, vesa);
-
- NVTRACE_LEAVE();
-
- return 0;
-}
-
-/**
- * rivafb_setcolreg
- * @regno: register index
- * @red: red component
- * @green: green component
- * @blue: blue component
- * @transp: transparency
- * @info: pointer to fb_info object containing info for current riva board
- *
- * DESCRIPTION:
- * Set a single color register. The values supplied have a 16 bit
- * magnitude.
- *
- * RETURNS:
- * Return != 0 for invalid regno.
- *
- * CALLED FROM:
- * fbcmap.c:fb_set_cmap()
- */
-static int rivafb_setcolreg(unsigned regno, unsigned red, unsigned green,
- unsigned blue, unsigned transp,
- struct fb_info *info)
-{
- struct riva_par *par = info->par;
- RIVA_HW_INST *chip = &par->riva;
- int i;
-
- if (regno >= riva_get_cmap_len(&info->var))
- return -EINVAL;
-
- if (info->var.grayscale) {
- /* gray = 0.30*R + 0.59*G + 0.11*B */
- red = green = blue =
- (red * 77 + green * 151 + blue * 28) >> 8;
- }
-
- if (regno < 16 && info->fix.visual == FB_VISUAL_DIRECTCOLOR) {
- ((u32 *) info->pseudo_palette)[regno] =
- (regno << info->var.red.offset) |
- (regno << info->var.green.offset) |
- (regno << info->var.blue.offset);
- /*
- * The Riva128 2D engine requires color information in
- * TrueColor format even if framebuffer is in DirectColor
- */
- if (par->riva.Architecture == NV_ARCH_03) {
- switch (info->var.bits_per_pixel) {
- case 16:
- par->palette[regno] = ((red & 0xf800) >> 1) |
- ((green & 0xf800) >> 6) |
- ((blue & 0xf800) >> 11);
- break;
- case 32:
- par->palette[regno] = ((red & 0xff00) << 8) |
- ((green & 0xff00)) |
- ((blue & 0xff00) >> 8);
- break;
- }
- }
- }
-
- switch (info->var.bits_per_pixel) {
- case 8:
- /* "transparent" stuff is completely ignored. */
- riva_wclut(chip, regno, red >> 8, green >> 8, blue >> 8);
- break;
- case 16:
- if (info->var.green.length == 5) {
- for (i = 0; i < 8; i++) {
- riva_wclut(chip, regno*8+i, red >> 8,
- green >> 8, blue >> 8);
- }
- } else {
- u8 r, g, b;
-
- if (regno < 32) {
- for (i = 0; i < 8; i++) {
- riva_wclut(chip, regno*8+i,
- red >> 8, green >> 8,
- blue >> 8);
- }
- }
- riva_rclut(chip, regno*4, &r, &g, &b);
- for (i = 0; i < 4; i++)
- riva_wclut(chip, regno*4+i, r,
- green >> 8, b);
- }
- break;
- case 32:
- riva_wclut(chip, regno, red >> 8, green >> 8, blue >> 8);
- break;
- default:
- /* do nothing */
- break;
- }
- return 0;
-}
-
-/**
- * rivafb_fillrect - hardware accelerated color fill function
- * @info: pointer to fb_info structure
- * @rect: pointer to fb_fillrect structure
- *
- * DESCRIPTION:
- * This function fills up a region of framebuffer memory with a solid
- * color with a choice of two different ROP's, copy or invert.
- *
- * CALLED FROM:
- * framebuffer hook
- */
-static void rivafb_fillrect(struct fb_info *info, const struct fb_fillrect *rect)
-{
- struct riva_par *par = info->par;
- u_int color, rop = 0;
-
- if ((info->flags & FBINFO_HWACCEL_DISABLED)) {
- cfb_fillrect(info, rect);
- return;
- }
-
- if (info->var.bits_per_pixel == 8)
- color = rect->color;
- else {
- if (par->riva.Architecture != NV_ARCH_03)
- color = ((u32 *)info->pseudo_palette)[rect->color];
- else
- color = par->palette[rect->color];
- }
-
- switch (rect->rop) {
- case ROP_XOR:
- rop = 0x66;
- break;
- case ROP_COPY:
- default:
- rop = 0xCC;
- break;
- }
-
- riva_set_rop_solid(par, rop);
-
- RIVA_FIFO_FREE(par->riva, Bitmap, 1);
- NV_WR32(&par->riva.Bitmap->Color1A, 0, color);
-
- RIVA_FIFO_FREE(par->riva, Bitmap, 2);
- NV_WR32(&par->riva.Bitmap->UnclippedRectangle[0].TopLeft, 0,
- (rect->dx << 16) | rect->dy);
- mb();
- NV_WR32(&par->riva.Bitmap->UnclippedRectangle[0].WidthHeight, 0,
- (rect->width << 16) | rect->height);
- mb();
- riva_set_rop_solid(par, 0xcc);
-
-}
-
-/**
- * rivafb_copyarea - hardware accelerated blit function
- * @info: pointer to fb_info structure
- * @region: pointer to fb_copyarea structure
- *
- * DESCRIPTION:
- * This copies an area of pixels from one location to another
- *
- * CALLED FROM:
- * framebuffer hook
- */
-static void rivafb_copyarea(struct fb_info *info, const struct fb_copyarea *region)
-{
- struct riva_par *par = info->par;
-
- if ((info->flags & FBINFO_HWACCEL_DISABLED)) {
- cfb_copyarea(info, region);
- return;
- }
-
- RIVA_FIFO_FREE(par->riva, Blt, 3);
- NV_WR32(&par->riva.Blt->TopLeftSrc, 0,
- (region->sy << 16) | region->sx);
- NV_WR32(&par->riva.Blt->TopLeftDst, 0,
- (region->dy << 16) | region->dx);
- mb();
- NV_WR32(&par->riva.Blt->WidthHeight, 0,
- (region->height << 16) | region->width);
- mb();
-}
-
-static inline void convert_bgcolor_16(u32 *col)
-{
- *col = ((*col & 0x0000F800) << 8)
- | ((*col & 0x00007E0) << 5)
- | ((*col & 0x0000001F) << 3)
- | 0xFF000000;
- mb();
-}
-
-/**
- * rivafb_imageblit: hardware accelerated color expand function
- * @info: pointer to fb_info structure
- * @image: pointer to fb_image structure
- *
- * DESCRIPTION:
- * If the source is a monochrome bitmap, the function fills up a a region
- * of framebuffer memory with pixels whose color is determined by the bit
- * setting of the bitmap, 1 - foreground, 0 - background.
- *
- * If the source is not a monochrome bitmap, color expansion is not done.
- * In this case, it is channeled to a software function.
- *
- * CALLED FROM:
- * framebuffer hook
- */
-static void rivafb_imageblit(struct fb_info *info,
- const struct fb_image *image)
-{
- struct riva_par *par = info->par;
- u32 fgx = 0, bgx = 0, width, tmp;
- u8 *cdat = (u8 *) image->data;
- volatile u32 __iomem *d;
- int i, size;
-
- if ((info->flags & FBINFO_HWACCEL_DISABLED) || image->depth != 1) {
- cfb_imageblit(info, image);
- return;
- }
-
- switch (info->var.bits_per_pixel) {
- case 8:
- fgx = image->fg_color;
- bgx = image->bg_color;
- break;
- case 16:
- case 32:
- if (par->riva.Architecture != NV_ARCH_03) {
- fgx = ((u32 *)info->pseudo_palette)[image->fg_color];
- bgx = ((u32 *)info->pseudo_palette)[image->bg_color];
- } else {
- fgx = par->palette[image->fg_color];
- bgx = par->palette[image->bg_color];
- }
- if (info->var.green.length == 6)
- convert_bgcolor_16(&bgx);
- break;
- }
-
- RIVA_FIFO_FREE(par->riva, Bitmap, 7);
- NV_WR32(&par->riva.Bitmap->ClipE.TopLeft, 0,
- (image->dy << 16) | (image->dx & 0xFFFF));
- NV_WR32(&par->riva.Bitmap->ClipE.BottomRight, 0,
- (((image->dy + image->height) << 16) |
- ((image->dx + image->width) & 0xffff)));
- NV_WR32(&par->riva.Bitmap->Color0E, 0, bgx);
- NV_WR32(&par->riva.Bitmap->Color1E, 0, fgx);
- NV_WR32(&par->riva.Bitmap->WidthHeightInE, 0,
- (image->height << 16) | ((image->width + 31) & ~31));
- NV_WR32(&par->riva.Bitmap->WidthHeightOutE, 0,
- (image->height << 16) | ((image->width + 31) & ~31));
- NV_WR32(&par->riva.Bitmap->PointE, 0,
- (image->dy << 16) | (image->dx & 0xFFFF));
-
- d = &par->riva.Bitmap->MonochromeData01E;
-
- width = (image->width + 31)/32;
- size = width * image->height;
- while (size >= 16) {
- RIVA_FIFO_FREE(par->riva, Bitmap, 16);
- for (i = 0; i < 16; i++) {
- tmp = *((u32 *)cdat);
- cdat = (u8 *)((u32 *)cdat + 1);
- reverse_order(&tmp);
- NV_WR32(d, i*4, tmp);
- }
- size -= 16;
- }
- if (size) {
- RIVA_FIFO_FREE(par->riva, Bitmap, size);
- for (i = 0; i < size; i++) {
- tmp = *((u32 *) cdat);
- cdat = (u8 *)((u32 *)cdat + 1);
- reverse_order(&tmp);
- NV_WR32(d, i*4, tmp);
- }
- }
-}
-
-/**
- * rivafb_cursor - hardware cursor function
- * @info: pointer to info structure
- * @cursor: pointer to fbcursor structure
- *
- * DESCRIPTION:
- * A cursor function that supports displaying a cursor image via hardware.
- * Within the kernel, copy and invert rops are supported. If exported
- * to user space, only the copy rop will be supported.
- *
- * CALLED FROM
- * framebuffer hook
- */
-static int rivafb_cursor(struct fb_info *info, struct fb_cursor *cursor)
-{
- struct riva_par *par = info->par;
- u8 data[MAX_CURS * MAX_CURS/8];
- int i, set = cursor->set;
- u16 fg, bg;
-
- if (cursor->image.width > MAX_CURS || cursor->image.height > MAX_CURS)
- return -ENXIO;
-
- par->riva.ShowHideCursor(&par->riva, 0);
-
- if (par->cursor_reset) {
- set = FB_CUR_SETALL;
- par->cursor_reset = 0;
- }
-
- if (set & FB_CUR_SETSIZE)
- memset_io(par->riva.CURSOR, 0, MAX_CURS * MAX_CURS * 2);
-
- if (set & FB_CUR_SETPOS) {
- u32 xx, yy, temp;
-
- yy = cursor->image.dy - info->var.yoffset;
- xx = cursor->image.dx - info->var.xoffset;
- temp = xx & 0xFFFF;
- temp |= yy << 16;
-
- NV_WR32(par->riva.PRAMDAC, 0x0000300, temp);
- }
-
-
- if (set & (FB_CUR_SETSHAPE | FB_CUR_SETCMAP | FB_CUR_SETIMAGE)) {
- u32 bg_idx = cursor->image.bg_color;
- u32 fg_idx = cursor->image.fg_color;
- u32 s_pitch = (cursor->image.width+7) >> 3;
- u32 d_pitch = MAX_CURS/8;
- u8 *dat = (u8 *) cursor->image.data;
- u8 *msk = (u8 *) cursor->mask;
- u8 *src;
-
- src = kmalloc_array(s_pitch, cursor->image.height, GFP_ATOMIC);
-
- if (src) {
- switch (cursor->rop) {
- case ROP_XOR:
- for (i = 0; i < s_pitch * cursor->image.height; i++)
- src[i] = dat[i] ^ msk[i];
- break;
- case ROP_COPY:
- default:
- for (i = 0; i < s_pitch * cursor->image.height; i++)
- src[i] = dat[i] & msk[i];
- break;
- }
-
- fb_pad_aligned_buffer(data, d_pitch, src, s_pitch,
- cursor->image.height);
-
- bg = ((info->cmap.red[bg_idx] & 0xf8) << 7) |
- ((info->cmap.green[bg_idx] & 0xf8) << 2) |
- ((info->cmap.blue[bg_idx] & 0xf8) >> 3) |
- 1 << 15;
-
- fg = ((info->cmap.red[fg_idx] & 0xf8) << 7) |
- ((info->cmap.green[fg_idx] & 0xf8) << 2) |
- ((info->cmap.blue[fg_idx] & 0xf8) >> 3) |
- 1 << 15;
-
- par->riva.LockUnlock(&par->riva, 0);
-
- rivafb_load_cursor_image(par, data, bg, fg,
- cursor->image.width,
- cursor->image.height);
- kfree(src);
- }
- }
-
- if (cursor->enable)
- par->riva.ShowHideCursor(&par->riva, 1);
-
- return 0;
-}
-
-static int rivafb_sync(struct fb_info *info)
-{
- struct riva_par *par = info->par;
-
- wait_for_idle(par);
- return 0;
-}
-
-/* ------------------------------------------------------------------------- *
- *
- * initialization helper functions
- *
- * ------------------------------------------------------------------------- */
-
-/* kernel interface */
-static const struct fb_ops riva_fb_ops = {
- .owner = THIS_MODULE,
- .fb_open = rivafb_open,
- .fb_release = rivafb_release,
- .fb_check_var = rivafb_check_var,
- .fb_set_par = rivafb_set_par,
- .fb_setcolreg = rivafb_setcolreg,
- .fb_pan_display = rivafb_pan_display,
- .fb_blank = rivafb_blank,
- .fb_fillrect = rivafb_fillrect,
- .fb_copyarea = rivafb_copyarea,
- .fb_imageblit = rivafb_imageblit,
- .fb_cursor = rivafb_cursor,
- .fb_sync = rivafb_sync,
-};
-
-static int riva_set_fbinfo(struct fb_info *info)
-{
- unsigned int cmap_len;
- struct riva_par *par = info->par;
-
- NVTRACE_ENTER();
- info->flags = FBINFO_DEFAULT
- | FBINFO_HWACCEL_XPAN
- | FBINFO_HWACCEL_YPAN
- | FBINFO_HWACCEL_COPYAREA
- | FBINFO_HWACCEL_FILLRECT
- | FBINFO_HWACCEL_IMAGEBLIT;
-
- /* Accel seems to not work properly on NV30 yet...*/
- if ((par->riva.Architecture == NV_ARCH_30) || noaccel) {
- printk(KERN_DEBUG PFX "disabling acceleration\n");
- info->flags |= FBINFO_HWACCEL_DISABLED;
- }
-
- info->var = rivafb_default_var;
- info->fix.visual = (info->var.bits_per_pixel == 8) ?
- FB_VISUAL_PSEUDOCOLOR : FB_VISUAL_DIRECTCOLOR;
-
- info->pseudo_palette = par->pseudo_palette;
-
- cmap_len = riva_get_cmap_len(&info->var);
- fb_alloc_cmap(&info->cmap, cmap_len, 0);
-
- info->pixmap.size = 8 * 1024;
- info->pixmap.buf_align = 4;
- info->pixmap.access_align = 32;
- info->pixmap.flags = FB_PIXMAP_SYSTEM;
- info->var.yres_virtual = -1;
- NVTRACE_LEAVE();
- return (rivafb_check_var(&info->var, info));
-}
-
-static int riva_get_EDID_OF(struct fb_info *info, struct pci_dev *pd)
-{
- struct riva_par *par = info->par;
- struct device_node *dp;
- const unsigned char *pedid = NULL;
- const unsigned char *disptype = NULL;
- static char *propnames[] = {
- "DFP,EDID", "LCD,EDID", "EDID", "EDID1", "EDID,B", "EDID,A", NULL };
- int i;
-
- NVTRACE_ENTER();
- dp = pci_device_to_OF_node(pd);
- for (; dp != NULL; dp = dp->child) {
- disptype = of_get_property(dp, "display-type", NULL);
- if (disptype == NULL)
- continue;
- if (strncmp(disptype, "LCD", 3) != 0)
- continue;
- for (i = 0; propnames[i] != NULL; ++i) {
- pedid = of_get_property(dp, propnames[i], NULL);
- if (pedid != NULL) {
- par->EDID = (unsigned char *)pedid;
- NVTRACE("LCD found.\n");
- return 1;
- }
- }
- }
- NVTRACE_LEAVE();
- return 0;
-}
-
-#if defined(CONFIG_FB_RIVA_I2C)
-static int riva_get_EDID_i2c(struct fb_info *info)
-{
- struct riva_par *par = info->par;
- struct fb_var_screeninfo var;
- int i;
-
- NVTRACE_ENTER();
- par->riva.LockUnlock(&par->riva, 0);
- riva_create_i2c_busses(par);
- for (i = 0; i < 3; i++) {
- if (!par->chan[i].par)
- continue;
- riva_probe_i2c_connector(par, i, &par->EDID);
- if (par->EDID && !fb_parse_edid(par->EDID, &var)) {
- printk(PFX "Found EDID Block from BUS %i\n", i);
- break;
- }
- }
-
- NVTRACE_LEAVE();
- return (par->EDID) ? 1 : 0;
-}
-#endif /* CONFIG_FB_RIVA_I2C */
-
-static void riva_update_default_var(struct fb_var_screeninfo *var,
- struct fb_info *info)
-{
- struct fb_monspecs *specs = &info->monspecs;
- struct fb_videomode modedb;
-
- NVTRACE_ENTER();
- /* respect mode options */
- if (mode_option) {
- fb_find_mode(var, info, mode_option,
- specs->modedb, specs->modedb_len,
- NULL, 8);
- } else if (specs->modedb != NULL) {
- /* get first mode in database as fallback */
- modedb = specs->modedb[0];
- /* get preferred timing */
- if (info->monspecs.misc & FB_MISC_1ST_DETAIL) {
- int i;
-
- for (i = 0; i < specs->modedb_len; i++) {
- if (specs->modedb[i].flag & FB_MODE_IS_FIRST) {
- modedb = specs->modedb[i];
- break;
- }
- }
- }
- var->bits_per_pixel = 8;
- riva_update_var(var, &modedb);
- }
- NVTRACE_LEAVE();
-}
-
-
-static void riva_get_EDID(struct fb_info *info, struct pci_dev *pdev)
-{
- NVTRACE_ENTER();
- if (riva_get_EDID_OF(info, pdev)) {
- NVTRACE_LEAVE();
- return;
- }
- if (IS_ENABLED(CONFIG_OF))
- printk(PFX "could not retrieve EDID from OF\n");
-#if defined(CONFIG_FB_RIVA_I2C)
- if (!riva_get_EDID_i2c(info))
- printk(PFX "could not retrieve EDID from DDC/I2C\n");
-#endif
- NVTRACE_LEAVE();
-}
-
-
-static void riva_get_edidinfo(struct fb_info *info)
-{
- struct fb_var_screeninfo *var = &rivafb_default_var;
- struct riva_par *par = info->par;
-
- fb_edid_to_monspecs(par->EDID, &info->monspecs);
- fb_videomode_to_modelist(info->monspecs.modedb, info->monspecs.modedb_len,
- &info->modelist);
- riva_update_default_var(var, info);
-
- /* if user specified flatpanel, we respect that */
- if (info->monspecs.input & FB_DISP_DDI)
- par->FlatPanel = 1;
-}
-
-/* ------------------------------------------------------------------------- *
- *
- * PCI bus
- *
- * ------------------------------------------------------------------------- */
-
-static u32 riva_get_arch(struct pci_dev *pd)
-{
- u32 arch = 0;
-
- switch (pd->device & 0x0ff0) {
- case 0x0100: /* GeForce 256 */
- case 0x0110: /* GeForce2 MX */
- case 0x0150: /* GeForce2 */
- case 0x0170: /* GeForce4 MX */
- case 0x0180: /* GeForce4 MX (8x AGP) */
- case 0x01A0: /* nForce */
- case 0x01F0: /* nForce2 */
- arch = NV_ARCH_10;
- break;
- case 0x0200: /* GeForce3 */
- case 0x0250: /* GeForce4 Ti */
- case 0x0280: /* GeForce4 Ti (8x AGP) */
- arch = NV_ARCH_20;
- break;
- case 0x0300: /* GeForceFX 5800 */
- case 0x0310: /* GeForceFX 5600 */
- case 0x0320: /* GeForceFX 5200 */
- case 0x0330: /* GeForceFX 5900 */
- case 0x0340: /* GeForceFX 5700 */
- arch = NV_ARCH_30;
- break;
- case 0x0020: /* TNT, TNT2 */
- arch = NV_ARCH_04;
- break;
- case 0x0010: /* Riva128 */
- arch = NV_ARCH_03;
- break;
- default: /* unknown architecture */
- break;
- }
- return arch;
-}
-
-static int rivafb_probe(struct pci_dev *pd, const struct pci_device_id *ent)
-{
- struct riva_par *default_par;
- struct fb_info *info;
- int ret;
-
- NVTRACE_ENTER();
- assert(pd != NULL);
-
- info = framebuffer_alloc(sizeof(struct riva_par), &pd->dev);
- if (!info) {
- ret = -ENOMEM;
- goto err_ret;
- }
- default_par = info->par;
- default_par->pdev = pd;
-
- info->pixmap.addr = kzalloc(8 * 1024, GFP_KERNEL);
- if (info->pixmap.addr == NULL) {
- ret = -ENOMEM;
- goto err_framebuffer_release;
- }
-
- ret = pci_enable_device(pd);
- if (ret < 0) {
- printk(KERN_ERR PFX "cannot enable PCI device\n");
- goto err_free_pixmap;
- }
-
- ret = pci_request_regions(pd, "rivafb");
- if (ret < 0) {
- printk(KERN_ERR PFX "cannot request PCI regions\n");
- goto err_disable_device;
- }
-
- mutex_init(&default_par->open_lock);
- default_par->riva.Architecture = riva_get_arch(pd);
-
- default_par->Chipset = (pd->vendor << 16) | pd->device;
- printk(KERN_INFO PFX "nVidia device/chipset %X\n",default_par->Chipset);
-
- if(default_par->riva.Architecture == 0) {
- printk(KERN_ERR PFX "unknown NV_ARCH\n");
- ret=-ENODEV;
- goto err_release_region;
- }
- if(default_par->riva.Architecture == NV_ARCH_10 ||
- default_par->riva.Architecture == NV_ARCH_20 ||
- default_par->riva.Architecture == NV_ARCH_30) {
- sprintf(rivafb_fix.id, "NV%x", (pd->device & 0x0ff0) >> 4);
- } else {
- sprintf(rivafb_fix.id, "NV%x", default_par->riva.Architecture);
- }
-
- default_par->FlatPanel = flatpanel;
- if (flatpanel == 1)
- printk(KERN_INFO PFX "flatpanel support enabled\n");
- default_par->forceCRTC = forceCRTC;
-
- rivafb_fix.mmio_len = pci_resource_len(pd, 0);
- rivafb_fix.smem_len = pci_resource_len(pd, 1);
-
- {
- /* enable IO and mem if not already done */
- unsigned short cmd;
-
- pci_read_config_word(pd, PCI_COMMAND, &cmd);
- cmd |= (PCI_COMMAND_IO | PCI_COMMAND_MEMORY);
- pci_write_config_word(pd, PCI_COMMAND, cmd);
- }
-
- rivafb_fix.mmio_start = pci_resource_start(pd, 0);
- rivafb_fix.smem_start = pci_resource_start(pd, 1);
-
- default_par->ctrl_base = ioremap(rivafb_fix.mmio_start,
- rivafb_fix.mmio_len);
- if (!default_par->ctrl_base) {
- printk(KERN_ERR PFX "cannot ioremap MMIO base\n");
- ret = -EIO;
- goto err_release_region;
- }
-
- switch (default_par->riva.Architecture) {
- case NV_ARCH_03:
- /* Riva128's PRAMIN is in the "framebuffer" space
- * Since these cards were never made with more than 8 megabytes
- * we can safely allocate this separately.
- */
- default_par->riva.PRAMIN = ioremap(rivafb_fix.smem_start + 0x00C00000, 0x00008000);
- if (!default_par->riva.PRAMIN) {
- printk(KERN_ERR PFX "cannot ioremap PRAMIN region\n");
- ret = -EIO;
- goto err_iounmap_ctrl_base;
- }
- break;
- case NV_ARCH_04:
- case NV_ARCH_10:
- case NV_ARCH_20:
- case NV_ARCH_30:
- default_par->riva.PCRTC0 =
- (u32 __iomem *)(default_par->ctrl_base + 0x00600000);
- default_par->riva.PRAMIN =
- (u32 __iomem *)(default_par->ctrl_base + 0x00710000);
- break;
- }
- riva_common_setup(default_par);
-
- if (default_par->riva.Architecture == NV_ARCH_03) {
- default_par->riva.PCRTC = default_par->riva.PCRTC0
- = default_par->riva.PGRAPH;
- }
-
- rivafb_fix.smem_len = riva_get_memlen(default_par) * 1024;
- default_par->dclk_max = riva_get_maxdclk(default_par) * 1000;
- info->screen_base = ioremap_wc(rivafb_fix.smem_start,
- rivafb_fix.smem_len);
- if (!info->screen_base) {
- printk(KERN_ERR PFX "cannot ioremap FB base\n");
- ret = -EIO;
- goto err_iounmap_pramin;
- }
-
- if (!nomtrr)
- default_par->wc_cookie =
- arch_phys_wc_add(rivafb_fix.smem_start,
- rivafb_fix.smem_len);
-
- info->fbops = &riva_fb_ops;
- info->fix = rivafb_fix;
- riva_get_EDID(info, pd);
- riva_get_edidinfo(info);
-
- ret=riva_set_fbinfo(info);
- if (ret < 0) {
- printk(KERN_ERR PFX "error setting initial video mode\n");
- goto err_iounmap_screen_base;
- }
-
- fb_destroy_modedb(info->monspecs.modedb);
- info->monspecs.modedb = NULL;
-
- pci_set_drvdata(pd, info);
-
- if (backlight)
- riva_bl_init(info->par);
-
- ret = register_framebuffer(info);
- if (ret < 0) {
- printk(KERN_ERR PFX
- "error registering riva framebuffer\n");
- goto err_iounmap_screen_base;
- }
-
- printk(KERN_INFO PFX
- "PCI nVidia %s framebuffer ver %s (%dMB @ 0x%lX)\n",
- info->fix.id,
- RIVAFB_VERSION,
- info->fix.smem_len / (1024 * 1024),
- info->fix.smem_start);
-
- NVTRACE_LEAVE();
- return 0;
-
-err_iounmap_screen_base:
-#ifdef CONFIG_FB_RIVA_I2C
- riva_delete_i2c_busses(info->par);
-#endif
- iounmap(info->screen_base);
-err_iounmap_pramin:
- if (default_par->riva.Architecture == NV_ARCH_03)
- iounmap(default_par->riva.PRAMIN);
-err_iounmap_ctrl_base:
- iounmap(default_par->ctrl_base);
-err_release_region:
- pci_release_regions(pd);
-err_disable_device:
-err_free_pixmap:
- kfree(info->pixmap.addr);
-err_framebuffer_release:
- framebuffer_release(info);
-err_ret:
- return ret;
-}
-
-static void rivafb_remove(struct pci_dev *pd)
-{
- struct fb_info *info = pci_get_drvdata(pd);
- struct riva_par *par = info->par;
-
- NVTRACE_ENTER();
-
-#ifdef CONFIG_FB_RIVA_I2C
- riva_delete_i2c_busses(par);
- kfree(par->EDID);
-#endif
-
- unregister_framebuffer(info);
-
- riva_bl_exit(info);
- arch_phys_wc_del(par->wc_cookie);
- iounmap(par->ctrl_base);
- iounmap(info->screen_base);
- if (par->riva.Architecture == NV_ARCH_03)
- iounmap(par->riva.PRAMIN);
- pci_release_regions(pd);
- kfree(info->pixmap.addr);
- framebuffer_release(info);
- NVTRACE_LEAVE();
-}
-
-/* ------------------------------------------------------------------------- *
- *
- * initialization
- *
- * ------------------------------------------------------------------------- */
-
-#ifndef MODULE
-static int rivafb_setup(char *options)
-{
- char *this_opt;
-
- NVTRACE_ENTER();
- if (!options || !*options)
- return 0;
-
- while ((this_opt = strsep(&options, ",")) != NULL) {
- if (!strncmp(this_opt, "forceCRTC", 9)) {
- char *p;
-
- p = this_opt + 9;
- if (!*p || !*(++p)) continue;
- forceCRTC = *p - '0';
- if (forceCRTC < 0 || forceCRTC > 1)
- forceCRTC = -1;
- } else if (!strncmp(this_opt, "flatpanel", 9)) {
- flatpanel = 1;
- } else if (!strncmp(this_opt, "backlight:", 10)) {
- backlight = simple_strtoul(this_opt+10, NULL, 0);
- } else if (!strncmp(this_opt, "nomtrr", 6)) {
- nomtrr = 1;
- } else if (!strncmp(this_opt, "strictmode", 10)) {
- strictmode = 1;
- } else if (!strncmp(this_opt, "noaccel", 7)) {
- noaccel = 1;
- } else
- mode_option = this_opt;
- }
- NVTRACE_LEAVE();
- return 0;
-}
-#endif /* !MODULE */
-
-static struct pci_driver rivafb_driver = {
- .name = "rivafb",
- .id_table = rivafb_pci_tbl,
- .probe = rivafb_probe,
- .remove = rivafb_remove,
-};
-
-
-
-/* ------------------------------------------------------------------------- *
- *
- * modularization
- *
- * ------------------------------------------------------------------------- */
-
-static int rivafb_init(void)
-{
-#ifndef MODULE
- char *option = NULL;
-
- if (fb_get_options("rivafb", &option))
- return -ENODEV;
- rivafb_setup(option);
-#endif
- return pci_register_driver(&rivafb_driver);
-}
-
-
-module_init(rivafb_init);
-
-static void __exit rivafb_exit(void)
-{
- pci_unregister_driver(&rivafb_driver);
-}
-
-module_exit(rivafb_exit);
-
-module_param(noaccel, bool, 0);
-MODULE_PARM_DESC(noaccel, "bool: disable acceleration");
-module_param(flatpanel, int, 0);
-MODULE_PARM_DESC(flatpanel, "Enables experimental flat panel support for some chipsets. (0 or 1=enabled) (default=0)");
-module_param(forceCRTC, int, 0);
-MODULE_PARM_DESC(forceCRTC, "Forces usage of a particular CRTC in case autodetection fails. (0 or 1) (default=autodetect)");
-module_param(nomtrr, bool, 0);
-MODULE_PARM_DESC(nomtrr, "Disables MTRR support (0 or 1=disabled) (default=0)");
-module_param(strictmode, bool, 0);
-MODULE_PARM_DESC(strictmode, "Only use video modes from EDID");
-
-MODULE_AUTHOR("Ani Joshi, maintainer");
-MODULE_DESCRIPTION("Framebuffer driver for nVidia Riva 128, TNT, TNT2, and the GeForce series");
-MODULE_LICENSE("GPL");
diff --git a/drivers/video/fbdev/riva/nv_driver.c b/drivers/video/fbdev/riva/nv_driver.c
deleted file mode 100644
index a3d9c66973ad..000000000000
--- a/drivers/video/fbdev/riva/nv_driver.c
+++ /dev/null
@@ -1,423 +0,0 @@
-/* $XConsortium: nv_driver.c /main/3 1996/10/28 05:13:37 kaleb $ */
-/*
- * Copyright 1996-1997 David J. McKay
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * 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
- * DAVID J. MCKAY 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.
- */
-
-/*
- * GPL licensing note -- nVidia is allowing a liberal interpretation of
- * the documentation restriction above, to merely say that this nVidia's
- * copyright and disclaimer should be included with all code derived
- * from this source. -- Jeff Garzik <jgarzik@pobox.com>, 01/Nov/99
- */
-
-/* Hacked together from mga driver and 3.3.4 NVIDIA driver by Jarno Paananen
- <jpaana@s2.org> */
-
-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_setup.c,v 1.18 2002/08/0
-5 20:47:06 mvojkovi Exp $ */
-
-#include <linux/delay.h>
-#include <linux/pci.h>
-#include <linux/pci_ids.h>
-#include "nv_type.h"
-#include "rivafb.h"
-#include "nvreg.h"
-
-#define PFX "rivafb: "
-
-static inline unsigned char MISCin(struct riva_par *par)
-{
- return (VGA_RD08(par->riva.PVIO, 0x3cc));
-}
-
-static Bool
-riva_is_connected(struct riva_par *par, Bool second)
-{
- volatile U032 __iomem *PRAMDAC = par->riva.PRAMDAC0;
- U032 reg52C, reg608;
- Bool present;
-
- if(second) PRAMDAC += 0x800;
-
- reg52C = NV_RD32(PRAMDAC, 0x052C);
- reg608 = NV_RD32(PRAMDAC, 0x0608);
-
- NV_WR32(PRAMDAC, 0x0608, reg608 & ~0x00010000);
-
- NV_WR32(PRAMDAC, 0x052C, reg52C & 0x0000FEEE);
- mdelay(1);
- NV_WR32(PRAMDAC, 0x052C, NV_RD32(PRAMDAC, 0x052C) | 1);
-
- NV_WR32(par->riva.PRAMDAC0, 0x0610, 0x94050140);
- NV_WR32(par->riva.PRAMDAC0, 0x0608, 0x00001000);
-
- mdelay(1);
-
- present = (NV_RD32(PRAMDAC, 0x0608) & (1 << 28)) ? TRUE : FALSE;
-
- NV_WR32(par->riva.PRAMDAC0, 0x0608,
- NV_RD32(par->riva.PRAMDAC0, 0x0608) & 0x0000EFFF);
-
- NV_WR32(PRAMDAC, 0x052C, reg52C);
- NV_WR32(PRAMDAC, 0x0608, reg608);
-
- return present;
-}
-
-static void
-riva_override_CRTC(struct riva_par *par)
-{
- printk(KERN_INFO PFX
- "Detected CRTC controller %i being used\n",
- par->SecondCRTC ? 1 : 0);
-
- if(par->forceCRTC != -1) {
- printk(KERN_INFO PFX
- "Forcing usage of CRTC %i\n", par->forceCRTC);
- par->SecondCRTC = par->forceCRTC;
- }
-}
-
-static void
-riva_is_second(struct riva_par *par)
-{
- if (par->FlatPanel == 1) {
- switch(par->Chipset & 0xffff) {
- case 0x0174:
- case 0x0175:
- case 0x0176:
- case 0x0177:
- case 0x0179:
- case 0x017C:
- case 0x017D:
- case 0x0186:
- case 0x0187:
- /* this might not be a good default for the chips below */
- case 0x0286:
- case 0x028C:
- case 0x0316:
- case 0x0317:
- case 0x031A:
- case 0x031B:
- case 0x031C:
- case 0x031D:
- case 0x031E:
- case 0x031F:
- case 0x0324:
- case 0x0325:
- case 0x0328:
- case 0x0329:
- case 0x032C:
- case 0x032D:
- par->SecondCRTC = TRUE;
- break;
- default:
- par->SecondCRTC = FALSE;
- break;
- }
- } else {
- if(riva_is_connected(par, 0)) {
-
- if (NV_RD32(par->riva.PRAMDAC0, 0x0000052C) & 0x100)
- par->SecondCRTC = TRUE;
- else
- par->SecondCRTC = FALSE;
- } else
- if (riva_is_connected(par, 1)) {
- if(NV_RD32(par->riva.PRAMDAC0, 0x0000252C) & 0x100)
- par->SecondCRTC = TRUE;
- else
- par->SecondCRTC = FALSE;
- } else /* default */
- par->SecondCRTC = FALSE;
- }
- riva_override_CRTC(par);
-}
-
-unsigned long riva_get_memlen(struct riva_par *par)
-{
- RIVA_HW_INST *chip = &par->riva;
- unsigned long memlen = 0;
- unsigned int chipset = par->Chipset;
- struct pci_dev* dev;
- u32 amt;
- int domain = pci_domain_nr(par->pdev->bus);
-
- switch (chip->Architecture) {
- case NV_ARCH_03:
- if (NV_RD32(chip->PFB, 0x00000000) & 0x00000020) {
- if (((NV_RD32(chip->PMC, 0x00000000) & 0xF0) == 0x20)
- && ((NV_RD32(chip->PMC, 0x00000000)&0x0F)>=0x02)) {
- /*
- * SDRAM 128 ZX.
- */
- switch (NV_RD32(chip->PFB,0x00000000) & 0x03) {
- case 2:
- memlen = 1024 * 4;
- break;
- case 1:
- memlen = 1024 * 2;
- break;
- default:
- memlen = 1024 * 8;
- break;
- }
- } else {
- memlen = 1024 * 8;
- }
- } else {
- /*
- * SGRAM 128.
- */
- switch (NV_RD32(chip->PFB, 0x00000000) & 0x00000003) {
- case 0:
- memlen = 1024 * 8;
- break;
- case 2:
- memlen = 1024 * 4;
- break;
- default:
- memlen = 1024 * 2;
- break;
- }
- }
- break;
- case NV_ARCH_04:
- if (NV_RD32(chip->PFB, 0x00000000) & 0x00000100) {
- memlen = ((NV_RD32(chip->PFB, 0x00000000)>>12)&0x0F) *
- 1024 * 2 + 1024 * 2;
- } else {
- switch (NV_RD32(chip->PFB, 0x00000000) & 0x00000003) {
- case 0:
- memlen = 1024 * 32;
- break;
- case 1:
- memlen = 1024 * 4;
- break;
- case 2:
- memlen = 1024 * 8;
- break;
- case 3:
- default:
- memlen = 1024 * 16;
- break;
- }
- }
- break;
- case NV_ARCH_10:
- case NV_ARCH_20:
- case NV_ARCH_30:
- if(chipset == NV_CHIP_IGEFORCE2) {
-
- dev = pci_get_domain_bus_and_slot(domain, 0, 1);
- pci_read_config_dword(dev, 0x7C, &amt);
- pci_dev_put(dev);
- memlen = (((amt >> 6) & 31) + 1) * 1024;
- } else if (chipset == NV_CHIP_0x01F0) {
- dev = pci_get_domain_bus_and_slot(domain, 0, 1);
- pci_read_config_dword(dev, 0x84, &amt);
- pci_dev_put(dev);
- memlen = (((amt >> 4) & 127) + 1) * 1024;
- } else {
- switch ((NV_RD32(chip->PFB, 0x0000020C) >> 20) &
- 0x000000FF){
- case 0x02:
- memlen = 1024 * 2;
- break;
- case 0x04:
- memlen = 1024 * 4;
- break;
- case 0x08:
- memlen = 1024 * 8;
- break;
- case 0x10:
- memlen = 1024 * 16;
- break;
- case 0x20:
- memlen = 1024 * 32;
- break;
- case 0x40:
- memlen = 1024 * 64;
- break;
- case 0x80:
- memlen = 1024 * 128;
- break;
- default:
- memlen = 1024 * 16;
- break;
- }
- }
- break;
- }
- return memlen;
-}
-
-unsigned long riva_get_maxdclk(struct riva_par *par)
-{
- RIVA_HW_INST *chip = &par->riva;
- unsigned long dclk = 0;
-
- switch (chip->Architecture) {
- case NV_ARCH_03:
- if (NV_RD32(chip->PFB, 0x00000000) & 0x00000020) {
- if (((NV_RD32(chip->PMC, 0x00000000) & 0xF0) == 0x20)
- && ((NV_RD32(chip->PMC,0x00000000)&0x0F) >= 0x02)) {
- /*
- * SDRAM 128 ZX.
- */
- dclk = 800000;
- } else {
- dclk = 1000000;
- }
- } else {
- /*
- * SGRAM 128.
- */
- dclk = 1000000;
- }
- break;
- case NV_ARCH_04:
- case NV_ARCH_10:
- case NV_ARCH_20:
- case NV_ARCH_30:
- switch ((NV_RD32(chip->PFB, 0x00000000) >> 3) & 0x00000003) {
- case 3:
- dclk = 800000;
- break;
- default:
- dclk = 1000000;
- break;
- }
- break;
- }
- return dclk;
-}
-
-void
-riva_common_setup(struct riva_par *par)
-{
- par->riva.EnableIRQ = 0;
- par->riva.PRAMDAC0 =
- (volatile U032 __iomem *)(par->ctrl_base + 0x00680000);
- par->riva.PFB =
- (volatile U032 __iomem *)(par->ctrl_base + 0x00100000);
- par->riva.PFIFO =
- (volatile U032 __iomem *)(par->ctrl_base + 0x00002000);
- par->riva.PGRAPH =
- (volatile U032 __iomem *)(par->ctrl_base + 0x00400000);
- par->riva.PEXTDEV =
- (volatile U032 __iomem *)(par->ctrl_base + 0x00101000);
- par->riva.PTIMER =
- (volatile U032 __iomem *)(par->ctrl_base + 0x00009000);
- par->riva.PMC =
- (volatile U032 __iomem *)(par->ctrl_base + 0x00000000);
- par->riva.FIFO =
- (volatile U032 __iomem *)(par->ctrl_base + 0x00800000);
- par->riva.PCIO0 = par->ctrl_base + 0x00601000;
- par->riva.PDIO0 = par->ctrl_base + 0x00681000;
- par->riva.PVIO = par->ctrl_base + 0x000C0000;
-
- par->riva.IO = (MISCin(par) & 0x01) ? 0x3D0 : 0x3B0;
-
- if (par->FlatPanel == -1) {
- switch (par->Chipset & 0xffff) {
- case 0x0112: /* known laptop chips */
- case 0x0174:
- case 0x0175:
- case 0x0176:
- case 0x0177:
- case 0x0179:
- case 0x017C:
- case 0x017D:
- case 0x0186:
- case 0x0187:
- case 0x0286:
- case 0x028C:
- case 0x0316:
- case 0x0317:
- case 0x031A:
- case 0x031B:
- case 0x031C:
- case 0x031D:
- case 0x031E:
- case 0x031F:
- case 0x0324:
- case 0x0325:
- case 0x0328:
- case 0x0329:
- case 0x032C:
- case 0x032D:
- printk(KERN_INFO PFX
- "On a laptop. Assuming Digital Flat Panel\n");
- par->FlatPanel = 1;
- break;
- default:
- break;
- }
- }
-
- switch (par->Chipset & 0x0ff0) {
- case 0x0110:
- if (par->Chipset == NV_CHIP_GEFORCE2_GO)
- par->SecondCRTC = TRUE;
-#if defined(__powerpc__)
- if (par->FlatPanel == 1)
- par->SecondCRTC = TRUE;
-#endif
- riva_override_CRTC(par);
- break;
- case 0x0170:
- case 0x0180:
- case 0x01F0:
- case 0x0250:
- case 0x0280:
- case 0x0300:
- case 0x0310:
- case 0x0320:
- case 0x0330:
- case 0x0340:
- riva_is_second(par);
- break;
- default:
- break;
- }
-
- if (par->SecondCRTC) {
- par->riva.PCIO = par->riva.PCIO0 + 0x2000;
- par->riva.PCRTC = par->riva.PCRTC0 + 0x800;
- par->riva.PRAMDAC = par->riva.PRAMDAC0 + 0x800;
- par->riva.PDIO = par->riva.PDIO0 + 0x2000;
- } else {
- par->riva.PCIO = par->riva.PCIO0;
- par->riva.PCRTC = par->riva.PCRTC0;
- par->riva.PRAMDAC = par->riva.PRAMDAC0;
- par->riva.PDIO = par->riva.PDIO0;
- }
-
- if (par->FlatPanel == -1) {
- /* Fix me, need x86 DDC code */
- par->FlatPanel = 0;
- }
- par->riva.flatPanel = (par->FlatPanel > 0) ? TRUE : FALSE;
-
- RivaGetConfig(&par->riva, par->pdev, par->Chipset);
-}
-
diff --git a/drivers/video/fbdev/riva/nv_type.h b/drivers/video/fbdev/riva/nv_type.h
deleted file mode 100644
index 51937a0ae0a4..000000000000
--- a/drivers/video/fbdev/riva/nv_type.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_type.h,v 1.35 2002/08/05 20:47:06 mvojkovi Exp $ */
-
-#ifndef __NV_STRUCT_H__
-#define __NV_STRUCT_H__
-
-#define NV_CHIP_RIVA_128 ((PCI_VENDOR_ID_NVIDIA_SGS << 16)| PCI_DEVICE_ID_NVIDIA_RIVA128)
-#define NV_CHIP_TNT ((PCI_VENDOR_ID_NVIDIA << 16)| PCI_DEVICE_ID_NVIDIA_TNT)
-#define NV_CHIP_TNT2 ((PCI_VENDOR_ID_NVIDIA << 16)| PCI_DEVICE_ID_NVIDIA_TNT2)
-#define NV_CHIP_UTNT2 ((PCI_VENDOR_ID_NVIDIA << 16)| PCI_DEVICE_ID_NVIDIA_UTNT2)
-#define NV_CHIP_VTNT2 ((PCI_VENDOR_ID_NVIDIA << 16)| PCI_DEVICE_ID_NVIDIA_VTNT2)
-#define NV_CHIP_UVTNT2 ((PCI_VENDOR_ID_NVIDIA << 16)| PCI_DEVICE_ID_NVIDIA_UVTNT2)
-#define NV_CHIP_ITNT2 ((PCI_VENDOR_ID_NVIDIA << 16)| PCI_DEVICE_ID_NVIDIA_ITNT2)
-#define NV_CHIP_GEFORCE_256 ((PCI_VENDOR_ID_NVIDIA << 16)| PCI_DEVICE_ID_NVIDIA_GEFORCE_256)
-#define NV_CHIP_GEFORCE_DDR ((PCI_VENDOR_ID_NVIDIA << 16)| PCI_DEVICE_ID_NVIDIA_GEFORCE_DDR)
-#define NV_CHIP_QUADRO ((PCI_VENDOR_ID_NVIDIA << 16)| PCI_DEVICE_ID_NVIDIA_QUADRO)
-#define NV_CHIP_GEFORCE2_MX ((PCI_VENDOR_ID_NVIDIA << 16) | PCI_DEVICE_ID_NVIDIA_GEFORCE2_MX)
-#define NV_CHIP_GEFORCE2_MX_100 ((PCI_VENDOR_ID_NVIDIA << 16) | PCI_DEVICE_ID_NVIDIA_GEFORCE2_MX_100)
-#define NV_CHIP_QUADRO2_MXR ((PCI_VENDOR_ID_NVIDIA << 16) | PCI_DEVICE_ID_NVIDIA_QUADRO2_MXR)
-#define NV_CHIP_GEFORCE2_GO ((PCI_VENDOR_ID_NVIDIA << 16) | PCI_DEVICE_ID_NVIDIA_GEFORCE2_GO)
-#define NV_CHIP_GEFORCE2_GTS ((PCI_VENDOR_ID_NVIDIA << 16) | PCI_DEVICE_ID_NVIDIA_GEFORCE2_GTS)
-#define NV_CHIP_GEFORCE2_TI ((PCI_VENDOR_ID_NVIDIA << 16) | PCI_DEVICE_ID_NVIDIA_GEFORCE2_TI)
-#define NV_CHIP_GEFORCE2_ULTRA ((PCI_VENDOR_ID_NVIDIA << 16) | PCI_DEVICE_ID_NVIDIA_GEFORCE2_ULTRA)
-#define NV_CHIP_QUADRO2_PRO ((PCI_VENDOR_ID_NVIDIA << 16) | PCI_DEVICE_ID_NVIDIA_QUADRO2_PRO)
-#define NV_CHIP_GEFORCE4_MX_460 ((PCI_VENDOR_ID_NVIDIA << 16) | PCI_DEVICE_ID_NVIDIA_GEFORCE4_MX_460)
-#define NV_CHIP_GEFORCE4_MX_440 ((PCI_VENDOR_ID_NVIDIA << 16) | PCI_DEVICE_ID_NVIDIA_GEFORCE4_MX_440)
-#define NV_CHIP_GEFORCE4_MX_420 ((PCI_VENDOR_ID_NVIDIA << 16) | PCI_DEVICE_ID_NVIDIA_GEFORCE4_MX_420)
-#define NV_CHIP_GEFORCE4_440_GO ((PCI_VENDOR_ID_NVIDIA << 16) | PCI_DEVICE_ID_NVIDIA_GEFORCE4_440_GO)
-#define NV_CHIP_GEFORCE4_420_GO ((PCI_VENDOR_ID_NVIDIA << 16) | PCI_DEVICE_ID_NVIDIA_GEFORCE4_420_GO)
-#define NV_CHIP_GEFORCE4_420_GO_M32 ((PCI_VENDOR_ID_NVIDIA << 16) | PCI_DEVICE_ID_NVIDIA_GEFORCE4_420_GO_M32)
-#define NV_CHIP_QUADRO4_500XGL ((PCI_VENDOR_ID_NVIDIA << 16) | PCI_DEVICE_ID_NVIDIA_QUADRO4_500XGL)
-#define NV_CHIP_GEFORCE4_440_GO_M64 ((PCI_VENDOR_ID_NVIDIA << 16) | PCI_DEVICE_ID_NVIDIA_GEFORCE4_440_GO_M64)
-#define NV_CHIP_QUADRO4_200 ((PCI_VENDOR_ID_NVIDIA << 16) | PCI_DEVICE_ID_NVIDIA_QUADRO4_200)
-#define NV_CHIP_QUADRO4_550XGL ((PCI_VENDOR_ID_NVIDIA << 16) | PCI_DEVICE_ID_NVIDIA_QUADRO4_550XGL)
-#define NV_CHIP_QUADRO4_500_GOGL ((PCI_VENDOR_ID_NVIDIA << 16) | PCI_DEVICE_ID_NVIDIA_QUADRO4_500_GOGL)
-#define NV_CHIP_0x0180 ((PCI_VENDOR_ID_NVIDIA << 16) | 0x0180)
-#define NV_CHIP_0x0181 ((PCI_VENDOR_ID_NVIDIA << 16) | 0x0181)
-#define NV_CHIP_0x0182 ((PCI_VENDOR_ID_NVIDIA << 16) | 0x0182)
-#define NV_CHIP_0x0188 ((PCI_VENDOR_ID_NVIDIA << 16) | 0x0188)
-#define NV_CHIP_0x018A ((PCI_VENDOR_ID_NVIDIA << 16) | 0x018A)
-#define NV_CHIP_0x018B ((PCI_VENDOR_ID_NVIDIA << 16) | 0x018B)
-#define NV_CHIP_IGEFORCE2 ((PCI_VENDOR_ID_NVIDIA << 16) | PCI_DEVICE_ID_NVIDIA_IGEFORCE2)
-#define NV_CHIP_0x01F0 ((PCI_VENDOR_ID_NVIDIA << 16) | 0x01F0)
-#define NV_CHIP_GEFORCE3 ((PCI_VENDOR_ID_NVIDIA << 16) | PCI_DEVICE_ID_NVIDIA_GEFORCE3)
-#define NV_CHIP_GEFORCE3_TI_200 ((PCI_VENDOR_ID_NVIDIA << 16) | PCI_DEVICE_ID_NVIDIA_GEFORCE3_TI_200)
-#define NV_CHIP_GEFORCE3_TI_500 ((PCI_VENDOR_ID_NVIDIA << 16) | PCI_DEVICE_ID_NVIDIA_GEFORCE3_TI_500)
-#define NV_CHIP_QUADRO_DCC ((PCI_VENDOR_ID_NVIDIA << 16) | PCI_DEVICE_ID_NVIDIA_QUADRO_DCC)
-#define NV_CHIP_GEFORCE4_TI_4600 ((PCI_VENDOR_ID_NVIDIA << 16) | PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI_4600)
-#define NV_CHIP_GEFORCE4_TI_4400 ((PCI_VENDOR_ID_NVIDIA << 16) | PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI_4400)
-#define NV_CHIP_GEFORCE4_TI_4200 ((PCI_VENDOR_ID_NVIDIA << 16) | PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI_4200)
-#define NV_CHIP_QUADRO4_900XGL ((PCI_VENDOR_ID_NVIDIA << 16) | PCI_DEVICE_ID_NVIDIA_QUADRO4_900XGL)
-#define NV_CHIP_QUADRO4_750XGL ((PCI_VENDOR_ID_NVIDIA << 16) | PCI_DEVICE_ID_NVIDIA_QUADRO4_750XGL)
-#define NV_CHIP_QUADRO4_700XGL ((PCI_VENDOR_ID_NVIDIA << 16) | PCI_DEVICE_ID_NVIDIA_QUADRO4_700XGL)
-#define NV_CHIP_0x0280 ((PCI_VENDOR_ID_NVIDIA << 16) | 0x0280)
-#define NV_CHIP_0x0281 ((PCI_VENDOR_ID_NVIDIA << 16) | 0x0281)
-#define NV_CHIP_0x0288 ((PCI_VENDOR_ID_NVIDIA << 16) | 0x0288)
-#define NV_CHIP_0x0289 ((PCI_VENDOR_ID_NVIDIA << 16) | 0x0289)
-
-#endif /* __NV_STRUCT_H__ */
diff --git a/drivers/video/fbdev/riva/nvreg.h b/drivers/video/fbdev/riva/nvreg.h
deleted file mode 100644
index abfc167ae8d8..000000000000
--- a/drivers/video/fbdev/riva/nvreg.h
+++ /dev/null
@@ -1,188 +0,0 @@
-/* $XConsortium: nvreg.h /main/2 1996/10/28 05:13:41 kaleb $ */
-/*
- * Copyright 1996-1997 David J. McKay
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * 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
- * DAVID J. MCKAY 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.
- */
-
-/* $XFree86: xc/programs/Xserver/hw/xfree86/vga256/drivers/nv/nvreg.h,v 3.2.2.1 1998/01/18 10:35:36 hohndel Exp $ */
-
-#ifndef __NVREG_H_
-#define __NVREG_H_
-
-/* Little macro to construct bitmask for contiguous ranges of bits */
-#define BITMASK(t,b) (((unsigned)(1U << (((t)-(b)+1)))-1) << (b))
-#define MASKEXPAND(mask) BITMASK(1?mask,0?mask)
-
-/* Macro to set specific bitfields (mask has to be a macro x:y) ! */
-#define SetBF(mask,value) ((value) << (0?mask))
-#define GetBF(var,mask) (((unsigned)((var) & MASKEXPAND(mask))) >> (0?mask) )
-
-#define MaskAndSetBF(var,mask,value) (var)=(((var)&(~MASKEXPAND(mask)) \
- | SetBF(mask,value)))
-
-#define DEVICE_BASE(device) (0?NV##_##device)
-#define DEVICE_SIZE(device) ((1?NV##_##device) - DEVICE_BASE(device)+1)
-
-/* This is where we will have to have conditional compilation */
-#define DEVICE_ACCESS(device,reg) \
- nvCONTROL[(NV_##device##_##reg)/4]
-
-#define DEVICE_WRITE(device,reg,value) DEVICE_ACCESS(device,reg)=(value)
-#define DEVICE_READ(device,reg) DEVICE_ACCESS(device,reg)
-#define DEVICE_PRINT(device,reg) \
- ErrorF("NV_"#device"_"#reg"=#%08lx\n",DEVICE_ACCESS(device,reg))
-#define DEVICE_DEF(device,mask,value) \
- SetBF(NV_##device##_##mask,NV_##device##_##mask##_##value)
-#define DEVICE_VALUE(device,mask,value) SetBF(NV_##device##_##mask,value)
-#define DEVICE_MASK(device,mask) MASKEXPAND(NV_##device##_##mask)
-
-#define PDAC_Write(reg,value) DEVICE_WRITE(PDAC,reg,value)
-#define PDAC_Read(reg) DEVICE_READ(PDAC,reg)
-#define PDAC_Print(reg) DEVICE_PRINT(PDAC,reg)
-#define PDAC_Def(mask,value) DEVICE_DEF(PDAC,mask,value)
-#define PDAC_Val(mask,value) DEVICE_VALUE(PDAC,mask,value)
-#define PDAC_Mask(mask) DEVICE_MASK(PDAC,mask)
-
-#define PFB_Write(reg,value) DEVICE_WRITE(PFB,reg,value)
-#define PFB_Read(reg) DEVICE_READ(PFB,reg)
-#define PFB_Print(reg) DEVICE_PRINT(PFB,reg)
-#define PFB_Def(mask,value) DEVICE_DEF(PFB,mask,value)
-#define PFB_Val(mask,value) DEVICE_VALUE(PFB,mask,value)
-#define PFB_Mask(mask) DEVICE_MASK(PFB,mask)
-
-#define PRM_Write(reg,value) DEVICE_WRITE(PRM,reg,value)
-#define PRM_Read(reg) DEVICE_READ(PRM,reg)
-#define PRM_Print(reg) DEVICE_PRINT(PRM,reg)
-#define PRM_Def(mask,value) DEVICE_DEF(PRM,mask,value)
-#define PRM_Val(mask,value) DEVICE_VALUE(PRM,mask,value)
-#define PRM_Mask(mask) DEVICE_MASK(PRM,mask)
-
-#define PGRAPH_Write(reg,value) DEVICE_WRITE(PGRAPH,reg,value)
-#define PGRAPH_Read(reg) DEVICE_READ(PGRAPH,reg)
-#define PGRAPH_Print(reg) DEVICE_PRINT(PGRAPH,reg)
-#define PGRAPH_Def(mask,value) DEVICE_DEF(PGRAPH,mask,value)
-#define PGRAPH_Val(mask,value) DEVICE_VALUE(PGRAPH,mask,value)
-#define PGRAPH_Mask(mask) DEVICE_MASK(PGRAPH,mask)
-
-#define PDMA_Write(reg,value) DEVICE_WRITE(PDMA,reg,value)
-#define PDMA_Read(reg) DEVICE_READ(PDMA,reg)
-#define PDMA_Print(reg) DEVICE_PRINT(PDMA,reg)
-#define PDMA_Def(mask,value) DEVICE_DEF(PDMA,mask,value)
-#define PDMA_Val(mask,value) DEVICE_VALUE(PDMA,mask,value)
-#define PDMA_Mask(mask) DEVICE_MASK(PDMA,mask)
-
-#define PTIMER_Write(reg,value) DEVICE_WRITE(PTIMER,reg,value)
-#define PTIMER_Read(reg) DEVICE_READ(PTIMER,reg)
-#define PTIMER_Print(reg) DEVICE_PRINT(PTIMER,reg)
-#define PTIMER_Def(mask,value) DEVICE_DEF(PTIMER,mask,value)
-#define PTIMER_Val(mask,value) DEVICE_VALUE(PTIEMR,mask,value)
-#define PTIMER_Mask(mask) DEVICE_MASK(PTIMER,mask)
-
-#define PEXTDEV_Write(reg,value) DEVICE_WRITE(PEXTDEV,reg,value)
-#define PEXTDEV_Read(reg) DEVICE_READ(PEXTDEV,reg)
-#define PEXTDEV_Print(reg) DEVICE_PRINT(PEXTDEV,reg)
-#define PEXTDEV_Def(mask,value) DEVICE_DEF(PEXTDEV,mask,value)
-#define PEXTDEV_Val(mask,value) DEVICE_VALUE(PEXTDEV,mask,value)
-#define PEXTDEV_Mask(mask) DEVICE_MASK(PEXTDEV,mask)
-
-#define PFIFO_Write(reg,value) DEVICE_WRITE(PFIFO,reg,value)
-#define PFIFO_Read(reg) DEVICE_READ(PFIFO,reg)
-#define PFIFO_Print(reg) DEVICE_PRINT(PFIFO,reg)
-#define PFIFO_Def(mask,value) DEVICE_DEF(PFIFO,mask,value)
-#define PFIFO_Val(mask,value) DEVICE_VALUE(PFIFO,mask,value)
-#define PFIFO_Mask(mask) DEVICE_MASK(PFIFO,mask)
-
-#define PRAM_Write(reg,value) DEVICE_WRITE(PRAM,reg,value)
-#define PRAM_Read(reg) DEVICE_READ(PRAM,reg)
-#define PRAM_Print(reg) DEVICE_PRINT(PRAM,reg)
-#define PRAM_Def(mask,value) DEVICE_DEF(PRAM,mask,value)
-#define PRAM_Val(mask,value) DEVICE_VALUE(PRAM,mask,value)
-#define PRAM_Mask(mask) DEVICE_MASK(PRAM,mask)
-
-#define PRAMFC_Write(reg,value) DEVICE_WRITE(PRAMFC,reg,value)
-#define PRAMFC_Read(reg) DEVICE_READ(PRAMFC,reg)
-#define PRAMFC_Print(reg) DEVICE_PRINT(PRAMFC,reg)
-#define PRAMFC_Def(mask,value) DEVICE_DEF(PRAMFC,mask,value)
-#define PRAMFC_Val(mask,value) DEVICE_VALUE(PRAMFC,mask,value)
-#define PRAMFC_Mask(mask) DEVICE_MASK(PRAMFC,mask)
-
-#define PMC_Write(reg,value) DEVICE_WRITE(PMC,reg,value)
-#define PMC_Read(reg) DEVICE_READ(PMC,reg)
-#define PMC_Print(reg) DEVICE_PRINT(PMC,reg)
-#define PMC_Def(mask,value) DEVICE_DEF(PMC,mask,value)
-#define PMC_Val(mask,value) DEVICE_VALUE(PMC,mask,value)
-#define PMC_Mask(mask) DEVICE_MASK(PMC,mask)
-
-#define PMC_Write(reg,value) DEVICE_WRITE(PMC,reg,value)
-#define PMC_Read(reg) DEVICE_READ(PMC,reg)
-#define PMC_Print(reg) DEVICE_PRINT(PMC,reg)
-#define PMC_Def(mask,value) DEVICE_DEF(PMC,mask,value)
-#define PMC_Val(mask,value) DEVICE_VALUE(PMC,mask,value)
-#define PMC_Mask(mask) DEVICE_MASK(PMC,mask)
-
-
-#define PBUS_Write(reg,value) DEVICE_WRITE(PBUS,reg,value)
-#define PBUS_Read(reg) DEVICE_READ(PBUS,reg)
-#define PBUS_Print(reg) DEVICE_PRINT(PBUS,reg)
-#define PBUS_Def(mask,value) DEVICE_DEF(PBUS,mask,value)
-#define PBUS_Val(mask,value) DEVICE_VALUE(PBUS,mask,value)
-#define PBUS_Mask(mask) DEVICE_MASK(PBUS,mask)
-
-
-#define PRAMDAC_Write(reg,value) DEVICE_WRITE(PRAMDAC,reg,value)
-#define PRAMDAC_Read(reg) DEVICE_READ(PRAMDAC,reg)
-#define PRAMDAC_Print(reg) DEVICE_PRINT(PRAMDAC,reg)
-#define PRAMDAC_Def(mask,value) DEVICE_DEF(PRAMDAC,mask,value)
-#define PRAMDAC_Val(mask,value) DEVICE_VALUE(PRAMDAC,mask,value)
-#define PRAMDAC_Mask(mask) DEVICE_MASK(PRAMDAC,mask)
-
-
-#define PDAC_ReadExt(reg) \
- ((PDAC_Write(INDEX_LO,(NV_PDAC_EXT_##reg) & 0xff)),\
- (PDAC_Write(INDEX_HI,((NV_PDAC_EXT_##reg) >> 8) & 0xff)),\
- (PDAC_Read(INDEX_DATA)))
-
-#define PDAC_WriteExt(reg,value)\
- ((PDAC_Write(INDEX_LO,(NV_PDAC_EXT_##reg) & 0xff)),\
- (PDAC_Write(INDEX_HI,((NV_PDAC_EXT_##reg) >> 8) & 0xff)),\
- (PDAC_Write(INDEX_DATA,(value))))
-
-#define CRTC_Write(index,value) outb((index), 0x3d4); outb(value, 0x3d5)
-#define CRTC_Read(index) (outb(index, 0x3d4),inb(0x3d5))
-
-#define PCRTC_Write(index,value) CRTC_Write(NV_PCRTC_##index,value)
-#define PCRTC_Read(index) CRTC_Read(NV_PCRTC_##index)
-
-#define PCRTC_Def(mask,value) DEVICE_DEF(PCRTC,mask,value)
-#define PCRTC_Val(mask,value) DEVICE_VALUE(PCRTC,mask,value)
-#define PCRTC_Mask(mask) DEVICE_MASK(PCRTC,mask)
-
-#define SR_Write(index,value) outb(0x3c4,(index));outb(0x3c5,value)
-#define SR_Read(index) (outb(0x3c4,index),inb(0x3c5))
-
-extern volatile unsigned *nvCONTROL;
-
-typedef enum {NV1,NV3,NV4,NumNVChips} NVChipType;
-
-NVChipType GetChipType(void);
-
-#endif
-
-
diff --git a/drivers/video/fbdev/riva/riva_hw.c b/drivers/video/fbdev/riva/riva_hw.c
deleted file mode 100644
index 4168ac464565..000000000000
--- a/drivers/video/fbdev/riva/riva_hw.c
+++ /dev/null
@@ -1,2254 +0,0 @@
- /***************************************************************************\
-|* *|
-|* Copyright 1993-1999 NVIDIA, Corporation. All rights reserved. *|
-|* *|
-|* NOTICE TO USER: The source code is copyrighted under U.S. and *|
-|* international laws. Users and possessors of this source code are *|
-|* hereby granted a nonexclusive, royalty-free copyright license to *|
-|* use this code in individual and commercial software. *|
-|* *|
-|* Any use of this source code must include, in the user documenta- *|
-|* tion and internal comments to the code, notices to the end user *|
-|* as follows: *|
-|* *|
-|* Copyright 1993-1999 NVIDIA, Corporation. All rights reserved. *|
-|* *|
-|* NVIDIA, CORPORATION MAKES NO REPRESENTATION ABOUT THE SUITABILITY *|
-|* OF THIS SOURCE CODE FOR ANY PURPOSE. IT IS PROVIDED "AS IS" *|
-|* WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND. NVIDIA, CORPOR- *|
-|* ATION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOURCE CODE, *|
-|* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGE- *|
-|* MENT, AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL *|
-|* NVIDIA, CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT, INCI- *|
-|* DENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RE- *|
-|* SULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION *|
-|* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF *|
-|* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOURCE CODE. *|
-|* *|
-|* U.S. Government End Users. This source code is a "commercial *|
-|* item," as that term is defined at 48 C.F.R. 2.101 (OCT 1995), *|
-|* consisting of "commercial computer software" and "commercial *|
-|* computer software documentation," as such terms are used in *|
-|* 48 C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Govern- *|
-|* ment only as a commercial end item. Consistent with 48 C.F.R. *|
-|* 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), *|
-|* all U.S. Government End Users acquire the source code with only *|
-|* those rights set forth herein. *|
-|* *|
- \***************************************************************************/
-
-/*
- * GPL licensing note -- nVidia is allowing a liberal interpretation of
- * the documentation restriction above, to merely say that this nVidia's
- * copyright and disclaimer should be included with all code derived
- * from this source. -- Jeff Garzik <jgarzik@pobox.com>, 01/Nov/99
- */
-
-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/riva_hw.c,v 1.33 2002/08/05 20:47:06 mvojkovi Exp $ */
-
-#include <linux/kernel.h>
-#include <linux/pci.h>
-#include <linux/pci_ids.h>
-#include "riva_hw.h"
-#include "riva_tbl.h"
-#include "nv_type.h"
-
-/*
- * This file is an OS-agnostic file used to make RIVA 128 and RIVA TNT
- * operate identically (except TNT has more memory and better 3D quality.
- */
-static int nv3Busy
-(
- RIVA_HW_INST *chip
-)
-{
- return ((NV_RD32(&chip->Rop->FifoFree, 0) < chip->FifoEmptyCount) ||
- NV_RD32(&chip->PGRAPH[0x000006B0/4], 0) & 0x01);
-}
-static int nv4Busy
-(
- RIVA_HW_INST *chip
-)
-{
- return ((NV_RD32(&chip->Rop->FifoFree, 0) < chip->FifoEmptyCount) ||
- NV_RD32(&chip->PGRAPH[0x00000700/4], 0) & 0x01);
-}
-static int nv10Busy
-(
- RIVA_HW_INST *chip
-)
-{
- return ((NV_RD32(&chip->Rop->FifoFree, 0) < chip->FifoEmptyCount) ||
- NV_RD32(&chip->PGRAPH[0x00000700/4], 0) & 0x01);
-}
-
-static void vgaLockUnlock
-(
- RIVA_HW_INST *chip,
- int Lock
-)
-{
- U008 cr11;
- VGA_WR08(chip->PCIO, 0x3D4, 0x11);
- cr11 = VGA_RD08(chip->PCIO, 0x3D5);
- if(Lock) cr11 |= 0x80;
- else cr11 &= ~0x80;
- VGA_WR08(chip->PCIO, 0x3D5, cr11);
-}
-static void nv3LockUnlock
-(
- RIVA_HW_INST *chip,
- int Lock
-)
-{
- VGA_WR08(chip->PVIO, 0x3C4, 0x06);
- VGA_WR08(chip->PVIO, 0x3C5, Lock ? 0x99 : 0x57);
- vgaLockUnlock(chip, Lock);
-}
-static void nv4LockUnlock
-(
- RIVA_HW_INST *chip,
- int Lock
-)
-{
- VGA_WR08(chip->PCIO, 0x3D4, 0x1F);
- VGA_WR08(chip->PCIO, 0x3D5, Lock ? 0x99 : 0x57);
- vgaLockUnlock(chip, Lock);
-}
-
-static int ShowHideCursor
-(
- RIVA_HW_INST *chip,
- int ShowHide
-)
-{
- int cursor;
- cursor = chip->CurrentState->cursor1;
- chip->CurrentState->cursor1 = (chip->CurrentState->cursor1 & 0xFE) |
- (ShowHide & 0x01);
- VGA_WR08(chip->PCIO, 0x3D4, 0x31);
- VGA_WR08(chip->PCIO, 0x3D5, chip->CurrentState->cursor1);
- return (cursor & 0x01);
-}
-
-/****************************************************************************\
-* *
-* The video arbitration routines calculate some "magic" numbers. Fixes *
-* the snow seen when accessing the framebuffer without it. *
-* It just works (I hope). *
-* *
-\****************************************************************************/
-
-#define DEFAULT_GR_LWM 100
-#define DEFAULT_VID_LWM 100
-#define DEFAULT_GR_BURST_SIZE 256
-#define DEFAULT_VID_BURST_SIZE 128
-#define VIDEO 0
-#define GRAPHICS 1
-#define MPORT 2
-#define ENGINE 3
-#define GFIFO_SIZE 320
-#define GFIFO_SIZE_128 256
-#define MFIFO_SIZE 120
-#define VFIFO_SIZE 256
-
-typedef struct {
- int gdrain_rate;
- int vdrain_rate;
- int mdrain_rate;
- int gburst_size;
- int vburst_size;
- char vid_en;
- char gr_en;
- int wcmocc, wcgocc, wcvocc, wcvlwm, wcglwm;
- int by_gfacc;
- char vid_only_once;
- char gr_only_once;
- char first_vacc;
- char first_gacc;
- char first_macc;
- int vocc;
- int gocc;
- int mocc;
- char cur;
- char engine_en;
- char converged;
- int priority;
-} nv3_arb_info;
-typedef struct {
- int graphics_lwm;
- int video_lwm;
- int graphics_burst_size;
- int video_burst_size;
- int graphics_hi_priority;
- int media_hi_priority;
- int rtl_values;
- int valid;
-} nv3_fifo_info;
-typedef struct {
- char pix_bpp;
- char enable_video;
- char gr_during_vid;
- char enable_mp;
- int memory_width;
- int video_scale;
- int pclk_khz;
- int mclk_khz;
- int mem_page_miss;
- int mem_latency;
- char mem_aligned;
-} nv3_sim_state;
-typedef struct {
- int graphics_lwm;
- int video_lwm;
- int graphics_burst_size;
- int video_burst_size;
- int valid;
-} nv4_fifo_info;
-typedef struct {
- int pclk_khz;
- int mclk_khz;
- int nvclk_khz;
- char mem_page_miss;
- char mem_latency;
- int memory_width;
- char enable_video;
- char gr_during_vid;
- char pix_bpp;
- char mem_aligned;
- char enable_mp;
-} nv4_sim_state;
-typedef struct {
- int graphics_lwm;
- int video_lwm;
- int graphics_burst_size;
- int video_burst_size;
- int valid;
-} nv10_fifo_info;
-typedef struct {
- int pclk_khz;
- int mclk_khz;
- int nvclk_khz;
- char mem_page_miss;
- char mem_latency;
- u32 memory_type;
- int memory_width;
- char enable_video;
- char gr_during_vid;
- char pix_bpp;
- char mem_aligned;
- char enable_mp;
-} nv10_sim_state;
-static int nv3_iterate(nv3_fifo_info *res_info, nv3_sim_state * state, nv3_arb_info *ainfo)
-{
- int iter = 0;
- int tmp;
- int vfsize, mfsize, gfsize;
- int mburst_size = 32;
- int mmisses, gmisses, vmisses;
- int misses;
- int vlwm, glwm, mlwm;
- int last, next, cur;
- int max_gfsize ;
- long ns;
-
- vlwm = 0;
- glwm = 0;
- mlwm = 0;
- vfsize = 0;
- gfsize = 0;
- cur = ainfo->cur;
- mmisses = 2;
- gmisses = 2;
- vmisses = 2;
- if (ainfo->gburst_size == 128) max_gfsize = GFIFO_SIZE_128;
- else max_gfsize = GFIFO_SIZE;
- max_gfsize = GFIFO_SIZE;
- while (1)
- {
- if (ainfo->vid_en)
- {
- if (ainfo->wcvocc > ainfo->vocc) ainfo->wcvocc = ainfo->vocc;
- if (ainfo->wcvlwm > vlwm) ainfo->wcvlwm = vlwm ;
- ns = 1000000 * ainfo->vburst_size/(state->memory_width/8)/state->mclk_khz;
- vfsize = ns * ainfo->vdrain_rate / 1000000;
- vfsize = ainfo->wcvlwm - ainfo->vburst_size + vfsize;
- }
- if (state->enable_mp)
- {
- if (ainfo->wcmocc > ainfo->mocc) ainfo->wcmocc = ainfo->mocc;
- }
- if (ainfo->gr_en)
- {
- if (ainfo->wcglwm > glwm) ainfo->wcglwm = glwm ;
- if (ainfo->wcgocc > ainfo->gocc) ainfo->wcgocc = ainfo->gocc;
- ns = 1000000 * (ainfo->gburst_size/(state->memory_width/8))/state->mclk_khz;
- gfsize = (ns * (long) ainfo->gdrain_rate)/1000000;
- gfsize = ainfo->wcglwm - ainfo->gburst_size + gfsize;
- }
- mfsize = 0;
- if (!state->gr_during_vid && ainfo->vid_en)
- if (ainfo->vid_en && (ainfo->vocc < 0) && !ainfo->vid_only_once)
- next = VIDEO;
- else if (ainfo->mocc < 0)
- next = MPORT;
- else if (ainfo->gocc< ainfo->by_gfacc)
- next = GRAPHICS;
- else return (0);
- else switch (ainfo->priority)
- {
- case VIDEO:
- if (ainfo->vid_en && ainfo->vocc<0 && !ainfo->vid_only_once)
- next = VIDEO;
- else if (ainfo->gr_en && ainfo->gocc<0 && !ainfo->gr_only_once)
- next = GRAPHICS;
- else if (ainfo->mocc<0)
- next = MPORT;
- else return (0);
- break;
- case GRAPHICS:
- if (ainfo->gr_en && ainfo->gocc<0 && !ainfo->gr_only_once)
- next = GRAPHICS;
- else if (ainfo->vid_en && ainfo->vocc<0 && !ainfo->vid_only_once)
- next = VIDEO;
- else if (ainfo->mocc<0)
- next = MPORT;
- else return (0);
- break;
- default:
- if (ainfo->mocc<0)
- next = MPORT;
- else if (ainfo->gr_en && ainfo->gocc<0 && !ainfo->gr_only_once)
- next = GRAPHICS;
- else if (ainfo->vid_en && ainfo->vocc<0 && !ainfo->vid_only_once)
- next = VIDEO;
- else return (0);
- break;
- }
- last = cur;
- cur = next;
- iter++;
- switch (cur)
- {
- case VIDEO:
- if (last==cur) misses = 0;
- else if (ainfo->first_vacc) misses = vmisses;
- else misses = 1;
- ainfo->first_vacc = 0;
- if (last!=cur)
- {
- ns = 1000000 * (vmisses*state->mem_page_miss + state->mem_latency)/state->mclk_khz;
- vlwm = ns * ainfo->vdrain_rate/ 1000000;
- vlwm = ainfo->vocc - vlwm;
- }
- ns = 1000000*(misses*state->mem_page_miss + ainfo->vburst_size)/(state->memory_width/8)/state->mclk_khz;
- ainfo->vocc = ainfo->vocc + ainfo->vburst_size - ns*ainfo->vdrain_rate/1000000;
- ainfo->gocc = ainfo->gocc - ns*ainfo->gdrain_rate/1000000;
- ainfo->mocc = ainfo->mocc - ns*ainfo->mdrain_rate/1000000;
- break;
- case GRAPHICS:
- if (last==cur) misses = 0;
- else if (ainfo->first_gacc) misses = gmisses;
- else misses = 1;
- ainfo->first_gacc = 0;
- if (last!=cur)
- {
- ns = 1000000*(gmisses*state->mem_page_miss + state->mem_latency)/state->mclk_khz ;
- glwm = ns * ainfo->gdrain_rate/1000000;
- glwm = ainfo->gocc - glwm;
- }
- ns = 1000000*(misses*state->mem_page_miss + ainfo->gburst_size/(state->memory_width/8))/state->mclk_khz;
- ainfo->vocc = ainfo->vocc + 0 - ns*ainfo->vdrain_rate/1000000;
- ainfo->gocc = ainfo->gocc + ainfo->gburst_size - ns*ainfo->gdrain_rate/1000000;
- ainfo->mocc = ainfo->mocc + 0 - ns*ainfo->mdrain_rate/1000000;
- break;
- default:
- if (last==cur) misses = 0;
- else if (ainfo->first_macc) misses = mmisses;
- else misses = 1;
- ainfo->first_macc = 0;
- ns = 1000000*(misses*state->mem_page_miss + mburst_size/(state->memory_width/8))/state->mclk_khz;
- ainfo->vocc = ainfo->vocc + 0 - ns*ainfo->vdrain_rate/1000000;
- ainfo->gocc = ainfo->gocc + 0 - ns*ainfo->gdrain_rate/1000000;
- ainfo->mocc = ainfo->mocc + mburst_size - ns*ainfo->mdrain_rate/1000000;
- break;
- }
- if (iter>100)
- {
- ainfo->converged = 0;
- return (1);
- }
- ns = 1000000*ainfo->gburst_size/(state->memory_width/8)/state->mclk_khz;
- tmp = ns * ainfo->gdrain_rate/1000000;
- if (abs(ainfo->gburst_size) + ((abs(ainfo->wcglwm) + 16 ) & ~0x7) - tmp > max_gfsize)
- {
- ainfo->converged = 0;
- return (1);
- }
- ns = 1000000*ainfo->vburst_size/(state->memory_width/8)/state->mclk_khz;
- tmp = ns * ainfo->vdrain_rate/1000000;
- if (abs(ainfo->vburst_size) + (abs(ainfo->wcvlwm + 32) & ~0xf) - tmp> VFIFO_SIZE)
- {
- ainfo->converged = 0;
- return (1);
- }
- if (abs(ainfo->gocc) > max_gfsize)
- {
- ainfo->converged = 0;
- return (1);
- }
- if (abs(ainfo->vocc) > VFIFO_SIZE)
- {
- ainfo->converged = 0;
- return (1);
- }
- if (abs(ainfo->mocc) > MFIFO_SIZE)
- {
- ainfo->converged = 0;
- return (1);
- }
- if (abs(vfsize) > VFIFO_SIZE)
- {
- ainfo->converged = 0;
- return (1);
- }
- if (abs(gfsize) > max_gfsize)
- {
- ainfo->converged = 0;
- return (1);
- }
- if (abs(mfsize) > MFIFO_SIZE)
- {
- ainfo->converged = 0;
- return (1);
- }
- }
-}
-static char nv3_arb(nv3_fifo_info * res_info, nv3_sim_state * state, nv3_arb_info *ainfo)
-{
- long ens, vns, mns, gns;
- int mmisses, gmisses, vmisses, eburst_size, mburst_size;
- int refresh_cycle;
-
- refresh_cycle = 2*(state->mclk_khz/state->pclk_khz) + 5;
- mmisses = 2;
- if (state->mem_aligned) gmisses = 2;
- else gmisses = 3;
- vmisses = 2;
- eburst_size = state->memory_width * 1;
- mburst_size = 32;
- gns = 1000000 * (gmisses*state->mem_page_miss + state->mem_latency)/state->mclk_khz;
- ainfo->by_gfacc = gns*ainfo->gdrain_rate/1000000;
- ainfo->wcmocc = 0;
- ainfo->wcgocc = 0;
- ainfo->wcvocc = 0;
- ainfo->wcvlwm = 0;
- ainfo->wcglwm = 0;
- ainfo->engine_en = 1;
- ainfo->converged = 1;
- if (ainfo->engine_en)
- {
- ens = 1000000*(state->mem_page_miss + eburst_size/(state->memory_width/8) +refresh_cycle)/state->mclk_khz;
- ainfo->mocc = state->enable_mp ? 0-ens*ainfo->mdrain_rate/1000000 : 0;
- ainfo->vocc = ainfo->vid_en ? 0-ens*ainfo->vdrain_rate/1000000 : 0;
- ainfo->gocc = ainfo->gr_en ? 0-ens*ainfo->gdrain_rate/1000000 : 0;
- ainfo->cur = ENGINE;
- ainfo->first_vacc = 1;
- ainfo->first_gacc = 1;
- ainfo->first_macc = 1;
- nv3_iterate(res_info, state,ainfo);
- }
- if (state->enable_mp)
- {
- mns = 1000000 * (mmisses*state->mem_page_miss + mburst_size/(state->memory_width/8) + refresh_cycle)/state->mclk_khz;
- ainfo->mocc = state->enable_mp ? 0 : mburst_size - mns*ainfo->mdrain_rate/1000000;
- ainfo->vocc = ainfo->vid_en ? 0 : 0- mns*ainfo->vdrain_rate/1000000;
- ainfo->gocc = ainfo->gr_en ? 0: 0- mns*ainfo->gdrain_rate/1000000;
- ainfo->cur = MPORT;
- ainfo->first_vacc = 1;
- ainfo->first_gacc = 1;
- ainfo->first_macc = 0;
- nv3_iterate(res_info, state,ainfo);
- }
- if (ainfo->gr_en)
- {
- ainfo->first_vacc = 1;
- ainfo->first_gacc = 0;
- ainfo->first_macc = 1;
- gns = 1000000*(gmisses*state->mem_page_miss + ainfo->gburst_size/(state->memory_width/8) + refresh_cycle)/state->mclk_khz;
- ainfo->gocc = ainfo->gburst_size - gns*ainfo->gdrain_rate/1000000;
- ainfo->vocc = ainfo->vid_en? 0-gns*ainfo->vdrain_rate/1000000 : 0;
- ainfo->mocc = state->enable_mp ? 0-gns*ainfo->mdrain_rate/1000000: 0;
- ainfo->cur = GRAPHICS;
- nv3_iterate(res_info, state,ainfo);
- }
- if (ainfo->vid_en)
- {
- ainfo->first_vacc = 0;
- ainfo->first_gacc = 1;
- ainfo->first_macc = 1;
- vns = 1000000*(vmisses*state->mem_page_miss + ainfo->vburst_size/(state->memory_width/8) + refresh_cycle)/state->mclk_khz;
- ainfo->vocc = ainfo->vburst_size - vns*ainfo->vdrain_rate/1000000;
- ainfo->gocc = ainfo->gr_en? (0-vns*ainfo->gdrain_rate/1000000) : 0;
- ainfo->mocc = state->enable_mp? 0-vns*ainfo->mdrain_rate/1000000 :0 ;
- ainfo->cur = VIDEO;
- nv3_iterate(res_info, state, ainfo);
- }
- if (ainfo->converged)
- {
- res_info->graphics_lwm = (int)abs(ainfo->wcglwm) + 16;
- res_info->video_lwm = (int)abs(ainfo->wcvlwm) + 32;
- res_info->graphics_burst_size = ainfo->gburst_size;
- res_info->video_burst_size = ainfo->vburst_size;
- res_info->graphics_hi_priority = (ainfo->priority == GRAPHICS);
- res_info->media_hi_priority = (ainfo->priority == MPORT);
- if (res_info->video_lwm > 160)
- {
- res_info->graphics_lwm = 256;
- res_info->video_lwm = 128;
- res_info->graphics_burst_size = 64;
- res_info->video_burst_size = 64;
- res_info->graphics_hi_priority = 0;
- res_info->media_hi_priority = 0;
- ainfo->converged = 0;
- return (0);
- }
- if (res_info->video_lwm > 128)
- {
- res_info->video_lwm = 128;
- }
- return (1);
- }
- else
- {
- res_info->graphics_lwm = 256;
- res_info->video_lwm = 128;
- res_info->graphics_burst_size = 64;
- res_info->video_burst_size = 64;
- res_info->graphics_hi_priority = 0;
- res_info->media_hi_priority = 0;
- return (0);
- }
-}
-static char nv3_get_param(nv3_fifo_info *res_info, nv3_sim_state * state, nv3_arb_info *ainfo)
-{
- int done, g,v, p;
-
- done = 0;
- for (p=0; p < 2; p++)
- {
- for (g=128 ; g > 32; g= g>> 1)
- {
- for (v=128; v >=32; v = v>> 1)
- {
- ainfo->priority = p;
- ainfo->gburst_size = g;
- ainfo->vburst_size = v;
- done = nv3_arb(res_info, state,ainfo);
- if (done && (g==128))
- if ((res_info->graphics_lwm + g) > 256)
- done = 0;
- if (done)
- goto Done;
- }
- }
- }
-
- Done:
- return done;
-}
-static void nv3CalcArbitration
-(
- nv3_fifo_info * res_info,
- nv3_sim_state * state
-)
-{
- nv3_fifo_info save_info;
- nv3_arb_info ainfo;
- char res_gr, res_vid;
-
- ainfo.gr_en = 1;
- ainfo.vid_en = state->enable_video;
- ainfo.vid_only_once = 0;
- ainfo.gr_only_once = 0;
- ainfo.gdrain_rate = (int) state->pclk_khz * (state->pix_bpp/8);
- ainfo.vdrain_rate = (int) state->pclk_khz * 2;
- if (state->video_scale != 0)
- ainfo.vdrain_rate = ainfo.vdrain_rate/state->video_scale;
- ainfo.mdrain_rate = 33000;
- res_info->rtl_values = 0;
- if (!state->gr_during_vid && state->enable_video)
- {
- ainfo.gr_only_once = 1;
- ainfo.gr_en = 1;
- ainfo.gdrain_rate = 0;
- res_vid = nv3_get_param(res_info, state, &ainfo);
- res_vid = ainfo.converged;
- save_info.video_lwm = res_info->video_lwm;
- save_info.video_burst_size = res_info->video_burst_size;
- ainfo.vid_en = 1;
- ainfo.vid_only_once = 1;
- ainfo.gr_en = 1;
- ainfo.gdrain_rate = (int) state->pclk_khz * (state->pix_bpp/8);
- ainfo.vdrain_rate = 0;
- res_gr = nv3_get_param(res_info, state, &ainfo);
- res_gr = ainfo.converged;
- res_info->video_lwm = save_info.video_lwm;
- res_info->video_burst_size = save_info.video_burst_size;
- res_info->valid = res_gr & res_vid;
- }
- else
- {
- if (!ainfo.gr_en) ainfo.gdrain_rate = 0;
- if (!ainfo.vid_en) ainfo.vdrain_rate = 0;
- res_gr = nv3_get_param(res_info, state, &ainfo);
- res_info->valid = ainfo.converged;
- }
-}
-static void nv3UpdateArbitrationSettings
-(
- unsigned VClk,
- unsigned pixelDepth,
- unsigned *burst,
- unsigned *lwm,
- RIVA_HW_INST *chip
-)
-{
- nv3_fifo_info fifo_data;
- nv3_sim_state sim_data;
- unsigned int M, N, P, pll, MClk;
-
- pll = NV_RD32(&chip->PRAMDAC0[0x00000504/4], 0);
- M = (pll >> 0) & 0xFF; N = (pll >> 8) & 0xFF; P = (pll >> 16) & 0x0F;
- MClk = (N * chip->CrystalFreqKHz / M) >> P;
- sim_data.pix_bpp = (char)pixelDepth;
- sim_data.enable_video = 0;
- sim_data.enable_mp = 0;
- sim_data.video_scale = 1;
- sim_data.memory_width = (NV_RD32(&chip->PEXTDEV[0x00000000/4], 0) & 0x10) ?
- 128 : 64;
- sim_data.memory_width = 128;
-
- sim_data.mem_latency = 9;
- sim_data.mem_aligned = 1;
- sim_data.mem_page_miss = 11;
- sim_data.gr_during_vid = 0;
- sim_data.pclk_khz = VClk;
- sim_data.mclk_khz = MClk;
- nv3CalcArbitration(&fifo_data, &sim_data);
- if (fifo_data.valid)
- {
- int b = fifo_data.graphics_burst_size >> 4;
- *burst = 0;
- while (b >>= 1)
- (*burst)++;
- *lwm = fifo_data.graphics_lwm >> 3;
- }
- else
- {
- *lwm = 0x24;
- *burst = 0x2;
- }
-}
-static void nv4CalcArbitration
-(
- nv4_fifo_info *fifo,
- nv4_sim_state *arb
-)
-{
- int data, pagemiss, cas,width, video_enable, color_key_enable, bpp, align;
- int nvclks, mclks, pclks, vpagemiss, crtpagemiss, vbs;
- int found, mclk_extra, mclk_loop, cbs, m1, p1;
- int mclk_freq, pclk_freq, nvclk_freq, mp_enable;
- int us_m, us_n, us_p, video_drain_rate, crtc_drain_rate;
- int vpm_us, us_video, vlwm, video_fill_us, cpm_us, us_crt,clwm;
- int craw, vraw;
-
- fifo->valid = 1;
- pclk_freq = arb->pclk_khz;
- mclk_freq = arb->mclk_khz;
- nvclk_freq = arb->nvclk_khz;
- pagemiss = arb->mem_page_miss;
- cas = arb->mem_latency;
- width = arb->memory_width >> 6;
- video_enable = arb->enable_video;
- color_key_enable = arb->gr_during_vid;
- bpp = arb->pix_bpp;
- align = arb->mem_aligned;
- mp_enable = arb->enable_mp;
- clwm = 0;
- vlwm = 0;
- cbs = 128;
- pclks = 2;
- nvclks = 2;
- nvclks += 2;
- nvclks += 1;
- mclks = 5;
- mclks += 3;
- mclks += 1;
- mclks += cas;
- mclks += 1;
- mclks += 1;
- mclks += 1;
- mclks += 1;
- mclk_extra = 3;
- nvclks += 2;
- nvclks += 1;
- nvclks += 1;
- nvclks += 1;
- if (mp_enable)
- mclks+=4;
- nvclks += 0;
- pclks += 0;
- found = 0;
- vbs = 0;
- while (found != 1)
- {
- fifo->valid = 1;
- found = 1;
- mclk_loop = mclks+mclk_extra;
- us_m = mclk_loop *1000*1000 / mclk_freq;
- us_n = nvclks*1000*1000 / nvclk_freq;
- us_p = nvclks*1000*1000 / pclk_freq;
- if (video_enable)
- {
- video_drain_rate = pclk_freq * 2;
- crtc_drain_rate = pclk_freq * bpp/8;
- vpagemiss = 2;
- vpagemiss += 1;
- crtpagemiss = 2;
- vpm_us = (vpagemiss * pagemiss)*1000*1000/mclk_freq;
- if (nvclk_freq * 2 > mclk_freq * width)
- video_fill_us = cbs*1000*1000 / 16 / nvclk_freq ;
- else
- video_fill_us = cbs*1000*1000 / (8 * width) / mclk_freq;
- us_video = vpm_us + us_m + us_n + us_p + video_fill_us;
- vlwm = us_video * video_drain_rate/(1000*1000);
- vlwm++;
- vbs = 128;
- if (vlwm > 128) vbs = 64;
- if (vlwm > (256-64)) vbs = 32;
- if (nvclk_freq * 2 > mclk_freq * width)
- video_fill_us = vbs *1000*1000/ 16 / nvclk_freq ;
- else
- video_fill_us = vbs*1000*1000 / (8 * width) / mclk_freq;
- cpm_us = crtpagemiss * pagemiss *1000*1000/ mclk_freq;
- us_crt =
- us_video
- +video_fill_us
- +cpm_us
- +us_m + us_n +us_p
- ;
- clwm = us_crt * crtc_drain_rate/(1000*1000);
- clwm++;
- }
- else
- {
- crtc_drain_rate = pclk_freq * bpp/8;
- crtpagemiss = 2;
- crtpagemiss += 1;
- cpm_us = crtpagemiss * pagemiss *1000*1000/ mclk_freq;
- us_crt = cpm_us + us_m + us_n + us_p ;
- clwm = us_crt * crtc_drain_rate/(1000*1000);
- clwm++;
- }
- m1 = clwm + cbs - 512;
- p1 = m1 * pclk_freq / mclk_freq;
- p1 = p1 * bpp / 8;
- if ((p1 < m1) && (m1 > 0))
- {
- fifo->valid = 0;
- found = 0;
- if (mclk_extra ==0) found = 1;
- mclk_extra--;
- }
- else if (video_enable)
- {
- if ((clwm > 511) || (vlwm > 255))
- {
- fifo->valid = 0;
- found = 0;
- if (mclk_extra ==0) found = 1;
- mclk_extra--;
- }
- }
- else
- {
- if (clwm > 519)
- {
- fifo->valid = 0;
- found = 0;
- if (mclk_extra ==0) found = 1;
- mclk_extra--;
- }
- }
- craw = clwm;
- vraw = vlwm;
- if (clwm < 384) clwm = 384;
- if (vlwm < 128) vlwm = 128;
- data = (int)(clwm);
- fifo->graphics_lwm = data;
- fifo->graphics_burst_size = 128;
- data = (int)((vlwm+15));
- fifo->video_lwm = data;
- fifo->video_burst_size = vbs;
- }
-}
-static void nv4UpdateArbitrationSettings
-(
- unsigned VClk,
- unsigned pixelDepth,
- unsigned *burst,
- unsigned *lwm,
- RIVA_HW_INST *chip
-)
-{
- nv4_fifo_info fifo_data;
- nv4_sim_state sim_data;
- unsigned int M, N, P, pll, MClk, NVClk, cfg1;
-
- pll = NV_RD32(&chip->PRAMDAC0[0x00000504/4], 0);
- M = (pll >> 0) & 0xFF; N = (pll >> 8) & 0xFF; P = (pll >> 16) & 0x0F;
- MClk = (N * chip->CrystalFreqKHz / M) >> P;
- pll = NV_RD32(&chip->PRAMDAC0[0x00000500/4], 0);
- M = (pll >> 0) & 0xFF; N = (pll >> 8) & 0xFF; P = (pll >> 16) & 0x0F;
- NVClk = (N * chip->CrystalFreqKHz / M) >> P;
- cfg1 = NV_RD32(&chip->PFB[0x00000204/4], 0);
- sim_data.pix_bpp = (char)pixelDepth;
- sim_data.enable_video = 0;
- sim_data.enable_mp = 0;
- sim_data.memory_width = (NV_RD32(&chip->PEXTDEV[0x00000000/4], 0) & 0x10) ?
- 128 : 64;
- sim_data.mem_latency = (char)cfg1 & 0x0F;
- sim_data.mem_aligned = 1;
- sim_data.mem_page_miss = (char)(((cfg1 >> 4) &0x0F) + ((cfg1 >> 31) & 0x01));
- sim_data.gr_during_vid = 0;
- sim_data.pclk_khz = VClk;
- sim_data.mclk_khz = MClk;
- sim_data.nvclk_khz = NVClk;
- nv4CalcArbitration(&fifo_data, &sim_data);
- if (fifo_data.valid)
- {
- int b = fifo_data.graphics_burst_size >> 4;
- *burst = 0;
- while (b >>= 1)
- (*burst)++;
- *lwm = fifo_data.graphics_lwm >> 3;
- }
-}
-static void nv10CalcArbitration
-(
- nv10_fifo_info *fifo,
- nv10_sim_state *arb
-)
-{
- int data, pagemiss, cas,width, video_enable, color_key_enable, bpp, align;
- int nvclks, mclks, pclks, vpagemiss, crtpagemiss, vbs;
- int nvclk_fill, us_extra;
- int found, mclk_extra, mclk_loop, cbs, m1;
- int mclk_freq, pclk_freq, nvclk_freq, mp_enable;
- int us_m, us_m_min, us_n, us_p, video_drain_rate, crtc_drain_rate;
- int vus_m, vus_n, vus_p;
- int vpm_us, us_video, vlwm, cpm_us, us_crt,clwm;
- int clwm_rnd_down;
- int craw, m2us, us_pipe, us_pipe_min, vus_pipe, p1clk, p2;
- int pclks_2_top_fifo, min_mclk_extra;
- int us_min_mclk_extra;
-
- fifo->valid = 1;
- pclk_freq = arb->pclk_khz; /* freq in KHz */
- mclk_freq = arb->mclk_khz;
- nvclk_freq = arb->nvclk_khz;
- pagemiss = arb->mem_page_miss;
- cas = arb->mem_latency;
- width = arb->memory_width/64;
- video_enable = arb->enable_video;
- color_key_enable = arb->gr_during_vid;
- bpp = arb->pix_bpp;
- align = arb->mem_aligned;
- mp_enable = arb->enable_mp;
- clwm = 0;
- vlwm = 1024;
-
- cbs = 512;
- vbs = 512;
-
- pclks = 4; /* lwm detect. */
-
- nvclks = 3; /* lwm -> sync. */
- nvclks += 2; /* fbi bus cycles (1 req + 1 busy) */
-
- mclks = 1; /* 2 edge sync. may be very close to edge so just put one. */
-
- mclks += 1; /* arb_hp_req */
- mclks += 5; /* ap_hp_req tiling pipeline */
-
- mclks += 2; /* tc_req latency fifo */
- mclks += 2; /* fb_cas_n_ memory request to fbio block */
- mclks += 7; /* sm_d_rdv data returned from fbio block */
-
- /* fb.rd.d.Put_gc need to accumulate 256 bits for read */
- if (arb->memory_type == 0)
- if (arb->memory_width == 64) /* 64 bit bus */
- mclks += 4;
- else
- mclks += 2;
- else
- if (arb->memory_width == 64) /* 64 bit bus */
- mclks += 2;
- else
- mclks += 1;
-
- if ((!video_enable) && (arb->memory_width == 128))
- {
- mclk_extra = (bpp == 32) ? 31 : 42; /* Margin of error */
- min_mclk_extra = 17;
- }
- else
- {
- mclk_extra = (bpp == 32) ? 8 : 4; /* Margin of error */
- /* mclk_extra = 4; */ /* Margin of error */
- min_mclk_extra = 18;
- }
-
- nvclks += 1; /* 2 edge sync. may be very close to edge so just put one. */
- nvclks += 1; /* fbi_d_rdv_n */
- nvclks += 1; /* Fbi_d_rdata */
- nvclks += 1; /* crtfifo load */
-
- if(mp_enable)
- mclks+=4; /* Mp can get in with a burst of 8. */
- /* Extra clocks determined by heuristics */
-
- nvclks += 0;
- pclks += 0;
- found = 0;
- while(found != 1) {
- fifo->valid = 1;
- found = 1;
- mclk_loop = mclks+mclk_extra;
- us_m = mclk_loop *1000*1000 / mclk_freq; /* Mclk latency in us */
- us_m_min = mclks * 1000*1000 / mclk_freq; /* Minimum Mclk latency in us */
- us_min_mclk_extra = min_mclk_extra *1000*1000 / mclk_freq;
- us_n = nvclks*1000*1000 / nvclk_freq;/* nvclk latency in us */
- us_p = pclks*1000*1000 / pclk_freq;/* nvclk latency in us */
- us_pipe = us_m + us_n + us_p;
- us_pipe_min = us_m_min + us_n + us_p;
- us_extra = 0;
-
- vus_m = mclk_loop *1000*1000 / mclk_freq; /* Mclk latency in us */
- vus_n = (4)*1000*1000 / nvclk_freq;/* nvclk latency in us */
- vus_p = 0*1000*1000 / pclk_freq;/* pclk latency in us */
- vus_pipe = vus_m + vus_n + vus_p;
-
- if(video_enable) {
- video_drain_rate = pclk_freq * 4; /* MB/s */
- crtc_drain_rate = pclk_freq * bpp/8; /* MB/s */
-
- vpagemiss = 1; /* self generating page miss */
- vpagemiss += 1; /* One higher priority before */
-
- crtpagemiss = 2; /* self generating page miss */
- if(mp_enable)
- crtpagemiss += 1; /* if MA0 conflict */
-
- vpm_us = (vpagemiss * pagemiss)*1000*1000/mclk_freq;
-
- us_video = vpm_us + vus_m; /* Video has separate read return path */
-
- cpm_us = crtpagemiss * pagemiss *1000*1000/ mclk_freq;
- us_crt =
- us_video /* Wait for video */
- +cpm_us /* CRT Page miss */
- +us_m + us_n +us_p /* other latency */
- ;
-
- clwm = us_crt * crtc_drain_rate/(1000*1000);
- clwm++; /* fixed point <= float_point - 1. Fixes that */
- } else {
- crtc_drain_rate = pclk_freq * bpp/8; /* bpp * pclk/8 */
-
- crtpagemiss = 1; /* self generating page miss */
- crtpagemiss += 1; /* MA0 page miss */
- if(mp_enable)
- crtpagemiss += 1; /* if MA0 conflict */
- cpm_us = crtpagemiss * pagemiss *1000*1000/ mclk_freq;
- us_crt = cpm_us + us_m + us_n + us_p ;
- clwm = us_crt * crtc_drain_rate/(1000*1000);
- clwm++; /* fixed point <= float_point - 1. Fixes that */
-
- /*
- //
- // Another concern, only for high pclks so don't do this
- // with video:
- // What happens if the latency to fetch the cbs is so large that
- // fifo empties. In that case we need to have an alternate clwm value
- // based off the total burst fetch
- //
- us_crt = (cbs * 1000 * 1000)/ (8*width)/mclk_freq ;
- us_crt = us_crt + us_m + us_n + us_p + (4 * 1000 * 1000)/mclk_freq;
- clwm_mt = us_crt * crtc_drain_rate/(1000*1000);
- clwm_mt ++;
- if(clwm_mt > clwm)
- clwm = clwm_mt;
- */
- /* Finally, a heuristic check when width == 64 bits */
- if(width == 1){
- nvclk_fill = nvclk_freq * 8;
- if(crtc_drain_rate * 100 >= nvclk_fill * 102)
- clwm = 0xfff; /*Large number to fail */
-
- else if(crtc_drain_rate * 100 >= nvclk_fill * 98) {
- clwm = 1024;
- cbs = 512;
- us_extra = (cbs * 1000 * 1000)/ (8*width)/mclk_freq ;
- }
- }
- }
-
-
- /*
- Overfill check:
-
- */
-
- clwm_rnd_down = ((int)clwm/8)*8;
- if (clwm_rnd_down < clwm)
- clwm += 8;
-
- m1 = clwm + cbs - 1024; /* Amount of overfill */
- m2us = us_pipe_min + us_min_mclk_extra;
- pclks_2_top_fifo = (1024-clwm)/(8*width);
-
- /* pclk cycles to drain */
- p1clk = m2us * pclk_freq/(1000*1000);
- p2 = p1clk * bpp / 8; /* bytes drained. */
-
- if((p2 < m1) && (m1 > 0)) {
- fifo->valid = 0;
- found = 0;
- if(min_mclk_extra == 0) {
- if(cbs <= 32) {
- found = 1; /* Can't adjust anymore! */
- } else {
- cbs = cbs/2; /* reduce the burst size */
- }
- } else {
- min_mclk_extra--;
- }
- } else {
- if (clwm > 1023){ /* Have some margin */
- fifo->valid = 0;
- found = 0;
- if(min_mclk_extra == 0)
- found = 1; /* Can't adjust anymore! */
- else
- min_mclk_extra--;
- }
- }
- craw = clwm;
-
- if(clwm < (1024-cbs+8)) clwm = 1024-cbs+8;
- data = (int)(clwm);
- /* printf("CRT LWM: %f bytes, prog: 0x%x, bs: 256\n", clwm, data ); */
- fifo->graphics_lwm = data; fifo->graphics_burst_size = cbs;
-
- /* printf("VID LWM: %f bytes, prog: 0x%x, bs: %d\n, ", vlwm, data, vbs ); */
- fifo->video_lwm = 1024; fifo->video_burst_size = 512;
- }
-}
-static void nv10UpdateArbitrationSettings
-(
- unsigned VClk,
- unsigned pixelDepth,
- unsigned *burst,
- unsigned *lwm,
- RIVA_HW_INST *chip
-)
-{
- nv10_fifo_info fifo_data;
- nv10_sim_state sim_data;
- unsigned int M, N, P, pll, MClk, NVClk, cfg1;
-
- pll = NV_RD32(&chip->PRAMDAC0[0x00000504/4], 0);
- M = (pll >> 0) & 0xFF; N = (pll >> 8) & 0xFF; P = (pll >> 16) & 0x0F;
- MClk = (N * chip->CrystalFreqKHz / M) >> P;
- pll = NV_RD32(&chip->PRAMDAC0[0x00000500/4], 0);
- M = (pll >> 0) & 0xFF; N = (pll >> 8) & 0xFF; P = (pll >> 16) & 0x0F;
- NVClk = (N * chip->CrystalFreqKHz / M) >> P;
- cfg1 = NV_RD32(&chip->PFB[0x00000204/4], 0);
- sim_data.pix_bpp = (char)pixelDepth;
- sim_data.enable_video = 0;
- sim_data.enable_mp = 0;
- sim_data.memory_type = (NV_RD32(&chip->PFB[0x00000200/4], 0) & 0x01) ?
- 1 : 0;
- sim_data.memory_width = (NV_RD32(&chip->PEXTDEV[0x00000000/4], 0) & 0x10) ?
- 128 : 64;
- sim_data.mem_latency = (char)cfg1 & 0x0F;
- sim_data.mem_aligned = 1;
- sim_data.mem_page_miss = (char)(((cfg1 >> 4) &0x0F) + ((cfg1 >> 31) & 0x01));
- sim_data.gr_during_vid = 0;
- sim_data.pclk_khz = VClk;
- sim_data.mclk_khz = MClk;
- sim_data.nvclk_khz = NVClk;
- nv10CalcArbitration(&fifo_data, &sim_data);
- if (fifo_data.valid)
- {
- int b = fifo_data.graphics_burst_size >> 4;
- *burst = 0;
- while (b >>= 1)
- (*burst)++;
- *lwm = fifo_data.graphics_lwm >> 3;
- }
-}
-
-static void nForceUpdateArbitrationSettings
-(
- unsigned VClk,
- unsigned pixelDepth,
- unsigned *burst,
- unsigned *lwm,
- RIVA_HW_INST *chip,
- struct pci_dev *pdev
-)
-{
- nv10_fifo_info fifo_data;
- nv10_sim_state sim_data;
- unsigned int M, N, P, pll, MClk, NVClk;
- unsigned int uMClkPostDiv;
- struct pci_dev *dev;
- int domain = pci_domain_nr(pdev->bus);
-
- dev = pci_get_domain_bus_and_slot(domain, 0, 3);
- pci_read_config_dword(dev, 0x6C, &uMClkPostDiv);
- pci_dev_put(dev);
- uMClkPostDiv = (uMClkPostDiv >> 8) & 0xf;
-
- if(!uMClkPostDiv) uMClkPostDiv = 4;
- MClk = 400000 / uMClkPostDiv;
-
- pll = NV_RD32(&chip->PRAMDAC0[0x00000500/4], 0);
- M = (pll >> 0) & 0xFF; N = (pll >> 8) & 0xFF; P = (pll >> 16) & 0x0F;
- NVClk = (N * chip->CrystalFreqKHz / M) >> P;
- sim_data.pix_bpp = (char)pixelDepth;
- sim_data.enable_video = 0;
- sim_data.enable_mp = 0;
-
- dev = pci_get_domain_bus_and_slot(domain, 0, 1);
- pci_read_config_dword(dev, 0x7C, &sim_data.memory_type);
- pci_dev_put(dev);
- sim_data.memory_type = (sim_data.memory_type >> 12) & 1;
-
- sim_data.memory_width = 64;
- sim_data.mem_latency = 3;
- sim_data.mem_aligned = 1;
- sim_data.mem_page_miss = 10;
- sim_data.gr_during_vid = 0;
- sim_data.pclk_khz = VClk;
- sim_data.mclk_khz = MClk;
- sim_data.nvclk_khz = NVClk;
- nv10CalcArbitration(&fifo_data, &sim_data);
- if (fifo_data.valid)
- {
- int b = fifo_data.graphics_burst_size >> 4;
- *burst = 0;
- while (b >>= 1)
- (*burst)++;
- *lwm = fifo_data.graphics_lwm >> 3;
- }
-}
-
-/****************************************************************************\
-* *
-* RIVA Mode State Routines *
-* *
-\****************************************************************************/
-
-/*
- * Calculate the Video Clock parameters for the PLL.
- */
-static int CalcVClock
-(
- int clockIn,
- int *clockOut,
- int *mOut,
- int *nOut,
- int *pOut,
- RIVA_HW_INST *chip
-)
-{
- unsigned lowM, highM, highP;
- unsigned DeltaNew, DeltaOld;
- unsigned VClk, Freq;
- unsigned M, N, P;
-
- DeltaOld = 0xFFFFFFFF;
-
- VClk = (unsigned)clockIn;
-
- if (chip->CrystalFreqKHz == 13500)
- {
- lowM = 7;
- highM = 13 - (chip->Architecture == NV_ARCH_03);
- }
- else
- {
- lowM = 8;
- highM = 14 - (chip->Architecture == NV_ARCH_03);
- }
-
- highP = 4 - (chip->Architecture == NV_ARCH_03);
- for (P = 0; P <= highP; P ++)
- {
- Freq = VClk << P;
- if ((Freq >= 128000) && (Freq <= chip->MaxVClockFreqKHz))
- {
- for (M = lowM; M <= highM; M++)
- {
- N = (VClk << P) * M / chip->CrystalFreqKHz;
- if(N <= 255) {
- Freq = (chip->CrystalFreqKHz * N / M) >> P;
- if (Freq > VClk)
- DeltaNew = Freq - VClk;
- else
- DeltaNew = VClk - Freq;
- if (DeltaNew < DeltaOld)
- {
- *mOut = M;
- *nOut = N;
- *pOut = P;
- *clockOut = Freq;
- DeltaOld = DeltaNew;
- }
- }
- }
- }
- }
-
- /* non-zero: M/N/P/clock values assigned. zero: error (not set) */
- return (DeltaOld != 0xFFFFFFFF);
-}
-/*
- * Calculate extended mode parameters (SVGA) and save in a
- * mode state structure.
- */
-int CalcStateExt
-(
- RIVA_HW_INST *chip,
- RIVA_HW_STATE *state,
- struct pci_dev *pdev,
- int bpp,
- int width,
- int hDisplaySize,
- int height,
- int dotClock
-)
-{
- int pixelDepth;
- int VClk, m, n, p;
-
- /*
- * Save mode parameters.
- */
- state->bpp = bpp; /* this is not bitsPerPixel, it's 8,15,16,32 */
- state->width = width;
- state->height = height;
- /*
- * Extended RIVA registers.
- */
- pixelDepth = (bpp + 1)/8;
- if (!CalcVClock(dotClock, &VClk, &m, &n, &p, chip))
- return -EINVAL;
-
- switch (chip->Architecture)
- {
- case NV_ARCH_03:
- nv3UpdateArbitrationSettings(VClk,
- pixelDepth * 8,
- &(state->arbitration0),
- &(state->arbitration1),
- chip);
- state->cursor0 = 0x00;
- state->cursor1 = 0x78;
- state->cursor2 = 0x00000000;
- state->pllsel = 0x10010100;
- state->config = ((width + 31)/32)
- | (((pixelDepth > 2) ? 3 : pixelDepth) << 8)
- | 0x1000;
- state->general = 0x00100100;
- state->repaint1 = hDisplaySize < 1280 ? 0x06 : 0x02;
- break;
- case NV_ARCH_04:
- nv4UpdateArbitrationSettings(VClk,
- pixelDepth * 8,
- &(state->arbitration0),
- &(state->arbitration1),
- chip);
- state->cursor0 = 0x00;
- state->cursor1 = 0xFC;
- state->cursor2 = 0x00000000;
- state->pllsel = 0x10000700;
- state->config = 0x00001114;
- state->general = bpp == 16 ? 0x00101100 : 0x00100100;
- state->repaint1 = hDisplaySize < 1280 ? 0x04 : 0x00;
- break;
- case NV_ARCH_10:
- case NV_ARCH_20:
- case NV_ARCH_30:
- if((chip->Chipset == NV_CHIP_IGEFORCE2) ||
- (chip->Chipset == NV_CHIP_0x01F0))
- {
- nForceUpdateArbitrationSettings(VClk,
- pixelDepth * 8,
- &(state->arbitration0),
- &(state->arbitration1),
- chip, pdev);
- } else {
- nv10UpdateArbitrationSettings(VClk,
- pixelDepth * 8,
- &(state->arbitration0),
- &(state->arbitration1),
- chip);
- }
- state->cursor0 = 0x80 | (chip->CursorStart >> 17);
- state->cursor1 = (chip->CursorStart >> 11) << 2;
- state->cursor2 = chip->CursorStart >> 24;
- state->pllsel = 0x10000700;
- state->config = NV_RD32(&chip->PFB[0x00000200/4], 0);
- state->general = bpp == 16 ? 0x00101100 : 0x00100100;
- state->repaint1 = hDisplaySize < 1280 ? 0x04 : 0x00;
- break;
- }
-
- /* Paul Richards: below if block borks things in kernel for some reason */
- /* Tony: Below is needed to set hardware in DirectColor */
- if((bpp != 8) && (chip->Architecture != NV_ARCH_03))
- state->general |= 0x00000030;
-
- state->vpll = (p << 16) | (n << 8) | m;
- state->repaint0 = (((width/8)*pixelDepth) & 0x700) >> 3;
- state->pixel = pixelDepth > 2 ? 3 : pixelDepth;
- state->offset0 =
- state->offset1 =
- state->offset2 =
- state->offset3 = 0;
- state->pitch0 =
- state->pitch1 =
- state->pitch2 =
- state->pitch3 = pixelDepth * width;
-
- return 0;
-}
-/*
- * Load fixed function state and pre-calculated/stored state.
- */
-#define LOAD_FIXED_STATE(tbl,dev) \
- for (i = 0; i < sizeof(tbl##Table##dev)/8; i++) \
- NV_WR32(&chip->dev[tbl##Table##dev[i][0]], 0, tbl##Table##dev[i][1])
-#define LOAD_FIXED_STATE_8BPP(tbl,dev) \
- for (i = 0; i < sizeof(tbl##Table##dev##_8BPP)/8; i++) \
- NV_WR32(&chip->dev[tbl##Table##dev##_8BPP[i][0]], 0, tbl##Table##dev##_8BPP[i][1])
-#define LOAD_FIXED_STATE_15BPP(tbl,dev) \
- for (i = 0; i < sizeof(tbl##Table##dev##_15BPP)/8; i++) \
- NV_WR32(&chip->dev[tbl##Table##dev##_15BPP[i][0]], 0, tbl##Table##dev##_15BPP[i][1])
-#define LOAD_FIXED_STATE_16BPP(tbl,dev) \
- for (i = 0; i < sizeof(tbl##Table##dev##_16BPP)/8; i++) \
- NV_WR32(&chip->dev[tbl##Table##dev##_16BPP[i][0]], 0, tbl##Table##dev##_16BPP[i][1])
-#define LOAD_FIXED_STATE_32BPP(tbl,dev) \
- for (i = 0; i < sizeof(tbl##Table##dev##_32BPP)/8; i++) \
- NV_WR32(&chip->dev[tbl##Table##dev##_32BPP[i][0]], 0, tbl##Table##dev##_32BPP[i][1])
-
-static void UpdateFifoState
-(
- RIVA_HW_INST *chip
-)
-{
- int i;
-
- switch (chip->Architecture)
- {
- case NV_ARCH_04:
- LOAD_FIXED_STATE(nv4,FIFO);
- chip->Tri03 = NULL;
- chip->Tri05 = (RivaTexturedTriangle05 __iomem *)&(chip->FIFO[0x0000E000/4]);
- break;
- case NV_ARCH_10:
- case NV_ARCH_20:
- case NV_ARCH_30:
- /*
- * Initialize state for the RivaTriangle3D05 routines.
- */
- LOAD_FIXED_STATE(nv10tri05,PGRAPH);
- LOAD_FIXED_STATE(nv10,FIFO);
- chip->Tri03 = NULL;
- chip->Tri05 = (RivaTexturedTriangle05 __iomem *)&(chip->FIFO[0x0000E000/4]);
- break;
- }
-}
-static void LoadStateExt
-(
- RIVA_HW_INST *chip,
- RIVA_HW_STATE *state
-)
-{
- int i;
-
- /*
- * Load HW fixed function state.
- */
- LOAD_FIXED_STATE(Riva,PMC);
- LOAD_FIXED_STATE(Riva,PTIMER);
- switch (chip->Architecture)
- {
- case NV_ARCH_03:
- /*
- * Make sure frame buffer config gets set before loading PRAMIN.
- */
- NV_WR32(chip->PFB, 0x00000200, state->config);
- LOAD_FIXED_STATE(nv3,PFIFO);
- LOAD_FIXED_STATE(nv3,PRAMIN);
- LOAD_FIXED_STATE(nv3,PGRAPH);
- switch (state->bpp)
- {
- case 15:
- case 16:
- LOAD_FIXED_STATE_15BPP(nv3,PRAMIN);
- LOAD_FIXED_STATE_15BPP(nv3,PGRAPH);
- chip->Tri03 = (RivaTexturedTriangle03 __iomem *)&(chip->FIFO[0x0000E000/4]);
- break;
- case 24:
- case 32:
- LOAD_FIXED_STATE_32BPP(nv3,PRAMIN);
- LOAD_FIXED_STATE_32BPP(nv3,PGRAPH);
- chip->Tri03 = NULL;
- break;
- case 8:
- default:
- LOAD_FIXED_STATE_8BPP(nv3,PRAMIN);
- LOAD_FIXED_STATE_8BPP(nv3,PGRAPH);
- chip->Tri03 = NULL;
- break;
- }
- for (i = 0x00000; i < 0x00800; i++)
- NV_WR32(&chip->PRAMIN[0x00000502 + i], 0, (i << 12) | 0x03);
- NV_WR32(chip->PGRAPH, 0x00000630, state->offset0);
- NV_WR32(chip->PGRAPH, 0x00000634, state->offset1);
- NV_WR32(chip->PGRAPH, 0x00000638, state->offset2);
- NV_WR32(chip->PGRAPH, 0x0000063C, state->offset3);
- NV_WR32(chip->PGRAPH, 0x00000650, state->pitch0);
- NV_WR32(chip->PGRAPH, 0x00000654, state->pitch1);
- NV_WR32(chip->PGRAPH, 0x00000658, state->pitch2);
- NV_WR32(chip->PGRAPH, 0x0000065C, state->pitch3);
- break;
- case NV_ARCH_04:
- /*
- * Make sure frame buffer config gets set before loading PRAMIN.
- */
- NV_WR32(chip->PFB, 0x00000200, state->config);
- LOAD_FIXED_STATE(nv4,PFIFO);
- LOAD_FIXED_STATE(nv4,PRAMIN);
- LOAD_FIXED_STATE(nv4,PGRAPH);
- switch (state->bpp)
- {
- case 15:
- LOAD_FIXED_STATE_15BPP(nv4,PRAMIN);
- LOAD_FIXED_STATE_15BPP(nv4,PGRAPH);
- chip->Tri03 = (RivaTexturedTriangle03 __iomem *)&(chip->FIFO[0x0000E000/4]);
- break;
- case 16:
- LOAD_FIXED_STATE_16BPP(nv4,PRAMIN);
- LOAD_FIXED_STATE_16BPP(nv4,PGRAPH);
- chip->Tri03 = (RivaTexturedTriangle03 __iomem *)&(chip->FIFO[0x0000E000/4]);
- break;
- case 24:
- case 32:
- LOAD_FIXED_STATE_32BPP(nv4,PRAMIN);
- LOAD_FIXED_STATE_32BPP(nv4,PGRAPH);
- chip->Tri03 = NULL;
- break;
- case 8:
- default:
- LOAD_FIXED_STATE_8BPP(nv4,PRAMIN);
- LOAD_FIXED_STATE_8BPP(nv4,PGRAPH);
- chip->Tri03 = NULL;
- break;
- }
- NV_WR32(chip->PGRAPH, 0x00000640, state->offset0);
- NV_WR32(chip->PGRAPH, 0x00000644, state->offset1);
- NV_WR32(chip->PGRAPH, 0x00000648, state->offset2);
- NV_WR32(chip->PGRAPH, 0x0000064C, state->offset3);
- NV_WR32(chip->PGRAPH, 0x00000670, state->pitch0);
- NV_WR32(chip->PGRAPH, 0x00000674, state->pitch1);
- NV_WR32(chip->PGRAPH, 0x00000678, state->pitch2);
- NV_WR32(chip->PGRAPH, 0x0000067C, state->pitch3);
- break;
- case NV_ARCH_10:
- case NV_ARCH_20:
- case NV_ARCH_30:
- if(chip->twoHeads) {
- VGA_WR08(chip->PCIO, 0x03D4, 0x44);
- VGA_WR08(chip->PCIO, 0x03D5, state->crtcOwner);
- chip->LockUnlock(chip, 0);
- }
-
- LOAD_FIXED_STATE(nv10,PFIFO);
- LOAD_FIXED_STATE(nv10,PRAMIN);
- LOAD_FIXED_STATE(nv10,PGRAPH);
- switch (state->bpp)
- {
- case 15:
- LOAD_FIXED_STATE_15BPP(nv10,PRAMIN);
- LOAD_FIXED_STATE_15BPP(nv10,PGRAPH);
- chip->Tri03 = (RivaTexturedTriangle03 __iomem *)&(chip->FIFO[0x0000E000/4]);
- break;
- case 16:
- LOAD_FIXED_STATE_16BPP(nv10,PRAMIN);
- LOAD_FIXED_STATE_16BPP(nv10,PGRAPH);
- chip->Tri03 = (RivaTexturedTriangle03 __iomem *)&(chip->FIFO[0x0000E000/4]);
- break;
- case 24:
- case 32:
- LOAD_FIXED_STATE_32BPP(nv10,PRAMIN);
- LOAD_FIXED_STATE_32BPP(nv10,PGRAPH);
- chip->Tri03 = NULL;
- break;
- case 8:
- default:
- LOAD_FIXED_STATE_8BPP(nv10,PRAMIN);
- LOAD_FIXED_STATE_8BPP(nv10,PGRAPH);
- chip->Tri03 = NULL;
- break;
- }
-
- if(chip->Architecture == NV_ARCH_10) {
- NV_WR32(chip->PGRAPH, 0x00000640, state->offset0);
- NV_WR32(chip->PGRAPH, 0x00000644, state->offset1);
- NV_WR32(chip->PGRAPH, 0x00000648, state->offset2);
- NV_WR32(chip->PGRAPH, 0x0000064C, state->offset3);
- NV_WR32(chip->PGRAPH, 0x00000670, state->pitch0);
- NV_WR32(chip->PGRAPH, 0x00000674, state->pitch1);
- NV_WR32(chip->PGRAPH, 0x00000678, state->pitch2);
- NV_WR32(chip->PGRAPH, 0x0000067C, state->pitch3);
- NV_WR32(chip->PGRAPH, 0x00000680, state->pitch3);
- } else {
- NV_WR32(chip->PGRAPH, 0x00000820, state->offset0);
- NV_WR32(chip->PGRAPH, 0x00000824, state->offset1);
- NV_WR32(chip->PGRAPH, 0x00000828, state->offset2);
- NV_WR32(chip->PGRAPH, 0x0000082C, state->offset3);
- NV_WR32(chip->PGRAPH, 0x00000850, state->pitch0);
- NV_WR32(chip->PGRAPH, 0x00000854, state->pitch1);
- NV_WR32(chip->PGRAPH, 0x00000858, state->pitch2);
- NV_WR32(chip->PGRAPH, 0x0000085C, state->pitch3);
- NV_WR32(chip->PGRAPH, 0x00000860, state->pitch3);
- NV_WR32(chip->PGRAPH, 0x00000864, state->pitch3);
- NV_WR32(chip->PGRAPH, 0x000009A4, NV_RD32(chip->PFB, 0x00000200));
- NV_WR32(chip->PGRAPH, 0x000009A8, NV_RD32(chip->PFB, 0x00000204));
- }
- if(chip->twoHeads) {
- NV_WR32(chip->PCRTC0, 0x00000860, state->head);
- NV_WR32(chip->PCRTC0, 0x00002860, state->head2);
- }
- NV_WR32(chip->PRAMDAC, 0x00000404, NV_RD32(chip->PRAMDAC, 0x00000404) | (1 << 25));
-
- NV_WR32(chip->PMC, 0x00008704, 1);
- NV_WR32(chip->PMC, 0x00008140, 0);
- NV_WR32(chip->PMC, 0x00008920, 0);
- NV_WR32(chip->PMC, 0x00008924, 0);
- NV_WR32(chip->PMC, 0x00008908, 0x01ffffff);
- NV_WR32(chip->PMC, 0x0000890C, 0x01ffffff);
- NV_WR32(chip->PMC, 0x00001588, 0);
-
- NV_WR32(chip->PFB, 0x00000240, 0);
- NV_WR32(chip->PFB, 0x00000250, 0);
- NV_WR32(chip->PFB, 0x00000260, 0);
- NV_WR32(chip->PFB, 0x00000270, 0);
- NV_WR32(chip->PFB, 0x00000280, 0);
- NV_WR32(chip->PFB, 0x00000290, 0);
- NV_WR32(chip->PFB, 0x000002A0, 0);
- NV_WR32(chip->PFB, 0x000002B0, 0);
-
- NV_WR32(chip->PGRAPH, 0x00000B00, NV_RD32(chip->PFB, 0x00000240));
- NV_WR32(chip->PGRAPH, 0x00000B04, NV_RD32(chip->PFB, 0x00000244));
- NV_WR32(chip->PGRAPH, 0x00000B08, NV_RD32(chip->PFB, 0x00000248));
- NV_WR32(chip->PGRAPH, 0x00000B0C, NV_RD32(chip->PFB, 0x0000024C));
- NV_WR32(chip->PGRAPH, 0x00000B10, NV_RD32(chip->PFB, 0x00000250));
- NV_WR32(chip->PGRAPH, 0x00000B14, NV_RD32(chip->PFB, 0x00000254));
- NV_WR32(chip->PGRAPH, 0x00000B18, NV_RD32(chip->PFB, 0x00000258));
- NV_WR32(chip->PGRAPH, 0x00000B1C, NV_RD32(chip->PFB, 0x0000025C));
- NV_WR32(chip->PGRAPH, 0x00000B20, NV_RD32(chip->PFB, 0x00000260));
- NV_WR32(chip->PGRAPH, 0x00000B24, NV_RD32(chip->PFB, 0x00000264));
- NV_WR32(chip->PGRAPH, 0x00000B28, NV_RD32(chip->PFB, 0x00000268));
- NV_WR32(chip->PGRAPH, 0x00000B2C, NV_RD32(chip->PFB, 0x0000026C));
- NV_WR32(chip->PGRAPH, 0x00000B30, NV_RD32(chip->PFB, 0x00000270));
- NV_WR32(chip->PGRAPH, 0x00000B34, NV_RD32(chip->PFB, 0x00000274));
- NV_WR32(chip->PGRAPH, 0x00000B38, NV_RD32(chip->PFB, 0x00000278));
- NV_WR32(chip->PGRAPH, 0x00000B3C, NV_RD32(chip->PFB, 0x0000027C));
- NV_WR32(chip->PGRAPH, 0x00000B40, NV_RD32(chip->PFB, 0x00000280));
- NV_WR32(chip->PGRAPH, 0x00000B44, NV_RD32(chip->PFB, 0x00000284));
- NV_WR32(chip->PGRAPH, 0x00000B48, NV_RD32(chip->PFB, 0x00000288));
- NV_WR32(chip->PGRAPH, 0x00000B4C, NV_RD32(chip->PFB, 0x0000028C));
- NV_WR32(chip->PGRAPH, 0x00000B50, NV_RD32(chip->PFB, 0x00000290));
- NV_WR32(chip->PGRAPH, 0x00000B54, NV_RD32(chip->PFB, 0x00000294));
- NV_WR32(chip->PGRAPH, 0x00000B58, NV_RD32(chip->PFB, 0x00000298));
- NV_WR32(chip->PGRAPH, 0x00000B5C, NV_RD32(chip->PFB, 0x0000029C));
- NV_WR32(chip->PGRAPH, 0x00000B60, NV_RD32(chip->PFB, 0x000002A0));
- NV_WR32(chip->PGRAPH, 0x00000B64, NV_RD32(chip->PFB, 0x000002A4));
- NV_WR32(chip->PGRAPH, 0x00000B68, NV_RD32(chip->PFB, 0x000002A8));
- NV_WR32(chip->PGRAPH, 0x00000B6C, NV_RD32(chip->PFB, 0x000002AC));
- NV_WR32(chip->PGRAPH, 0x00000B70, NV_RD32(chip->PFB, 0x000002B0));
- NV_WR32(chip->PGRAPH, 0x00000B74, NV_RD32(chip->PFB, 0x000002B4));
- NV_WR32(chip->PGRAPH, 0x00000B78, NV_RD32(chip->PFB, 0x000002B8));
- NV_WR32(chip->PGRAPH, 0x00000B7C, NV_RD32(chip->PFB, 0x000002BC));
- NV_WR32(chip->PGRAPH, 0x00000F40, 0x10000000);
- NV_WR32(chip->PGRAPH, 0x00000F44, 0x00000000);
- NV_WR32(chip->PGRAPH, 0x00000F50, 0x00000040);
- NV_WR32(chip->PGRAPH, 0x00000F54, 0x00000008);
- NV_WR32(chip->PGRAPH, 0x00000F50, 0x00000200);
- for (i = 0; i < (3*16); i++)
- NV_WR32(chip->PGRAPH, 0x00000F54, 0x00000000);
- NV_WR32(chip->PGRAPH, 0x00000F50, 0x00000040);
- NV_WR32(chip->PGRAPH, 0x00000F54, 0x00000000);
- NV_WR32(chip->PGRAPH, 0x00000F50, 0x00000800);
- for (i = 0; i < (16*16); i++)
- NV_WR32(chip->PGRAPH, 0x00000F54, 0x00000000);
- NV_WR32(chip->PGRAPH, 0x00000F40, 0x30000000);
- NV_WR32(chip->PGRAPH, 0x00000F44, 0x00000004);
- NV_WR32(chip->PGRAPH, 0x00000F50, 0x00006400);
- for (i = 0; i < (59*4); i++)
- NV_WR32(chip->PGRAPH, 0x00000F54, 0x00000000);
- NV_WR32(chip->PGRAPH, 0x00000F50, 0x00006800);
- for (i = 0; i < (47*4); i++)
- NV_WR32(chip->PGRAPH, 0x00000F54, 0x00000000);
- NV_WR32(chip->PGRAPH, 0x00000F50, 0x00006C00);
- for (i = 0; i < (3*4); i++)
- NV_WR32(chip->PGRAPH, 0x00000F54, 0x00000000);
- NV_WR32(chip->PGRAPH, 0x00000F50, 0x00007000);
- for (i = 0; i < (19*4); i++)
- NV_WR32(chip->PGRAPH, 0x00000F54, 0x00000000);
- NV_WR32(chip->PGRAPH, 0x00000F50, 0x00007400);
- for (i = 0; i < (12*4); i++)
- NV_WR32(chip->PGRAPH, 0x00000F54, 0x00000000);
- NV_WR32(chip->PGRAPH, 0x00000F50, 0x00007800);
- for (i = 0; i < (12*4); i++)
- NV_WR32(chip->PGRAPH, 0x00000F54, 0x00000000);
- NV_WR32(chip->PGRAPH, 0x00000F50, 0x00004400);
- for (i = 0; i < (8*4); i++)
- NV_WR32(chip->PGRAPH, 0x00000F54, 0x00000000);
- NV_WR32(chip->PGRAPH, 0x00000F50, 0x00000000);
- for (i = 0; i < 16; i++)
- NV_WR32(chip->PGRAPH, 0x00000F54, 0x00000000);
- NV_WR32(chip->PGRAPH, 0x00000F50, 0x00000040);
- for (i = 0; i < 4; i++)
- NV_WR32(chip->PGRAPH, 0x00000F54, 0x00000000);
-
- NV_WR32(chip->PCRTC, 0x00000810, state->cursorConfig);
-
- if(chip->flatPanel) {
- if((chip->Chipset & 0x0ff0) == 0x0110) {
- NV_WR32(chip->PRAMDAC, 0x0528, state->dither);
- } else
- if((chip->Chipset & 0x0ff0) >= 0x0170) {
- NV_WR32(chip->PRAMDAC, 0x083C, state->dither);
- }
-
- VGA_WR08(chip->PCIO, 0x03D4, 0x53);
- VGA_WR08(chip->PCIO, 0x03D5, 0);
- VGA_WR08(chip->PCIO, 0x03D4, 0x54);
- VGA_WR08(chip->PCIO, 0x03D5, 0);
- VGA_WR08(chip->PCIO, 0x03D4, 0x21);
- VGA_WR08(chip->PCIO, 0x03D5, 0xfa);
- }
-
- VGA_WR08(chip->PCIO, 0x03D4, 0x41);
- VGA_WR08(chip->PCIO, 0x03D5, state->extra);
- }
- LOAD_FIXED_STATE(Riva,FIFO);
- UpdateFifoState(chip);
- /*
- * Load HW mode state.
- */
- VGA_WR08(chip->PCIO, 0x03D4, 0x19);
- VGA_WR08(chip->PCIO, 0x03D5, state->repaint0);
- VGA_WR08(chip->PCIO, 0x03D4, 0x1A);
- VGA_WR08(chip->PCIO, 0x03D5, state->repaint1);
- VGA_WR08(chip->PCIO, 0x03D4, 0x25);
- VGA_WR08(chip->PCIO, 0x03D5, state->screen);
- VGA_WR08(chip->PCIO, 0x03D4, 0x28);
- VGA_WR08(chip->PCIO, 0x03D5, state->pixel);
- VGA_WR08(chip->PCIO, 0x03D4, 0x2D);
- VGA_WR08(chip->PCIO, 0x03D5, state->horiz);
- VGA_WR08(chip->PCIO, 0x03D4, 0x1B);
- VGA_WR08(chip->PCIO, 0x03D5, state->arbitration0);
- VGA_WR08(chip->PCIO, 0x03D4, 0x20);
- VGA_WR08(chip->PCIO, 0x03D5, state->arbitration1);
- VGA_WR08(chip->PCIO, 0x03D4, 0x30);
- VGA_WR08(chip->PCIO, 0x03D5, state->cursor0);
- VGA_WR08(chip->PCIO, 0x03D4, 0x31);
- VGA_WR08(chip->PCIO, 0x03D5, state->cursor1);
- VGA_WR08(chip->PCIO, 0x03D4, 0x2F);
- VGA_WR08(chip->PCIO, 0x03D5, state->cursor2);
- VGA_WR08(chip->PCIO, 0x03D4, 0x39);
- VGA_WR08(chip->PCIO, 0x03D5, state->interlace);
-
- if(!chip->flatPanel) {
- NV_WR32(chip->PRAMDAC0, 0x00000508, state->vpll);
- NV_WR32(chip->PRAMDAC0, 0x0000050C, state->pllsel);
- if(chip->twoHeads)
- NV_WR32(chip->PRAMDAC0, 0x00000520, state->vpll2);
- } else {
- NV_WR32(chip->PRAMDAC, 0x00000848 , state->scale);
- }
- NV_WR32(chip->PRAMDAC, 0x00000600 , state->general);
-
- /*
- * Turn off VBlank enable and reset.
- */
- NV_WR32(chip->PCRTC, 0x00000140, 0);
- NV_WR32(chip->PCRTC, 0x00000100, chip->VBlankBit);
- /*
- * Set interrupt enable.
- */
- NV_WR32(chip->PMC, 0x00000140, chip->EnableIRQ & 0x01);
- /*
- * Set current state pointer.
- */
- chip->CurrentState = state;
- /*
- * Reset FIFO free and empty counts.
- */
- chip->FifoFreeCount = 0;
- /* Free count from first subchannel */
- chip->FifoEmptyCount = NV_RD32(&chip->Rop->FifoFree, 0);
-}
-static void UnloadStateExt
-(
- RIVA_HW_INST *chip,
- RIVA_HW_STATE *state
-)
-{
- /*
- * Save current HW state.
- */
- VGA_WR08(chip->PCIO, 0x03D4, 0x19);
- state->repaint0 = VGA_RD08(chip->PCIO, 0x03D5);
- VGA_WR08(chip->PCIO, 0x03D4, 0x1A);
- state->repaint1 = VGA_RD08(chip->PCIO, 0x03D5);
- VGA_WR08(chip->PCIO, 0x03D4, 0x25);
- state->screen = VGA_RD08(chip->PCIO, 0x03D5);
- VGA_WR08(chip->PCIO, 0x03D4, 0x28);
- state->pixel = VGA_RD08(chip->PCIO, 0x03D5);
- VGA_WR08(chip->PCIO, 0x03D4, 0x2D);
- state->horiz = VGA_RD08(chip->PCIO, 0x03D5);
- VGA_WR08(chip->PCIO, 0x03D4, 0x1B);
- state->arbitration0 = VGA_RD08(chip->PCIO, 0x03D5);
- VGA_WR08(chip->PCIO, 0x03D4, 0x20);
- state->arbitration1 = VGA_RD08(chip->PCIO, 0x03D5);
- VGA_WR08(chip->PCIO, 0x03D4, 0x30);
- state->cursor0 = VGA_RD08(chip->PCIO, 0x03D5);
- VGA_WR08(chip->PCIO, 0x03D4, 0x31);
- state->cursor1 = VGA_RD08(chip->PCIO, 0x03D5);
- VGA_WR08(chip->PCIO, 0x03D4, 0x2F);
- state->cursor2 = VGA_RD08(chip->PCIO, 0x03D5);
- VGA_WR08(chip->PCIO, 0x03D4, 0x39);
- state->interlace = VGA_RD08(chip->PCIO, 0x03D5);
- state->vpll = NV_RD32(chip->PRAMDAC0, 0x00000508);
- state->vpll2 = NV_RD32(chip->PRAMDAC0, 0x00000520);
- state->pllsel = NV_RD32(chip->PRAMDAC0, 0x0000050C);
- state->general = NV_RD32(chip->PRAMDAC, 0x00000600);
- state->scale = NV_RD32(chip->PRAMDAC, 0x00000848);
- state->config = NV_RD32(chip->PFB, 0x00000200);
- switch (chip->Architecture)
- {
- case NV_ARCH_03:
- state->offset0 = NV_RD32(chip->PGRAPH, 0x00000630);
- state->offset1 = NV_RD32(chip->PGRAPH, 0x00000634);
- state->offset2 = NV_RD32(chip->PGRAPH, 0x00000638);
- state->offset3 = NV_RD32(chip->PGRAPH, 0x0000063C);
- state->pitch0 = NV_RD32(chip->PGRAPH, 0x00000650);
- state->pitch1 = NV_RD32(chip->PGRAPH, 0x00000654);
- state->pitch2 = NV_RD32(chip->PGRAPH, 0x00000658);
- state->pitch3 = NV_RD32(chip->PGRAPH, 0x0000065C);
- break;
- case NV_ARCH_04:
- state->offset0 = NV_RD32(chip->PGRAPH, 0x00000640);
- state->offset1 = NV_RD32(chip->PGRAPH, 0x00000644);
- state->offset2 = NV_RD32(chip->PGRAPH, 0x00000648);
- state->offset3 = NV_RD32(chip->PGRAPH, 0x0000064C);
- state->pitch0 = NV_RD32(chip->PGRAPH, 0x00000670);
- state->pitch1 = NV_RD32(chip->PGRAPH, 0x00000674);
- state->pitch2 = NV_RD32(chip->PGRAPH, 0x00000678);
- state->pitch3 = NV_RD32(chip->PGRAPH, 0x0000067C);
- break;
- case NV_ARCH_10:
- case NV_ARCH_20:
- case NV_ARCH_30:
- state->offset0 = NV_RD32(chip->PGRAPH, 0x00000640);
- state->offset1 = NV_RD32(chip->PGRAPH, 0x00000644);
- state->offset2 = NV_RD32(chip->PGRAPH, 0x00000648);
- state->offset3 = NV_RD32(chip->PGRAPH, 0x0000064C);
- state->pitch0 = NV_RD32(chip->PGRAPH, 0x00000670);
- state->pitch1 = NV_RD32(chip->PGRAPH, 0x00000674);
- state->pitch2 = NV_RD32(chip->PGRAPH, 0x00000678);
- state->pitch3 = NV_RD32(chip->PGRAPH, 0x0000067C);
- if(chip->twoHeads) {
- state->head = NV_RD32(chip->PCRTC0, 0x00000860);
- state->head2 = NV_RD32(chip->PCRTC0, 0x00002860);
- VGA_WR08(chip->PCIO, 0x03D4, 0x44);
- state->crtcOwner = VGA_RD08(chip->PCIO, 0x03D5);
- }
- VGA_WR08(chip->PCIO, 0x03D4, 0x41);
- state->extra = VGA_RD08(chip->PCIO, 0x03D5);
- state->cursorConfig = NV_RD32(chip->PCRTC, 0x00000810);
-
- if((chip->Chipset & 0x0ff0) == 0x0110) {
- state->dither = NV_RD32(chip->PRAMDAC, 0x0528);
- } else
- if((chip->Chipset & 0x0ff0) >= 0x0170) {
- state->dither = NV_RD32(chip->PRAMDAC, 0x083C);
- }
- break;
- }
-}
-static void SetStartAddress
-(
- RIVA_HW_INST *chip,
- unsigned start
-)
-{
- NV_WR32(chip->PCRTC, 0x800, start);
-}
-
-static void SetStartAddress3
-(
- RIVA_HW_INST *chip,
- unsigned start
-)
-{
- int offset = start >> 2;
- int pan = (start & 3) << 1;
- unsigned char tmp;
-
- /*
- * Unlock extended registers.
- */
- chip->LockUnlock(chip, 0);
- /*
- * Set start address.
- */
- VGA_WR08(chip->PCIO, 0x3D4, 0x0D); VGA_WR08(chip->PCIO, 0x3D5, offset);
- offset >>= 8;
- VGA_WR08(chip->PCIO, 0x3D4, 0x0C); VGA_WR08(chip->PCIO, 0x3D5, offset);
- offset >>= 8;
- VGA_WR08(chip->PCIO, 0x3D4, 0x19); tmp = VGA_RD08(chip->PCIO, 0x3D5);
- VGA_WR08(chip->PCIO, 0x3D5, (offset & 0x01F) | (tmp & ~0x1F));
- VGA_WR08(chip->PCIO, 0x3D4, 0x2D); tmp = VGA_RD08(chip->PCIO, 0x3D5);
- VGA_WR08(chip->PCIO, 0x3D5, (offset & 0x60) | (tmp & ~0x60));
- /*
- * 4 pixel pan register.
- */
- offset = VGA_RD08(chip->PCIO, chip->IO + 0x0A);
- VGA_WR08(chip->PCIO, 0x3C0, 0x13);
- VGA_WR08(chip->PCIO, 0x3C0, pan);
-}
-static void nv3SetSurfaces2D
-(
- RIVA_HW_INST *chip,
- unsigned surf0,
- unsigned surf1
-)
-{
- RivaSurface __iomem *Surface =
- (RivaSurface __iomem *)&(chip->FIFO[0x0000E000/4]);
-
- RIVA_FIFO_FREE(*chip,Tri03,5);
- NV_WR32(&chip->FIFO[0x00003800], 0, 0x80000003);
- NV_WR32(&Surface->Offset, 0, surf0);
- NV_WR32(&chip->FIFO[0x00003800], 0, 0x80000004);
- NV_WR32(&Surface->Offset, 0, surf1);
- NV_WR32(&chip->FIFO[0x00003800], 0, 0x80000013);
-}
-static void nv4SetSurfaces2D
-(
- RIVA_HW_INST *chip,
- unsigned surf0,
- unsigned surf1
-)
-{
- RivaSurface __iomem *Surface =
- (RivaSurface __iomem *)&(chip->FIFO[0x0000E000/4]);
-
- NV_WR32(&chip->FIFO[0x00003800], 0, 0x80000003);
- NV_WR32(&Surface->Offset, 0, surf0);
- NV_WR32(&chip->FIFO[0x00003800], 0, 0x80000004);
- NV_WR32(&Surface->Offset, 0, surf1);
- NV_WR32(&chip->FIFO[0x00003800], 0, 0x80000014);
-}
-static void nv10SetSurfaces2D
-(
- RIVA_HW_INST *chip,
- unsigned surf0,
- unsigned surf1
-)
-{
- RivaSurface __iomem *Surface =
- (RivaSurface __iomem *)&(chip->FIFO[0x0000E000/4]);
-
- NV_WR32(&chip->FIFO[0x00003800], 0, 0x80000003);
- NV_WR32(&Surface->Offset, 0, surf0);
- NV_WR32(&chip->FIFO[0x00003800], 0, 0x80000004);
- NV_WR32(&Surface->Offset, 0, surf1);
- NV_WR32(&chip->FIFO[0x00003800], 0, 0x80000014);
-}
-static void nv3SetSurfaces3D
-(
- RIVA_HW_INST *chip,
- unsigned surf0,
- unsigned surf1
-)
-{
- RivaSurface __iomem *Surface =
- (RivaSurface __iomem *)&(chip->FIFO[0x0000E000/4]);
-
- RIVA_FIFO_FREE(*chip,Tri03,5);
- NV_WR32(&chip->FIFO[0x00003800], 0, 0x80000005);
- NV_WR32(&Surface->Offset, 0, surf0);
- NV_WR32(&chip->FIFO[0x00003800], 0, 0x80000006);
- NV_WR32(&Surface->Offset, 0, surf1);
- NV_WR32(&chip->FIFO[0x00003800], 0, 0x80000013);
-}
-static void nv4SetSurfaces3D
-(
- RIVA_HW_INST *chip,
- unsigned surf0,
- unsigned surf1
-)
-{
- RivaSurface __iomem *Surface =
- (RivaSurface __iomem *)&(chip->FIFO[0x0000E000/4]);
-
- NV_WR32(&chip->FIFO[0x00003800], 0, 0x80000005);
- NV_WR32(&Surface->Offset, 0, surf0);
- NV_WR32(&chip->FIFO[0x00003800], 0, 0x80000006);
- NV_WR32(&Surface->Offset, 0, surf1);
- NV_WR32(&chip->FIFO[0x00003800], 0, 0x80000014);
-}
-static void nv10SetSurfaces3D
-(
- RIVA_HW_INST *chip,
- unsigned surf0,
- unsigned surf1
-)
-{
- RivaSurface3D __iomem *Surfaces3D =
- (RivaSurface3D __iomem *)&(chip->FIFO[0x0000E000/4]);
-
- RIVA_FIFO_FREE(*chip,Tri03,4);
- NV_WR32(&chip->FIFO[0x00003800], 0, 0x80000007);
- NV_WR32(&Surfaces3D->RenderBufferOffset, 0, surf0);
- NV_WR32(&Surfaces3D->ZBufferOffset, 0, surf1);
- NV_WR32(&chip->FIFO[0x00003800], 0, 0x80000014);
-}
-
-/****************************************************************************\
-* *
-* Probe RIVA Chip Configuration *
-* *
-\****************************************************************************/
-
-static void nv3GetConfig
-(
- RIVA_HW_INST *chip
-)
-{
- /*
- * Fill in chip configuration.
- */
- if (NV_RD32(&chip->PFB[0x00000000/4], 0) & 0x00000020)
- {
- if (((NV_RD32(chip->PMC, 0x00000000) & 0xF0) == 0x20)
- && ((NV_RD32(chip->PMC, 0x00000000) & 0x0F) >= 0x02))
- {
- /*
- * SDRAM 128 ZX.
- */
- chip->RamBandwidthKBytesPerSec = 800000;
- switch (NV_RD32(chip->PFB, 0x00000000) & 0x03)
- {
- case 2:
- chip->RamAmountKBytes = 1024 * 4;
- break;
- case 1:
- chip->RamAmountKBytes = 1024 * 2;
- break;
- default:
- chip->RamAmountKBytes = 1024 * 8;
- break;
- }
- }
- else
- {
- chip->RamBandwidthKBytesPerSec = 1000000;
- chip->RamAmountKBytes = 1024 * 8;
- }
- }
- else
- {
- /*
- * SGRAM 128.
- */
- chip->RamBandwidthKBytesPerSec = 1000000;
- switch (NV_RD32(chip->PFB, 0x00000000) & 0x00000003)
- {
- case 0:
- chip->RamAmountKBytes = 1024 * 8;
- break;
- case 2:
- chip->RamAmountKBytes = 1024 * 4;
- break;
- default:
- chip->RamAmountKBytes = 1024 * 2;
- break;
- }
- }
- chip->CrystalFreqKHz = (NV_RD32(chip->PEXTDEV, 0x00000000) & 0x00000040) ? 14318 : 13500;
- chip->CURSOR = &(chip->PRAMIN[0x00008000/4 - 0x0800/4]);
- chip->VBlankBit = 0x00000100;
- chip->MaxVClockFreqKHz = 256000;
- /*
- * Set chip functions.
- */
- chip->Busy = nv3Busy;
- chip->ShowHideCursor = ShowHideCursor;
- chip->LoadStateExt = LoadStateExt;
- chip->UnloadStateExt = UnloadStateExt;
- chip->SetStartAddress = SetStartAddress3;
- chip->SetSurfaces2D = nv3SetSurfaces2D;
- chip->SetSurfaces3D = nv3SetSurfaces3D;
- chip->LockUnlock = nv3LockUnlock;
-}
-static void nv4GetConfig
-(
- RIVA_HW_INST *chip
-)
-{
- /*
- * Fill in chip configuration.
- */
- if (NV_RD32(chip->PFB, 0x00000000) & 0x00000100)
- {
- chip->RamAmountKBytes = ((NV_RD32(chip->PFB, 0x00000000) >> 12) & 0x0F) * 1024 * 2
- + 1024 * 2;
- }
- else
- {
- switch (NV_RD32(chip->PFB, 0x00000000) & 0x00000003)
- {
- case 0:
- chip->RamAmountKBytes = 1024 * 32;
- break;
- case 1:
- chip->RamAmountKBytes = 1024 * 4;
- break;
- case 2:
- chip->RamAmountKBytes = 1024 * 8;
- break;
- case 3:
- default:
- chip->RamAmountKBytes = 1024 * 16;
- break;
- }
- }
- switch ((NV_RD32(chip->PFB, 0x00000000) >> 3) & 0x00000003)
- {
- case 3:
- chip->RamBandwidthKBytesPerSec = 800000;
- break;
- default:
- chip->RamBandwidthKBytesPerSec = 1000000;
- break;
- }
- chip->CrystalFreqKHz = (NV_RD32(chip->PEXTDEV, 0x00000000) & 0x00000040) ? 14318 : 13500;
- chip->CURSOR = &(chip->PRAMIN[0x00010000/4 - 0x0800/4]);
- chip->VBlankBit = 0x00000001;
- chip->MaxVClockFreqKHz = 350000;
- /*
- * Set chip functions.
- */
- chip->Busy = nv4Busy;
- chip->ShowHideCursor = ShowHideCursor;
- chip->LoadStateExt = LoadStateExt;
- chip->UnloadStateExt = UnloadStateExt;
- chip->SetStartAddress = SetStartAddress;
- chip->SetSurfaces2D = nv4SetSurfaces2D;
- chip->SetSurfaces3D = nv4SetSurfaces3D;
- chip->LockUnlock = nv4LockUnlock;
-}
-static void nv10GetConfig
-(
- RIVA_HW_INST *chip,
- struct pci_dev *pdev,
- unsigned int chipset
-)
-{
- struct pci_dev* dev;
- int domain = pci_domain_nr(pdev->bus);
- u32 amt;
-
-#ifdef __BIG_ENDIAN
- /* turn on big endian register access */
- if(!(NV_RD32(chip->PMC, 0x00000004) & 0x01000001))
- NV_WR32(chip->PMC, 0x00000004, 0x01000001);
-#endif
-
- /*
- * Fill in chip configuration.
- */
- if(chipset == NV_CHIP_IGEFORCE2) {
- dev = pci_get_domain_bus_and_slot(domain, 0, 1);
- pci_read_config_dword(dev, 0x7C, &amt);
- pci_dev_put(dev);
- chip->RamAmountKBytes = (((amt >> 6) & 31) + 1) * 1024;
- } else if(chipset == NV_CHIP_0x01F0) {
- dev = pci_get_domain_bus_and_slot(domain, 0, 1);
- pci_read_config_dword(dev, 0x84, &amt);
- pci_dev_put(dev);
- chip->RamAmountKBytes = (((amt >> 4) & 127) + 1) * 1024;
- } else {
- switch ((NV_RD32(chip->PFB, 0x0000020C) >> 20) & 0x000000FF)
- {
- case 0x02:
- chip->RamAmountKBytes = 1024 * 2;
- break;
- case 0x04:
- chip->RamAmountKBytes = 1024 * 4;
- break;
- case 0x08:
- chip->RamAmountKBytes = 1024 * 8;
- break;
- case 0x10:
- chip->RamAmountKBytes = 1024 * 16;
- break;
- case 0x20:
- chip->RamAmountKBytes = 1024 * 32;
- break;
- case 0x40:
- chip->RamAmountKBytes = 1024 * 64;
- break;
- case 0x80:
- chip->RamAmountKBytes = 1024 * 128;
- break;
- default:
- chip->RamAmountKBytes = 1024 * 16;
- break;
- }
- }
- switch ((NV_RD32(chip->PFB, 0x00000000) >> 3) & 0x00000003)
- {
- case 3:
- chip->RamBandwidthKBytesPerSec = 800000;
- break;
- default:
- chip->RamBandwidthKBytesPerSec = 1000000;
- break;
- }
- chip->CrystalFreqKHz = (NV_RD32(chip->PEXTDEV, 0x0000) & (1 << 6)) ?
- 14318 : 13500;
-
- switch (chipset & 0x0ff0) {
- case 0x0170:
- case 0x0180:
- case 0x01F0:
- case 0x0250:
- case 0x0280:
- case 0x0300:
- case 0x0310:
- case 0x0320:
- case 0x0330:
- case 0x0340:
- if(NV_RD32(chip->PEXTDEV, 0x0000) & (1 << 22))
- chip->CrystalFreqKHz = 27000;
- break;
- default:
- break;
- }
-
- chip->CursorStart = (chip->RamAmountKBytes - 128) * 1024;
- chip->CURSOR = NULL; /* can't set this here */
- chip->VBlankBit = 0x00000001;
- chip->MaxVClockFreqKHz = 350000;
- /*
- * Set chip functions.
- */
- chip->Busy = nv10Busy;
- chip->ShowHideCursor = ShowHideCursor;
- chip->LoadStateExt = LoadStateExt;
- chip->UnloadStateExt = UnloadStateExt;
- chip->SetStartAddress = SetStartAddress;
- chip->SetSurfaces2D = nv10SetSurfaces2D;
- chip->SetSurfaces3D = nv10SetSurfaces3D;
- chip->LockUnlock = nv4LockUnlock;
-
- switch(chipset & 0x0ff0) {
- case 0x0110:
- case 0x0170:
- case 0x0180:
- case 0x01F0:
- case 0x0250:
- case 0x0280:
- case 0x0300:
- case 0x0310:
- case 0x0320:
- case 0x0330:
- case 0x0340:
- chip->twoHeads = TRUE;
- break;
- default:
- chip->twoHeads = FALSE;
- break;
- }
-}
-int RivaGetConfig
-(
- RIVA_HW_INST *chip,
- struct pci_dev *pdev,
- unsigned int chipset
-)
-{
- /*
- * Save this so future SW know whats it's dealing with.
- */
- chip->Version = RIVA_SW_VERSION;
- /*
- * Chip specific configuration.
- */
- switch (chip->Architecture)
- {
- case NV_ARCH_03:
- nv3GetConfig(chip);
- break;
- case NV_ARCH_04:
- nv4GetConfig(chip);
- break;
- case NV_ARCH_10:
- case NV_ARCH_20:
- case NV_ARCH_30:
- nv10GetConfig(chip, pdev, chipset);
- break;
- default:
- return (-1);
- }
- chip->Chipset = chipset;
- /*
- * Fill in FIFO pointers.
- */
- chip->Rop = (RivaRop __iomem *)&(chip->FIFO[0x00000000/4]);
- chip->Clip = (RivaClip __iomem *)&(chip->FIFO[0x00002000/4]);
- chip->Patt = (RivaPattern __iomem *)&(chip->FIFO[0x00004000/4]);
- chip->Pixmap = (RivaPixmap __iomem *)&(chip->FIFO[0x00006000/4]);
- chip->Blt = (RivaScreenBlt __iomem *)&(chip->FIFO[0x00008000/4]);
- chip->Bitmap = (RivaBitmap __iomem *)&(chip->FIFO[0x0000A000/4]);
- chip->Line = (RivaLine __iomem *)&(chip->FIFO[0x0000C000/4]);
- chip->Tri03 = (RivaTexturedTriangle03 __iomem *)&(chip->FIFO[0x0000E000/4]);
- return (0);
-}
-
diff --git a/drivers/video/fbdev/riva/riva_hw.h b/drivers/video/fbdev/riva/riva_hw.h
deleted file mode 100644
index 5e7b35466b00..000000000000
--- a/drivers/video/fbdev/riva/riva_hw.h
+++ /dev/null
@@ -1,564 +0,0 @@
-/***************************************************************************\
-|* *|
-|* Copyright 1993-1999 NVIDIA, Corporation. All rights reserved. *|
-|* *|
-|* NOTICE TO USER: The source code is copyrighted under U.S. and *|
-|* international laws. Users and possessors of this source code are *|
-|* hereby granted a nonexclusive, royalty-free copyright license to *|
-|* use this code in individual and commercial software. *|
-|* *|
-|* Any use of this source code must include, in the user documenta- *|
-|* tion and internal comments to the code, notices to the end user *|
-|* as follows: *|
-|* *|
-|* Copyright 1993-1999 NVIDIA, Corporation. All rights reserved. *|
-|* *|
-|* NVIDIA, CORPORATION MAKES NO REPRESENTATION ABOUT THE SUITABILITY *|
-|* OF THIS SOURCE CODE FOR ANY PURPOSE. IT IS PROVIDED "AS IS" *|
-|* WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND. NVIDIA, CORPOR- *|
-|* ATION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOURCE CODE, *|
-|* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGE- *|
-|* MENT, AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL *|
-|* NVIDIA, CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT, INCI- *|
-|* DENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RE- *|
-|* SULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION *|
-|* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF *|
-|* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOURCE CODE. *|
-|* *|
-|* U.S. Government End Users. This source code is a "commercial *|
-|* item," as that term is defined at 48 C.F.R. 2.101 (OCT 1995), *|
-|* consisting of "commercial computer software" and "commercial *|
-|* computer software documentation," as such terms are used in *|
-|* 48 C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Govern- *|
-|* ment only as a commercial end item. Consistent with 48 C.F.R. *|
-|* 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), *|
-|* all U.S. Government End Users acquire the source code with only *|
-|* those rights set forth herein. *|
-|* *|
-\***************************************************************************/
-
-/*
- * GPL licensing note -- nVidia is allowing a liberal interpretation of
- * the documentation restriction above, to merely say that this nVidia's
- * copyright and disclaimer should be included with all code derived
- * from this source. -- Jeff Garzik <jgarzik@pobox.com>, 01/Nov/99
- */
-
-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/riva_hw.h,v 1.21 2002/10/14 18:22:46 mvojkovi Exp $ */
-#ifndef __RIVA_HW_H__
-#define __RIVA_HW_H__
-#define RIVA_SW_VERSION 0x00010003
-
-#ifndef Bool
-typedef int Bool;
-#endif
-
-#ifndef TRUE
-#define TRUE 1
-#endif
-#ifndef FALSE
-#define FALSE 0
-#endif
-#ifndef NULL
-#define NULL 0
-#endif
-
-/*
- * Typedefs to force certain sized values.
- */
-typedef unsigned char U008;
-typedef unsigned short U016;
-typedef unsigned int U032;
-
-/*
- * HW access macros.
- */
-#include <asm/io.h>
-
-#define NV_WR08(p,i,d) (__raw_writeb((d), (void __iomem *)(p) + (i)))
-#define NV_RD08(p,i) (__raw_readb((void __iomem *)(p) + (i)))
-#define NV_WR16(p,i,d) (__raw_writew((d), (void __iomem *)(p) + (i)))
-#define NV_RD16(p,i) (__raw_readw((void __iomem *)(p) + (i)))
-#define NV_WR32(p,i,d) (__raw_writel((d), (void __iomem *)(p) + (i)))
-#define NV_RD32(p,i) (__raw_readl((void __iomem *)(p) + (i)))
-
-#define VGA_WR08(p,i,d) (writeb((d), (void __iomem *)(p) + (i)))
-#define VGA_RD08(p,i) (readb((void __iomem *)(p) + (i)))
-
-/*
- * Define different architectures.
- */
-#define NV_ARCH_03 0x03
-#define NV_ARCH_04 0x04
-#define NV_ARCH_10 0x10
-#define NV_ARCH_20 0x20
-#define NV_ARCH_30 0x30
-#define NV_ARCH_40 0x40
-
-/***************************************************************************\
-* *
-* FIFO registers. *
-* *
-\***************************************************************************/
-
-/*
- * Raster OPeration. Windows style ROP3.
- */
-typedef volatile struct
-{
- U032 reserved00[4];
-#ifdef __BIG_ENDIAN
- U032 FifoFree;
-#else
- U016 FifoFree;
- U016 Nop;
-#endif
- U032 reserved01[0x0BB];
- U032 Rop3;
-} RivaRop;
-/*
- * 8X8 Monochrome pattern.
- */
-typedef volatile struct
-{
- U032 reserved00[4];
-#ifdef __BIG_ENDIAN
- U032 FifoFree;
-#else
- U016 FifoFree;
- U016 Nop;
-#endif
- U032 reserved01[0x0BD];
- U032 Shape;
- U032 reserved03[0x001];
- U032 Color0;
- U032 Color1;
- U032 Monochrome[2];
-} RivaPattern;
-/*
- * Scissor clip rectangle.
- */
-typedef volatile struct
-{
- U032 reserved00[4];
-#ifdef __BIG_ENDIAN
- U032 FifoFree;
-#else
- U016 FifoFree;
- U016 Nop;
-#endif
- U032 reserved01[0x0BB];
- U032 TopLeft;
- U032 WidthHeight;
-} RivaClip;
-/*
- * 2D filled rectangle.
- */
-typedef volatile struct
-{
- U032 reserved00[4];
-#ifdef __BIG_ENDIAN
- U032 FifoFree;
-#else
- U016 FifoFree;
- U016 Nop[1];
-#endif
- U032 reserved01[0x0BC];
- U032 Color;
- U032 reserved03[0x03E];
- U032 TopLeft;
- U032 WidthHeight;
-} RivaRectangle;
-/*
- * 2D screen-screen BLT.
- */
-typedef volatile struct
-{
- U032 reserved00[4];
-#ifdef __BIG_ENDIAN
- U032 FifoFree;
-#else
- U016 FifoFree;
- U016 Nop;
-#endif
- U032 reserved01[0x0BB];
- U032 TopLeftSrc;
- U032 TopLeftDst;
- U032 WidthHeight;
-} RivaScreenBlt;
-/*
- * 2D pixel BLT.
- */
-typedef volatile struct
-{
- U032 reserved00[4];
-#ifdef __BIG_ENDIAN
- U032 FifoFree;
-#else
- U016 FifoFree;
- U016 Nop[1];
-#endif
- U032 reserved01[0x0BC];
- U032 TopLeft;
- U032 WidthHeight;
- U032 WidthHeightIn;
- U032 reserved02[0x03C];
- U032 Pixels;
-} RivaPixmap;
-/*
- * Filled rectangle combined with monochrome expand. Useful for glyphs.
- */
-typedef volatile struct
-{
- U032 reserved00[4];
-#ifdef __BIG_ENDIAN
- U032 FifoFree;
-#else
- U016 FifoFree;
- U016 Nop;
-#endif
- U032 reserved01[0x0BB];
- U032 reserved03[(0x040)-1];
- U032 Color1A;
- struct
- {
- U032 TopLeft;
- U032 WidthHeight;
- } UnclippedRectangle[64];
- U032 reserved04[(0x080)-3];
- struct
- {
- U032 TopLeft;
- U032 BottomRight;
- } ClipB;
- U032 Color1B;
- struct
- {
- U032 TopLeft;
- U032 BottomRight;
- } ClippedRectangle[64];
- U032 reserved05[(0x080)-5];
- struct
- {
- U032 TopLeft;
- U032 BottomRight;
- } ClipC;
- U032 Color1C;
- U032 WidthHeightC;
- U032 PointC;
- U032 MonochromeData1C;
- U032 reserved06[(0x080)+121];
- struct
- {
- U032 TopLeft;
- U032 BottomRight;
- } ClipD;
- U032 Color1D;
- U032 WidthHeightInD;
- U032 WidthHeightOutD;
- U032 PointD;
- U032 MonochromeData1D;
- U032 reserved07[(0x080)+120];
- struct
- {
- U032 TopLeft;
- U032 BottomRight;
- } ClipE;
- U032 Color0E;
- U032 Color1E;
- U032 WidthHeightInE;
- U032 WidthHeightOutE;
- U032 PointE;
- U032 MonochromeData01E;
-} RivaBitmap;
-/*
- * 3D textured, Z buffered triangle.
- */
-typedef volatile struct
-{
- U032 reserved00[4];
-#ifdef __BIG_ENDIAN
- U032 FifoFree;
-#else
- U016 FifoFree;
- U016 Nop;
-#endif
- U032 reserved01[0x0BC];
- U032 TextureOffset;
- U032 TextureFormat;
- U032 TextureFilter;
- U032 FogColor;
-/* This is a problem on LynxOS */
-#ifdef Control
-#undef Control
-#endif
- U032 Control;
- U032 AlphaTest;
- U032 reserved02[0x339];
- U032 FogAndIndex;
- U032 Color;
- float ScreenX;
- float ScreenY;
- float ScreenZ;
- float EyeM;
- float TextureS;
- float TextureT;
-} RivaTexturedTriangle03;
-typedef volatile struct
-{
- U032 reserved00[4];
-#ifdef __BIG_ENDIAN
- U032 FifoFree;
-#else
- U016 FifoFree;
- U016 Nop;
-#endif
- U032 reserved01[0x0BB];
- U032 ColorKey;
- U032 TextureOffset;
- U032 TextureFormat;
- U032 TextureFilter;
- U032 Blend;
-/* This is a problem on LynxOS */
-#ifdef Control
-#undef Control
-#endif
- U032 Control;
- U032 FogColor;
- U032 reserved02[0x39];
- struct
- {
- float ScreenX;
- float ScreenY;
- float ScreenZ;
- float EyeM;
- U032 Color;
- U032 Specular;
- float TextureS;
- float TextureT;
- } Vertex[16];
- U032 DrawTriangle3D;
-} RivaTexturedTriangle05;
-/*
- * 2D line.
- */
-typedef volatile struct
-{
- U032 reserved00[4];
-#ifdef __BIG_ENDIAN
- U032 FifoFree;
-#else
- U016 FifoFree;
- U016 Nop[1];
-#endif
- U032 reserved01[0x0BC];
- U032 Color; /* source color 0304-0307*/
- U032 Reserved02[0x03e];
- struct { /* start aliased methods in array 0400- */
- U032 point0; /* y_x S16_S16 in pixels 0- 3*/
- U032 point1; /* y_x S16_S16 in pixels 4- 7*/
- } Lin[16]; /* end of aliased methods in array -047f*/
- struct { /* start aliased methods in array 0480- */
- U032 point0X; /* in pixels, 0 at left 0- 3*/
- U032 point0Y; /* in pixels, 0 at top 4- 7*/
- U032 point1X; /* in pixels, 0 at left 8- b*/
- U032 point1Y; /* in pixels, 0 at top c- f*/
- } Lin32[8]; /* end of aliased methods in array -04ff*/
- U032 PolyLin[32]; /* y_x S16_S16 in pixels 0500-057f*/
- struct { /* start aliased methods in array 0580- */
- U032 x; /* in pixels, 0 at left 0- 3*/
- U032 y; /* in pixels, 0 at top 4- 7*/
- } PolyLin32[16]; /* end of aliased methods in array -05ff*/
- struct { /* start aliased methods in array 0600- */
- U032 color; /* source color 0- 3*/
- U032 point; /* y_x S16_S16 in pixels 4- 7*/
- } ColorPolyLin[16]; /* end of aliased methods in array -067f*/
-} RivaLine;
-/*
- * 2D/3D surfaces
- */
-typedef volatile struct
-{
- U032 reserved00[4];
-#ifdef __BIG_ENDIAN
- U032 FifoFree;
-#else
- U016 FifoFree;
- U016 Nop;
-#endif
- U032 reserved01[0x0BE];
- U032 Offset;
-} RivaSurface;
-typedef volatile struct
-{
- U032 reserved00[4];
-#ifdef __BIG_ENDIAN
- U032 FifoFree;
-#else
- U016 FifoFree;
- U016 Nop;
-#endif
- U032 reserved01[0x0BD];
- U032 Pitch;
- U032 RenderBufferOffset;
- U032 ZBufferOffset;
-} RivaSurface3D;
-
-/***************************************************************************\
-* *
-* Virtualized RIVA H/W interface. *
-* *
-\***************************************************************************/
-
-#define FP_ENABLE 1
-#define FP_DITHER 2
-
-struct _riva_hw_inst;
-struct _riva_hw_state;
-/*
- * Virtialized chip interface. Makes RIVA 128 and TNT look alike.
- */
-typedef struct _riva_hw_inst
-{
- /*
- * Chip specific settings.
- */
- U032 Architecture;
- U032 Version;
- U032 Chipset;
- U032 CrystalFreqKHz;
- U032 RamAmountKBytes;
- U032 MaxVClockFreqKHz;
- U032 RamBandwidthKBytesPerSec;
- U032 EnableIRQ;
- U032 IO;
- U032 VBlankBit;
- U032 FifoFreeCount;
- U032 FifoEmptyCount;
- U032 CursorStart;
- U032 flatPanel;
- Bool twoHeads;
- /*
- * Non-FIFO registers.
- */
- volatile U032 __iomem *PCRTC0;
- volatile U032 __iomem *PCRTC;
- volatile U032 __iomem *PRAMDAC0;
- volatile U032 __iomem *PFB;
- volatile U032 __iomem *PFIFO;
- volatile U032 __iomem *PGRAPH;
- volatile U032 __iomem *PEXTDEV;
- volatile U032 __iomem *PTIMER;
- volatile U032 __iomem *PMC;
- volatile U032 __iomem *PRAMIN;
- volatile U032 __iomem *FIFO;
- volatile U032 __iomem *CURSOR;
- volatile U008 __iomem *PCIO0;
- volatile U008 __iomem *PCIO;
- volatile U008 __iomem *PVIO;
- volatile U008 __iomem *PDIO0;
- volatile U008 __iomem *PDIO;
- volatile U032 __iomem *PRAMDAC;
- /*
- * Common chip functions.
- */
- int (*Busy)(struct _riva_hw_inst *);
- void (*LoadStateExt)(struct _riva_hw_inst *,struct _riva_hw_state *);
- void (*UnloadStateExt)(struct _riva_hw_inst *,struct _riva_hw_state *);
- void (*SetStartAddress)(struct _riva_hw_inst *,U032);
- void (*SetSurfaces2D)(struct _riva_hw_inst *,U032,U032);
- void (*SetSurfaces3D)(struct _riva_hw_inst *,U032,U032);
- int (*ShowHideCursor)(struct _riva_hw_inst *,int);
- void (*LockUnlock)(struct _riva_hw_inst *, int);
- /*
- * Current extended mode settings.
- */
- struct _riva_hw_state *CurrentState;
- /*
- * FIFO registers.
- */
- RivaRop __iomem *Rop;
- RivaPattern __iomem *Patt;
- RivaClip __iomem *Clip;
- RivaPixmap __iomem *Pixmap;
- RivaScreenBlt __iomem *Blt;
- RivaBitmap __iomem *Bitmap;
- RivaLine __iomem *Line;
- RivaTexturedTriangle03 __iomem *Tri03;
- RivaTexturedTriangle05 __iomem *Tri05;
-} RIVA_HW_INST;
-/*
- * Extended mode state information.
- */
-typedef struct _riva_hw_state
-{
- U032 bpp;
- U032 width;
- U032 height;
- U032 interlace;
- U032 repaint0;
- U032 repaint1;
- U032 screen;
- U032 scale;
- U032 dither;
- U032 extra;
- U032 pixel;
- U032 horiz;
- U032 arbitration0;
- U032 arbitration1;
- U032 vpll;
- U032 vpll2;
- U032 pllsel;
- U032 general;
- U032 crtcOwner;
- U032 head;
- U032 head2;
- U032 config;
- U032 cursorConfig;
- U032 cursor0;
- U032 cursor1;
- U032 cursor2;
- U032 offset0;
- U032 offset1;
- U032 offset2;
- U032 offset3;
- U032 pitch0;
- U032 pitch1;
- U032 pitch2;
- U032 pitch3;
-} RIVA_HW_STATE;
-
-/*
- * function prototypes
- */
-
-extern int CalcStateExt
-(
- RIVA_HW_INST *chip,
- RIVA_HW_STATE *state,
- struct pci_dev *pdev,
- int bpp,
- int width,
- int hDisplaySize,
- int height,
- int dotClock
-);
-
-/*
- * External routines.
- */
-int RivaGetConfig(RIVA_HW_INST *chip, struct pci_dev *pdev, unsigned int c);
-/*
- * FIFO Free Count. Should attempt to yield processor if RIVA is busy.
- */
-
-#define RIVA_FIFO_FREE(hwinst,hwptr,cnt) \
-{ \
- while ((hwinst).FifoFreeCount < (cnt)) { \
- mb();mb(); \
- (hwinst).FifoFreeCount = NV_RD32(&(hwinst).hwptr->FifoFree, 0) >> 2; \
- } \
- (hwinst).FifoFreeCount -= (cnt); \
-}
-#endif /* __RIVA_HW_H__ */
-
diff --git a/drivers/video/fbdev/riva/riva_tbl.h b/drivers/video/fbdev/riva/riva_tbl.h
deleted file mode 100644
index 7ee7d72932d4..000000000000
--- a/drivers/video/fbdev/riva/riva_tbl.h
+++ /dev/null
@@ -1,1008 +0,0 @@
- /***************************************************************************\
-|* *|
-|* Copyright 1993-1999 NVIDIA, Corporation. All rights reserved. *|
-|* *|
-|* NOTICE TO USER: The source code is copyrighted under U.S. and *|
-|* international laws. Users and possessors of this source code are *|
-|* hereby granted a nonexclusive, royalty-free copyright license to *|
-|* use this code in individual and commercial software. *|
-|* *|
-|* Any use of this source code must include, in the user documenta- *|
-|* tion and internal comments to the code, notices to the end user *|
-|* as follows: *|
-|* *|
-|* Copyright 1993-1999 NVIDIA, Corporation. All rights reserved. *|
-|* *|
-|* NVIDIA, CORPORATION MAKES NO REPRESENTATION ABOUT THE SUITABILITY *|
-|* OF THIS SOURCE CODE FOR ANY PURPOSE. IT IS PROVIDED "AS IS" *|
-|* WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND. NVIDIA, CORPOR- *|
-|* ATION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOURCE CODE, *|
-|* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGE- *|
-|* MENT, AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL *|
-|* NVIDIA, CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT, INCI- *|
-|* DENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RE- *|
-|* SULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION *|
-|* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF *|
-|* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOURCE CODE. *|
-|* *|
-|* U.S. Government End Users. This source code is a "commercial *|
-|* item," as that term is defined at 48 C.F.R. 2.101 (OCT 1995), *|
-|* consisting of "commercial computer software" and "commercial *|
-|* computer software documentation," as such terms are used in *|
-|* 48 C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Govern- *|
-|* ment only as a commercial end item. Consistent with 48 C.F.R. *|
-|* 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), *|
-|* all U.S. Government End Users acquire the source code with only *|
-|* those rights set forth herein. *|
-|* *|
- \***************************************************************************/
-
-/*
- * GPL licensing note -- nVidia is allowing a liberal interpretation of
- * the documentation restriction above, to merely say that this nVidia's
- * copyright and disclaimer should be included with all code derived
- * from this source. -- Jeff Garzik <jgarzik@pobox.com>, 01/Nov/99
- */
-
-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/riva_tbl.h,v 1.9 2002/01/30 01:35:03 mvojkovi Exp $ */
-
-
-/*
- * RIVA Fixed Functionality Init Tables.
- */
-static unsigned RivaTablePMC[][2] =
-{
- {0x00000050, 0x00000000},
- {0x00000080, 0xFFFF00FF},
- {0x00000080, 0xFFFFFFFF}
-};
-static unsigned RivaTablePTIMER[][2] =
-{
- {0x00000080, 0x00000008},
- {0x00000084, 0x00000003},
- {0x00000050, 0x00000000},
- {0x00000040, 0xFFFFFFFF}
-};
-static unsigned RivaTableFIFO[][2] =
-{
- {0x00000000, 0x80000000},
- {0x00000800, 0x80000001},
- {0x00001000, 0x80000002},
- {0x00001800, 0x80000010},
- {0x00002000, 0x80000011},
- {0x00002800, 0x80000012},
- {0x00003000, 0x80000016},
- {0x00003800, 0x80000013}
-};
-static unsigned nv3TablePFIFO[][2] =
-{
- {0x00000140, 0x00000000},
- {0x00000480, 0x00000000},
- {0x00000490, 0x00000000},
- {0x00000494, 0x00000000},
- {0x00000481, 0x00000000},
- {0x00000084, 0x00000000},
- {0x00000086, 0x00002000},
- {0x00000085, 0x00002200},
- {0x00000484, 0x00000000},
- {0x0000049C, 0x00000000},
- {0x00000104, 0x00000000},
- {0x00000108, 0x00000000},
- {0x00000100, 0x00000000},
- {0x000004A0, 0x00000000},
- {0x000004A4, 0x00000000},
- {0x000004A8, 0x00000000},
- {0x000004AC, 0x00000000},
- {0x000004B0, 0x00000000},
- {0x000004B4, 0x00000000},
- {0x000004B8, 0x00000000},
- {0x000004BC, 0x00000000},
- {0x00000050, 0x00000000},
- {0x00000040, 0xFFFFFFFF},
- {0x00000480, 0x00000001},
- {0x00000490, 0x00000001},
- {0x00000140, 0x00000001}
-};
-static unsigned nv3TablePGRAPH[][2] =
-{
- {0x00000020, 0x1230001F},
- {0x00000021, 0x10113000},
- {0x00000022, 0x1131F101},
- {0x00000023, 0x0100F531},
- {0x00000060, 0x00000000},
- {0x00000065, 0x00000000},
- {0x00000068, 0x00000000},
- {0x00000069, 0x00000000},
- {0x0000006A, 0x00000000},
- {0x0000006B, 0x00000000},
- {0x0000006C, 0x00000000},
- {0x0000006D, 0x00000000},
- {0x0000006E, 0x00000000},
- {0x0000006F, 0x00000000},
- {0x000001A8, 0x00000000},
- {0x00000440, 0xFFFFFFFF},
- {0x00000480, 0x00000001},
- {0x000001A0, 0x00000000},
- {0x000001A2, 0x00000000},
- {0x0000018A, 0xFFFFFFFF},
- {0x00000190, 0x00000000},
- {0x00000142, 0x00000000},
- {0x00000154, 0x00000000},
- {0x00000155, 0xFFFFFFFF},
- {0x00000156, 0x00000000},
- {0x00000157, 0xFFFFFFFF},
- {0x00000064, 0x10010002},
- {0x00000050, 0x00000000},
- {0x00000051, 0x00000000},
- {0x00000040, 0xFFFFFFFF},
- {0x00000041, 0xFFFFFFFF},
- {0x00000440, 0xFFFFFFFF},
- {0x000001A9, 0x00000001}
-};
-static unsigned nv3TablePGRAPH_8BPP[][2] =
-{
- {0x000001AA, 0x00001111}
-};
-static unsigned nv3TablePGRAPH_15BPP[][2] =
-{
- {0x000001AA, 0x00002222}
-};
-static unsigned nv3TablePGRAPH_32BPP[][2] =
-{
- {0x000001AA, 0x00003333}
-};
-static unsigned nv3TablePRAMIN[][2] =
-{
- {0x00000500, 0x00010000},
- {0x00000501, 0x007FFFFF},
- {0x00000200, 0x80000000},
- {0x00000201, 0x00C20341},
- {0x00000204, 0x80000001},
- {0x00000205, 0x00C50342},
- {0x00000208, 0x80000002},
- {0x00000209, 0x00C60343},
- {0x0000020C, 0x80000003},
- {0x0000020D, 0x00DC0348},
- {0x00000210, 0x80000004},
- {0x00000211, 0x00DC0349},
- {0x00000214, 0x80000005},
- {0x00000215, 0x00DC034A},
- {0x00000218, 0x80000006},
- {0x00000219, 0x00DC034B},
- {0x00000240, 0x80000010},
- {0x00000241, 0x00D10344},
- {0x00000244, 0x80000011},
- {0x00000245, 0x00D00345},
- {0x00000248, 0x80000012},
- {0x00000249, 0x00CC0346},
- {0x0000024C, 0x80000013},
- {0x0000024D, 0x00D70347},
- {0x00000258, 0x80000016},
- {0x00000259, 0x00CA034C},
- {0x00000D05, 0x00000000},
- {0x00000D06, 0x00000000},
- {0x00000D07, 0x00000000},
- {0x00000D09, 0x00000000},
- {0x00000D0A, 0x00000000},
- {0x00000D0B, 0x00000000},
- {0x00000D0D, 0x00000000},
- {0x00000D0E, 0x00000000},
- {0x00000D0F, 0x00000000},
- {0x00000D11, 0x00000000},
- {0x00000D12, 0x00000000},
- {0x00000D13, 0x00000000},
- {0x00000D15, 0x00000000},
- {0x00000D16, 0x00000000},
- {0x00000D17, 0x00000000},
- {0x00000D19, 0x00000000},
- {0x00000D1A, 0x00000000},
- {0x00000D1B, 0x00000000},
- {0x00000D1D, 0x00000140},
- {0x00000D1E, 0x00000000},
- {0x00000D1F, 0x00000000},
- {0x00000D20, 0x10100200},
- {0x00000D21, 0x00000000},
- {0x00000D22, 0x00000000},
- {0x00000D23, 0x00000000},
- {0x00000D24, 0x10210200},
- {0x00000D25, 0x00000000},
- {0x00000D26, 0x00000000},
- {0x00000D27, 0x00000000},
- {0x00000D28, 0x10420200},
- {0x00000D29, 0x00000000},
- {0x00000D2A, 0x00000000},
- {0x00000D2B, 0x00000000},
- {0x00000D2C, 0x10830200},
- {0x00000D2D, 0x00000000},
- {0x00000D2E, 0x00000000},
- {0x00000D2F, 0x00000000},
- {0x00000D31, 0x00000000},
- {0x00000D32, 0x00000000},
- {0x00000D33, 0x00000000}
-};
-static unsigned nv3TablePRAMIN_8BPP[][2] =
-{
- /* 0xXXXXX3XX For MSB mono format */
- /* 0xXXXXX2XX For LSB mono format */
- {0x00000D04, 0x10110203},
- {0x00000D08, 0x10110203},
- {0x00000D0C, 0x1011020B},
- {0x00000D10, 0x10118203},
- {0x00000D14, 0x10110203},
- {0x00000D18, 0x10110203},
- {0x00000D1C, 0x10419208},
- {0x00000D30, 0x10118203}
-};
-static unsigned nv3TablePRAMIN_15BPP[][2] =
-{
- /* 0xXXXXX2XX For MSB mono format */
- /* 0xXXXXX3XX For LSB mono format */
- {0x00000D04, 0x10110200},
- {0x00000D08, 0x10110200},
- {0x00000D0C, 0x10110208},
- {0x00000D10, 0x10118200},
- {0x00000D14, 0x10110200},
- {0x00000D18, 0x10110200},
- {0x00000D1C, 0x10419208},
- {0x00000D30, 0x10118200}
-};
-static unsigned nv3TablePRAMIN_32BPP[][2] =
-{
- /* 0xXXXXX3XX For MSB mono format */
- /* 0xXXXXX2XX For LSB mono format */
- {0x00000D04, 0x10110201},
- {0x00000D08, 0x10110201},
- {0x00000D0C, 0x10110209},
- {0x00000D10, 0x10118201},
- {0x00000D14, 0x10110201},
- {0x00000D18, 0x10110201},
- {0x00000D1C, 0x10419208},
- {0x00000D30, 0x10118201}
-};
-static unsigned nv4TableFIFO[][2] =
-{
- {0x00003800, 0x80000014}
-};
-static unsigned nv4TablePFIFO[][2] =
-{
- {0x00000140, 0x00000000},
- {0x00000480, 0x00000000},
- {0x00000494, 0x00000000},
- {0x00000481, 0x00000000},
- {0x0000048B, 0x00000000},
- {0x00000400, 0x00000000},
- {0x00000414, 0x00000000},
- {0x00000084, 0x03000100},
- {0x00000085, 0x00000110},
- {0x00000086, 0x00000112},
- {0x00000143, 0x0000FFFF},
- {0x00000496, 0x0000FFFF},
- {0x00000050, 0x00000000},
- {0x00000040, 0xFFFFFFFF},
- {0x00000415, 0x00000001},
- {0x00000480, 0x00000001},
- {0x00000494, 0x00000001},
- {0x00000495, 0x00000001},
- {0x00000140, 0x00000001}
-};
-static unsigned nv4TablePGRAPH[][2] =
-{
- {0x00000020, 0x1231C001},
- {0x00000021, 0x72111101},
- {0x00000022, 0x11D5F071},
- {0x00000023, 0x10D4FF31},
- {0x00000060, 0x00000000},
- {0x00000068, 0x00000000},
- {0x00000070, 0x00000000},
- {0x00000078, 0x00000000},
- {0x00000061, 0x00000000},
- {0x00000069, 0x00000000},
- {0x00000071, 0x00000000},
- {0x00000079, 0x00000000},
- {0x00000062, 0x00000000},
- {0x0000006A, 0x00000000},
- {0x00000072, 0x00000000},
- {0x0000007A, 0x00000000},
- {0x00000063, 0x00000000},
- {0x0000006B, 0x00000000},
- {0x00000073, 0x00000000},
- {0x0000007B, 0x00000000},
- {0x00000064, 0x00000000},
- {0x0000006C, 0x00000000},
- {0x00000074, 0x00000000},
- {0x0000007C, 0x00000000},
- {0x00000065, 0x00000000},
- {0x0000006D, 0x00000000},
- {0x00000075, 0x00000000},
- {0x0000007D, 0x00000000},
- {0x00000066, 0x00000000},
- {0x0000006E, 0x00000000},
- {0x00000076, 0x00000000},
- {0x0000007E, 0x00000000},
- {0x00000067, 0x00000000},
- {0x0000006F, 0x00000000},
- {0x00000077, 0x00000000},
- {0x0000007F, 0x00000000},
- {0x00000058, 0x00000000},
- {0x00000059, 0x00000000},
- {0x0000005A, 0x00000000},
- {0x0000005B, 0x00000000},
- {0x00000196, 0x00000000},
- {0x000001A1, 0x01FFFFFF},
- {0x00000197, 0x00000000},
- {0x000001A2, 0x01FFFFFF},
- {0x00000198, 0x00000000},
- {0x000001A3, 0x01FFFFFF},
- {0x00000199, 0x00000000},
- {0x000001A4, 0x01FFFFFF},
- {0x00000050, 0x00000000},
- {0x00000040, 0xFFFFFFFF},
- {0x0000005C, 0x10010100},
- {0x000001C4, 0xFFFFFFFF},
- {0x000001C8, 0x00000001},
- {0x00000204, 0x00000000},
- {0x000001C3, 0x00000001}
-};
-static unsigned nv4TablePGRAPH_8BPP[][2] =
-{
- {0x000001C9, 0x00111111},
- {0x00000186, 0x00001010},
- {0x0000020C, 0x03020202}
-};
-static unsigned nv4TablePGRAPH_15BPP[][2] =
-{
- {0x000001C9, 0x00226222},
- {0x00000186, 0x00002071},
- {0x0000020C, 0x09080808}
-};
-static unsigned nv4TablePGRAPH_16BPP[][2] =
-{
- {0x000001C9, 0x00556555},
- {0x00000186, 0x000050C2},
- {0x0000020C, 0x0C0B0B0B}
-};
-static unsigned nv4TablePGRAPH_32BPP[][2] =
-{
- {0x000001C9, 0x0077D777},
- {0x00000186, 0x000070E5},
- {0x0000020C, 0x0E0D0D0D}
-};
-static unsigned nv4TablePRAMIN[][2] =
-{
- {0x00000000, 0x80000010},
- {0x00000001, 0x80011145},
- {0x00000002, 0x80000011},
- {0x00000003, 0x80011146},
- {0x00000004, 0x80000012},
- {0x00000005, 0x80011147},
- {0x00000006, 0x80000013},
- {0x00000007, 0x80011148},
- {0x00000008, 0x80000014},
- {0x00000009, 0x80011149},
- {0x0000000A, 0x80000015},
- {0x0000000B, 0x8001114A},
- {0x0000000C, 0x80000016},
- {0x0000000D, 0x8001114F},
- {0x00000020, 0x80000000},
- {0x00000021, 0x80011142},
- {0x00000022, 0x80000001},
- {0x00000023, 0x80011143},
- {0x00000024, 0x80000002},
- {0x00000025, 0x80011144},
- {0x00000026, 0x80000003},
- {0x00000027, 0x8001114B},
- {0x00000028, 0x80000004},
- {0x00000029, 0x8001114C},
- {0x0000002A, 0x80000005},
- {0x0000002B, 0x8001114D},
- {0x0000002C, 0x80000006},
- {0x0000002D, 0x8001114E},
- {0x00000500, 0x00003000},
- {0x00000501, 0x01FFFFFF},
- {0x00000502, 0x00000002},
- {0x00000503, 0x00000002},
- {0x00000508, 0x01008043},
- {0x0000050A, 0x00000000},
- {0x0000050B, 0x00000000},
- {0x0000050C, 0x01008019},
- {0x0000050E, 0x00000000},
- {0x0000050F, 0x00000000},
-#if 1
- {0x00000510, 0x01008018},
-#else
- {0x00000510, 0x01008044},
-#endif
- {0x00000512, 0x00000000},
- {0x00000513, 0x00000000},
- {0x00000514, 0x01008021},
- {0x00000516, 0x00000000},
- {0x00000517, 0x00000000},
- {0x00000518, 0x0100805F},
- {0x0000051A, 0x00000000},
- {0x0000051B, 0x00000000},
-#if 1
- {0x0000051C, 0x0100804B},
-#else
- {0x0000051C, 0x0100804A},
-#endif
- {0x0000051E, 0x00000000},
- {0x0000051F, 0x00000000},
- {0x00000520, 0x0100A048},
- {0x00000521, 0x00000D01},
- {0x00000522, 0x11401140},
- {0x00000523, 0x00000000},
- {0x00000524, 0x0300A054},
- {0x00000525, 0x00000D01},
- {0x00000526, 0x11401140},
- {0x00000527, 0x00000000},
- {0x00000528, 0x0300A055},
- {0x00000529, 0x00000D01},
- {0x0000052A, 0x11401140},
- {0x0000052B, 0x00000000},
- {0x0000052C, 0x00000058},
- {0x0000052E, 0x11401140},
- {0x0000052F, 0x00000000},
- {0x00000530, 0x00000059},
- {0x00000532, 0x11401140},
- {0x00000533, 0x00000000},
- {0x00000534, 0x0000005A},
- {0x00000536, 0x11401140},
- {0x00000537, 0x00000000},
- {0x00000538, 0x0000005B},
- {0x0000053A, 0x11401140},
- {0x0000053B, 0x00000000},
- {0x0000053C, 0x0300A01C},
- {0x0000053E, 0x11401140},
- {0x0000053F, 0x00000000}
-};
-static unsigned nv4TablePRAMIN_8BPP[][2] =
-{
- /* 0xXXXXXX01 For MSB mono format */
- /* 0xXXXXXX02 For LSB mono format */
- {0x00000509, 0x00000302},
- {0x0000050D, 0x00000302},
- {0x00000511, 0x00000202},
- {0x00000515, 0x00000302},
- {0x00000519, 0x00000302},
- {0x0000051D, 0x00000302},
- {0x0000052D, 0x00000302},
- {0x0000052E, 0x00000302},
- {0x00000535, 0x00000000},
- {0x00000539, 0x00000000},
- {0x0000053D, 0x00000302}
-};
-static unsigned nv4TablePRAMIN_15BPP[][2] =
-{
- /* 0xXXXXXX01 For MSB mono format */
- /* 0xXXXXXX02 For LSB mono format */
- {0x00000509, 0x00000902},
- {0x0000050D, 0x00000902},
- {0x00000511, 0x00000802},
- {0x00000515, 0x00000902},
- {0x00000519, 0x00000902},
- {0x0000051D, 0x00000902},
- {0x0000052D, 0x00000902},
- {0x0000052E, 0x00000902},
- {0x00000535, 0x00000702},
- {0x00000539, 0x00000702},
- {0x0000053D, 0x00000902}
-};
-static unsigned nv4TablePRAMIN_16BPP[][2] =
-{
- /* 0xXXXXXX01 For MSB mono format */
- /* 0xXXXXXX02 For LSB mono format */
- {0x00000509, 0x00000C02},
- {0x0000050D, 0x00000C02},
- {0x00000511, 0x00000B02},
- {0x00000515, 0x00000C02},
- {0x00000519, 0x00000C02},
- {0x0000051D, 0x00000C02},
- {0x0000052D, 0x00000C02},
- {0x0000052E, 0x00000C02},
- {0x00000535, 0x00000702},
- {0x00000539, 0x00000702},
- {0x0000053D, 0x00000C02}
-};
-static unsigned nv4TablePRAMIN_32BPP[][2] =
-{
- /* 0xXXXXXX01 For MSB mono format */
- /* 0xXXXXXX02 For LSB mono format */
- {0x00000509, 0x00000E02},
- {0x0000050D, 0x00000E02},
- {0x00000511, 0x00000D02},
- {0x00000515, 0x00000E02},
- {0x00000519, 0x00000E02},
- {0x0000051D, 0x00000E02},
- {0x0000052D, 0x00000E02},
- {0x0000052E, 0x00000E02},
- {0x00000535, 0x00000E02},
- {0x00000539, 0x00000E02},
- {0x0000053D, 0x00000E02}
-};
-static unsigned nv10TableFIFO[][2] =
-{
- {0x00003800, 0x80000014}
-};
-static unsigned nv10TablePFIFO[][2] =
-{
- {0x00000140, 0x00000000},
- {0x00000480, 0x00000000},
- {0x00000494, 0x00000000},
- {0x00000481, 0x00000000},
- {0x0000048B, 0x00000000},
- {0x00000400, 0x00000000},
- {0x00000414, 0x00000000},
- {0x00000084, 0x03000100},
- {0x00000085, 0x00000110},
- {0x00000086, 0x00000112},
- {0x00000143, 0x0000FFFF},
- {0x00000496, 0x0000FFFF},
- {0x00000050, 0x00000000},
- {0x00000040, 0xFFFFFFFF},
- {0x00000415, 0x00000001},
- {0x00000480, 0x00000001},
- {0x00000494, 0x00000001},
- {0x00000495, 0x00000001},
- {0x00000140, 0x00000001}
-};
-static unsigned nv10TablePGRAPH[][2] =
-{
- {0x00000020, 0x0003FFFF},
- {0x00000021, 0x00118701},
- {0x00000022, 0x24F82AD9},
- {0x00000023, 0x55DE0030},
- {0x00000020, 0x00000000},
- {0x00000024, 0x00000000},
- {0x00000058, 0x00000000},
- {0x00000060, 0x00000000},
- {0x00000068, 0x00000000},
- {0x00000070, 0x00000000},
- {0x00000078, 0x00000000},
- {0x00000059, 0x00000000},
- {0x00000061, 0x00000000},
- {0x00000069, 0x00000000},
- {0x00000071, 0x00000000},
- {0x00000079, 0x00000000},
- {0x0000005A, 0x00000000},
- {0x00000062, 0x00000000},
- {0x0000006A, 0x00000000},
- {0x00000072, 0x00000000},
- {0x0000007A, 0x00000000},
- {0x0000005B, 0x00000000},
- {0x00000063, 0x00000000},
- {0x0000006B, 0x00000000},
- {0x00000073, 0x00000000},
- {0x0000007B, 0x00000000},
- {0x0000005C, 0x00000000},
- {0x00000064, 0x00000000},
- {0x0000006C, 0x00000000},
- {0x00000074, 0x00000000},
- {0x0000007C, 0x00000000},
- {0x0000005D, 0x00000000},
- {0x00000065, 0x00000000},
- {0x0000006D, 0x00000000},
- {0x00000075, 0x00000000},
- {0x0000007D, 0x00000000},
- {0x0000005E, 0x00000000},
- {0x00000066, 0x00000000},
- {0x0000006E, 0x00000000},
- {0x00000076, 0x00000000},
- {0x0000007E, 0x00000000},
- {0x0000005F, 0x00000000},
- {0x00000067, 0x00000000},
- {0x0000006F, 0x00000000},
- {0x00000077, 0x00000000},
- {0x0000007F, 0x00000000},
- {0x00000053, 0x00000000},
- {0x00000054, 0x00000000},
- {0x00000055, 0x00000000},
- {0x00000056, 0x00000000},
- {0x00000057, 0x00000000},
- {0x00000196, 0x00000000},
- {0x000001A1, 0x01FFFFFF},
- {0x00000197, 0x00000000},
- {0x000001A2, 0x01FFFFFF},
- {0x00000198, 0x00000000},
- {0x000001A3, 0x01FFFFFF},
- {0x00000199, 0x00000000},
- {0x000001A4, 0x01FFFFFF},
- {0x0000019A, 0x00000000},
- {0x000001A5, 0x01FFFFFF},
- {0x0000019B, 0x00000000},
- {0x000001A6, 0x01FFFFFF},
- {0x00000050, 0x01111111},
- {0x00000040, 0xFFFFFFFF},
- {0x00000051, 0x10010100},
- {0x000001C5, 0xFFFFFFFF},
- {0x000001C8, 0x00000001},
- {0x00000204, 0x00000000},
- {0x000001C4, 0x00000001}
-};
-static unsigned nv10TablePGRAPH_8BPP[][2] =
-{
- {0x000001C9, 0x00111111},
- {0x00000186, 0x00001010},
- {0x0000020C, 0x03020202}
-};
-static unsigned nv10TablePGRAPH_15BPP[][2] =
-{
- {0x000001C9, 0x00226222},
- {0x00000186, 0x00002071},
- {0x0000020C, 0x09080808}
-};
-static unsigned nv10TablePGRAPH_16BPP[][2] =
-{
- {0x000001C9, 0x00556555},
- {0x00000186, 0x000050C2},
- {0x0000020C, 0x000B0B0C}
-};
-static unsigned nv10TablePGRAPH_32BPP[][2] =
-{
- {0x000001C9, 0x0077D777},
- {0x00000186, 0x000070E5},
- {0x0000020C, 0x0E0D0D0D}
-};
-static unsigned nv10tri05TablePGRAPH[][2] =
-{
- {(0x00000E00/4), 0x00000000},
- {(0x00000E04/4), 0x00000000},
- {(0x00000E08/4), 0x00000000},
- {(0x00000E0C/4), 0x00000000},
- {(0x00000E10/4), 0x00001000},
- {(0x00000E14/4), 0x00001000},
- {(0x00000E18/4), 0x4003ff80},
- {(0x00000E1C/4), 0x00000000},
- {(0x00000E20/4), 0x00000000},
- {(0x00000E24/4), 0x00000000},
- {(0x00000E28/4), 0x00000000},
- {(0x00000E2C/4), 0x00000000},
- {(0x00000E30/4), 0x00080008},
- {(0x00000E34/4), 0x00080008},
- {(0x00000E38/4), 0x00000000},
- {(0x00000E3C/4), 0x00000000},
- {(0x00000E40/4), 0x00000000},
- {(0x00000E44/4), 0x00000000},
- {(0x00000E48/4), 0x00000000},
- {(0x00000E4C/4), 0x00000000},
- {(0x00000E50/4), 0x00000000},
- {(0x00000E54/4), 0x00000000},
- {(0x00000E58/4), 0x00000000},
- {(0x00000E5C/4), 0x00000000},
- {(0x00000E60/4), 0x00000000},
- {(0x00000E64/4), 0x10000000},
- {(0x00000E68/4), 0x00000000},
- {(0x00000E6C/4), 0x00000000},
- {(0x00000E70/4), 0x00000000},
- {(0x00000E74/4), 0x00000000},
- {(0x00000E78/4), 0x00000000},
- {(0x00000E7C/4), 0x00000000},
- {(0x00000E80/4), 0x00000000},
- {(0x00000E84/4), 0x00000000},
- {(0x00000E88/4), 0x08000000},
- {(0x00000E8C/4), 0x00000000},
- {(0x00000E90/4), 0x00000000},
- {(0x00000E94/4), 0x00000000},
- {(0x00000E98/4), 0x00000000},
- {(0x00000E9C/4), 0x4B7FFFFF},
- {(0x00000EA0/4), 0x00000000},
- {(0x00000EA4/4), 0x00000000},
- {(0x00000EA8/4), 0x00000000},
- {(0x00000F00/4), 0x07FF0800},
- {(0x00000F04/4), 0x07FF0800},
- {(0x00000F08/4), 0x07FF0800},
- {(0x00000F0C/4), 0x07FF0800},
- {(0x00000F10/4), 0x07FF0800},
- {(0x00000F14/4), 0x07FF0800},
- {(0x00000F18/4), 0x07FF0800},
- {(0x00000F1C/4), 0x07FF0800},
- {(0x00000F20/4), 0x07FF0800},
- {(0x00000F24/4), 0x07FF0800},
- {(0x00000F28/4), 0x07FF0800},
- {(0x00000F2C/4), 0x07FF0800},
- {(0x00000F30/4), 0x07FF0800},
- {(0x00000F34/4), 0x07FF0800},
- {(0x00000F38/4), 0x07FF0800},
- {(0x00000F3C/4), 0x07FF0800},
- {(0x00000F40/4), 0x10000000},
- {(0x00000F44/4), 0x00000000},
- {(0x00000F50/4), 0x00006740},
- {(0x00000F54/4), 0x00000000},
- {(0x00000F54/4), 0x00000000},
- {(0x00000F54/4), 0x00000000},
- {(0x00000F54/4), 0x3F800000},
- {(0x00000F50/4), 0x00006750},
- {(0x00000F54/4), 0x40000000},
- {(0x00000F54/4), 0x40000000},
- {(0x00000F54/4), 0x40000000},
- {(0x00000F54/4), 0x40000000},
- {(0x00000F50/4), 0x00006760},
- {(0x00000F54/4), 0x00000000},
- {(0x00000F54/4), 0x00000000},
- {(0x00000F54/4), 0x3F800000},
- {(0x00000F54/4), 0x00000000},
- {(0x00000F50/4), 0x00006770},
- {(0x00000F54/4), 0xC5000000},
- {(0x00000F54/4), 0xC5000000},
- {(0x00000F54/4), 0x00000000},
- {(0x00000F54/4), 0x00000000},
- {(0x00000F50/4), 0x00006780},
- {(0x00000F54/4), 0x00000000},
- {(0x00000F54/4), 0x00000000},
- {(0x00000F54/4), 0x3F800000},
- {(0x00000F54/4), 0x00000000},
- {(0x00000F50/4), 0x000067A0},
- {(0x00000F54/4), 0x3F800000},
- {(0x00000F54/4), 0x3F800000},
- {(0x00000F54/4), 0x3F800000},
- {(0x00000F54/4), 0x3F800000},
- {(0x00000F50/4), 0x00006AB0},
- {(0x00000F54/4), 0x3F800000},
- {(0x00000F54/4), 0x3F800000},
- {(0x00000F54/4), 0x3F800000},
- {(0x00000F50/4), 0x00006AC0},
- {(0x00000F54/4), 0x00000000},
- {(0x00000F54/4), 0x00000000},
- {(0x00000F54/4), 0x00000000},
- {(0x00000F50/4), 0x00006C10},
- {(0x00000F54/4), 0xBF800000},
- {(0x00000F50/4), 0x00007030},
- {(0x00000F54/4), 0x7149F2CA},
- {(0x00000F50/4), 0x00007040},
- {(0x00000F54/4), 0x7149F2CA},
- {(0x00000F50/4), 0x00007050},
- {(0x00000F54/4), 0x7149F2CA},
- {(0x00000F50/4), 0x00007060},
- {(0x00000F54/4), 0x7149F2CA},
- {(0x00000F50/4), 0x00007070},
- {(0x00000F54/4), 0x7149F2CA},
- {(0x00000F50/4), 0x00007080},
- {(0x00000F54/4), 0x7149F2CA},
- {(0x00000F50/4), 0x00007090},
- {(0x00000F54/4), 0x7149F2CA},
- {(0x00000F50/4), 0x000070A0},
- {(0x00000F54/4), 0x7149F2CA},
- {(0x00000F50/4), 0x00006A80},
- {(0x00000F54/4), 0x00000000},
- {(0x00000F54/4), 0x00000000},
- {(0x00000F54/4), 0x3F800000},
- {(0x00000F50/4), 0x00006AA0},
- {(0x00000F54/4), 0x00000000},
- {(0x00000F54/4), 0x00000000},
- {(0x00000F54/4), 0x00000000},
- {(0x00000F50/4), 0x00000040},
- {(0x00000F54/4), 0x00000005},
- {(0x00000F50/4), 0x00006400},
- {(0x00000F54/4), 0x3F800000},
- {(0x00000F54/4), 0x3F800000},
- {(0x00000F54/4), 0x4B7FFFFF},
- {(0x00000F54/4), 0x00000000},
- {(0x00000F50/4), 0x00006410},
- {(0x00000F54/4), 0xC5000000},
- {(0x00000F54/4), 0xC5000000},
- {(0x00000F54/4), 0x00000000},
- {(0x00000F54/4), 0x00000000},
- {(0x00000F50/4), 0x00006420},
- {(0x00000F54/4), 0x00000000},
- {(0x00000F54/4), 0x00000000},
- {(0x00000F54/4), 0x00000000},
- {(0x00000F54/4), 0x00000000},
- {(0x00000F50/4), 0x00006430},
- {(0x00000F54/4), 0x00000000},
- {(0x00000F54/4), 0x00000000},
- {(0x00000F54/4), 0x00000000},
- {(0x00000F54/4), 0x00000000},
- {(0x00000F50/4), 0x000064C0},
- {(0x00000F54/4), 0x3F800000},
- {(0x00000F54/4), 0x3F800000},
- {(0x00000F54/4), 0x477FFFFF},
- {(0x00000F54/4), 0x3F800000},
- {(0x00000F50/4), 0x000064D0},
- {(0x00000F54/4), 0xC5000000},
- {(0x00000F54/4), 0xC5000000},
- {(0x00000F54/4), 0x00000000},
- {(0x00000F54/4), 0x00000000},
- {(0x00000F50/4), 0x000064E0},
- {(0x00000F54/4), 0xC4FFF000},
- {(0x00000F54/4), 0xC4FFF000},
- {(0x00000F54/4), 0x00000000},
- {(0x00000F54/4), 0x00000000},
- {(0x00000F50/4), 0x000064F0},
- {(0x00000F54/4), 0x00000000},
- {(0x00000F54/4), 0x00000000},
- {(0x00000F54/4), 0x00000000},
- {(0x00000F54/4), 0x00000000},
- {(0x00000F40/4), 0x30000000},
- {(0x00000F44/4), 0x00000004},
- {(0x00000F48/4), 0x10000000},
- {(0x00000F4C/4), 0x00000000}
-};
-static unsigned nv10TablePRAMIN[][2] =
-{
- {0x00000000, 0x80000010},
- {0x00000001, 0x80011145},
- {0x00000002, 0x80000011},
- {0x00000003, 0x80011146},
- {0x00000004, 0x80000012},
- {0x00000005, 0x80011147},
- {0x00000006, 0x80000013},
- {0x00000007, 0x80011148},
- {0x00000008, 0x80000014},
- {0x00000009, 0x80011149},
- {0x0000000A, 0x80000015},
- {0x0000000B, 0x8001114A},
- {0x0000000C, 0x80000016},
- {0x0000000D, 0x80011150},
- {0x00000020, 0x80000000},
- {0x00000021, 0x80011142},
- {0x00000022, 0x80000001},
- {0x00000023, 0x80011143},
- {0x00000024, 0x80000002},
- {0x00000025, 0x80011144},
- {0x00000026, 0x80000003},
- {0x00000027, 0x8001114B},
- {0x00000028, 0x80000004},
- {0x00000029, 0x8001114C},
- {0x0000002A, 0x80000005},
- {0x0000002B, 0x8001114D},
- {0x0000002C, 0x80000006},
- {0x0000002D, 0x8001114E},
- {0x0000002E, 0x80000007},
- {0x0000002F, 0x8001114F},
- {0x00000500, 0x00003000},
- {0x00000501, 0x01FFFFFF},
- {0x00000502, 0x00000002},
- {0x00000503, 0x00000002},
-#ifdef __BIG_ENDIAN
- {0x00000508, 0x01088043},
-#else
- {0x00000508, 0x01008043},
-#endif
- {0x0000050A, 0x00000000},
- {0x0000050B, 0x00000000},
-#ifdef __BIG_ENDIAN
- {0x0000050C, 0x01088019},
-#else
- {0x0000050C, 0x01008019},
-#endif
- {0x0000050E, 0x00000000},
- {0x0000050F, 0x00000000},
-#ifdef __BIG_ENDIAN
- {0x00000510, 0x01088018},
-#else
- {0x00000510, 0x01008018},
-#endif
- {0x00000512, 0x00000000},
- {0x00000513, 0x00000000},
-#ifdef __BIG_ENDIAN
- {0x00000514, 0x01088021},
-#else
- {0x00000514, 0x01008021},
-#endif
- {0x00000516, 0x00000000},
- {0x00000517, 0x00000000},
-#ifdef __BIG_ENDIAN
- {0x00000518, 0x0108805F},
-#else
- {0x00000518, 0x0100805F},
-#endif
- {0x0000051A, 0x00000000},
- {0x0000051B, 0x00000000},
-#ifdef __BIG_ENDIAN
- {0x0000051C, 0x0108804B},
-#else
- {0x0000051C, 0x0100804B},
-#endif
- {0x0000051E, 0x00000000},
- {0x0000051F, 0x00000000},
- {0x00000520, 0x0100A048},
- {0x00000521, 0x00000D01},
- {0x00000522, 0x11401140},
- {0x00000523, 0x00000000},
- {0x00000524, 0x0300A094},
- {0x00000525, 0x00000D01},
- {0x00000526, 0x11401140},
- {0x00000527, 0x00000000},
- {0x00000528, 0x0300A095},
- {0x00000529, 0x00000D01},
- {0x0000052A, 0x11401140},
- {0x0000052B, 0x00000000},
-#ifdef __BIG_ENDIAN
- {0x0000052C, 0x00080058},
-#else
- {0x0000052C, 0x00000058},
-#endif
- {0x0000052E, 0x11401140},
- {0x0000052F, 0x00000000},
-#ifdef __BIG_ENDIAN
- {0x00000530, 0x00080059},
-#else
- {0x00000530, 0x00000059},
-#endif
- {0x00000532, 0x11401140},
- {0x00000533, 0x00000000},
- {0x00000534, 0x0000005A},
- {0x00000536, 0x11401140},
- {0x00000537, 0x00000000},
- {0x00000538, 0x0000005B},
- {0x0000053A, 0x11401140},
- {0x0000053B, 0x00000000},
- {0x0000053C, 0x00000093},
- {0x0000053E, 0x11401140},
- {0x0000053F, 0x00000000},
-#ifdef __BIG_ENDIAN
- {0x00000540, 0x0308A01C},
-#else
- {0x00000540, 0x0300A01C},
-#endif
- {0x00000542, 0x11401140},
- {0x00000543, 0x00000000}
-};
-static unsigned nv10TablePRAMIN_8BPP[][2] =
-{
- /* 0xXXXXXX01 For MSB mono format */
- /* 0xXXXXXX02 For LSB mono format */
- {0x00000509, 0x00000302},
- {0x0000050D, 0x00000302},
- {0x00000511, 0x00000202},
- {0x00000515, 0x00000302},
- {0x00000519, 0x00000302},
- {0x0000051D, 0x00000302},
- {0x0000052D, 0x00000302},
- {0x0000052E, 0x00000302},
- {0x00000535, 0x00000000},
- {0x00000539, 0x00000000},
- {0x0000053D, 0x00000000},
- {0x00000541, 0x00000302}
-};
-static unsigned nv10TablePRAMIN_15BPP[][2] =
-{
- /* 0xXXXXXX01 For MSB mono format */
- /* 0xXXXXXX02 For LSB mono format */
- {0x00000509, 0x00000902},
- {0x0000050D, 0x00000902},
- {0x00000511, 0x00000802},
- {0x00000515, 0x00000902},
- {0x00000519, 0x00000902},
- {0x0000051D, 0x00000902},
- {0x0000052D, 0x00000902},
- {0x0000052E, 0x00000902},
- {0x00000535, 0x00000902},
- {0x00000539, 0x00000902},
- {0x0000053D, 0x00000902},
- {0x00000541, 0x00000902}
-};
-static unsigned nv10TablePRAMIN_16BPP[][2] =
-{
- /* 0xXXXXXX01 For MSB mono format */
- /* 0xXXXXXX02 For LSB mono format */
- {0x00000509, 0x00000C02},
- {0x0000050D, 0x00000C02},
- {0x00000511, 0x00000B02},
- {0x00000515, 0x00000C02},
- {0x00000519, 0x00000C02},
- {0x0000051D, 0x00000C02},
- {0x0000052D, 0x00000C02},
- {0x0000052E, 0x00000C02},
- {0x00000535, 0x00000C02},
- {0x00000539, 0x00000C02},
- {0x0000053D, 0x00000C02},
- {0x00000541, 0x00000C02}
-};
-static unsigned nv10TablePRAMIN_32BPP[][2] =
-{
- /* 0xXXXXXX01 For MSB mono format */
- /* 0xXXXXXX02 For LSB mono format */
- {0x00000509, 0x00000E02},
- {0x0000050D, 0x00000E02},
- {0x00000511, 0x00000D02},
- {0x00000515, 0x00000E02},
- {0x00000519, 0x00000E02},
- {0x0000051D, 0x00000E02},
- {0x0000052D, 0x00000E02},
- {0x0000052E, 0x00000E02},
- {0x00000535, 0x00000E02},
- {0x00000539, 0x00000E02},
- {0x0000053D, 0x00000E02},
- {0x00000541, 0x00000E02}
-};
-
diff --git a/drivers/video/fbdev/riva/rivafb-i2c.c b/drivers/video/fbdev/riva/rivafb-i2c.c
deleted file mode 100644
index 6a183375ced1..000000000000
--- a/drivers/video/fbdev/riva/rivafb-i2c.c
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * linux/drivers/video/riva/fbdev-i2c.c - nVidia i2c
- *
- * Maintained by Ani Joshi <ajoshi@shell.unixbox.com>
- *
- * Copyright 2004 Antonino A. Daplas <adaplas @pol.net>
- *
- * Based on radeonfb-i2c.c
- *
- * This file is subject to the terms and conditions of the GNU General Public
- * License. See the file COPYING in the main directory of this archive
- * for more details.
- */
-
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/delay.h>
-#include <linux/pci.h>
-#include <linux/fb.h>
-#include <linux/jiffies.h>
-
-#include <asm/io.h>
-
-#include "rivafb.h"
-#include "../edid.h"
-
-static void riva_gpio_setscl(void* data, int state)
-{
- struct riva_i2c_chan *chan = data;
- struct riva_par *par = chan->par;
- u32 val;
-
- VGA_WR08(par->riva.PCIO, 0x3d4, chan->ddc_base + 1);
- val = VGA_RD08(par->riva.PCIO, 0x3d5) & 0xf0;
-
- if (state)
- val |= 0x20;
- else
- val &= ~0x20;
-
- VGA_WR08(par->riva.PCIO, 0x3d4, chan->ddc_base + 1);
- VGA_WR08(par->riva.PCIO, 0x3d5, val | 0x1);
-}
-
-static void riva_gpio_setsda(void* data, int state)
-{
- struct riva_i2c_chan *chan = data;
- struct riva_par *par = chan->par;
- u32 val;
-
- VGA_WR08(par->riva.PCIO, 0x3d4, chan->ddc_base + 1);
- val = VGA_RD08(par->riva.PCIO, 0x3d5) & 0xf0;
-
- if (state)
- val |= 0x10;
- else
- val &= ~0x10;
-
- VGA_WR08(par->riva.PCIO, 0x3d4, chan->ddc_base + 1);
- VGA_WR08(par->riva.PCIO, 0x3d5, val | 0x1);
-}
-
-static int riva_gpio_getscl(void* data)
-{
- struct riva_i2c_chan *chan = data;
- struct riva_par *par = chan->par;
- u32 val = 0;
-
- VGA_WR08(par->riva.PCIO, 0x3d4, chan->ddc_base);
- if (VGA_RD08(par->riva.PCIO, 0x3d5) & 0x04)
- val = 1;
-
- return val;
-}
-
-static int riva_gpio_getsda(void* data)
-{
- struct riva_i2c_chan *chan = data;
- struct riva_par *par = chan->par;
- u32 val = 0;
-
- VGA_WR08(par->riva.PCIO, 0x3d4, chan->ddc_base);
- if (VGA_RD08(par->riva.PCIO, 0x3d5) & 0x08)
- val = 1;
-
- return val;
-}
-
-static int riva_setup_i2c_bus(struct riva_i2c_chan *chan, const char *name,
- unsigned int i2c_class)
-{
- int rc;
-
- strcpy(chan->adapter.name, name);
- chan->adapter.owner = THIS_MODULE;
- chan->adapter.class = i2c_class;
- chan->adapter.algo_data = &chan->algo;
- chan->adapter.dev.parent = &chan->par->pdev->dev;
- chan->algo.setsda = riva_gpio_setsda;
- chan->algo.setscl = riva_gpio_setscl;
- chan->algo.getsda = riva_gpio_getsda;
- chan->algo.getscl = riva_gpio_getscl;
- chan->algo.udelay = 40;
- chan->algo.timeout = msecs_to_jiffies(2);
- chan->algo.data = chan;
-
- i2c_set_adapdata(&chan->adapter, chan);
-
- /* Raise SCL and SDA */
- riva_gpio_setsda(chan, 1);
- riva_gpio_setscl(chan, 1);
- udelay(20);
-
- rc = i2c_bit_add_bus(&chan->adapter);
- if (rc == 0)
- dev_dbg(&chan->par->pdev->dev, "I2C bus %s registered.\n", name);
- else {
- dev_warn(&chan->par->pdev->dev,
- "Failed to register I2C bus %s.\n", name);
- chan->par = NULL;
- }
-
- return rc;
-}
-
-void riva_create_i2c_busses(struct riva_par *par)
-{
- par->chan[0].par = par;
- par->chan[1].par = par;
- par->chan[2].par = par;
-
- par->chan[0].ddc_base = 0x36;
- par->chan[1].ddc_base = 0x3e;
- par->chan[2].ddc_base = 0x50;
- riva_setup_i2c_bus(&par->chan[0], "BUS1", I2C_CLASS_HWMON);
- riva_setup_i2c_bus(&par->chan[1], "BUS2", 0);
- riva_setup_i2c_bus(&par->chan[2], "BUS3", 0);
-}
-
-void riva_delete_i2c_busses(struct riva_par *par)
-{
- int i;
-
- for (i = 0; i < 3; i++) {
- if (!par->chan[i].par)
- continue;
- i2c_del_adapter(&par->chan[i].adapter);
- par->chan[i].par = NULL;
- }
-}
-
-int riva_probe_i2c_connector(struct riva_par *par, int conn, u8 **out_edid)
-{
- u8 *edid = NULL;
-
- if (par->chan[conn].par)
- edid = fb_ddc_read(&par->chan[conn].adapter);
-
- if (out_edid)
- *out_edid = edid;
- if (!edid)
- return 1;
-
- return 0;
-}
-
diff --git a/drivers/video/fbdev/riva/rivafb.h b/drivers/video/fbdev/riva/rivafb.h
deleted file mode 100644
index 593297ca2b20..000000000000
--- a/drivers/video/fbdev/riva/rivafb.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-#ifndef __RIVAFB_H
-#define __RIVAFB_H
-
-#include <linux/fb.h>
-#include <video/vga.h>
-#include <linux/i2c.h>
-#include <linux/i2c-algo-bit.h>
-
-#include "riva_hw.h"
-
-/* GGI compatibility macros */
-#define NUM_SEQ_REGS 0x05
-#define NUM_CRT_REGS 0x41
-#define NUM_GRC_REGS 0x09
-#define NUM_ATC_REGS 0x15
-
-/* I2C */
-#define DDC_SCL_READ_MASK (1 << 2)
-#define DDC_SCL_WRITE_MASK (1 << 5)
-#define DDC_SDA_READ_MASK (1 << 3)
-#define DDC_SDA_WRITE_MASK (1 << 4)
-
-/* holds the state of the VGA core and extended Riva hw state from riva_hw.c.
- * From KGI originally. */
-struct riva_regs {
- u8 attr[NUM_ATC_REGS];
- u8 crtc[NUM_CRT_REGS];
- u8 gra[NUM_GRC_REGS];
- u8 seq[NUM_SEQ_REGS];
- u8 misc_output;
- RIVA_HW_STATE ext;
-};
-
-struct riva_par;
-
-struct riva_i2c_chan {
- struct riva_par *par;
- unsigned long ddc_base;
- struct i2c_adapter adapter;
- struct i2c_algo_bit_data algo;
-};
-
-struct riva_par {
- RIVA_HW_INST riva; /* interface to riva_hw.c */
- u32 pseudo_palette[16]; /* default palette */
- u32 palette[16]; /* for Riva128 */
- u8 __iomem *ctrl_base; /* virtual control register base addr */
- unsigned dclk_max; /* max DCLK */
-
- struct riva_regs initial_state; /* initial startup video mode */
- struct riva_regs current_state;
-#ifdef CONFIG_X86
- struct vgastate state;
-#endif
- struct mutex open_lock;
- unsigned int ref_count;
- unsigned char *EDID;
- unsigned int Chipset;
- int forceCRTC;
- Bool SecondCRTC;
- int FlatPanel;
- struct pci_dev *pdev;
- int cursor_reset;
- int wc_cookie;
- struct riva_i2c_chan chan[3];
-};
-
-void riva_common_setup(struct riva_par *);
-unsigned long riva_get_memlen(struct riva_par *);
-unsigned long riva_get_maxdclk(struct riva_par *);
-void riva_delete_i2c_busses(struct riva_par *par);
-void riva_create_i2c_busses(struct riva_par *par);
-int riva_probe_i2c_connector(struct riva_par *par, int conn, u8 **out_edid);
-
-#endif /* __RIVAFB_H */