Removed the addr_t conversion operators from FixedWidthPointer which makes comparison against NULL work properly.
This commit is contained in:
@@ -25,11 +25,6 @@ public:
|
|||||||
return (Type *)(addr_t)fValue;
|
return (Type *)(addr_t)fValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
operator addr_t() const
|
|
||||||
{
|
|
||||||
return (addr_t)fValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
Type& operator*() const
|
Type& operator*() const
|
||||||
{
|
{
|
||||||
return *(Type *)*this;
|
return *(Type *)*this;
|
||||||
@@ -90,11 +85,6 @@ public:
|
|||||||
return (OtherType*)(addr_t)fValue;
|
return (OtherType*)(addr_t)fValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
operator addr_t() const
|
|
||||||
{
|
|
||||||
return (addr_t)fValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
FixedWidthPointer& operator=(const FixedWidthPointer& p)
|
FixedWidthPointer& operator=(const FixedWidthPointer& p)
|
||||||
{
|
{
|
||||||
fValue = p.fValue;
|
fValue = p.fValue;
|
||||||
@@ -121,5 +111,19 @@ private:
|
|||||||
uint64 fValue;
|
uint64 fValue;
|
||||||
} _PACKED;
|
} _PACKED;
|
||||||
|
|
||||||
|
template<typename Type>
|
||||||
|
inline bool
|
||||||
|
operator==(const FixedWidthPointer<Type>& a, void* b)
|
||||||
|
{
|
||||||
|
return a.Get() == (addr_t)b;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename Type>
|
||||||
|
inline bool
|
||||||
|
operator!=(const FixedWidthPointer<Type>& a, void* b)
|
||||||
|
{
|
||||||
|
return a.Get() != (addr_t)b;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#endif /* KERNEL_UTIL_FIXED_WIDTH_POINTER_H */
|
#endif /* KERNEL_UTIL_FIXED_WIDTH_POINTER_H */
|
||||||
|
|||||||
@@ -162,7 +162,7 @@ debug_cleanup(void)
|
|||||||
|
|
||||||
if (!gKernelArgs.keep_debug_output_buffer) {
|
if (!gKernelArgs.keep_debug_output_buffer) {
|
||||||
gKernelArgs.debug_output = kernel_args_malloc(sBufferPosition);
|
gKernelArgs.debug_output = kernel_args_malloc(sBufferPosition);
|
||||||
if (gKernelArgs.debug_output) {
|
if (gKernelArgs.debug_output != NULL) {
|
||||||
memcpy(gKernelArgs.debug_output, sBuffer, sBufferPosition);
|
memcpy(gKernelArgs.debug_output, sBuffer, sBufferPosition);
|
||||||
gKernelArgs.debug_size = sBufferPosition;
|
gKernelArgs.debug_size = sBufferPosition;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,21 +60,21 @@ static int smp_get_current_cpu(void);
|
|||||||
static uint32
|
static uint32
|
||||||
apic_read(uint32 offset)
|
apic_read(uint32 offset)
|
||||||
{
|
{
|
||||||
return *(volatile uint32 *)((addr_t)gKernelArgs.arch_args.apic + offset);
|
return *(volatile uint32 *)((addr_t)(void *)gKernelArgs.arch_args.apic + offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
apic_write(uint32 offset, uint32 data)
|
apic_write(uint32 offset, uint32 data)
|
||||||
{
|
{
|
||||||
*(volatile uint32 *)((addr_t)gKernelArgs.arch_args.apic + offset) = data;
|
*(volatile uint32 *)((addr_t)(void *)gKernelArgs.arch_args.apic + offset) = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
smp_get_current_cpu(void)
|
smp_get_current_cpu(void)
|
||||||
{
|
{
|
||||||
if (!gKernelArgs.arch_args.apic)
|
if (gKernelArgs.arch_args.apic == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
uint8 apicID = apic_read(APIC_ID) >> 24;
|
uint8 apicID = apic_read(APIC_ID) >> 24;
|
||||||
|
|||||||
@@ -957,7 +957,7 @@ platform_init_video(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
gKernelArgs.edid_info = kernel_args_malloc(sizeof(edid1_info));
|
gKernelArgs.edid_info = kernel_args_malloc(sizeof(edid1_info));
|
||||||
if (gKernelArgs.edid_info)
|
if (gKernelArgs.edid_info != NULL)
|
||||||
memcpy(gKernelArgs.edid_info, &info, sizeof(edid1_info));
|
memcpy(gKernelArgs.edid_info, &info, sizeof(edid1_info));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -146,7 +146,7 @@ video_display_splash(addr_t frameBuffer)
|
|||||||
// pointer into the lower half of the icons image data
|
// pointer into the lower half of the icons image data
|
||||||
gKernelArgs.boot_splash
|
gKernelArgs.boot_splash
|
||||||
= (uint8*)kernel_args_malloc(uncompressedSize);
|
= (uint8*)kernel_args_malloc(uncompressedSize);
|
||||||
if (!gKernelArgs.boot_splash)
|
if (gKernelArgs.boot_splash == NULL)
|
||||||
return B_NO_MEMORY;
|
return B_NO_MEMORY;
|
||||||
uncompress(kSplashIcons8BitCompressedImage,
|
uncompress(kSplashIcons8BitCompressedImage,
|
||||||
sizeof(kSplashIcons8BitCompressedImage),
|
sizeof(kSplashIcons8BitCompressedImage),
|
||||||
@@ -159,7 +159,7 @@ video_display_splash(addr_t frameBuffer)
|
|||||||
// pointer into the lower half of the icons image data
|
// pointer into the lower half of the icons image data
|
||||||
gKernelArgs.boot_splash
|
gKernelArgs.boot_splash
|
||||||
= (uint8*)kernel_args_malloc(uncompressedSize);
|
= (uint8*)kernel_args_malloc(uncompressedSize);
|
||||||
if (!gKernelArgs.boot_splash)
|
if (gKernelArgs.boot_splash == NULL)
|
||||||
return B_NO_MEMORY;
|
return B_NO_MEMORY;
|
||||||
uncompress(kSplashIcons24BitCompressedImage,
|
uncompress(kSplashIcons24BitCompressedImage,
|
||||||
sizeof(kSplashIcons24BitCompressedImage),
|
sizeof(kSplashIcons24BitCompressedImage),
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ platform_init_video(void)
|
|||||||
edid_dump(&info);
|
edid_dump(&info);
|
||||||
#endif
|
#endif
|
||||||
gKernelArgs.edid_info = kernel_args_malloc(sizeof(edid1_info));
|
gKernelArgs.edid_info = kernel_args_malloc(sizeof(edid1_info));
|
||||||
if (gKernelArgs.edid_info)
|
if (gKernelArgs.edid_info != NULL)
|
||||||
memcpy(gKernelArgs.edid_info, &info, sizeof(edid1_info));
|
memcpy(gKernelArgs.edid_info, &info, sizeof(edid1_info));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ serial_cleanup(void)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
gKernelArgs.debug_output = kernel_args_malloc(sBufferPosition);
|
gKernelArgs.debug_output = kernel_args_malloc(sBufferPosition);
|
||||||
if (gKernelArgs.debug_output) {
|
if (gKernelArgs.debug_output != NULL) {
|
||||||
memcpy(gKernelArgs.debug_output, sBuffer, sBufferPosition);
|
memcpy(gKernelArgs.debug_output, sBuffer, sBufferPosition);
|
||||||
gKernelArgs.debug_size = sBufferPosition;
|
gKernelArgs.debug_size = sBufferPosition;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ apic_disable_local_ints()
|
|||||||
status_t
|
status_t
|
||||||
apic_init(kernel_args *args)
|
apic_init(kernel_args *args)
|
||||||
{
|
{
|
||||||
if (!args->arch_args.apic)
|
if (args->arch_args.apic == NULL)
|
||||||
return B_NO_INIT;
|
return B_NO_INIT;
|
||||||
|
|
||||||
sLocalAPIC = args->arch_args.apic;
|
sLocalAPIC = args->arch_args.apic;
|
||||||
|
|||||||
@@ -650,7 +650,7 @@ ioapic_init(kernel_args* args)
|
|||||||
&ioapic_end_of_interrupt
|
&ioapic_end_of_interrupt
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!args->arch_args.apic)
|
if (args->arch_args.apic == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (args->arch_args.ioapic_phys == 0) {
|
if (args->arch_args.ioapic_phys == 0) {
|
||||||
|
|||||||
@@ -217,7 +217,7 @@ hpet_init(struct kernel_args *args)
|
|||||||
/* hpet_acpi_probe() through a similar "scan spots" table
|
/* hpet_acpi_probe() through a similar "scan spots" table
|
||||||
to that of smp.cpp.
|
to that of smp.cpp.
|
||||||
Seems to be the most elegant solution right now. */
|
Seems to be the most elegant solution right now. */
|
||||||
if (!args->arch_args.hpet)
|
if (args->arch_args.hpet == NULL)
|
||||||
return B_ERROR;
|
return B_ERROR;
|
||||||
|
|
||||||
if (sHPETRegs == NULL) {
|
if (sHPETRegs == NULL) {
|
||||||
|
|||||||
@@ -1384,7 +1384,7 @@ syslog_init_post_vm(struct kernel_args* args)
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// create an area for the debug syslog buffer
|
// create an area for the debug syslog buffer
|
||||||
void* base = (void*)ROUNDDOWN((addr_t)args->debug_output, B_PAGE_SIZE);
|
void* base = (void*)ROUNDDOWN((addr_t)(void *)args->debug_output, B_PAGE_SIZE);
|
||||||
size_t size = ROUNDUP(args->debug_size, B_PAGE_SIZE);
|
size_t size = ROUNDUP(args->debug_size, B_PAGE_SIZE);
|
||||||
area_id area = create_area("syslog debug", &base, B_EXACT_ADDRESS, size,
|
area_id area = create_area("syslog debug", &base, B_EXACT_ADDRESS, size,
|
||||||
B_ALREADY_WIRED, B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA);
|
B_ALREADY_WIRED, B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA);
|
||||||
@@ -1401,7 +1401,7 @@ syslog_init_post_vm(struct kernel_args* args)
|
|||||||
sSyslogMessage->ident[0] = '\0';
|
sSyslogMessage->ident[0] = '\0';
|
||||||
//strcpy(sSyslogMessage->ident, "KERNEL");
|
//strcpy(sSyslogMessage->ident, "KERNEL");
|
||||||
|
|
||||||
if (args->debug_output)
|
if (args->debug_output != NULL)
|
||||||
syslog_write((const char*)args->debug_output, args->debug_size, false);
|
syslog_write((const char*)args->debug_output, args->debug_size, false);
|
||||||
|
|
||||||
char revisionBuffer[64];
|
char revisionBuffer[64];
|
||||||
@@ -1431,7 +1431,7 @@ err1:
|
|||||||
static status_t
|
static status_t
|
||||||
syslog_init(struct kernel_args* args)
|
syslog_init(struct kernel_args* args)
|
||||||
{
|
{
|
||||||
if (!args->keep_debug_output_buffer || !args->debug_output)
|
if (!args->keep_debug_output_buffer || args->debug_output == NULL)
|
||||||
return B_OK;
|
return B_OK;
|
||||||
|
|
||||||
sSyslogBuffer = create_ring_buffer_etc(args->debug_output, args->debug_size,
|
sSyslogBuffer = create_ring_buffer_etc(args->debug_output, args->debug_size,
|
||||||
|
|||||||
@@ -442,7 +442,7 @@ frame_buffer_console_init(kernel_args* args)
|
|||||||
add_boot_item(VESA_MODES_BOOT_INFO, sVesaModes, args->vesa_modes_size);
|
add_boot_item(VESA_MODES_BOOT_INFO, sVesaModes, args->vesa_modes_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (args->edid_info) {
|
if (args->edid_info != NULL) {
|
||||||
edid1_info* info = (edid1_info*)malloc(sizeof(edid1_info));
|
edid1_info* info = (edid1_info*)malloc(sizeof(edid1_info));
|
||||||
if (info != NULL) {
|
if (info != NULL) {
|
||||||
memcpy(info, args->edid_info, sizeof(edid1_info));
|
memcpy(info, args->edid_info, sizeof(edid1_info));
|
||||||
|
|||||||
Reference in New Issue
Block a user