svn commit: r214457 - in head/sys: amd64/amd64 conf i386/i386
x86/x86
Bruce Evans
brde at optusnet.com.au
Thu Oct 28 17:44:27 UTC 2010
On Thu, 28 Oct 2010, John Baldwin wrote:
> On Thursday, October 28, 2010 12:31:39 pm Attilio Rao wrote:
>> Log:
>> Merge nexus.c from amd64 and i386 to x86 subtree.
>> ...
> ==============================================================================
>> --- head/sys/i386/i386/nexus.c Thu Oct 28 07:58:06 2010 (r214446, copy
> source)
>> ...
>> @@ -77,6 +88,14 @@ __FBSDID("$FreeBSD$");
>> #endif
>> #include <sys/rtprio.h>
>>
>> +#ifdef __amd64__
>> +#define RMAN_BUS_SPACE_IO AMD64_BUS_SPACE_IO
>> +#define RMAN_BUS_SPACE_MEM AMD64_BUS_SPACE_MEM
>> +#else
>> +#define RMAN_BUS_SPACE_IO I386_BUS_SPACE_IO
>> +#define RMAN_BUS_SPACE_MEM I386_BUS_SPACE_MEM
>> +#endif
>> +
>
> Perhaps we should be using X86_BUS_SPACE_* instead?
Why not just BUS_SPACE_*? The semantics are in the suffix. You would
only need the prefix if an arch supported both its own bus spaces and
another arch's bus spaces.
I use the following horribleness in one tree partly to work around
gratuitously different spellings of BUS_SPACE_MEM. The memory bus
space is currently used only for ia64, but works for amd64 and ia64
and might work for all arches; there are massive ifdefs to avoid
using it, and less-meassive ifdefs would be needed to use different
spellings of it.
% diff -c2 ./dev/fb/fbreg.h~ ./dev/fb/fbreg.h
% *** ./dev/fb/fbreg.h~ Wed Jun 3 09:29:27 2009
% --- ./dev/fb/fbreg.h Wed Jun 17 02:23:39 2009
% ***************
% *** 35,75 ****
%
% /* some macros */
% ! #ifdef __i386__
% ! #define bcopy_io(s, d, c) generic_bcopy((void *)(s), (void *)(d), (c))
% ! #define bcopy_toio(s, d, c) generic_bcopy((void *)(s), (void *)(d), (c))
% ! #define bcopy_fromio(s, d, c) generic_bcopy((void *)(s), (void *)(d), (c))
% ! #define bzero_io(d, c) generic_bzero((void *)(d), (c))
% ! #define fill_io(p, d, c) fill((p), (void *)(d), (c))
% ! #define fillw_io(p, d, c) fillw((p), (void *)(d), (c))
% ! void generic_bcopy(const void *s, void *d, size_t c);
% ! void generic_bzero(void *d, size_t c);
% ! #elif defined(__amd64__)
% ! #define bcopy_io(s, d, c) bcopy((void *)(s), (void *)(d), (c))
% ! #define bcopy_toio(s, d, c) bcopy((void *)(s), (void *)(d), (c))
% ! #define bcopy_fromio(s, d, c) bcopy((void *)(s), (void *)(d), (c))
% ! #define bzero_io(d, c) bzero((void *)(d), (c))
% ! #define fill_io(p, d, c) fill((p), (void *)(d), (c))
% ! #define fillw_io(p, d, c) fillw((p), (void *)(d), (c))
% ! #elif defined(__ia64__) || defined(__sparc64__)
% ! #if defined(__ia64__)
% #include <machine/bus.h>
% #define bcopy_fromio(s, d, c) \
% ! bus_space_read_region_1(IA64_BUS_SPACE_MEM, s, 0, (void*)(d), c)
% #define bcopy_io(s, d, c) \
% ! bus_space_copy_region_1(IA64_BUS_SPACE_MEM, s, 0, d, 0, c)
% #define bcopy_toio(s, d, c) \
% ! bus_space_write_region_1(IA64_BUS_SPACE_MEM, d, 0, (void*)(s), c)
% #define bzero_io(d, c) \
% ! bus_space_set_region_1(IA64_BUS_SPACE_MEM, (intptr_t)(d), 0, 0, c)
% #define fill_io(p, d, c) \
% ! bus_space_set_region_1(IA64_BUS_SPACE_MEM, (intptr_t)(d), 0, p, c)
% #define fillw_io(p, d, c) \
% ! bus_space_set_region_2(IA64_BUS_SPACE_MEM, (intptr_t)(d), 0, p, c)
% ! #define readb(a) bus_space_read_1(IA64_BUS_SPACE_MEM, a, 0)
% ! #define readw(a) bus_space_read_2(IA64_BUS_SPACE_MEM, a, 0)
% ! #define writeb(a, v) bus_space_write_1(IA64_BUS_SPACE_MEM, a, 0, v)
% ! #define writew(a, v) bus_space_write_2(IA64_BUS_SPACE_MEM, a, 0, v)
% ! #define writel(a, v) bus_space_write_4(IA64_BUS_SPACE_MEM, a, 0, v)
% ! #endif /* __ia64__ */
% static __inline void
% fillw(int val, uint16_t *buf, size_t size)
% --- 35,74 ----
%
% /* some macros */
% ! #if defined(__amd64__) || defined(__i386__) || defined(__ia64__) || \
% ! defined(__sparc64__)
% ! /* XXX __sparc64__ doesn't seem to belong here. */
% ! #if defined(__amd64__) || defined(__i386__) || defined(__ia64__)
% #include <machine/bus.h>
% + #endif
% + /* XXX fix gratuitous MD spelling: */
% + #ifdef __amd64__
% + #define BUS_SPACE_MEM AMD64_BUS_SPACE_MEM
% + #endif
% + #ifdef __i386__
% + #define BUS_SPACE_MEM I386_BUS_SPACE_MEM
% + #endif
% + #ifdef __ia64__
% + #define BUS_SPACE_MEM IA64_BUS_SPACE_MEM
% + #endif
% + #if defined(__amd64__) || defined(__i386__) || defined(__ia64__)
% #define bcopy_fromio(s, d, c) \
% ! bus_space_read_region_1(BUS_SPACE_MEM, s, 0, (void*)(d), c)
% #define bcopy_io(s, d, c) \
% ! bus_space_copy_region_1(BUS_SPACE_MEM, s, 0, d, 0, c)
% #define bcopy_toio(s, d, c) \
% ! bus_space_write_region_1(BUS_SPACE_MEM, d, 0, (void*)(s), c)
% #define bzero_io(d, c) \
% ! bus_space_set_region_1(BUS_SPACE_MEM, (intptr_t)(d), 0, 0, c)
% #define fill_io(p, d, c) \
% ! bus_space_set_region_1(BUS_SPACE_MEM, (intptr_t)(d), 0, p, c)
% #define fillw_io(p, d, c) \
% ! bus_space_set_region_2(BUS_SPACE_MEM, (intptr_t)(d), 0, p, c)
% ! #define readb(a) bus_space_read_1(BUS_SPACE_MEM, a, 0)
% ! #define readw(a) bus_space_read_2(BUS_SPACE_MEM, a, 0)
% ! #define writeb(a, v) bus_space_write_1(BUS_SPACE_MEM, a, 0, v)
% ! #define writew(a, v) bus_space_write_2(BUS_SPACE_MEM, a, 0, v)
% ! #define writel(a, v) bus_space_write_4(BUS_SPACE_MEM, a, 0, v)
% ! #endif /* __amd64__ || __i386__ || __ia64__ */
% ! /* fillw for __amd64__ || __i386__ || __ia64__ and || __sparc64__ too, ugh. */
% static __inline void
% fillw(int val, uint16_t *buf, size_t size)
% ***************
% *** 102,106 ****
% #define fillw(p, d, c) memsetw((d), (p), (c))
% #define fillw_io(p, d, c) memsetw_io((d), (p), (c))
% ! #endif /* !__i386__ */
%
% /* video function table */
% --- 101,105 ----
% #define fillw(p, d, c) memsetw((d), (p), (c))
% #define fillw_io(p, d, c) memsetw_io((d), (p), (c))
% ! #endif
%
% /* video function table */
>> @@ -649,6 +668,42 @@ ram_probe(device_t dev)
>> return (0);
>> }
>>
>> +#ifdef __amd64__
>> +static int
>> +ram_attach(device_t dev)
>> ...
>> +#else
>> static int
>> ram_attach(device_t dev)
>> {
>> @@ -688,6 +743,7 @@ ram_attach(device_t dev)
>> }
>> return (0);
>> }
>> +#endif
>
> It would be better to merge these two routines. The loader now passes the
> smap to i386 kernels as well, so ram_attach() should probably be changed to
> try the amd64 approach first and if that fails fall back to using the
> phys_avail[] array instead.
Or if it is MD, it doesn't belong under x86.
Bruce
More information about the svn-src-head
mailing list