OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [tags/] [LINUX_2_4_26_OR32/] [linux/] [linux-2.4/] [include/] [linux/] [scx200_gpio.h] - Diff between revs 1279 and 1765

Only display areas with differences | Details | Blame | View Log

Rev 1279 Rev 1765
#include <linux/spinlock.h>
#include <linux/spinlock.h>
 
 
u32 scx200_gpio_configure(int index, u32 set, u32 clear);
u32 scx200_gpio_configure(int index, u32 set, u32 clear);
void scx200_gpio_dump(unsigned index);
void scx200_gpio_dump(unsigned index);
 
 
extern unsigned scx200_gpio_base;
extern unsigned scx200_gpio_base;
extern spinlock_t scx200_gpio_lock;
extern spinlock_t scx200_gpio_lock;
extern long scx200_gpio_shadow[2];
extern long scx200_gpio_shadow[2];
 
 
#define scx200_gpio_present() (scx200_gpio_base!=0)
#define scx200_gpio_present() (scx200_gpio_base!=0)
 
 
/* Definitions to make sure I do the same thing in all functions */
/* Definitions to make sure I do the same thing in all functions */
#define __SCx200_GPIO_BANK unsigned bank = index>>5
#define __SCx200_GPIO_BANK unsigned bank = index>>5
#define __SCx200_GPIO_IOADDR unsigned short ioaddr = scx200_gpio_base+0x10*bank
#define __SCx200_GPIO_IOADDR unsigned short ioaddr = scx200_gpio_base+0x10*bank
#define __SCx200_GPIO_SHADOW long *shadow = scx200_gpio_shadow+bank
#define __SCx200_GPIO_SHADOW long *shadow = scx200_gpio_shadow+bank
#define __SCx200_GPIO_INDEX index &= 31
#define __SCx200_GPIO_INDEX index &= 31
 
 
#define __SCx200_GPIO_OUT __asm__ __volatile__("outsl":"=mS" (shadow):"d" (ioaddr), "0" (shadow))
#define __SCx200_GPIO_OUT __asm__ __volatile__("outsl":"=mS" (shadow):"d" (ioaddr), "0" (shadow))
 
 
/* returns the value of the GPIO pin */
/* returns the value of the GPIO pin */
 
 
static inline int scx200_gpio_get(int index) {
static inline int scx200_gpio_get(int index) {
        __SCx200_GPIO_BANK;
        __SCx200_GPIO_BANK;
        __SCx200_GPIO_IOADDR + 0x04;
        __SCx200_GPIO_IOADDR + 0x04;
        __SCx200_GPIO_INDEX;
        __SCx200_GPIO_INDEX;
 
 
        return (inl(ioaddr) & (1<<index)) ? 1 : 0;
        return (inl(ioaddr) & (1<<index)) ? 1 : 0;
}
}
 
 
/* return the value driven on the GPIO signal (the value that will be
/* return the value driven on the GPIO signal (the value that will be
   driven if the GPIO is configured as an output, it might not be the
   driven if the GPIO is configured as an output, it might not be the
   state of the GPIO right now if the GPIO is configured as an input) */
   state of the GPIO right now if the GPIO is configured as an input) */
 
 
static inline int scx200_gpio_current(int index) {
static inline int scx200_gpio_current(int index) {
        __SCx200_GPIO_BANK;
        __SCx200_GPIO_BANK;
        __SCx200_GPIO_INDEX;
        __SCx200_GPIO_INDEX;
 
 
        return (scx200_gpio_shadow[bank] & (1<<index)) ? 1 : 0;
        return (scx200_gpio_shadow[bank] & (1<<index)) ? 1 : 0;
}
}
 
 
/* drive the GPIO signal high */
/* drive the GPIO signal high */
 
 
static inline void scx200_gpio_set_high(int index) {
static inline void scx200_gpio_set_high(int index) {
        __SCx200_GPIO_BANK;
        __SCx200_GPIO_BANK;
        __SCx200_GPIO_IOADDR;
        __SCx200_GPIO_IOADDR;
        __SCx200_GPIO_SHADOW;
        __SCx200_GPIO_SHADOW;
        __SCx200_GPIO_INDEX;
        __SCx200_GPIO_INDEX;
        set_bit(index, shadow);
        set_bit(index, shadow);
        __SCx200_GPIO_OUT;
        __SCx200_GPIO_OUT;
}
}
 
 
/* drive the GPIO signal low */
/* drive the GPIO signal low */
 
 
static inline void scx200_gpio_set_low(int index) {
static inline void scx200_gpio_set_low(int index) {
        __SCx200_GPIO_BANK;
        __SCx200_GPIO_BANK;
        __SCx200_GPIO_IOADDR;
        __SCx200_GPIO_IOADDR;
        __SCx200_GPIO_SHADOW;
        __SCx200_GPIO_SHADOW;
        __SCx200_GPIO_INDEX;
        __SCx200_GPIO_INDEX;
        clear_bit(index, shadow);
        clear_bit(index, shadow);
        __SCx200_GPIO_OUT;
        __SCx200_GPIO_OUT;
}
}
 
 
/* drive the GPIO signal to state */
/* drive the GPIO signal to state */
 
 
static inline void scx200_gpio_set(int index, int state) {
static inline void scx200_gpio_set(int index, int state) {
        __SCx200_GPIO_BANK;
        __SCx200_GPIO_BANK;
        __SCx200_GPIO_IOADDR;
        __SCx200_GPIO_IOADDR;
        __SCx200_GPIO_SHADOW;
        __SCx200_GPIO_SHADOW;
        __SCx200_GPIO_INDEX;
        __SCx200_GPIO_INDEX;
        if (state)
        if (state)
                set_bit(index, shadow);
                set_bit(index, shadow);
        else
        else
                clear_bit(index, shadow);
                clear_bit(index, shadow);
        __SCx200_GPIO_OUT;
        __SCx200_GPIO_OUT;
}
}
 
 
/* toggle the GPIO signal */
/* toggle the GPIO signal */
static inline void scx200_gpio_change(int index) {
static inline void scx200_gpio_change(int index) {
        __SCx200_GPIO_BANK;
        __SCx200_GPIO_BANK;
        __SCx200_GPIO_IOADDR;
        __SCx200_GPIO_IOADDR;
        __SCx200_GPIO_SHADOW;
        __SCx200_GPIO_SHADOW;
        __SCx200_GPIO_INDEX;
        __SCx200_GPIO_INDEX;
        change_bit(index, shadow);
        change_bit(index, shadow);
        __SCx200_GPIO_OUT;
        __SCx200_GPIO_OUT;
}
}
 
 
#undef __SCx200_GPIO_BANK
#undef __SCx200_GPIO_BANK
#undef __SCx200_GPIO_IOADDR
#undef __SCx200_GPIO_IOADDR
#undef __SCx200_GPIO_SHADOW
#undef __SCx200_GPIO_SHADOW
#undef __SCx200_GPIO_INDEX
#undef __SCx200_GPIO_INDEX
#undef __SCx200_GPIO_OUT
#undef __SCx200_GPIO_OUT
 
 
/*
/*
    Local variables:
    Local variables:
        compile-command: "make -C ../.. bzImage modules"
        compile-command: "make -C ../.. bzImage modules"
        c-basic-offset: 8
        c-basic-offset: 8
    End:
    End:
*/
*/
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.