| /**************************************************************************** |
| * Copyright (C) 2003-2006 by XGI Technology, Taiwan. |
| * |
| * All Rights Reserved. |
| * |
| * 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 on 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 (including the |
| * next paragraph) 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 NON-INFRINGEMENT. IN NO EVENT SHALL |
| * XGI AND/OR ITS SUPPLIERS 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. |
| ***************************************************************************/ |
| |
| #ifndef _XGI_REGS_H_ |
| #define _XGI_REGS_H_ |
| |
| #include "drmP.h" |
| #include "drm.h" |
| |
| #define MAKE_MASK(bits) ((1U << (bits)) - 1) |
| |
| #define ONE_BIT_MASK MAKE_MASK(1) |
| #define TWENTY_BIT_MASK MAKE_MASK(20) |
| #define TWENTYONE_BIT_MASK MAKE_MASK(21) |
| #define TWENTYTWO_BIT_MASK MAKE_MASK(22) |
| |
| |
| /* Port 0x3d4/0x3d5, index 0x2a */ |
| #define XGI_INTERFACE_SEL 0x2a |
| #define DUAL_64BIT (1U<<7) |
| #define INTERNAL_32BIT (1U<<6) |
| #define EN_SEP_WR (1U<<5) |
| #define POWER_DOWN_SEL (1U<<4) |
| /*#define RESERVED_3 (1U<<3) */ |
| #define SUBS_MCLK_PCICLK (1U<<2) |
| #define MEM_SIZE_MASK (3<<0) |
| #define MEM_SIZE_32MB (0<<0) |
| #define MEM_SIZE_64MB (1<<0) |
| #define MEM_SIZE_128MB (2<<0) |
| #define MEM_SIZE_256MB (3<<0) |
| |
| /* Port 0x3d4/0x3d5, index 0x36 */ |
| #define XGI_GE_CNTL 0x36 |
| #define GE_ENABLE (1U<<7) |
| /*#define RESERVED_6 (1U<<6) */ |
| /*#define RESERVED_5 (1U<<5) */ |
| #define GE_RESET (1U<<4) |
| /*#define RESERVED_3 (1U<<3) */ |
| #define GE_ENABLE_3D (1U<<2) |
| /*#define RESERVED_1 (1U<<1) */ |
| /*#define RESERVED_0 (1U<<0) */ |
| |
| /* Port 0x3ce/0x3cf, index 0x2a */ |
| #define XGI_MISC_CTRL 0x2a |
| #define MOTION_VID_SUSPEND (1U<<7) |
| #define DVI_CRTC_TIMING_SEL (1U<<6) |
| #define LCD_SEL_CTL_NEW (1U<<5) |
| #define LCD_SEL_EXT_DELYCTRL (1U<<4) |
| #define REG_LCDDPARST (1U<<3) |
| #define LCD2DPAOFF (1U<<2) |
| /*#define RESERVED_1 (1U<<1) */ |
| #define EN_GEPWM (1U<<0) /* Enable GE power management */ |
| |
| |
| #define BASE_3D_ENG 0x2800 |
| |
| #define M2REG_FLUSH_ENGINE_ADDRESS 0x000 |
| #define M2REG_FLUSH_ENGINE_COMMAND 0x00 |
| #define M2REG_FLUSH_FLIP_ENGINE_MASK (ONE_BIT_MASK<<21) |
| #define M2REG_FLUSH_2D_ENGINE_MASK (ONE_BIT_MASK<<20) |
| #define M2REG_FLUSH_3D_ENGINE_MASK TWENTY_BIT_MASK |
| |
| #define M2REG_RESET_ADDRESS 0x004 |
| #define M2REG_RESET_COMMAND 0x01 |
| #define M2REG_RESET_STATUS2_MASK (ONE_BIT_MASK<<10) |
| #define M2REG_RESET_STATUS1_MASK (ONE_BIT_MASK<<9) |
| #define M2REG_RESET_STATUS0_MASK (ONE_BIT_MASK<<8) |
| #define M2REG_RESET_3DENG_MASK (ONE_BIT_MASK<<4) |
| #define M2REG_RESET_2DENG_MASK (ONE_BIT_MASK<<2) |
| |
| /* Write register */ |
| #define M2REG_AUTO_LINK_SETTING_ADDRESS 0x010 |
| #define M2REG_AUTO_LINK_SETTING_COMMAND 0x04 |
| #define M2REG_CLEAR_TIMER_INTERRUPT_MASK (ONE_BIT_MASK<<11) |
| #define M2REG_CLEAR_INTERRUPT_3_MASK (ONE_BIT_MASK<<10) |
| #define M2REG_CLEAR_INTERRUPT_2_MASK (ONE_BIT_MASK<<9) |
| #define M2REG_CLEAR_INTERRUPT_0_MASK (ONE_BIT_MASK<<8) |
| #define M2REG_CLEAR_COUNTERS_MASK (ONE_BIT_MASK<<4) |
| #define M2REG_PCI_TRIGGER_MODE_MASK (ONE_BIT_MASK<<1) |
| #define M2REG_INVALID_LIST_AUTO_INTERRUPT_MASK (ONE_BIT_MASK<<0) |
| |
| /* Read register */ |
| #define M2REG_AUTO_LINK_STATUS_ADDRESS 0x010 |
| #define M2REG_AUTO_LINK_STATUS_COMMAND 0x04 |
| #define M2REG_ACTIVE_TIMER_INTERRUPT_MASK (ONE_BIT_MASK<<11) |
| #define M2REG_ACTIVE_INTERRUPT_3_MASK (ONE_BIT_MASK<<10) |
| #define M2REG_ACTIVE_INTERRUPT_2_MASK (ONE_BIT_MASK<<9) |
| #define M2REG_ACTIVE_INTERRUPT_0_MASK (ONE_BIT_MASK<<8) |
| #define M2REG_INVALID_LIST_AUTO_INTERRUPTED_MODE_MASK (ONE_BIT_MASK<<0) |
| |
| #define M2REG_PCI_TRIGGER_REGISTER_ADDRESS 0x014 |
| #define M2REG_PCI_TRIGGER_REGISTER_COMMAND 0x05 |
| |
| |
| /** |
| * Begin instruction, double-word 0 |
| */ |
| #define BEGIN_STOP_STORE_CURRENT_POINTER_MASK (ONE_BIT_MASK<<22) |
| #define BEGIN_VALID_MASK (ONE_BIT_MASK<<20) |
| #define BEGIN_BEGIN_IDENTIFICATION_MASK TWENTY_BIT_MASK |
| |
| /** |
| * Begin instruction, double-word 1 |
| */ |
| #define BEGIN_LINK_ENABLE_MASK (ONE_BIT_MASK<<31) |
| #define BEGIN_COMMAND_LIST_LENGTH_MASK TWENTYTWO_BIT_MASK |
| |
| |
| /* Hardware access functions */ |
| static inline void OUT3C5B(struct drm_map * map, u8 index, u8 data) |
| { |
| DRM_WRITE8(map, 0x3C4, index); |
| DRM_WRITE8(map, 0x3C5, data); |
| } |
| |
| static inline void OUT3X5B(struct drm_map * map, u8 index, u8 data) |
| { |
| DRM_WRITE8(map, 0x3D4, index); |
| DRM_WRITE8(map, 0x3D5, data); |
| } |
| |
| static inline void OUT3CFB(struct drm_map * map, u8 index, u8 data) |
| { |
| DRM_WRITE8(map, 0x3CE, index); |
| DRM_WRITE8(map, 0x3CF, data); |
| } |
| |
| static inline u8 IN3C5B(struct drm_map * map, u8 index) |
| { |
| DRM_WRITE8(map, 0x3C4, index); |
| return DRM_READ8(map, 0x3C5); |
| } |
| |
| static inline u8 IN3X5B(struct drm_map * map, u8 index) |
| { |
| DRM_WRITE8(map, 0x3D4, index); |
| return DRM_READ8(map, 0x3D5); |
| } |
| |
| static inline u8 IN3CFB(struct drm_map * map, u8 index) |
| { |
| DRM_WRITE8(map, 0x3CE, index); |
| return DRM_READ8(map, 0x3CF); |
| } |
| |
| #endif |