mirror of
https://github.com/adulau/aha.git
synced 2025-01-05 15:43:22 +00:00
Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6
This commit is contained in:
commit
9401c705f2
11 changed files with 38 additions and 26 deletions
|
@ -10,6 +10,7 @@
|
||||||
#include <linux/vmalloc.h>
|
#include <linux/vmalloc.h>
|
||||||
#include <linux/fs.h>
|
#include <linux/fs.h>
|
||||||
#include <linux/string.h>
|
#include <linux/string.h>
|
||||||
|
#include <linux/ctype.h>
|
||||||
|
|
||||||
void *module_alloc(unsigned long size)
|
void *module_alloc(unsigned long size)
|
||||||
{
|
{
|
||||||
|
@ -37,7 +38,7 @@ void module_free(struct module *mod, void *module_region)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Make generic code ignore STT_REGISTER dummy undefined symbols,
|
/* Make generic code ignore STT_REGISTER dummy undefined symbols,
|
||||||
* and replace references to .func with func as in ppc64's dedotify.
|
* and replace references to .func with _Func
|
||||||
*/
|
*/
|
||||||
int module_frob_arch_sections(Elf_Ehdr *hdr,
|
int module_frob_arch_sections(Elf_Ehdr *hdr,
|
||||||
Elf_Shdr *sechdrs,
|
Elf_Shdr *sechdrs,
|
||||||
|
@ -64,8 +65,10 @@ int module_frob_arch_sections(Elf_Ehdr *hdr,
|
||||||
sym[i].st_shndx = SHN_ABS;
|
sym[i].st_shndx = SHN_ABS;
|
||||||
else {
|
else {
|
||||||
char *name = strtab + sym[i].st_name;
|
char *name = strtab + sym[i].st_name;
|
||||||
if (name[0] == '.')
|
if (name[0] == '.') {
|
||||||
memmove(name, name+1, strlen(name));
|
name[0] = '_';
|
||||||
|
name[1] = toupper(name[1]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -97,19 +97,12 @@ extern void ___rw_write_enter(void);
|
||||||
/* Alias functions whose names begin with "." and export the aliases.
|
/* Alias functions whose names begin with "." and export the aliases.
|
||||||
* The module references will be fixed up by module_frob_arch_sections.
|
* The module references will be fixed up by module_frob_arch_sections.
|
||||||
*/
|
*/
|
||||||
#define DOT_ALIAS2(__ret, __x, __arg1, __arg2) \
|
extern int _Div(int, int);
|
||||||
extern __ret __x(__arg1, __arg2); \
|
extern int _Mul(int, int);
|
||||||
asm(".weak " #__x);\
|
extern int _Rem(int, int);
|
||||||
asm(#__x "=." #__x);
|
extern unsigned _Udiv(unsigned, unsigned);
|
||||||
|
extern unsigned _Umul(unsigned, unsigned);
|
||||||
DOT_ALIAS2(int, div, int, int)
|
extern unsigned _Urem(unsigned, unsigned);
|
||||||
DOT_ALIAS2(int, mul, int, int)
|
|
||||||
DOT_ALIAS2(int, rem, int, int)
|
|
||||||
DOT_ALIAS2(unsigned, udiv, unsigned, unsigned)
|
|
||||||
DOT_ALIAS2(unsigned, umul, unsigned, unsigned)
|
|
||||||
DOT_ALIAS2(unsigned, urem, unsigned, unsigned)
|
|
||||||
|
|
||||||
#undef DOT_ALIAS2
|
|
||||||
|
|
||||||
/* used by various drivers */
|
/* used by various drivers */
|
||||||
EXPORT_SYMBOL(sparc_cpu_model);
|
EXPORT_SYMBOL(sparc_cpu_model);
|
||||||
|
@ -320,12 +313,12 @@ EXPORT_SYMBOL(__lshrdi3);
|
||||||
EXPORT_SYMBOL(__muldi3);
|
EXPORT_SYMBOL(__muldi3);
|
||||||
EXPORT_SYMBOL(__divdi3);
|
EXPORT_SYMBOL(__divdi3);
|
||||||
|
|
||||||
EXPORT_SYMBOL(rem);
|
EXPORT_SYMBOL(_Rem);
|
||||||
EXPORT_SYMBOL(urem);
|
EXPORT_SYMBOL(_Urem);
|
||||||
EXPORT_SYMBOL(mul);
|
EXPORT_SYMBOL(_Mul);
|
||||||
EXPORT_SYMBOL(umul);
|
EXPORT_SYMBOL(_Umul);
|
||||||
EXPORT_SYMBOL(div);
|
EXPORT_SYMBOL(_Div);
|
||||||
EXPORT_SYMBOL(udiv);
|
EXPORT_SYMBOL(_Udiv);
|
||||||
|
|
||||||
#ifdef CONFIG_DEBUG_BUGVERBOSE
|
#ifdef CONFIG_DEBUG_BUGVERBOSE
|
||||||
EXPORT_SYMBOL(do_BUG);
|
EXPORT_SYMBOL(do_BUG);
|
||||||
|
|
|
@ -16,7 +16,9 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.globl .mul
|
.globl .mul
|
||||||
|
.globl _Mul
|
||||||
.mul:
|
.mul:
|
||||||
|
_Mul: /* needed for export */
|
||||||
mov %o0, %y ! multiplier -> Y
|
mov %o0, %y ! multiplier -> Y
|
||||||
andncc %o0, 0xfff, %g0 ! test bits 12..31
|
andncc %o0, 0xfff, %g0 ! test bits 12..31
|
||||||
be Lmul_shortway ! if zero, can do it the short way
|
be Lmul_shortway ! if zero, can do it the short way
|
||||||
|
|
|
@ -43,7 +43,9 @@
|
||||||
|
|
||||||
|
|
||||||
.globl .rem
|
.globl .rem
|
||||||
|
.globl _Rem
|
||||||
.rem:
|
.rem:
|
||||||
|
_Rem: /* needed for export */
|
||||||
! compute sign of result; if neither is negative, no problem
|
! compute sign of result; if neither is negative, no problem
|
||||||
orcc %o1, %o0, %g0 ! either negative?
|
orcc %o1, %o0, %g0 ! either negative?
|
||||||
bge 2f ! no, go do the divide
|
bge 2f ! no, go do the divide
|
||||||
|
|
|
@ -43,7 +43,9 @@
|
||||||
|
|
||||||
|
|
||||||
.globl .div
|
.globl .div
|
||||||
|
.globl _Div
|
||||||
.div:
|
.div:
|
||||||
|
_Div: /* needed for export */
|
||||||
! compute sign of result; if neither is negative, no problem
|
! compute sign of result; if neither is negative, no problem
|
||||||
orcc %o1, %o0, %g0 ! either negative?
|
orcc %o1, %o0, %g0 ! either negative?
|
||||||
bge 2f ! no, go do the divide
|
bge 2f ! no, go do the divide
|
||||||
|
|
|
@ -43,7 +43,9 @@
|
||||||
|
|
||||||
|
|
||||||
.globl .udiv
|
.globl .udiv
|
||||||
|
.globl _Udiv
|
||||||
.udiv:
|
.udiv:
|
||||||
|
_Udiv: /* needed for export */
|
||||||
|
|
||||||
! Ready to divide. Compute size of quotient; scale comparand.
|
! Ready to divide. Compute size of quotient; scale comparand.
|
||||||
orcc %o1, %g0, %o5
|
orcc %o1, %g0, %o5
|
||||||
|
|
|
@ -21,7 +21,9 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.globl .umul
|
.globl .umul
|
||||||
|
.globl _Umul
|
||||||
.umul:
|
.umul:
|
||||||
|
_Umul: /* needed for export */
|
||||||
or %o0, %o1, %o4
|
or %o0, %o1, %o4
|
||||||
mov %o0, %y ! multiplier -> Y
|
mov %o0, %y ! multiplier -> Y
|
||||||
|
|
||||||
|
|
|
@ -41,7 +41,9 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.globl .urem
|
.globl .urem
|
||||||
|
.globl _Urem
|
||||||
.urem:
|
.urem:
|
||||||
|
_Urem: /* needed for export */
|
||||||
|
|
||||||
! Ready to divide. Compute size of quotient; scale comparand.
|
! Ready to divide. Compute size of quotient; scale comparand.
|
||||||
orcc %o1, %g0, %o5
|
orcc %o1, %g0, %o5
|
||||||
|
|
|
@ -295,8 +295,7 @@ static unsigned short get_pins(unsigned minor)
|
||||||
|
|
||||||
static void snooze(unsigned long snooze_time, unsigned minor)
|
static void snooze(unsigned long snooze_time, unsigned minor)
|
||||||
{
|
{
|
||||||
set_current_state(TASK_UNINTERRUPTIBLE);
|
schedule_timeout_uninterruptible(snooze_time + 1);
|
||||||
schedule_timeout(snooze_time + 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int wait_for(unsigned short set, unsigned short clr,
|
static int wait_for(unsigned short set, unsigned short clr,
|
||||||
|
|
|
@ -81,8 +81,7 @@ int vfc_pcf8584_init(struct vfc_dev *dev)
|
||||||
|
|
||||||
void vfc_i2c_delay_no_busy(struct vfc_dev *dev, unsigned long usecs)
|
void vfc_i2c_delay_no_busy(struct vfc_dev *dev, unsigned long usecs)
|
||||||
{
|
{
|
||||||
set_current_state(TASK_UNINTERRUPTIBLE);
|
schedule_timeout_uninterruptible(usecs_to_jiffies(usecs));
|
||||||
schedule_timeout(usecs_to_jiffies(usecs));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void inline vfc_i2c_delay(struct vfc_dev *dev)
|
void inline vfc_i2c_delay(struct vfc_dev *dev)
|
||||||
|
|
|
@ -370,6 +370,12 @@ handle_modversions(struct module *mod, struct elf_info *info,
|
||||||
/* Ignore register directives. */
|
/* Ignore register directives. */
|
||||||
if (ELF_ST_TYPE(sym->st_info) == STT_SPARC_REGISTER)
|
if (ELF_ST_TYPE(sym->st_info) == STT_SPARC_REGISTER)
|
||||||
break;
|
break;
|
||||||
|
if (symname[0] == '.') {
|
||||||
|
char *munged = strdup(symname);
|
||||||
|
munged[0] = '_';
|
||||||
|
munged[1] = toupper(munged[1]);
|
||||||
|
symname = munged;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue