Changes to platform device handling, irqs, userspace device configuration

Revised irq handling and device address naming on internal devices.
This commit is contained in:
Bahadir Balban
2009-11-29 18:11:08 +02:00
parent fa660514df
commit 346d79c0cd
21 changed files with 267 additions and 157 deletions

View File

@@ -139,31 +139,18 @@ cap_strings = { 'ipc' : \
\t\t\t\t.size = ${size},
\t\t\t},
'''
, 'uart' : \
, 'device' : \
'''
\t\t\t[${idx}] = {
\t\t\t\t/* For device selection */
\t\t\t\t.target = ${cid},
\t\t\t\t.attr = CAP_DEVTYPE_UART | (${devnum} << 16),
\t\t\t\t.attr = (CAP_DEVTYPE_${devtype} & CAP_DEVTYPE_MASK)
\t\t\t\t\t| ((${devnum} << CAP_DEVNUM_SHIFT) & CAP_DEVNUM_MASK),
\t\t\t\t.type = CAP_TYPE_MAP_PHYSMEM | CAP_RTYPE_CONTAINER,
\t\t\t\t.access = CAP_MAP_READ | CAP_MAP_WRITE | CAP_MAP_EXEC |
\t\t\t\t\tCAP_MAP_CACHED | CAP_MAP_UNCACHED | CAP_MAP_UNMAP | CAP_MAP_UTCB,
\t\t\t\t.start = __pfn(PLATFORM_CONSOLE${devnum}_PHY_BASE),
\t\t\t\t.end = __pfn(PLATFORM_CONSOLE${devnum}_PHY_BASE) + 1,
\t\t\t\t.size = 1,
\t\t\t},
'''
, 'timer' : \
'''
\t\t\t[${idx}] = {
\t\t\t\t/* For device selection */
\t\t\t\t.target = ${cid},
\t\t\t\t.attr = CAP_DEVTYPE_TIMER | (${devnum} << 16),
\t\t\t\t.type = CAP_TYPE_MAP_PHYSMEM | CAP_RTYPE_CONTAINER,
\t\t\t\t.access = CAP_MAP_READ | CAP_MAP_WRITE | CAP_MAP_EXEC |
\t\t\t\t\tCAP_MAP_CACHED | CAP_MAP_UNCACHED | CAP_MAP_UNMAP | CAP_MAP_UTCB,
\t\t\t\t.start = __pfn(PLATFORM_TIMER${devnum}_PHY_BASE),
\t\t\t\t.end = __pfn(PLATFORM_TIMER${devnum}_PHY_BASE) + 1,
\t\t\t\t\tCAP_MAP_CACHED | CAP_MAP_UNCACHED | CAP_MAP_UNMAP,
\t\t\t\t.start = __pfn(PLATFORM_${devname}_BASE),
\t\t\t\t.end = __pfn(PLATFORM_${devname}_BASE + PLATFORM_${devname}_SIZE),
\t\t\t\t.size = 1,
\t\t\t},
'''
@@ -193,38 +180,42 @@ def prepare_custom_capability(cont, param, val):
# Else we leave container id to user-supplied value
if ttype == 'CURRENT_CONTAINER':
cont.caps[capkey] = templ.safe_substitute(target_rtype = 'CAP_RTYPE_CONTAINER',
cid = cont.id)
cid = cont.id)
elif ttype == 'CURRENT_PAGER_SPACE':
cont.caps[capkey] = templ.safe_substitute(target_rtype = 'CAP_RTYPE_SPACE',
cid = cont.id)
cid = cont.id)
elif ttype == 'ANOTHER_CONTAINER':
cont.caps[capkey] = templ.safe_substitute(target_rtype = 'CAP_RTYPE_CONTAINER')
elif ttype == 'ANOTHER_PAGER':
cont.caps[capkey] = templ.safe_substitute(target_rtype = 'CAP_RTYPE_THREAD')
elif 'DEVICE' in param:
# Extract all fields
unused, device_name, rest = param.split('_', 2)
capkey = device_name.lower()
cont.caps[capkey] = cap_strings['device']
templ = Template(cont.caps[capkey])
device_id = device_name[-1:]
device_type = device_name[:-1]
# Fill in all blanks
cont.caps[capkey] = \
templ.safe_substitute(cid = cont.id,
devname = device_name,
devnum = device_id,
devtype = device_type)
else: # Ignore custom_use symbol
return
#print capkey
#print cont.caps[capkey]
# print capkey
# print cont.caps[capkey]
def prepare_typed_capability(cont, param, val):
captype, params = param.split('_', 1)
captype = captype.lower()
# USE makes us assign the initial cap string with blank fields
if 'USE' in params:
# Special case for device
if 'DEVICE' in params:
# Extract device name and number
devid = captype[-1:]
devname = captype[: -1]
cont.caps[captype] = cap_strings[devname]
else:
cont.caps[captype] = cap_strings[captype]
cont.caps[captype] = cap_strings[captype]
# Prepare string template from capability type
templ = Template(cont.caps[captype])
@@ -233,11 +224,6 @@ def prepare_typed_capability(cont, param, val):
if captype[-len('pool'):] == 'pool':
cont.caps[captype] = templ.safe_substitute(cid = cont.id)
# If device, amend current container id and devnum as default
if 'DEVICE' in params:
cont.caps[captype] = \
templ.safe_substitute(cid = cont.id, devnum = devid)
# Fill in the blank size field
elif 'SIZE' in params:
# Get reference to capability string template
@@ -278,7 +264,7 @@ def prepare_typed_capability(cont, param, val):
#print cont.caps[captype]
def prepare_capability(cont, param, val):
if 'CUSTOM' in param:
if 'CUSTOM' in param or 'DEVICE' in param:
prepare_custom_capability(cont, param, val)
else:
prepare_typed_capability(cont, param, val)

View File

@@ -219,38 +219,38 @@ menu cont%(cn)d_physmem_list
# FIXME: All this is to be moved to a per-platform description file.
#
symbols
cont%(cn)d_device_uart1 'Container %(cn)d UART1 Menu'
cont%(cn)d_device_uart2 'Container %(cn)d UART2 Menu'
cont%(cn)d_device_uart3 'Container %(cn)d UART3 Menu'
cont%(cn)d_device_timer1 'Container %(cn)d TIMER23 Menu'
cont%(cn)d_cap_device_uart1 'Container %(cn)d UART1 Menu'
cont%(cn)d_cap_device_uart2 'Container %(cn)d UART2 Menu'
cont%(cn)d_cap_device_uart3 'Container %(cn)d UART3 Menu'
cont%(cn)d_cap_device_timer1 'Container %(cn)d TIMER23 Menu'
CONT%(cn)d_CAP_UART1_DEVICE_USE 'Container %(cn)d UART1 Enable'
CONT%(cn)d_CAP_UART2_DEVICE_USE 'Container %(cn)d UART2 Enable'
CONT%(cn)d_CAP_UART3_DEVICE_USE 'Container %(cn)d UART3 Enable'
CONT%(cn)d_CAP_TIMER1_DEVICE_USE 'Container %(cn)d TIMER23 Enable'
CONT%(cn)d_CAP_DEVICE_UART1_USE 'Container %(cn)d UART1 Enable'
CONT%(cn)d_CAP_DEVICE_UART2_USE 'Container %(cn)d UART2 Enable'
CONT%(cn)d_CAP_DEVICE_UART3_USE 'Container %(cn)d UART3 Enable'
CONT%(cn)d_CAP_DEVICE_TIMER1_USE 'Container %(cn)d TIMER23 Enable'
default CONT%(cn)d_CAP_UART1_DEVICE_USE from n
default CONT%(cn)d_CAP_UART2_DEVICE_USE from n
default CONT%(cn)d_CAP_UART3_DEVICE_USE from n
default CONT%(cn)d_CAP_TIMER1_DEVICE_USE from n
default CONT%(cn)d_CAP_DEVICE_UART1_USE from n
default CONT%(cn)d_CAP_DEVICE_UART2_USE from n
default CONT%(cn)d_CAP_DEVICE_UART3_USE from n
default CONT%(cn)d_CAP_DEVICE_TIMER1_USE from n
menu cont%(cn)d_device_uart1
CONT%(cn)d_CAP_UART1_DEVICE_USE
menu cont%(cn)d_cap_device_uart1
CONT%(cn)d_CAP_DEVICE_UART1_USE
menu cont%(cn)d_device_uart2
CONT%(cn)d_CAP_UART2_DEVICE_USE
menu cont%(cn)d_cap_device_uart2
CONT%(cn)d_CAP_DEVICE_UART2_USE
menu cont%(cn)d_device_uart3
CONT%(cn)d_CAP_UART3_DEVICE_USE
menu cont%(cn)d_cap_device_uart3
CONT%(cn)d_CAP_DEVICE_UART3_USE
menu cont%(cn)d_device_timer1
CONT%(cn)d_CAP_TIMER1_DEVICE_USE
menu cont%(cn)d_cap_device_timer1
CONT%(cn)d_CAP_DEVICE_TIMER1_USE
menu cont%(cn)d_device_list
cont%(cn)d_device_uart1
cont%(cn)d_device_uart2
cont%(cn)d_device_uart3
cont%(cn)d_device_timer1
cont%(cn)d_cap_device_uart1
cont%(cn)d_cap_device_uart2
cont%(cn)d_cap_device_uart3
cont%(cn)d_cap_device_timer1
#
# Settings for Custom Capabilities

View File

@@ -2,7 +2,7 @@
# Automatically generated, don't edit
#
# Generated on: bahadir-laptop
# At: Sun, 22 Nov 2009 12:50:07 +0000
# At: Sun, 29 Nov 2009 15:31:45 +0000
# Linux version 2.6.24-22-generic (buildd@vernadsky) (gcc version 4.2.3 (Ubuntu 4.2.3-2ubuntu7)) #1 SMP Mon Nov 24 18:32:42 UTC 2008
#
@@ -46,7 +46,6 @@ CONFIG_CPU_ARM926=y
# ARM Platform Type
#
CONFIG_PLATFORM_EB=n
CONFIG_PLATFORM_AB926=n
CONFIG_PLATFORM_PB926=y
@@ -74,7 +73,6 @@ CONFIG_CAPABILITIES=y
#
CONFIG_CONT0_TYPE_BAREMETAL=y
CONFIG_CONT0_TYPE_POSIX=n
CONFIG_CONT0_TYPE_CUSTOM=n
CONFIG_CONT0_TYPE_LINUX=n
@@ -90,6 +88,8 @@ CONFIG_CONT0_BAREMETAL_PROJ0=n
CONFIG_CONT0_BAREMETAL_PROJ1=y
CONFIG_CONT0_BAREMETAL_PROJ2=n
CONFIG_CONT0_BAREMETAL_PROJ3=n
CONFIG_CONT0_BAREMETAL_PROJ4=n
CONFIG_CONT0_BAREMETAL_PROJ5=n
#
@@ -221,6 +221,35 @@ CONFIG_CONT0_CAP_CUSTOM3_USE=n
#
# Container 0 Devices (Capabilities)
#
#
# Container 0 UART1 Menu
#
CONFIG_CONT0_CAP_DEVICE_UART1_USE=n
#
# Container 0 UART2 Menu
#
CONFIG_CONT0_CAP_DEVICE_UART2_USE=n
#
# Container 0 UART3 Menu
#
CONFIG_CONT0_CAP_DEVICE_UART3_USE=n
#
# Container 0 TIMER23 Menu
#
CONFIG_CONT0_CAP_DEVICE_TIMER1_USE=n
#
@@ -232,7 +261,6 @@ CONFIG_CONT0_CAP_CUSTOM3_USE=n
#
CONFIG_CONT1_TYPE_BAREMETAL=y
CONFIG_CONT1_TYPE_POSIX=n
CONFIG_CONT1_TYPE_CUSTOM=n
CONFIG_CONT1_TYPE_LINUX=n
@@ -248,6 +276,8 @@ CONFIG_CONT1_BAREMETAL_PROJ0=n
CONFIG_CONT1_BAREMETAL_PROJ1=y
CONFIG_CONT1_BAREMETAL_PROJ2=n
CONFIG_CONT1_BAREMETAL_PROJ3=n
CONFIG_CONT1_BAREMETAL_PROJ4=n
CONFIG_CONT1_BAREMETAL_PROJ5=n
#
@@ -379,6 +409,35 @@ CONFIG_CONT1_CAP_CUSTOM3_USE=n
#
# Container 1 Devices (Capabilities)
#
#
# Container 1 UART1 Menu
#
CONFIG_CONT1_CAP_DEVICE_UART1_USE=n
#
# Container 1 UART2 Menu
#
CONFIG_CONT1_CAP_DEVICE_UART2_USE=n
#
# Container 1 UART3 Menu
#
CONFIG_CONT1_CAP_DEVICE_UART3_USE=n
#
# Container 1 TIMER23 Menu
#
CONFIG_CONT1_CAP_DEVICE_TIMER1_USE=n
#
@@ -390,7 +449,6 @@ CONFIG_CONT1_CAP_CUSTOM3_USE=n
#
CONFIG_CONT2_TYPE_BAREMETAL=y
CONFIG_CONT2_TYPE_POSIX=n
CONFIG_CONT2_TYPE_CUSTOM=n
CONFIG_CONT2_TYPE_LINUX=n
@@ -406,6 +464,8 @@ CONFIG_CONT2_BAREMETAL_PROJ0=n
CONFIG_CONT2_BAREMETAL_PROJ1=y
CONFIG_CONT2_BAREMETAL_PROJ2=n
CONFIG_CONT2_BAREMETAL_PROJ3=n
CONFIG_CONT2_BAREMETAL_PROJ4=n
CONFIG_CONT2_BAREMETAL_PROJ5=n
#
@@ -537,6 +597,35 @@ CONFIG_CONT2_CAP_CUSTOM3_USE=n
#
# Container 2 Devices (Capabilities)
#
#
# Container 2 UART1 Menu
#
CONFIG_CONT2_CAP_DEVICE_UART1_USE=n
#
# Container 2 UART2 Menu
#
CONFIG_CONT2_CAP_DEVICE_UART2_USE=n
#
# Container 2 UART3 Menu
#
CONFIG_CONT2_CAP_DEVICE_UART3_USE=n
#
# Container 2 TIMER23 Menu
#
CONFIG_CONT2_CAP_DEVICE_TIMER1_USE=n
#
@@ -548,7 +637,6 @@ CONFIG_CONT2_CAP_CUSTOM3_USE=n
#
CONFIG_CONT3_TYPE_BAREMETAL=y
CONFIG_CONT3_TYPE_POSIX=n
CONFIG_CONT3_TYPE_CUSTOM=n
CONFIG_CONT3_TYPE_LINUX=n
@@ -564,6 +652,8 @@ CONFIG_CONT3_BAREMETAL_PROJ0=n
CONFIG_CONT3_BAREMETAL_PROJ1=y
CONFIG_CONT3_BAREMETAL_PROJ2=n
CONFIG_CONT3_BAREMETAL_PROJ3=n
CONFIG_CONT3_BAREMETAL_PROJ4=n
CONFIG_CONT3_BAREMETAL_PROJ5=n
#
@@ -695,15 +785,56 @@ CONFIG_CONT3_CAP_CUSTOM3_USE=n
#
# Container 3 Devices (Capabilities)
#
#
# Container 3 UART1 Menu
#
CONFIG_CONT3_CAP_DEVICE_UART1_USE=n
#
# Container 3 UART2 Menu
#
CONFIG_CONT3_CAP_DEVICE_UART2_USE=n
#
# Container 3 UART3 Menu
#
CONFIG_CONT3_CAP_DEVICE_UART3_USE=n
#
# Container 3 TIMER23 Menu
#
CONFIG_CONT3_CAP_DEVICE_TIMER1_USE=n
#
# Derived symbols
#
CONFIG_CONT1_PAGER_LOAD_ADDR=0x100000
CONFIG_DRIVER_IRQ_PL190=y
CONFIG_DRIVER_TIMER_SP804=y
CONFIG_CONT3_START_PC_ADDR=0x40000000
CONFIG_DRIVER_IRQ_GIC=n
CONFIG_CONT2_PAGER_VIRT_ADDR=0x30000000
CONFIG_CONT2_PAGER_LOAD_ADDR=0x200000
CONFIG_CONT1_PAGER_VIRT_ADDR=0x20000000
CONFIG_CONT3_PAGER_LOAD_ADDR=0x300000
CONFIG_CONT0_PAGER_LOAD_ADDR=0x40000
CONFIG_CONT0_PAGER_VIRT_ADDR=0x10000000
CONFIG_CONT2_START_PC_ADDR=0x30000000
CONFIG_DRIVER_UART_PL011=y
CONFIG_CONT3_PAGER_VIRT_ADDR=0x40000000
CONFIG_CONT0_START_PC_ADDR=0x10000000
CONFIG_CONT1_START_PC_ADDR=0x20000000
#
# That's all, folks!