forked from Imagelibrary/rtems
Remove stray white spaces.
This commit is contained in:
@@ -35,7 +35,7 @@
|
||||
|
||||
#ifndef __CONFIGURATION_TEMPLATE_h
|
||||
#define __CONFIGURATION_TEMPLATE_h
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
@@ -120,7 +120,7 @@ rtems_filesystem_mount_table_t configuration_mount_table = {
|
||||
NULL
|
||||
};
|
||||
|
||||
rtems_filesystem_mount_table_t
|
||||
rtems_filesystem_mount_table_t
|
||||
*rtems_filesystem_mount_table = &configuration_mount_table;
|
||||
int rtems_filesystem_mount_table_size = 1;
|
||||
#endif
|
||||
@@ -166,7 +166,7 @@ int rtems_filesystem_mount_table_size = 1;
|
||||
#ifdef CONFIGURE_HAS_OWN_INIT_TASK_TABLE
|
||||
|
||||
/*
|
||||
* The user is defining their own table information and setting the
|
||||
* The user is defining their own table information and setting the
|
||||
* appropriate variables.
|
||||
*/
|
||||
|
||||
@@ -177,7 +177,7 @@ int rtems_filesystem_mount_table_size = 1;
|
||||
#endif
|
||||
|
||||
#ifndef CONFIGURE_INIT_TASK_STACK_SIZE
|
||||
#define CONFIGURE_INIT_TASK_STACK_SIZE RTEMS_MINIMUM_STACK_SIZE
|
||||
#define CONFIGURE_INIT_TASK_STACK_SIZE RTEMS_MINIMUM_STACK_SIZE
|
||||
#endif
|
||||
|
||||
#ifndef CONFIGURE_INIT_TASK_PRIORITY
|
||||
@@ -185,19 +185,19 @@ int rtems_filesystem_mount_table_size = 1;
|
||||
#endif
|
||||
|
||||
#ifndef CONFIGURE_INIT_TASK_ATTRIBUTES
|
||||
#define CONFIGURE_INIT_TASK_ATTRIBUTES RTEMS_DEFAULT_ATTRIBUTES
|
||||
#define CONFIGURE_INIT_TASK_ATTRIBUTES RTEMS_DEFAULT_ATTRIBUTES
|
||||
#endif
|
||||
|
||||
#ifndef CONFIGURE_INIT_TASK_ENTRY_POINT
|
||||
#define CONFIGURE_INIT_TASK_ENTRY_POINT Init
|
||||
#define CONFIGURE_INIT_TASK_ENTRY_POINT Init
|
||||
#endif
|
||||
|
||||
#ifndef CONFIGURE_INIT_TASK_INITIAL_MODES
|
||||
#define CONFIGURE_INIT_TASK_INITIAL_MODES RTEMS_NO_PREEMPT
|
||||
#define CONFIGURE_INIT_TASK_INITIAL_MODES RTEMS_NO_PREEMPT
|
||||
#endif
|
||||
|
||||
#ifndef CONFIGURE_INIT_TASK_ARGUMENTS
|
||||
#define CONFIGURE_INIT_TASK_ARGUMENTS 0
|
||||
#define CONFIGURE_INIT_TASK_ARGUMENTS 0
|
||||
#endif
|
||||
|
||||
#ifdef CONFIGURE_INIT
|
||||
@@ -239,13 +239,13 @@ rtems_initialization_tasks_table Initialization_tasks[] = {
|
||||
#endif
|
||||
#ifdef CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER
|
||||
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
|
||||
#endif
|
||||
#endif
|
||||
#ifdef CONFIGURE_TEST_NEEDS_CLOCK_DRIVER
|
||||
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
|
||||
#endif
|
||||
#endif
|
||||
#ifdef CONFIGURE_TEST_NEEDS_RTC_DRIVER
|
||||
#define CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
|
||||
#endif
|
||||
#endif
|
||||
#ifdef CONFIGURE_TEST_NEEDS_STUB_DRIVER
|
||||
#define CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
|
||||
#endif
|
||||
@@ -332,7 +332,7 @@ rtems_driver_address_table Device_drivers[] = {
|
||||
/*
|
||||
* Default Multiprocessing Configuration Table. The defaults are
|
||||
* appropriate for most of the RTEMS Multiprocessor Test Suite. Each
|
||||
* value may be overridden within each test to customize the environment.
|
||||
* value may be overridden within each test to customize the environment.
|
||||
*/
|
||||
|
||||
#ifdef CONFIGURE_MP_APPLICATION
|
||||
@@ -378,13 +378,13 @@ rtems_multiprocessing_table Multiprocessing_configuration = {
|
||||
#define CONFIGURE_MULTIPROCESSING_TABLE NULL
|
||||
|
||||
#endif /* CONFIGURE_MP_APPLICATION */
|
||||
|
||||
|
||||
/*
|
||||
* Default Configuration Table.
|
||||
* Default Configuration Table.
|
||||
*/
|
||||
|
||||
#ifndef CONFIGURE_HAS_OWN_CONFIGURATION_TABLE
|
||||
|
||||
|
||||
#ifndef CONFIGURE_EXECUTIVE_RAM_WORK_AREA
|
||||
#define CONFIGURE_EXECUTIVE_RAM_WORK_AREA NULL
|
||||
#endif
|
||||
@@ -425,7 +425,7 @@ rtems_multiprocessing_table Multiprocessing_configuration = {
|
||||
#define CONFIGURE_MAXIMUM_USER_EXTENSIONS 0
|
||||
#endif
|
||||
|
||||
#ifndef CONFIGURE_MICROSECONDS_PER_TICK
|
||||
#ifndef CONFIGURE_MICROSECONDS_PER_TICK
|
||||
#define CONFIGURE_MICROSECONDS_PER_TICK RTEMS_MILLISECONDS_TO_MICROSECONDS(10)
|
||||
#endif
|
||||
|
||||
@@ -523,11 +523,11 @@ rtems_extensions_table Configuration_Initial_Extensions[] = {
|
||||
* The user is defining their own table information and setting the
|
||||
* appropriate variables for the POSIX Initialization Thread Table.
|
||||
*/
|
||||
|
||||
|
||||
#else
|
||||
|
||||
#ifndef CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT
|
||||
#define CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT POSIX_Init
|
||||
#define CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT POSIX_Init
|
||||
#endif
|
||||
|
||||
#ifndef CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
|
||||
@@ -542,7 +542,7 @@ posix_initialization_threads_table POSIX_Initialization_threads[] = {
|
||||
#endif
|
||||
|
||||
#define CONFIGURE_POSIX_INIT_THREAD_TABLE_NAME POSIX_Initialization_threads
|
||||
|
||||
|
||||
#define CONFIGURE_POSIX_INIT_THREAD_TABLE_SIZE \
|
||||
sizeof(CONFIGURE_POSIX_INIT_THREAD_TABLE_NAME) / \
|
||||
sizeof(posix_initialization_threads_table)
|
||||
@@ -802,7 +802,7 @@ itron_initialization_tasks_table ITRON_Initialization_tasks[] = {
|
||||
#endif /* RTEMS_ITRON_API */
|
||||
|
||||
|
||||
/*
|
||||
/*
|
||||
* Calculate the RAM size based on the maximum number of objects configured.
|
||||
*/
|
||||
|
||||
@@ -898,7 +898,7 @@ itron_initialization_tasks_table ITRON_Initialization_tasks[] = {
|
||||
#define CONFIGURE_API_MUTEX_MEMORY \
|
||||
( (1) * \
|
||||
( sizeof(API_Mutex_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) \
|
||||
)
|
||||
)
|
||||
|
||||
#define CONFIGURE_MEMORY_FOR_SYSTEM_OVERHEAD \
|
||||
( CONFIGURE_MEMORY_FOR_TASKS(1) + /* IDLE */ \
|
||||
@@ -1036,7 +1036,7 @@ itron_api_configuration_table Configuration_ITRON_API = {
|
||||
rtems_configuration_table Configuration = {
|
||||
CONFIGURE_EXECUTIVE_RAM_WORK_AREA,
|
||||
CONFIGURE_EXECUTIVE_RAM_SIZE,
|
||||
CONFIGURE_MAXIMUM_USER_EXTENSIONS + CONFIGURE_NEWLIB_EXTENSION +
|
||||
CONFIGURE_MAXIMUM_USER_EXTENSIONS + CONFIGURE_NEWLIB_EXTENSION +
|
||||
CONFIGURE_STACK_CHECKER_EXTENSION,
|
||||
CONFIGURE_MICROSECONDS_PER_TICK,
|
||||
CONFIGURE_TICKS_PER_TIMESLICE,
|
||||
@@ -1066,7 +1066,7 @@ rtems_configuration_table Configuration = {
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* Some warnings and error checking
|
||||
*/
|
||||
|
||||
@@ -30,10 +30,10 @@ extern "C" {
|
||||
|
||||
#include <rtems/score/object.h>
|
||||
#define RTEMS_UNLIMITED_OBJECTS OBJECTS_UNLIMITED_OBJECTS
|
||||
|
||||
|
||||
#define rtems_resource_unlimited(resource) \
|
||||
( resource | RTEMS_UNLIMITED_OBJECTS )
|
||||
|
||||
|
||||
/*
|
||||
* This is kind of kludgy but it allows targets to totally ignore the
|
||||
* optional APIs like POSIX and ITRON safely.
|
||||
|
||||
@@ -44,12 +44,12 @@ extern "C" {
|
||||
* table corresponds to an application provided device driver and
|
||||
* defines the entry points for that device driver.
|
||||
*/
|
||||
|
||||
|
||||
typedef uint32_t rtems_device_major_number;
|
||||
typedef uint32_t rtems_device_minor_number;
|
||||
|
||||
|
||||
typedef rtems_status_code rtems_device_driver;
|
||||
|
||||
|
||||
typedef rtems_device_driver ( *rtems_device_driver_entry )(
|
||||
rtems_device_major_number,
|
||||
rtems_device_minor_number,
|
||||
@@ -64,7 +64,7 @@ typedef struct {
|
||||
rtems_device_driver_entry write_entry; /* write request procedure */
|
||||
rtems_device_driver_entry control_entry; /* special functions procedure */
|
||||
} rtems_driver_address_table;
|
||||
|
||||
|
||||
/*
|
||||
* Table for the io device names
|
||||
*/
|
||||
|
||||
@@ -49,7 +49,7 @@ extern "C" {
|
||||
* It is used in single processor configurations.
|
||||
*/
|
||||
|
||||
#if defined(SAPI_INIT)
|
||||
#if defined(SAPI_INIT)
|
||||
const rtems_multiprocessing_table
|
||||
_Initialization_Default_multiprocessing_table = {
|
||||
1, /* local node number */
|
||||
|
||||
@@ -18,29 +18,29 @@
|
||||
*
|
||||
* _Debug_Manager_initialization
|
||||
*/
|
||||
|
||||
|
||||
void _Debug_Manager_initialization( void )
|
||||
{
|
||||
rtems_debug_disable( RTEMS_DEBUG_ALL_MASK );
|
||||
}
|
||||
|
||||
|
||||
/*PAGE
|
||||
*
|
||||
* rtems_debug_enable
|
||||
*/
|
||||
|
||||
|
||||
void rtems_debug_enable (
|
||||
rtems_debug_control to_be_enabled
|
||||
)
|
||||
{
|
||||
_Debug_Level |= to_be_enabled;
|
||||
}
|
||||
|
||||
|
||||
/*PAGE
|
||||
*
|
||||
* rtems_debug_disable
|
||||
*/
|
||||
|
||||
|
||||
void rtems_debug_disable (
|
||||
rtems_debug_control to_be_disabled
|
||||
)
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* SCORE_INIT and SAPI_INIT are defined so all of the super core and
|
||||
* SCORE_INIT and SAPI_INIT are defined so all of the super core and
|
||||
* super API data will be included in this object file.
|
||||
*/
|
||||
|
||||
@@ -138,7 +138,7 @@ rtems_interrupt_level rtems_initialize_executive_early(
|
||||
*/
|
||||
|
||||
if ( multiprocessing_table == NULL )
|
||||
multiprocessing_table =
|
||||
multiprocessing_table =
|
||||
(void *)&_Initialization_Default_multiprocessing_table;
|
||||
|
||||
if ( cpu_table == NULL )
|
||||
@@ -224,7 +224,7 @@ rtems_interrupt_level rtems_initialize_executive_early(
|
||||
_System_state_Set( SYSTEM_STATE_BEFORE_MULTITASKING );
|
||||
|
||||
/*
|
||||
* No threads should be created before this point!!!
|
||||
* No threads should be created before this point!!!
|
||||
* _Thread_Executing and _Thread_Heir are not set.
|
||||
*
|
||||
* At this point all API extensions are in place. After the call to
|
||||
@@ -248,20 +248,20 @@ rtems_interrupt_level rtems_initialize_executive_early(
|
||||
/*
|
||||
* Run the API and BSPs predriver hook.
|
||||
*/
|
||||
|
||||
|
||||
_API_extensions_Run_predriver();
|
||||
|
||||
|
||||
if ( _CPU_Table.predriver_hook )
|
||||
(*_CPU_Table.predriver_hook)();
|
||||
|
||||
|
||||
/*
|
||||
* Initialize all the device drivers and initialize the MPCI layer.
|
||||
*
|
||||
* NOTE: The MPCI may be build upon a device driver.
|
||||
*/
|
||||
|
||||
|
||||
_IO_Initialize_all_drivers();
|
||||
|
||||
|
||||
#if defined(RTEMS_MULTIPROCESSING)
|
||||
if ( _System_state_Is_multiprocessing ) {
|
||||
_MPCI_Initialization();
|
||||
@@ -270,15 +270,15 @@ rtems_interrupt_level rtems_initialize_executive_early(
|
||||
);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* Run the APIs and BSPs postdriver hooks.
|
||||
*
|
||||
* The API extensions are supposed to create user initialization tasks.
|
||||
*/
|
||||
|
||||
|
||||
_API_extensions_Run_postdriver();
|
||||
|
||||
|
||||
if ( _CPU_Table.postdriver_hook )
|
||||
(*_CPU_Table.postdriver_hook)();
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
* workspace.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
void _IO_Manager_initialization(
|
||||
rtems_driver_address_table *driver_table,
|
||||
uint32_t drivers_in_table,
|
||||
@@ -43,11 +43,11 @@ void _IO_Manager_initialization(
|
||||
|
||||
if ( number_of_drivers < drivers_in_table )
|
||||
number_of_drivers = drivers_in_table;
|
||||
|
||||
|
||||
tmp = _Workspace_Allocate_or_fatal_error(
|
||||
sizeof( rtems_driver_address_table ) * ( number_of_drivers )
|
||||
);
|
||||
|
||||
|
||||
_IO_Driver_address_table = (rtems_driver_address_table *) tmp;
|
||||
|
||||
memset(
|
||||
@@ -58,16 +58,16 @@ void _IO_Manager_initialization(
|
||||
if ( drivers_in_table )
|
||||
for ( index = 0 ; index < drivers_in_table ; index++ )
|
||||
_IO_Driver_address_table[index] = driver_table[index];
|
||||
|
||||
|
||||
_IO_Number_of_drivers = number_of_drivers;
|
||||
_IO_Number_of_devices = number_of_devices;
|
||||
|
||||
|
||||
tmp = _Workspace_Allocate_or_fatal_error(
|
||||
sizeof( rtems_driver_name_t ) * ( number_of_devices + 1 )
|
||||
);
|
||||
|
||||
|
||||
_IO_Driver_name_table = (rtems_driver_name_t *) tmp;
|
||||
|
||||
|
||||
for( index=0, np = _IO_Driver_name_table ;
|
||||
index < _IO_Number_of_devices ;
|
||||
index++, np++ ) {
|
||||
@@ -109,7 +109,7 @@ void _IO_Initialize_all_drivers( void )
|
||||
* driver_table - driver callout function table
|
||||
* registered_major - the major number which is registered
|
||||
*
|
||||
* Output Parameters:
|
||||
* Output Parameters:
|
||||
* RTEMS_SUCCESSFUL - if successful
|
||||
* error code - if unsuccessful
|
||||
*/
|
||||
@@ -142,7 +142,7 @@ rtems_status_code rtems_io_register_driver(
|
||||
_IO_Driver_address_table[major].open_entry == 0 ))
|
||||
return RTEMS_TOO_MANY;
|
||||
}
|
||||
|
||||
|
||||
if ( _IO_Driver_address_table[major].initialization_entry == 0 &&
|
||||
_IO_Driver_address_table[major].open_entry == 0 )
|
||||
{
|
||||
@@ -166,7 +166,7 @@ rtems_status_code rtems_io_register_driver(
|
||||
* Input Paramters:
|
||||
* major - device major number
|
||||
*
|
||||
* Output Parameters:
|
||||
* Output Parameters:
|
||||
* RTEMS_SUCCESSFUL - if successful
|
||||
* error code - if unsuccessful
|
||||
*/
|
||||
@@ -198,7 +198,7 @@ rtems_status_code rtems_io_unregister_driver(
|
||||
* major - device major number to receive name
|
||||
* minor - device minor number to receive name
|
||||
*
|
||||
* Output Parameters:
|
||||
* Output Parameters:
|
||||
* RTEMS_SUCCESSFUL - if successful
|
||||
* error code - if unsuccessful
|
||||
*/
|
||||
@@ -216,7 +216,7 @@ rtems_status_code rtems_io_register_name(
|
||||
|
||||
/* find an empty slot */
|
||||
for( index=0, np = _IO_Driver_name_table ;
|
||||
index < _IO_Number_of_devices ;
|
||||
index < _IO_Number_of_devices ;
|
||||
index++, np++ )
|
||||
{
|
||||
|
||||
@@ -260,7 +260,7 @@ rtems_status_code rtems_io_initialize(
|
||||
)
|
||||
{
|
||||
rtems_device_driver_entry callout;
|
||||
|
||||
|
||||
if ( major >= _IO_Number_of_drivers )
|
||||
return RTEMS_INVALID_NUMBER;
|
||||
|
||||
@@ -290,7 +290,7 @@ rtems_status_code rtems_io_open(
|
||||
)
|
||||
{
|
||||
rtems_device_driver_entry callout;
|
||||
|
||||
|
||||
if ( major >= _IO_Number_of_drivers )
|
||||
return RTEMS_INVALID_NUMBER;
|
||||
|
||||
@@ -320,7 +320,7 @@ rtems_status_code rtems_io_close(
|
||||
)
|
||||
{
|
||||
rtems_device_driver_entry callout;
|
||||
|
||||
|
||||
if ( major >= _IO_Number_of_drivers )
|
||||
return RTEMS_INVALID_NUMBER;
|
||||
|
||||
@@ -350,7 +350,7 @@ rtems_status_code rtems_io_read(
|
||||
)
|
||||
{
|
||||
rtems_device_driver_entry callout;
|
||||
|
||||
|
||||
if ( major >= _IO_Number_of_drivers )
|
||||
return RTEMS_INVALID_NUMBER;
|
||||
|
||||
@@ -380,7 +380,7 @@ rtems_status_code rtems_io_write(
|
||||
)
|
||||
{
|
||||
rtems_device_driver_entry callout;
|
||||
|
||||
|
||||
if ( major >= _IO_Number_of_drivers )
|
||||
return RTEMS_INVALID_NUMBER;
|
||||
|
||||
@@ -410,7 +410,7 @@ rtems_status_code rtems_io_control(
|
||||
)
|
||||
{
|
||||
rtems_device_driver_entry callout;
|
||||
|
||||
|
||||
if ( major >= _IO_Number_of_drivers )
|
||||
return RTEMS_INVALID_NUMBER;
|
||||
|
||||
|
||||
@@ -73,18 +73,18 @@ void _ITRON_API_Initialize(
|
||||
assert( sizeof(ID) == sizeof(Objects_Id) );
|
||||
|
||||
api_configuration = configuration_table->ITRON_api_configuration;
|
||||
if ( !api_configuration )
|
||||
if ( !api_configuration )
|
||||
api_configuration = &_ITRON_Default_configuration;
|
||||
|
||||
_Objects_Information_table[OBJECTS_ITRON_API] = _ITRON_Objects;
|
||||
|
||||
|
||||
_ITRON_Task_Manager_initialization(
|
||||
api_configuration->maximum_tasks,
|
||||
api_configuration->number_of_initialization_tasks,
|
||||
api_configuration->User_initialization_tasks_table
|
||||
);
|
||||
|
||||
_ITRON_Semaphore_Manager_initialization(
|
||||
|
||||
_ITRON_Semaphore_Manager_initialization(
|
||||
api_configuration->maximum_semaphores
|
||||
);
|
||||
|
||||
|
||||
@@ -75,7 +75,7 @@ void _POSIX_API_Initialize(
|
||||
assert( sizeof(pthread_t) == sizeof(Objects_Id) );
|
||||
|
||||
api_configuration = configuration_table->POSIX_api_configuration;
|
||||
if ( !api_configuration )
|
||||
if ( !api_configuration )
|
||||
api_configuration = &_POSIX_Default_configuration;
|
||||
|
||||
_Objects_Information_table[OBJECTS_POSIX_API] = _POSIX_Objects;
|
||||
@@ -89,14 +89,14 @@ void _POSIX_API_Initialize(
|
||||
api_configuration->number_of_initialization_threads,
|
||||
api_configuration->User_initialization_threads_table
|
||||
);
|
||||
|
||||
|
||||
_POSIX_Condition_variables_Manager_initialization(
|
||||
api_configuration->maximum_condition_variables
|
||||
);
|
||||
|
||||
_POSIX_Key_Manager_initialization( api_configuration->maximum_keys );
|
||||
|
||||
_POSIX_Mutex_Manager_initialization(
|
||||
_POSIX_Mutex_Manager_initialization(
|
||||
api_configuration->maximum_mutexes
|
||||
);
|
||||
|
||||
|
||||
@@ -60,37 +60,37 @@ void _RTEMS_API_Initialize(
|
||||
_Objects_Information_table[OBJECTS_CLASSIC_API] = _RTEMS_Objects;
|
||||
|
||||
_Attributes_Handler_initialization();
|
||||
|
||||
|
||||
_Interrupt_Manager_initialization();
|
||||
|
||||
|
||||
#if defined(RTEMS_MULTIPROCESSING)
|
||||
_Multiprocessing_Manager_initialization();
|
||||
#endif
|
||||
|
||||
|
||||
_RTEMS_tasks_Manager_initialization(
|
||||
api_configuration->maximum_tasks,
|
||||
api_configuration->number_of_initialization_tasks,
|
||||
api_configuration->User_initialization_tasks_table
|
||||
);
|
||||
|
||||
|
||||
_Timer_Manager_initialization( api_configuration->maximum_timers );
|
||||
|
||||
|
||||
_Signal_Manager_initialization();
|
||||
|
||||
|
||||
_Event_Manager_initialization();
|
||||
|
||||
|
||||
_Message_queue_Manager_initialization(
|
||||
api_configuration->maximum_message_queues
|
||||
);
|
||||
|
||||
|
||||
_Semaphore_Manager_initialization( api_configuration->maximum_semaphores );
|
||||
|
||||
|
||||
_Partition_Manager_initialization( api_configuration->maximum_partitions );
|
||||
|
||||
|
||||
_Region_Manager_initialization( api_configuration->maximum_regions );
|
||||
|
||||
|
||||
_Dual_ported_memory_Manager_initialization( api_configuration->maximum_ports);
|
||||
|
||||
|
||||
_Rate_monotonic_Manager_initialization( api_configuration->maximum_periods );
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user