From 5c6b230e42837aa41dc4b6cabe0ceda631cd4cc6 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 15 Aug 2017 22:17:02 +0200 Subject: [PATCH 001/137] Start adding separate setting 'framebuffer_opacity' --- config.def.h | 2 ++ configuration.c | 1 + configuration.h | 1 + intl/msg_hash_chs.h | 4 ++++ intl/msg_hash_cht.h | 4 ++++ intl/msg_hash_de.h | 4 ++++ intl/msg_hash_eo.h | 4 ++++ intl/msg_hash_fr.h | 4 ++++ intl/msg_hash_it.h | 4 ++++ intl/msg_hash_ja.h | 4 ++++ intl/msg_hash_ko.h | 4 ++++ intl/msg_hash_lbl.h | 2 ++ intl/msg_hash_nl.h | 4 ++++ intl/msg_hash_pt_br.h | 4 ++++ intl/msg_hash_pt_pt.h | 4 ++++ intl/msg_hash_ru.h | 4 ++++ intl/msg_hash_us.h | 4 ++++ intl/msg_hash_vn.h | 4 ++++ menu/cbs/menu_cbs_sublabel.c | 4 ++++ menu/drivers/materialui.c | 14 +++++++------- menu/menu_displaylist.c | 3 +++ menu/menu_setting.c | 15 +++++++++++++++ msg_hash.h | 1 + 23 files changed, 92 insertions(+), 7 deletions(-) diff --git a/config.def.h b/config.def.h index fcb34eb585..dd2fabe798 100644 --- a/config.def.h +++ b/config.def.h @@ -267,6 +267,8 @@ static bool xmb_show_add = true; #endif #endif +static float menu_framebuffer_opacity = 0.900; + static float menu_wallpaper_opacity = 0.300; static float menu_footer_opacity = 1.000; diff --git a/configuration.c b/configuration.c index 52d44cb071..f14ff753b5 100644 --- a/configuration.c +++ b/configuration.c @@ -1297,6 +1297,7 @@ static struct config_float_setting *populate_settings_float(settings_t *settings #endif #ifdef HAVE_MENU SETTING_FLOAT("menu_wallpaper_opacity", &settings->floats.menu_wallpaper_opacity, true, menu_wallpaper_opacity, false); + SETTING_FLOAT("menu_framebuffer_opacity", &settings->floats.menu_framebuffer_opacity, true, menu_framebuffer_opacity, false); SETTING_FLOAT("menu_footer_opacity", &settings->floats.menu_footer_opacity, true, menu_footer_opacity, false); SETTING_FLOAT("menu_header_opacity", &settings->floats.menu_header_opacity, true, menu_header_opacity, false); #endif diff --git a/configuration.h b/configuration.h index 0803b1504a..1102e0ef15 100644 --- a/configuration.h +++ b/configuration.h @@ -238,6 +238,7 @@ typedef struct settings float video_msg_color_b; float menu_wallpaper_opacity; + float menu_framebuffer_opacity; float menu_footer_opacity; float menu_header_opacity; diff --git a/intl/msg_hash_chs.h b/intl/msg_hash_chs.h index ab985c9fc9..70e0a5f88f 100644 --- a/intl/msg_hash_chs.h +++ b/intl/msg_hash_chs.h @@ -3021,3 +3021,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_RENAME, "Rename the title of the entry.") MSG_HASH(MENU_ENUM_LABEL_PLAYLIST_ENTRY_RENAME, "Rename") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY, + "Framebuffer Opacity") +MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY, + "Modify the opacity of the framebuffer.") diff --git a/intl/msg_hash_cht.h b/intl/msg_hash_cht.h index ff149d7d2d..8362515623 100644 --- a/intl/msg_hash_cht.h +++ b/intl/msg_hash_cht.h @@ -3021,3 +3021,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_RENAME, "Rename the title of the entry.") MSG_HASH(MENU_ENUM_LABEL_PLAYLIST_ENTRY_RENAME, "Rename") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY, + "Framebuffer Opacity") +MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY, + "Modify the opacity of the framebuffer.") diff --git a/intl/msg_hash_de.h b/intl/msg_hash_de.h index 336e1fafc7..b0a779cdc5 100644 --- a/intl/msg_hash_de.h +++ b/intl/msg_hash_de.h @@ -3015,3 +3015,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_RENAME, "Rename the title of the entry.") MSG_HASH(MENU_ENUM_LABEL_PLAYLIST_ENTRY_RENAME, "Rename") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY, + "Framebuffer Opacity") +MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY, + "Modify the opacity of the framebuffer.") diff --git a/intl/msg_hash_eo.h b/intl/msg_hash_eo.h index e22b4af3c3..c6666856a4 100644 --- a/intl/msg_hash_eo.h +++ b/intl/msg_hash_eo.h @@ -2884,3 +2884,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_RENAME, "Rename the title of the entry.") MSG_HASH(MENU_ENUM_LABEL_PLAYLIST_ENTRY_RENAME, "Rename") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY, + "Framebuffer Opacity") +MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY, + "Modify the opacity of the framebuffer.") diff --git a/intl/msg_hash_fr.h b/intl/msg_hash_fr.h index 994d6c2e12..565f92b776 100644 --- a/intl/msg_hash_fr.h +++ b/intl/msg_hash_fr.h @@ -3053,3 +3053,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_RENAME, "Rename the title of the entry.") MSG_HASH(MENU_ENUM_LABEL_PLAYLIST_ENTRY_RENAME, "Rename") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY, + "Framebuffer Opacity") +MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY, + "Modify the opacity of the framebuffer.") diff --git a/intl/msg_hash_it.h b/intl/msg_hash_it.h index e087684c42..42b7e93f19 100644 --- a/intl/msg_hash_it.h +++ b/intl/msg_hash_it.h @@ -2419,3 +2419,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_ADD_TO_FAVORITES, "Aggiungi ai preferiti") MSG_HASH(MENU_ENUM_SUBLABEL_ADD_TO_FAVORITES, "Aggiungere il titolo ai tuoi preferiti.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY, + "Framebuffer Opacity") +MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY, + "Modify the opacity of the framebuffer.") diff --git a/intl/msg_hash_ja.h b/intl/msg_hash_ja.h index c7b2b387d5..31736f1c68 100644 --- a/intl/msg_hash_ja.h +++ b/intl/msg_hash_ja.h @@ -3007,3 +3007,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_RENAME, "Rename the title of the entry.") MSG_HASH(MENU_ENUM_LABEL_PLAYLIST_ENTRY_RENAME, "Rename") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY, + "Framebuffer Opacity") +MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY, + "Modify the opacity of the framebuffer.") diff --git a/intl/msg_hash_ko.h b/intl/msg_hash_ko.h index 71c5562043..3b58ba99ea 100644 --- a/intl/msg_hash_ko.h +++ b/intl/msg_hash_ko.h @@ -3016,3 +3016,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_RENAME, "Rename the title of the entry.") MSG_HASH(MENU_ENUM_LABEL_PLAYLIST_ENTRY_RENAME, "Rename") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY, + "Framebuffer Opacity") +MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY, + "Modify the opacity of the framebuffer.") diff --git a/intl/msg_hash_lbl.h b/intl/msg_hash_lbl.h index 71bf8f9553..b2d0ca5f3e 100644 --- a/intl/msg_hash_lbl.h +++ b/intl/msg_hash_lbl.h @@ -1277,3 +1277,5 @@ MSG_HASH(MENU_ENUM_LABEL_CORE_DELETE, "core_delete") MSG_HASH(MENU_ENUM_LABEL_PLAYLIST_ENTRY_RENAME, "playlist_entry_rename") +MSG_HASH(MENU_ENUM_LABEL_MENU_FRAMEBUFFER_OPACITY, + "menu_framebuffer_opacity") diff --git a/intl/msg_hash_nl.h b/intl/msg_hash_nl.h index 9a277c3cdc..27f938b96f 100644 --- a/intl/msg_hash_nl.h +++ b/intl/msg_hash_nl.h @@ -2884,3 +2884,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_RENAME, "Rename the title of the entry.") MSG_HASH(MENU_ENUM_LABEL_PLAYLIST_ENTRY_RENAME, "Rename") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY, + "Framebuffer Opacity") +MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY, + "Modify the opacity of the framebuffer.") diff --git a/intl/msg_hash_pt_br.h b/intl/msg_hash_pt_br.h index ef7f181046..e03cc5df86 100644 --- a/intl/msg_hash_pt_br.h +++ b/intl/msg_hash_pt_br.h @@ -3862,3 +3862,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_RENAME, "Rename the title of the entry.") MSG_HASH(MENU_ENUM_LABEL_PLAYLIST_ENTRY_RENAME, "Rename") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY, + "Framebuffer Opacity") +MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY, + "Modify the opacity of the framebuffer.") diff --git a/intl/msg_hash_pt_pt.h b/intl/msg_hash_pt_pt.h index 6d19c56498..ce38cb6c2a 100644 --- a/intl/msg_hash_pt_pt.h +++ b/intl/msg_hash_pt_pt.h @@ -2991,3 +2991,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_RENAME, "Rename the title of the entry.") MSG_HASH(MENU_ENUM_LABEL_PLAYLIST_ENTRY_RENAME, "Rename") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY, + "Framebuffer Opacity") +MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY, + "Modify the opacity of the framebuffer.") diff --git a/intl/msg_hash_ru.h b/intl/msg_hash_ru.h index 5b421618b0..fcbe133c09 100644 --- a/intl/msg_hash_ru.h +++ b/intl/msg_hash_ru.h @@ -3074,3 +3074,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_RENAME, "Rename the title of the entry.") MSG_HASH(MENU_ENUM_LABEL_PLAYLIST_ENTRY_RENAME, "Rename") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY, + "Framebuffer Opacity") +MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY, + "Modify the opacity of the framebuffer.") diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index 2a6e9b6035..7532db1d0b 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -3105,3 +3105,7 @@ MSG_HASH(MENU_ENUM_SUBLABEL_PLAYLIST_ENTRY_RENAME, "Rename the title of the entry.") MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_RENAME, "Rename") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY, + "Framebuffer Opacity") +MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY, + "Modify the opacity of the framebuffer.") diff --git a/intl/msg_hash_vn.h b/intl/msg_hash_vn.h index d869cc7d99..49f721f6a8 100644 --- a/intl/msg_hash_vn.h +++ b/intl/msg_hash_vn.h @@ -3045,3 +3045,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_RENAME, "Rename the title of the entry.") MSG_HASH(MENU_ENUM_LABEL_PLAYLIST_ENTRY_RENAME, "Rename") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY, + "Framebuffer Opacity") +MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY, + "Modify the opacity of the framebuffer.") diff --git a/menu/cbs/menu_cbs_sublabel.c b/menu/cbs/menu_cbs_sublabel.c index 0ebd14dac3..f32e2a69aa 100644 --- a/menu/cbs/menu_cbs_sublabel.c +++ b/menu/cbs/menu_cbs_sublabel.c @@ -280,6 +280,7 @@ default_sublabel_macro(action_bind_sublabel_xmb_icon_theme, default_sublabel_macro(action_bind_sublabel_xmb_shadows_enable, MENU_ENUM_SUBLABEL_XMB_SHADOWS_ENABLE) default_sublabel_macro(action_bind_sublabel_menu_color_theme, MENU_ENUM_SUBLABEL_MATERIALUI_MENU_COLOR_THEME) default_sublabel_macro(action_bind_sublabel_menu_wallpaper_opacity, MENU_ENUM_SUBLABEL_MENU_WALLPAPER_OPACITY) +default_sublabel_macro(action_bind_sublabel_menu_framebuffer_opacity, MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY) default_sublabel_macro(action_bind_sublabel_menu_ribbon_enable, MENU_ENUM_SUBLABEL_XMB_RIBBON_ENABLE) default_sublabel_macro(action_bind_sublabel_menu_font, MENU_ENUM_SUBLABEL_XMB_FONT) default_sublabel_macro(action_bind_sublabel_menu_favorites_tab, MENU_ENUM_SUBLABEL_XMB_SHOW_FAVORITES) @@ -572,6 +573,9 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_XMB_RIBBON_ENABLE: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_menu_ribbon_enable); break; + case MENU_ENUM_LABEL_MENU_FRAMEBUFFER_OPACITY: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_menu_framebuffer_opacity); + break; case MENU_ENUM_LABEL_MENU_WALLPAPER_OPACITY: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_menu_wallpaper_opacity); break; diff --git a/menu/drivers/materialui.c b/menu/drivers/materialui.c index c5e29191fa..7e493c30d3 100644 --- a/menu/drivers/materialui.c +++ b/menu/drivers/materialui.c @@ -1193,7 +1193,7 @@ static void mui_frame(void *data, video_frame_info_t *video_info) { case MATERIALUI_THEME_BLUE: hex32_to_rgba_normalized(blue_500, theme.header_bg_color, 1.00); - hex32_to_rgba_normalized(blue_50, theme.highlighted_entry_color, 1.00); + hex32_to_rgba_normalized(blue_50, theme.highlighted_entry_color, 0.90); hex32_to_rgba_normalized(0xFFFFFF, theme.footer_bg_color, 1.00); hex32_to_rgba_normalized(0xFAFAFA, theme.body_bg_color, 0.90); hex32_to_rgba_normalized(blue_500, theme.active_tab_marker_color, 1.00); @@ -1211,7 +1211,7 @@ static void mui_frame(void *data, video_frame_info_t *video_info) break; case MATERIALUI_THEME_BLUE_GREY: hex32_to_rgba_normalized(blue_grey_500, theme.header_bg_color, 1.00); - hex32_to_rgba_normalized(blue_grey_50, theme.highlighted_entry_color, 1.00); + hex32_to_rgba_normalized(blue_grey_50, theme.highlighted_entry_color, 0.90); hex32_to_rgba_normalized(0xFFFFFF, theme.footer_bg_color, 1.00); hex32_to_rgba_normalized(0xFAFAFA, theme.body_bg_color, 0.90); hex32_to_rgba_normalized(blue_grey_500, theme.active_tab_marker_color, 1.00); @@ -1229,7 +1229,7 @@ static void mui_frame(void *data, video_frame_info_t *video_info) break; case MATERIALUI_THEME_GREEN: hex32_to_rgba_normalized(green_500, theme.header_bg_color, 1.00); - hex32_to_rgba_normalized(green_50, theme.highlighted_entry_color, 1.00); + hex32_to_rgba_normalized(green_50, theme.highlighted_entry_color, 0.90); hex32_to_rgba_normalized(0xFFFFFF, theme.footer_bg_color, 1.00); hex32_to_rgba_normalized(0xFAFAFA, theme.body_bg_color, 0.90); hex32_to_rgba_normalized(green_500, theme.active_tab_marker_color, 1.00); @@ -1247,7 +1247,7 @@ static void mui_frame(void *data, video_frame_info_t *video_info) break; case MATERIALUI_THEME_RED: hex32_to_rgba_normalized(red_500, theme.header_bg_color, 1.00); - hex32_to_rgba_normalized(red_50, theme.highlighted_entry_color, 1.00); + hex32_to_rgba_normalized(red_50, theme.highlighted_entry_color, 0.90); hex32_to_rgba_normalized(0xFFFFFF, theme.footer_bg_color, 1.00); hex32_to_rgba_normalized(0xFAFAFA, theme.body_bg_color, 0.90); hex32_to_rgba_normalized(red_500, theme.active_tab_marker_color, 1.00); @@ -1266,7 +1266,7 @@ static void mui_frame(void *data, video_frame_info_t *video_info) break; case MATERIALUI_THEME_YELLOW: hex32_to_rgba_normalized(yellow_500, theme.header_bg_color, 1.00); - hex32_to_rgba_normalized(yellow_50, theme.highlighted_entry_color, 1.00); + hex32_to_rgba_normalized(yellow_50, theme.highlighted_entry_color, 0.90); hex32_to_rgba_normalized(0xFFFFFF, theme.footer_bg_color, 1.00); hex32_to_rgba_normalized(0xFAFAFA, theme.body_bg_color, 0.90); hex32_to_rgba_normalized(yellow_500, theme.active_tab_marker_color, 1.00); @@ -1284,7 +1284,7 @@ static void mui_frame(void *data, video_frame_info_t *video_info) break; case MATERIALUI_THEME_DARK_BLUE: hex32_to_rgba_normalized(greyish_blue, theme.header_bg_color, 1.00); - hex32_to_rgba_normalized(0xC7C7C7, theme.highlighted_entry_color, 1.00); + hex32_to_rgba_normalized(0xC7C7C7, theme.highlighted_entry_color, 0.90); hex32_to_rgba_normalized(0x212121, theme.footer_bg_color, 1.00); hex32_to_rgba_normalized(0x212121, theme.body_bg_color, 0.90); hex32_to_rgba_normalized(0x38474F, theme.active_tab_marker_color, 1.00); @@ -1303,7 +1303,7 @@ static void mui_frame(void *data, video_frame_info_t *video_info) break; case MATERIALUI_THEME_NVIDIA_SHIELD: hex32_to_rgba_normalized(color_nv_header, theme.header_bg_color, 1.00); - hex32_to_rgba_normalized(color_nv_accent, theme.highlighted_entry_color, 1.00); + hex32_to_rgba_normalized(color_nv_accent, theme.highlighted_entry_color, 0.90); hex32_to_rgba_normalized(color_nv_body, theme.footer_bg_color, 1.00); hex32_to_rgba_normalized(color_nv_body, theme.body_bg_color, 0.90); hex32_to_rgba_normalized(0xFFFFFF, theme.active_tab_marker_color, 0.90); diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index bbbedf78a7..4135448f46 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -5170,6 +5170,9 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_MENU_WALLPAPER_OPACITY, PARSE_ONLY_FLOAT, false); + menu_displaylist_parse_settings_enum(menu, info, + MENU_ENUM_LABEL_MENU_FRAMEBUFFER_OPACITY, + PARSE_ONLY_FLOAT, false); menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_MENU_LINEAR_FILTER, PARSE_ONLY_BOOL, false); diff --git a/menu/menu_setting.c b/menu/menu_setting.c index 2e891db79a..b5718e2df2 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -5003,6 +5003,21 @@ static bool setting_append_list( general_read_handler); menu_settings_list_current_add_range(list, list_info, 0.0, 1.0, 0.010, true, true); settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); + + CONFIG_FLOAT( + list, list_info, + &settings->floats.menu_framebuffer_opacity, + MENU_ENUM_LABEL_MENU_FRAMEBUFFER_OPACITY, + MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY, + menu_framebuffer_opacity, + "%.3f", + &group_info, + &subgroup_info, + parent_group, + general_write_handler, + general_read_handler); + menu_settings_list_current_add_range(list, list_info, 0.0, 1.0, 0.010, true, true); + settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); } if (string_is_equal_fast(settings->arrays.menu_driver, "xmb", 3)) diff --git a/msg_hash.h b/msg_hash.h index f491e60462..9f9d26c0ae 100644 --- a/msg_hash.h +++ b/msg_hash.h @@ -399,6 +399,7 @@ enum msg_hash_enums MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_END = MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_BEGIN + RARCH_BIND_LIST_END, MENU_LABEL(MENU_WALLPAPER_OPACITY), + MENU_LABEL(MENU_FRAMEBUFFER_OPACITY), MENU_ENUM_LABEL_VALUE_CONFIG, MENU_ENUM_LABEL_VALUE_OVERLAY, From ef79711837c364e00bc740e0ec731447f485f2e8 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 15 Aug 2017 22:43:09 +0200 Subject: [PATCH 002/137] (MaterialUI) Hook up framebuffer opacity --- gfx/video_driver.c | 4 +++- gfx/video_driver.h | 5 +++-- menu/drivers/materialui.c | 41 ++++++++++++++++++++++----------------- menu/drivers/xmb.c | 8 +++++--- menu/drivers/zarch.c | 4 +++- menu/menu_driver.c | 8 +++++--- menu/menu_driver.h | 2 +- 7 files changed, 43 insertions(+), 29 deletions(-) diff --git a/gfx/video_driver.c b/gfx/video_driver.c index bc6941349e..a43cbe13af 100644 --- a/gfx/video_driver.c +++ b/gfx/video_driver.c @@ -2524,7 +2524,8 @@ void video_driver_build_info(video_frame_info_t *video_info) video_info->battery_level_enable = settings->bools.menu_battery_level_enable; video_info->xmb_shadows_enable = settings->bools.menu_xmb_shadows_enable; video_info->xmb_alpha_factor = settings->uints.menu_xmb_alpha_factor; - video_info->menu_wallpaper_opacity = settings->floats.menu_wallpaper_opacity; + video_info->menu_wallpaper_opacity = settings->floats.menu_wallpaper_opacity; + video_info->menu_framebuffer_opacity = settings->floats.menu_framebuffer_opacity; video_info->libretro_running = core_is_game_loaded(); #else @@ -2539,6 +2540,7 @@ void video_driver_build_info(video_frame_info_t *video_info) video_info->battery_level_enable = false; video_info->xmb_shadows_enable = false; video_info->xmb_alpha_factor = 0.0f; + video_info->menu_framebuffer_opacity = 0.0f; video_info->menu_wallpaper_opacity = 0.0f; #endif diff --git a/gfx/video_driver.h b/gfx/video_driver.h index cb816346a5..c2e72857e7 100644 --- a/gfx/video_driver.h +++ b/gfx/video_driver.h @@ -447,14 +447,15 @@ typedef struct video_frame_info unsigned custom_vp_full_height; float menu_wallpaper_opacity; + float menu_framebuffer_opacity; + float menu_header_opacity; + float menu_footer_opacity; float refresh_rate; float font_msg_pos_x; float font_msg_pos_y; float font_msg_color_r; float font_msg_color_g; float font_msg_color_b; - float menu_header_opacity; - float menu_footer_opacity; float xmb_alpha_factor; char fps_text[128]; diff --git a/menu/drivers/materialui.c b/menu/drivers/materialui.c index 7e493c30d3..45d8d9d8ba 100644 --- a/menu/drivers/materialui.c +++ b/menu/drivers/materialui.c @@ -1095,6 +1095,9 @@ static int mui_get_core_title(char *s, size_t len) static void mui_draw_bg(menu_display_ctx_draw_t *draw, video_frame_info_t *video_info) { + bool add_opacity = false; + float opacity_override = video_info->menu_wallpaper_opacity; + menu_display_blend_begin(); draw->x = 0; @@ -1102,7 +1105,14 @@ static void mui_draw_bg(menu_display_ctx_draw_t *draw, draw->pipeline.id = 0; draw->pipeline.active = false; - menu_display_draw_bg(draw, video_info, false); + if (video_info->libretro_running) + { + add_opacity = true; + opacity_override = video_info->menu_framebuffer_opacity; + } + + menu_display_draw_bg(draw, video_info, add_opacity, + opacity_override); menu_display_draw(draw); menu_display_blend_end(); } @@ -1124,6 +1134,17 @@ static void mui_frame(void *data, video_frame_info_t *video_info) char title[255]; char title_buf[255]; char title_msg[255]; + float black_bg[16]; + float pure_white[16]; + float white_bg[16]; + float white_transp_bg[16]; + float grey_bg[16]; + float shadow_bg[16]= { + 0.00, 0.00, 0.00, 0.00, + 0.00, 0.00, 0.00, 0.00, + 0.00, 0.00, 0.00, 0.20, + 0.00, 0.00, 0.00, 0.20, + }; file_list_t *list = NULL; mui_node_t *node = NULL; @@ -1164,29 +1185,13 @@ static void mui_frame(void *data, video_frame_info_t *video_info) uint32_t black_opaque_87 = 0x000000DE; uint32_t white_opaque_70 = 0xFFFFFFB3; - /* Pallete of colors needed throughout the file */ - float black_bg[16]; + /* Palette of colors needed throughout the file */ hex32_to_rgba_normalized(0x000000, black_bg, 0.75); - - float pure_white[16]; hex32_to_rgba_normalized(0xFFFFFF, pure_white, 1.0); - - float white_bg[16]; hex32_to_rgba_normalized(0xFAFAFA, white_bg, 1.0); - - float white_transp_bg[16]; hex32_to_rgba_normalized(0xFAFAFA, white_transp_bg, 0.90); - - float grey_bg[16]; hex32_to_rgba_normalized(0xC7C7C7, grey_bg, 0.90); - float shadow_bg[16]= { - 0.00, 0.00, 0.00, 0.00, - 0.00, 0.00, 0.00, 0.00, - 0.00, 0.00, 0.00, 0.20, - 0.00, 0.00, 0.00, 0.20, - }; - memcpy(theme.passive_tab_icon_color, grey_bg, sizeof(grey_bg)); switch (video_info->materialui_color_theme) diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index 1f9a2146d0..683b249a40 100644 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -2614,8 +2614,10 @@ static void xmb_draw_bg( menu_display_draw_gradient(&draw, video_info); { - bool add_opacity = false; - draw.texture = texture; + float override_opacity = video_info->menu_wallpaper_opacity; + bool add_opacity = false; + + draw.texture = texture; menu_display_set_alpha(draw.color, coord_white[3]); if (draw.texture) @@ -2624,7 +2626,7 @@ static void xmb_draw_bg( if (running || video_info->xmb_color_theme == XMB_THEME_WALLPAPER) add_opacity = true; - menu_display_draw_bg(&draw, video_info, add_opacity); + menu_display_draw_bg(&draw, video_info, add_opacity, override_opacity); } } diff --git a/menu/drivers/zarch.c b/menu/drivers/zarch.c index 11f97aaa3d..2417e35e43 100644 --- a/menu/drivers/zarch.c +++ b/menu/drivers/zarch.c @@ -976,7 +976,9 @@ static void zarch_frame(void *data, video_frame_info_t *video_info) menu_display_blend_begin(); draw.x = 0; draw.y = 0; - menu_display_draw_bg(&draw, video_info, false); + + menu_display_draw_bg(&draw, video_info, false, + video_info->menu_wallpaper_opacity); menu_display_draw(&draw); menu_display_blend_end(); diff --git a/menu/menu_driver.c b/menu/menu_driver.c index 848e357be5..3c14267c81 100644 --- a/menu/menu_driver.c +++ b/menu/menu_driver.c @@ -578,7 +578,8 @@ void menu_display_draw_pipeline(menu_display_ctx_draw_t *draw) } void menu_display_draw_bg(menu_display_ctx_draw_t *draw, - video_frame_info_t *video_info, bool add_opacity_to_wallpaper) + video_frame_info_t *video_info, bool add_opacity_to_wallpaper, + float override_opacity) { static struct video_coords coords; const float *new_vertex = NULL; @@ -606,7 +607,7 @@ void menu_display_draw_bg(menu_display_ctx_draw_t *draw, add_opacity_to_wallpaper = true; if (add_opacity_to_wallpaper) - menu_display_set_alpha(draw->color, video_info->menu_wallpaper_opacity); + menu_display_set_alpha(draw->color, override_opacity); if (!draw->texture) draw->texture = menu_display_white_texture; @@ -621,7 +622,8 @@ void menu_display_draw_gradient(menu_display_ctx_draw_t *draw, draw->x = 0; draw->y = 0; - menu_display_draw_bg(draw, video_info, false); + menu_display_draw_bg(draw, video_info, false, + video_info->menu_wallpaper_opacity); menu_display_draw(draw); } diff --git a/menu/menu_driver.h b/menu/menu_driver.h index 76c86b7a74..3d142e8053 100644 --- a/menu/menu_driver.h +++ b/menu/menu_driver.h @@ -669,7 +669,7 @@ void menu_display_draw_pipeline(menu_display_ctx_draw_t *draw); void menu_display_draw_bg( menu_display_ctx_draw_t *draw, video_frame_info_t *video_info, - bool add_opacity); + bool add_opacity, float opacity_override); void menu_display_draw_gradient( menu_display_ctx_draw_t *draw, video_frame_info_t *video_info); From 89b695dae3cd2795aee8a5d12caf55a6bb1c55c0 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 15 Aug 2017 22:52:18 +0200 Subject: [PATCH 003/137] Tweak Dark Blue a bit --- menu/drivers/materialui.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/menu/drivers/materialui.c b/menu/drivers/materialui.c index 45d8d9d8ba..00620252d4 100644 --- a/menu/drivers/materialui.c +++ b/menu/drivers/materialui.c @@ -1292,7 +1292,7 @@ static void mui_frame(void *data, video_frame_info_t *video_info) hex32_to_rgba_normalized(0xC7C7C7, theme.highlighted_entry_color, 0.90); hex32_to_rgba_normalized(0x212121, theme.footer_bg_color, 1.00); hex32_to_rgba_normalized(0x212121, theme.body_bg_color, 0.90); - hex32_to_rgba_normalized(0x38474F, theme.active_tab_marker_color, 1.00); + hex32_to_rgba_normalized(0x566066, theme.active_tab_marker_color, 1.00); theme.font_normal_color = white_opaque_70; theme.font_hover_color = 0xFFFFFFFF; From e32ec709b34e0196b4196bbe580c18dd30a3a856 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 16 Aug 2017 00:01:56 +0200 Subject: [PATCH 004/137] Added 'Favorites' to MaterialUI playlists tab --- intl/msg_hash_chs.h | 2 + intl/msg_hash_cht.h | 2 + intl/msg_hash_de.h | 2 + intl/msg_hash_eo.h | 2 + intl/msg_hash_fr.h | 2 + intl/msg_hash_it.h | 2 + intl/msg_hash_ja.h | 2 + intl/msg_hash_ko.h | 2 + intl/msg_hash_lbl.h | 4 ++ intl/msg_hash_nl.h | 2 + intl/msg_hash_pt_br.h | 2 + intl/msg_hash_pt_pt.h | 2 + intl/msg_hash_ru.h | 2 + intl/msg_hash_us.h | 4 ++ intl/msg_hash_vn.h | 2 + menu/cbs/menu_cbs_deferred_push.c | 69 +++++++++++++++++-------------- menu/cbs/menu_cbs_ok.c | 13 ++++++ menu/cbs/menu_cbs_sublabel.c | 4 ++ menu/drivers/materialui.c | 6 ++- menu/menu_cbs.h | 1 + menu/menu_displaylist.c | 7 ++++ msg_hash.h | 2 + 22 files changed, 103 insertions(+), 33 deletions(-) diff --git a/intl/msg_hash_chs.h b/intl/msg_hash_chs.h index 70e0a5f88f..e5466c1ae5 100644 --- a/intl/msg_hash_chs.h +++ b/intl/msg_hash_chs.h @@ -3025,3 +3025,5 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY, "Framebuffer Opacity") MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY, "Modify the opacity of the framebuffer.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES, + "Favorites") diff --git a/intl/msg_hash_cht.h b/intl/msg_hash_cht.h index 8362515623..96c49a87db 100644 --- a/intl/msg_hash_cht.h +++ b/intl/msg_hash_cht.h @@ -3025,3 +3025,5 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY, "Framebuffer Opacity") MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY, "Modify the opacity of the framebuffer.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES, + "Favorites") diff --git a/intl/msg_hash_de.h b/intl/msg_hash_de.h index b0a779cdc5..cfa8f0d7d9 100644 --- a/intl/msg_hash_de.h +++ b/intl/msg_hash_de.h @@ -3019,3 +3019,5 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY, "Framebuffer Opacity") MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY, "Modify the opacity of the framebuffer.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES, + "Favorites") diff --git a/intl/msg_hash_eo.h b/intl/msg_hash_eo.h index c6666856a4..fe67876405 100644 --- a/intl/msg_hash_eo.h +++ b/intl/msg_hash_eo.h @@ -2888,3 +2888,5 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY, "Framebuffer Opacity") MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY, "Modify the opacity of the framebuffer.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES, + "Favorites") diff --git a/intl/msg_hash_fr.h b/intl/msg_hash_fr.h index 565f92b776..9516a68a0d 100644 --- a/intl/msg_hash_fr.h +++ b/intl/msg_hash_fr.h @@ -3057,3 +3057,5 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY, "Framebuffer Opacity") MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY, "Modify the opacity of the framebuffer.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES, + "Favorites") diff --git a/intl/msg_hash_it.h b/intl/msg_hash_it.h index 42b7e93f19..a2d3b780b6 100644 --- a/intl/msg_hash_it.h +++ b/intl/msg_hash_it.h @@ -2423,3 +2423,5 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY, "Framebuffer Opacity") MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY, "Modify the opacity of the framebuffer.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES, + "Favorites") diff --git a/intl/msg_hash_ja.h b/intl/msg_hash_ja.h index 31736f1c68..8d3e2dad64 100644 --- a/intl/msg_hash_ja.h +++ b/intl/msg_hash_ja.h @@ -3011,3 +3011,5 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY, "Framebuffer Opacity") MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY, "Modify the opacity of the framebuffer.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES, + "Favorites") diff --git a/intl/msg_hash_ko.h b/intl/msg_hash_ko.h index 3b58ba99ea..e38f544fc2 100644 --- a/intl/msg_hash_ko.h +++ b/intl/msg_hash_ko.h @@ -3020,3 +3020,5 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY, "Framebuffer Opacity") MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY, "Modify the opacity of the framebuffer.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES, + "Favorites") diff --git a/intl/msg_hash_lbl.h b/intl/msg_hash_lbl.h index b2d0ca5f3e..c29bbfe293 100644 --- a/intl/msg_hash_lbl.h +++ b/intl/msg_hash_lbl.h @@ -229,6 +229,8 @@ MSG_HASH(MENU_ENUM_LABEL_DATABASE_MANAGER, "database_manager") MSG_HASH(MENU_ENUM_LABEL_DATABASE_MANAGER_LIST, "database_manager_list") +MSG_HASH(MENU_ENUM_LABEL_DEFERRED_FAVORITES_LIST, + "deferred_favorites_list") MSG_HASH(MENU_ENUM_LABEL_DEFERRED_NETPLAY, "deferred_netplay") MSG_HASH(MENU_ENUM_LABEL_DEFERRED_MUSIC, @@ -1279,3 +1281,5 @@ MSG_HASH(MENU_ENUM_LABEL_PLAYLIST_ENTRY_RENAME, "playlist_entry_rename") MSG_HASH(MENU_ENUM_LABEL_MENU_FRAMEBUFFER_OPACITY, "menu_framebuffer_opacity") +MSG_HASH(MENU_ENUM_LABEL_GOTO_FAVORITES, + "goto_favorites") diff --git a/intl/msg_hash_nl.h b/intl/msg_hash_nl.h index 27f938b96f..914e76cf7a 100644 --- a/intl/msg_hash_nl.h +++ b/intl/msg_hash_nl.h @@ -2888,3 +2888,5 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY, "Framebuffer Opacity") MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY, "Modify the opacity of the framebuffer.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES, + "Favorites") diff --git a/intl/msg_hash_pt_br.h b/intl/msg_hash_pt_br.h index e03cc5df86..8d5899fdc2 100644 --- a/intl/msg_hash_pt_br.h +++ b/intl/msg_hash_pt_br.h @@ -3866,3 +3866,5 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY, "Framebuffer Opacity") MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY, "Modify the opacity of the framebuffer.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES, + "Favorites") diff --git a/intl/msg_hash_pt_pt.h b/intl/msg_hash_pt_pt.h index ce38cb6c2a..516a93eab7 100644 --- a/intl/msg_hash_pt_pt.h +++ b/intl/msg_hash_pt_pt.h @@ -2995,3 +2995,5 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY, "Framebuffer Opacity") MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY, "Modify the opacity of the framebuffer.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES, + "Favorites") diff --git a/intl/msg_hash_ru.h b/intl/msg_hash_ru.h index fcbe133c09..78a7825202 100644 --- a/intl/msg_hash_ru.h +++ b/intl/msg_hash_ru.h @@ -3078,3 +3078,5 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY, "Framebuffer Opacity") MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY, "Modify the opacity of the framebuffer.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES, + "Favorites") diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index 7532db1d0b..b2616c00cf 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -3109,3 +3109,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY, "Framebuffer Opacity") MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY, "Modify the opacity of the framebuffer.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES, + "Favorites") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_FAVORITES, + "Content which you have added to 'Favorites' will appear here.") diff --git a/intl/msg_hash_vn.h b/intl/msg_hash_vn.h index 49f721f6a8..35c41edf11 100644 --- a/intl/msg_hash_vn.h +++ b/intl/msg_hash_vn.h @@ -3049,3 +3049,5 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY, "Framebuffer Opacity") MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY, "Modify the opacity of the framebuffer.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES, + "Favorites") diff --git a/menu/cbs/menu_cbs_deferred_push.c b/menu/cbs/menu_cbs_deferred_push.c index 42be462b8c..00ecc1db89 100644 --- a/menu/cbs/menu_cbs_deferred_push.c +++ b/menu/cbs/menu_cbs_deferred_push.c @@ -857,6 +857,11 @@ static int deferred_push_content_collection_list(menu_displaylist_info_t *info) return deferred_push_dlist(info, DISPLAYLIST_DATABASE_PLAYLISTS); } +static int deferred_push_favorites_list(menu_displaylist_info_t *info) +{ + return general_push(info, PUSH_DEFAULT, DISPLAYLIST_FAVORITES); +} + static int deferred_push_browse_url_list(menu_displaylist_info_t *info) { return deferred_push_dlist(info, DISPLAYLIST_BROWSE_URL_LIST); @@ -941,131 +946,131 @@ static int menu_cbs_init_bind_deferred_push_compare_label( menu_file_list_cbs_t *cbs, const char *label, uint32_t label_hash) { - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_BROWSE_URL_LIST))) + if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_FAVORITES_LIST))) + { + BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_favorites_list); + return 0; + } + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_BROWSE_URL_LIST))) { BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_browse_url_list); return 0; } - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_BROWSE_URL_START))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_BROWSE_URL_START))) { BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_browse_url_start); return 0; } - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_CORE_SETTINGS_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_CORE_SETTINGS_LIST))) { BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_settings_list); return 0; } - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_CONFIGURATION_SETTINGS_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_CONFIGURATION_SETTINGS_LIST))) { BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_configuration_settings_list); return 0; } - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_SAVING_SETTINGS_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_SAVING_SETTINGS_LIST))) { BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_saving_settings_list); return 0; } - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_LOGGING_SETTINGS_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_LOGGING_SETTINGS_LIST))) { BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_logging_settings_list); return 0; } - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_FRAME_THROTTLE_SETTINGS_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_FRAME_THROTTLE_SETTINGS_LIST))) { BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_frame_throttle_settings_list); return 0; } - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_REWIND_SETTINGS_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_REWIND_SETTINGS_LIST))) { BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_rewind_settings_list); return 0; } - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_ONSCREEN_DISPLAY_SETTINGS_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_ONSCREEN_DISPLAY_SETTINGS_LIST))) { BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_onscreen_display_settings_list); return 0; } - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_ONSCREEN_NOTIFICATIONS_SETTINGS_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_ONSCREEN_NOTIFICATIONS_SETTINGS_LIST))) { BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_onscreen_notifications_settings_list); return 0; } - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_ONSCREEN_OVERLAY_SETTINGS_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_ONSCREEN_OVERLAY_SETTINGS_LIST))) { BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_onscreen_overlay_settings_list); return 0; } - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_MENU_FILE_BROWSER_SETTINGS_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_MENU_FILE_BROWSER_SETTINGS_LIST))) { BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_menu_file_browser_settings_list); return 0; } - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_MENU_VIEWS_SETTINGS_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_MENU_VIEWS_SETTINGS_LIST))) { BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_menu_views_settings_list); return 0; } - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_MENU_SETTINGS_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_MENU_SETTINGS_LIST))) { BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_menu_settings_list); return 0; } - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_USER_INTERFACE_SETTINGS_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_USER_INTERFACE_SETTINGS_LIST))) { BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_user_interface_settings_list); return 0; } - - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_RETRO_ACHIEVEMENTS_SETTINGS_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_RETRO_ACHIEVEMENTS_SETTINGS_LIST))) { BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_retro_achievements_settings_list); return 0; } - - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_UPDATER_SETTINGS_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_UPDATER_SETTINGS_LIST))) { BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_updater_settings_list); return 0; } - - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_NETWORK_SETTINGS_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_NETWORK_SETTINGS_LIST))) { BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_network_settings_list); return 0; } - - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_WIFI_SETTINGS_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_WIFI_SETTINGS_LIST))) { BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_wifi_settings_list); return 0; } - - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_LAKKA_SERVICES_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_LAKKA_SERVICES_LIST))) { BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_lakka_services_list); return 0; } - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_USER_SETTINGS_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_USER_SETTINGS_LIST))) { BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_user_settings_list); return 0; } - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_DIRECTORY_SETTINGS_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_DIRECTORY_SETTINGS_LIST))) { BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_directory_settings_list); return 0; } - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_PRIVACY_SETTINGS_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_PRIVACY_SETTINGS_LIST))) { BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_privacy_settings_list); return 0; } - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_CORE_CONTENT_DIRS_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_CORE_CONTENT_DIRS_LIST))) { #ifdef HAVE_NETWORKING BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_content_dirs_list); @@ -1073,19 +1078,19 @@ static int menu_cbs_init_bind_deferred_push_compare_label( return 0; } - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_CORE_CONTENT_DIRS_SUBDIR_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_CORE_CONTENT_DIRS_SUBDIR_LIST))) { #ifdef HAVE_NETWORKING BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_content_dirs_subdir_list); #endif return 0; } - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_MUSIC))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_MUSIC))) { BIND_ACTION_DEFERRED_PUSH(cbs, deferred_music_list); return 0; } - if (strstr(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_RDB_ENTRY_DETAIL))) + else if (strstr(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_RDB_ENTRY_DETAIL))) { BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_rdb_entry_detail); } diff --git a/menu/cbs/menu_cbs_ok.c b/menu/cbs/menu_cbs_ok.c index a9724d4c29..dde131e304 100644 --- a/menu/cbs/menu_cbs_ok.c +++ b/menu/cbs/menu_cbs_ok.c @@ -159,6 +159,15 @@ int generic_action_ok_displaylist_push(const char *path, info.enum_idx = MENU_ENUM_LABEL_DEFERRED_BROWSE_URL_START; dl_type = DISPLAYLIST_GENERIC; break; + case ACTION_OK_DL_FAVORITES_LIST: + info.type = type; + info.directory_ptr = idx; + info_path = label; + info_label = msg_hash_to_str( + MENU_ENUM_LABEL_DEFERRED_FAVORITES_LIST); + info.enum_idx = MENU_ENUM_LABEL_DEFERRED_FAVORITES_LIST; + dl_type = DISPLAYLIST_GENERIC; + break; case ACTION_OK_DL_USER_BINDS_LIST: info.type = type; info.directory_ptr = idx; @@ -3193,6 +3202,7 @@ int (func_name)(const char *path, const char *label, unsigned type, size_t idx, } default_action_ok_func(action_ok_browse_url_start, ACTION_OK_DL_BROWSE_URL_START) +default_action_ok_func(action_ok_goto_favorites, ACTION_OK_DL_FAVORITES_LIST) default_action_ok_func(action_ok_shader_parameters, ACTION_OK_DL_SHADER_PARAMETERS) default_action_ok_func(action_ok_parent_directory_push, ACTION_OK_DL_PARENT_DIRECTORY_PUSH) default_action_ok_func(action_ok_directory_push, ACTION_OK_DL_DIRECTORY_PUSH) @@ -4127,6 +4137,9 @@ static int menu_cbs_init_bind_ok_compare_label(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_VIDEO_FONT_PATH: BIND_ACTION_OK(cbs, action_ok_menu_font); break; + case MENU_ENUM_LABEL_GOTO_FAVORITES: + BIND_ACTION_OK(cbs, action_ok_goto_favorites); + break; case MENU_ENUM_LABEL_BROWSE_START: BIND_ACTION_OK(cbs, action_ok_browse_url_start); break; diff --git a/menu/cbs/menu_cbs_sublabel.c b/menu/cbs/menu_cbs_sublabel.c index f32e2a69aa..9ff2c26ca8 100644 --- a/menu/cbs/menu_cbs_sublabel.c +++ b/menu/cbs/menu_cbs_sublabel.c @@ -234,6 +234,7 @@ default_sublabel_macro(action_bind_sublabel_delete_entry, default_sublabel_macro(action_bind_sublabel_information, MENU_ENUM_SUBLABEL_INFORMATION) default_sublabel_macro(action_bind_sublabel_run, MENU_ENUM_SUBLABEL_RUN) default_sublabel_macro(action_bind_sublabel_add_to_favorites, MENU_ENUM_SUBLABEL_ADD_TO_FAVORITES) +default_sublabel_macro(action_bind_sublabel_goto_favorites, MENU_ENUM_SUBLABEL_GOTO_FAVORITES) default_sublabel_macro(action_bind_sublabel_menu_filebrowser_settings, MENU_ENUM_SUBLABEL_MENU_FILE_BROWSER_SETTINGS) default_sublabel_macro(action_bind_sublabel_auto_remaps_enable, MENU_ENUM_SUBLABEL_AUTO_REMAPS_ENABLE) default_sublabel_macro(action_bind_sublabel_auto_overrides_enable, MENU_ENUM_SUBLABEL_AUTO_OVERRIDES_ENABLE) @@ -546,6 +547,9 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_XMB_SHOW_SETTINGS: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_menu_settings_tab); break; + case MENU_ENUM_LABEL_GOTO_FAVORITES: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_goto_favorites); + break; case MENU_ENUM_LABEL_XMB_SHOW_FAVORITES: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_menu_favorites_tab); break; diff --git a/menu/drivers/materialui.c b/menu/drivers/materialui.c index 00620252d4..15884b15ec 100644 --- a/menu/drivers/materialui.c +++ b/menu/drivers/materialui.c @@ -2351,7 +2351,11 @@ static void mui_list_insert(void *userdata, node->texture_switch2 = mui->textures.list[MUI_TEXTURE_RUN]; node->texture_switch2_set = true; } - else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_ADD_TO_FAVORITES))) + else if ( + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_ADD_TO_FAVORITES)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_GOTO_FAVORITES)) + ) { node->texture_switch2 = mui->textures.list[MUI_TEXTURE_ADD_TO_FAVORITES]; node->texture_switch2_set = true; diff --git a/menu/menu_cbs.h b/menu/menu_cbs.h index 6be466ed26..583bf66015 100644 --- a/menu/menu_cbs.h +++ b/menu/menu_cbs.h @@ -41,6 +41,7 @@ enum ACTION_OK_DL_RDB_ENTRY_SUBMENU, ACTION_OK_DL_AUDIO_DSP_PLUGIN, ACTION_OK_DL_SHADER_PASS, + ACTION_OK_DL_FAVORITES_LIST, ACTION_OK_DL_SHADER_PARAMETERS, ACTION_OK_DL_SHADER_PRESET, ACTION_OK_DL_GENERIC, diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index 4135448f46..e07cfb0e17 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -3504,6 +3504,13 @@ static int menu_displaylist_parse_playlists( } #endif + menu_entries_append_enum(info->list, + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES), + msg_hash_to_str(MENU_ENUM_LABEL_GOTO_FAVORITES), + MENU_ENUM_LABEL_GOTO_FAVORITES, + MENU_SETTING_ACTION, 0, 0); + + if (list_size == 0) { string_list_free(str_list); diff --git a/msg_hash.h b/msg_hash.h index 9f9d26c0ae..9a83c6326c 100644 --- a/msg_hash.h +++ b/msg_hash.h @@ -737,6 +737,7 @@ enum msg_hash_enums MENU_LABEL(CONTENT_HISTORY_SIZE), MENU_LABEL(PLAYLIST_ENTRY_REMOVE), MENU_LABEL(PLAYLIST_ENTRY_RENAME), + MENU_LABEL(GOTO_FAVORITES), MENU_LABEL(ADD_TO_FAVORITES), MENU_LABEL(MENU_THROTTLE_FRAMERATE), MENU_LABEL(NO_ACHIEVEMENTS_TO_DISPLAY), @@ -825,6 +826,7 @@ enum msg_hash_enums MENU_LABEL(BROWSE_URL), MENU_LABEL(BROWSE_START), /* Deferred */ + MENU_ENUM_LABEL_DEFERRED_FAVORITES_LIST, MENU_ENUM_LABEL_DEFERRED_NETPLAY, MENU_ENUM_LABEL_DEFERRED_MUSIC, MENU_ENUM_LABEL_DEFERRED_BROWSE_URL_START, From 0d86027cd5427d958c9da938c2b6caae4a1feae4 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 16 Aug 2017 01:10:27 +0200 Subject: [PATCH 005/137] (RGUI) Add Load Content -> Favorites --- menu/drivers/materialui.c | 60 ++++++++++++++++++++------------------- menu/drivers/xmb.c | 50 +++++++++++++++++++++++++++++++- menu/menu_displaylist.c | 7 +++++ 3 files changed, 87 insertions(+), 30 deletions(-) diff --git a/menu/drivers/materialui.c b/menu/drivers/materialui.c index 15884b15ec..06c51b592b 100644 --- a/menu/drivers/materialui.c +++ b/menu/drivers/materialui.c @@ -1945,39 +1945,41 @@ static int mui_list_push(void *data, void *userdata, switch (type) { case DISPLAYLIST_LOAD_CONTENT_LIST: - menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list); - - menu_entries_append_enum(info->list, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_FAVORITES), - msg_hash_to_str(MENU_ENUM_LABEL_FAVORITES), - MENU_ENUM_LABEL_FAVORITES, - MENU_SETTING_ACTION, 0, 0); - - core_info_get_list(&list); - if (core_info_list_num_info_files(list)) { + menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list); + menu_entries_append_enum(info->list, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_DOWNLOADED_FILE_DETECT_CORE_LIST), - msg_hash_to_str(MENU_ENUM_LABEL_DOWNLOADED_FILE_DETECT_CORE_LIST), - MENU_ENUM_LABEL_DOWNLOADED_FILE_DETECT_CORE_LIST, + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_FAVORITES), + msg_hash_to_str(MENU_ENUM_LABEL_FAVORITES), + MENU_ENUM_LABEL_FAVORITES, MENU_SETTING_ACTION, 0, 0); + + core_info_get_list(&list); + if (core_info_list_num_info_files(list)) + { + menu_entries_append_enum(info->list, + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_DOWNLOADED_FILE_DETECT_CORE_LIST), + msg_hash_to_str(MENU_ENUM_LABEL_DOWNLOADED_FILE_DETECT_CORE_LIST), + MENU_ENUM_LABEL_DOWNLOADED_FILE_DETECT_CORE_LIST, + MENU_SETTING_ACTION, 0, 0); + } + + if (frontend_driver_parse_drive_list(info->list, true) != 0) + menu_entries_append_enum(info->list, "/", + msg_hash_to_str(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR), + MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR, + MENU_SETTING_ACTION, 0, 0); + + menu_entries_append_enum(info->list, + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_MENU_FILE_BROWSER_SETTINGS), + msg_hash_to_str(MENU_ENUM_LABEL_MENU_FILE_BROWSER_SETTINGS), + MENU_ENUM_LABEL_MENU_FILE_BROWSER_SETTINGS, + MENU_SETTING_ACTION, 0, 0); + + info->need_push = true; + info->need_refresh = true; + ret = 0; } - - if (frontend_driver_parse_drive_list(info->list, true) != 0) - menu_entries_append_enum(info->list, "/", - msg_hash_to_str(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR), - MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR, - MENU_SETTING_ACTION, 0, 0); - - menu_entries_append_enum(info->list, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_MENU_FILE_BROWSER_SETTINGS), - msg_hash_to_str(MENU_ENUM_LABEL_MENU_FILE_BROWSER_SETTINGS), - MENU_ENUM_LABEL_MENU_FILE_BROWSER_SETTINGS, - MENU_SETTING_ACTION, 0, 0); - - info->need_push = true; - info->need_refresh = true; - ret = 0; break; case DISPLAYLIST_MAIN_MENU: { diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index 683b249a40..5400eda310 100644 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -44,6 +44,8 @@ #include "../menu_driver.h" #include "../menu_animation.h" +#include "../../core_info.h" +#include "../../core.h" #include "../widgets/menu_entry.h" #include "../widgets/menu_list.h" #include "../widgets/menu_input_dialog.h" @@ -4064,10 +4066,56 @@ static int xmb_list_push(void *data, void *userdata, { menu_displaylist_ctx_parse_entry_t entry; int ret = -1; - menu_handle_t *menu = (menu_handle_t*)data; + core_info_list_t *list = NULL; + menu_handle_t *menu = (menu_handle_t*)data; switch (type) { + case DISPLAYLIST_LOAD_CONTENT_LIST: + { + menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list); + + menu_entries_append_enum(info->list, + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_FAVORITES), + msg_hash_to_str(MENU_ENUM_LABEL_FAVORITES), + MENU_ENUM_LABEL_FAVORITES, + MENU_SETTING_ACTION, 0, 0); + + core_info_get_list(&list); + if (core_info_list_num_info_files(list)) + { + menu_entries_append_enum(info->list, + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_DOWNLOADED_FILE_DETECT_CORE_LIST), + msg_hash_to_str(MENU_ENUM_LABEL_DOWNLOADED_FILE_DETECT_CORE_LIST), + MENU_ENUM_LABEL_DOWNLOADED_FILE_DETECT_CORE_LIST, + MENU_SETTING_ACTION, 0, 0); + } + +#ifdef HAVE_LIBRETRODB + menu_entries_append_enum(info->list, + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CONTENT_COLLECTION_LIST), + msg_hash_to_str(MENU_ENUM_LABEL_CONTENT_COLLECTION_LIST), + MENU_ENUM_LABEL_CONTENT_COLLECTION_LIST, + MENU_SETTING_ACTION, 0, 0); +#endif + + if (frontend_driver_parse_drive_list(info->list, true) != 0) + menu_entries_append_enum(info->list, "/", + msg_hash_to_str(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR), + MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR, + MENU_SETTING_ACTION, 0, 0); + + menu_entries_append_enum(info->list, + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_MENU_FILE_BROWSER_SETTINGS), + msg_hash_to_str(MENU_ENUM_LABEL_MENU_FILE_BROWSER_SETTINGS), + MENU_ENUM_LABEL_MENU_FILE_BROWSER_SETTINGS, + MENU_SETTING_ACTION, 0, 0); + + info->need_push = true; + info->need_refresh = true; + ret = 0; + } + break; case DISPLAYLIST_MAIN_MENU: { rarch_system_info_t *system = runloop_get_system_info(); diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index e07cfb0e17..93c0b7a523 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -6018,6 +6018,13 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) case DISPLAYLIST_LOAD_CONTENT_LIST: case DISPLAYLIST_LOAD_CONTENT_SPECIAL: menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list); + + menu_entries_append_enum(info->list, + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES), + msg_hash_to_str(MENU_ENUM_LABEL_GOTO_FAVORITES), + MENU_ENUM_LABEL_GOTO_FAVORITES, + MENU_SETTING_ACTION, 0, 0); + if (!string_is_empty(settings->paths.directory_menu_content)) menu_entries_append_enum(info->list, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_FAVORITES), From db485612897e98414673117faa605b1a55fbedab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Higor=20Eur=C3=ADpedes?= Date: Tue, 15 Aug 2017 21:34:49 -0300 Subject: [PATCH 006/137] (xmb) Fix crash --- menu/drivers/xmb.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index 5400eda310..2319b720b9 100644 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -1297,7 +1297,7 @@ static void xmb_list_open_old(xmb_handle_t *xmb, entry.target_value = ia; entry.subject = &node->alpha; entry.easing_enum = EASING_OUT_QUAD; - entry.tag = -1; + entry.tag = (uintptr_t)list; entry.cb = NULL; menu_animation_push(&entry); @@ -1367,7 +1367,7 @@ static void xmb_list_open_new(xmb_handle_t *xmb, entry.target_value = ia; entry.subject = &node->alpha; entry.easing_enum = EASING_OUT_QUAD; - entry.tag = -1; + entry.tag = (uintptr_t)list; entry.cb = NULL; menu_animation_push(&entry); From 5c7fd82a40ef4cf4c169a75153024e9984ab0628 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 16 Aug 2017 03:15:04 +0200 Subject: [PATCH 007/137] Add Music/Image/Video lists for MaterialUI and RGUI --- intl/msg_hash_lbl.h | 12 ++++++++++ intl/msg_hash_us.h | 12 ++++++++++ menu/cbs/menu_cbs_deferred_push.c | 39 ++++++++++++++++++++++++++++++- menu/cbs/menu_cbs_ok.c | 39 +++++++++++++++++++++++++++++++ menu/cbs/menu_cbs_sublabel.c | 12 ++++++++++ menu/drivers/materialui.c | 15 ++++++++++++ menu/menu_cbs.h | 3 +++ menu/menu_displaylist.c | 35 +++++++++++++++++++++++++++ msg_hash.h | 6 +++++ 9 files changed, 172 insertions(+), 1 deletion(-) diff --git a/intl/msg_hash_lbl.h b/intl/msg_hash_lbl.h index c29bbfe293..ac9b36106a 100644 --- a/intl/msg_hash_lbl.h +++ b/intl/msg_hash_lbl.h @@ -231,6 +231,12 @@ MSG_HASH(MENU_ENUM_LABEL_DATABASE_MANAGER_LIST, "database_manager_list") MSG_HASH(MENU_ENUM_LABEL_DEFERRED_FAVORITES_LIST, "deferred_favorites_list") +MSG_HASH(MENU_ENUM_LABEL_DEFERRED_IMAGES_LIST, + "deferred_images_list") +MSG_HASH(MENU_ENUM_LABEL_DEFERRED_MUSIC_LIST, + "deferred_music_list") +MSG_HASH(MENU_ENUM_LABEL_DEFERRED_VIDEO_LIST, + "deferred_video_list") MSG_HASH(MENU_ENUM_LABEL_DEFERRED_NETPLAY, "deferred_netplay") MSG_HASH(MENU_ENUM_LABEL_DEFERRED_MUSIC, @@ -1283,3 +1289,9 @@ MSG_HASH(MENU_ENUM_LABEL_MENU_FRAMEBUFFER_OPACITY, "menu_framebuffer_opacity") MSG_HASH(MENU_ENUM_LABEL_GOTO_FAVORITES, "goto_favorites") +MSG_HASH(MENU_ENUM_LABEL_GOTO_MUSIC, + "goto_music") +MSG_HASH(MENU_ENUM_LABEL_GOTO_IMAGES, + "goto_images") +MSG_HASH(MENU_ENUM_LABEL_GOTO_VIDEO, + "goto_video") diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index b2616c00cf..dfd2c881d1 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -3113,3 +3113,15 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES, "Favorites") MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_FAVORITES, "Content which you have added to 'Favorites' will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_MUSIC, + "Music") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_MUSIC, + "Music which has been previously played will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES, + "Image") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_IMAGES, + "Images which has been previously viewed will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO, + "Video") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_VIDEO, + "Videos which have been previously played will appear here.") diff --git a/menu/cbs/menu_cbs_deferred_push.c b/menu/cbs/menu_cbs_deferred_push.c index 00ecc1db89..5a7a1c2dbd 100644 --- a/menu/cbs/menu_cbs_deferred_push.c +++ b/menu/cbs/menu_cbs_deferred_push.c @@ -821,6 +821,24 @@ static int deferred_push_detect_core_list(menu_displaylist_info_t *info) DISPLAYLIST_CORES_DETECTED); } +static int deferred_music_history_list(menu_displaylist_info_t *info) +{ + menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list); + return general_push(info, PUSH_DEFAULT, DISPLAYLIST_MUSIC_HISTORY); +} + +static int deferred_image_history_list(menu_displaylist_info_t *info) +{ + menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list); + return general_push(info, PUSH_DEFAULT, DISPLAYLIST_IMAGES_HISTORY); +} + +static int deferred_video_history_list(menu_displaylist_info_t *info) +{ + menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list); + return general_push(info, PUSH_DEFAULT, DISPLAYLIST_VIDEO_HISTORY); +} + static int deferred_archive_open_detect_core(menu_displaylist_info_t *info) { return general_push(info, PUSH_ARCHIVE_OPEN_DETECT_CORE, @@ -1085,11 +1103,30 @@ static int menu_cbs_init_bind_deferred_push_compare_label( #endif return 0; } - else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_MUSIC))) + else if ( + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_MUSIC))) { BIND_ACTION_DEFERRED_PUSH(cbs, deferred_music_list); return 0; } + else if ( + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_MUSIC_LIST))) + { + BIND_ACTION_DEFERRED_PUSH(cbs, deferred_music_history_list); + return 0; + } + else if ( + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_IMAGES_LIST))) + { + BIND_ACTION_DEFERRED_PUSH(cbs, deferred_image_history_list); + return 0; + } + else if ( + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_VIDEO_LIST))) + { + BIND_ACTION_DEFERRED_PUSH(cbs, deferred_video_history_list); + return 0; + } else if (strstr(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_RDB_ENTRY_DETAIL))) { BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_rdb_entry_detail); diff --git a/menu/cbs/menu_cbs_ok.c b/menu/cbs/menu_cbs_ok.c index dde131e304..0b11f7e072 100644 --- a/menu/cbs/menu_cbs_ok.c +++ b/menu/cbs/menu_cbs_ok.c @@ -168,6 +168,33 @@ int generic_action_ok_displaylist_push(const char *path, info.enum_idx = MENU_ENUM_LABEL_DEFERRED_FAVORITES_LIST; dl_type = DISPLAYLIST_GENERIC; break; + case ACTION_OK_DL_IMAGES_LIST: + info.type = type; + info.directory_ptr = idx; + info_path = label; + info_label = msg_hash_to_str( + MENU_ENUM_LABEL_DEFERRED_IMAGES_LIST); + info.enum_idx = MENU_ENUM_LABEL_DEFERRED_IMAGES_LIST; + dl_type = DISPLAYLIST_GENERIC; + break; + case ACTION_OK_DL_MUSIC_LIST: + info.type = type; + info.directory_ptr = idx; + info_path = label; + info_label = msg_hash_to_str( + MENU_ENUM_LABEL_DEFERRED_MUSIC_LIST); + info.enum_idx = MENU_ENUM_LABEL_DEFERRED_MUSIC_LIST; + dl_type = DISPLAYLIST_GENERIC; + break; + case ACTION_OK_DL_VIDEO_LIST: + info.type = type; + info.directory_ptr = idx; + info_path = label; + info_label = msg_hash_to_str( + MENU_ENUM_LABEL_DEFERRED_VIDEO_LIST); + info.enum_idx = MENU_ENUM_LABEL_DEFERRED_VIDEO_LIST; + dl_type = DISPLAYLIST_GENERIC; + break; case ACTION_OK_DL_USER_BINDS_LIST: info.type = type; info.directory_ptr = idx; @@ -3203,6 +3230,9 @@ int (func_name)(const char *path, const char *label, unsigned type, size_t idx, default_action_ok_func(action_ok_browse_url_start, ACTION_OK_DL_BROWSE_URL_START) default_action_ok_func(action_ok_goto_favorites, ACTION_OK_DL_FAVORITES_LIST) +default_action_ok_func(action_ok_goto_images, ACTION_OK_DL_IMAGES_LIST) +default_action_ok_func(action_ok_goto_video, ACTION_OK_DL_VIDEO_LIST) +default_action_ok_func(action_ok_goto_music, ACTION_OK_DL_MUSIC_LIST) default_action_ok_func(action_ok_shader_parameters, ACTION_OK_DL_SHADER_PARAMETERS) default_action_ok_func(action_ok_parent_directory_push, ACTION_OK_DL_PARENT_DIRECTORY_PUSH) default_action_ok_func(action_ok_directory_push, ACTION_OK_DL_DIRECTORY_PUSH) @@ -4140,6 +4170,15 @@ static int menu_cbs_init_bind_ok_compare_label(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_GOTO_FAVORITES: BIND_ACTION_OK(cbs, action_ok_goto_favorites); break; + case MENU_ENUM_LABEL_GOTO_MUSIC: + BIND_ACTION_OK(cbs, action_ok_goto_music); + break; + case MENU_ENUM_LABEL_GOTO_IMAGES: + BIND_ACTION_OK(cbs, action_ok_goto_images); + break; + case MENU_ENUM_LABEL_GOTO_VIDEO: + BIND_ACTION_OK(cbs, action_ok_goto_video); + break; case MENU_ENUM_LABEL_BROWSE_START: BIND_ACTION_OK(cbs, action_ok_browse_url_start); break; diff --git a/menu/cbs/menu_cbs_sublabel.c b/menu/cbs/menu_cbs_sublabel.c index 9ff2c26ca8..c5a8996691 100644 --- a/menu/cbs/menu_cbs_sublabel.c +++ b/menu/cbs/menu_cbs_sublabel.c @@ -235,6 +235,9 @@ default_sublabel_macro(action_bind_sublabel_information, default_sublabel_macro(action_bind_sublabel_run, MENU_ENUM_SUBLABEL_RUN) default_sublabel_macro(action_bind_sublabel_add_to_favorites, MENU_ENUM_SUBLABEL_ADD_TO_FAVORITES) default_sublabel_macro(action_bind_sublabel_goto_favorites, MENU_ENUM_SUBLABEL_GOTO_FAVORITES) +default_sublabel_macro(action_bind_sublabel_goto_images, MENU_ENUM_SUBLABEL_GOTO_IMAGES) +default_sublabel_macro(action_bind_sublabel_goto_music, MENU_ENUM_SUBLABEL_GOTO_MUSIC) +default_sublabel_macro(action_bind_sublabel_goto_video, MENU_ENUM_SUBLABEL_GOTO_VIDEO) default_sublabel_macro(action_bind_sublabel_menu_filebrowser_settings, MENU_ENUM_SUBLABEL_MENU_FILE_BROWSER_SETTINGS) default_sublabel_macro(action_bind_sublabel_auto_remaps_enable, MENU_ENUM_SUBLABEL_AUTO_REMAPS_ENABLE) default_sublabel_macro(action_bind_sublabel_auto_overrides_enable, MENU_ENUM_SUBLABEL_AUTO_OVERRIDES_ENABLE) @@ -547,6 +550,15 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_XMB_SHOW_SETTINGS: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_menu_settings_tab); break; + case MENU_ENUM_LABEL_GOTO_IMAGES: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_goto_images); + break; + case MENU_ENUM_LABEL_GOTO_MUSIC: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_goto_music); + break; + case MENU_ENUM_LABEL_GOTO_VIDEO: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_goto_video); + break; case MENU_ENUM_LABEL_GOTO_FAVORITES: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_goto_favorites); break; diff --git a/menu/drivers/materialui.c b/menu/drivers/materialui.c index 06c51b592b..b2ed0d0630 100644 --- a/menu/drivers/materialui.c +++ b/menu/drivers/materialui.c @@ -2293,6 +2293,21 @@ static void mui_list_insert(void *userdata, node->texture_switch2 = mui->textures.list[MUI_TEXTURE_INFO]; node->texture_switch2_set = true; } + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_GOTO_IMAGES))) + { + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_IMAGE]; + node->texture_switch2_set = true; + } + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_GOTO_MUSIC))) + { + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_MUSIC]; + node->texture_switch2_set = true; + } + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_GOTO_VIDEO))) + { + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_VIDEO]; + node->texture_switch2_set = true; + } else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_SCAN_THIS_DIRECTORY))) { node->texture_switch2 = mui->textures.list[MUI_TEXTURE_SCAN]; diff --git a/menu/menu_cbs.h b/menu/menu_cbs.h index 583bf66015..bf83ea49de 100644 --- a/menu/menu_cbs.h +++ b/menu/menu_cbs.h @@ -42,6 +42,9 @@ enum ACTION_OK_DL_AUDIO_DSP_PLUGIN, ACTION_OK_DL_SHADER_PASS, ACTION_OK_DL_FAVORITES_LIST, + ACTION_OK_DL_IMAGES_LIST, + ACTION_OK_DL_VIDEO_LIST, + ACTION_OK_DL_MUSIC_LIST, ACTION_OK_DL_SHADER_PARAMETERS, ACTION_OK_DL_SHADER_PRESET, ACTION_OK_DL_GENERIC, diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index 93c0b7a523..786ae8dccb 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -3510,6 +3510,23 @@ static int menu_displaylist_parse_playlists( MENU_ENUM_LABEL_GOTO_FAVORITES, MENU_SETTING_ACTION, 0, 0); + menu_entries_append_enum(info->list, + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES), + msg_hash_to_str(MENU_ENUM_LABEL_GOTO_IMAGES), + MENU_ENUM_LABEL_GOTO_IMAGES, + MENU_SETTING_ACTION, 0, 0); + + menu_entries_append_enum(info->list, + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_GOTO_MUSIC), + msg_hash_to_str(MENU_ENUM_LABEL_GOTO_MUSIC), + MENU_ENUM_LABEL_GOTO_MUSIC, + MENU_SETTING_ACTION, 0, 0); + + menu_entries_append_enum(info->list, + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO), + msg_hash_to_str(MENU_ENUM_LABEL_GOTO_VIDEO), + MENU_ENUM_LABEL_GOTO_VIDEO, + MENU_SETTING_ACTION, 0, 0); if (list_size == 0) { @@ -6025,6 +6042,24 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) MENU_ENUM_LABEL_GOTO_FAVORITES, MENU_SETTING_ACTION, 0, 0); + menu_entries_append_enum(info->list, + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES), + msg_hash_to_str(MENU_ENUM_LABEL_GOTO_IMAGES), + MENU_ENUM_LABEL_GOTO_IMAGES, + MENU_SETTING_ACTION, 0, 0); + + menu_entries_append_enum(info->list, + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_GOTO_MUSIC), + msg_hash_to_str(MENU_ENUM_LABEL_GOTO_MUSIC), + MENU_ENUM_LABEL_GOTO_MUSIC, + MENU_SETTING_ACTION, 0, 0); + + menu_entries_append_enum(info->list, + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO), + msg_hash_to_str(MENU_ENUM_LABEL_GOTO_VIDEO), + MENU_ENUM_LABEL_GOTO_VIDEO, + MENU_SETTING_ACTION, 0, 0); + if (!string_is_empty(settings->paths.directory_menu_content)) menu_entries_append_enum(info->list, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_FAVORITES), diff --git a/msg_hash.h b/msg_hash.h index 9a83c6326c..791a288c64 100644 --- a/msg_hash.h +++ b/msg_hash.h @@ -738,6 +738,9 @@ enum msg_hash_enums MENU_LABEL(PLAYLIST_ENTRY_REMOVE), MENU_LABEL(PLAYLIST_ENTRY_RENAME), MENU_LABEL(GOTO_FAVORITES), + MENU_LABEL(GOTO_MUSIC), + MENU_LABEL(GOTO_IMAGES), + MENU_LABEL(GOTO_VIDEO), MENU_LABEL(ADD_TO_FAVORITES), MENU_LABEL(MENU_THROTTLE_FRAMERATE), MENU_LABEL(NO_ACHIEVEMENTS_TO_DISPLAY), @@ -827,6 +830,9 @@ enum msg_hash_enums MENU_LABEL(BROWSE_START), /* Deferred */ MENU_ENUM_LABEL_DEFERRED_FAVORITES_LIST, + MENU_ENUM_LABEL_DEFERRED_IMAGES_LIST, + MENU_ENUM_LABEL_DEFERRED_MUSIC_LIST, + MENU_ENUM_LABEL_DEFERRED_VIDEO_LIST, MENU_ENUM_LABEL_DEFERRED_NETPLAY, MENU_ENUM_LABEL_DEFERRED_MUSIC, MENU_ENUM_LABEL_DEFERRED_BROWSE_URL_START, From cf7fd7b34bfb843aab3bf0e509b0a5b573bfd85d Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 16 Aug 2017 03:18:18 +0200 Subject: [PATCH 008/137] Shorten sublabel for Information --- intl/msg_hash_us.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index dfd2c881d1..412cea3538 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -1840,7 +1840,7 @@ MSG_HASH(MENU_ENUM_SUBLABEL_NETPLAY, MSG_HASH(MENU_ENUM_SUBLABEL_NETPLAY_LAN_SCAN_SETTINGS, "Search for and connect to netplay hosts on the local network.") MSG_HASH(MENU_ENUM_SUBLABEL_INFORMATION_LIST_LIST, - "Display core, network, and system information.") + "Display system information.") MSG_HASH(MENU_ENUM_SUBLABEL_ONLINE_UPDATER, "Download add-ons, components, and content for RetroArch.") MSG_HASH(MENU_ENUM_SUBLABEL_SAMBA_ENABLE, From 6f4697d60f6ced40d2af2a61ecdae4c98f226420 Mon Sep 17 00:00:00 2001 From: radius Date: Tue, 15 Aug 2017 20:20:24 -0500 Subject: [PATCH 009/137] start adding descriptions for netplay rooms --- menu/cbs/menu_cbs_info.c | 34 +++++++++++++++++++++++++++++++--- menu/cbs/menu_cbs_ok.c | 7 ++----- 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/menu/cbs/menu_cbs_info.c b/menu/cbs/menu_cbs_info.c index d9ef6ef40a..ea8de9f7f0 100644 --- a/menu/cbs/menu_cbs_info.c +++ b/menu/cbs/menu_cbs_info.c @@ -17,6 +17,7 @@ #include "../menu_driver.h" #include "../menu_cbs.h" +#include "../verbosity.h" #include "../widgets/menu_dialog.h" @@ -26,6 +27,10 @@ cbs->action_info_ident = #name; #endif +#ifdef HAVE_NETWORKING +#include "../../network/netplay/netplay_discovery.h" +#endif + static int action_info_default(unsigned type, const char *label) { menu_displaylist_info_t info = {0}; @@ -60,8 +65,22 @@ static int action_info_cheevos(unsigned type, const char *label) menu_dialog_set_current_id(new_id); return generic_action_ok_help(NULL, label, new_id, 0, 0, - MENU_ENUM_LABEL_CHEEVOS_DESCRIPTION, - MENU_DIALOG_HELP_CHEEVOS_DESCRIPTION); + MENU_ENUM_LABEL_CHEEVOS_DESCRIPTION, + MENU_DIALOG_HELP_CHEEVOS_DESCRIPTION); +} +#endif + +#ifdef HAVE_NETWORKING +static int action_info_room(unsigned type, const char *label) +{ + unsigned new_id = type - MENU_SETTINGS_NETPLAY_ROOMS_START; +#if 1 + RARCH_LOG ("Room id: %u IP: %s Port: %u\n", new_id, + netplay_room_list[new_id].address, netplay_room_list[new_id].port); +#endif + /* add description here + the relevant data is in netplay_room_list[new_id]*/ + return 0; } #endif @@ -72,13 +91,22 @@ int menu_cbs_init_bind_info(menu_file_list_cbs_t *cbs, return -1; #ifdef HAVE_CHEEVOS - if ((type >= MENU_SETTINGS_CHEEVOS_START)) + if ((type >= MENU_SETTINGS_CHEEVOS_START) && + (type < MENU_SETTINGS_NETPLAY_ROOMS_START)) { BIND_ACTION_INFO(cbs, action_info_cheevos); return 0; } #endif +#ifdef HAVE_NETWORKING + if ((type >= MENU_SETTINGS_NETPLAY_ROOMS_START)) + { + BIND_ACTION_INFO(cbs, action_info_room); + return 0; + } +#endif + BIND_ACTION_INFO(cbs, action_info_default); return -1; diff --git a/menu/cbs/menu_cbs_ok.c b/menu/cbs/menu_cbs_ok.c index 0b11f7e072..2d6154cbc5 100644 --- a/menu/cbs/menu_cbs_ok.c +++ b/menu/cbs/menu_cbs_ok.c @@ -3417,7 +3417,6 @@ void netplay_refresh_rooms_menu(file_list_t *list) { char s[4115]; int i = 0; - int j = 0; menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, list); @@ -3496,20 +3495,18 @@ void netplay_refresh_rooms_menu(file_list_t *list) netplay_room_list[i].gamecrc, netplay_room_list[i].timestamp); #endif - j+=8; + snprintf(s, sizeof(s), "%s: %s%s", netplay_room_list[i].lan ? "Local" : (netplay_room_list[i].host_method == NETPLAY_HOST_METHOD_MITM ? "Internet (relay)" : "Internet (direct)"), netplay_room_list[i].nickname, country); - /*int room_type = netplay_room_list[i].lan ? MENU_ROOM_LAN : - (netplay_room_list[i].host_method == NETPLAY_HOST_METHOD_MITM ? MENU_ROOM_MITM : MENU_ROOM); */ menu_entries_append_enum(list, s, msg_hash_to_str(MENU_ENUM_LABEL_CONNECT_NETPLAY_ROOM), MENU_ENUM_LABEL_CONNECT_NETPLAY_ROOM, - MENU_ROOM, 0, 0); + MENU_SETTINGS_NETPLAY_ROOMS_START + i, 0, 0); } netplay_rooms_free(); From 6804432fa7e4481b63034ff35879d01502e6d510 Mon Sep 17 00:00:00 2001 From: radius Date: Tue, 15 Aug 2017 20:47:48 -0500 Subject: [PATCH 010/137] log address family, fix inet_ntop_compat --- libretro-common/net/net_compat.c | 2 ++ network/netplay/netplay_discovery.c | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/libretro-common/net/net_compat.c b/libretro-common/net/net_compat.c index c82bef5d8a..eac476dbca 100644 --- a/libretro-common/net/net_compat.c +++ b/libretro-common/net/net_compat.c @@ -393,6 +393,8 @@ const char *inet_ntop_compat(int af, const void *src, char *dst, socklen_t cnt) return dst; } #endif +#else + return inet_ntop(af, src, dst, cnt); #endif return NULL; diff --git a/network/netplay/netplay_discovery.c b/network/netplay/netplay_discovery.c index 022b853efa..5c0e9160aa 100644 --- a/network/netplay/netplay_discovery.c +++ b/network/netplay/netplay_discovery.c @@ -45,6 +45,8 @@ #include "../../retroarch.h" #include "../../version.h" +#include "../../verbosity.h" + #include "netplay.h" #include "netplay_discovery.h" #include "netplay_private.h" @@ -346,6 +348,7 @@ static bool netplay_lan_ad_client(void) /* And that we know how to handle it */ if (their_addr.sa_family == AF_INET) { + RARCH_WARN ("[lobby] using IPv4 for discovery\n"); struct sockaddr_in *sin = (struct sockaddr_in *) &their_addr; sin->sin_port = htons(ntohl(ad_packet_buffer.port)); @@ -353,6 +356,7 @@ static bool netplay_lan_ad_client(void) #ifdef HAVE_INET6 else if (their_addr.sa_family == AF_INET6) { + RARCH_WARN ("[lobby] using IPv6 for discovery\n"); struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) &their_addr; sin6->sin6_port = htons(ad_packet_buffer.port); From f54a834ada257835358ea269fad44e87c60e187a Mon Sep 17 00:00:00 2001 From: radius Date: Tue, 15 Aug 2017 21:07:10 -0500 Subject: [PATCH 011/137] update CHANGES.md --- CHANGES.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 10a4e698fe..85631d81f9 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -8,6 +8,8 @@ - INPUT: Overlay controller response - when we press buttons on the gamepad or keyboard, the corresponding buttons on the overlay will be highlighted as well. - NETBSD: Silence some compilation warnings. - COMMON: Fixed bug 'Deleting an entry from a playlist would not update the list view inside XMB'. +- COMMON: Fix inet_ntop_compat on *nix +- LOBBY: Add skeleton to add help descriptions to lobbies # 1.6.5 Skipped this one. From 0eb78a26b3b910a7cf8fefcf0b6489cc7bff6f3c Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 16 Aug 2017 05:45:51 +0200 Subject: [PATCH 012/137] Let's try to implement the message inside intl/msg_hash_us.c instead - we need to get index from somewhere --- intl/msg_hash_us.c | 357 ++++++++++++++++++++------------------- menu/cbs/menu_cbs_info.c | 22 --- menu/cbs/menu_cbs_ok.c | 1 + 3 files changed, 185 insertions(+), 195 deletions(-) diff --git a/intl/msg_hash_us.c b/intl/msg_hash_us.c index 5dded686d6..ed275361d8 100644 --- a/intl/msg_hash_us.c +++ b/intl/msg_hash_us.c @@ -25,189 +25,200 @@ #include "../configuration.h" #include "../verbosity.h" -int menu_hash_get_help_us_enum(enum msg_hash_enums msg, char *s, size_t len) { +int menu_hash_get_help_us_enum(enum msg_hash_enums msg, char *s, size_t len) +{ uint32_t driver_hash = 0; settings_t *settings = config_get_ptr(); + if (msg == MENU_ENUM_LABEL_CONNECT_NETPLAY_ROOM) + { + snprintf(s, len, + "TODO/FIXME - Fill in message here." + ); + return 0; + } if (msg <= MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_END && - msg >= MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_BEGIN) { - unsigned idx = msg - MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_BEGIN; + msg >= MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_BEGIN) + { + unsigned idx = msg - MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_BEGIN; - switch (idx) { - case RARCH_FAST_FORWARD_KEY: - snprintf(s, len, - "Toggles between fast-forwarding and \n" - "normal speed." - ); - break; - case RARCH_FAST_FORWARD_HOLD_KEY: - snprintf(s, len, - "Hold for fast-forward. \n" - " \n" - "Releasing button disables fast-forward." - ); - break; - case RARCH_PAUSE_TOGGLE: - snprintf(s, len, - "Toggle between paused and non-paused state."); - break; - case RARCH_FRAMEADVANCE: - snprintf(s, len, - "Frame advance when content is paused."); - break; - case RARCH_SHADER_NEXT: - snprintf(s, len, - "Applies next shader in directory."); - break; - case RARCH_SHADER_PREV: - snprintf(s, len, - "Applies previous shader in directory."); - break; - case RARCH_CHEAT_INDEX_PLUS: - case RARCH_CHEAT_INDEX_MINUS: - case RARCH_CHEAT_TOGGLE: - snprintf(s, len, - "Cheats."); - break; - case RARCH_RESET: - snprintf(s, len, - "Reset the content."); - break; - case RARCH_SCREENSHOT: - snprintf(s, len, - "Take screenshot."); - break; - case RARCH_MUTE: - snprintf(s, len, - "Mute/unmute audio."); - break; - case RARCH_OSK: - snprintf(s, len, - "Toggles onscreen keyboard."); - break; - case RARCH_NETPLAY_FLIP: - snprintf(s, len, - "Netplay flip users."); - break; - case RARCH_NETPLAY_GAME_WATCH: - snprintf(s, len, - "Netplay toggle play/spectate mode."); - break; - case RARCH_SLOWMOTION: - snprintf(s, len, - "Hold for slowmotion."); - break; - case RARCH_ENABLE_HOTKEY: - snprintf(s, len, - "Enable other hotkeys. \n" - " \n" - "If this hotkey is bound to either\n" - "a keyboard, joybutton or joyaxis, \n" - "all other hotkeys will be enabled only \n" - "if this one is held at the same time. \n" - " \n" - "Alternatively, all hotkeys for keyboard \n" - "could be disabled by the user."); - break; - case RARCH_VOLUME_UP: - snprintf(s, len, - "Increases audio volume."); - break; - case RARCH_VOLUME_DOWN: - snprintf(s, len, - "Decreases audio volume."); - break; - case RARCH_OVERLAY_NEXT: - snprintf(s, len, - "Switches to next overlay. Wraps around."); - break; - case RARCH_DISK_EJECT_TOGGLE: - snprintf(s, len, - "Toggles eject for disks. \n" - " \n" - "Used for multiple-disk content. "); - break; - case RARCH_DISK_NEXT: - case RARCH_DISK_PREV: - snprintf(s, len, - "Cycles through disk images. Use after ejecting. \n" - " \n" - "Complete by toggling eject again."); - break; - case RARCH_GRAB_MOUSE_TOGGLE: - snprintf(s, len, - "Toggles mouse grab. \n" - " \n" - "When mouse is grabbed, RetroArch hides the \n" - "mouse, and keeps the mouse pointer inside \n" - "the window to allow relative mouse input to \n" - "work better."); - break; - case RARCH_GAME_FOCUS_TOGGLE: - snprintf(s, len, - "Toggles game focus.\n" - " \n" - "When a game has focus, RetroArch will both disable \n" - "hotkeys and keep/warp the mouse pointer inside the window."); - break; - case RARCH_MENU_TOGGLE: - snprintf(s, len, "Toggles menu."); - break; - case RARCH_LOAD_STATE_KEY: - snprintf(s, len, - "Loads state."); - break; - case RARCH_FULLSCREEN_TOGGLE_KEY: - snprintf(s, len, - "Toggles fullscreen."); - break; - case RARCH_QUIT_KEY: - snprintf(s, len, - "Key to exit RetroArch cleanly. \n" - " \n" - "Killing it in any hard way (SIGKILL, etc.) will \n" - "terminate RetroArch without saving RAM, etc." + switch (idx) + { + case RARCH_FAST_FORWARD_KEY: + snprintf(s, len, + "Toggles between fast-forwarding and \n" + "normal speed." + ); + break; + case RARCH_FAST_FORWARD_HOLD_KEY: + snprintf(s, len, + "Hold for fast-forward. \n" + " \n" + "Releasing button disables fast-forward." + ); + break; + case RARCH_PAUSE_TOGGLE: + snprintf(s, len, + "Toggle between paused and non-paused state."); + break; + case RARCH_FRAMEADVANCE: + snprintf(s, len, + "Frame advance when content is paused."); + break; + case RARCH_SHADER_NEXT: + snprintf(s, len, + "Applies next shader in directory."); + break; + case RARCH_SHADER_PREV: + snprintf(s, len, + "Applies previous shader in directory."); + break; + case RARCH_CHEAT_INDEX_PLUS: + case RARCH_CHEAT_INDEX_MINUS: + case RARCH_CHEAT_TOGGLE: + snprintf(s, len, + "Cheats."); + break; + case RARCH_RESET: + snprintf(s, len, + "Reset the content."); + break; + case RARCH_SCREENSHOT: + snprintf(s, len, + "Take screenshot."); + break; + case RARCH_MUTE: + snprintf(s, len, + "Mute/unmute audio."); + break; + case RARCH_OSK: + snprintf(s, len, + "Toggles onscreen keyboard."); + break; + case RARCH_NETPLAY_FLIP: + snprintf(s, len, + "Netplay flip users."); + break; + case RARCH_NETPLAY_GAME_WATCH: + snprintf(s, len, + "Netplay toggle play/spectate mode."); + break; + case RARCH_SLOWMOTION: + snprintf(s, len, + "Hold for slowmotion."); + break; + case RARCH_ENABLE_HOTKEY: + snprintf(s, len, + "Enable other hotkeys. \n" + " \n" + "If this hotkey is bound to either\n" + "a keyboard, joybutton or joyaxis, \n" + "all other hotkeys will be enabled only \n" + "if this one is held at the same time. \n" + " \n" + "Alternatively, all hotkeys for keyboard \n" + "could be disabled by the user."); + break; + case RARCH_VOLUME_UP: + snprintf(s, len, + "Increases audio volume."); + break; + case RARCH_VOLUME_DOWN: + snprintf(s, len, + "Decreases audio volume."); + break; + case RARCH_OVERLAY_NEXT: + snprintf(s, len, + "Switches to next overlay. Wraps around."); + break; + case RARCH_DISK_EJECT_TOGGLE: + snprintf(s, len, + "Toggles eject for disks. \n" + " \n" + "Used for multiple-disk content. "); + break; + case RARCH_DISK_NEXT: + case RARCH_DISK_PREV: + snprintf(s, len, + "Cycles through disk images. Use after ejecting. \n" + " \n" + "Complete by toggling eject again."); + break; + case RARCH_GRAB_MOUSE_TOGGLE: + snprintf(s, len, + "Toggles mouse grab. \n" + " \n" + "When mouse is grabbed, RetroArch hides the \n" + "mouse, and keeps the mouse pointer inside \n" + "the window to allow relative mouse input to \n" + "work better."); + break; + case RARCH_GAME_FOCUS_TOGGLE: + snprintf(s, len, + "Toggles game focus.\n" + " \n" + "When a game has focus, RetroArch will both disable \n" + "hotkeys and keep/warp the mouse pointer inside the window."); + break; + case RARCH_MENU_TOGGLE: + snprintf(s, len, "Toggles menu."); + break; + case RARCH_LOAD_STATE_KEY: + snprintf(s, len, + "Loads state."); + break; + case RARCH_FULLSCREEN_TOGGLE_KEY: + snprintf(s, len, + "Toggles fullscreen."); + break; + case RARCH_QUIT_KEY: + snprintf(s, len, + "Key to exit RetroArch cleanly. \n" + " \n" + "Killing it in any hard way (SIGKILL, etc.) will \n" + "terminate RetroArch without saving RAM, etc." #ifdef __unix__ - "\nOn Unix-likes, SIGINT/SIGTERM allows a clean \n" - "deinitialization." + "\nOn Unix-likes, SIGINT/SIGTERM allows a clean \n" + "deinitialization." #endif - ""); - break; - case RARCH_STATE_SLOT_PLUS: - case RARCH_STATE_SLOT_MINUS: - snprintf(s, len, - "State slots. \n" - " \n" - "With slot set to 0, save state name is \n" - "*.state (or whatever defined on commandline). \n" - " \n" - "When slot is not 0, path will be , \n" - "where is slot number."); - break; - case RARCH_SAVE_STATE_KEY: - snprintf(s, len, - "Saves state."); - break; - case RARCH_REWIND: - snprintf(s, len, - "Hold button down to rewind. \n" - " \n" - "Rewinding must be enabled."); - break; - case RARCH_MOVIE_RECORD_TOGGLE: - snprintf(s, len, - "Toggle between recording and not."); - break; - default: - if (string_is_empty(s)) - strlcpy(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_INFORMATION_AVAILABLE), len); - break; - } + ""); + break; + case RARCH_STATE_SLOT_PLUS: + case RARCH_STATE_SLOT_MINUS: + snprintf(s, len, + "State slots. \n" + " \n" + "With slot set to 0, save state name is \n" + "*.state (or whatever defined on commandline). \n" + " \n" + "When slot is not 0, path will be , \n" + "where is slot number."); + break; + case RARCH_SAVE_STATE_KEY: + snprintf(s, len, + "Saves state."); + break; + case RARCH_REWIND: + snprintf(s, len, + "Hold button down to rewind. \n" + " \n" + "Rewinding must be enabled."); + break; + case RARCH_MOVIE_RECORD_TOGGLE: + snprintf(s, len, + "Toggle between recording and not."); + break; + default: + if (string_is_empty(s)) + strlcpy(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_INFORMATION_AVAILABLE), len); + break; + } - return 0; + return 0; } - switch (msg) { + switch (msg) + { case MENU_ENUM_LABEL_ACCOUNTS_RETRO_ACHIEVEMENTS: snprintf(s, len, "Login details for your \n" "Retro Achievements account. \n" diff --git a/menu/cbs/menu_cbs_info.c b/menu/cbs/menu_cbs_info.c index ea8de9f7f0..9d8a6338c6 100644 --- a/menu/cbs/menu_cbs_info.c +++ b/menu/cbs/menu_cbs_info.c @@ -70,20 +70,6 @@ static int action_info_cheevos(unsigned type, const char *label) } #endif -#ifdef HAVE_NETWORKING -static int action_info_room(unsigned type, const char *label) -{ - unsigned new_id = type - MENU_SETTINGS_NETPLAY_ROOMS_START; -#if 1 - RARCH_LOG ("Room id: %u IP: %s Port: %u\n", new_id, - netplay_room_list[new_id].address, netplay_room_list[new_id].port); -#endif - /* add description here - the relevant data is in netplay_room_list[new_id]*/ - return 0; -} -#endif - int menu_cbs_init_bind_info(menu_file_list_cbs_t *cbs, const char *path, const char *label, unsigned type, size_t idx) { @@ -99,14 +85,6 @@ int menu_cbs_init_bind_info(menu_file_list_cbs_t *cbs, } #endif -#ifdef HAVE_NETWORKING - if ((type >= MENU_SETTINGS_NETPLAY_ROOMS_START)) - { - BIND_ACTION_INFO(cbs, action_info_room); - return 0; - } -#endif - BIND_ACTION_INFO(cbs, action_info_default); return -1; diff --git a/menu/cbs/menu_cbs_ok.c b/menu/cbs/menu_cbs_ok.c index 2d6154cbc5..8266ddf08b 100644 --- a/menu/cbs/menu_cbs_ok.c +++ b/menu/cbs/menu_cbs_ok.c @@ -3413,6 +3413,7 @@ static int action_ok_push_scan_file(const char *path, #ifdef HAVE_NETWORKING struct netplay_host_list *lan_hosts; int lan_room_count; + void netplay_refresh_rooms_menu(file_list_t *list) { char s[4115]; From 1093c1bac8b1063f76bcc9db9f450c807a551499 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 16 Aug 2017 05:52:59 +0200 Subject: [PATCH 013/137] (XMB) Fix black box regression --- menu/menu_displaylist.c | 45 ++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index 786ae8dccb..8c239379f6 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -3488,9 +3488,9 @@ static int menu_displaylist_parse_playlists( list_size = str_list->size; -#ifdef HAVE_LIBRETRODB if (!horizontal) { +#ifdef HAVE_LIBRETRODB menu_entries_append_enum(info->list, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SCAN_DIRECTORY), msg_hash_to_str(MENU_ENUM_LABEL_SCAN_DIRECTORY), @@ -3501,32 +3501,31 @@ static int menu_displaylist_parse_playlists( msg_hash_to_str(MENU_ENUM_LABEL_SCAN_FILE), MENU_ENUM_LABEL_SCAN_FILE, MENU_SETTING_ACTION, 0, 0); - } #endif + menu_entries_append_enum(info->list, + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES), + msg_hash_to_str(MENU_ENUM_LABEL_GOTO_FAVORITES), + MENU_ENUM_LABEL_GOTO_FAVORITES, + MENU_SETTING_ACTION, 0, 0); - menu_entries_append_enum(info->list, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES), - msg_hash_to_str(MENU_ENUM_LABEL_GOTO_FAVORITES), - MENU_ENUM_LABEL_GOTO_FAVORITES, - MENU_SETTING_ACTION, 0, 0); + menu_entries_append_enum(info->list, + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES), + msg_hash_to_str(MENU_ENUM_LABEL_GOTO_IMAGES), + MENU_ENUM_LABEL_GOTO_IMAGES, + MENU_SETTING_ACTION, 0, 0); - menu_entries_append_enum(info->list, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES), - msg_hash_to_str(MENU_ENUM_LABEL_GOTO_IMAGES), - MENU_ENUM_LABEL_GOTO_IMAGES, - MENU_SETTING_ACTION, 0, 0); + menu_entries_append_enum(info->list, + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_GOTO_MUSIC), + msg_hash_to_str(MENU_ENUM_LABEL_GOTO_MUSIC), + MENU_ENUM_LABEL_GOTO_MUSIC, + MENU_SETTING_ACTION, 0, 0); - menu_entries_append_enum(info->list, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_GOTO_MUSIC), - msg_hash_to_str(MENU_ENUM_LABEL_GOTO_MUSIC), - MENU_ENUM_LABEL_GOTO_MUSIC, - MENU_SETTING_ACTION, 0, 0); - - menu_entries_append_enum(info->list, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO), - msg_hash_to_str(MENU_ENUM_LABEL_GOTO_VIDEO), - MENU_ENUM_LABEL_GOTO_VIDEO, - MENU_SETTING_ACTION, 0, 0); + menu_entries_append_enum(info->list, + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO), + msg_hash_to_str(MENU_ENUM_LABEL_GOTO_VIDEO), + MENU_ENUM_LABEL_GOTO_VIDEO, + MENU_SETTING_ACTION, 0, 0); + } if (list_size == 0) { From 494e229b03d8148e7f1865e66b0cb34087be70d2 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 16 Aug 2017 07:46:43 +0200 Subject: [PATCH 014/137] Refactor this --- menu/menu_displaylist.c | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index 8c239379f6..e946ee6921 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -2703,6 +2703,19 @@ static int menu_displaylist_parse_settings_enum(void *data, ); } +static void menu_displaylist_set_new_playlist( + menu_handle_t *menu, const char *path) +{ + menu_driver_ctl(RARCH_MENU_CTL_PLAYLIST_FREE, NULL); + menu_driver_ctl(RARCH_MENU_CTL_PLAYLIST_INIT, + (void*)path); + strlcpy( + menu->db_playlist_file, + path, + sizeof(menu->db_playlist_file)); +} + + static int menu_displaylist_parse_horizontal_list( menu_displaylist_info_t *info) { @@ -2738,8 +2751,6 @@ static int menu_displaylist_parse_horizontal_list( fill_pathname_base_noext(lpl_basename, item->path, sizeof(lpl_basename)); - menu_driver_ctl(RARCH_MENU_CTL_PLAYLIST_FREE, NULL); - fill_pathname_join( path_playlist, settings->paths.directory_playlist, @@ -2748,10 +2759,8 @@ static int menu_displaylist_parse_horizontal_list( menu_driver_set_thumbnail_system(lpl_basename, sizeof(lpl_basename)); - menu_driver_ctl(RARCH_MENU_CTL_PLAYLIST_INIT, (void*)path_playlist); + menu_displaylist_set_new_playlist(menu, path_playlist); - strlcpy(menu->db_playlist_file, - path_playlist, sizeof(menu->db_playlist_file)); strlcpy(path_playlist, msg_hash_to_str(MENU_ENUM_LABEL_COLLECTION), sizeof(path_playlist)); @@ -4060,13 +4069,8 @@ static void menu_displaylist_parse_playlist_history( strlcpy(path_playlist, playlist_name, sizeof(path_playlist)); *ret = menu_displaylist_parse_playlist(info, playlist, path_playlist, true); - strlcpy( - menu->db_playlist_file, - playlist_path, - sizeof(menu->db_playlist_file)); - menu_driver_ctl(RARCH_MENU_CTL_PLAYLIST_FREE, NULL); - menu_driver_ctl(RARCH_MENU_CTL_PLAYLIST_INIT, - (void*)menu->db_playlist_file); + + menu_displaylist_set_new_playlist(menu, playlist_path); } #ifdef HAVE_NETWORKING @@ -4413,7 +4417,6 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) path_playlist[0] = '\0'; - menu_driver_ctl(RARCH_MENU_CTL_PLAYLIST_FREE, NULL); fill_pathname_join( path_playlist, @@ -4421,11 +4424,8 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) info->path, sizeof(path_playlist)); - menu_driver_ctl(RARCH_MENU_CTL_PLAYLIST_INIT, - (void*)path_playlist); + menu_displaylist_set_new_playlist(menu, path_playlist); - strlcpy(menu->db_playlist_file, path_playlist, - sizeof(menu->db_playlist_file)); strlcpy(path_playlist, msg_hash_to_str(MENU_ENUM_LABEL_COLLECTION), sizeof(path_playlist)); From 877d14b1e7aa99f633d3a32724a9c1b9048eb304 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 16 Aug 2017 08:01:35 +0200 Subject: [PATCH 015/137] Fix playlist updating --- menu/menu_displaylist.c | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index e946ee6921..4a212cb34c 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -4054,23 +4054,22 @@ bool menu_displaylist_push(menu_displaylist_ctx_entry_t *entry) static void menu_displaylist_parse_playlist_history( menu_handle_t *menu, menu_displaylist_info_t *info, - playlist_t *playlist, const char *playlist_name, const char *playlist_path, int *ret) { char path_playlist[PATH_MAX_LENGTH]; + playlist_t *playlist = NULL; path_playlist[0] = '\0'; - if (!playlist) - command_event(CMD_EVENT_HISTORY_INIT, NULL); + menu_displaylist_set_new_playlist(menu, playlist_path); + + menu_driver_ctl(RARCH_MENU_CTL_PLAYLIST_GET, &playlist); strlcpy(path_playlist, playlist_name, sizeof(path_playlist)); *ret = menu_displaylist_parse_playlist(info, playlist, path_playlist, true); - - menu_displaylist_set_new_playlist(menu, playlist_path); } #ifdef HAVE_NETWORKING @@ -4449,7 +4448,6 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list); if (settings->bools.history_list_enable) menu_displaylist_parse_playlist_history(menu, info, - g_defaults.content_history, "history", settings->paths.path_content_history, &ret); @@ -4472,7 +4470,6 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) case DISPLAYLIST_FAVORITES: menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list); menu_displaylist_parse_playlist_history(menu, info, - g_defaults.content_favorites, "favorites", settings->paths.path_content_favorites, &ret); @@ -4485,7 +4482,6 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) case DISPLAYLIST_MUSIC_HISTORY: if (settings->bools.history_list_enable) menu_displaylist_parse_playlist_history(menu, info, - g_defaults.music_history, "music_history", settings->paths.path_content_music_history, &ret); @@ -4509,7 +4505,6 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) #ifdef HAVE_FFMPEG if (settings->bools.history_list_enable) menu_displaylist_parse_playlist_history(menu, info, - g_defaults.video_history, "video_history", settings->paths.path_content_video_history, &ret); @@ -6590,7 +6585,6 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) #ifdef HAVE_IMAGEVIEWER if (settings->bools.history_list_enable) menu_displaylist_parse_playlist_history(menu, info, - g_defaults.image_history, "images_history", settings->paths.path_content_image_history, &ret); From 7a44d29ed425b25b405437b23193c42a92281b84 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 16 Aug 2017 08:50:46 +0200 Subject: [PATCH 016/137] Only show video entries when HAVE_FFMPEG is enabled --- menu/menu_displaylist.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index 4a212cb34c..f27e32f935 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -3529,11 +3529,13 @@ static int menu_displaylist_parse_playlists( MENU_ENUM_LABEL_GOTO_MUSIC, MENU_SETTING_ACTION, 0, 0); +#ifdef HAVE_FFMPEG menu_entries_append_enum(info->list, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO), msg_hash_to_str(MENU_ENUM_LABEL_GOTO_VIDEO), MENU_ENUM_LABEL_GOTO_VIDEO, MENU_SETTING_ACTION, 0, 0); +#endif } if (list_size == 0) @@ -6048,11 +6050,13 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) MENU_ENUM_LABEL_GOTO_MUSIC, MENU_SETTING_ACTION, 0, 0); +#ifdef HAVE_FFMPEG menu_entries_append_enum(info->list, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO), msg_hash_to_str(MENU_ENUM_LABEL_GOTO_VIDEO), MENU_ENUM_LABEL_GOTO_VIDEO, MENU_SETTING_ACTION, 0, 0); +#endif if (!string_is_empty(settings->paths.directory_menu_content)) menu_entries_append_enum(info->list, From ef8395437618c09b3ca1d51d731c0bf72cb93bf3 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 16 Aug 2017 09:00:36 +0200 Subject: [PATCH 017/137] Fix relative header include --- menu/cbs/menu_cbs_info.c | 1 - 1 file changed, 1 deletion(-) diff --git a/menu/cbs/menu_cbs_info.c b/menu/cbs/menu_cbs_info.c index 9d8a6338c6..ef1b16483e 100644 --- a/menu/cbs/menu_cbs_info.c +++ b/menu/cbs/menu_cbs_info.c @@ -17,7 +17,6 @@ #include "../menu_driver.h" #include "../menu_cbs.h" -#include "../verbosity.h" #include "../widgets/menu_dialog.h" From 2a1c8c7a6c8856c424c0c45d2b98a1c4344379d2 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 16 Aug 2017 18:43:08 +0200 Subject: [PATCH 018/137] Update menu_cbs_title.c --- menu/cbs/menu_cbs_title.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/menu/cbs/menu_cbs_title.c b/menu/cbs/menu_cbs_title.c index e2808ccd44..04e398634a 100644 --- a/menu/cbs/menu_cbs_title.c +++ b/menu/cbs/menu_cbs_title.c @@ -136,6 +136,10 @@ default_title_macro(action_get_system_information_list, MENU_ENUM_LABEL_ default_title_macro(action_get_network_information_list, MENU_ENUM_LABEL_VALUE_NETWORK_INFORMATION) default_title_macro(action_get_settings_list, MENU_ENUM_LABEL_VALUE_SETTINGS) default_title_macro(action_get_title_information_list, MENU_ENUM_LABEL_VALUE_INFORMATION_LIST) +default_title_macro(action_get_title_goto_favorites, MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES) +default_title_macro(action_get_title_goto_image, MENU_ENUM_LABEL_VALUE_GOTO_IMAGES) +default_title_macro(action_get_title_goto_music, MENU_ENUM_LABEL_VALUE_GOTO_MUSIC) +default_title_macro(action_get_title_goto_video, MENU_ENUM_LABEL_VALUE_GOTO_VIDEO) default_fill_title_macro(action_get_title_disk_image_append, MENU_ENUM_LABEL_VALUE_DISK_IMAGE_APPEND) default_fill_title_macro(action_get_title_cheat_file_load, MENU_ENUM_LABEL_VALUE_CHEAT_FILE) @@ -463,6 +467,30 @@ static int menu_cbs_init_bind_title_compare_label(menu_file_list_cbs_t *cbs, return 0; } + if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_FAVORITES_LIST))) + { + BIND_ACTION_GET_TITLE(cbs, action_get_title_goto_favorites); + return 0; + } + + if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_IMAGES_LIST))) + { + BIND_ACTION_GET_TITLE(cbs, action_get_title_goto_image); + return 0; + } + + if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_MUSIC_LIST))) + { + BIND_ACTION_GET_TITLE(cbs, action_get_title_goto_music); + return 0; + } + + if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_VIDEO_LIST))) + { + BIND_ACTION_GET_TITLE(cbs, action_get_title_goto_video); + return 0; + } + if (cbs->enum_idx != MSG_UNKNOWN) { switch (cbs->enum_idx) From b8008d74e5dd10b0cb96c3cfc1d32dc53b037736 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 16 Aug 2017 18:47:29 +0200 Subject: [PATCH 019/137] Get rid of some hash labels --- menu/cbs/menu_cbs_deferred_push.c | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/menu/cbs/menu_cbs_deferred_push.c b/menu/cbs/menu_cbs_deferred_push.c index 5a7a1c2dbd..ea125568e0 100644 --- a/menu/cbs/menu_cbs_deferred_push.c +++ b/menu/cbs/menu_cbs_deferred_push.c @@ -1141,6 +1141,18 @@ static int menu_cbs_init_bind_deferred_push_compare_label( { BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_netplay_sublist); } + else if (strstr(label, + msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_INPUT_SETTINGS_LIST))) + { + BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_input_settings_list); + } +#ifdef HAVE_NETWORKING + else if (strstr(label, + msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_CORE_UPDATER_LIST))) + { + BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_updater_list); + } +#endif else { if (cbs->enum_idx != MSG_UNKNOWN) @@ -1156,9 +1168,6 @@ static int menu_cbs_init_bind_deferred_push_compare_label( case MENU_ENUM_LABEL_DEFERRED_ACCOUNTS_LIST: BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_accounts_list); break; - case MENU_ENUM_LABEL_DEFERRED_INPUT_SETTINGS_LIST: - BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_input_settings_list); - break; case MENU_ENUM_LABEL_DEFERRED_PLAYLIST_SETTINGS_LIST: BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_playlist_settings_list); break; @@ -1196,11 +1205,6 @@ static int menu_cbs_init_bind_deferred_push_compare_label( case MENU_ENUM_LABEL_DEFERRED_CORE_CONTENT_DIRS_SUBDIR_LIST: #ifdef HAVE_NETWORKING BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_content_dirs_subdir_list); -#endif - break; - case MENU_ENUM_LABEL_DEFERRED_CORE_UPDATER_LIST: -#ifdef HAVE_NETWORKING - BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_updater_list); #endif break; case MENU_ENUM_LABEL_DEFERRED_THUMBNAILS_UPDATER_LIST: @@ -1464,9 +1468,6 @@ static int menu_cbs_init_bind_deferred_push_compare_label( case MENU_LABEL_DEFERRED_AUDIO_SETTINGS_LIST: BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_audio_settings_list); break; - case MENU_LABEL_DEFERRED_INPUT_SETTINGS_LIST: - BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_input_settings_list); - break; case MENU_LABEL_DEFERRED_PLAYLIST_SETTINGS_LIST: BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_playlist_settings_list); break; @@ -1494,11 +1495,6 @@ static int menu_cbs_init_bind_deferred_push_compare_label( case MENU_LABEL_DEFERRED_CORE_CONTENT_LIST: #ifdef HAVE_NETWORKING BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_content_list); -#endif - break; - case MENU_LABEL_DEFERRED_CORE_UPDATER_LIST: -#ifdef HAVE_NETWORKING - BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_updater_list); #endif break; case MENU_LABEL_DEFERRED_THUMBNAILS_UPDATER_LIST: From d1f0f19824a056acae93c4ebea0dcf9140157e95 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 16 Aug 2017 18:51:44 +0200 Subject: [PATCH 020/137] (menu_cbs_label.c) Cut down on code duplication --- menu/cbs/menu_cbs_label.c | 57 +++++++-------------------------------- 1 file changed, 10 insertions(+), 47 deletions(-) diff --git a/menu/cbs/menu_cbs_label.c b/menu/cbs/menu_cbs_label.c index 5544e21ea7..c632da71e3 100644 --- a/menu/cbs/menu_cbs_label.c +++ b/menu/cbs/menu_cbs_label.c @@ -35,55 +35,18 @@ static int action_bind_label_generic( return 0; } -static int action_bind_label_information( - file_list_t *list, - unsigned type, unsigned i, - const char *label, const char *path, - char *s, size_t len) -{ - strlcpy(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_INFORMATION), len); - return 0; +#define fill_label_macro(func, lbl) \ +static int (func)(file_list_t *list, unsigned type, unsigned i, const char *label, const char *path, char *s, size_t len) \ +{ \ + strlcpy(s, msg_hash_to_str(lbl), len); \ + return 0; \ } -static int action_bind_label_internal_memory( - file_list_t *list, - unsigned type, unsigned i, - const char *label, const char *path, - char *s, size_t len) -{ - strlcpy(s, msg_hash_to_str(MSG_INTERNAL_STORAGE), len); - return 0; -} - -static int action_bind_label_removable_storage( - file_list_t *list, - unsigned type, unsigned i, - const char *label, const char *path, - char *s, size_t len) -{ - strlcpy(s, msg_hash_to_str(MSG_REMOVABLE_STORAGE), len); - return 0; -} - -static int action_bind_label_external_application_dir( - file_list_t *list, - unsigned type, unsigned i, - const char *label, const char *path, - char *s, size_t len) -{ - strlcpy(s, msg_hash_to_str(MSG_EXTERNAL_APPLICATION_DIR), len); - return 0; -} - -static int action_bind_label_application_dir( - file_list_t *list, - unsigned type, unsigned i, - const char *label, const char *path, - char *s, size_t len) -{ - strlcpy(s, msg_hash_to_str(MSG_APPLICATION_DIR), len); - return 0; -} +fill_label_macro(action_bind_label_information, MENU_ENUM_LABEL_VALUE_INFORMATION) +fill_label_macro(action_bind_label_internal_memory, MSG_INTERNAL_STORAGE) +fill_label_macro(action_bind_label_removable_storage, MSG_REMOVABLE_STORAGE) +fill_label_macro(action_bind_label_external_application_dir, MSG_EXTERNAL_APPLICATION_DIR) +fill_label_macro(action_bind_label_application_dir, MSG_APPLICATION_DIR) static int action_bind_label_playlist_collection_entry( file_list_t *list, From 887364062a857c9052d7ce8a2616dcb67ba5f001 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 16 Aug 2017 19:00:15 +0200 Subject: [PATCH 021/137] Get rid of more hash labels --- menu/cbs/menu_cbs_scan.c | 7 ++- menu/cbs/menu_cbs_title.c | 106 ++++++++++++++------------------------ 2 files changed, 41 insertions(+), 72 deletions(-) diff --git a/menu/cbs/menu_cbs_scan.c b/menu/cbs/menu_cbs_scan.c index 244dcc7394..e2625c7bd7 100644 --- a/menu/cbs/menu_cbs_scan.c +++ b/menu/cbs/menu_cbs_scan.c @@ -59,7 +59,8 @@ int action_scan_file(const char *path, menu_entries_get_last_stack(&menu_path, &menu_label, NULL, &enum_idx, NULL); - fill_pathname_join(fullpath, menu_path, path, sizeof(fullpath)); + if (path) + fill_pathname_join(fullpath, menu_path, path, sizeof(fullpath)); task_push_dbscan( settings->paths.directory_playlist, @@ -82,10 +83,8 @@ int action_scan_directory(const char *path, menu_entries_get_last_stack(&menu_path, &menu_label, NULL, &enum_idx, NULL); - strlcpy(fullpath, menu_path, sizeof(fullpath)); - if (path) - fill_pathname_join(fullpath, fullpath, path, sizeof(fullpath)); + fill_pathname_join(fullpath, menu_path, path, sizeof(fullpath)); task_push_dbscan( settings->paths.directory_playlist, diff --git a/menu/cbs/menu_cbs_title.c b/menu/cbs/menu_cbs_title.c index 04e398634a..d4f02f82a1 100644 --- a/menu/cbs/menu_cbs_title.c +++ b/menu/cbs/menu_cbs_title.c @@ -328,170 +328,152 @@ static int menu_cbs_init_bind_title_compare_label(menu_file_list_cbs_t *cbs, BIND_ACTION_GET_TITLE(cbs, action_get_core_settings_list); return 0; } - - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_CONFIGURATION_SETTINGS_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_CONFIGURATION_SETTINGS_LIST))) { BIND_ACTION_GET_TITLE(cbs, action_get_configuration_settings_list); return 0; } - - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_SAVING_SETTINGS_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_SAVING_SETTINGS_LIST))) { BIND_ACTION_GET_TITLE(cbs, action_get_saving_settings_list); return 0; } - - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_LOGGING_SETTINGS_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_LOGGING_SETTINGS_LIST))) { BIND_ACTION_GET_TITLE(cbs, action_get_logging_settings_list); return 0; } - - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_FRAME_THROTTLE_SETTINGS_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_FRAME_THROTTLE_SETTINGS_LIST))) { BIND_ACTION_GET_TITLE(cbs, action_get_frame_throttle_settings_list); return 0; } - - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_REWIND_SETTINGS_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_REWIND_SETTINGS_LIST))) { BIND_ACTION_GET_TITLE(cbs, action_get_rewind_settings_list); return 0; } - - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_ONSCREEN_DISPLAY_SETTINGS_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_ONSCREEN_DISPLAY_SETTINGS_LIST))) { BIND_ACTION_GET_TITLE(cbs, action_get_onscreen_display_settings_list); return 0; } - - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_ONSCREEN_NOTIFICATIONS_SETTINGS_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_ONSCREEN_NOTIFICATIONS_SETTINGS_LIST))) { BIND_ACTION_GET_TITLE(cbs, action_get_onscreen_notifications_settings_list); return 0; } - - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_ONSCREEN_OVERLAY_SETTINGS_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_ONSCREEN_OVERLAY_SETTINGS_LIST))) { BIND_ACTION_GET_TITLE(cbs, action_get_onscreen_overlay_settings_list); return 0; } - - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_MENU_VIEWS_SETTINGS_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_MENU_VIEWS_SETTINGS_LIST))) { BIND_ACTION_GET_TITLE(cbs, action_get_menu_views_settings_list); return 0; } - - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_MENU_SETTINGS_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_MENU_SETTINGS_LIST))) { BIND_ACTION_GET_TITLE(cbs, action_get_menu_settings_list); return 0; } - - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_USER_INTERFACE_SETTINGS_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_USER_INTERFACE_SETTINGS_LIST))) { BIND_ACTION_GET_TITLE(cbs, action_get_user_interface_settings_list); return 0; } - - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_MENU_FILE_BROWSER_SETTINGS_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_MENU_FILE_BROWSER_SETTINGS_LIST))) { BIND_ACTION_GET_TITLE(cbs, action_get_menu_file_browser_settings_list); return 0; } - - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_RETRO_ACHIEVEMENTS_SETTINGS_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_RETRO_ACHIEVEMENTS_SETTINGS_LIST))) { BIND_ACTION_GET_TITLE(cbs, action_get_retro_achievements_settings_list); return 0; } - - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_WIFI_SETTINGS_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_WIFI_SETTINGS_LIST))) { BIND_ACTION_GET_TITLE(cbs, action_get_wifi_settings_list); return 0; } - - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_UPDATER_SETTINGS_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_UPDATER_SETTINGS_LIST))) { BIND_ACTION_GET_TITLE(cbs, action_get_updater_settings_list); return 0; } - - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_NETWORK_SETTINGS_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_NETWORK_SETTINGS_LIST))) { BIND_ACTION_GET_TITLE(cbs, action_get_network_settings_list); return 0; } - - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_NETPLAY_LAN_SCAN_SETTINGS_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_NETPLAY_LAN_SCAN_SETTINGS_LIST))) { BIND_ACTION_GET_TITLE(cbs, action_get_netplay_lan_scan_settings_list); return 0; } - - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_LAKKA_SERVICES_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_LAKKA_SERVICES_LIST))) { BIND_ACTION_GET_TITLE(cbs, action_get_lakka_services_list); return 0; } - - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_USER_SETTINGS_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_USER_SETTINGS_LIST))) { BIND_ACTION_GET_TITLE(cbs, action_get_user_settings_list); return 0; } - - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_DIRECTORY_SETTINGS_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_DIRECTORY_SETTINGS_LIST))) { BIND_ACTION_GET_TITLE(cbs, action_get_directory_settings_list); return 0; } - - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_PRIVACY_SETTINGS_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_PRIVACY_SETTINGS_LIST))) { BIND_ACTION_GET_TITLE(cbs, action_get_privacy_settings_list); return 0; } - - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_CORE_CONTENT_DIRS_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_CORE_CONTENT_DIRS_LIST))) { BIND_ACTION_GET_TITLE(cbs, action_get_download_core_content_list); return 0; } - - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_CORE_CONTENT_DIRS_SUBDIR_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_CORE_CONTENT_DIRS_SUBDIR_LIST))) { BIND_ACTION_GET_TITLE(cbs, action_get_download_core_content_list); return 0; } - - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_FAVORITES_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_FAVORITES_LIST))) { BIND_ACTION_GET_TITLE(cbs, action_get_title_goto_favorites); return 0; } - - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_IMAGES_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_IMAGES_LIST))) { BIND_ACTION_GET_TITLE(cbs, action_get_title_goto_image); return 0; } - - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_MUSIC_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_MUSIC_LIST))) { BIND_ACTION_GET_TITLE(cbs, action_get_title_goto_music); return 0; } - - if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_VIDEO_LIST))) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_VIDEO_LIST))) { BIND_ACTION_GET_TITLE(cbs, action_get_title_goto_video); return 0; } - - if (cbs->enum_idx != MSG_UNKNOWN) + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_DRIVER_SETTINGS_LIST))) + { + BIND_ACTION_GET_TITLE(cbs, action_get_driver_settings_list); + return 0; + } + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_AUDIO_SETTINGS_LIST))) + { + BIND_ACTION_GET_TITLE(cbs, action_get_audio_settings_list); + return 0; + } + else if (cbs->enum_idx != MSG_UNKNOWN) { switch (cbs->enum_idx) { @@ -702,9 +684,6 @@ static int menu_cbs_init_bind_title_compare_label(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_DEFERRED_INPUT_HOTKEY_BINDS_LIST: BIND_ACTION_GET_TITLE(cbs, action_get_input_hotkey_binds_settings_list); break; - case MENU_ENUM_LABEL_DEFERRED_DRIVER_SETTINGS_LIST: - BIND_ACTION_GET_TITLE(cbs, action_get_driver_settings_list); - break; case MENU_ENUM_LABEL_DEFERRED_VIDEO_SETTINGS_LIST: BIND_ACTION_GET_TITLE(cbs, action_get_video_settings_list); break; @@ -732,9 +711,6 @@ static int menu_cbs_init_bind_title_compare_label(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_DEFERRED_CORE_SETTINGS_LIST: BIND_ACTION_GET_TITLE(cbs, action_get_core_settings_list); break; - case MENU_ENUM_LABEL_DEFERRED_AUDIO_SETTINGS_LIST: - BIND_ACTION_GET_TITLE(cbs, action_get_audio_settings_list); - break; case MENU_ENUM_LABEL_DEFERRED_INPUT_SETTINGS_LIST: BIND_ACTION_GET_TITLE(cbs, action_get_input_settings_list); break; @@ -1015,15 +991,9 @@ static int menu_cbs_init_bind_title_compare_label(menu_file_list_cbs_t *cbs, case MENU_LABEL_DEFERRED_INPUT_HOTKEY_BINDS_LIST: BIND_ACTION_GET_TITLE(cbs, action_get_input_hotkey_binds_settings_list); break; - case MENU_LABEL_DEFERRED_DRIVER_SETTINGS_LIST: - BIND_ACTION_GET_TITLE(cbs, action_get_driver_settings_list); - break; case MENU_LABEL_DEFERRED_VIDEO_SETTINGS_LIST: BIND_ACTION_GET_TITLE(cbs, action_get_video_settings_list); break; - case MENU_LABEL_DEFERRED_AUDIO_SETTINGS_LIST: - BIND_ACTION_GET_TITLE(cbs, action_get_audio_settings_list); - break; case MENU_LABEL_DEFERRED_INPUT_SETTINGS_LIST: BIND_ACTION_GET_TITLE(cbs, action_get_input_settings_list); break; From a243278f536e55a1fc88ae47b0c43fb12808768e Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 16 Aug 2017 19:06:14 +0200 Subject: [PATCH 022/137] Get rid of more hash labels --- menu/cbs/menu_cbs_ok.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/menu/cbs/menu_cbs_ok.c b/menu/cbs/menu_cbs_ok.c index 8266ddf08b..463f7cd69f 100644 --- a/menu/cbs/menu_cbs_ok.c +++ b/menu/cbs/menu_cbs_ok.c @@ -4573,9 +4573,6 @@ static int menu_cbs_init_bind_ok_compare_label(menu_file_list_cbs_t *cbs, case MENU_LABEL_LOAD_ARCHIVE: BIND_ACTION_OK(cbs, action_ok_load_archive); break; - case MENU_LABEL_CUSTOM_BIND_ALL: - BIND_ACTION_OK(cbs, action_ok_lookup_setting); - break; case MENU_LABEL_VIDEO_SHADER_PASS: BIND_ACTION_OK(cbs, action_ok_shader_pass); break; From d0e24b02b4ab0fc9625d55730f0aa996c7a6b57f Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 16 Aug 2017 19:10:07 +0200 Subject: [PATCH 023/137] Update --- menu/cbs/menu_cbs_title.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/menu/cbs/menu_cbs_title.c b/menu/cbs/menu_cbs_title.c index d4f02f82a1..0930db8e2b 100644 --- a/menu/cbs/menu_cbs_title.c +++ b/menu/cbs/menu_cbs_title.c @@ -473,6 +473,16 @@ static int menu_cbs_init_bind_title_compare_label(menu_file_list_cbs_t *cbs, BIND_ACTION_GET_TITLE(cbs, action_get_audio_settings_list); return 0; } + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_SYSTEM_INFORMATION))) + { + BIND_ACTION_GET_TITLE(cbs, action_get_system_information_list); + return 0; + } + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_NETWORK_INFORMATION))) + { + BIND_ACTION_GET_TITLE(cbs, action_get_network_information_list); + return 0; + } else if (cbs->enum_idx != MSG_UNKNOWN) { switch (cbs->enum_idx) @@ -612,12 +622,6 @@ static int menu_cbs_init_bind_title_compare_label(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_DATABASE_MANAGER_LIST: BIND_ACTION_GET_TITLE(cbs, action_get_database_manager_list); break; - case MENU_ENUM_LABEL_SYSTEM_INFORMATION: - BIND_ACTION_GET_TITLE(cbs, action_get_system_information_list); - break; - case MENU_ENUM_LABEL_NETWORK_INFORMATION: - BIND_ACTION_GET_TITLE(cbs, action_get_network_information_list); - break; case MENU_ENUM_LABEL_CURSOR_MANAGER_LIST: BIND_ACTION_GET_TITLE(cbs, action_get_cursor_manager_list); break; @@ -919,12 +923,6 @@ static int menu_cbs_init_bind_title_compare_label(menu_file_list_cbs_t *cbs, case MENU_LABEL_DATABASE_MANAGER_LIST: BIND_ACTION_GET_TITLE(cbs, action_get_database_manager_list); break; - case MENU_LABEL_SYSTEM_INFORMATION: - BIND_ACTION_GET_TITLE(cbs, action_get_system_information_list); - break; - case MENU_LABEL_NETWORK_INFORMATION: - BIND_ACTION_GET_TITLE(cbs, action_get_network_information_list); - break; case MENU_LABEL_CURSOR_MANAGER_LIST: BIND_ACTION_GET_TITLE(cbs, action_get_cursor_manager_list); break; From 8acd734be2158a6d44e1ed21ba45af8b8d64762a Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 16 Aug 2017 19:20:24 +0200 Subject: [PATCH 024/137] Remove some hash labels --- menu/cbs/menu_cbs_deferred_push.c | 46 +++++++++++++++++-------------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/menu/cbs/menu_cbs_deferred_push.c b/menu/cbs/menu_cbs_deferred_push.c index ea125568e0..82243a95b8 100644 --- a/menu/cbs/menu_cbs_deferred_push.c +++ b/menu/cbs/menu_cbs_deferred_push.c @@ -1153,6 +1153,31 @@ static int menu_cbs_init_bind_deferred_push_compare_label( BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_updater_list); } #endif + else if (strstr(label, + msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_DRIVER_SETTINGS_LIST))) + { + BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_driver_settings_list); + } + else if (strstr(label, + msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_VIDEO_SETTINGS_LIST))) + { + BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_video_settings_list); + } + else if (strstr(label, + msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_AUDIO_SETTINGS_LIST))) + { + BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_audio_settings_list); + } + else if (strstr(label, + msg_hash_to_str(MENU_ENUM_LABEL_CORE_INFORMATION))) + { + BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_information); + } + else if (strstr(label, + msg_hash_to_str(MENU_ENUM_LABEL_SYSTEM_INFORMATION))) + { + BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_system_information); + } else { if (cbs->enum_idx != MSG_UNKNOWN) @@ -1333,12 +1358,6 @@ static int menu_cbs_init_bind_deferred_push_compare_label( BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_cursor_manager_list_deferred_query_rdb_entry_releaseyear); break; #endif - case MENU_ENUM_LABEL_CORE_INFORMATION: - BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_information); - break; - case MENU_ENUM_LABEL_SYSTEM_INFORMATION: - BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_system_information); - break; case MENU_ENUM_LABEL_NETWORK_INFORMATION: BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_network_information); break; @@ -1459,15 +1478,6 @@ static int menu_cbs_init_bind_deferred_push_compare_label( case MENU_LABEL_DEFERRED_ACCOUNTS_LIST: BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_accounts_list); break; - case MENU_LABEL_DEFERRED_DRIVER_SETTINGS_LIST: - BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_driver_settings_list); - break; - case MENU_LABEL_DEFERRED_VIDEO_SETTINGS_LIST: - BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_video_settings_list); - break; - case MENU_LABEL_DEFERRED_AUDIO_SETTINGS_LIST: - BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_audio_settings_list); - break; case MENU_LABEL_DEFERRED_PLAYLIST_SETTINGS_LIST: BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_playlist_settings_list); break; @@ -1617,12 +1627,6 @@ static int menu_cbs_init_bind_deferred_push_compare_label( BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_cursor_manager_list_deferred_query_rdb_entry_releaseyear); break; #endif - case MENU_LABEL_CORE_INFORMATION: - BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_information); - break; - case MENU_LABEL_SYSTEM_INFORMATION: - BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_system_information); - break; case MENU_LABEL_NETWORK_INFORMATION: BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_network_information); break; From e743875de26a156d087db4990204c642ded71359 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 16 Aug 2017 22:30:15 +0200 Subject: [PATCH 025/137] Enable 'Show Physical Inputs' --- config.def.h | 2 ++ menu/menu_setting.c | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/config.def.h b/config.def.h index dd2fabe798..2048ebf331 100644 --- a/config.def.h +++ b/config.def.h @@ -316,6 +316,8 @@ static unsigned input_backtouch_enable = false; static unsigned input_backtouch_toggle = false; #endif +static bool show_physical_inputs = true; + static bool all_users_control_menu = false; #if defined(ANDROID) || defined(_WIN32) diff --git a/menu/menu_setting.c b/menu/menu_setting.c index b5718e2df2..4bdc55bee6 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -4885,7 +4885,7 @@ static bool setting_append_list( &settings->bools.input_overlay_show_physical_inputs, MENU_ENUM_LABEL_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS, MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS, - false, + show_physical_inputs, MENU_ENUM_LABEL_VALUE_OFF, MENU_ENUM_LABEL_VALUE_ON, &group_info, From adc3b4b7265c89b2c5e803798e1bf00873b804fc Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 16 Aug 2017 22:43:42 +0200 Subject: [PATCH 026/137] Playlist file needs to be written to when we add an entry to Favorites --- command.c | 1 + 1 file changed, 1 insertion(+) diff --git a/command.c b/command.c index 5cafba1d2d..efa3ae8fc9 100644 --- a/command.c +++ b/command.c @@ -2194,6 +2194,7 @@ TODO: Add a setting for these tweaks */ NULL, NULL ); + playlist_write_file(g_defaults.content_favorites); break; case CMD_EVENT_RESTART_RETROARCH: if (!frontend_driver_set_fork(FRONTEND_FORK_RESTART)) From 47cf178309bbeca69a09558928cb684a3ae4ddb7 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 16 Aug 2017 23:59:15 +0200 Subject: [PATCH 027/137] Bump up version to 1.6.6 --- CHANGES.md | 4 ++++ Makefile.openpandora | 2 +- Makefile.ps3 | 2 +- Makefile.ps3.cobra | 2 +- Makefile.psl1ght | 2 +- pkg/android/phoenix/AndroidManifest.xml | 4 ++-- pkg/wii/meta.xml | 2 +- pkg/wiiu/meta.xml | 2 +- version.h | 2 +- 9 files changed, 13 insertions(+), 9 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 85631d81f9..0e92dec05e 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,6 +1,10 @@ +# 1.6.7 (future) + # 1.6.6 (future) - 3DS: Fixes serious performance regression that affected every core; rewind was always implicitly enabled. - AUDIO: MOD/S3M/XM sound should now be properly mixed in with the core's sound. +- GUI: Visual makeover of MaterialUI. +- GUI: Added 'Music', 'Images' and 'Video' collection options to RGUI/MaterialUI. - GUI: Allow the user to add 'Favorites'. - GUI: Allow the user to rename entries. - GUI: Performance optimizations for XMB menu driver. diff --git a/Makefile.openpandora b/Makefile.openpandora index 69018994c4..e05d8c0ef0 100644 --- a/Makefile.openpandora +++ b/Makefile.openpandora @@ -1,4 +1,4 @@ -RARCH_VERSION = "0.9.9.3" +RARCH_VERSION = "1.6.6.0" DEBUG = 0 diff --git a/Makefile.ps3 b/Makefile.ps3 index 2a106b97a2..32c5486a37 100644 --- a/Makefile.ps3 +++ b/Makefile.ps3 @@ -1,4 +1,4 @@ -RARCH_VERSION = "1.6.5.0" +RARCH_VERSION = "1.6.6.0" #which compiler to build with - GCC or SNC #set to GCC for debug builds for use with debugger diff --git a/Makefile.ps3.cobra b/Makefile.ps3.cobra index fee28a9adb..5ccb3db096 100644 --- a/Makefile.ps3.cobra +++ b/Makefile.ps3.cobra @@ -1,4 +1,4 @@ -RARCH_VERSION = "0.9.9.3" +RARCH_VERSION = "1.6.6.0" #which compiler to build with - GCC or SNC #set to GCC for debug builds for use with debugger diff --git a/Makefile.psl1ght b/Makefile.psl1ght index c0f1d611f1..276de7b0b2 100644 --- a/Makefile.psl1ght +++ b/Makefile.psl1ght @@ -1,4 +1,4 @@ -RARCH_VERSION = "1.6.5.0" +RARCH_VERSION = "1.6.6.0" DEBUG = 0 HAVE_LOGGER = 0 diff --git a/pkg/android/phoenix/AndroidManifest.xml b/pkg/android/phoenix/AndroidManifest.xml index f223ac789e..8cd45f13de 100644 --- a/pkg/android/phoenix/AndroidManifest.xml +++ b/pkg/android/phoenix/AndroidManifest.xml @@ -1,7 +1,7 @@ diff --git a/pkg/wii/meta.xml b/pkg/wii/meta.xml index 814c0f059a..fc83315eea 100644 --- a/pkg/wii/meta.xml +++ b/pkg/wii/meta.xml @@ -2,7 +2,7 @@ RetroArch Libretro - 1.6.5 + 1.6.6 2012-2017 The cross-platform entertainment system A port of RetroArch to the GameCube/Wii. diff --git a/pkg/wiiu/meta.xml b/pkg/wiiu/meta.xml index 39c72952e2..eb8146a38d 100644 --- a/pkg/wiiu/meta.xml +++ b/pkg/wiiu/meta.xml @@ -2,7 +2,7 @@ Retroarch Libretro - 1.65 + 1.66 20170108133000 RetroArch diff --git a/version.h b/version.h index 2beaab26a2..ab515ea960 100644 --- a/version.h +++ b/version.h @@ -18,7 +18,7 @@ #define RARCH_VERSION_H__ #ifndef PACKAGE_VERSION -#define PACKAGE_VERSION "1.6.5" +#define PACKAGE_VERSION "1.6.6" #endif #endif From 8dbafceebe9004f0e97601acf87217f91a72d604 Mon Sep 17 00:00:00 2001 From: theheroGAC Date: Thu, 17 Aug 2017 01:00:59 +0200 Subject: [PATCH 028/137] Missing strings added --- intl/msg_hash_it.h | 114 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 93 insertions(+), 21 deletions(-) diff --git a/intl/msg_hash_it.h b/intl/msg_hash_it.h index a2d3b780b6..9b512230e6 100644 --- a/intl/msg_hash_it.h +++ b/intl/msg_hash_it.h @@ -1101,7 +1101,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_REWIND_ENABLE, MSG_HASH(MENU_ENUM_LABEL_VALUE_REWIND_GRANULARITY, "Livello della funzione riavvolgi") MSG_HASH(MENU_ENUM_LABEL_VALUE_REWIND_SETTINGS, - "Riavvolgi") + "Impostazioni della funzione di riavvolgimento") MSG_HASH(MENU_ENUM_LABEL_VALUE_RGUI_BROWSER_DIRECTORY, "Directory di selezione file") MSG_HASH(MENU_ENUM_LABEL_VALUE_RGUI_CONFIG_DIRECTORY, @@ -1191,7 +1191,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_START_NET_RETROPAD, MSG_HASH(MENU_ENUM_LABEL_VALUE_START_VIDEO_PROCESSOR, "Avvia processore video") MSG_HASH(MENU_ENUM_LABEL_VALUE_STATE_SLOT, - "Slot di stato") + "Slot di salvataggio") MSG_HASH(MENU_ENUM_LABEL_VALUE_STATUS, "Stato") MSG_HASH(MENU_ENUM_LABEL_VALUE_STDIN_CMD_ENABLE, @@ -1399,7 +1399,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_LAKKA, MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_OVERLAYS, "Aggiorna Overlay") MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_SLANG_SHADERS, - "Update Slang Shaders") + "Aggiorna Slang Shaders") MSG_HASH(MENU_ENUM_LABEL_VALUE_USER, "Utente") MSG_HASH(MENU_ENUM_LABEL_VALUE_USER_INTERFACE_SETTINGS, @@ -1581,17 +1581,17 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SCALE_FACTOR, MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHADOWS_ENABLE, "Abilità ombre per l'icona") MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_HISTORY, - "Mostra scheda storia") + "Mostra colonna cronologia") MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_ADD, "Display Import content Tab") MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_IMAGES, - "Mostra scheda immagini") + "Mostra colonna immagini") MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_MUSIC, - "Mostra scheda musica") + "Mostra colonna musica") MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_SETTINGS, - "Mostra scheda settaggi") + "Mostra colonna impostazioni") MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_VIDEO, - "Mostra scheda video") + "Mostra colonna video") MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_THEME, "Icona a tema del menù") MSG_HASH(MENU_ENUM_LABEL_VALUE_YES, @@ -1763,9 +1763,9 @@ MSG_HASH(MSG_CRC32_CHECKSUM_MISMATCH, MSG_HASH(MSG_CUSTOM_TIMING_GIVEN, "Custom timing given") MSG_HASH(MSG_DECOMPRESSION_ALREADY_IN_PROGRESS, - "Decompression already in progress.") + "Decompressione già in corso.") MSG_HASH(MSG_DECOMPRESSION_FAILED, - "Decompression failed.") + "La decompressione non è riuscita.") MSG_HASH(MSG_DETECTED_VIEWPORT_OF, "Detected viewport of") MSG_HASH(MSG_DID_NOT_FIND_A_VALID_CONTENT_PATCH, @@ -1777,13 +1777,13 @@ MSG_HASH(MSG_DISK_CLOSED, MSG_HASH(MSG_DISK_EJECTED, "Espulso") MSG_HASH(MSG_DOWNLOADING, - "Scaricamento in corso") + "Scaricamento in corso del file") MSG_HASH(MSG_DOWNLOAD_FAILED, "Download fallito") MSG_HASH(MSG_ERROR, "Errore") MSG_HASH(MSG_ERROR_LIBRETRO_CORE_REQUIRES_CONTENT, - "Il core Libretro richiede contenuti, ma niente è stato fornito.") + "Il core Libretro richiede contenuti, ma nessun dato è stato fornito.") MSG_HASH(MSG_ERROR_LIBRETRO_CORE_REQUIRES_SPECIAL_CONTENT, "Libretro core requires special content, but none were provided.") MSG_HASH(MSG_ERROR_PARSING_ARGUMENTS, @@ -1799,7 +1799,7 @@ MSG_HASH(MSG_EXTERNAL_APPLICATION_DIR, MSG_HASH(MSG_EXTRACTING, "Estrazione") MSG_HASH(MSG_EXTRACTING_FILE, - "Extracting file") + "Estrazione del file in corso") MSG_HASH(MSG_FAILED_SAVING_CONFIG_TO, "Failed saving config to") MSG_HASH(MSG_FAILED_TO, @@ -2304,13 +2304,13 @@ MSG_HASH( MSG_HASH(MENU_ENUM_SUBLABEL_AUDIO_MIXER_MUTE, "Attiva/disattiva Mixer audio.") MSG_HASH(MENU_ENUM_LABEL_MENU_SHOW_ONLINE_UPDATER, - "Visualizza Online Updater") + "Visualizza Aggiorna Online") MSG_HASH(MENU_ENUM_SUBLABEL_MENU_SHOW_ONLINE_UPDATER, - "Visualizza/Nascondi l'opzione 'Online Updater'.") + "Visualizza/Nasconde l'opzione 'Aggiorna Online'.") MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_SHOW_CORE_UPDATER, - "Visualizza Core Updater") + "Visualizza Carica/Aggiorna Core") MSG_HASH(MENU_ENUM_SUBLABEL_MENU_SHOW_CORE_UPDATER, - "Visualizza/Nascondi l'abilità di aggiornare i core (e i file di informazione dei core).") + "Visualizza/Nasconde l'abilità di aggiornare/caricare i core (e i file di informazione dei core).") MSG_HASH(MENU_ENUM_SUBLABEL_CORE_LIST, "Seleziona quale core utilizzare.") MSG_HASH(MENU_ENUM_SUBLABEL_LOAD_CONTENT_LIST, @@ -2418,10 +2418,82 @@ MSG_HASH(MENU_ENUM_LABEL_PLAYLIST_ENTRY_RENAME, MSG_HASH(MENU_ENUM_LABEL_VALUE_ADD_TO_FAVORITES, "Aggiungi ai preferiti") MSG_HASH(MENU_ENUM_SUBLABEL_ADD_TO_FAVORITES, - "Aggiungere il titolo ai tuoi preferiti.") + "Aggiunge il titolo/gioco ai tuoi preferiti.") MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FRAMEBUFFER_OPACITY, - "Framebuffer Opacity") + "Opacità del Framebuffer") MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY, - "Modify the opacity of the framebuffer.") + "Modifica l'opacità del framebuffer.") MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES, - "Favorites") + "Preferiti") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_FAVORITES, + "Qui verrà visualizzato il contenuto che hai aggiunto a 'Preferiti'.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_MUSIC, + "Musica") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_MUSIC, + "Qui verrà visualizzata la musica che è stata eseguita in precedenza.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES, + "Immagini") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_IMAGES, + "Qui vengono visualizzate le immagini che sono stati precedentemente visualizzate.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO, + "Video") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_VIDEO, + "Qui vengono visualizzati i video precedentemente riprodotti.") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_WINDOW_WIDTH, + "Imposta la dimensione personalizzata della finestra di visualizzazione. Lasciando il valore a 0 tenterà di scalare la finestra il più grande possibile.") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_WINDOW_HEIGHT, + "Imposta le dimensioni dell'altezza personalizzata per la finestra del display. Lasciando il valore a 0 tenterà di scalare la finestra il più grande possibile.") +MSG_HASH(MENU_ENUM_SUBLABEL_SLOWMOTION_RATIO, + "Quando in slow motion, il contenuto rallenterà il fattore specificato / impostato.") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_GPU_RECORD, + "Registra l'output GPU del materiale ombreggiato se disponibile.") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_POST_FILTER_RECORD, + "Cattura l'immagine dopo che vengono applicati filtri (ma non shader). Il tuo video sarà simile a quello che vedi sul tuo schermo.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_VIEWS_SETTINGS, + "Visualizzazione") +MSG_HASH(MENU_ENUM_SUBLABEL_MENU_VIEWS_SETTINGS, + "Mostra o nasconde gli elementi nella schermata del menu.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_SHOW_ONLINE_UPDATER, + "Visualizza Aggiorna Online") +MSG_HASH(MENU_ENUM_SUBLABEL_XMB_SHOW_FAVORITES, + "Mostra la colonna preferiti all'interno del menu principale.") +MSG_HASH(MENU_ENUM_SUBLABEL_XMB_SHOW_IMAGES, + "Mostra la colonna immagini all'interno del menu principale.") +MSG_HASH(MENU_ENUM_SUBLABEL_XMB_SHOW_MUSIC, + "Mostra la colonna musica all'interno del menu principale.") +MSG_HASH(MENU_ENUM_SUBLABEL_XMB_SHOW_VIDEO, + "Mostra la colonna video all'interno del menu principale.") +MSG_HASH(MENU_ENUM_SUBLABEL_XMB_SHOW_NETPLAY, + "Mostra la colonna stanze netplay all'interno del menu principale..") +MSG_HASH(MENU_ENUM_SUBLABEL_XMB_SHOW_SETTINGS, + "Mostra la colonna impostazioni all'interno del menu principale.") +MSG_HASH(MENU_ENUM_SUBLABEL_XMB_SHOW_HISTORY, + "Mostra la cronologia all'interno del menu principale.") +MSG_HASH(MENU_ENUM_SUBLABEL_XMB_SHOW_ADD, + "Mostra la colonna scansione/aggiungi directory all'interno del menu principale.") +MSG_HASH(MENU_ENUM_SUBLABEL_ACCOUNTS_LIST, + "Gestisce gli account correntemente configurati.") +MSG_HASH(MENU_ENUM_SUBLABEL_NETPLAY_NICKNAME, + "Inserisci il tuo nome utente qui. Questo sarà utilizzato per le sessioni di netplay e per le altre cose.") +MSG_HASH(MENU_ENUM_SUBLABEL_CONTENT_SETTINGS, + "Accesso rapido a tutte le impostazioni in-game.") + MSG_HASH(MENU_ENUM_SUBLABEL_TAKE_SCREENSHOT, + "Cattura un'immagine dello schermo.") +MSG_HASH(MENU_ENUM_SUBLABEL_CLOSE_CONTENT, + "Chiude il contenuto corrente. Eventuali modifiche non salvate potrebbero essere perse.") +MSG_HASH(MENU_ENUM_SUBLABEL_LOAD_STATE, + "Carica un salvataggio dallo slot attualmente selezionato.") +MSG_HASH(MENU_ENUM_SUBLABEL_SAVE_STATE, + "Salva uno stato nello slot selezionato.") +MSG_HASH(MENU_ENUM_SUBLABEL_RESUME, + "Riprende il contenuto corrente e chiude il menu rapido.") +MSG_HASH(MENU_ENUM_SUBLABEL_RESUME_CONTENT, + "Riprende il contenuto corrente e chiude il menu rapido.") +MSG_HASH(MENU_ENUM_SUBLABEL_STATE_SLOT, + "Modifica lo slot di salvataggio selezionato.") +MSG_HASH(MENU_ENUM_SUBLABEL_CORE_INPUT_REMAPPING_OPTIONS, + "Modifica i controlli per il contenuto attualmente in esecuzione.") +MSG_HASH(MENU_ENUM_SUBLABEL_CORE_OPTIONS, + "Modifica le opzioni per il contenuto attualmente in esecuzione.") + MSG_HASH(MENU_ENUM_SUBLABEL_RESTART_CONTENT, + "Riavvia il contenuto dall'inizio.") From a79523789850e8f1b2ec717a1acea101fcf9004b Mon Sep 17 00:00:00 2001 From: twinaphex Date: Thu, 17 Aug 2017 01:03:30 +0200 Subject: [PATCH 029/137] Add some last-minute icons --- menu/drivers/materialui.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/menu/drivers/materialui.c b/menu/drivers/materialui.c index b2ed0d0630..3ea17adac3 100644 --- a/menu/drivers/materialui.c +++ b/menu/drivers/materialui.c @@ -2243,6 +2243,15 @@ static void mui_list_insert(void *userdata, switch (type) { + case FILE_TYPE_DOWNLOAD_CORE: + case FILE_TYPE_CORE: + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_CORES]; + node->texture_switch2_set = true; + break; + case FILE_TYPE_DOWNLOAD_THUMBNAIL_CONTENT: + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_IMAGE]; + node->texture_switch2_set = true; + break; case FILE_TYPE_PARENT_DIRECTORY: node->texture_switch2 = mui->textures.list[MUI_TEXTURE_PARENT_DIRECTORY]; node->texture_switch2_set = true; @@ -2262,6 +2271,7 @@ static void mui_list_insert(void *userdata, break; case FILE_TYPE_IN_CARCHIVE: case FILE_TYPE_PLAIN: + case FILE_TYPE_DOWNLOAD_CORE_CONTENT: node->texture_switch2 = mui->textures.list[MUI_TEXTURE_FILE]; node->texture_switch2_set = true; break; @@ -2274,6 +2284,7 @@ static void mui_list_insert(void *userdata, node->texture_switch2_set = true; break; case FILE_TYPE_DIRECTORY: + case FILE_TYPE_DOWNLOAD_URL: node->texture_switch2 = mui->textures.list[MUI_TEXTURE_FOLDER]; node->texture_switch2_set = true; break; From e56250c84f68476b30d2d51aaa22bdc9f51942e0 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Thu, 17 Aug 2017 01:41:30 +0200 Subject: [PATCH 030/137] C89_BUILD fix --- network/netplay/netplay_discovery.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/network/netplay/netplay_discovery.c b/network/netplay/netplay_discovery.c index 5c0e9160aa..e3ad842842 100644 --- a/network/netplay/netplay_discovery.c +++ b/network/netplay/netplay_discovery.c @@ -348,16 +348,19 @@ static bool netplay_lan_ad_client(void) /* And that we know how to handle it */ if (their_addr.sa_family == AF_INET) { + struct sockaddr_in *sin = NULL; + RARCH_WARN ("[lobby] using IPv4 for discovery\n"); - struct sockaddr_in *sin = (struct sockaddr_in *) &their_addr; + sin = (struct sockaddr_in *) &their_addr; sin->sin_port = htons(ntohl(ad_packet_buffer.port)); } #ifdef HAVE_INET6 else if (their_addr.sa_family == AF_INET6) { + struct sockaddr_in6 *sin6 = NULL; RARCH_WARN ("[lobby] using IPv6 for discovery\n"); - struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) &their_addr; + sin6 = (struct sockaddr_in6 *) &their_addr; sin6->sin6_port = htons(ad_packet_buffer.port); } From 4dcb151f034971e6fb96091dec554cb69e832ca5 Mon Sep 17 00:00:00 2001 From: ensra Date: Thu, 17 Aug 2017 01:06:18 +0100 Subject: [PATCH 031/137] Fix db build --- libretro-db/Makefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libretro-db/Makefile b/libretro-db/Makefile index 52db777aeb..49023b398f 100644 --- a/libretro-db/Makefile +++ b/libretro-db/Makefile @@ -24,6 +24,7 @@ C_CONVERTER_C = \ $(LIBRETRO_COMM_DIR)/hash/rhash.c \ $(LIBRETRO_COMM_DIR)/compat/compat_fnmatch.c \ $(LIBRETRO_COMM_DIR)/string/stdstring.c \ + $(LIBRETRO_COMM_DIR)/encodings/encoding_utf.c \ $(LIBRETRO_COMMON_C) \ $(LIBRETRO_COMM_DIR)/compat/compat_strl.c @@ -38,6 +39,7 @@ RARCHDB_TOOL_C = \ $(LIBRETRODB_DIR)/libretrodb.c \ $(LIBRETRO_COMM_DIR)/compat/compat_fnmatch.c \ $(LIBRETRO_COMM_DIR)/string/stdstring.c \ + $(LIBRETRO_COMM_DIR)/encodings/encoding_utf.c \ $(LIBRETRO_COMMON_C) \ $(LIBRETRO_COMM_DIR)/compat/compat_strl.c From 4af569fbcc44435a5b387132b6126329657cfc3a Mon Sep 17 00:00:00 2001 From: theheroGAC Date: Thu, 17 Aug 2017 10:18:13 +0200 Subject: [PATCH 032/137] Updated translation of some strings and tabs --- intl/msg_hash_it.h | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/intl/msg_hash_it.h b/intl/msg_hash_it.h index 9b512230e6..3033f45fe7 100644 --- a/intl/msg_hash_it.h +++ b/intl/msg_hash_it.h @@ -313,9 +313,9 @@ MSG_HASH( "Cheat File" ) MSG_HASH(MENU_ENUM_LABEL_VALUE_CHEAT_FILE_LOAD, - "Carica i trucchi") + "Carica cheat/trucchi") MSG_HASH(MENU_ENUM_LABEL_VALUE_CHEAT_FILE_SAVE_AS, - "Salva i trucchi come") + "Salva cheat/trucchi") MSG_HASH(MENU_ENUM_LABEL_VALUE_CHEAT_NUM_PASSES, "Trucchi usati") MSG_HASH( @@ -1101,7 +1101,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_REWIND_ENABLE, MSG_HASH(MENU_ENUM_LABEL_VALUE_REWIND_GRANULARITY, "Livello della funzione riavvolgi") MSG_HASH(MENU_ENUM_LABEL_VALUE_REWIND_SETTINGS, - "Impostazioni della funzione di riavvolgimento") + "Riavvolgimento") MSG_HASH(MENU_ENUM_LABEL_VALUE_RGUI_BROWSER_DIRECTORY, "Directory di selezione file") MSG_HASH(MENU_ENUM_LABEL_VALUE_RGUI_CONFIG_DIRECTORY, @@ -1156,6 +1156,8 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_SETTINGS, "Settaggi") MSG_HASH(MENU_ENUM_LABEL_VALUE_SETTINGS_TAB, "Impostazioni") +MSG_HASH(MENU_ENUM_LABEL_VALUE_FAVORITES_TAB, + "Preferiti") MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER, "Shader") MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_APPLY_CHANGES, @@ -1703,9 +1705,9 @@ MSG_HASH(MSG_APPENDED_DISK, MSG_HASH(MSG_APPLICATION_DIR, "Directory app") MSG_HASH(MSG_APPLYING_CHEAT, - "Applying cheat changes.") + "Applicazione dei trucchi/cheat in corso") MSG_HASH(MSG_APPLYING_SHADER, - "Applying shader") + "Applicazione dello shader in corso") MSG_HASH(MSG_AUDIO_MUTED, "MUTO.") MSG_HASH(MSG_AUDIO_UNMUTED, @@ -2495,5 +2497,22 @@ MSG_HASH(MENU_ENUM_SUBLABEL_CORE_INPUT_REMAPPING_OPTIONS, "Modifica i controlli per il contenuto attualmente in esecuzione.") MSG_HASH(MENU_ENUM_SUBLABEL_CORE_OPTIONS, "Modifica le opzioni per il contenuto attualmente in esecuzione.") - MSG_HASH(MENU_ENUM_SUBLABEL_RESTART_CONTENT, +MSG_HASH(MENU_ENUM_SUBLABEL_RESTART_CONTENT, "Riavvia il contenuto dall'inizio.") +MSG_HASH(MENU_ENUM_SUBLABEL_UNDO_LOAD_STATE, + "Se viene caricato un salvataggio, il contenuto tornerà allo stato prima del caricamento.") +MSG_HASH(MENU_ENUM_SUBLABEL_UNDO_SAVE_STATE, + "Se un salvataggio è stato sovrascritto, si ritorna allo stato del salvataggio precedente.") +MSG_HASH(MENU_ENUM_SUBLABEL_CORE_CHEAT_OPTIONS, + "Imposta i trucchi/cheat.") +MSG_HASH(MENU_ENUM_SUBLABEL_CHEAT_APPLY_CHANGES, + "Le modifiche dei trucchi/cheat avranno effetto immediato.") +MSG_HASH(MENU_ENUM_SUBLABEL_CHEAT_FILE_LOAD, + "Carica un file dei trucchi/cheat.") +MSG_HASH(MENU_ENUM_SUBLABEL_CHEAT_FILE_SAVE_AS, + "Salva i trucchi correnti come file di salvataggio.") +MSG_HASH(MENU_ENUM_SUBLABEL_CHEAT_NUM_PASSES, + "Aumenta o diminuisce la quantità di trucchi/cheat." +MSG_HASH(MENU_ENUM_SUBLABEL_SHADER_OPTIONS, + "Imposta gli shader per aumentare visivamente l'immagine.") + From 04b8f0584e0d25942b0f7ca9a3b1d21895a36df8 Mon Sep 17 00:00:00 2001 From: theheroGAC Date: Thu, 17 Aug 2017 10:55:20 +0200 Subject: [PATCH 033/137] Update msg_hash_it.h --- intl/msg_hash_it.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/intl/msg_hash_it.h b/intl/msg_hash_it.h index 3033f45fe7..ae36c8a8f5 100644 --- a/intl/msg_hash_it.h +++ b/intl/msg_hash_it.h @@ -2512,7 +2512,7 @@ MSG_HASH(MENU_ENUM_SUBLABEL_CHEAT_FILE_LOAD, MSG_HASH(MENU_ENUM_SUBLABEL_CHEAT_FILE_SAVE_AS, "Salva i trucchi correnti come file di salvataggio.") MSG_HASH(MENU_ENUM_SUBLABEL_CHEAT_NUM_PASSES, - "Aumenta o diminuisce la quantità di trucchi/cheat." + "Aumenta o diminuisce la quantità di trucchi/cheat.") MSG_HASH(MENU_ENUM_SUBLABEL_SHADER_OPTIONS, "Imposta gli shader per aumentare visivamente l'immagine.") From 33a2d58891b21ecf5758e4d16ecbfb56a238e28f Mon Sep 17 00:00:00 2001 From: twinaphex Date: Thu, 17 Aug 2017 18:16:33 +0200 Subject: [PATCH 034/137] Fix 'Scan Directory' --- menu/cbs/menu_cbs_scan.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/menu/cbs/menu_cbs_scan.c b/menu/cbs/menu_cbs_scan.c index e2625c7bd7..244dcc7394 100644 --- a/menu/cbs/menu_cbs_scan.c +++ b/menu/cbs/menu_cbs_scan.c @@ -59,8 +59,7 @@ int action_scan_file(const char *path, menu_entries_get_last_stack(&menu_path, &menu_label, NULL, &enum_idx, NULL); - if (path) - fill_pathname_join(fullpath, menu_path, path, sizeof(fullpath)); + fill_pathname_join(fullpath, menu_path, path, sizeof(fullpath)); task_push_dbscan( settings->paths.directory_playlist, @@ -83,8 +82,10 @@ int action_scan_directory(const char *path, menu_entries_get_last_stack(&menu_path, &menu_label, NULL, &enum_idx, NULL); + strlcpy(fullpath, menu_path, sizeof(fullpath)); + if (path) - fill_pathname_join(fullpath, menu_path, path, sizeof(fullpath)); + fill_pathname_join(fullpath, fullpath, path, sizeof(fullpath)); task_push_dbscan( settings->paths.directory_playlist, From 5909d72a0902bab9d62bb31474fec04d768a3589 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Thu, 17 Aug 2017 18:53:55 +0200 Subject: [PATCH 035/137] Fix 'Scan File' --- menu/cbs/menu_cbs_ok.c | 57 +++++++++++++++++---------------- menu/widgets/menu_filebrowser.h | 1 + 2 files changed, 31 insertions(+), 27 deletions(-) diff --git a/menu/cbs/menu_cbs_ok.c b/menu/cbs/menu_cbs_ok.c index 463f7cd69f..95406f28c9 100644 --- a/menu/cbs/menu_cbs_ok.c +++ b/menu/cbs/menu_cbs_ok.c @@ -979,8 +979,10 @@ static bool menu_content_find_first_core(menu_content_ctx_defer_info_t *def_info core_info_get_current_core((core_info_t**)&info); if (info) { +#if 0 RARCH_LOG("[lobby] use the current core (%s) to load this content...\n", info->path); +#endif supported = 1; } } @@ -2125,7 +2127,6 @@ static int generic_action_ok_remap_file_operation(const char *path, } else { - RARCH_LOG("removing %s", file); if(input_remapping_remove_file(file)) { if (action_type == ACTION_OK_REMAP_FILE_REMOVE_CORE) @@ -3326,10 +3327,12 @@ static int action_ok_netplay_connect_room(const char *path, netplay_room_list[idx - 3].port); } +#if 0 RARCH_LOG("[lobby] connecting to: %s with game: %s/%08x\n", tmp_hostname, netplay_room_list[idx - 3].gamename, netplay_room_list[idx - 3].gamecrc); +#endif task_push_netplay_crc_scan(netplay_room_list[idx - 3].gamecrc, netplay_room_list[idx - 3].gamename, @@ -3406,8 +3409,11 @@ static int action_ok_push_content_list(const char *path, static int action_ok_push_scan_file(const char *path, const char *label, unsigned type, size_t idx, size_t entry_idx) { - filebrowser_clear_type(); - return action_ok_push_content_list(path, label, type, idx, entry_idx); + settings_t *settings = config_get_ptr(); + filebrowser_set_type(FILEBROWSER_SCAN_FILE); + return generic_action_ok_displaylist_push(path, + settings->paths.directory_menu_content, label, type, idx, + entry_idx, ACTION_OK_DL_CONTENT_LIST); } #ifdef HAVE_NETWORKING @@ -3463,8 +3469,6 @@ void netplay_refresh_rooms_menu(file_list_t *list) if (netplay_room_count != 0) { - RARCH_LOG ("[lobby] found %d rooms...\n", netplay_room_count); - for (i = 0; i < netplay_room_count; i++) { char country[PATH_MAX_LENGTH] = {0}; @@ -3545,7 +3549,6 @@ static void netplay_refresh_rooms_cb(void *task_data, void *user_data, const cha if (string_is_empty(data->data)) { netplay_room_count = 0; - RARCH_LOG("[lobby] room list empty\n"); } else { @@ -4743,19 +4746,23 @@ static int menu_cbs_init_bind_ok_compare_type(menu_file_list_cbs_t *cbs, BIND_ACTION_OK(cbs, action_ok_directory_push); break; case FILE_TYPE_CARCHIVE: - switch (menu_label_hash) + if (filebrowser_get_type() == FILEBROWSER_SCAN_FILE) { - case MENU_LABEL_FAVORITES: - BIND_ACTION_OK(cbs, action_ok_compressed_archive_push_detect_core); - break; - case MENU_LABEL_SCAN_FILE: #ifdef HAVE_LIBRETRODB - BIND_ACTION_OK(cbs, action_ok_scan_file); + BIND_ACTION_OK(cbs, action_ok_scan_file); #endif - break; - default: - BIND_ACTION_OK(cbs, action_ok_compressed_archive_push); - break; + } + else + { + switch (menu_label_hash) + { + case MENU_LABEL_FAVORITES: + BIND_ACTION_OK(cbs, action_ok_compressed_archive_push_detect_core); + break; + default: + BIND_ACTION_OK(cbs, action_ok_compressed_archive_push); + break; + } } break; case FILE_TYPE_CORE: @@ -4853,15 +4860,16 @@ static int menu_cbs_init_bind_ok_compare_type(menu_file_list_cbs_t *cbs, break; case FILE_TYPE_IN_CARCHIVE: case FILE_TYPE_PLAIN: - if (cbs->enum_idx != MSG_UNKNOWN) + if (filebrowser_get_type() == FILEBROWSER_SCAN_FILE) + { +#ifdef HAVE_LIBRETRODB + BIND_ACTION_OK(cbs, action_ok_scan_file); +#endif + } + else if (cbs->enum_idx != MSG_UNKNOWN) { switch (cbs->enum_idx) { -#ifdef HAVE_LIBRETRODB - case MENU_ENUM_LABEL_SCAN_FILE: - BIND_ACTION_OK(cbs, action_ok_scan_file); - break; -#endif case MENU_ENUM_LABEL_DOWNLOADED_FILE_DETECT_CORE_LIST: case MENU_ENUM_LABEL_FAVORITES: case MENU_ENUM_LABEL_DEFERRED_ARCHIVE_OPEN_DETECT_CORE: @@ -4888,11 +4896,6 @@ static int menu_cbs_init_bind_ok_compare_type(menu_file_list_cbs_t *cbs, { switch (menu_label_hash) { -#ifdef HAVE_LIBRETRODB - case MENU_LABEL_SCAN_FILE: - BIND_ACTION_OK(cbs, action_ok_scan_file); - break; -#endif case MENU_LABEL_DOWNLOADED_FILE_DETECT_CORE_LIST: case MENU_LABEL_FAVORITES: case MENU_LABEL_DEFERRED_ARCHIVE_OPEN_DETECT_CORE: diff --git a/menu/widgets/menu_filebrowser.h b/menu/widgets/menu_filebrowser.h index cbc25daa65..b5656549dc 100644 --- a/menu/widgets/menu_filebrowser.h +++ b/menu/widgets/menu_filebrowser.h @@ -29,6 +29,7 @@ enum filebrowser_enums FILEBROWSER_NONE = 0, FILEBROWSER_SELECT_DIR, FILEBROWSER_SCAN_DIR, + FILEBROWSER_SCAN_FILE, FILEBROWSER_SELECT_FILE, FILEBROWSER_SELECT_IMAGE, FILEBROWSER_SELECT_FONT, From 366c73f429bf093fb0b7e876b3ea529709d1cdce Mon Sep 17 00:00:00 2001 From: twinaphex Date: Thu, 17 Aug 2017 19:07:38 +0200 Subject: [PATCH 036/137] Fix 'Append Disk Image' --- menu/cbs/menu_cbs_ok.c | 17 +++++++++++------ menu/widgets/menu_filebrowser.h | 1 + 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/menu/cbs/menu_cbs_ok.c b/menu/cbs/menu_cbs_ok.c index 95406f28c9..9919155f5e 100644 --- a/menu/cbs/menu_cbs_ok.c +++ b/menu/cbs/menu_cbs_ok.c @@ -370,6 +370,7 @@ int generic_action_ok_displaylist_push(const char *path, break; case ACTION_OK_DL_DISK_IMAGE_APPEND_LIST: filebrowser_clear_type(); + filebrowser_set_type(FILEBROWSER_APPEND_IMAGE); info.type = type; info.directory_ptr = idx; info_path = settings->paths.directory_menu_content; @@ -4880,13 +4881,15 @@ static int menu_cbs_init_bind_ok_compare_type(menu_file_list_cbs_t *cbs, } else #endif + if (filebrowser_get_type() == FILEBROWSER_APPEND_IMAGE) + { + BIND_ACTION_OK(cbs, action_ok_disk_image_append); + } + else { BIND_ACTION_OK(cbs, action_ok_file_load_with_detect_core); } break; - case MENU_ENUM_LABEL_DISK_IMAGE_APPEND: - BIND_ACTION_OK(cbs, action_ok_disk_image_append); - break; default: BIND_ACTION_OK(cbs, action_ok_file_load); break; @@ -4906,13 +4909,15 @@ static int menu_cbs_init_bind_ok_compare_type(menu_file_list_cbs_t *cbs, } else #endif + if (filebrowser_get_type() == FILEBROWSER_APPEND_IMAGE) + { + BIND_ACTION_OK(cbs, action_ok_disk_image_append); + } + else { BIND_ACTION_OK(cbs, action_ok_file_load_with_detect_core); } break; - case MENU_LABEL_DISK_IMAGE_APPEND: - BIND_ACTION_OK(cbs, action_ok_disk_image_append); - break; default: BIND_ACTION_OK(cbs, action_ok_file_load); break; diff --git a/menu/widgets/menu_filebrowser.h b/menu/widgets/menu_filebrowser.h index b5656549dc..93dac91e75 100644 --- a/menu/widgets/menu_filebrowser.h +++ b/menu/widgets/menu_filebrowser.h @@ -28,6 +28,7 @@ enum filebrowser_enums { FILEBROWSER_NONE = 0, FILEBROWSER_SELECT_DIR, + FILEBROWSER_APPEND_IMAGE, FILEBROWSER_SCAN_DIR, FILEBROWSER_SCAN_FILE, FILEBROWSER_SELECT_FILE, From 6952d6bd12cdfd390cdde07a3393531c6770c699 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Thu, 17 Aug 2017 19:10:23 +0200 Subject: [PATCH 037/137] Update CHANGES.md --- CHANGES.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 0e92dec05e..59ce195e3c 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,4 +1,10 @@ +# 1.6.8 (future) + # 1.6.7 (future) +- SCANNER: Fix directory scanning +- SCANNER: Fix file scanning +- COMMON: Fix 'Disk Image Append' option +- LOCALIZATION: Update Italian translation # 1.6.6 (future) - 3DS: Fixes serious performance regression that affected every core; rewind was always implicitly enabled. From 828f4aa8b9d7100925f58db5219914e37f4a2c8d Mon Sep 17 00:00:00 2001 From: twinaphex Date: Thu, 17 Aug 2017 19:24:23 +0200 Subject: [PATCH 038/137] (materialUI) Add disk image append icons --- menu/drivers/materialui.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/menu/drivers/materialui.c b/menu/drivers/materialui.c index 3ea17adac3..a983a86fe5 100644 --- a/menu/drivers/materialui.c +++ b/menu/drivers/materialui.c @@ -124,6 +124,8 @@ enum MUI_TEXTURE_TAKE_SCREENSHOT, MUI_TEXTURE_CONFIGURATIONS, MUI_TEXTURE_LOAD_CONTENT, + MUI_TEXTURE_DISK, + MUI_TEXTURE_EJECT, MUI_TEXTURE_LAST }; @@ -294,6 +296,10 @@ static const char *mui_texture_path(unsigned id) return "load_state.png"; case MUI_TEXTURE_SAVE_STATE: return "save_state.png"; + case MUI_TEXTURE_DISK: + return "disk.png"; + case MUI_TEXTURE_EJECT: + return "eject.png"; case MUI_TEXTURE_UNDO_LOAD_STATE: return "undo_load_state.png"; case MUI_TEXTURE_UNDO_SAVE_STATE: @@ -2417,6 +2423,22 @@ static void mui_list_insert(void *userdata, node->texture_switch2 = mui->textures.list[MUI_TEXTURE_LOAD_STATE]; node->texture_switch2_set = true; } + else if ( + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DISK_CYCLE_TRAY_STATUS)) + ) + { + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_EJECT]; + node->texture_switch2_set = true; + } + else if ( + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DISK_IMAGE_APPEND)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DISK_OPTIONS)) + ) + { + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_DISK]; + node->texture_switch2_set = true; + } else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_SAVE_STATE)) || (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG_OVERRIDE_CORE))) From 4e37b784d2060cea3996ce56258e38b5b64f8519 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Thu, 17 Aug 2017 19:27:59 +0200 Subject: [PATCH 039/137] Update CHANGES.md --- CHANGES.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 59ce195e3c..c86af3b591 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,10 +1,11 @@ # 1.6.8 (future) # 1.6.7 (future) -- SCANNER: Fix directory scanning -- SCANNER: Fix file scanning -- COMMON: Fix 'Disk Image Append' option -- LOCALIZATION: Update Italian translation +- SCANNER: Fix directory scanning. +- SCANNER: Fix file scanning. +- COMMON: Fix 'Disk Image Append' option. +- GUI: (MaterialUI) Add disk image append icons. +- LOCALIZATION: Update Italian translation. # 1.6.6 (future) - 3DS: Fixes serious performance regression that affected every core; rewind was always implicitly enabled. From dff78cf0cc2f10a525c9d2791f7d53a171d691b4 Mon Sep 17 00:00:00 2001 From: theheroGAC Date: Thu, 17 Aug 2017 19:57:00 +0200 Subject: [PATCH 040/137] Fixed translation errors --- intl/msg_hash_it.h | 99 +++++++++++++++++++++++++++------------------- 1 file changed, 59 insertions(+), 40 deletions(-) diff --git a/intl/msg_hash_it.h b/intl/msg_hash_it.h index ae36c8a8f5..9ea24a9c8f 100644 --- a/intl/msg_hash_it.h +++ b/intl/msg_hash_it.h @@ -633,59 +633,59 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_CHEAT_INDEX_MINUS, MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_CHEAT_INDEX_PLUS, "Cheat index +") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_CHEAT_TOGGLE, - "Cheat toggle") + "Pulsante trucchi/cheat") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_DISK_EJECT_TOGGLE, - "Toggle espulsione disco") + "Pulsante espulsione disco") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_DISK_NEXT, - "Disk next") + "Disco successivo") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_DISK_PREV, - "Disk prev") + "Disco precedente") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_ENABLE_HOTKEY, "Abilitare hotkeys") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_FAST_FORWARD_HOLD_KEY, - "Tenere premuto in avanti") + "Pulsante per tenere premuto in avanti ") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_FAST_FORWARD_KEY, - "Toggle per andare avanti veloce") + "Pulsante per andare avanti veloce") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_FRAMEADVANCE, "Frame avanzato") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_FULLSCREEN_TOGGLE_KEY, - "Toggle per lo shermo intero") + "Pulsante per lo shermo intero") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_GRAB_MOUSE_TOGGLE, - "Toggle per il tocco del mouse") + "Pulsante per il tocco del mouse") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_GAME_FOCUS_TOGGLE, - "Game focus toggle") + "Pulsante di messa a fuoco del gioco") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_LOAD_STATE_KEY, "Carica stato") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_MENU_TOGGLE, - "Toggle per il menu") + "Pulsante per il menu") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_MOVIE_RECORD_TOGGLE, - "Toggle per la registrazione del film") + "Pulsante per la registrazione del film") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_MUTE, - "Toggle per l' audio in modalità muto") + "Pulsante per l'audio in modalità silenziosa") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_NETPLAY_FLIP, "Netplay flip users") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_NETPLAY_GAME_WATCH, - "Netplay toggle play/spectate mode") + "Pulsante Netplay per la modalità giocatore/spettatore") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_OSK, - "Toggle per la tastiera su schermo") + "Pulsante per la tastiera su schermo") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_OVERLAY_NEXT, - "Overlay next") + "Overlay successivo") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_PAUSE_TOGGLE, - "Pause toggle") + "Pulsante Pausa") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_QUIT_KEY, - "Esci da RetroArch") + "Pulsante per uscire da RetroArch") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_RESET, "Resetta il gioco") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_REWIND, - "Riavvolgi") + "Pulsante per il riavvolgimento") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_SAVE_STATE_KEY, "Salva stato") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_SCREENSHOT, "Effettua screenshot") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_SHADER_NEXT, - "Next shader") + "Shader successivo") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_SHADER_PREV, - "Previous shader") + "Shader precedente") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_SLOWMOTION, "Slow motion") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_STATE_SLOT_MINUS, @@ -709,7 +709,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_POLL_TYPE_BEHAVIOR_LATE, MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_POLL_TYPE_BEHAVIOR_NORMAL, "Normale") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_PREFER_FRONT_TOUCH, - "Prefer Front Touch") + "Preferire il tocco frontale") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_REMAPPING_DIRECTORY, "Directory per la rimappatura dei dispositivi di input") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_REMAP_BINDS_ENABLE, @@ -1585,7 +1585,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHADOWS_ENABLE, MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_HISTORY, "Mostra colonna cronologia") MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_ADD, - "Display Import content Tab") + "Mostra colonna scansione/aggiungi directory") MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_IMAGES, "Mostra colonna immagini") MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_MUSIC, @@ -1713,7 +1713,7 @@ MSG_HASH(MSG_AUDIO_MUTED, MSG_HASH(MSG_AUDIO_UNMUTED, "MUTO Disattivato.") MSG_HASH(MSG_AUTOCONFIG_FILE_ERROR_SAVING, - "Error saving autoconf file.") + "Errore durante il salvataggio del file autoconf.") MSG_HASH(MSG_AUTOCONFIG_FILE_SAVED_SUCCESSFULLY, "Il file Autoconfig è stato salvato correttamente.") MSG_HASH(MSG_AUTOSAVE_FAILED, @@ -1751,7 +1751,7 @@ MSG_HASH(MSG_COULD_NOT_FIND_ANY_NEXT_DRIVER, MSG_HASH(MSG_COULD_NOT_FIND_COMPATIBLE_SYSTEM, "Impossibile trovare un sistema compatibile.") MSG_HASH(MSG_COULD_NOT_FIND_VALID_DATA_TRACK, - "Could not find valid data track") + "Impossibile trovare una traccia di dati valida") MSG_HASH(MSG_COULD_NOT_OPEN_DATA_TRACK, "could not open data track") MSG_HASH(MSG_COULD_NOT_READ_CONTENT_FILE, @@ -1761,7 +1761,7 @@ MSG_HASH(MSG_COULD_NOT_READ_MOVIE_HEADER, MSG_HASH(MSG_COULD_NOT_READ_STATE_FROM_MOVIE, "Could not read state from movie.") MSG_HASH(MSG_CRC32_CHECKSUM_MISMATCH, - "CRC32 checksum mismatch between content file and saved content checksum in replay file header) replay highly likely to desync on playback.") + "La mancata corrispondenza del checksum CRC32 tra il file di contenuto e il checksum del contenuto salvato nell'intestazione del file di replay, riproduce molto probabilmente il desync sulla riproduzione.") MSG_HASH(MSG_CUSTOM_TIMING_GIVEN, "Custom timing given") MSG_HASH(MSG_DECOMPRESSION_ALREADY_IN_PROGRESS, @@ -1811,15 +1811,15 @@ MSG_HASH(MSG_FAILED_TO_ACCEPT_INCOMING_SPECTATOR, MSG_HASH(MSG_FAILED_TO_ALLOCATE_MEMORY_FOR_PATCHED_CONTENT, "Failed to allocate memory for patched content...") MSG_HASH(MSG_FAILED_TO_APPLY_SHADER, - "Failed to apply shader.") + "Impossibile applicare lo shader.") MSG_HASH(MSG_FAILED_TO_BIND_SOCKET, "Failed to bind socket.") MSG_HASH(MSG_FAILED_TO_CREATE_THE_DIRECTORY, - "Failed to create the directory.") + "Impossibile creare la directory.") MSG_HASH(MSG_FAILED_TO_EXTRACT_CONTENT_FROM_COMPRESSED_FILE, - "Failed to extract content from compressed file") + "Impossibile estrarre il contenuto dal file compresso") MSG_HASH(MSG_FAILED_TO_GET_NICKNAME_FROM_CLIENT, - "Failed to get nickname from client.") + "Impossibile ottenere il nickname dal client.") MSG_HASH(MSG_FAILED_TO_LOAD, "Caricamento fallito") MSG_HASH(MSG_FAILED_TO_LOAD_CONTENT, @@ -1849,7 +1849,7 @@ MSG_HASH(MSG_FAILED_TO_REMOVE_DISK_FROM_TRAY, MSG_HASH(MSG_FAILED_TO_REMOVE_TEMPORARY_FILE, "Impossibile rimuovere il file temporaneo") MSG_HASH(MSG_FAILED_TO_SAVE_SRAM, - "Failed to save SRAM") + "Impossibile salvare la SRAM") MSG_HASH(MSG_FAILED_TO_SAVE_STATE_TO, "Failed to save state to") MSG_HASH(MSG_FAILED_TO_SEND_NICKNAME, @@ -1871,11 +1871,11 @@ MSG_HASH(MSG_FAILED_TO_START_RECORDING, MSG_HASH(MSG_FAILED_TO_TAKE_SCREENSHOT, "Impossibile eseguire lo screenshot.") MSG_HASH(MSG_FAILED_TO_UNDO_LOAD_STATE, - "Failed to undo load state.") + "Impossibile annullare il carica stato.") MSG_HASH(MSG_FAILED_TO_UNDO_SAVE_STATE, - "Failed to undo save state.") + "Impossibile annullare il salva stato.") MSG_HASH(MSG_FAILED_TO_UNMUTE_AUDIO, - "Failed to unmute audio.") + "Impossibile attivare l'audio.") MSG_HASH(MSG_FATAL_ERROR_RECEIVED_IN, "Errore irreversibile ricevuto su") MSG_HASH(MSG_FILE_NOT_FOUND, @@ -1889,7 +1889,7 @@ MSG_HASH(MSG_FOUND_FIRST_DATA_TRACK_ON_FILE, MSG_HASH(MSG_FOUND_LAST_STATE_SLOT, "Found last state slot") MSG_HASH(MSG_FOUND_SHADER, - "Found shader") + "Trovato shader") MSG_HASH(MSG_FRAMES, "Frames") MSG_HASH(MSG_GAME_SPECIFIC_CORE_OPTIONS_FOUND_AT, @@ -1913,7 +1913,7 @@ MSG_HASH(MSG_INPUT_CHEAT_FILENAME, MSG_HASH(MSG_INPUT_PRESET_FILENAME, "Preset Filename") MSG_HASH(MSG_INPUT_RENAME_ENTRY, - "Rename Title") + "Rinomina Titolo") MSG_HASH(MSG_INTERFACE, "Interfaccia") MSG_HASH(MSG_INTERNAL_STORAGE, @@ -1955,7 +1955,7 @@ MSG_HASH(MSG_MOVIE_FORMAT_DIFFERENT_SERIALIZER_VERSION, MSG_HASH(MSG_MOVIE_PLAYBACK_ENDED, "Movie playback ended.") MSG_HASH(MSG_MOVIE_RECORD_STOPPED, - "Stopping movie record.") + "Arresto della registrazione del filmato.") MSG_HASH(MSG_NETPLAY_FAILED, "Failed to initialize netplay.") MSG_HASH(MSG_NO_CONTENT_STARTING_DUMMY_CORE, @@ -1989,11 +1989,11 @@ MSG_HASH(MSG_REDIRECTING_SAVESTATE_TO, MSG_HASH(MSG_REMAP_FILE_SAVED_SUCCESSFULLY, "Remap file saved successfully.") MSG_HASH(MSG_REMOVED_DISK_FROM_TRAY, - "Removed disk from tray.") + "Rimosso il disco dal vassoio.") MSG_HASH(MSG_REMOVING_TEMPORARY_CONTENT_FILE, "Removing temporary content file") MSG_HASH(MSG_RESET, - "Reset") + "Resetta") MSG_HASH(MSG_RESTARTING_RECORDING_DUE_TO_DRIVER_REINIT, "Restarting recording due to driver reinit.") MSG_HASH(MSG_RESTORED_OLD_SAVE_STATE, @@ -2250,7 +2250,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_UNIFIED_MENU_CONTROLS, MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_UNIFIED_MENU_CONTROLS, "Utilizzare gli stessi controlli sia per il menu che per il gioco. Si applica alla tastiera.") MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_FONT_ENABLE, - "Show onscreen messages.") + "Mostra i messaggi sullo schermo") MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_USER_REMOTE_ENABLE, "User %d Remote Enable") MSG_HASH(MENU_ENUM_LABEL_VALUE_BATTERY_LEVEL_ENABLE, @@ -2515,4 +2515,23 @@ MSG_HASH(MENU_ENUM_SUBLABEL_CHEAT_NUM_PASSES, "Aumenta o diminuisce la quantità di trucchi/cheat.") MSG_HASH(MENU_ENUM_SUBLABEL_SHADER_OPTIONS, "Imposta gli shader per aumentare visivamente l'immagine.") - +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_FONT_PATH, + "Seleziona un altro tipo di carattere per le notifiche sullo schermo.") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_FONT_SIZE, + "Specifica la dimensione del carattere nei punti.") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_MESSAGE_POS_X, + "Specifica la posizione personalizzata dell'asse X per il testo sullo schermo.") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_MESSAGE_POS_Y, + "Specifica la posizione personalizzata dell'asse Y per il testo sullo schermo.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_ENABLE, + "Visualizza Overlay") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_HIDE_IN_MENU, + "Nascondi Overlay nel menu") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS, + "Visualizza input nell'Overlay") +MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS, + "Mostra gli input della tastiera/controller sull'overlay tramite lo schermo.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_FAVORITES, + "Mostra colonna Preferiti") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_NETPLAY, + "Mostra colonna stanze Netplay") From 7a402b97ecfa56a6b0783dc18632033c81653839 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Thu, 17 Aug 2017 20:01:34 +0200 Subject: [PATCH 041/137] Italian language build fixes --- intl/msg_hash_it.h | 4 ---- 1 file changed, 4 deletions(-) diff --git a/intl/msg_hash_it.h b/intl/msg_hash_it.h index 9ea24a9c8f..6022d9eed5 100644 --- a/intl/msg_hash_it.h +++ b/intl/msg_hash_it.h @@ -696,10 +696,6 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_VOLUME_DOWN, "Volume -") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_VOLUME_UP, "Volume +") -MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_ENABLE, - "Mostra Overlay") -MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_HIDE_IN_MENU, - "Nascondi overlay nel menù") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_POLL_TYPE_BEHAVIOR, "Tipo di ritardo") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_POLL_TYPE_BEHAVIOR_EARLY, From 9242cdeda90b07a3813099371bd461212d36280d Mon Sep 17 00:00:00 2001 From: Brad Parker Date: Thu, 17 Aug 2017 14:02:26 -0400 Subject: [PATCH 042/137] glui: subtract icon size from word wrap width if one is used --- menu/drivers/materialui.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/menu/drivers/materialui.c b/menu/drivers/materialui.c index a983a86fe5..be23e8da9f 100644 --- a/menu/drivers/materialui.c +++ b/menu/drivers/materialui.c @@ -940,7 +940,9 @@ static void mui_render_label_value(mui_handle_t *mui, mui_node_t *node, /* Sublabel */ if (menu_entry_get_sublabel(i, sublabel_str, sizeof(sublabel_str))) { - word_wrap(sublabel_str, sublabel_str, (int)(usable_width / mui->glyph_width2), false); + int icon_margin = texture_switch2 ? mui->icon_size : 0; + + word_wrap(sublabel_str, sublabel_str, (int)((usable_width - icon_margin) / mui->glyph_width2), false); menu_display_draw_text(mui->font2, sublabel_str, mui->margin + (texture_switch2 ? mui->icon_size : 0), From 6d3292945e932603bfd92bea221dc480c7c9b12c Mon Sep 17 00:00:00 2001 From: twinaphex Date: Thu, 17 Aug 2017 20:04:17 +0200 Subject: [PATCH 043/137] Update CHANGES.md --- CHANGES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.md b/CHANGES.md index c86af3b591..cb9c8d5795 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -5,6 +5,7 @@ - SCANNER: Fix file scanning. - COMMON: Fix 'Disk Image Append' option. - GUI: (MaterialUI) Add disk image append icons. +- GUI: (MaterialUI) Improve word wrapping when menu icons are enabled. - LOCALIZATION: Update Italian translation. # 1.6.6 (future) From 6fc48a39d9c7f0dba58ca395749d099ec278830b Mon Sep 17 00:00:00 2001 From: twinaphex Date: Thu, 17 Aug 2017 21:05:38 +0200 Subject: [PATCH 044/137] (MaterialUI) Add Menu Icons Enable setting --- config.def.h | 4 + configuration.c | 3 + configuration.h | 1 + intl/msg_hash_chs.h | 18 + intl/msg_hash_cht.h | 18 + intl/msg_hash_de.h | 18 + intl/msg_hash_eo.h | 18 + intl/msg_hash_fr.h | 18 + intl/msg_hash_it.h | 4 + intl/msg_hash_ja.h | 18 + intl/msg_hash_ko.h | 18 + intl/msg_hash_lbl.h | 2 + intl/msg_hash_nl.h | 18 + intl/msg_hash_pt_br.h | 18 + intl/msg_hash_pt_pt.h | 18 + intl/msg_hash_ru.h | 18 + intl/msg_hash_us.h | 4 + intl/msg_hash_vn.h | 18 + menu/cbs/menu_cbs_sublabel.c | 4 + menu/drivers/materialui.c | 706 ++++++++++++++++++----------------- menu/menu_displaylist.c | 3 + menu/menu_setting.c | 15 + msg_hash.h | 2 + 23 files changed, 613 insertions(+), 351 deletions(-) diff --git a/config.def.h b/config.def.h index 2048ebf331..6e30fe126c 100644 --- a/config.def.h +++ b/config.def.h @@ -58,6 +58,10 @@ static bool bundle_assets_extract_enable = true; static bool bundle_assets_extract_enable = false; #endif +#ifdef HAVE_MATERIALUI +static bool materialui_icons_enable = true; +#endif + static const bool def_history_list_enable = true; static const bool def_playlist_entry_remove = true; diff --git a/configuration.c b/configuration.c index f14ff753b5..cf37d12a05 100644 --- a/configuration.c +++ b/configuration.c @@ -1192,6 +1192,9 @@ static struct config_bool_setting *populate_settings_bool(settings_t *settings, SETTING_BOOL("menu_battery_level_enable", &settings->bools.menu_battery_level_enable, true, true, false); SETTING_BOOL("menu_core_enable", &settings->bools.menu_core_enable, true, true, false); SETTING_BOOL("menu_dynamic_wallpaper_enable", &settings->bools.menu_dynamic_wallpaper_enable, true, false, false); +#ifdef HAVE_MATERIALUI + SETTING_BOOL("materialui_icons_enable", &settings->bools.menu_materialui_icons_enable, true, materialui_icons_enable, false); +#endif #ifdef HAVE_XMB SETTING_BOOL("xmb_shadows_enable", &settings->bools.menu_xmb_shadows_enable, true, xmb_shadows_enable, false); SETTING_BOOL("xmb_show_settings", &settings->bools.menu_xmb_show_settings, true, xmb_show_settings, false); diff --git a/configuration.h b/configuration.h index 1102e0ef15..3f72595181 100644 --- a/configuration.h +++ b/configuration.h @@ -123,6 +123,7 @@ typedef struct settings bool menu_horizontal_animation; bool menu_show_online_updater; bool menu_show_core_updater; + bool menu_materialui_icons_enable; bool menu_xmb_shadows_enable; bool menu_xmb_show_settings; bool menu_xmb_show_favorites; diff --git a/intl/msg_hash_chs.h b/intl/msg_hash_chs.h index e5466c1ae5..ee5a060882 100644 --- a/intl/msg_hash_chs.h +++ b/intl/msg_hash_chs.h @@ -3027,3 +3027,21 @@ MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY, "Modify the opacity of the framebuffer.") MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES, "Favorites") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_FAVORITES, + "Content which you have added to 'Favorites' will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_MUSIC, + "Music") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_MUSIC, + "Music which has been previously played will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES, + "Image") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_IMAGES, + "Images which has been previously viewed will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO, + "Video") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_VIDEO, + "Videos which have been previously played will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_ICONS_ENABLE, + "Menu Icons") +MSG_HASH(MENU_ENUM_SUBLABEL_MATERIALUI_ICONS_ENABLE, + "Enable/disable the menu icons shown at the lefthand side of the menu entries.") diff --git a/intl/msg_hash_cht.h b/intl/msg_hash_cht.h index 96c49a87db..cd4fad6170 100644 --- a/intl/msg_hash_cht.h +++ b/intl/msg_hash_cht.h @@ -3027,3 +3027,21 @@ MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY, "Modify the opacity of the framebuffer.") MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES, "Favorites") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_FAVORITES, + "Content which you have added to 'Favorites' will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_MUSIC, + "Music") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_MUSIC, + "Music which has been previously played will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES, + "Image") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_IMAGES, + "Images which has been previously viewed will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO, + "Video") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_VIDEO, + "Videos which have been previously played will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_ICONS_ENABLE, + "Menu Icons") +MSG_HASH(MENU_ENUM_SUBLABEL_MATERIALUI_ICONS_ENABLE, + "Enable/disable the menu icons shown at the lefthand side of the menu entries.") diff --git a/intl/msg_hash_de.h b/intl/msg_hash_de.h index cfa8f0d7d9..df3745b2a7 100644 --- a/intl/msg_hash_de.h +++ b/intl/msg_hash_de.h @@ -3021,3 +3021,21 @@ MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY, "Modify the opacity of the framebuffer.") MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES, "Favorites") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_FAVORITES, + "Content which you have added to 'Favorites' will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_MUSIC, + "Music") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_MUSIC, + "Music which has been previously played will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES, + "Image") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_IMAGES, + "Images which has been previously viewed will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO, + "Video") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_VIDEO, + "Videos which have been previously played will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_ICONS_ENABLE, + "Menu Icons") +MSG_HASH(MENU_ENUM_SUBLABEL_MATERIALUI_ICONS_ENABLE, + "Enable/disable the menu icons shown at the lefthand side of the menu entries.") diff --git a/intl/msg_hash_eo.h b/intl/msg_hash_eo.h index fe67876405..81172d1911 100644 --- a/intl/msg_hash_eo.h +++ b/intl/msg_hash_eo.h @@ -2890,3 +2890,21 @@ MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY, "Modify the opacity of the framebuffer.") MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES, "Favorites") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_FAVORITES, + "Content which you have added to 'Favorites' will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_MUSIC, + "Music") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_MUSIC, + "Music which has been previously played will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES, + "Image") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_IMAGES, + "Images which has been previously viewed will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO, + "Video") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_VIDEO, + "Videos which have been previously played will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_ICONS_ENABLE, + "Menu Icons") +MSG_HASH(MENU_ENUM_SUBLABEL_MATERIALUI_ICONS_ENABLE, + "Enable/disable the menu icons shown at the lefthand side of the menu entries.") diff --git a/intl/msg_hash_fr.h b/intl/msg_hash_fr.h index 9516a68a0d..36af547423 100644 --- a/intl/msg_hash_fr.h +++ b/intl/msg_hash_fr.h @@ -3059,3 +3059,21 @@ MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY, "Modify the opacity of the framebuffer.") MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES, "Favorites") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_FAVORITES, + "Content which you have added to 'Favorites' will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_MUSIC, + "Music") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_MUSIC, + "Music which has been previously played will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES, + "Image") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_IMAGES, + "Images which has been previously viewed will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO, + "Video") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_VIDEO, + "Videos which have been previously played will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_ICONS_ENABLE, + "Menu Icons") +MSG_HASH(MENU_ENUM_SUBLABEL_MATERIALUI_ICONS_ENABLE, + "Enable/disable the menu icons shown at the lefthand side of the menu entries.") diff --git a/intl/msg_hash_it.h b/intl/msg_hash_it.h index 6022d9eed5..ca56c41be7 100644 --- a/intl/msg_hash_it.h +++ b/intl/msg_hash_it.h @@ -2531,3 +2531,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_FAVORITES, "Mostra colonna Preferiti") MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_NETPLAY, "Mostra colonna stanze Netplay") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_ICONS_ENABLE, + "Menu Icons") +MSG_HASH(MENU_ENUM_SUBLABEL_MATERIALUI_ICONS_ENABLE, + "Enable/disable the menu icons shown at the lefthand side of the menu entries.") diff --git a/intl/msg_hash_ja.h b/intl/msg_hash_ja.h index 8d3e2dad64..088dfba49e 100644 --- a/intl/msg_hash_ja.h +++ b/intl/msg_hash_ja.h @@ -3013,3 +3013,21 @@ MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY, "Modify the opacity of the framebuffer.") MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES, "Favorites") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_FAVORITES, + "Content which you have added to 'Favorites' will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_MUSIC, + "Music") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_MUSIC, + "Music which has been previously played will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES, + "Image") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_IMAGES, + "Images which has been previously viewed will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO, + "Video") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_VIDEO, + "Videos which have been previously played will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_ICONS_ENABLE, + "Menu Icons") +MSG_HASH(MENU_ENUM_SUBLABEL_MATERIALUI_ICONS_ENABLE, + "Enable/disable the menu icons shown at the lefthand side of the menu entries.") diff --git a/intl/msg_hash_ko.h b/intl/msg_hash_ko.h index e38f544fc2..e835c27307 100644 --- a/intl/msg_hash_ko.h +++ b/intl/msg_hash_ko.h @@ -3022,3 +3022,21 @@ MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY, "Modify the opacity of the framebuffer.") MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES, "Favorites") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_FAVORITES, + "Content which you have added to 'Favorites' will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_MUSIC, + "Music") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_MUSIC, + "Music which has been previously played will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES, + "Image") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_IMAGES, + "Images which has been previously viewed will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO, + "Video") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_VIDEO, + "Videos which have been previously played will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_ICONS_ENABLE, + "Menu Icons") +MSG_HASH(MENU_ENUM_SUBLABEL_MATERIALUI_ICONS_ENABLE, + "Enable/disable the menu icons shown at the lefthand side of the menu entries.") diff --git a/intl/msg_hash_lbl.h b/intl/msg_hash_lbl.h index ac9b36106a..7069e2d7f3 100644 --- a/intl/msg_hash_lbl.h +++ b/intl/msg_hash_lbl.h @@ -1295,3 +1295,5 @@ MSG_HASH(MENU_ENUM_LABEL_GOTO_IMAGES, "goto_images") MSG_HASH(MENU_ENUM_LABEL_GOTO_VIDEO, "goto_video") +MSG_HASH(MENU_ENUM_LABEL_MATERIALUI_ICONS_ENABLE, + "materialui_icons_enable") diff --git a/intl/msg_hash_nl.h b/intl/msg_hash_nl.h index 914e76cf7a..8fd37c1c3a 100644 --- a/intl/msg_hash_nl.h +++ b/intl/msg_hash_nl.h @@ -2890,3 +2890,21 @@ MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY, "Modify the opacity of the framebuffer.") MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES, "Favorites") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_FAVORITES, + "Content which you have added to 'Favorites' will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_MUSIC, + "Music") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_MUSIC, + "Music which has been previously played will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES, + "Image") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_IMAGES, + "Images which has been previously viewed will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO, + "Video") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_VIDEO, + "Videos which have been previously played will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_ICONS_ENABLE, + "Menu Icons") +MSG_HASH(MENU_ENUM_SUBLABEL_MATERIALUI_ICONS_ENABLE, + "Enable/disable the menu icons shown at the lefthand side of the menu entries.") diff --git a/intl/msg_hash_pt_br.h b/intl/msg_hash_pt_br.h index 8d5899fdc2..8e4dfffdec 100644 --- a/intl/msg_hash_pt_br.h +++ b/intl/msg_hash_pt_br.h @@ -3868,3 +3868,21 @@ MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY, "Modify the opacity of the framebuffer.") MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES, "Favorites") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_FAVORITES, + "Content which you have added to 'Favorites' will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_MUSIC, + "Music") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_MUSIC, + "Music which has been previously played will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES, + "Image") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_IMAGES, + "Images which has been previously viewed will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO, + "Video") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_VIDEO, + "Videos which have been previously played will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_ICONS_ENABLE, + "Menu Icons") +MSG_HASH(MENU_ENUM_SUBLABEL_MATERIALUI_ICONS_ENABLE, + "Enable/disable the menu icons shown at the lefthand side of the menu entries.") diff --git a/intl/msg_hash_pt_pt.h b/intl/msg_hash_pt_pt.h index 516a93eab7..3a37981f9f 100644 --- a/intl/msg_hash_pt_pt.h +++ b/intl/msg_hash_pt_pt.h @@ -2997,3 +2997,21 @@ MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY, "Modify the opacity of the framebuffer.") MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES, "Favorites") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_FAVORITES, + "Content which you have added to 'Favorites' will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_MUSIC, + "Music") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_MUSIC, + "Music which has been previously played will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES, + "Image") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_IMAGES, + "Images which has been previously viewed will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO, + "Video") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_VIDEO, + "Videos which have been previously played will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_ICONS_ENABLE, + "Menu Icons") +MSG_HASH(MENU_ENUM_SUBLABEL_MATERIALUI_ICONS_ENABLE, + "Enable/disable the menu icons shown at the lefthand side of the menu entries.") diff --git a/intl/msg_hash_ru.h b/intl/msg_hash_ru.h index 78a7825202..68c7096277 100644 --- a/intl/msg_hash_ru.h +++ b/intl/msg_hash_ru.h @@ -3080,3 +3080,21 @@ MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY, "Modify the opacity of the framebuffer.") MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES, "Favorites") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_FAVORITES, + "Content which you have added to 'Favorites' will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_MUSIC, + "Music") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_MUSIC, + "Music which has been previously played will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES, + "Image") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_IMAGES, + "Images which has been previously viewed will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO, + "Video") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_VIDEO, + "Videos which have been previously played will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_ICONS_ENABLE, + "Menu Icons") +MSG_HASH(MENU_ENUM_SUBLABEL_MATERIALUI_ICONS_ENABLE, + "Enable/disable the menu icons shown at the lefthand side of the menu entries.") diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index 412cea3538..1354bd7150 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -3125,3 +3125,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO, "Video") MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_VIDEO, "Videos which have been previously played will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_ICONS_ENABLE, + "Menu Icons") +MSG_HASH(MENU_ENUM_SUBLABEL_MATERIALUI_ICONS_ENABLE, + "Enable/disable the menu icons shown at the lefthand side of the menu entries.") diff --git a/intl/msg_hash_vn.h b/intl/msg_hash_vn.h index 35c41edf11..d53502697a 100644 --- a/intl/msg_hash_vn.h +++ b/intl/msg_hash_vn.h @@ -3051,3 +3051,21 @@ MSG_HASH(MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY, "Modify the opacity of the framebuffer.") MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES, "Favorites") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_FAVORITES, + "Content which you have added to 'Favorites' will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_MUSIC, + "Music") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_MUSIC, + "Music which has been previously played will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES, + "Image") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_IMAGES, + "Images which has been previously viewed will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO, + "Video") +MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_VIDEO, + "Videos which have been previously played will appear here.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_ICONS_ENABLE, + "Menu Icons") +MSG_HASH(MENU_ENUM_SUBLABEL_MATERIALUI_ICONS_ENABLE, + "Enable/disable the menu icons shown at the lefthand side of the menu entries.") diff --git a/menu/cbs/menu_cbs_sublabel.c b/menu/cbs/menu_cbs_sublabel.c index c5a8996691..4054790c85 100644 --- a/menu/cbs/menu_cbs_sublabel.c +++ b/menu/cbs/menu_cbs_sublabel.c @@ -84,6 +84,7 @@ default_sublabel_macro(action_bind_sublabel_fps_show, MENU_ default_sublabel_macro(action_bind_sublabel_netplay_settings, MENU_ENUM_SUBLABEL_NETPLAY) default_sublabel_macro(action_bind_sublabel_user_bind_settings, MENU_ENUM_SUBLABEL_INPUT_USER_BINDS) default_sublabel_macro(action_bind_sublabel_input_hotkey_settings, MENU_ENUM_SUBLABEL_INPUT_HOTKEY_BINDS) +default_sublabel_macro(action_bind_sublabel_materialui_icons_enable, MENU_ENUM_SUBLABEL_MATERIALUI_ICONS_ENABLE) default_sublabel_macro(action_bind_sublabel_add_content_list, MENU_ENUM_SUBLABEL_ADD_CONTENT_LIST) default_sublabel_macro(action_bind_sublabel_video_frame_delay, MENU_ENUM_SUBLABEL_VIDEO_FRAME_DELAY) default_sublabel_macro(action_bind_sublabel_video_black_frame_insertion, MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION) @@ -406,6 +407,9 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs, { switch (cbs->enum_idx) { + case MENU_ENUM_LABEL_MATERIALUI_ICONS_ENABLE: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_materialui_icons_enable); + break; case MENU_ENUM_LABEL_VIDEO_VIEWPORT_CUSTOM_HEIGHT: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_video_viewport_custom_height); break; diff --git a/menu/drivers/materialui.c b/menu/drivers/materialui.c index be23e8da9f..8654d6bd99 100644 --- a/menu/drivers/materialui.c +++ b/menu/drivers/materialui.c @@ -2222,6 +2222,7 @@ static void mui_list_insert(void *userdata, float scale_factor; int i = (int)list_size; mui_node_t *node = NULL; + settings_t *settings = config_get_ptr(); mui_handle_t *mui = (mui_handle_t*)userdata; if (!mui || !list) @@ -2249,370 +2250,373 @@ static void mui_list_insert(void *userdata, node->switch_is_on = false; node->do_draw_text = false; - switch (type) + if (settings->bools.menu_materialui_icons_enable) { - case FILE_TYPE_DOWNLOAD_CORE: - case FILE_TYPE_CORE: - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_CORES]; - node->texture_switch2_set = true; - break; - case FILE_TYPE_DOWNLOAD_THUMBNAIL_CONTENT: - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_IMAGE]; - node->texture_switch2_set = true; - break; - case FILE_TYPE_PARENT_DIRECTORY: - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_PARENT_DIRECTORY]; - node->texture_switch2_set = true; - break; - case FILE_TYPE_PLAYLIST_COLLECTION: - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_PLAYLIST]; - node->texture_switch2_set = true; - break; - case FILE_TYPE_RDB: - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_DATABASE]; - node->texture_switch2_set = true; - break; - case 32: /* TODO: Need to find out what this is */ - case FILE_TYPE_RDB_ENTRY: - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_SETTINGS]; - node->texture_switch2_set = true; - break; - case FILE_TYPE_IN_CARCHIVE: - case FILE_TYPE_PLAIN: - case FILE_TYPE_DOWNLOAD_CORE_CONTENT: - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_FILE]; - node->texture_switch2_set = true; - break; - case FILE_TYPE_MUSIC: - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_MUSIC]; - node->texture_switch2_set = true; - break; - case FILE_TYPE_MOVIE: - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_VIDEO]; - node->texture_switch2_set = true; - break; - case FILE_TYPE_DIRECTORY: - case FILE_TYPE_DOWNLOAD_URL: - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_FOLDER]; - node->texture_switch2_set = true; - break; - default: - if ( - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_INFORMATION_LIST)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_NO_CORE_INFORMATION_AVAILABLE)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_NO_ITEMS)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_NO_CORE_OPTIONS_AVAILABLE)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_NO_SETTINGS_FOUND)) - ) - { - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_INFO]; - node->texture_switch2_set = true; - } - else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_GOTO_IMAGES))) - { - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_IMAGE]; - node->texture_switch2_set = true; - } - else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_GOTO_MUSIC))) - { - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_MUSIC]; - node->texture_switch2_set = true; - } - else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_GOTO_VIDEO))) - { - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_VIDEO]; - node->texture_switch2_set = true; - } - else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_SCAN_THIS_DIRECTORY))) - { - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_SCAN]; - node->texture_switch2_set = true; - } - else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_LOAD_CONTENT_HISTORY))) - { - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_HISTORY]; - node->texture_switch2_set = true; - } - else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_HELP_LIST))) - { - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_HELP]; - node->texture_switch2_set = true; - } - else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_RESTART_CONTENT))) - { - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_RESTART]; - node->texture_switch2_set = true; - } - else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_RESUME_CONTENT))) - { - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_RESUME]; - node->texture_switch2_set = true; - } - else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_CLOSE_CONTENT))) - { - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_CLOSE]; - node->texture_switch2_set = true; - } - else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_CORE_OPTIONS))) - { - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_CORE_OPTIONS]; - node->texture_switch2_set = true; - } - else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_CORE_CHEAT_OPTIONS))) - { - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_CORE_CHEAT_OPTIONS]; - node->texture_switch2_set = true; - } - else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_CORE_INPUT_REMAPPING_OPTIONS))) - { - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_CONTROLS]; - node->texture_switch2_set = true; - } - else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_SHADER_OPTIONS))) - { - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_SHADERS]; - node->texture_switch2_set = true; - } - else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_CORE_LIST))) - { + switch (type) + { + case FILE_TYPE_DOWNLOAD_CORE: + case FILE_TYPE_CORE: node->texture_switch2 = mui->textures.list[MUI_TEXTURE_CORES]; node->texture_switch2_set = true; - } - else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_RUN))) - { - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_RUN]; + break; + case FILE_TYPE_DOWNLOAD_THUMBNAIL_CONTENT: + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_IMAGE]; node->texture_switch2_set = true; - } - else if ( - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_ADD_TO_FAVORITES)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_GOTO_FAVORITES)) - ) - { - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_ADD_TO_FAVORITES]; + break; + case FILE_TYPE_PARENT_DIRECTORY: + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_PARENT_DIRECTORY]; node->texture_switch2_set = true; - } - else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_PLAYLIST_ENTRY_RENAME))) - { - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_RENAME]; + break; + case FILE_TYPE_PLAYLIST_COLLECTION: + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_PLAYLIST]; node->texture_switch2_set = true; - } - else if ( - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_ADD_TO_MIXER)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_ADD_TO_MIXER_AND_COLLECTION)) - ) - { - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_ADD_TO_MIXER]; + break; + case FILE_TYPE_RDB: + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_DATABASE]; node->texture_switch2_set = true; - } - else if ( - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_START_CORE)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_RUN_MUSIC)) - ) - { - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_START_CORE]; + break; + case 32: /* TODO: Need to find out what this is */ + case FILE_TYPE_RDB_ENTRY: + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_SETTINGS]; node->texture_switch2_set = true; - } - else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_LOAD_STATE)) - ) - { - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_LOAD_STATE]; + break; + case FILE_TYPE_IN_CARCHIVE: + case FILE_TYPE_PLAIN: + case FILE_TYPE_DOWNLOAD_CORE_CONTENT: + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_FILE]; node->texture_switch2_set = true; - } - else if ( - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DISK_CYCLE_TRAY_STATUS)) - ) - { - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_EJECT]; + break; + case FILE_TYPE_MUSIC: + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_MUSIC]; node->texture_switch2_set = true; - } - else if ( - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DISK_IMAGE_APPEND)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DISK_OPTIONS)) - ) - { - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_DISK]; + break; + case FILE_TYPE_MOVIE: + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_VIDEO]; node->texture_switch2_set = true; - } - else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_SAVE_STATE)) - || - (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG_OVERRIDE_CORE))) - || - (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG_OVERRIDE_GAME))) - ) - { - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_SAVE_STATE]; - node->texture_switch2_set = true; - } - else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_UNDO_LOAD_STATE))) - { - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_UNDO_LOAD_STATE]; - node->texture_switch2_set = true; - } - else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_UNDO_SAVE_STATE))) - { - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_UNDO_SAVE_STATE]; - node->texture_switch2_set = true; - } - else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_STATE_SLOT))) - { - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_STATE_SLOT]; - node->texture_switch2_set = true; - } - else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_TAKE_SCREENSHOT))) - { - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_TAKE_SCREENSHOT]; - node->texture_switch2_set = true; - } - else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_CONFIGURATIONS_LIST))) - { - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_CONFIGURATIONS]; - node->texture_switch2_set = true; - } - else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_LOAD_CONTENT_LIST))) - { - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_LOAD_CONTENT]; - node->texture_switch2_set = true; - } - else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DELETE_ENTRY))) - { - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_REMOVE]; - node->texture_switch2_set = true; - } - else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_NETPLAY))) - { - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_NETPLAY]; - node->texture_switch2_set = true; - } - else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_CONTENT_SETTINGS))) - { - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_QUICKMENU]; - node->texture_switch2_set = true; - } - else if ( - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_ONLINE_UPDATER)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_UPDATE_CORE_INFO_FILES)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_UPDATE_AUTOCONFIG_PROFILES)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_UPDATE_ASSETS)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_UPDATE_CHEATS)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_UPDATE_DATABASES)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_UPDATE_OVERLAYS)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_UPDATE_CG_SHADERS)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_UPDATE_GLSL_SHADERS)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_UPDATE_SLANG_SHADERS)) - ) - { - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_UPDATER]; - node->texture_switch2_set = true; - } - else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_SCAN_DIRECTORY)) || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_SCAN_FILE)) - ) - { - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_ADD]; - node->texture_switch2_set = true; - } - else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_QUIT_RETROARCH))) - { - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_QUIT]; - node->texture_switch2_set = true; - } - else if ( - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_MENU_FILE_BROWSER_SETTINGS)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DRIVER_SETTINGS)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_VIDEO_SETTINGS)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_AUDIO_SETTINGS)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_INPUT_SETTINGS)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_INPUT_HOTKEY_BINDS)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_CORE_SETTINGS)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_CONFIGURATION_SETTINGS)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_SAVING_SETTINGS)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_LOGGING_SETTINGS)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_FRAME_THROTTLE_SETTINGS)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_RECORDING_SETTINGS)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_ONSCREEN_DISPLAY_SETTINGS)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_USER_INTERFACE_SETTINGS)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_RETRO_ACHIEVEMENTS_SETTINGS)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_WIFI_SETTINGS)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_NETWORK_SETTINGS)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_NETPLAY_LAN_SCAN_SETTINGS)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_LAKKA_SERVICES)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_PLAYLIST_SETTINGS)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_USER_SETTINGS)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DIRECTORY_SETTINGS)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_PRIVACY_SETTINGS)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_MENU_VIEWS_SETTINGS)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_MENU_SETTINGS)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_ONSCREEN_OVERLAY_SETTINGS)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_ONSCREEN_NOTIFICATIONS_SETTINGS)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_ACCOUNTS_LIST)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_REWIND_SETTINGS)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_ACCOUNTS_RETRO_ACHIEVEMENTS)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_CORE_UPDATER_LIST)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_THUMBNAILS_UPDATER_LIST)) - || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DOWNLOAD_CORE_CONTENT_DIRS)) - ) - { - node->texture_switch2 = mui->textures.list[MUI_TEXTURE_SETTINGS]; - node->texture_switch2_set = true; - } - else if ( - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_FAVORITES)) || - string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DOWNLOADED_FILE_DETECT_CORE_LIST)) - ) - { + break; + case FILE_TYPE_DIRECTORY: + case FILE_TYPE_DOWNLOAD_URL: node->texture_switch2 = mui->textures.list[MUI_TEXTURE_FOLDER]; node->texture_switch2_set = true; - } - break; + break; + default: + if ( + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_INFORMATION_LIST)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_NO_CORE_INFORMATION_AVAILABLE)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_NO_ITEMS)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_NO_CORE_OPTIONS_AVAILABLE)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_NO_SETTINGS_FOUND)) + ) + { + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_INFO]; + node->texture_switch2_set = true; + } + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_GOTO_IMAGES))) + { + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_IMAGE]; + node->texture_switch2_set = true; + } + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_GOTO_MUSIC))) + { + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_MUSIC]; + node->texture_switch2_set = true; + } + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_GOTO_VIDEO))) + { + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_VIDEO]; + node->texture_switch2_set = true; + } + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_SCAN_THIS_DIRECTORY))) + { + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_SCAN]; + node->texture_switch2_set = true; + } + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_LOAD_CONTENT_HISTORY))) + { + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_HISTORY]; + node->texture_switch2_set = true; + } + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_HELP_LIST))) + { + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_HELP]; + node->texture_switch2_set = true; + } + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_RESTART_CONTENT))) + { + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_RESTART]; + node->texture_switch2_set = true; + } + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_RESUME_CONTENT))) + { + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_RESUME]; + node->texture_switch2_set = true; + } + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_CLOSE_CONTENT))) + { + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_CLOSE]; + node->texture_switch2_set = true; + } + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_CORE_OPTIONS))) + { + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_CORE_OPTIONS]; + node->texture_switch2_set = true; + } + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_CORE_CHEAT_OPTIONS))) + { + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_CORE_CHEAT_OPTIONS]; + node->texture_switch2_set = true; + } + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_CORE_INPUT_REMAPPING_OPTIONS))) + { + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_CONTROLS]; + node->texture_switch2_set = true; + } + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_SHADER_OPTIONS))) + { + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_SHADERS]; + node->texture_switch2_set = true; + } + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_CORE_LIST))) + { + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_CORES]; + node->texture_switch2_set = true; + } + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_RUN))) + { + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_RUN]; + node->texture_switch2_set = true; + } + else if ( + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_ADD_TO_FAVORITES)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_GOTO_FAVORITES)) + ) + { + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_ADD_TO_FAVORITES]; + node->texture_switch2_set = true; + } + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_PLAYLIST_ENTRY_RENAME))) + { + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_RENAME]; + node->texture_switch2_set = true; + } + else if ( + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_ADD_TO_MIXER)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_ADD_TO_MIXER_AND_COLLECTION)) + ) + { + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_ADD_TO_MIXER]; + node->texture_switch2_set = true; + } + else if ( + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_START_CORE)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_RUN_MUSIC)) + ) + { + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_START_CORE]; + node->texture_switch2_set = true; + } + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_LOAD_STATE)) + ) + { + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_LOAD_STATE]; + node->texture_switch2_set = true; + } + else if ( + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DISK_CYCLE_TRAY_STATUS)) + ) + { + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_EJECT]; + node->texture_switch2_set = true; + } + else if ( + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DISK_IMAGE_APPEND)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DISK_OPTIONS)) + ) + { + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_DISK]; + node->texture_switch2_set = true; + } + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_SAVE_STATE)) + || + (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG_OVERRIDE_CORE))) + || + (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG_OVERRIDE_GAME))) + ) + { + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_SAVE_STATE]; + node->texture_switch2_set = true; + } + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_UNDO_LOAD_STATE))) + { + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_UNDO_LOAD_STATE]; + node->texture_switch2_set = true; + } + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_UNDO_SAVE_STATE))) + { + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_UNDO_SAVE_STATE]; + node->texture_switch2_set = true; + } + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_STATE_SLOT))) + { + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_STATE_SLOT]; + node->texture_switch2_set = true; + } + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_TAKE_SCREENSHOT))) + { + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_TAKE_SCREENSHOT]; + node->texture_switch2_set = true; + } + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_CONFIGURATIONS_LIST))) + { + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_CONFIGURATIONS]; + node->texture_switch2_set = true; + } + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_LOAD_CONTENT_LIST))) + { + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_LOAD_CONTENT]; + node->texture_switch2_set = true; + } + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DELETE_ENTRY))) + { + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_REMOVE]; + node->texture_switch2_set = true; + } + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_NETPLAY))) + { + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_NETPLAY]; + node->texture_switch2_set = true; + } + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_CONTENT_SETTINGS))) + { + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_QUICKMENU]; + node->texture_switch2_set = true; + } + else if ( + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_ONLINE_UPDATER)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_UPDATE_CORE_INFO_FILES)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_UPDATE_AUTOCONFIG_PROFILES)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_UPDATE_ASSETS)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_UPDATE_CHEATS)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_UPDATE_DATABASES)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_UPDATE_OVERLAYS)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_UPDATE_CG_SHADERS)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_UPDATE_GLSL_SHADERS)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_UPDATE_SLANG_SHADERS)) + ) + { + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_UPDATER]; + node->texture_switch2_set = true; + } + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_SCAN_DIRECTORY)) || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_SCAN_FILE)) + ) + { + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_ADD]; + node->texture_switch2_set = true; + } + else if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_QUIT_RETROARCH))) + { + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_QUIT]; + node->texture_switch2_set = true; + } + else if ( + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_MENU_FILE_BROWSER_SETTINGS)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DRIVER_SETTINGS)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_VIDEO_SETTINGS)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_AUDIO_SETTINGS)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_INPUT_SETTINGS)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_INPUT_HOTKEY_BINDS)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_CORE_SETTINGS)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_CONFIGURATION_SETTINGS)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_SAVING_SETTINGS)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_LOGGING_SETTINGS)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_FRAME_THROTTLE_SETTINGS)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_RECORDING_SETTINGS)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_ONSCREEN_DISPLAY_SETTINGS)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_USER_INTERFACE_SETTINGS)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_RETRO_ACHIEVEMENTS_SETTINGS)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_WIFI_SETTINGS)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_NETWORK_SETTINGS)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_NETPLAY_LAN_SCAN_SETTINGS)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_LAKKA_SERVICES)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_PLAYLIST_SETTINGS)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_USER_SETTINGS)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DIRECTORY_SETTINGS)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_PRIVACY_SETTINGS)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_MENU_VIEWS_SETTINGS)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_MENU_SETTINGS)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_ONSCREEN_OVERLAY_SETTINGS)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_ONSCREEN_NOTIFICATIONS_SETTINGS)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_ACCOUNTS_LIST)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_REWIND_SETTINGS)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_ACCOUNTS_RETRO_ACHIEVEMENTS)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_CORE_UPDATER_LIST)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_THUMBNAILS_UPDATER_LIST)) + || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DOWNLOAD_CORE_CONTENT_DIRS)) + ) + { + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_SETTINGS]; + node->texture_switch2_set = true; + } + else if ( + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_FAVORITES)) || + string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DOWNLOADED_FILE_DETECT_CORE_LIST)) + ) + { + node->texture_switch2 = mui->textures.list[MUI_TEXTURE_FOLDER]; + node->texture_switch2_set = true; + } + break; + } } file_list_set_userdata(list, i, node); diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index f27e32f935..9a29b03239 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -5235,6 +5235,9 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_XMB_MENU_COLOR_THEME, PARSE_ONLY_UINT, false); + menu_displaylist_parse_settings_enum(menu, info, + MENU_ENUM_LABEL_MATERIALUI_ICONS_ENABLE, + PARSE_ONLY_BOOL, false); menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_MATERIALUI_MENU_COLOR_THEME, PARSE_ONLY_UINT, false); diff --git a/menu/menu_setting.c b/menu/menu_setting.c index 4bdc55bee6..db6715c516 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -5509,6 +5509,21 @@ static bool setting_append_list( /* only MaterialUI uses these values, don't show them on other drivers */ if (string_is_equal_fast(settings->arrays.menu_driver, "glui", 4)) { + CONFIG_BOOL( + list, list_info, + &settings->bools.menu_materialui_icons_enable, + MENU_ENUM_LABEL_MATERIALUI_ICONS_ENABLE, + MENU_ENUM_LABEL_VALUE_MATERIALUI_ICONS_ENABLE, + materialui_icons_enable, + MENU_ENUM_LABEL_VALUE_OFF, + MENU_ENUM_LABEL_VALUE_ON, + &group_info, + &subgroup_info, + parent_group, + general_write_handler, + general_read_handler, + SD_FLAG_ADVANCED); + CONFIG_UINT( list, list_info, &settings->uints.menu_materialui_color_theme, diff --git a/msg_hash.h b/msg_hash.h index 791a288c64..4aaefd0c8a 100644 --- a/msg_hash.h +++ b/msg_hash.h @@ -405,6 +405,8 @@ enum msg_hash_enums MENU_ENUM_LABEL_VALUE_OVERLAY, MENU_ENUM_LABEL_VALUE_AUTO, + MENU_LABEL(MATERIALUI_ICONS_ENABLE), + MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_MONOCHROME, MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_FLATUI, MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_RETROACTIVE, From b4912db58787c9b0456a92744c21da9adee4cc4f Mon Sep 17 00:00:00 2001 From: twinaphex Date: Thu, 17 Aug 2017 21:07:16 +0200 Subject: [PATCH 045/137] Update CHANGES.md --- CHANGES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.md b/CHANGES.md index cb9c8d5795..df08786769 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -6,6 +6,7 @@ - COMMON: Fix 'Disk Image Append' option. - GUI: (MaterialUI) Add disk image append icons. - GUI: (MaterialUI) Improve word wrapping when menu icons are enabled. +- GUI: (MaterialUI) Add User Interface -> Appearance -> Menu Icons Enable. You can turn on/off the icons on the lefthand side of the menu entries. - LOCALIZATION: Update Italian translation. # 1.6.6 (future) From 73e00e021a91dd971af3c3d428686c16b405a6a8 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Thu, 17 Aug 2017 21:09:42 +0200 Subject: [PATCH 046/137] Bump up version to 1.6.7 --- Makefile.openpandora | 2 +- Makefile.ps3 | 2 +- Makefile.ps3.cobra | 2 +- Makefile.psl1ght | 2 +- dist-scripts/dist-cores.sh | 2 +- pkg/android/phoenix/AndroidManifest.xml | 4 ++-- pkg/wii/meta.xml | 2 +- pkg/wiiu/meta.xml | 2 +- version.h | 2 +- 9 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Makefile.openpandora b/Makefile.openpandora index e05d8c0ef0..b39176e1c8 100644 --- a/Makefile.openpandora +++ b/Makefile.openpandora @@ -1,4 +1,4 @@ -RARCH_VERSION = "1.6.6.0" +RARCH_VERSION = "1.6.7.0" DEBUG = 0 diff --git a/Makefile.ps3 b/Makefile.ps3 index 32c5486a37..a0f1a339d6 100644 --- a/Makefile.ps3 +++ b/Makefile.ps3 @@ -1,4 +1,4 @@ -RARCH_VERSION = "1.6.6.0" +RARCH_VERSION = "1.6.7.0" #which compiler to build with - GCC or SNC #set to GCC for debug builds for use with debugger diff --git a/Makefile.ps3.cobra b/Makefile.ps3.cobra index 5ccb3db096..8c153d2694 100644 --- a/Makefile.ps3.cobra +++ b/Makefile.ps3.cobra @@ -1,4 +1,4 @@ -RARCH_VERSION = "1.6.6.0" +RARCH_VERSION = "1.6.7.0" #which compiler to build with - GCC or SNC #set to GCC for debug builds for use with debugger diff --git a/Makefile.psl1ght b/Makefile.psl1ght index 276de7b0b2..09e7755e47 100644 --- a/Makefile.psl1ght +++ b/Makefile.psl1ght @@ -1,4 +1,4 @@ -RARCH_VERSION = "1.6.6.0" +RARCH_VERSION = "1.6.7.0" DEBUG = 0 HAVE_LOGGER = 0 diff --git a/dist-scripts/dist-cores.sh b/dist-scripts/dist-cores.sh index 285ef68570..dd708f539b 100755 --- a/dist-scripts/dist-cores.sh +++ b/dist-scripts/dist-cores.sh @@ -1,6 +1,6 @@ #!/bin/sh -RARCH_VERSION=1.6.5 +RARCH_VERSION=1.6.7 PLATFORM=$1 SALAMANDER=no MAKEFILE_GRIFFIN=no diff --git a/pkg/android/phoenix/AndroidManifest.xml b/pkg/android/phoenix/AndroidManifest.xml index 8cd45f13de..7f36803d61 100644 --- a/pkg/android/phoenix/AndroidManifest.xml +++ b/pkg/android/phoenix/AndroidManifest.xml @@ -1,7 +1,7 @@ diff --git a/pkg/wii/meta.xml b/pkg/wii/meta.xml index fc83315eea..75c81a3cfa 100644 --- a/pkg/wii/meta.xml +++ b/pkg/wii/meta.xml @@ -2,7 +2,7 @@ RetroArch Libretro - 1.6.6 + 1.6.7 2012-2017 The cross-platform entertainment system A port of RetroArch to the GameCube/Wii. diff --git a/pkg/wiiu/meta.xml b/pkg/wiiu/meta.xml index eb8146a38d..66fc7271bf 100644 --- a/pkg/wiiu/meta.xml +++ b/pkg/wiiu/meta.xml @@ -2,7 +2,7 @@ Retroarch Libretro - 1.66 + 1.67 20170108133000 RetroArch diff --git a/version.h b/version.h index ab515ea960..e10de54d6a 100644 --- a/version.h +++ b/version.h @@ -18,7 +18,7 @@ #define RARCH_VERSION_H__ #ifndef PACKAGE_VERSION -#define PACKAGE_VERSION "1.6.6" +#define PACKAGE_VERSION "1.6.7" #endif #endif From e70c15e6415448bec17acdc05ff877b65c57096b Mon Sep 17 00:00:00 2001 From: theheroGAC Date: Thu, 17 Aug 2017 23:57:52 +0200 Subject: [PATCH 047/137] Updated the MATERIALUI translation --- intl/msg_hash_it.h | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/intl/msg_hash_it.h b/intl/msg_hash_it.h index ca56c41be7..b8753b3a2c 100644 --- a/intl/msg_hash_it.h +++ b/intl/msg_hash_it.h @@ -947,7 +947,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_ONSCREEN_DISPLAY_SETTINGS, MSG_HASH(MENU_ENUM_LABEL_VALUE_ONSCREEN_OVERLAY_SETTINGS, "Overlay sullo schermo") MSG_HASH(MENU_ENUM_LABEL_VALUE_ONSCREEN_NOTIFICATIONS_SETTINGS, - "Onscreen Notifications") + "Notifiche sullo schermo") MSG_HASH(MENU_ENUM_LABEL_VALUE_OPEN_ARCHIVE, "Apri archivio come cartella") /* TODO/FIXME */ MSG_HASH(MENU_ENUM_LABEL_VALUE_OPTIONAL, @@ -1093,7 +1093,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_RETROPAD_WITH_ANALOG, MSG_HASH(MENU_ENUM_LABEL_VALUE_RETRO_ACHIEVEMENTS_SETTINGS, "Achievements") MSG_HASH(MENU_ENUM_LABEL_VALUE_REWIND_ENABLE, - "Abilita riavvolgi") + "Abilita riavvolgimento") MSG_HASH(MENU_ENUM_LABEL_VALUE_REWIND_GRANULARITY, "Livello della funzione riavvolgi") MSG_HASH(MENU_ENUM_LABEL_VALUE_REWIND_SETTINGS, @@ -2442,7 +2442,7 @@ MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_WINDOW_WIDTH, MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_WINDOW_HEIGHT, "Imposta le dimensioni dell'altezza personalizzata per la finestra del display. Lasciando il valore a 0 tenterà di scalare la finestra il più grande possibile.") MSG_HASH(MENU_ENUM_SUBLABEL_SLOWMOTION_RATIO, - "Quando in slow motion, il contenuto rallenterà il fattore specificato / impostato.") + "In slow motion, il contenuto rallenterà il fattore specificato / impostato.") MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_GPU_RECORD, "Registra l'output GPU del materiale ombreggiato se disponibile.") MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_POST_FILTER_RECORD, @@ -2496,7 +2496,7 @@ MSG_HASH(MENU_ENUM_SUBLABEL_CORE_OPTIONS, MSG_HASH(MENU_ENUM_SUBLABEL_RESTART_CONTENT, "Riavvia il contenuto dall'inizio.") MSG_HASH(MENU_ENUM_SUBLABEL_UNDO_LOAD_STATE, - "Se viene caricato un salvataggio, il contenuto tornerà allo stato prima del caricamento.") + "Se viene caricato un salvataggio, il contenuto tornerà allo stato iniziale prima del caricamento.") MSG_HASH(MENU_ENUM_SUBLABEL_UNDO_SAVE_STATE, "Se un salvataggio è stato sovrascritto, si ritorna allo stato del salvataggio precedente.") MSG_HASH(MENU_ENUM_SUBLABEL_CORE_CHEAT_OPTIONS, @@ -2532,6 +2532,20 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_FAVORITES, MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_NETPLAY, "Mostra colonna stanze Netplay") MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_ICONS_ENABLE, - "Menu Icons") + "Icone del Menu") MSG_HASH(MENU_ENUM_SUBLABEL_MATERIALUI_ICONS_ENABLE, - "Enable/disable the menu icons shown at the lefthand side of the menu entries.") + "Abilita/disabilita le icone del menu visualizzate sul lato sinistro di ogni voce.") +MSG_HASH(MENU_ENUM_SUBLABEL_MENU_ENUM_THROTTLE_FRAMERATE, + "Assicurarsi che il framerate sia limitato all'interno del menu") +MSG_HASH(MENU_ENUM_SUBLABEL_MOUSE_ENABLE, + "Attiva i comandi del mouse all'interno del menu.") +MSG_HASH(MENU_ENUM_SUBLABEL_POINTER_ENABLE, + "Attiva i comandi touch all'interno del menu.") +MSG_HASH(MENU_ENUM_SUBLABEL_THUMBNAILS, + "Tipo di miniatura da visualizzare.") +MSG_HASH(MENU_ENUM_SUBLABEL_TIMEDATE_ENABLE, + "Mostra la data e/o l'ora attuale nel menu.") +MSG_HASH(MENU_ENUM_SUBLABEL_BATTERY_LEVEL_ENABLE, + "Mostra il livello di carica della batteria all'interno del menu.") +MSG_HASH(MENU_ENUM_SUBLABEL_RGUI_SHOW_START_SCREEN, + "Mostra la schermata di avvio nel menu. Questo viene automaticamente impostato su off dopo l'avvio del programma per la prima volta.") From 87b4576e788ecb46c1c763fd94ab36d791bb9be8 Mon Sep 17 00:00:00 2001 From: theheroGAC Date: Fri, 18 Aug 2017 02:13:28 +0200 Subject: [PATCH 048/137] Update msg_hash_it.h --- intl/msg_hash_it.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/intl/msg_hash_it.h b/intl/msg_hash_it.h index b8753b3a2c..b94c62a7b6 100644 --- a/intl/msg_hash_it.h +++ b/intl/msg_hash_it.h @@ -400,7 +400,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_PERMISSIONS, MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_SUPPORTED_EXTENSIONS, "Estensioni supportate") MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_SYSTEM_MANUFACTURER, - "Produttore del sitema") + "Produttore del sistema") MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_SYSTEM_NAME, "Nome del sistema") MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INPUT_REMAPPING_OPTIONS, @@ -480,8 +480,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_DYNAMIC_WALLPAPER, MSG_HASH(MENU_ENUM_LABEL_VALUE_DYNAMIC_WALLPAPERS_DIRECTORY, "Directory degli sfondi dinamici") MSG_HASH(MENU_ENUM_LABEL_VALUE_CHEEVOS_ENABLE, - /* FIXME? Translate 'Enable Achievements' */ - "Attivare") + "Attivare Achievements") MSG_HASH(MENU_ENUM_LABEL_VALUE_ENTRY_HOVER_COLOR, "Colore evidenziato delle voci dei menù") MSG_HASH(MENU_ENUM_LABEL_VALUE_ENTRY_NORMAL_COLOR, @@ -2549,3 +2548,5 @@ MSG_HASH(MENU_ENUM_SUBLABEL_BATTERY_LEVEL_ENABLE, "Mostra il livello di carica della batteria all'interno del menu.") MSG_HASH(MENU_ENUM_SUBLABEL_RGUI_SHOW_START_SCREEN, "Mostra la schermata di avvio nel menu. Questo viene automaticamente impostato su off dopo l'avvio del programma per la prima volta.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_DELETE, + "Cancella core") From 139d95c5633f41c7f5f4cd65c7461dd83f47c881 Mon Sep 17 00:00:00 2001 From: Brad Parker Date: Thu, 17 Aug 2017 20:28:45 -0400 Subject: [PATCH 049/137] FreeBSD buildfix --- camera/drivers/video4linux2.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/camera/drivers/video4linux2.c b/camera/drivers/video4linux2.c index 20960d0b16..2be990821e 100644 --- a/camera/drivers/video4linux2.c +++ b/camera/drivers/video4linux2.c @@ -16,7 +16,9 @@ */ #include +#if !defined(__FreeBSD__) || __FreeBSD__ < 5 #include +#endif #include #include #include @@ -28,7 +30,9 @@ #include #include +#ifndef __FreeBSD__ #include +#endif #include #include From ea9991f7495236251fd640d996240af8ac480d88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Higor=20Eur=C3=ADpedes?= Date: Thu, 17 Aug 2017 20:23:03 -0300 Subject: [PATCH 050/137] (xmb) Detect non-visible items before drawing --- menu/drivers/xmb.c | 45 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 37 insertions(+), 8 deletions(-) diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index 2319b720b9..86efe31a26 100644 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -555,7 +555,7 @@ static void *xmb_list_get_entry(void *data, enum menu_list_type type, unsigned i return NULL; } -static INLINE float xmb_item_y(xmb_handle_t *xmb, int i, size_t current) +static INLINE float xmb_item_y(const xmb_handle_t *xmb, int i, size_t current) { float iy = xmb->icon.spacing.vertical; @@ -2195,6 +2195,35 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb, return xmb->textures.list[XMB_TEXTURE_SUBSETTING]; } +static void xmb_calculate_visible_range(const xmb_handle_t *xmb, unsigned height, size_t list_size, unsigned current, unsigned *first, unsigned *last) +{ + unsigned j; + float base_y = xmb->margins.screen.top; + + if (current) + { + for (j = current; j-- > 0; ) + { + float bottom = xmb_item_y(xmb, j, current) + base_y + xmb->icon.size; + + if (bottom < 0) + break; + + *first = j; + } + } + + for (j = current+1; j < list_size; j++) + { + float top = xmb_item_y(xmb, j, current) + base_y; + + if (top > height) + break; + + *last = j; + } +} + static void xmb_draw_items( video_frame_info_t *video_info, menu_display_frame_info_t menu_disp_info, @@ -2210,6 +2239,7 @@ static void xmb_draw_items( size_t end = 0; uint64_t frame_count = xmb->frame_count; const char *thumb_ident = xmb_thumbnails_ident(); + unsigned first, last; if (!list || !list->size) return; @@ -2234,9 +2264,14 @@ static void xmb_draw_items( if (list == xmb->selection_buf_old) i = 0; + first = i; + last = end - 1; + + xmb_calculate_visible_range(xmb, height, end, current, &first, &last); + menu_display_blend_begin(); - for (; i < end; i++) + for (i = first; i <= last; i++) { float icon_x, icon_y, label_offset; menu_animation_ctx_ticker_t ticker; @@ -2269,12 +2304,6 @@ static void xmb_draw_items( icon_y = xmb->margins.screen.top + node->y + half_size; - if (icon_y < half_size) - continue; - - if (icon_y > height + xmb->icon.size) - break; - icon_x = node->x + xmb->margins.screen.left + xmb->icon.spacing.horizontal - half_size; From 0d59994c42bfa242b96e6b1bfff218c35699b0c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Higor=20Eur=C3=ADpedes?= Date: Thu, 17 Aug 2017 20:58:53 -0300 Subject: [PATCH 051/137] (xmb) Only iterate over visible items in xmb_render() --- menu/drivers/xmb.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index 86efe31a26..a742142749 100644 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -2517,8 +2517,15 @@ static void xmb_render(void *data, bool is_idle) int16_t pointer_y = menu_input_pointer_state(MENU_POINTER_Y_AXIS); int16_t mouse_y = menu_input_mouse_state(MENU_MOUSE_Y_AXIS) + (xmb->cursor.size/2); + unsigned first = 0, last = end; + unsigned height; - for (i = 0; i < end; i++) + video_driver_get_size(NULL, &height); + + if (height) + xmb_calculate_visible_range(xmb, height, end, selection, &first, &last); + + for (i = first; i <= last; i++) { float item_y1 = xmb->margins.screen.top + xmb_item_y(xmb, (int)i, selection); From 6c91c39aae218fb8050b1f43a96933f077b1ba0b Mon Sep 17 00:00:00 2001 From: Brad Parker Date: Thu, 17 Aug 2017 20:47:40 -0400 Subject: [PATCH 052/137] glui: fix entry box highlight calculation --- menu/drivers/materialui.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/menu/drivers/materialui.c b/menu/drivers/materialui.c index 8654d6bd99..e156069b4f 100644 --- a/menu/drivers/materialui.c +++ b/menu/drivers/materialui.c @@ -708,6 +708,7 @@ static void mui_compute_entries_box(mui_handle_t* mui, int width) float sum = 0; size_t entries_end = menu_entries_get_end(); float scale_factor = menu_display_get_dpi(); + uintptr_t texture_switch2 = 0; for (i = 0; i < entries_end; i++) { @@ -718,9 +719,15 @@ static void mui_compute_entries_box(mui_handle_t* mui, int width) sublabel_str[0] = '\0'; + /* set texture_switch2 */ + if (node->texture_switch2_set) + texture_switch2 = node->texture_switch2; + if (menu_entry_get_sublabel(i, sublabel_str, sizeof(sublabel_str))) { - word_wrap(sublabel_str, sublabel_str, (int)(usable_width / mui->glyph_width2), false); + int icon_margin = texture_switch2 ? mui->icon_size : 0; + + word_wrap(sublabel_str, sublabel_str, (int)((usable_width - icon_margin) / mui->glyph_width2), false); lines = mui_count_lines(sublabel_str); } From 8e8bdaaab3dc4686ce39e59da922f79a76ba4496 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Fri, 18 Aug 2017 02:52:31 +0200 Subject: [PATCH 053/137] Update CHANGES.md --- CHANGES.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index df08786769..6f9551bfae 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -4,9 +4,11 @@ - SCANNER: Fix directory scanning. - SCANNER: Fix file scanning. - COMMON: Fix 'Disk Image Append' option. +- FREEBSD: Compatibility fixes for Video4Linux2 camera driver. - GUI: (MaterialUI) Add disk image append icons. - GUI: (MaterialUI) Improve word wrapping when menu icons are enabled. - GUI: (MaterialUI) Add User Interface -> Appearance -> Menu Icons Enable. You can turn on/off the icons on the lefthand side of the menu entries. +- GUI: Performance optimizations for XMB menu driver - only calculates visible items. - LOCALIZATION: Update Italian translation. # 1.6.6 (future) From 6c56ddcc22b17c5d6853289325f6559a1e78c05d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Andr=C3=A9=20Santoni?= Date: Fri, 18 Aug 2017 14:54:35 +0700 Subject: [PATCH 054/137] (Lakka) Expose the favorites tab setting --- menu/menu_setting.c | 1 - 1 file changed, 1 deletion(-) diff --git a/menu/menu_setting.c b/menu/menu_setting.c index db6715c516..d41698c3ab 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -5401,7 +5401,6 @@ static bool setting_append_list( general_write_handler, general_read_handler, SD_FLAG_NONE); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); #ifdef HAVE_IMAGEVIEWER CONFIG_BOOL( From 2ff6bee726bca0501af7ba694a8d664df6257af1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Andr=C3=A9=20Santoni?= Date: Fri, 18 Aug 2017 15:59:44 +0700 Subject: [PATCH 055/137] (Menu) Feedback when adding a content to favorites --- command.c | 1 + intl/msg_hash_us.h | 2 ++ msg_hash.h | 1 + 3 files changed, 4 insertions(+) diff --git a/command.c b/command.c index efa3ae8fc9..b443ee5520 100644 --- a/command.c +++ b/command.c @@ -2195,6 +2195,7 @@ TODO: Add a setting for these tweaks */ NULL ); playlist_write_file(g_defaults.content_favorites); + runloop_msg_queue_push(msg_hash_to_str(MSG_ADDED_TO_FAVORITES), 1, 180, true); break; case CMD_EVENT_RESTART_RETROARCH: if (!frontend_driver_set_fork(FRONTEND_FORK_RESTART)) diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index 1354bd7150..9f47c0025c 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -1875,6 +1875,8 @@ MSG_HASH(MENU_ENUM_SUBLABEL_WIFI_SETTINGS, "Scans for wireless networks and establishes connection.") MSG_HASH(MENU_ENUM_SUBLABEL_HELP_LIST, "Learn more about how the program works.") +MSG_HASH(MSG_ADDED_TO_FAVORITES, + "Added to favorites") MSG_HASH(MSG_APPENDED_DISK, "Appended disk") MSG_HASH(MSG_APPLICATION_DIR, diff --git a/msg_hash.h b/msg_hash.h index 4aaefd0c8a..67107195cb 100644 --- a/msg_hash.h +++ b/msg_hash.h @@ -172,6 +172,7 @@ enum msg_hash_enums MSG_NETPLAY_CANNOT_PLAY, MSG_NETPLAY_PEER_PAUSED, MSG_NETPLAY_CHANGED_NICK, + MSG_ADDED_TO_FAVORITES, MSG_AUTODETECT, MSG_AUDIO_VOLUME, MSG_AUDIO_MIXER_VOLUME, From 694001910209ee670ce3312ce5f68c942d6b19dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Andr=C3=A9=20Santoni?= Date: Fri, 18 Aug 2017 18:30:31 +0700 Subject: [PATCH 056/137] (XMB) Icon for the rename action --- menu/drivers/xmb.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index a742142749..cecceb5fe1 100644 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -128,6 +128,7 @@ enum XMB_TEXTURE_ACHIEVEMENT_LIST, XMB_TEXTURE_SCREENSHOT, XMB_TEXTURE_RELOAD, + XMB_TEXTURE_RENAME, XMB_TEXTURE_FILE, XMB_TEXTURE_FOLDER, XMB_TEXTURE_ZIP, @@ -2084,6 +2085,8 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb, return xmb->textures.list[XMB_TEXTURE_CLOSE]; case MENU_ENUM_LABEL_RESTART_CONTENT: return xmb->textures.list[XMB_TEXTURE_RELOAD]; + case MENU_ENUM_LABEL_PLAYLIST_ENTRY_RENAME: + return xmb->textures.list[XMB_TEXTURE_RENAME]; case MENU_ENUM_LABEL_RESUME_CONTENT: return xmb->textures.list[XMB_TEXTURE_RESUME]; case MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG_OVERRIDE_CORE: @@ -3584,6 +3587,8 @@ static const char *xmb_texture_path(unsigned id) return "screenshot.png"; case XMB_TEXTURE_RELOAD: return "reload.png"; + case XMB_TEXTURE_RENAME: + return "rename.png"; case XMB_TEXTURE_FILE: return "file.png"; case XMB_TEXTURE_FOLDER: From 584e12ed3784b8bfcd1386ac517fe6b07a359704 Mon Sep 17 00:00:00 2001 From: Gregor Richards Date: Fri, 18 Aug 2017 14:13:39 -0400 Subject: [PATCH 057/137] Fix disconnection not fully deinitializing Netplay. --- network/netplay/netplay_frontend.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/network/netplay/netplay_frontend.c b/network/netplay/netplay_frontend.c index 6cfa790268..49026cb10f 100644 --- a/network/netplay/netplay_frontend.c +++ b/network/netplay/netplay_frontend.c @@ -57,6 +57,8 @@ static unsigned server_port_deferred = 0; static int reannounce = 0; static bool is_mitm = false; +bool netplay_disconnect(netplay_t *netplay); + /** * netplay_is_alive: * @netplay : pointer to netplay object @@ -825,6 +827,13 @@ bool netplay_pre_frame(netplay_t *netplay) sync_stalled = !netplay_sync_pre_frame(netplay); + /* If we're disconnected, deinitialize */ + if (!netplay->is_server && !netplay->connections[0].active) + { + netplay_disconnect(netplay); + return true; + } + if (sync_stalled || ((!netplay->is_server || netplay->connected_players) && (netplay->stall || netplay->remote_paused))) @@ -860,6 +869,10 @@ void netplay_post_frame(netplay_t *netplay) false)) netplay_hangup(netplay, connection); } + + /* If we're disconnected, deinitialize */ + if (!netplay->is_server && !netplay->connections[0].active) + netplay_disconnect(netplay); } /** From aaecf82608a82e234d954acb82a6b539d650cf94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Higor=20Eur=C3=ADpedes?= Date: Thu, 17 Aug 2017 21:52:47 -0300 Subject: [PATCH 058/137] (xmb) Skip drawing the fading list when it is already transparent --- menu/drivers/xmb.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index cecceb5fe1..cb092714ed 100644 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -2265,7 +2265,15 @@ static void xmb_draw_items( menu_entries_ctl(MENU_ENTRIES_CTL_START_GET, &i); if (list == xmb->selection_buf_old) + { + xmb_node_t *node = (xmb_node_t*) + menu_entries_get_userdata_at_offset(list, current); + + if ((uint8_t)(255 * node->alpha) == 0) + return; + i = 0; + } first = i; last = end - 1; From 67ea020cdf69b804b896ca94fca2d651cf0b9234 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sat, 19 Aug 2017 06:27:25 +0200 Subject: [PATCH 059/137] Fix typo --- intl/msg_hash_chs.h | 2 +- intl/msg_hash_cht.h | 2 +- intl/msg_hash_de.h | 2 +- intl/msg_hash_eo.h | 2 +- intl/msg_hash_fr.h | 2 +- intl/msg_hash_ja.h | 2 +- intl/msg_hash_ko.h | 2 +- intl/msg_hash_nl.h | 2 +- intl/msg_hash_pt_br.h | 2 +- intl/msg_hash_pt_pt.h | 2 +- intl/msg_hash_ru.h | 2 +- intl/msg_hash_us.h | 2 +- intl/msg_hash_vn.h | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/intl/msg_hash_chs.h b/intl/msg_hash_chs.h index ee5a060882..7d78d479e4 100644 --- a/intl/msg_hash_chs.h +++ b/intl/msg_hash_chs.h @@ -3036,7 +3036,7 @@ MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_MUSIC, MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES, "Image") MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_IMAGES, - "Images which has been previously viewed will appear here.") + "Images which have been previously viewed will appear here.") MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO, "Video") MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_VIDEO, diff --git a/intl/msg_hash_cht.h b/intl/msg_hash_cht.h index cd4fad6170..41c0f34a4e 100644 --- a/intl/msg_hash_cht.h +++ b/intl/msg_hash_cht.h @@ -3036,7 +3036,7 @@ MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_MUSIC, MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES, "Image") MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_IMAGES, - "Images which has been previously viewed will appear here.") + "Images which have been previously viewed will appear here.") MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO, "Video") MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_VIDEO, diff --git a/intl/msg_hash_de.h b/intl/msg_hash_de.h index df3745b2a7..39e671f9c0 100644 --- a/intl/msg_hash_de.h +++ b/intl/msg_hash_de.h @@ -3030,7 +3030,7 @@ MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_MUSIC, MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES, "Image") MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_IMAGES, - "Images which has been previously viewed will appear here.") + "Images which have been previously viewed will appear here.") MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO, "Video") MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_VIDEO, diff --git a/intl/msg_hash_eo.h b/intl/msg_hash_eo.h index 81172d1911..f3fddd60a1 100644 --- a/intl/msg_hash_eo.h +++ b/intl/msg_hash_eo.h @@ -2899,7 +2899,7 @@ MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_MUSIC, MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES, "Image") MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_IMAGES, - "Images which has been previously viewed will appear here.") + "Images which have been previously viewed will appear here.") MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO, "Video") MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_VIDEO, diff --git a/intl/msg_hash_fr.h b/intl/msg_hash_fr.h index 36af547423..e93f65c2f4 100644 --- a/intl/msg_hash_fr.h +++ b/intl/msg_hash_fr.h @@ -3068,7 +3068,7 @@ MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_MUSIC, MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES, "Image") MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_IMAGES, - "Images which has been previously viewed will appear here.") + "Images which have been previously viewed will appear here.") MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO, "Video") MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_VIDEO, diff --git a/intl/msg_hash_ja.h b/intl/msg_hash_ja.h index 088dfba49e..3b7053e440 100644 --- a/intl/msg_hash_ja.h +++ b/intl/msg_hash_ja.h @@ -3022,7 +3022,7 @@ MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_MUSIC, MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES, "Image") MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_IMAGES, - "Images which has been previously viewed will appear here.") + "Images which have been previously viewed will appear here.") MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO, "Video") MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_VIDEO, diff --git a/intl/msg_hash_ko.h b/intl/msg_hash_ko.h index e835c27307..a9cc790329 100644 --- a/intl/msg_hash_ko.h +++ b/intl/msg_hash_ko.h @@ -3031,7 +3031,7 @@ MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_MUSIC, MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES, "Image") MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_IMAGES, - "Images which has been previously viewed will appear here.") + "Images which have been previously viewed will appear here.") MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO, "Video") MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_VIDEO, diff --git a/intl/msg_hash_nl.h b/intl/msg_hash_nl.h index 8fd37c1c3a..939ac2016b 100644 --- a/intl/msg_hash_nl.h +++ b/intl/msg_hash_nl.h @@ -2899,7 +2899,7 @@ MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_MUSIC, MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES, "Image") MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_IMAGES, - "Images which has been previously viewed will appear here.") + "Images which have been previously viewed will appear here.") MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO, "Video") MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_VIDEO, diff --git a/intl/msg_hash_pt_br.h b/intl/msg_hash_pt_br.h index 8e4dfffdec..03bf155246 100644 --- a/intl/msg_hash_pt_br.h +++ b/intl/msg_hash_pt_br.h @@ -3877,7 +3877,7 @@ MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_MUSIC, MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES, "Image") MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_IMAGES, - "Images which has been previously viewed will appear here.") + "Images which have been previously viewed will appear here.") MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO, "Video") MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_VIDEO, diff --git a/intl/msg_hash_pt_pt.h b/intl/msg_hash_pt_pt.h index 3a37981f9f..c5cd817d1c 100644 --- a/intl/msg_hash_pt_pt.h +++ b/intl/msg_hash_pt_pt.h @@ -3006,7 +3006,7 @@ MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_MUSIC, MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES, "Image") MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_IMAGES, - "Images which has been previously viewed will appear here.") + "Images which have been previously viewed will appear here.") MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO, "Video") MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_VIDEO, diff --git a/intl/msg_hash_ru.h b/intl/msg_hash_ru.h index 68c7096277..12bd636499 100644 --- a/intl/msg_hash_ru.h +++ b/intl/msg_hash_ru.h @@ -3089,7 +3089,7 @@ MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_MUSIC, MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES, "Image") MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_IMAGES, - "Images which has been previously viewed will appear here.") + "Images which have been previously viewed will appear here.") MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO, "Video") MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_VIDEO, diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index 9f47c0025c..c26b80c888 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -3122,7 +3122,7 @@ MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_MUSIC, MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES, "Image") MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_IMAGES, - "Images which has been previously viewed will appear here.") + "Images which have been previously viewed will appear here.") MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO, "Video") MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_VIDEO, diff --git a/intl/msg_hash_vn.h b/intl/msg_hash_vn.h index d53502697a..a5582641b6 100644 --- a/intl/msg_hash_vn.h +++ b/intl/msg_hash_vn.h @@ -3060,7 +3060,7 @@ MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_MUSIC, MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_IMAGES, "Image") MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_IMAGES, - "Images which has been previously viewed will appear here.") + "Images which have been previously viewed will appear here.") MSG_HASH(MENU_ENUM_LABEL_VALUE_GOTO_VIDEO, "Video") MSG_HASH(MENU_ENUM_SUBLABEL_GOTO_VIDEO, From 61473d8f1583c7a33b994504d6aae971a586585e Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sat, 19 Aug 2017 08:31:02 +0200 Subject: [PATCH 060/137] Start adding hooks for internal libogc --- Makefile.griffin | 24 +++++++++++++++++++++--- Makefile.wii.salamander | 12 ++++++++++-- wii/app_booter/Makefile | 13 +++++++++++-- 3 files changed, 42 insertions(+), 7 deletions(-) diff --git a/Makefile.griffin b/Makefile.griffin index f940471241..4838988047 100644 --- a/Makefile.griffin +++ b/Makefile.griffin @@ -82,6 +82,7 @@ else ifeq ($(platform), ps3-cobra) # NGC/Wii - libogc else ifeq ($(libogc_platform), 1) +EXTERNAL_LIBOGC=1 CC = $(DEVKITPPC)/bin/powerpc-eabi-gcc$(EXE_EXT) CXX = $(DEVKITPPC)/bin/powerpc-eabi-g++$(EXE_EXT) LD = $(DEVKITPPC)/bin/powerpc-eabi-ld$(EXE_EXT) @@ -89,15 +90,32 @@ else ifeq ($(libogc_platform), 1) EXT_TARGET := $(TARGET_NAME)_$(platform).dol EXT_INTER_TARGET := $(TARGET_NAME)_$(platform).elf - INCLUDE += -I. -I$(DEVKITPRO)/libogc/include -Ideps/libz + INCLUDE += -I. -I$(DEVKITPRO)/libogc/include -Ideps/libz -Iwii/libogc/include + +ifeq ($(EXTERNAL_LIBOGC), 1) + +ifeq ($(platform), ngc) +LIBDIRS += -L$(DEVKITPRO)/libogc/lib/cube +else ifeq ($(platform), wii) +LIBDIRS += -L$(DEVKITPRO)/libogc/lib/wii +endif + +else + +ifeq ($(platform), ngc) +LIBDIRS += -Lwii/libogc/libs/cube +else ifeq ($(platform), wii) +LIBDIRS += -Lwii/libogc/libs/wii +endif + +endif ifeq ($(platform), ngc) - LIBDIRS += -L$(DEVKITPRO)/libogc/lib/cube MACHDEP := -DHW_DOL -mogc else ifeq ($(platform), wii) - LIBDIRS += -L$(DEVKITPRO)/libogc/lib/wii MACHDEP := -DHW_RVL -mrvl endif + LIBDIRS += -L. MACHDEP += -DGEKKO -mcpu=750 -meabi -mhard-float -DMSB_FIRST diff --git a/Makefile.wii.salamander b/Makefile.wii.salamander index 896a020c4b..29f57d78cb 100644 --- a/Makefile.wii.salamander +++ b/Makefile.wii.salamander @@ -6,6 +6,7 @@ DEBUG = 0 HAVE_LOGGER = 0 HAVE_FILE_LOGGER = 0 +EXTERNAL_LIBOGC = 1 # system platform system_platform = unix @@ -29,8 +30,15 @@ ELF2DOL = $(DEVKITPPC)/bin/elf2dol$(EXE_EXT) DOL_TARGET := retroarch-salamander_wii.dol ELF_TARGET := retroarch-salamander_wii.elf -INCLUDE := -I. -I$(DEVKITPRO)/libogc/include -Ilibretro-common/include -Ideps/libz -LIBDIRS := -L$(DEVKITPRO)/libogc/lib/wii -L. +INCLUDE := -I. -Ilibretro-common/include -Ideps/libz +LIBDIRS := -L. +ifeq ($(EXTERNAL_LIBOGC), 1) +INCLUDE += -I$(DEVKITPRO)/libogc/include +LIBDIRS := -L$(DEVKITPRO)/libogc/lib/wii +else +INCLUDE += -Iwii/libogc/include +LIBDIRS := -Lwii/libogc/libs/wii +endif MACHDEP := -DGEKKO -DHW_RVL -mrvl -mcpu=750 -meabi -mhard-float CFLAGS += -Wall -std=gnu99 $(MACHDEP) $(INCLUDE) diff --git a/wii/app_booter/Makefile b/wii/app_booter/Makefile index 4523f9045e..22576a832c 100644 --- a/wii/app_booter/Makefile +++ b/wii/app_booter/Makefile @@ -14,6 +14,7 @@ else ifneq ($(findstring MINGW,$(shell uname -a)),) system_platform = win endif +EXTERNAL_LIBOGC = 1 CC = $(DEVKITPPC)/bin/powerpc-eabi-gcc$(EXE_EXT) LD = $(DEVKITPPC)/bin/powerpc-eabi-ld$(EXE_EXT) OBJCOPY = $(DEVKITPPC)/bin/powerpc-eabi-objcopy$(EXE_EXT) @@ -23,8 +24,16 @@ ELF_TARGET := app_booter.elf LIBRETRO_COMM_DIR := ../../libretro-common -INCLUDE := -I. -I$(DEVKITPRO)/libogc/include -I$(LIBRETRO_COMM_DIR)/crt/include -LIBDIRS := -L$(DEVKITPRO)/libogc/lib/wii +LIBDIRS := +INCLUDE := -I. -I$(LIBRETRO_COMM_DIR)/crt/include + +ifeq ($(EXTERNAL_LIBOGC), 1) +INCLUDE += -I$(DEVKITPRO)/libogc/include +LIBDIRS += -L$(DEVKITPRO)/libogc/lib/wii +else +INCLUDE += -I../libogc/include +LIBDIRS += -Lwii/libogc/libs/wii +endif MACHDEP := -DHW_RVL -DGEKKO -mno-eabi -mno-sdata -mcpu=750 # todo: find out why -Os spits out linker errors From de638b66b5879a2248e7ce6f0d4739febb0c5746 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sat, 19 Aug 2017 08:46:04 +0200 Subject: [PATCH 061/137] (GX) Start adding internal libogc --- Makefile.griffin | 11 +- Makefile.wii.salamander | 22 +- griffin/griffin.c | 15 + wii/app_booter/Makefile | 2 +- wii/libogc/include/aesndlib.h | 61 + wii/libogc/include/asndlib.h | 383 ++ wii/libogc/include/bte/bd_addr.h | 79 + wii/libogc/include/bte/bte.h | 154 + wii/libogc/include/debug.h | 43 + wii/libogc/include/fat.h | 122 + wii/libogc/include/gccore.h | 150 + wii/libogc/include/gcmodplay.h | 44 + wii/libogc/include/gctypes.h | 110 + wii/libogc/include/gcutil.h | 12 + wii/libogc/include/iso9660.h | 27 + wii/libogc/include/libfatversion.h | 10 + wii/libogc/include/network.h | 287 + wii/libogc/include/ogc/aram.h | 272 + wii/libogc/include/ogc/arqmgr.h | 113 + wii/libogc/include/ogc/arqueue.h | 115 + wii/libogc/include/ogc/audio.h | 319 ++ wii/libogc/include/ogc/cache.h | 326 ++ wii/libogc/include/ogc/card.h | 605 +++ wii/libogc/include/ogc/cast.h | 239 + wii/libogc/include/ogc/color.h | 28 + wii/libogc/include/ogc/cond.h | 115 + wii/libogc/include/ogc/conf.h | 183 + wii/libogc/include/ogc/consol.h | 81 + wii/libogc/include/ogc/context.h | 51 + wii/libogc/include/ogc/disc_io.h | 68 + wii/libogc/include/ogc/dsp.h | 228 + wii/libogc/include/ogc/dvd.h | 369 ++ wii/libogc/include/ogc/es.h | 309 ++ wii/libogc/include/ogc/exi.h | 325 ++ wii/libogc/include/ogc/gu.h | 499 ++ wii/libogc/include/ogc/gx.h | 5256 +++++++++++++++++++ wii/libogc/include/ogc/gx_struct.h | 78 + wii/libogc/include/ogc/ios.h | 65 + wii/libogc/include/ogc/ipc.h | 103 + wii/libogc/include/ogc/irq.h | 189 + wii/libogc/include/ogc/isfs.h | 70 + wii/libogc/include/ogc/libversion.h | 13 + wii/libogc/include/ogc/lwp.h | 204 + wii/libogc/include/ogc/lwp_config.h | 19 + wii/libogc/include/ogc/lwp_heap.h | 59 + wii/libogc/include/ogc/lwp_messages.h | 79 + wii/libogc/include/ogc/lwp_mutex.h | 76 + wii/libogc/include/ogc/lwp_objmgr.h | 49 + wii/libogc/include/ogc/lwp_priority.h | 33 + wii/libogc/include/ogc/lwp_queue.h | 41 + wii/libogc/include/ogc/lwp_sema.h | 44 + wii/libogc/include/ogc/lwp_stack.h | 27 + wii/libogc/include/ogc/lwp_states.h | 48 + wii/libogc/include/ogc/lwp_threadq.h | 39 + wii/libogc/include/ogc/lwp_threads.h | 107 + wii/libogc/include/ogc/lwp_tqdata.h | 38 + wii/libogc/include/ogc/lwp_watchdog.h | 107 + wii/libogc/include/ogc/lwp_wkspace.h | 23 + wii/libogc/include/ogc/machine/asm.h | 338 ++ wii/libogc/include/ogc/machine/processor.h | 251 + wii/libogc/include/ogc/machine/spinlock.h | 191 + wii/libogc/include/ogc/message.h | 123 + wii/libogc/include/ogc/mutex.h | 103 + wii/libogc/include/ogc/pad.h | 97 + wii/libogc/include/ogc/semaphore.h | 96 + wii/libogc/include/ogc/si.h | 95 + wii/libogc/include/ogc/stm.h | 66 + wii/libogc/include/ogc/sys_state.h | 27 + wii/libogc/include/ogc/system.h | 350 ++ wii/libogc/include/ogc/texconv.h | 51 + wii/libogc/include/ogc/tpl.h | 31 + wii/libogc/include/ogc/usb.h | 239 + wii/libogc/include/ogc/usbgecko.h | 28 + wii/libogc/include/ogc/usbmouse.h | 30 + wii/libogc/include/ogc/usbstorage.h | 92 + wii/libogc/include/ogc/video.h | 206 + wii/libogc/include/ogc/video_types.h | 195 + wii/libogc/include/ogc/wiilaunch.h | 79 + wii/libogc/include/ogcsys.h | 41 + wii/libogc/include/samplerate.h | 196 + wii/libogc/include/sdcard/card_buf.h | 18 + wii/libogc/include/sdcard/card_cmn.h | 65 + wii/libogc/include/sdcard/card_io.h | 51 + wii/libogc/include/sdcard/gcsd.h | 45 + wii/libogc/include/sdcard/wiisd_io.h | 44 + wii/libogc/include/smb.h | 150 + wii/libogc/include/wiiuse/wiiuse.h | 748 +++ wii/libogc/include/wiiuse/wpad.h | 208 + wii/libogc/libdb/debug.c | 653 +++ wii/libogc/libdb/debug_handler.S | 169 + wii/libogc/libdb/debug_if.h | 20 + wii/libogc/libdb/debug_supp.c | 477 ++ wii/libogc/libdb/debug_supp.h | 32 + wii/libogc/libdb/geckousb.c | 198 + wii/libogc/libdb/geckousb.h | 8 + wii/libogc/libdb/tcpip.c | 466 ++ wii/libogc/libdb/tcpip.h | 53 + wii/libogc/libdb/uIP/bba.c | 835 +++ wii/libogc/libdb/uIP/bba.h | 14 + wii/libogc/libdb/uIP/memb.c | 48 + wii/libogc/libdb/uIP/memb.h | 21 + wii/libogc/libdb/uIP/memr.c | 155 + wii/libogc/libdb/uIP/memr.h | 12 + wii/libogc/libdb/uIP/uip.h | 176 + wii/libogc/libdb/uIP/uip_arch.c | 115 + wii/libogc/libdb/uIP/uip_arch.h | 170 + wii/libogc/libdb/uIP/uip_arp.c | 464 ++ wii/libogc/libdb/uIP/uip_arp.h | 150 + wii/libogc/libdb/uIP/uip_icmp.c | 101 + wii/libogc/libdb/uIP/uip_icmp.h | 60 + wii/libogc/libdb/uIP/uip_ip.c | 490 ++ wii/libogc/libdb/uIP/uip_ip.h | 135 + wii/libogc/libdb/uIP/uip_netif.c | 133 + wii/libogc/libdb/uIP/uip_netif.h | 65 + wii/libogc/libdb/uIP/uip_pbuf.c | 287 + wii/libogc/libdb/uIP/uip_pbuf.h | 49 + wii/libogc/libdb/uIP/uip_tcp.c | 1478 ++++++ wii/libogc/libdb/uIP/uip_tcp.h | 256 + wii/libogc/libdb/uIP/uipopt.h | 500 ++ wii/libogc/libfat/bit_ops.h | 57 + wii/libogc/libfat/cache.c | 323 ++ wii/libogc/libfat/cache.h | 128 + wii/libogc/libfat/common.h | 78 + wii/libogc/libfat/directory.c | 1129 ++++ wii/libogc/libfat/directory.h | 181 + wii/libogc/libfat/disc.c | 112 + wii/libogc/libfat/disc.h | 110 + wii/libogc/libfat/fatdir.c | 615 +++ wii/libogc/libfat/fatdir.h | 73 + wii/libogc/libfat/fatfile.c | 1213 +++++ wii/libogc/libfat/fatfile.h | 105 + wii/libogc/libfat/file_allocation_table.c | 393 ++ wii/libogc/libfat/file_allocation_table.h | 70 + wii/libogc/libfat/filetime.c | 107 + wii/libogc/libfat/filetime.h | 41 + wii/libogc/libfat/libfat.c | 255 + wii/libogc/libfat/lock.c | 29 + wii/libogc/libfat/lock.h | 72 + wii/libogc/libfat/mem_allocate.h | 52 + wii/libogc/libfat/partition.c | 448 ++ wii/libogc/libfat/partition.h | 107 + wii/libogc/libogc/aram.c | 378 ++ wii/libogc/libogc/argv.c | 50 + wii/libogc/libogc/arqmgr.c | 155 + wii/libogc/libogc/arqueue.c | 257 + wii/libogc/libogc/audio.c | 386 ++ wii/libogc/libogc/cache.c | 177 + wii/libogc/libogc/cache_asm.S | 471 ++ wii/libogc/libogc/card.c | 2977 +++++++++++ wii/libogc/libogc/cond.c | 199 + wii/libogc/libogc/conf.c | 479 ++ wii/libogc/libogc/console.c | 644 +++ wii/libogc/libogc/console.h | 30 + wii/libogc/libogc/console_font_8x16.c | 4613 ++++++++++++++++ wii/libogc/libogc/decrementer.c | 47 + wii/libogc/libogc/decrementer_handler.S | 167 + wii/libogc/libogc/depackrnc.S | 279 + wii/libogc/libogc/depackrnc1.c | 309 ++ wii/libogc/libogc/dsp.c | 459 ++ wii/libogc/libogc/dvd.c | 2432 +++++++++ wii/libogc/libogc/es.c | 1091 ++++ wii/libogc/libogc/exception.c | 266 + wii/libogc/libogc/exception_handler.S | 243 + wii/libogc/libogc/exi.c | 866 +++ wii/libogc/libogc/gcsd.c | 174 + wii/libogc/libogc/gu.c | 916 ++++ wii/libogc/libogc/gu_psasm.S | 723 +++ wii/libogc/libogc/gx.c | 5099 ++++++++++++++++++ wii/libogc/libogc/gx_regdef.h | 147 + wii/libogc/libogc/ios.c | 379 ++ wii/libogc/libogc/ipc.c | 1286 +++++ wii/libogc/libogc/irq.c | 421 ++ wii/libogc/libogc/irq_handler.S | 166 + wii/libogc/libogc/isfs.c | 844 +++ wii/libogc/libogc/kprintf.c | 291 + wii/libogc/libogc/lock_supp.c | 64 + wii/libogc/libogc/lwp.c | 415 ++ wii/libogc/libogc/lwp_handler.S | 565 ++ wii/libogc/libogc/lwp_heap.c | 198 + wii/libogc/libogc/lwp_heap.inl | 75 + wii/libogc/libogc/lwp_messages.c | 258 + wii/libogc/libogc/lwp_messages.inl | 62 + wii/libogc/libogc/lwp_mutex.c | 95 + wii/libogc/libogc/lwp_mutex.inl | 88 + wii/libogc/libogc/lwp_objmgr.c | 129 + wii/libogc/libogc/lwp_objmgr.inl | 19 + wii/libogc/libogc/lwp_priority.c | 14 + wii/libogc/libogc/lwp_priority.inl | 42 + wii/libogc/libogc/lwp_queue.c | 68 + wii/libogc/libogc/lwp_queue.inl | 96 + wii/libogc/libogc/lwp_sema.c | 63 + wii/libogc/libogc/lwp_sema.inl | 38 + wii/libogc/libogc/lwp_stack.c | 27 + wii/libogc/libogc/lwp_stack.inl | 14 + wii/libogc/libogc/lwp_states.inl | 109 + wii/libogc/libogc/lwp_threadq.c | 497 ++ wii/libogc/libogc/lwp_threadq.inl | 9 + wii/libogc/libogc/lwp_threads.c | 750 +++ wii/libogc/libogc/lwp_threads.inl | 90 + wii/libogc/libogc/lwp_watchdog.c | 192 + wii/libogc/libogc/lwp_watchdog.inl | 84 + wii/libogc/libogc/lwp_wkspace.c | 45 + wii/libogc/libogc/lwp_wkspace.inl | 14 + wii/libogc/libogc/malloc_lock.c | 81 + wii/libogc/libogc/message.c | 167 + wii/libogc/libogc/mutex.c | 160 + wii/libogc/libogc/network_common.c | 198 + wii/libogc/libogc/network_wii.c | 1167 ++++ wii/libogc/libogc/newlibc.c | 72 + wii/libogc/libogc/ogc_crt0.S | 157 + wii/libogc/libogc/pad.c | 756 +++ wii/libogc/libogc/sbrk.c | 92 + wii/libogc/libogc/sdgecko_buf.c | 47 + wii/libogc/libogc/sdgecko_io.c | 1356 +++++ wii/libogc/libogc/semaphore.c | 150 + wii/libogc/libogc/si.c | 693 +++ wii/libogc/libogc/stm.c | 243 + wii/libogc/libogc/sys_state.c | 3 + wii/libogc/libogc/sys_state.inl | 44 + wii/libogc/libogc/system.c | 1723 ++++++ wii/libogc/libogc/system_asm.S | 380 ++ wii/libogc/libogc/texconv.c | 77 + wii/libogc/libogc/timesupp.c | 323 ++ wii/libogc/libogc/timesupp.h | 27 + wii/libogc/libogc/tpl.c | 346 ++ wii/libogc/libogc/usb.c | 1464 ++++++ wii/libogc/libogc/usbgecko.c | 374 ++ wii/libogc/libogc/usbmouse.c | 407 ++ wii/libogc/libogc/usbstorage.c | 1008 ++++ wii/libogc/libogc/video.c | 2594 +++++++++ wii/libogc/libogc/video_asm.S | 106 + wii/libogc/libogc/wiilaunch.c | 409 ++ wii/libogc/libogc/wiisd.c | 632 +++ wii/libogc/libogc_license.txt | 20 + wii/libogc/libwiikeyboard/keyboard.c | 664 +++ wii/libogc/libwiikeyboard/ukbdmap.c | 1132 ++++ wii/libogc/libwiikeyboard/usbkeyboard.c | 495 ++ wii/libogc/libwiikeyboard/wskbdutil.c | 492 ++ wii/libogc/libwiikeyboard/wsksymvar.h | 69 + wii/libogc/lwbt/bt.h | 119 + wii/libogc/lwbt/btarch.h | 156 + wii/libogc/lwbt/bte.c | 1361 +++++ wii/libogc/lwbt/btmemb.c | 70 + wii/libogc/lwbt/btmemb.h | 21 + wii/libogc/lwbt/btmemr.c | 166 + wii/libogc/lwbt/btmemr.h | 12 + wii/libogc/lwbt/btopt.h | 352 ++ wii/libogc/lwbt/btpbuf.c | 358 ++ wii/libogc/lwbt/btpbuf.h | 49 + wii/libogc/lwbt/hci.c | 1772 +++++++ wii/libogc/lwbt/hci.h | 482 ++ wii/libogc/lwbt/l2cap.c | 1555 ++++++ wii/libogc/lwbt/l2cap.h | 356 ++ wii/libogc/lwbt/physbusif.c | 342 ++ wii/libogc/lwbt/physbusif.h | 29 + wii/libogc/lwip/arch/gc/netif/gcif.c | 1042 ++++ wii/libogc/lwip/core/dhcp.c | 1457 +++++ wii/libogc/lwip/core/inet.c | 330 ++ wii/libogc/lwip/core/inet6.c | 168 + wii/libogc/lwip/core/ipv4/icmp.c | 203 + wii/libogc/lwip/core/ipv4/ip.c | 508 ++ wii/libogc/lwip/core/ipv4/ip_addr.c | 72 + wii/libogc/lwip/core/ipv4/ip_frag.c | 366 ++ wii/libogc/lwip/core/mem.c | 310 ++ wii/libogc/lwip/core/memp.c | 273 + wii/libogc/lwip/core/netif.c | 288 + wii/libogc/lwip/core/pbuf.c | 957 ++++ wii/libogc/lwip/core/raw.c | 326 ++ wii/libogc/lwip/core/stats.c | 115 + wii/libogc/lwip/core/sys.c | 294 ++ wii/libogc/lwip/core/tcp.c | 1171 +++++ wii/libogc/lwip/core/tcp_in.c | 1199 +++++ wii/libogc/lwip/core/tcp_out.c | 721 +++ wii/libogc/lwip/core/udp.c | 655 +++ wii/libogc/lwip/netif/etharp.c | 831 +++ wii/libogc/lwip/netif/loopif.c | 139 + wii/libogc/lwip/netif/skeleton/ethernetif.c | 302 ++ wii/libogc/lwip/netif/skeleton/slipif.c | 210 + wii/libogc/lwip/netio.c | 103 + wii/libogc/lwip/network.c | 2248 ++++++++ wii/libogc/wiiuse/classic.c | 225 + wii/libogc/wiiuse/classic.h | 56 + wii/libogc/wiiuse/definitions.h | 55 + wii/libogc/wiiuse/dynamics.c | 240 + wii/libogc/wiiuse/dynamics.h | 59 + wii/libogc/wiiuse/events.c | 336 ++ wii/libogc/wiiuse/events.h | 17 + wii/libogc/wiiuse/io.c | 164 + wii/libogc/wiiuse/io.h | 26 + wii/libogc/wiiuse/io_wii.c | 181 + wii/libogc/wiiuse/ir.c | 837 +++ wii/libogc/wiiuse/ir.h | 25 + wii/libogc/wiiuse/license_libogc.txt | 641 +++ wii/libogc/wiiuse/motion_plus.c | 95 + wii/libogc/wiiuse/motion_plus.h | 26 + wii/libogc/wiiuse/nunchuk.c | 157 + wii/libogc/wiiuse/nunchuk.h | 21 + wii/libogc/wiiuse/os.h | 31 + wii/libogc/wiiuse/speaker.c | 145 + wii/libogc/wiiuse/speaker.h | 33 + wii/libogc/wiiuse/wiiuse.c | 337 ++ wii/libogc/wiiuse/wiiuse_internal.h | 280 + wii/libogc/wiiuse/wpad.c | 1106 ++++ 303 files changed, 106531 insertions(+), 5 deletions(-) create mode 100644 wii/libogc/include/aesndlib.h create mode 100644 wii/libogc/include/asndlib.h create mode 100644 wii/libogc/include/bte/bd_addr.h create mode 100644 wii/libogc/include/bte/bte.h create mode 100644 wii/libogc/include/debug.h create mode 100644 wii/libogc/include/fat.h create mode 100644 wii/libogc/include/gccore.h create mode 100644 wii/libogc/include/gcmodplay.h create mode 100644 wii/libogc/include/gctypes.h create mode 100644 wii/libogc/include/gcutil.h create mode 100644 wii/libogc/include/iso9660.h create mode 100644 wii/libogc/include/libfatversion.h create mode 100644 wii/libogc/include/network.h create mode 100644 wii/libogc/include/ogc/aram.h create mode 100644 wii/libogc/include/ogc/arqmgr.h create mode 100644 wii/libogc/include/ogc/arqueue.h create mode 100644 wii/libogc/include/ogc/audio.h create mode 100644 wii/libogc/include/ogc/cache.h create mode 100644 wii/libogc/include/ogc/card.h create mode 100644 wii/libogc/include/ogc/cast.h create mode 100644 wii/libogc/include/ogc/color.h create mode 100644 wii/libogc/include/ogc/cond.h create mode 100644 wii/libogc/include/ogc/conf.h create mode 100644 wii/libogc/include/ogc/consol.h create mode 100644 wii/libogc/include/ogc/context.h create mode 100644 wii/libogc/include/ogc/disc_io.h create mode 100644 wii/libogc/include/ogc/dsp.h create mode 100644 wii/libogc/include/ogc/dvd.h create mode 100644 wii/libogc/include/ogc/es.h create mode 100644 wii/libogc/include/ogc/exi.h create mode 100644 wii/libogc/include/ogc/gu.h create mode 100644 wii/libogc/include/ogc/gx.h create mode 100644 wii/libogc/include/ogc/gx_struct.h create mode 100644 wii/libogc/include/ogc/ios.h create mode 100644 wii/libogc/include/ogc/ipc.h create mode 100644 wii/libogc/include/ogc/irq.h create mode 100644 wii/libogc/include/ogc/isfs.h create mode 100644 wii/libogc/include/ogc/libversion.h create mode 100644 wii/libogc/include/ogc/lwp.h create mode 100644 wii/libogc/include/ogc/lwp_config.h create mode 100644 wii/libogc/include/ogc/lwp_heap.h create mode 100644 wii/libogc/include/ogc/lwp_messages.h create mode 100644 wii/libogc/include/ogc/lwp_mutex.h create mode 100644 wii/libogc/include/ogc/lwp_objmgr.h create mode 100644 wii/libogc/include/ogc/lwp_priority.h create mode 100644 wii/libogc/include/ogc/lwp_queue.h create mode 100644 wii/libogc/include/ogc/lwp_sema.h create mode 100644 wii/libogc/include/ogc/lwp_stack.h create mode 100644 wii/libogc/include/ogc/lwp_states.h create mode 100644 wii/libogc/include/ogc/lwp_threadq.h create mode 100644 wii/libogc/include/ogc/lwp_threads.h create mode 100644 wii/libogc/include/ogc/lwp_tqdata.h create mode 100644 wii/libogc/include/ogc/lwp_watchdog.h create mode 100644 wii/libogc/include/ogc/lwp_wkspace.h create mode 100644 wii/libogc/include/ogc/machine/asm.h create mode 100644 wii/libogc/include/ogc/machine/processor.h create mode 100644 wii/libogc/include/ogc/machine/spinlock.h create mode 100644 wii/libogc/include/ogc/message.h create mode 100644 wii/libogc/include/ogc/mutex.h create mode 100644 wii/libogc/include/ogc/pad.h create mode 100644 wii/libogc/include/ogc/semaphore.h create mode 100644 wii/libogc/include/ogc/si.h create mode 100644 wii/libogc/include/ogc/stm.h create mode 100644 wii/libogc/include/ogc/sys_state.h create mode 100644 wii/libogc/include/ogc/system.h create mode 100644 wii/libogc/include/ogc/texconv.h create mode 100644 wii/libogc/include/ogc/tpl.h create mode 100644 wii/libogc/include/ogc/usb.h create mode 100644 wii/libogc/include/ogc/usbgecko.h create mode 100644 wii/libogc/include/ogc/usbmouse.h create mode 100644 wii/libogc/include/ogc/usbstorage.h create mode 100644 wii/libogc/include/ogc/video.h create mode 100644 wii/libogc/include/ogc/video_types.h create mode 100644 wii/libogc/include/ogc/wiilaunch.h create mode 100644 wii/libogc/include/ogcsys.h create mode 100644 wii/libogc/include/samplerate.h create mode 100644 wii/libogc/include/sdcard/card_buf.h create mode 100644 wii/libogc/include/sdcard/card_cmn.h create mode 100644 wii/libogc/include/sdcard/card_io.h create mode 100644 wii/libogc/include/sdcard/gcsd.h create mode 100644 wii/libogc/include/sdcard/wiisd_io.h create mode 100644 wii/libogc/include/smb.h create mode 100644 wii/libogc/include/wiiuse/wiiuse.h create mode 100644 wii/libogc/include/wiiuse/wpad.h create mode 100644 wii/libogc/libdb/debug.c create mode 100644 wii/libogc/libdb/debug_handler.S create mode 100644 wii/libogc/libdb/debug_if.h create mode 100644 wii/libogc/libdb/debug_supp.c create mode 100644 wii/libogc/libdb/debug_supp.h create mode 100644 wii/libogc/libdb/geckousb.c create mode 100644 wii/libogc/libdb/geckousb.h create mode 100644 wii/libogc/libdb/tcpip.c create mode 100644 wii/libogc/libdb/tcpip.h create mode 100644 wii/libogc/libdb/uIP/bba.c create mode 100644 wii/libogc/libdb/uIP/bba.h create mode 100644 wii/libogc/libdb/uIP/memb.c create mode 100644 wii/libogc/libdb/uIP/memb.h create mode 100644 wii/libogc/libdb/uIP/memr.c create mode 100644 wii/libogc/libdb/uIP/memr.h create mode 100644 wii/libogc/libdb/uIP/uip.h create mode 100644 wii/libogc/libdb/uIP/uip_arch.c create mode 100644 wii/libogc/libdb/uIP/uip_arch.h create mode 100644 wii/libogc/libdb/uIP/uip_arp.c create mode 100644 wii/libogc/libdb/uIP/uip_arp.h create mode 100644 wii/libogc/libdb/uIP/uip_icmp.c create mode 100644 wii/libogc/libdb/uIP/uip_icmp.h create mode 100644 wii/libogc/libdb/uIP/uip_ip.c create mode 100644 wii/libogc/libdb/uIP/uip_ip.h create mode 100644 wii/libogc/libdb/uIP/uip_netif.c create mode 100644 wii/libogc/libdb/uIP/uip_netif.h create mode 100644 wii/libogc/libdb/uIP/uip_pbuf.c create mode 100644 wii/libogc/libdb/uIP/uip_pbuf.h create mode 100644 wii/libogc/libdb/uIP/uip_tcp.c create mode 100644 wii/libogc/libdb/uIP/uip_tcp.h create mode 100644 wii/libogc/libdb/uIP/uipopt.h create mode 100644 wii/libogc/libfat/bit_ops.h create mode 100644 wii/libogc/libfat/cache.c create mode 100644 wii/libogc/libfat/cache.h create mode 100644 wii/libogc/libfat/common.h create mode 100644 wii/libogc/libfat/directory.c create mode 100644 wii/libogc/libfat/directory.h create mode 100644 wii/libogc/libfat/disc.c create mode 100644 wii/libogc/libfat/disc.h create mode 100644 wii/libogc/libfat/fatdir.c create mode 100644 wii/libogc/libfat/fatdir.h create mode 100644 wii/libogc/libfat/fatfile.c create mode 100644 wii/libogc/libfat/fatfile.h create mode 100644 wii/libogc/libfat/file_allocation_table.c create mode 100644 wii/libogc/libfat/file_allocation_table.h create mode 100644 wii/libogc/libfat/filetime.c create mode 100644 wii/libogc/libfat/filetime.h create mode 100644 wii/libogc/libfat/libfat.c create mode 100644 wii/libogc/libfat/lock.c create mode 100644 wii/libogc/libfat/lock.h create mode 100644 wii/libogc/libfat/mem_allocate.h create mode 100644 wii/libogc/libfat/partition.c create mode 100644 wii/libogc/libfat/partition.h create mode 100644 wii/libogc/libogc/aram.c create mode 100644 wii/libogc/libogc/argv.c create mode 100644 wii/libogc/libogc/arqmgr.c create mode 100644 wii/libogc/libogc/arqueue.c create mode 100644 wii/libogc/libogc/audio.c create mode 100644 wii/libogc/libogc/cache.c create mode 100644 wii/libogc/libogc/cache_asm.S create mode 100644 wii/libogc/libogc/card.c create mode 100644 wii/libogc/libogc/cond.c create mode 100644 wii/libogc/libogc/conf.c create mode 100644 wii/libogc/libogc/console.c create mode 100644 wii/libogc/libogc/console.h create mode 100644 wii/libogc/libogc/console_font_8x16.c create mode 100644 wii/libogc/libogc/decrementer.c create mode 100644 wii/libogc/libogc/decrementer_handler.S create mode 100644 wii/libogc/libogc/depackrnc.S create mode 100644 wii/libogc/libogc/depackrnc1.c create mode 100644 wii/libogc/libogc/dsp.c create mode 100644 wii/libogc/libogc/dvd.c create mode 100644 wii/libogc/libogc/es.c create mode 100644 wii/libogc/libogc/exception.c create mode 100644 wii/libogc/libogc/exception_handler.S create mode 100644 wii/libogc/libogc/exi.c create mode 100644 wii/libogc/libogc/gcsd.c create mode 100644 wii/libogc/libogc/gu.c create mode 100644 wii/libogc/libogc/gu_psasm.S create mode 100644 wii/libogc/libogc/gx.c create mode 100644 wii/libogc/libogc/gx_regdef.h create mode 100644 wii/libogc/libogc/ios.c create mode 100644 wii/libogc/libogc/ipc.c create mode 100644 wii/libogc/libogc/irq.c create mode 100644 wii/libogc/libogc/irq_handler.S create mode 100644 wii/libogc/libogc/isfs.c create mode 100644 wii/libogc/libogc/kprintf.c create mode 100644 wii/libogc/libogc/lock_supp.c create mode 100644 wii/libogc/libogc/lwp.c create mode 100644 wii/libogc/libogc/lwp_handler.S create mode 100644 wii/libogc/libogc/lwp_heap.c create mode 100644 wii/libogc/libogc/lwp_heap.inl create mode 100644 wii/libogc/libogc/lwp_messages.c create mode 100644 wii/libogc/libogc/lwp_messages.inl create mode 100644 wii/libogc/libogc/lwp_mutex.c create mode 100644 wii/libogc/libogc/lwp_mutex.inl create mode 100644 wii/libogc/libogc/lwp_objmgr.c create mode 100644 wii/libogc/libogc/lwp_objmgr.inl create mode 100644 wii/libogc/libogc/lwp_priority.c create mode 100644 wii/libogc/libogc/lwp_priority.inl create mode 100644 wii/libogc/libogc/lwp_queue.c create mode 100644 wii/libogc/libogc/lwp_queue.inl create mode 100644 wii/libogc/libogc/lwp_sema.c create mode 100644 wii/libogc/libogc/lwp_sema.inl create mode 100644 wii/libogc/libogc/lwp_stack.c create mode 100644 wii/libogc/libogc/lwp_stack.inl create mode 100644 wii/libogc/libogc/lwp_states.inl create mode 100644 wii/libogc/libogc/lwp_threadq.c create mode 100644 wii/libogc/libogc/lwp_threadq.inl create mode 100644 wii/libogc/libogc/lwp_threads.c create mode 100644 wii/libogc/libogc/lwp_threads.inl create mode 100644 wii/libogc/libogc/lwp_watchdog.c create mode 100644 wii/libogc/libogc/lwp_watchdog.inl create mode 100644 wii/libogc/libogc/lwp_wkspace.c create mode 100644 wii/libogc/libogc/lwp_wkspace.inl create mode 100644 wii/libogc/libogc/malloc_lock.c create mode 100644 wii/libogc/libogc/message.c create mode 100644 wii/libogc/libogc/mutex.c create mode 100644 wii/libogc/libogc/network_common.c create mode 100644 wii/libogc/libogc/network_wii.c create mode 100644 wii/libogc/libogc/newlibc.c create mode 100644 wii/libogc/libogc/ogc_crt0.S create mode 100644 wii/libogc/libogc/pad.c create mode 100644 wii/libogc/libogc/sbrk.c create mode 100644 wii/libogc/libogc/sdgecko_buf.c create mode 100644 wii/libogc/libogc/sdgecko_io.c create mode 100644 wii/libogc/libogc/semaphore.c create mode 100644 wii/libogc/libogc/si.c create mode 100644 wii/libogc/libogc/stm.c create mode 100644 wii/libogc/libogc/sys_state.c create mode 100644 wii/libogc/libogc/sys_state.inl create mode 100644 wii/libogc/libogc/system.c create mode 100644 wii/libogc/libogc/system_asm.S create mode 100644 wii/libogc/libogc/texconv.c create mode 100644 wii/libogc/libogc/timesupp.c create mode 100644 wii/libogc/libogc/timesupp.h create mode 100644 wii/libogc/libogc/tpl.c create mode 100644 wii/libogc/libogc/usb.c create mode 100644 wii/libogc/libogc/usbgecko.c create mode 100644 wii/libogc/libogc/usbmouse.c create mode 100644 wii/libogc/libogc/usbstorage.c create mode 100644 wii/libogc/libogc/video.c create mode 100644 wii/libogc/libogc/video_asm.S create mode 100644 wii/libogc/libogc/wiilaunch.c create mode 100644 wii/libogc/libogc/wiisd.c create mode 100644 wii/libogc/libogc_license.txt create mode 100644 wii/libogc/libwiikeyboard/keyboard.c create mode 100644 wii/libogc/libwiikeyboard/ukbdmap.c create mode 100644 wii/libogc/libwiikeyboard/usbkeyboard.c create mode 100644 wii/libogc/libwiikeyboard/wskbdutil.c create mode 100644 wii/libogc/libwiikeyboard/wsksymvar.h create mode 100644 wii/libogc/lwbt/bt.h create mode 100644 wii/libogc/lwbt/btarch.h create mode 100644 wii/libogc/lwbt/bte.c create mode 100644 wii/libogc/lwbt/btmemb.c create mode 100644 wii/libogc/lwbt/btmemb.h create mode 100644 wii/libogc/lwbt/btmemr.c create mode 100644 wii/libogc/lwbt/btmemr.h create mode 100644 wii/libogc/lwbt/btopt.h create mode 100644 wii/libogc/lwbt/btpbuf.c create mode 100644 wii/libogc/lwbt/btpbuf.h create mode 100644 wii/libogc/lwbt/hci.c create mode 100644 wii/libogc/lwbt/hci.h create mode 100644 wii/libogc/lwbt/l2cap.c create mode 100644 wii/libogc/lwbt/l2cap.h create mode 100644 wii/libogc/lwbt/physbusif.c create mode 100644 wii/libogc/lwbt/physbusif.h create mode 100644 wii/libogc/lwip/arch/gc/netif/gcif.c create mode 100644 wii/libogc/lwip/core/dhcp.c create mode 100644 wii/libogc/lwip/core/inet.c create mode 100644 wii/libogc/lwip/core/inet6.c create mode 100644 wii/libogc/lwip/core/ipv4/icmp.c create mode 100644 wii/libogc/lwip/core/ipv4/ip.c create mode 100644 wii/libogc/lwip/core/ipv4/ip_addr.c create mode 100644 wii/libogc/lwip/core/ipv4/ip_frag.c create mode 100644 wii/libogc/lwip/core/mem.c create mode 100644 wii/libogc/lwip/core/memp.c create mode 100644 wii/libogc/lwip/core/netif.c create mode 100644 wii/libogc/lwip/core/pbuf.c create mode 100644 wii/libogc/lwip/core/raw.c create mode 100644 wii/libogc/lwip/core/stats.c create mode 100644 wii/libogc/lwip/core/sys.c create mode 100644 wii/libogc/lwip/core/tcp.c create mode 100644 wii/libogc/lwip/core/tcp_in.c create mode 100644 wii/libogc/lwip/core/tcp_out.c create mode 100644 wii/libogc/lwip/core/udp.c create mode 100644 wii/libogc/lwip/netif/etharp.c create mode 100644 wii/libogc/lwip/netif/loopif.c create mode 100644 wii/libogc/lwip/netif/skeleton/ethernetif.c create mode 100644 wii/libogc/lwip/netif/skeleton/slipif.c create mode 100644 wii/libogc/lwip/netio.c create mode 100644 wii/libogc/lwip/network.c create mode 100644 wii/libogc/wiiuse/classic.c create mode 100644 wii/libogc/wiiuse/classic.h create mode 100644 wii/libogc/wiiuse/definitions.h create mode 100644 wii/libogc/wiiuse/dynamics.c create mode 100644 wii/libogc/wiiuse/dynamics.h create mode 100644 wii/libogc/wiiuse/events.c create mode 100644 wii/libogc/wiiuse/events.h create mode 100644 wii/libogc/wiiuse/io.c create mode 100644 wii/libogc/wiiuse/io.h create mode 100644 wii/libogc/wiiuse/io_wii.c create mode 100644 wii/libogc/wiiuse/ir.c create mode 100644 wii/libogc/wiiuse/ir.h create mode 100644 wii/libogc/wiiuse/license_libogc.txt create mode 100644 wii/libogc/wiiuse/motion_plus.c create mode 100644 wii/libogc/wiiuse/motion_plus.h create mode 100644 wii/libogc/wiiuse/nunchuk.c create mode 100644 wii/libogc/wiiuse/nunchuk.h create mode 100644 wii/libogc/wiiuse/os.h create mode 100644 wii/libogc/wiiuse/speaker.c create mode 100644 wii/libogc/wiiuse/speaker.h create mode 100644 wii/libogc/wiiuse/wiiuse.c create mode 100644 wii/libogc/wiiuse/wiiuse_internal.h create mode 100644 wii/libogc/wiiuse/wpad.c diff --git a/Makefile.griffin b/Makefile.griffin index 4838988047..4790d931b3 100644 --- a/Makefile.griffin +++ b/Makefile.griffin @@ -82,7 +82,7 @@ else ifeq ($(platform), ps3-cobra) # NGC/Wii - libogc else ifeq ($(libogc_platform), 1) -EXTERNAL_LIBOGC=1 +EXTERNAL_LIBOGC=0 CC = $(DEVKITPPC)/bin/powerpc-eabi-gcc$(EXE_EXT) CXX = $(DEVKITPPC)/bin/powerpc-eabi-g++$(EXE_EXT) LD = $(DEVKITPPC)/bin/powerpc-eabi-ld$(EXE_EXT) @@ -93,6 +93,8 @@ EXTERNAL_LIBOGC=1 INCLUDE += -I. -I$(DEVKITPRO)/libogc/include -Ideps/libz -Iwii/libogc/include ifeq ($(EXTERNAL_LIBOGC), 1) + CFLAGS += -DEXTERNAL_LIBOGC + CXXFLAGS += -DEXTERNAL_LIBOGC ifeq ($(platform), ngc) LIBDIRS += -L$(DEVKITPRO)/libogc/lib/cube @@ -101,6 +103,8 @@ LIBDIRS += -L$(DEVKITPRO)/libogc/lib/wii endif else + CFLAGS += -DINTERNAL_LIBOGC + CXXFLAGS += -DINTERNAL_LIBOGC ifeq ($(platform), ngc) LIBDIRS += -Lwii/libogc/libs/cube @@ -130,7 +134,10 @@ ifeq ($(BIG_STACK), 1) LDFLAGS += -T bootstrap/gx/rvl.ld endif endif - LIBS += -lfat -logc + LIBS += -logc +ifeq ($(EXTERNAL_LIBOGC), 1) + LIBS += -lfat +endif ifeq ($(platform), wii) LIBS += -lwiiuse -lbte diff --git a/Makefile.wii.salamander b/Makefile.wii.salamander index 29f57d78cb..24c6f28d77 100644 --- a/Makefile.wii.salamander +++ b/Makefile.wii.salamander @@ -6,7 +6,7 @@ DEBUG = 0 HAVE_LOGGER = 0 HAVE_FILE_LOGGER = 0 -EXTERNAL_LIBOGC = 1 +EXTERNAL_LIBOGC = 0 # system platform system_platform = unix @@ -43,7 +43,11 @@ endif MACHDEP := -DGEKKO -DHW_RVL -mrvl -mcpu=750 -meabi -mhard-float CFLAGS += -Wall -std=gnu99 $(MACHDEP) $(INCLUDE) LDFLAGS := $(MACHDEP) -Wl,-Map,$(notdir $(ELF_TARGET)).map -LIBS := -lfat -lwiiuse -logc -lbte +LIBS := -lwiiuse -logc -lbte + +ifeq ($(EXTERNAL_LIBOGC), 1) +LIBS += -lfat +endif APP_BOOTER_DIR = wii/app_booter @@ -67,6 +71,20 @@ OBJ = frontend/frontend_salamander.o \ verbosity.o \ $(APP_BOOTER_DIR)/app_booter.binobj +ifeq ($(EXTERNAL_LIBOGC), 1) +else +OBJ += wii/libogc/libfat/cache.o \ + wii/libogc/libfat/directory.o \ + wii/libogc/libfat/disc.o \ + wii/libogc/libfat/fatdir.o \ + wii/libogc/libfat/fatfile.o \ + wii/libogc/libfat/file_allocation_table.o \ + wii/libogc/libfat/filetime.o \ + wii/libogc/libfat/libfat.o \ + wii/libogc/libfat/lock.o \ + wii/libogc/libfat/partition.o +endif + ifeq ($(HAVE_LOGGER), 1) CFLAGS += -DHAVE_LOGGER CFLAGS += -DPC_DEVELOPMENT_IP_ADDRESS=\"$(PC_DEVELOPMENT_IP_ADDRESS)\" -DPC_DEVELOPMENT_UDP_PORT=$(PC_DEVELOPMENT_UDP_PORT) diff --git a/griffin/griffin.c b/griffin/griffin.c index df49afc43a..9eeebde565 100644 --- a/griffin/griffin.c +++ b/griffin/griffin.c @@ -45,6 +45,21 @@ CONSOLE EXTENSIONS #include "../memory/ngc/ssaram.c" #endif +#ifdef INTERNAL_LIBOGC +#ifdef HW_RVL +#include "../wii/libogc/libfat/cache.c" +#include "../wii/libogc/libfat/directory.c" +#include "../wii/libogc/libfat/disc.c" +#include "../wii/libogc/libfat/fatdir.c" +#include "../wii/libogc/libfat/fatfile.c" +#include "../wii/libogc/libfat/file_allocation_table.c" +#include "../wii/libogc/libfat/filetime.c" +#include "../wii/libogc/libfat/libfat.c" +#include "../wii/libogc/libfat/lock.c" +#include "../wii/libogc/libfat/partition.c" +#endif +#endif + #endif /*============================================================ diff --git a/wii/app_booter/Makefile b/wii/app_booter/Makefile index 22576a832c..6a4b48fc92 100644 --- a/wii/app_booter/Makefile +++ b/wii/app_booter/Makefile @@ -14,7 +14,7 @@ else ifneq ($(findstring MINGW,$(shell uname -a)),) system_platform = win endif -EXTERNAL_LIBOGC = 1 +EXTERNAL_LIBOGC = 0 CC = $(DEVKITPPC)/bin/powerpc-eabi-gcc$(EXE_EXT) LD = $(DEVKITPPC)/bin/powerpc-eabi-ld$(EXE_EXT) OBJCOPY = $(DEVKITPPC)/bin/powerpc-eabi-objcopy$(EXE_EXT) diff --git a/wii/libogc/include/aesndlib.h b/wii/libogc/include/aesndlib.h new file mode 100644 index 0000000000..4d47d045c1 --- /dev/null +++ b/wii/libogc/include/aesndlib.h @@ -0,0 +1,61 @@ +#ifndef __AESNDLIB_H__ +#define __AESNDLIB_H__ + +#include + +#define MAX_VOICES 32 +#define SND_BUFFERSIZE 384 // output 2ms sound data at 48KHz +#define DSP_STREAMBUFFER_SIZE 1152 // input 2ms sound data at max. 144KHz + +#if defined(HW_DOL) + #define DSP_DEFAULT_FREQ 48044 +#elif defined(HW_RVL) + #define DSP_DEFAULT_FREQ 48000 +#endif + +#define VOICE_STATE_STOPPED 0 +#define VOICE_STATE_RUNNING 1 +#define VOICE_STATE_STREAM 2 + +#define VOICE_MONO8 0x00000000 +#define VOICE_STEREO8 0x00000001 +#define VOICE_MONO16 0x00000002 +#define VOICE_STEREO16 0x00000003 + +#define VOICE_FREQ32KHZ 32000 +#define VOICE_FREQ48KHZ 48000 + +#ifdef __cplusplus + extern "C" { +#endif + +typedef struct aesndpb_t AESNDPB; + +typedef void (*AESNDVoiceCallback)(AESNDPB *pb,u32 state); +typedef void (*AESNDAudioCallback)(void *audio_buffer,u32 len); + +void AESND_Init(); +void AESND_Reset(); +void AESND_Pause(bool pause); +u32 AESND_GetDSPProcessTime(); +f32 AESND_GetDSPProcessUsage(); +AESNDAudioCallback AESND_RegisterAudioCallback(AESNDAudioCallback cb); + +AESNDPB* AESND_AllocateVoice(AESNDVoiceCallback cb); +void AESND_FreeVoice(AESNDPB *pb); +void AESND_SetVoiceStop(AESNDPB *pb,bool stop); +void AESND_SetVoiceMute(AESNDPB *pb,bool mute); +void AESND_SetVoiceLoop(AESNDPB *pb,bool loop); +void AESND_SetVoiceFormat(AESNDPB *pb,u32 format); +void AESND_SetVoiceStream(AESNDPB *pb,bool stream); +void AESND_SetVoiceFrequency(AESNDPB *pb,u32 freq); +void AESND_SetVoiceVolume(AESNDPB *pb,u16 volume_l,u16 volume_r); +void AESND_SetVoiceBuffer(AESNDPB *pb,const void *buffer,u32 len); +void AESND_PlayVoice(AESNDPB *pb,u32 format,const void *buffer,u32 len,u32 freq,u32 delay,bool looped); +AESNDVoiceCallback AESND_RegisterVoiceCallback(AESNDPB *pb,AESNDVoiceCallback cb); + +#ifdef __cplusplus + } +#endif + +#endif diff --git a/wii/libogc/include/asndlib.h b/wii/libogc/include/asndlib.h new file mode 100644 index 0000000000..ed62daf57a --- /dev/null +++ b/wii/libogc/include/asndlib.h @@ -0,0 +1,383 @@ +/* ASNDLIB -> accelerated sound lib using the DSP + +Copyright (c) 2008 Hermes +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are +permitted provided that the following conditions are met: + +- Redistributions of source code must retain the above copyright notice, this list of + conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright notice, this list + of conditions and the following disclaimer in the documentation and/or other + materials provided with the distribution. +- The names of the contributors may not be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF +THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*/ + + +#ifndef __ASNDLIB_H__ +#define __ASNDLIB_H__ + +#define __SNDLIB_H__ + +/*! + * \file asndlib.h + * \brief ASND library + * + */ + +#define ASND_LIB 0x100 +#define SND_LIB (ASND_LIB+2) + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/*! \addtogroup sndretvals SND return values + * @{ + */ +#define SND_OK 0 +#define SND_INVALID -1 +#define SND_ISNOTASONGVOICE -2 +#define SND_BUSY 1 +/*! @} */ + +/*! \addtogroup sndiavretvals SND_IsActiveVoice additional return values + * @{ + */ +#define SND_UNUSED 0 /*!< This voice is available for use. */ +#define SND_WORKING 1 /*!< This voice is currently in progress. */ +#define SND_WAITING 2 /*!< This voice is currently in progress and waiting to one SND_AddVoice() function (the voice handler is called continuously) */ +/*! @} */ + +/*! \addtogroup sndsetvoiceformats Voice format + * @{ + */ +#define VOICE_MONO_8BIT 0 +#define VOICE_MONO_16BIT 1 +#define VOICE_MONO_16BIT_BE 1 +#define VOICE_STEREO_8BIT 2 +#define VOICE_STEREO_16BIT 3 +#define VOICE_STEREO_16BIT_BE 3 +#define VOICE_MONO_8BIT_U 4 +#define VOICE_MONO_16BIT_LE 5 +#define VOICE_STEREO_8BIT_U 6 +#define VOICE_STEREO_16BIT_LE 7 +/*! @} */ + +/*! \addtogroup voicevol Voice volume + * @{ + */ +#define MIN_VOLUME 0 +#define MID_VOLUME 127 +#define MAX_VOLUME 255 +/*! @} */ + +/*! \addtogroup pitchrange Pitch Range + * @{ + */ +#define MIN_PITCH 1 /*!< 1Hz */ +#define F44100HZ_PITCH 44100 /*!< 44100Hz */ +#define MAX_PITCH 144000 /*!< 144000Hz (more process time for pitch>48000) */ +#define INIT_RATE_48000 +/*! @} */ + +/*! \addtogroup notecode Note codification + * @{ + */ +enum +{ +NOTE_DO=0, +NOTE_DOs, +NOTE_REb=NOTE_DOs, +NOTE_RE, +NOTE_REs, +NOTE_MIb=NOTE_REs, +NOTE_MI, +NOTE_FA, +NOTE_FAs, +NOTE_SOLb=NOTE_FAs, +NOTE_SOL, +NOTE_SOLs, +NOTE_LAb=NOTE_SOLs, +NOTE_LA, +NOTE_LAs, +NOTE_SIb=NOTE_LAs, +NOTE_SI +}; + +enum +{ +NOTE_C=0, +NOTE_Cs, +NOTE_Db=NOTE_Cs, +NOTE_D, +NOTE_Ds, +NOTE_Eb=NOTE_Ds, +NOTE_E, +NOTE_F, +NOTE_Fs, +NOTE_Gb=NOTE_Fs, +NOTE_G, +NOTE_Gs, +NOTE_Ab=NOTE_Gs, +NOTE_A, +NOTE_As, +NOTE_Bb=NOTE_As, +NOTE_B +}; + +#define NOTE(note,octave) (note+(octave<<3)+(octave<<2)) /*!< Final note codification. Used in Note2Freq(). */ +/*! @} */ + +/*------------------------------------------------------------------------------------------------------------------------------------------------------*/ + +/*! \addtogroup sndlibcompat SNDLIB compatibility macros + * \details These defines are for compatability with SNDLIB functions. + * @{ + */ +#define Note2Freq ANote2Freq +#define SND_Init ASND_Init +#define SND_End ASND_End +#define SND_Pause ASND_Pause +#define SND_Is_Paused ASND_Is_Paused +#define SND_GetTime ASND_GetTime +#define SND_GetSampleCounter ASND_GetSampleCounter +#define SND_GetSamplesPerTick ASND_GetSamplesPerTick +#define SND_SetTime ASND_SetTime +#define SND_SetCallback ASND_SetCallback +#define SND_GetAudioRate ASND_GetAudioRate +#define SND_SetVoice ASND_SetVoice +#define SND_AddVoice ASND_AddVoice +#define SND_StopVoice ASND_StopVoice +#define SND_PauseVoice ASND_PauseVoice +#define SND_StatusVoice ASND_StatusVoice +#define SND_GetFirstUnusedVoice ASND_GetFirstUnusedVoice +#define SND_ChangePitchVoice ASND_ChangePitchVoice +#define SND_ChangeVolumeVoice ASND_ChangeVolumeVoice +#define SND_ChangeVolumeVoice ASND_ChangeVolumeVoice +#define SND_GetTickCounterVoice ASND_GetTickCounterVoice +#define SND_GetTimerVoice ASND_GetTimerVoice +#define SND_TestPointer ASND_TestPointer +/*! @} */ + +/*------------------------------------------------------------------------------------------------------------------------------------------------------*/ + +/** \brief Callback type for ASND_SetVoice(). */ +typedef void (*ASNDVoiceCallback)(s32 voice); + +/*------------------------------------------------------------------------------------------------------------------------------------------------------*/ + +/** \brief Initializes the SND lib and fixes the hardware sample rate. + * \param[in] note \ref notecode to play. for example: NOTE(C,4) for note C and octave 4. + * \param[in] freq_base Frequency base of the sample. For example 8000Hz. + * \param[in] note_base \ref notecode of the sample. For example: NOTE(L, 3) for note L and octave 3 (LA 3). + * \return Frequency, in Hz. */ +int ANote2Freq(int note, int freq_base,int note_base); + +/*------------------------------------------------------------------------------------------------------------------------------------------------------*/ + +/*! \addtogroup General sound functions + * @{ + */ + +/*! \brief Initializes the ASND lib and fixes the hardware sample rate to 48000. + * \return None. */ +void ASND_Init(); + +/*! \brief De-initializes the ASND lib. + * \return None. */ +void ASND_End(); + +/*! \brief Used to pause (or unpause) the sound. + * \note The sound starts paused when ASND_Init() is called. + * \param[in] paused If 1, sound is paused; sound can be unpaused with 0. + * \return None. */ +void ASND_Pause(s32 paused); + +/*! \brief Returns sound paused status. + * \return 1 if paused, 0 if unpaused. */ +s32 ASND_Is_Paused(); + +/*! \brief Returns the global time. + * \details The time is updated from the IRQ. + * \return The current time, in milliseconds. */ +u32 ASND_GetTime(); + +/*! \brief Retrieves the global sample counter. + * \details This counter is updated from the IRQ in steps of ASND_GetSamplesPerTick(). + * \note You can use this to implement one timer with high precision. + * \return Current sample. */ +u32 ASND_GetSampleCounter(); + +/*! \brief Retrieves the samples sent from the IRQ in one tick. + * \return Samples per tick. */ +u32 ASND_GetSamplesPerTick(); + +/*! \brief Set the global time. + * \details This time is updated from the IRQ. + * \param[in] time Fix the current time, in milliseconds. + * \return None. */ +void ASND_SetTime(u32 time); + +/*! \brief Sets a global callback for general purposes. + * \details This callback is called from the IRQ. + * \param[in] callback Callback function to assign. + * \return None. */ +void ASND_SetCallback(void (*callback)()); + +/*! \brief Returns the current audio rate. + * \note This function is implemented for compatibility with SNDLIB. + * \return Audio rate (48000). */ +s32 ASND_GetAudioRate(); + +/*! @} */ + +/*! \addtogroup voicefuncs Voice functions + * @{ + */ + +// NOTE: I'm keeping this description around because I couldn't fully understand it; if someone else knows exactly what it's doing, they can come around +// and make sure the description is correct. +/* callback: can be NULL or one callback function is used to implement a double buffer use. When the second buffer is empty, the callback is called sending + the voice number as parameter. You can use "void callback(s32 voice)" function to call ASND_AddVoice() and add one voice to the second buffer. + NOTE: When callback is fixed the voice never stops and it turn in SND_WAITING status if success one timeout condition. +*/ + +/*! \brief Sets a PCM voice to play. + * \details This function stops one previous voice. Use ASND_StatusVoice() to test the status condition. + * \note The voices are played in 16-bit stereo, regardless of the source format.

+ * + * \note \a callback is used to implement a double buffer. When the second buffer is empty, the callback function is called with the voice number + * as an argument. You can use void callback (s32 voice) to call ASND_AddVoice() and add one voice to the second buffer. When the callback + * is non-NULL the, the voice never stops and returns SND_WAITING if successful on timeout condition. + * \param[in] voice Voice slot to use for this sound; valid values are 0 to (MAX_SND_VOICES-1). + * \param[in] format \ref sndsetvoiceformats to use for this sound. + * \param[in] pitch Frequency to use, in Hz. + * \param[in] delay Delay to wait before playing this voice; value is in milliseconds. + * \param[in] snd Buffer containing samples to play back; the buffer must be aligned and padded to 32 bytes! + * \param[in] size_snd Size of the buffer samples, in bytes. + * \param[in] volume_l \ref voicevol of the left channel; value can be 0 - 255 inclusive. + * \param[in] volume_r \ref voicevol of the right channel; value can be 0 - 255 inclusive. + * \param[in] callback Optional callback function to use; set to NULL for no callback. See the note above for details. + * \return SND_OK or SND_INVALID. */ +s32 ASND_SetVoice(s32 voice, s32 format, s32 pitch,s32 delay, void *snd, s32 size_snd, s32 volume_l, s32 volume_r, ASNDVoiceCallback callback); + +/*! \brief Sets a PCM voice to play infinitely. + * \note See ASND_SetVoice() for a detailed description, as it is largely identical. */ +s32 ASND_SetInfiniteVoice(s32 voice, s32 format, s32 pitch,s32 delay, void *snd, s32 size_snd, s32 volume_l, s32 volume_r); + +/*! \brief Adds a PCM voice to play from the second buffer. + * \note This function requires a call to ASND_SetVoice() and its subsequent return value to be a status other than SND_UNUSED prior to calling this one. + * \param[in] voice Voice slot to attach this buffer to; value must be 0 to (MAX_SND_VOICES-1). + * \param[in] snd Buffer containing the samples; it must be aligned and padded to 32 bytes AND have the same sample format as the first buffer. + * \param[in] size_snd Size of the buffer samples, in bytes. + * \return SND_OK or SND_INVALID; it may also return SND_BUSY if the second buffer is not empty and the voice cannot be added. */ +s32 ASND_AddVoice(s32 voice, void *snd, s32 size_snd); + +/*! \brief Stops the selected voice. + * \details If the voice is used in song mode, you need to assign the samples with ASND_SetSongSampleVoice() again. In this case, use ANS_PauseSongVoice() + * to stop the voice without loss of samples. + * \param[in] voice Voice to stop, from 0 to (MAX_SND_VOICES-1). + * \return SND_OK or SND_INVALID. */ +s32 ASND_StopVoice(s32 voice); + +/*! \brief Pauses the selected voice. + * \param[in] voice Voice to pause, from 0 to (MAX_SND_VOICES-1). + * \return SND_OK or SND_INVALID. */ +s32 ASND_PauseVoice(s32 voice, s32 pause); + +/*! \brief Returns the status of the selected voice. + * \param[in] voice Voice slot to get the status from, from 0 to (MAX_SND_VOICES-1). + * \return SND_INVALID if invalid, else a value from \ref sndiavretvals. */ +s32 ASND_StatusVoice(s32 voice); + +/*! \brief Returns the first unused voice. + * \note Voice 0 is the last possible voice that can be returned. The idea is that this voice is reserved for a MOD/OGG/MP3/etc. player. With this in mind, + * you can use this function to determine that the rest of the voices are working if the return value is < 1. + * \return SND_INVALID or the first free voice from 0 to (MAX_SND_VOICES-1). */ +s32 ASND_GetFirstUnusedVoice(); + +/*! \brief Changes the voice pitch in real-time. + * \details This function can be used to create audio effects such as Doppler effect emulation. + * \param[in] voice Voice to change the pitch of, from 0 to (MAX_SND_VOICES-1). + * \return SND_OK or SND_INVALID. */ +s32 ASND_ChangePitchVoice(s32 voice, s32 pitch); + +/*! \brief Changes the voice volume in real-time. + * \details This function can be used to create audio effects like distance attenuation. + * \param[in] voice Voice to change the volume of, from 0 to (MAX_SND_VOICES-1). + * \param[in] volume_l \ref voicevol to set the left channel to, from 0 to 255. + * \param[in] volume_r \ref voicevol to set the right channel to, from 0 to 255. + * \return SND_OK or SND_INVALID. */ +s32 ASND_ChangeVolumeVoice(s32 voice, s32 volume_l, s32 volume_r); + +/*! \brief Returns the voice tick counter. + * \details This value represents the number of ticks since this voice started to play, sans delay time. It uses the same resolution as the internal + * sound buffer. For example, if the lib is initialized with INIT_RATE_48000, a return value of 24000 is equal to 0.5 seconds. This value can be used, for + * example, to synchronize audio and video. + * \note This function does not return error codes. + * \param[in] voice Voice to retrieve the counter value from, from 0 to (MAX_SND_VOICES-1). + * \return Number of ticks since this voice started playing. */ +u32 ASND_GetTickCounterVoice(s32 voice); + +/*! \brief Returns the voice playback time. + * \details This value represents the time, in milliseconds, since this voice started playing, sans delay time. This value can be used, for example, to + * synchronize audio and video. + * \note This function does not return error codes. + * \param[in] voice Voice to retrieve the time value from, from 0 to (MAX_SND_VOICES-1). + * \return Amount of time since this voice has started playing. */ +u32 ASND_GetTimerVoice(s32 voice); + +/*! \brief Tests if \a pointer is in use by \a voice as a buffer. + * \param[in] voice Voice to test, from 0 to (MAX_SND_VOICES-1). + * \param[in] pointer Address to test. This must be the same pointer sent to ASND_AddVoice() or ASND_SetVoice(). + * \return SND_INVALID if invalid + * \return 0 if the pointer is unused + * \return 1 if the pointer used as a buffer. */ +s32 ASND_TestPointer(s32 voice, void *pointer); + +/*! \brief Tests to determine if the \a voice is ready to receive a new buffer sample with ASND_AddVoice(). + * \details You can use this function to block a reader when double buffering is used. It works similarly to ASND_TestPointer() without needing to pass a + * pointer. + * \param[in] voice Voice to test, from 0 to (MAX_SND_VOICES-1). + * \return SND_INVALID + * \return 0 if voice is NOT ready to receive a new voice. + * \return 1 if voice is ready to receive a new voice with ASND_AddVoice(). */ +s32 ASND_TestVoiceBufferReady(s32 voice); + +/*! @} */ + +/*! \addtogroup dspfuncs DSP functions + * @{ + */ + +/*! \brief Returns the DSP usage. + * \details The value is a percentage of DSP usage. + * \return DSP usage, in percent. */ +u32 ASND_GetDSP_PercentUse(); + +u32 ASND_GetDSP_ProcessTime(); + +/*! @} */ + +#ifdef __cplusplus + } +#endif + +#endif + diff --git a/wii/libogc/include/bte/bd_addr.h b/wii/libogc/include/bte/bd_addr.h new file mode 100644 index 0000000000..87faf92675 --- /dev/null +++ b/wii/libogc/include/bte/bd_addr.h @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2003 EISLAB, Lulea University of Technology. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwBT Bluetooth stack. + * + * Author: Conny Ohult + * + */ + +#ifndef __BD_ADDR_H__ +#define __BD_ADDR_H__ + +#include + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +struct bd_addr { + u8 addr[6]; +}; + +#define BD_ADDR_LEN 6 + +#define BD_ADDR_ANY (&(struct bd_addr){{0,0,0,0,0,0}}) +#define BD_ADDR_LOCAL (&(struct bd_addr){{0,0,0,0xff,0xff,0xff}}) + +#define BD_ADDR(bdaddr, a, b, c, d, e, f) do{ \ + (bdaddr)->addr[0] = a; \ + (bdaddr)->addr[1] = b; \ + (bdaddr)->addr[2] = c; \ + (bdaddr)->addr[3] = d; \ + (bdaddr)->addr[4] = e; \ + (bdaddr)->addr[5] = f; }while(0) +//TODO: USE memcmp???? +#define bd_addr_cmp(addr1, addr2) (((addr1)->addr[0] == (addr2)->addr[0]) && \ + ((addr1)->addr[1] == (addr2)->addr[1]) && \ + ((addr1)->addr[2] == (addr2)->addr[2]) && \ + ((addr1)->addr[3] == (addr2)->addr[3]) && \ + ((addr1)->addr[4] == (addr2)->addr[4]) && \ + ((addr1)->addr[5] == (addr2)->addr[5])) +//TODO: USE memcpy???? +#define bd_addr_set(addr1, addr2) do { \ + (addr1)->addr[0] = (addr2)->addr[0]; \ + (addr1)->addr[1] = (addr2)->addr[1]; \ + (addr1)->addr[2] = (addr2)->addr[2]; \ + (addr1)->addr[3] = (addr2)->addr[3]; \ + (addr1)->addr[4] = (addr2)->addr[4]; \ + (addr1)->addr[5] = (addr2)->addr[5]; }while(0) + + +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif /* __BD_ADDR_H__ */ diff --git a/wii/libogc/include/bte/bte.h b/wii/libogc/include/bte/bte.h new file mode 100644 index 0000000000..e05e9cdddb --- /dev/null +++ b/wii/libogc/include/bte/bte.h @@ -0,0 +1,154 @@ +#ifndef __BTE_H__ +#define __BTE_H__ + +#include +#include "bd_addr.h" + +#define ERR_OK 0 +#define ERR_MEM -1 +#define ERR_BUF -2 +#define ERR_ABRT -3 +#define ERR_RST -4 +#define ERR_CLSD -5 +#define ERR_CONN -6 +#define ERR_VAL -7 +#define ERR_ARG -8 +#define ERR_RTE -9 +#define ERR_USE -10 +#define ERR_IF -11 +#define ERR_PKTSIZE -17 + +#define HIDP_STATE_READY 0x00 +#define HIDP_STATE_LISTEN 0x01 +#define HIDP_STATE_CONNECTING 0x02 +#define HIDP_STATE_CONNECTED 0x04 + +#define HIDP_CONTROL_CHANNEL 0x11 +#define HIDP_DATA_CHANNEL 0x13 + +#define HIDP_HDR_TRANS_MASK 0xf0 +#define HIDP_HDR_PARAM_MASK 0x0f + +#define HIDP_TRANS_HANDSHAKE 0x00 +#define HIDP_TRANS_HIDCONTROL 0x10 +#define HIDP_TRANS_GETREPORT 0x40 +#define HIDP_TRANS_SETREPORT 0x50 +#define HIDP_TRANS_GETPROTOCOL 0x60 +#define HIDP_TRANS_SETPROTOCOL 0x70 +#define HIDP_TRANS_GETIDLE 0x80 +#define HIDP_TRANS_SETIDLE 0x90 +#define HIDP_TRANS_DATA 0xa0 +#define HIDP_TRANS_DATAC 0xb0 + +#define HIDP_HSHK_SUCCESSFULL 0x00 +#define HIDP_HSHK_NOTREADY 0x01 +#define HIDP_HSHK_INV_REPORTID 0x02 +#define HIDP_HSHK_NOTSUPPORTED 0x03 +#define HIDP_HSHK_IVALIDPARAM 0x04 +#define HIDP_HSHK_UNKNOWNERROR 0x0e +#define HIDP_HSHK_FATALERROR 0x0f + +#define HIDP_CTRL_NOP 0x00 +#define HIDP_CTRL_HARDRESET 0x01 +#define HIDP_CTRL_SOFTRESET 0x02 +#define HIDP_CTRL_SUSPEND 0x03 +#define HIDP_CTRL_RESUME 0x04 +#define HIDP_CTRL_VC_UNPLUG 0x05 + +/* HIDP data transaction headers */ +#define HIDP_DATA_RTYPE_MASK 0x03 +#define HIDP_DATA_RSRVD_MASK 0x0c +#define HIDP_DATA_RTYPE_OTHER 0x00 +#define HIDP_DATA_RTYPE_INPUT 0x01 +#define HIDP_DATA_RTYPE_OUPUT 0x02 +#define HIDP_DATA_RTYPE_FEATURE 0x03 + +#define HIDP_PROTO_BOOT 0x00 +#define HIDP_PROTO_REPORT 0x01 + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +struct l2cap_pcb; +struct ctrl_req_t; + +struct inquiry_info +{ + struct bd_addr bdaddr; + u8 cod[3]; +}; + +struct inquiry_info_ex +{ + struct bd_addr bdaddr; + u8 cod[3]; + u8 psrm; + u8 psm; + u16 co; +}; + +struct linkkey_info +{ + struct bd_addr bdaddr; + u8 key[16]; +}; + +struct bte_pcb +{ + u8 err; + u32 state; + void *cbarg; + + struct ctrl_req_t *ctrl_req_head; + struct ctrl_req_t *ctrl_req_tail; + + lwpq_t cmdq; + + struct bd_addr bdaddr; + + struct l2cap_pcb *ctl_pcb; + struct l2cap_pcb *data_pcb; + + + s32 (*recv)(void *arg,void *buffer,u16 len); + s32 (*conn_cfm)(void *arg,struct bte_pcb *pcb,u8 err); + s32 (*disconn_cfm)(void *arg,struct bte_pcb *pcb,u8 err); +}; + +typedef s32 (*btecallback)(s32 result,void *userdata); + +void BTE_Init(); +void BTE_Shutdown(); +s32 BTE_InitCore(btecallback cb); +s32 BTE_ApplyPatch(btecallback cb); +s32 BTE_InitSub(btecallback cb); +s32 BTE_ReadStoredLinkKey(struct linkkey_info *keys,u8 max_cnt,btecallback cb); +s32 BTE_ReadBdAddr(struct bd_addr *bdaddr, btecallback cb); +void (*BTE_SetDisconnectCallback(void (*callback)(struct bd_addr *bdaddr,u8 reason)))(struct bd_addr *bdaddr,u8 reason); + +struct bte_pcb* bte_new(); +void bte_arg(struct bte_pcb *pcb,void *arg); +void bte_received(struct bte_pcb *pcb, s32 (*recv)(void *arg,void *buffer,u16 len)); +void bte_disconnected(struct bte_pcb *pcb,s32 (disconn_cfm)(void *arg,struct bte_pcb *pcb,u8 err)); + +s32 bte_registerdeviceasync(struct bte_pcb *pcb,struct bd_addr *bdaddr,s32 (*conn_cfm)(void *arg,struct bte_pcb *pcb,u8 err)); + +s32 bte_disconnect(struct bte_pcb *pcb); + +//s32 bte_listen(struct bte_pcb *pcb,struct bd_addr *bdaddr,u8 psm); +//s32 bte_accept(struct bte_pcb *pcb,s32 (*recv)(void *arg,void *buffer,u16 len)); +s32 bte_inquiry(struct inquiry_info *info,u8 max_cnt,u8 flush); +s32 bte_inquiry_ex(struct inquiry_info_ex *info,u8 max_cnt,u8 flush); +//s32 bte_connect(struct bte_pcb *pcb,struct bd_addr *bdaddr,u8 psm,s32 (*recv)(void *arg,void *buffer,u16 len)); +//s32 bte_connect_ex(struct bte_pcb *pcb,struct inquiry_info_ex *info,u8 psm,s32 (*recv)(void *arg,void *buffer,u16 len)); +s32 bte_senddata(struct bte_pcb *pcb,void *message,u16 len); +s32 bte_sendmessage(struct bte_pcb *pcb,void *message,u16 len); +s32 bte_sendmessageasync(struct bte_pcb *pcb,void *message,u16 len,s32 (*sent)(void *arg,struct bte_pcb *pcb,u8 err)); + +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif + diff --git a/wii/libogc/include/debug.h b/wii/libogc/include/debug.h new file mode 100644 index 0000000000..f87f726e38 --- /dev/null +++ b/wii/libogc/include/debug.h @@ -0,0 +1,43 @@ +#ifndef __DEBUG_H__ +#define __DEBUG_H__ + +#include + +#define GDBSTUB_DEVICE_USB 0 /*!< device type: USBGecko */ +#define GDBSTUB_DEVICE_TCP 1 /*!< device type: BBA-TCP */ + +#define GDBSTUB_DEF_CHANNEL 0 /*!< default EXI channel. channel can be 0 or 1. Note: Used for device type USBGecko */ +#define GDBSTUB_DEF_TCPPORT 2828 /*!< default TCP port. Note: Used for device type TCP */ + +#ifdef __cplusplus + extern "C" { +#endif + +extern const char *tcp_localip; +extern const char *tcp_netmask; +extern const char *tcp_gateway; + + +/*!\fn void _break() + * \brief Stub function to insert the hardware break instruction. This function is used to enter the debug stub and to + * connect with the host. The developer is free to insert this function at any position in project's source code. + * + * \return none. + */ +void _break(); + + +/*!\fn void DEBUG_Init(s32 device_type,s32 channel_port) + * \brief Performs the initialization of the debug stub. + * \param[in] device_type type of device to use. can be either USB or TCP. + * \param[in] channel_port depending on the used device this can be either the EXI channel or the TCP port. + * + * \return none. + */ +void DEBUG_Init(s32 device_type,s32 channel_port); + +#ifdef __cplusplus + } +#endif + +#endif diff --git a/wii/libogc/include/fat.h b/wii/libogc/include/fat.h new file mode 100644 index 0000000000..7d828f6e72 --- /dev/null +++ b/wii/libogc/include/fat.h @@ -0,0 +1,122 @@ +/* + fat.h + Simple functionality for startup, mounting and unmounting of FAT-based devices. + + Copyright (c) 2006 - 2012 + Michael "Chishm" Chisholm + Dave "WinterMute" Murphy + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +#ifndef _LIBFAT_H +#define _LIBFAT_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "libfatversion.h" + +// When compiling for NDS, make sure NDS is defined +#ifndef NDS + #if defined ARM9 || defined ARM7 + #define NDS + #endif +#endif + +#include + +#if defined(__gamecube__) || defined (__wii__) +# include +#else +# ifdef NDS +# include +# else +# include +# endif +#endif + +/* +Initialise any inserted block-devices. +Add the fat device driver to the devoptab, making it available for standard file functions. +cacheSize: The number of pages to allocate for each inserted block-device +setAsDefaultDevice: if true, make this the default device driver for file operations +*/ +extern bool fatInit (uint32_t cacheSize, bool setAsDefaultDevice); + +/* +Calls fatInit with setAsDefaultDevice = true and cacheSize optimised for the host system. +*/ +extern bool fatInitDefault (void); + +/* +Mount the device pointed to by interface, and set up a devoptab entry for it as "name:". +You can then access the filesystem using "name:/". +This will mount the active partition or the first valid partition on the disc, +and will use a cache size optimized for the host system. +*/ +extern bool fatMountSimple (const char* name, const DISC_INTERFACE* interface); + +/* +Mount the device pointed to by interface, and set up a devoptab entry for it as "name:". +You can then access the filesystem using "name:/". +If startSector = 0, it will mount the active partition of the first valid partition on +the disc. Otherwise it will try to mount the partition starting at startSector. +cacheSize specifies the number of pages to allocate for the cache. +This will not startup the disc, so you need to call interface->startup(); first. +*/ +extern bool fatMount (const char* name, const DISC_INTERFACE* interface, sec_t startSector, uint32_t cacheSize, uint32_t SectorsPerPage); + +/* +Unmount the partition specified by name. +If there are open files, it will attempt to synchronise them to disc. +*/ +extern void fatUnmount (const char* name); + +/* +Get Volume Label +*/ +extern void fatGetVolumeLabel (const char* name, char *label); + +// File attributes +#define ATTR_ARCHIVE 0x20 // Archive +#define ATTR_DIRECTORY 0x10 // Directory +#define ATTR_VOLUME 0x08 // Volume +#define ATTR_SYSTEM 0x04 // System +#define ATTR_HIDDEN 0x02 // Hidden +#define ATTR_READONLY 0x01 // Read only + +/* +Methods to modify DOS File Attributes +*/ +int FAT_getAttr(const char *file); +int FAT_setAttr(const char *file, uint8_t attr ); + +#define LIBFAT_FEOS_MULTICWD + +#ifdef __cplusplus +} +#endif + +#endif // _LIBFAT_H diff --git a/wii/libogc/include/gccore.h b/wii/libogc/include/gccore.h new file mode 100644 index 0000000000..f45b68345a --- /dev/null +++ b/wii/libogc/include/gccore.h @@ -0,0 +1,150 @@ +/*------------------------------------------------------------- + +gccore.h -- GC core header + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + + +#ifndef __GCCORE_H__ +#define __GCCORE_H__ + +/*! \file gccore.h +\brief Core header which includes all subsequent subsystem headers + +*/ + +#include "ogc/dsp.h" +#include "ogc/aram.h" +#include "ogc/arqueue.h" +#include "ogc/arqmgr.h" +#include "ogc/audio.h" +#include "ogc/cache.h" +#include "ogc/card.h" +#include "ogc/cast.h" +#include "ogc/color.h" +#include "ogc/consol.h" +#include "ogc/dvd.h" +#include "ogc/exi.h" +#include "ogc/gu.h" +#include "ogc/gx.h" +#include "ogc/si.h" +#include "ogc/gx_struct.h" +#include "ogc/irq.h" +#include "ogc/lwp.h" +#include "ogc/mutex.h" +#include "ogc/message.h" +#include "ogc/semaphore.h" +#include "ogc/pad.h" +#include "ogc/tpl.h" +#include "ogc/system.h" +#include "ogc/video.h" +#include "ogc/usbgecko.h" +#include "ogc/video_types.h" +#include "ogc/texconv.h" + +#if defined(HW_RVL) +#include "ogc/ipc.h" +#include "ogc/es.h" +#include "ogc/stm.h" +#include "ogc/ios.h" +#include "ogc/usb.h" +#include "ogc/isfs.h" +#include "ogc/conf.h" +#include "ogc/usbstorage.h" + +#include "ogc/wiilaunch.h" + +#endif + +/* + * Error returns + */ +#define RNC_FILE_IS_NOT_RNC -1 +#define RNC_HUF_DECODE_ERROR -2 +#define RNC_FILE_SIZE_MISMATCH -3 +#define RNC_PACKED_CRC_ERROR -4 +#define RNC_UNPACKED_CRC_ERROR -5 + +#ifndef ATTRIBUTE_ALIGN +# define ATTRIBUTE_ALIGN(v) __attribute__((aligned(v))) +#endif +#ifndef ATTRIBUTE_PACKED +# define ATTRIBUTE_PACKED __attribute__((packed)) +#endif + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + + +/*! + * \mainpage + * + * - \subpage intro + * - \subpage api_doc + */ + + +/*! + * \page intro Introduction + * Welcome to the libOGC reference documentation. + */ + +/*! + * \page api_doc Detailed API description + * + * - \ref aram.h "ARAM subsystem" + * - \ref arqmgr.h "ARAM queue management subsystem" + * - \ref audio.h "AUDIO subsystem" + * - \ref asndlib.h "ASND library" + * - \ref exi.h "EXI subsystem" + * - \ref irq.h "IRQ subsystem" + * - \ref dsp.h "DSP subsystem" + * - \ref dvd.h "DVD subsystem" + * - \ref gx.h "GX subsystem" + * - \ref gu.h "gu/Matrix subsystem" + * - \ref video.h "VIDEO subsystem" + * - \ref cache.h "Cache subsystem" + * - \ref card.h "Memory card subsystem" + * - \ref consol.h "Console subsystem" + * - \ref system.h "OS functions and initialization" + * - \ref lwp.h "Thread subsystem I" + * - \ref message.h "Thread subsystem II" + * - \ref mutex.h "Thread subsystem III" + * - \ref semaphore.h "Thread subsystem IV" + * - \ref cond.h "Thread subsystem V" + */ + +s32 depackrnc1_ulen(void *packed); +s32 depackrnc1(void *packed,void *unpacked); + +void depackrnc2(void *packed,void *unpacked); + +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif diff --git a/wii/libogc/include/gcmodplay.h b/wii/libogc/include/gcmodplay.h new file mode 100644 index 0000000000..a59d077533 --- /dev/null +++ b/wii/libogc/include/gcmodplay.h @@ -0,0 +1,44 @@ +#ifndef __GCMODPLAY_H__ +#define __GCMODPLAY_H__ + +#include +#include "modplay/modplay.h" + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +typedef struct _modsndbuf { + u32 freq; + u16 fmt; + u32 chans; + f32 samples; + void *usr_data; + void (*callback)(void *,u8 *,u32); +} MODSNDBUF; + +typedef struct _modplay { + MOD mod; + BOOL playing,paused; + BOOL bits,stereo,manual_polling; + u32 playfreq,numSFXChans; + MODSNDBUF soundBuf; +} MODPlay; + +void MODPlay_Init(MODPlay *mod); +s32 MODPlay_SetFrequency(MODPlay *mod,u32 freq); +void MODPlay_SetStereo(MODPlay *mod,BOOL stereo); +s32 MODPlay_SetMOD(MODPlay *mod,const void *mem); +void MODPlay_Unload(MODPlay *mod); +s32 MODPlay_AllocSFXChannels(MODPlay *mod,u32 sfxchans); +s32 MODPlay_Start(MODPlay *mod); +s32 MODPlay_Stop(MODPlay *mod); +s32 MODPlay_TriggerNote(MODPlay *mod,u32 chan,u8 inst,u16 freq,u8 vol); +s32 MODPlay_Pause(MODPlay *mod,BOOL); +void MODPlay_SetVolume(MODPlay * mod, s32 musicvolume, s32 sfxvolume); + +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif diff --git a/wii/libogc/include/gctypes.h b/wii/libogc/include/gctypes.h new file mode 100644 index 0000000000..8d93799e4b --- /dev/null +++ b/wii/libogc/include/gctypes.h @@ -0,0 +1,110 @@ +#ifndef __GCTYPES_H__ +#define __GCTYPES_H__ + +/*! \file gctypes.h +\brief Data type definitions + +*/ + +#include +#include + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +/*+----------------------------------------------------------------------------------------------+*/ +typedef uint8_t u8; ///< 8bit unsigned integer +typedef uint16_t u16; ///< 16bit unsigned integer +typedef uint32_t u32; ///< 32bit unsigned integer +typedef uint64_t u64; ///< 64bit unsigned integer +/*+----------------------------------------------------------------------------------------------+*/ +typedef int8_t s8; ///< 8bit signed integer +typedef int16_t s16; ///< 16bit signed integer +typedef int32_t s32; ///< 32bit signed integer +typedef int64_t s64; ///< 64bit signed integer +/*+----------------------------------------------------------------------------------------------+*/ +typedef volatile u8 vu8; ///< 8bit unsigned volatile integer +typedef volatile u16 vu16; ///< 16bit unsigned volatile integer +typedef volatile u32 vu32; ///< 32bit unsigned volatile integer +typedef volatile u64 vu64; ///< 64bit unsigned volatile integer +/*+----------------------------------------------------------------------------------------------+*/ +typedef volatile s8 vs8; ///< 8bit signed volatile integer +typedef volatile s16 vs16; ///< 16bit signed volatile integer +typedef volatile s32 vs32; ///< 32bit signed volatile integer +typedef volatile s64 vs64; ///< 64bit signed volatile integer +/*+----------------------------------------------------------------------------------------------+*/ +// fixed point math typedefs +typedef s16 sfp16; ///< signed 8:8 fixed point +typedef s32 sfp32; ///< signed 20:8 fixed point +typedef u16 ufp16; ///< unsigned 8:8 fixed point +typedef u32 ufp32; ///< unsigned 24:8 fixed point +/*+----------------------------------------------------------------------------------------------+*/ +typedef float f32; +typedef double f64; +/*+----------------------------------------------------------------------------------------------+*/ +typedef volatile float vf32; +typedef volatile double vf64; +/*+----------------------------------------------------------------------------------------------+*/ + + +typedef unsigned int BOOL; +/*+----------------------------------------------------------------------------------------------+*/ +// alias type typedefs +#define FIXED s32 ///< Alias type for sfp32 +/*+----------------------------------------------------------------------------------------------+*/ +#ifndef TRUE +#define TRUE 1 ///< True +#endif +/*+----------------------------------------------------------------------------------------------+*/ +#ifndef FALSE +#define FALSE 0 ///< False +#endif +/*+----------------------------------------------------------------------------------------------+*/ +#ifndef NULL +#define NULL 0 ///< Pointer to 0 +#endif +/*+----------------------------------------------------------------------------------------------+*/ +#ifndef LITTLE_ENDIAN +#define LITTLE_ENDIAN 3412 +#endif /* LITTLE_ENDIAN */ +/*+----------------------------------------------------------------------------------------------+*/ +#ifndef BIG_ENDIAN +#define BIG_ENDIAN 1234 +#endif /* BIGE_ENDIAN */ +/*+----------------------------------------------------------------------------------------------+*/ +#ifndef BYTE_ORDER +#define BYTE_ORDER BIG_ENDIAN +#endif /* BYTE_ORDER */ +/*+----------------------------------------------------------------------------------------------+*/ + + +//! argv structure +/*! \struct __argv + + structure used to set up argc/argv + +*/ +struct __argv { + int argvMagic; //!< argv magic number, set to 0x5f617267 ('_arg') if valid + char *commandLine; //!< base address of command line, set of null terminated strings + int length;//!< total length of command line + int argc; + char **argv; + char **endARGV; +}; + +//! Default location for the system argv structure. +extern struct __argv *__system_argv; + +// argv struct magic number +#define ARGV_MAGIC 0x5f617267 + +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif /* TYPES_H */ + + +/* END OF FILE */ diff --git a/wii/libogc/include/gcutil.h b/wii/libogc/include/gcutil.h new file mode 100644 index 0000000000..3458ee037d --- /dev/null +++ b/wii/libogc/include/gcutil.h @@ -0,0 +1,12 @@ +#ifndef __GCUTIL_H__ +#define __GCUTIL_H__ + +#ifndef ATTRIBUTE_ALIGN +# define ATTRIBUTE_ALIGN(v) __attribute__((aligned(v))) +#endif +#ifndef ATTRIBUTE_PACKED +# define ATTRIBUTE_PACKED __attribute__((packed)) +#endif + +#endif /* _GCUTIL_H */ + diff --git a/wii/libogc/include/iso9660.h b/wii/libogc/include/iso9660.h new file mode 100644 index 0000000000..498cf9aeda --- /dev/null +++ b/wii/libogc/include/iso9660.h @@ -0,0 +1,27 @@ +/**************************************************************************** + * ISO9660 devoptab + * + * Copyright (C) 2008-2010 + * tipoloski, clava, shagkur, Tantric, joedj + ****************************************************************************/ + +#ifndef __ISO9660_H__ +#define __ISO9660_H__ + +#include + +#define ISO_MAXPATHLEN 128 + +#ifdef __cplusplus +extern "C" { +#endif + +bool ISO9660_Mount(const char* name, const DISC_INTERFACE* disc_interface); +bool ISO9660_Unmount(const char* name); +const char *ISO9660_GetVolumeLabel(const char *name); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/wii/libogc/include/libfatversion.h b/wii/libogc/include/libfatversion.h new file mode 100644 index 0000000000..765ac2f3f7 --- /dev/null +++ b/wii/libogc/include/libfatversion.h @@ -0,0 +1,10 @@ +#ifndef __LIBFATVERSION_H__ +#define __LIBFATVERSION_H__ + +#define _LIBFAT_MAJOR_ 1 +#define _LIBFAT_MINOR_ 1 +#define _LIBFAT_PATCH_ 1 + +#define _LIBFAT_STRING "libFAT Release 1.1.1" + +#endif // __LIBFATVERSION_H__ diff --git a/wii/libogc/include/network.h b/wii/libogc/include/network.h new file mode 100644 index 0000000000..91a526d1f1 --- /dev/null +++ b/wii/libogc/include/network.h @@ -0,0 +1,287 @@ +#ifndef __NETWORK_H__ +#define __NETWORK_H__ + +#include +#include +#include + +#define INVALID_SOCKET (~0) +#define SOCKET_ERROR (-1) + +#define SOCK_STREAM 1 +#define SOCK_DGRAM 2 +#define SOCK_RAW 3 + +/* + * Option flags per-socket. + */ +#define SO_DEBUG 0x0001 /* turn on debugging info recording */ +#define SO_ACCEPTCONN 0x0002 /* socket has had listen() */ +#define SO_REUSEADDR 0x0004 /* allow local address reuse */ +#define SO_KEEPALIVE 0x0008 /* keep connections alive */ +#define SO_DONTROUTE 0x0010 /* just use interface addresses */ +#define SO_BROADCAST 0x0020 /* permit sending of broadcast msgs */ +#define SO_USELOOPBACK 0x0040 /* bypass hardware when possible */ +#define SO_LINGER 0x0080 /* linger on close if data present */ +#define SO_OOBINLINE 0x0100 /* leave received OOB data in line */ +#define SO_REUSEPORT 0x0200 /* allow local address & port reuse */ + +#define SO_DONTLINGER (int)(~SO_LINGER) + +/* + * Additional options, not kept in so_options. + */ +#define SO_SNDBUF 0x1001 /* send buffer size */ +#define SO_RCVBUF 0x1002 /* receive buffer size */ +#define SO_SNDLOWAT 0x1003 /* send low-water mark */ +#define SO_RCVLOWAT 0x1004 /* receive low-water mark */ +#define SO_SNDTIMEO 0x1005 /* send timeout */ +#define SO_RCVTIMEO 0x1006 /* receive timeout */ +#define SO_ERROR 0x1007 /* get error status and clear */ +#define SO_TYPE 0x1008 /* get socket type */ + + + +/* + * Structure used for manipulating linger option. + */ +struct linger { + int l_onoff; /* option on/off */ + int l_linger; /* linger time */ +}; + +/* + * Level number for (get/set)sockopt() to apply to socket itself. + */ +#define SOL_SOCKET 0xffff /* options for socket level */ + +#define AF_UNSPEC 0 +#define AF_INET 2 +#define PF_INET AF_INET +#define PF_UNSPEC AF_UNSPEC + +#define IPPROTO_IP 0 +#define IPPROTO_TCP 6 +#define IPPROTO_UDP 17 + +#define INADDR_ANY 0 +#define INADDR_BROADCAST 0xffffffff + +/* Flags we can use with send and recv. */ +#define MSG_DONTWAIT 0x40 /* Nonblocking i/o for this operation only */ + +/* + * Options for level IPPROTO_IP + */ +#define IP_TOS 1 +#define IP_TTL 2 + + +#define IPTOS_TOS_MASK 0x1E +#define IPTOS_TOS(tos) ((tos) & IPTOS_TOS_MASK) +#define IPTOS_LOWDELAY 0x10 +#define IPTOS_THROUGHPUT 0x08 +#define IPTOS_RELIABILITY 0x04 +#define IPTOS_LOWCOST 0x02 +#define IPTOS_MINCOST IPTOS_LOWCOST + +/* + * Definitions for IP precedence (also in ip_tos) (hopefully unused) + */ +#define IPTOS_PREC_MASK 0xe0 +#define IPTOS_PREC(tos) ((tos) & IPTOS_PREC_MASK) +#define IPTOS_PREC_NETCONTROL 0xe0 +#define IPTOS_PREC_INTERNETCONTROL 0xc0 +#define IPTOS_PREC_CRITIC_ECP 0xa0 +#define IPTOS_PREC_FLASHOVERRIDE 0x80 +#define IPTOS_PREC_FLASH 0x60 +#define IPTOS_PREC_IMMEDIATE 0x40 +#define IPTOS_PREC_PRIORITY 0x20 +#define IPTOS_PREC_ROUTINE 0x00 + + +/* + * Commands for ioctlsocket(), taken from the BSD file fcntl.h. + * + * + * Ioctl's have the command encoded in the lower word, + * and the size of any in or out parameters in the upper + * word. The high 2 bits of the upper word are used + * to encode the in/out status of the parameter; for now + * we restrict parameters to at most 128 bytes. + */ +#if !defined(FIONREAD) || !defined(FIONBIO) +#define IOCPARM_MASK 0x7f /* parameters must be < 128 bytes */ +#define IOC_VOID 0x20000000 /* no parameters */ +#define IOC_OUT 0x40000000 /* copy out parameters */ +#define IOC_IN 0x80000000 /* copy in parameters */ +#define IOC_INOUT (IOC_IN|IOC_OUT) + /* 0x20000000 distinguishes new & + old ioctl's */ +#define _IO(x,y) (IOC_VOID|((x)<<8)|(y)) + +#define _IOR(x,y,t) (IOC_OUT|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y)) + +#define _IOW(x,y,t) (IOC_IN|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y)) +#endif + +#ifndef FIONREAD +#define FIONREAD _IOR('f', 127, unsigned long) /* get # bytes to read */ +#endif +#ifndef FIONBIO +#define FIONBIO _IOW('f', 126, unsigned long) /* set/clear non-blocking i/o */ +#endif + +/* Socket I/O Controls */ +#ifndef SIOCSHIWAT +#define SIOCSHIWAT _IOW('s', 0, unsigned long) /* set high watermark */ +#define SIOCGHIWAT _IOR('s', 1, unsigned long) /* get high watermark */ +#define SIOCSLOWAT _IOW('s', 2, unsigned long) /* set low watermark */ +#define SIOCGLOWAT _IOR('s', 3, unsigned long) /* get low watermark */ +#define SIOCATMARK _IOR('s', 7, unsigned long) /* at oob mark? */ +#endif + +#ifndef O_NONBLOCK +#define O_NONBLOCK 04000U +#endif + +#ifndef FD_SET + #undef FD_SETSIZE + #define FD_SETSIZE 16 + #define FD_SET(n, p) ((p)->fd_bits[(n)/8] |= (1 << ((n) & 7))) + #define FD_CLR(n, p) ((p)->fd_bits[(n)/8] &= ~(1 << ((n) & 7))) + #define FD_ISSET(n,p) ((p)->fd_bits[(n)/8] & (1 << ((n) & 7))) + #define FD_ZERO(p) memset((void*)(p),0,sizeof(*(p))) + + typedef struct fd_set { + u8 fd_bits [(FD_SETSIZE+7)/8]; + } fd_set; + +#endif + +#ifndef TCP_NODELAY +#define TCP_NODELAY 0x01 /* don't delay send to coalesce packets */ +#endif +#ifndef TCP_KEEPALIVE +#define TCP_KEEPALIVE 0x02 /* send KEEPALIVE probes when idle for pcb->keepalive miliseconds */ +#endif + +#ifndef socklen_t +#define socklen_t u32 +#endif + +#ifndef htons +#define htons(x) (x) +#endif +#ifndef ntohs +#define ntohs(x) (x) +#endif +#ifndef htonl +#define htonl(x) (x) +#endif +#ifndef ntohl +#define ntohl(x) (x) +#endif + +#ifndef h_addr +#define h_addr h_addr_list[0] +#endif + +#ifndef IP4_ADDR +#define IP4_ADDR(ipaddr, a,b,c,d) (ipaddr)->s_addr = htonl(((u32)(a&0xff)<<24)|((u32)(b&0xff)<<16)|((u32)(c&0xff)<<8)|(u32)(d&0xff)) +#define ip4_addr1(ipaddr) ((u32)(ntohl((ipaddr)->s_addr) >> 24) & 0xff) +#define ip4_addr2(ipaddr) ((u32)(ntohl((ipaddr)->s_addr) >> 16) & 0xff) +#define ip4_addr3(ipaddr) ((u32)(ntohl((ipaddr)->s_addr) >> 8) & 0xff) +#define ip4_addr4(ipaddr) ((u32)(ntohl((ipaddr)->s_addr)) & 0xff) +#endif + +#define POLLIN 0x0001 +#define POLLPRI 0x0002 +#define POLLOUT 0x0004 +#define POLLERR 0x0008 +#define POLLHUP 0x0010 +#define POLLNVAL 0x0020 + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef HAVE_IN_ADDR +#define HAVE_IN_ADDR +struct in_addr { + u32 s_addr; +}; +#endif + +struct sockaddr_in { + u8 sin_len; + u8 sin_family; + u16 sin_port; + struct in_addr sin_addr; + s8 sin_zero[8]; +}; + +struct sockaddr { + u8 sa_len; + u8 sa_family; + s8 sa_data[14]; +}; + +struct hostent { + char *h_name; /* official name of host */ + char **h_aliases; /* alias list */ + u16 h_addrtype; /* host address type */ + u16 h_length; /* length of address */ + char **h_addr_list; /* list of addresses from name server */ +}; + +struct pollsd { + s32 socket; + u32 events; + u32 revents; +}; + +u32 inet_addr(const char *cp); +s8 inet_aton(const char *cp, struct in_addr *addr); +char *inet_ntoa(struct in_addr addr); /* returns ptr to static buffer; not reentrant! */ + +s32 if_config( char *local_ip, char *netmask, char *gateway,bool use_dhcp, int max_retries); +s32 if_configex(struct in_addr *local_ip, struct in_addr *netmask, struct in_addr *gateway, bool use_dhcp, int max_retries); + +s32 net_init(); +#ifdef HW_RVL +typedef s32 (*netcallback)(s32 result, void *usrdata); +s32 net_init_async(netcallback cb, void *usrdata); +s32 net_get_status(void); +void net_wc24cleanup(); +s32 net_get_mac_address(void *mac_buf); +#endif +void net_deinit(); + +u32 net_gethostip(); +s32 net_socket(u32 domain,u32 type,u32 protocol); +s32 net_bind(s32 s,struct sockaddr *name,socklen_t namelen); +s32 net_listen(s32 s,u32 backlog); +s32 net_accept(s32 s,struct sockaddr *addr,socklen_t *addrlen); +s32 net_connect(s32 s,struct sockaddr *,socklen_t); +s32 net_write(s32 s,const void *data,s32 size); +s32 net_send(s32 s,const void *data,s32 size,u32 flags); +s32 net_sendto(s32 s,const void *data,s32 len,u32 flags,struct sockaddr *to,socklen_t tolen); +s32 net_recv(s32 s,void *mem,s32 len,u32 flags); +s32 net_recvfrom(s32 s,void *mem,s32 len,u32 flags,struct sockaddr *from,socklen_t *fromlen); +s32 net_read(s32 s,void *mem,s32 len); +s32 net_close(s32 s); +s32 net_select(s32 maxfdp1,fd_set *readset,fd_set *writeset,fd_set *exceptset,struct timeval *timeout); +s32 net_setsockopt(s32 s,u32 level,u32 optname,const void *optval,socklen_t optlen); +s32 net_ioctl(s32 s, u32 cmd, void *argp); +s32 net_fcntl(s32 s, u32 cmd, u32 flags); +s32 net_poll(struct pollsd *sds,s32 nsds,s32 timeout); +s32 net_shutdown(s32 s, u32 how); + +struct hostent * net_gethostbyname(const char *addrString); + +#ifdef __cplusplus + } +#endif + +#endif diff --git a/wii/libogc/include/ogc/aram.h b/wii/libogc/include/ogc/aram.h new file mode 100644 index 0000000000..af382a5cca --- /dev/null +++ b/wii/libogc/include/ogc/aram.h @@ -0,0 +1,272 @@ +/*------------------------------------------------------------- + +aram.h -- ARAM subsystem + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + + +#ifndef __ARAM_H__ +#define __ARAM_H__ + +/*! + * \file aram.h + * \brief ARAM subsystem + * + */ + +#include + + +/*! + * \addtogroup dmamode ARAM DMA transfer direction + * @{ + */ + +#define AR_MRAMTOARAM 0 /*!< direction: MRAM -> ARAM (write) */ +#define AR_ARAMTOMRAM 1 /*!< direction: ARAM -> MRAM (read) */ + +/*! + * @} + */ + + + +/*! + * \addtogroup memmode ARAM memory access modes + * @{ + */ + +#define AR_ARAMINTALL 0 /*!< use all the internal ARAM memory */ +#define AR_ARAMINTUSER 1 /*!< use only the internal user space of the ARAM memory */ + +/*! + * @} + */ + + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + + +/*! + * \typedef void (*ARCallback)(void) + * \brief function pointer typedef for the user's ARAM interrupt callback + * + * \param none + */ +typedef void (*ARCallback)(void); + + +/*! + * \fn ARCallback AR_RegisterCallback(ARCallback callback) + * \brief Register the given function as a DMA callback + * + * Any existing callback is replaced unconditionally + * + * \param[in] callback to be invoked upon completion of DMA transaction + * + * \return pointer to the previously registered callback and NULL respectively + */ +ARCallback AR_RegisterCallback(ARCallback callback); + + +/*! + * \fn u32 AR_GetDMAStatus() + * \brief Get current status of DMA + * + * \return zero if DMA is idle, non-zero if a DMA is in progress + */ +u32 AR_GetDMAStatus(); + + +/*! + * \fn u32 AR_Init(u32 *stack_idx_array,u32 num_entries) + * \brief Initializes ARAM subsystem. + * + * Following tasks are performed: + * + * - Disables ARAM DMA + * - Sets DMA callback to NULL + * - Initializes ARAM controller + * - Determines size of ARAM memory + * - Initializes the ARAM stack based memory allocation system
+ * + * The parameter u32 *stack_idx_array points to an array of u32 integers. The parameter u32 num_entries specifies the number of entries in this array.
+ * The user application is responsible for determining how many ARAM blocks the device driver can allocate.
+ * + * As an example, consider: + * \code + * #define MAX_NUM_BLOCKS 10 + * + * u32 aram_blocks[MAX_NUM_BLOCKS]; + * ... + * void func(void) + * { + * AR_Init(aram_blocks, MAX_NUM_BLOCKS); + * } + * \endcode + * + * Here, we are telling AR that the application will allocate, at most, 10 blocks (of arbitrary size), and that AR should store addresses for those blocks in the array aram_blocks. Note that the array is simply storage supplied by the application so that AR can track the number and size of memory blocks allocated by AR_Alloc(). + * AR_Free()also uses this array to release blocks.
+ * If you do not wish to use AR_Alloc() and AR_Free() and would rather manage ARAM usage within your application, then call AR_Init() like so:
+ * + * AR_Init(NULL, 0);
+ * + * The AR_Init() function also calculates the total size of the ARAM aggregate. Note that this procedure is destructive - i.e., any data stored in ARAM will be corrupted.
+ * AR_Init()may be invoked multiple times. This function checks the state of an initialization flag; if asserted, this function will simply exit on subsequent calls. To perform another initialization of the ARAM driver, call AR_Reset() before invoking AR_Init() again. + * + * \param[in] stack_idx_array pointer to an array of u32 integer + * \param[in] num_entries number of entries in the specified array + * + * \return base address of the "user" ARAM area. As of this writing, the operating system reserves the bottom 16 KB of ARAM. Therefore, AR_Init() returns 0x04000 to indicate the starting location of the ARAM user area. + */ +u32 AR_Init(u32 *stack_idx_array,u32 num_entries); + + +/*! + * \fn void AR_StartDMA(u32 dir,u32 memaddr,u32 aramaddr,u32 len) + * \brief Initiates a DMA between main memory and ARAM. + * + * This function: + * + * - Does not perform boundery-checking on addresses and lengths. + * - Will assert failure if a DMA is allready in progress. + * - Is provided for debugging purpose. Application programmers must use the ARQ API in order to access ARAM. + * + * \param[in] dir specifies the \ref dmamode "direction" of transfer. + * \param[in] memaddr specifies main memory address for the transfer + * \param[in] aramaddr specifies the ARAM address for the transfer. NOTE: Addresses are 27bits wide and refer to bytes + * \param[in] len specifies the length of the block to transfer. NOTE: Must be in bytes and a multiple of 32 + * + * \return none + */ +void AR_StartDMA(u32 dir,u32 memaddr,u32 aramaddr,u32 len); + + +/*! + * \fn u32 AR_Alloc(u32 len) + * \brief Allocate a block of memory from ARAM having len bytes. + * + * The len parameter must be a multiple of 32 + * + * \param[in] len length of the specified block of memory in ARAM + * + * \return address of the block if successful, otherwise NULL + */ +u32 AR_Alloc(u32 len); + + +/*! + * \fn u32 AR_Free(u32 *len) + * \brief Free a block from ARAM + * + * \param[out] len pointer to receive the length of the free'd ARAM block. This is optional and can be NULL. + * + * \return ARAM current baseaddress after free'ing the block + */ +u32 AR_Free(u32 *len); + + +/*! + * \fn void AR_Clear(u32 flag) + * \brief Clear ARAM memory + * + * \param[in] flag specifies the region of ARAM to clear + * + * \return none + */ +void AR_Clear(u32 flag); + + +/*! + * \fn BOOL AR_CheckInit() + * \brief Get the ARAM subsystem initialization flag + * + * \return TRUE if the ARAM subsystem has been initialized(via AR_Init())
+ * FALSE if the ARAM subsystem has not been initialized, or has been reset(via AR_Reset()) + */ +BOOL AR_CheckInit(); + + +/*! + * \fn void AR_Reset() + * \brief Clears the ARAM subsystem initialization flag. + * + * Calling AR_Init() after this function will cause a "real" initialization of ARAM + * + * \return none + */ +void AR_Reset(); + + +/*! + * \fn u32 AR_GetSize() + * \brief Get the total size - in bytes - of ARAM as calculated during AR_Init() + * + * \return size of the specified ARAM block + */ +u32 AR_GetSize(); + + +/*! + * \fn u32 AR_GetBaseAddress() + * \brief Get the baseaddress of ARAM memory + * + * \return ARAM memory baseaddress + */ +u32 AR_GetBaseAddress(); + + +/*! + * \fn u32 AR_GetInternalSize() + * \brief Get the size of the internal ARAM memory + * + * \return ARAM internal memory size + */ +u32 AR_GetInternalSize(); + + +/*! + * \def AR_StartDMARead(maddr,araddr,tlen) + * \brief Wraps the DMA read operation done by AR_StartDMA() + */ +#define AR_StartDMARead(maddr,araddr,tlen) \ + AR_StartDMA(AR_ARAMTOMRAM,maddr,araddr,tlen); + + +/*! + * \def AR_StartDMAWrite(maddr,araddr,tlen) + * \brief Wraps the DMA write operation done by AR_StartDMA() + */ +#define AR_StartDMAWrite(maddr,araddr,tlen) \ + AR_StartDMA(AR_MRAMTOARAM,maddr,araddr,tlen); + +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif //__ARAM_H__ diff --git a/wii/libogc/include/ogc/arqmgr.h b/wii/libogc/include/ogc/arqmgr.h new file mode 100644 index 0000000000..3c64628851 --- /dev/null +++ b/wii/libogc/include/ogc/arqmgr.h @@ -0,0 +1,113 @@ +/*------------------------------------------------------------- + + +arqmgr.h -- ARAM task queue management + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + + +-------------------------------------------------------------*/ + + +#ifndef __ARQMGR_H__ +#define __ARQMGR_H__ + + +/*! + * \file arqmgr.h + * \brief ARAM queue managemnt subsystem + * + */ + + +#include + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + + +/*! + * \typedef void (*ARQMCallback)() + * \brief function pointer typedef for the user's callback when ARAM operation has completed + * \param none + */ +typedef void (*ARQMCallback)(s32 result); + + +/*! + * \fn void ARQM_Init(u32 arambase,s32 len) + * \brief Initialize the ARAM queue management system + * + * \param[in] arambase ARAM startaddress to take for the queue stack + * \param[in] len maximum amount of memory to be reserved from the ARAM for the queue management + * + * \return none + */ +void ARQM_Init(u32 arambase,s32 len); + + +/*! + * \fn u32 ARQM_PushData(void *buff,s32 len) + * \brief Push the data onto the ARAM queue + * + * \param[in] buff startaddress of buffer to be pushed onto the queue. NOTE: Must be 32-bytealigned. + * \param[in] len length of data to be pushed onto the queue. + * + * \return none + */ +u32 ARQM_PushData(void *buffer,s32 len); + + +/*! + * \fn u32 ARQM_GetZeroBuffer() + * \brief Returns ARAM address of 'zero buffer' + * + * \return See description + */ +u32 ARQM_GetZeroBuffer(); + + +/*! + * \fn u32 ARQM_GetStackPointer() + * \brief Return the ARAM address of the next free stack pointer + * + * \return See description + */ +u32 ARQM_GetStackPointer(); + + +/*! + * \fn u32 ARQM_GetFreeSize() + * \brief Return Returns remaining number of bytes on stack + * + * \return See description + */ +u32 ARQM_GetFreeSize(); + +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif diff --git a/wii/libogc/include/ogc/arqueue.h b/wii/libogc/include/ogc/arqueue.h new file mode 100644 index 0000000000..2aff9e1780 --- /dev/null +++ b/wii/libogc/include/ogc/arqueue.h @@ -0,0 +1,115 @@ +/*------------------------------------------------------------- + +arqueue.h -- ARAM task request queue implementation + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + + +-------------------------------------------------------------*/ + + +#ifndef __ARQUEUE_H__ +#define __ARQUEUE_H__ + +#include +#include +#include "aram.h" + +#define ARQ_MRAMTOARAM AR_MRAMTOARAM +#define ARQ_ARAMTOMRAM AR_ARAMTOMRAM + +#define ARQ_DEF_CHUNK_SIZE 4096 + +#define ARQ_PRIO_LO 0 +#define ARQ_PRIO_HI 1 + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +enum { + ARQ_TASK_READY = 0, + ARQ_TASK_RUNNING, + ARQ_TASK_FINISHED +}; + +typedef struct _arq_request ARQRequest; +typedef void (*ARQCallback)(ARQRequest *); + +struct _arq_request { + lwp_node node; + u32 owner,dir,prio,state; + u32 aram_addr,mram_addr,len; + ARQCallback callback; +}; + +void ARQ_Init(); +void ARQ_Reset(); + + +/*! + * \fn void ARQ_PostRequest(ARQRequest *req,u32 owner,u32 dir,u32 prio,u32 aram_addr,u32 mram_addr,u32 len) + * \brief Enqueue a ARAM DMA transfer request. + * + * \param[in] req structure to hold ARAM DMA request informations. + * \param[in] owner unique owner id. + * \param[in] dir direction of ARAM DMA transfer. + * \param[in] prio priority of request. + * \param[in] aram_addr startaddress of buffer to be pushed onto the queue. NOTE: Must be 32-bytealigned. + * \param[in] mram_addr length of data to be pushed onto the queue. + * \param[in] len startaddress of buffer to be pushed onto the queue. NOTE: Must be 32-bytealigned. + * \param[in] cb length of data to be pushed onto the queue. + * + * \return none + */ +void ARQ_PostRequest(ARQRequest *req,u32 owner,u32 dir,u32 prio,u32 aram_addr,u32 mram_addr,u32 len); + + +/*! + * \fn void ARQ_PostRequestAsync(ARQRequest *req,u32 owner,u32 dir,u32 prio,u32 aram_addr,u32 mram_addr,u32 len,ARQCallback cb) + * \brief Enqueue a ARAM DMA transfer request. + * + * \param[in] req structure to hold ARAM DMA request informations. + * \param[in] owner unique owner id. + * \param[in] dir direction of ARAM DMA transfer. + * \param[in] prio priority of request. + * \param[in] aram_addr startaddress of buffer to be pushed onto the queue. NOTE: Must be 32-bytealigned. + * \param[in] mram_addr length of data to be pushed onto the queue. + * \param[in] len startaddress of buffer to be pushed onto the queue. NOTE: Must be 32-bytealigned. + * \param[in] cb length of data to be pushed onto the queue. + * + * \return none + */ +void ARQ_PostRequestAsync(ARQRequest *req,u32 owner,u32 dir,u32 prio,u32 aram_addr,u32 mram_addr,u32 len,ARQCallback cb); +void ARQ_RemoveRequest(ARQRequest *req); +void ARQ_SetChunkSize(u32 size); +u32 ARQ_GetChunkSize(); +void ARQ_FlushQueue(); +u32 ARQ_RemoveOwnerRequest(u32 owner); + +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif diff --git a/wii/libogc/include/ogc/audio.h b/wii/libogc/include/ogc/audio.h new file mode 100644 index 0000000000..8d13f68042 --- /dev/null +++ b/wii/libogc/include/ogc/audio.h @@ -0,0 +1,319 @@ +/*------------------------------------------------------------- + +audio.h -- Audio subsystem + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + + + +-------------------------------------------------------------*/ + + +#ifndef __AUDIO_H__ +#define __AUDIO_H__ + +/*! \file audio.h +\brief AUDIO subsystem + +*/ + +#include + +/*! + * \addtogroup ai_stream_mode AI streaming modes + * @{ + */ + +#define AI_STREAM_STOP 0x00000000 /*!< Stop streaming audio playback */ +#define AI_STREAM_START 0x00000001 /*!< Start streaming audio playback */ + +/*! + * @} + */ + + + +/*! + * \addtogroup ai_sample_rates AI sampling rates + * @{ + */ + +#define AI_SAMPLERATE_32KHZ 0x00000000 /*!< AI sampling rate at 32kHz */ +#define AI_SAMPLERATE_48KHZ 0x00000001 /*!< AI sampling rate at 48kHz */ + +/*! + * @} + */ + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +/*! + * \typedef void (*AIDCallback)(void) + * \brief function pointer typedef for the user's Audio DMA interrupt callback + * + * \param none + */ +typedef void (*AIDCallback)(void); + + +/*! + * \typedef void (*AISCallback)(u32 smp_cnt) + * \brief function pointer typedef for the user's Audio Streaming interrupt callback + * + * \param smp_cnt AI sample count + */ +typedef void (*AISCallback)(u32 smp_cnt); + + +/*! + * \fn AISCallback AUDIO_RegisterStreamCallback(AISCallback callback) + * \brief Register a user callback function for the AUDIO streaming interface + * + * \param[in] callback pointer to the function which to call when AIS interrupt has triggered. + * + * \return pointer to old callback function or NULL respectively. + */ +AISCallback AUDIO_RegisterStreamCallback(AISCallback callback); + + +/*! + * \fn void AUDIO_Init(u8 *stack) + * \brief Initialize the AUDIO subsystem + * + * \param[in] stack pointer to a memory area to work as stack when calling the callbacks. May be NULL + * + * \return none + */ +void AUDIO_Init(u8 *stack); + + +/*! + * \fn void AUDIO_SetStreamVolLeft(u8 vol) + * \brief Set streaming volume on the left channel. + * + * \param[in] vol level of volume 0<= vol <=255 + * + * \return none + */ +void AUDIO_SetStreamVolLeft(u8 vol); + + +/*! + * \fn u8 AUDIO_GetStreamVolLeft() + * \brief Get streaming volume of the left channel. + * + * \return level of volume. + */ +u8 AUDIO_GetStreamVolLeft(); + + +/*! + * \fn void AUDIO_SetStreamVolRight(u8 vol) + * \brief set streaming volume of the right channel. + * + * \param[in] vol level of volume 0<= vol <=255 + * + * \return none + */ +void AUDIO_SetStreamVolRight(u8 vol); + + +/*! + * \fn u8 AUDIO_GetStreamVolRight() + * \brief Get streaming volume of the right channel. + * + * \return level of volume. + */ +u8 AUDIO_GetStreamVolRight(); + + +/*! + * \fn void AUDIO_SetStreamSampleRate(u32 rate) + * \brief Set streaming sample rate + * + * \param[in] rate streaming \ref ai_sample_rates "sample rate" + * + * \return none + */ +void AUDIO_SetStreamSampleRate(u32 rate); + + +/*! + * \fn u32 AUDIO_GetStreamSampleRate() + * \brief Get streaming sample rate + * + * \return \ref ai_sample_rates "sample rate" + */ +u32 AUDIO_GetStreamSampleRate(); + + +/*! + * \fn AIDCallback AUDIO_RegisterDMACallback(AIDCallback callback) + * \brief Register a user callback function for the audio DMA interface. + * + * This callback will be called whenever the audio DMA requests new data.
+ * Internally the DMA buffers are double buffered. + * + * \param[in] callback pointer to the function which to call when AID interrupt has triggered. + * + * \return pointer to old callback function or NULL respectively. + */ +AIDCallback AUDIO_RegisterDMACallback(AIDCallback callback); + + +/*! + * \fn void AUDIO_InitDMA(u32 startaddr,u32 len) + * \brief Initialize an audio DMA transfer + * + * \param[in] startaddr start address of the memory region to load into the audio DMA. NOTE: Has to be aligned on a 32byte boundery! + * \param[in] len lenght of data to load into the audio DMA. NOTE: Should be a multiple of 32 + * + * \return none + */ +void AUDIO_InitDMA(u32 startaddr,u32 len); + + +/*! + * \fn u16 AUDIO_GetDMAEnableFlag() + * \brief Get the audio DMA flag + * + * \return state of the current DMA operation. + */ +u16 AUDIO_GetDMAEnableFlag(); + + +/*! + * \fn void AUDIO_StartDMA() + * \brief Start the audio DMA operation. + * + * Starts to transfer the data from main memory to the audio interface thru DMA.
+ * This call should follow the call to AUDIO_InitDMA() which is used to initialize DMA transfers. + * + * \return none + */ +void AUDIO_StartDMA(); + + +/*! + * \fn void AUDIO_StopDMA() + * \brief Stop the previously started audio DMA operation. + * + * \return none + */ +void AUDIO_StopDMA(); + + +/*! + * \fn u32 AUDIO_GetDMABytesLeft() + * \brief Get the count of bytes, left to play, from the audio DMA interface + * + * \return count of bytes left to play. + */ +u32 AUDIO_GetDMABytesLeft(); + + +/*! + * \fn u32 AUDIO_GetDMALength() + * \brief Get the DMA transfer length configured in the audio DMA interface. + * + * \return length of data loaded into the audio DMA interface. + */ +u32 AUDIO_GetDMALength(); + + +/*! + * \fn u32 AUDIO_GetDMAStartAddr() + * \brief Get the main memory address for the DMA operation. + * + * \return start address of mainmemory loaded into the audio DMA interface. + */ +u32 AUDIO_GetDMAStartAddr(); + + +/*! + * \fn void AUDIO_SetStreamTrigger(u32 cnt) + * \brief Set the sample count for the stream trigger + * + * \param[in] cnt count of samples when to trigger the audio stream. + * + * \return none + */ +void AUDIO_SetStreamTrigger(u32 cnt); + + +/*! + * \fn void AUDIO_ResetStreamSampleCnt() + * \brief Reset the stream sample count register. + * + * \return none + */ +void AUDIO_ResetStreamSampleCnt(); + + +/*! + * \fn void AUDIO_SetDSPSampleRate(u8 rate) + * \brief Set the sampling rate for the DSP interface + * + * \param[in] rate sampling rate to set for the DSP (AI_SAMPLERATE_32KHZ,AI_SAMPLERATE_48KHZ) + * + * \return none + */ +void AUDIO_SetDSPSampleRate(u8 rate); + + +/*! + * \fn u32 AUDIO_GetDSPSampleRate() + * \brief Get the sampling rate for the DSP interface + * + * \return DSP sampling rate (AI_SAMPLERATE_32KHZ,AI_SAMPLERATE_48KHZ) + */ +u32 AUDIO_GetDSPSampleRate(); + + +/*! + * \fn void AUDIO_SetStreamPlayState(u32 state) + * \brief Set the play state for the streaming audio interface + * + * \param[in] state playstate of the streaming audio interface (AI_STREAM_STOP,AI_STREAM_START) + * + * \return none + */ +void AUDIO_SetStreamPlayState(u32 state); + + +/*! + * \fn u32 AUDIO_GetStreamPlayState() + * \brief Get the play state from the streaming audio interface + * + * \return playstate (AI_STREAM_STOP,AI_STREAM_START) + */ +u32 AUDIO_GetStreamPlayState(); + +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif diff --git a/wii/libogc/include/ogc/cache.h b/wii/libogc/include/ogc/cache.h new file mode 100644 index 0000000000..0753956a1f --- /dev/null +++ b/wii/libogc/include/ogc/cache.h @@ -0,0 +1,326 @@ +/*------------------------------------------------------------- + + +cache.h -- Cache interface + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + + +-------------------------------------------------------------*/ + + +#ifndef __CACHE_H__ +#define __CACHE_H__ + +/*! \file cache.h +\brief Cache subsystem + +*/ + +#include + +#define LC_BASEPREFIX 0xe000 +#define LC_BASE (LC_BASEPREFIX<<16) + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + + +/*! + * \fn void DCEnable() + * \brief Enable L1 d-cache + * + * \return none + */ +void DCEnable(); + + +/*! + * \fn void DCDisable() + * \brief Disable L1 d-cache + * + * \return none + */ +void DCDisable(); + + +/*! + * \fn void DCFreeze() + * \brief Current contents of the L1 d-cache are locked down and will not be cast out. + * + * Hits are still serviced, but misses go straight to L2 or 60x bus. Most cache operations, such as DCFlushRange(), will still execute regardless of whether the cache is frozen.
+ * NOTE: In PowerPC architecture jargon, this feature is referred to as "locking" the data cache. We use the word "freeze" to distinguish it from the locked cache and DMA features. + * + * \return none + */ +void DCFreeze(); + + +/*! + * \fn void DCUnfreeze() + * \brief Undoes actions of DCFreeze(). + * + * Old cache blocks will now be cast out on subsequent L1 misses.
+ * NOTE: In PowerPC architecture jargon, this feature is referred to as "locking" the data cache. We use the word "freeze" to distinguish it from the locked cache and DMA features. + * + * \return none + */ +void DCUnfreeze(); + + +/*! + * \fn void DCFlashInvalidate() + * \brief Invalidate L1 d-cache. + * + * An invalidate operation is issued that marks the state of each data cache block as invalid without writing back modified cache blocks to memory.
+ * Cache access is blocked during this time.Bus accesses to the cache are signaled as a miss during invalidate-all operations. + * + * \return none + */ +void DCFlashInvalidate(); + + +/*! + * \fn void DCInvalidateRange(void *startaddress,u32 len) + * \brief Invalidates a given range of the d-cache. + * + * If any part of the range hits in the d-cache, the corresponding block will be invalidated. + * + * \param[in] startaddress pointer to the startaddress of the memory range to invalidate. NOTE: Has to be aligned on a 32byte boundery + * \param[in] len length of the range to invalidate. NOTE: Should be a multiple of 32 + * + * \return none + */ +void DCInvalidateRange(void *startaddress,u32 len); + + +/*! + * \fn void DCFlushRange(void *startaddress,u32 len) + * \brief Flushes a given range. + * + * If any part of the range hits in the d-cache the corresponding block will be flushed to main memory and invalidated.
+ * NOTE: This function invokes a "sync" after flushing the range. This means the function will stall until the CPU knows that the data has been writen to main memory + * + * \param[in] startaddress pointer to the startaddress of the memory range to flush. NOTE: Has to be aligned on a 32byte boundery + * \param[in] len length of range to be flushed. NOTE: Should be a multiple of 32 + * + *\return none + */ +void DCFlushRange(void *startaddress,u32 len); + +/*! + * \fn void DCStoreRange(void *startaddress,u32 len) + * \brief Ensures a range of memory is updated with any modified data in the cache. + * + * NOTE: This function invokes a "sync" after storing the range. This means the function will stall until the CPU knows that the data has been writen to main memory + * + * \param[in] startaddress pointer to the startaddress of the memory range to store. NOTE: Has to be aligned on a 32byte boundery + * \param[in] len length of the range to store. NOTE: Should be a multiple of 32 + * + * \return none + */ +void DCStoreRange(void *startaddress,u32 len); + + +/*! + * \fn void DCFlushRangeNoSync(void *startaddress,u32 len) + * \brief Flushes a given range. + * + * If any part of the range hits in the d-cache the corresponding block will be flushed to main memory and invalidated.
+ * NOTE: This routine does not perform a "sync" to ensure that the range has been flushed to memory. That is, the cache blocks are sent to the bus interface unit for storage to main memory, but by the time this function returns, you are not guaranteed that the blocks have been written to memory. + * + * \param[in] startaddress pointer to the startaddress of the memory range to flush. NOTE: Has to be aligned on a 32byte boundery + * \param[in] len length of range to be flushed. NOTE: Should be a multiple of 32 + * + * \return none + */ +void DCFlushRangeNoSync(void *startaddress,u32 len); + + +/*! + * \fn void DCStoreRangeNoSync(void *startaddress,u32 len) + * \brief Ensures a range of memory is updated with any modified data in the cache. + * + * NOTE: This routine does not perform a "sync" to ensure that the range has been flushed to memory. That is, the cache blocks are sent to the bus interface unit for storage to main memory, but by the time this function returns, you are not guaranteed that the blocks have been written to memory + * + * \param[in] startaddress pointer to the startaddress of the memory range to store. NOTE: Has to be aligned on a 32byte boundery + * \param[in] len length of the range to store. NOTE: Should be a multiple of 32 + * + * \return none + */ +void DCStoreRangeNoSync(void *startaddress,u32 len); + + +/*! + * \fn void DCZeroRange(void *startaddress,u32 len) + * \brief Loads a range of memory into cache and zeroes all the cache lines. + * + * \param[in] startaddress pointer to the startaddress of the memory range to load/zero. NOTE: Has to be aligned on a 32byte boundery + * \param[in] len length of the range to load/zero. NOTE: Should be a multiple of 32 + * + * \return none + */ +void DCZeroRange(void *startaddress,u32 len); + + +/*! + * \fn void DCTouchRange(void *startaddress,u32 len) + * \brief Loads a range of memory into cache. + * + * \param[in] startaddress pointer to the startaddress of the memory range to load. NOTE: Has to be aligned on a 32byte boundery + * \param[in] len length of the range to load. NOTE: Should be a multiple of 32 + * + * \return none + */ +void DCTouchRange(void *startaddress,u32 len); + + +/*! + * \fn void ICSync() + * \brief Performs an instruction cache synchronization. + * + * This ensures that all instructions preceding this instruction have completed before this instruction completes. + * + * \return none + */ +void ICSync(); + + +/*! + * \fn void ICFlashInvalidate() + * \brief Invalidate the L1 i-cache. + * + * An invalidate operation is issued that marks the state of each instruction cache block as invalid without writing back modified cache blocks to memory.
+ * Cache access is blocked during this time. Bus accesses to the cache are signaled as a miss during invalidate-all operations. + * + * \return none + */ +void ICFlashInvalidate(); + + +/*! + * \fn void ICEnable() + * \brief Enable L1 i-cache + * + * \return none + */ +void ICEnable(); + + +/*! + * \fn void ICDisable() + * \brief Disable L1 i-cache + * + * \return none + */ +void ICDisable(); + + +/*! + * \fn void ICFreeze() + * \brief Current contents of the L1 i-cache are locked down and will not be cast out. + * + * Hits are still serviced, but misses go straight to L2 or 60x bus.
+ * NOTE: In PowerPC architecture jargon, this feature is referred to as "locking" the data cache. We use the word "freeze" to distinguish it from the locked cache and DMA features. + * + * \return none + */ +void ICFreeze(); + + +/*! + * \fn void ICUnfreeze() + * \brief Undoes actions of ICFreeze(). + * + * Old cache blocks will now be cast out on subsequent L1 misses.
+ * NOTE: In PowerPC architecture jargon, this feature is referred to as "locking" the data cache. We use the word "freeze" to distinguish it from the locked cache and DMA features. + * + * \return none + */ +void ICUnfreeze(); + + +/*! + * \fn void ICBlockInvalidate(void *startaddress) + * \brief Invalidates a block in the i-cache. + * + * If the block hits in the i-cache, the corresponding block will be invalidated. + * + * \param[in] startaddress pointer to the startaddress of the memory block to invalidate. NOTE: Has to be aligned on a 32byte boundery + * + *\return none + */ +void ICBlockInvalidate(void *startaddress); + + +/*! + * \fn void ICInvalidateRange(void *startaddress,u32 len) + * \brief Invalidate a range in the L1 i-cache. + * + * If any part of the range hits in the i-cache, the corresponding block will be invalidated. + * + * \param[in] startaddress pointer to the startaddress of the memory range to invalidate. NOTE: Has to be aligned on a 32byte boundery + * \param[in] len length of the range to invalidate. NOTE: Should be a multiple of 32 + * + * \return none + */ +void ICInvalidateRange(void *startaddress,u32 len); + +/*! + * \fn void L2Enhance() + * \brief Turn on extra L2 cache features + * + * Sets the following bits in the HID4 register which affect the L2 cache: + * - L2FM=01 (64-byte fetch mode) + * - BCO=1 (dual 64-byte castout buffers) + * - L2MUM=1 (configured as 2-deep miss-under-miss cache) + * Since these features can't be enabled safely, any HID4 writes in the HBC stub will be removed. + * + * \return none + */ +#ifdef HW_RVL +void L2Enhance(); +#endif + +void LCEnable(); +void LCDisable(); +void LCLoadBlocks(void *,void *,u32); +void LCStoreBlocks(void *,void *,u32); +u32 LCLoadData(void *,void *,u32); +u32 LCStoreData(void *,void *,u32); +u32 LCQueueLength(); +u32 LCQueueWait(u32); +void LCFlushQueue(); +void LCAlloc(void *,u32); +void LCAllocNoInvalidate(void *,u32); +void LCAllocOneTag(BOOL,void *); +void LCAllocTags(BOOL,void *,u32); + +#define LCGetBase() ((void*)LC_BASE) +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif diff --git a/wii/libogc/include/ogc/card.h b/wii/libogc/include/ogc/card.h new file mode 100644 index 0000000000..ff7d70b56b --- /dev/null +++ b/wii/libogc/include/ogc/card.h @@ -0,0 +1,605 @@ +/*------------------------------------------------------------- + +card.h -- Memory card subsystem + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + + +#ifndef __CARD_H__ +#define __CARD_H__ + +/*! +\file card.h +\brief Memory card subsystem + +*/ + + +#include + +/*! \addtogroup cardsolts Memory card slots + * @{ + */ + +#define CARD_SLOTA 0 /*!< memory card slot A */ +#define CARD_SLOTB 1 /*!< memory card slot B */ + +/*! @} */ + + +#define CARD_WORKAREA (5*8*1024) /*!< minimum size of the workarea passed to Mount[Async]() */ +#define CARD_READSIZE 512 /*!< minimum size of block to read from memory card */ +#define CARD_FILENAMELEN 32 /*!< maximum filename length */ +#define CARD_MAXFILES 128 /*!< maximum number of files on the memory card */ + +/*! \addtogroup card_errors Memory card error codes + * @{ + */ + +#define CARD_ERROR_UNLOCKED 1 /*!< card beeing unlocked or allready unlocked. */ +#define CARD_ERROR_READY 0 /*!< card is ready. */ +#define CARD_ERROR_BUSY -1 /*!< card is busy. */ +#define CARD_ERROR_WRONGDEVICE -2 /*!< wrong device connected in slot */ +#define CARD_ERROR_NOCARD -3 /*!< no memory card in slot */ +#define CARD_ERROR_NOFILE -4 /*!< specified file not found */ +#define CARD_ERROR_IOERROR -5 /*!< internal EXI I/O error */ +#define CARD_ERROR_BROKEN -6 /*!< directory structure or file entry broken */ +#define CARD_ERROR_EXIST -7 /*!< file allready exists with the specified parameters */ +#define CARD_ERROR_NOENT -8 /*!< found no empty block to create the file */ +#define CARD_ERROR_INSSPACE -9 /*!< not enough space to write file to memory card */ +#define CARD_ERROR_NOPERM -10 /*!< not enough permissions to operate on the file */ +#define CARD_ERROR_LIMIT -11 /*!< card size limit reached */ +#define CARD_ERROR_NAMETOOLONG -12 /*!< filename too long */ +#define CARD_ERROR_ENCODING -13 /*!< font encoding PAL/SJIS mismatch*/ +#define CARD_ERROR_CANCELED -14 /*!< card operation canceled */ +#define CARD_ERROR_FATAL_ERROR -128 /*!< fatal error, non recoverable */ + +/*! @} */ + + +/* File attribute defines */ +#define CARD_ATTRIB_PUBLIC 0x04 +#define CARD_ATTRIB_NOCOPY 0x08 +#define CARD_ATTRIB_NOMOVE 0x10 + +/* Banner & Icon Attributes */ +#define CARD_BANNER_W 96 +#define CARD_BANNER_H 32 + +#define CARD_BANNER_NONE 0x00 +#define CARD_BANNER_CI 0x01 +#define CARD_BANNER_RGB 0x02 +#define CARD_BANNER_MASK 0x03 + +#define CARD_MAXICONS 8 +#define CARD_ICON_W 32 +#define CARD_ICON_H 32 + +#define CARD_ICON_NONE 0x00 +#define CARD_ICON_CI 0x01 +#define CARD_ICON_RGB 0x02 +#define CARD_ICON_MASK 0x03 + +#define CARD_ANIM_LOOP 0x00 +#define CARD_ANIM_BOUNCE 0x04 +#define CARD_ANIM_MASK 0x04 + +#define CARD_SPEED_END 0x00 +#define CARD_SPEED_FAST 0x01 +#define CARD_SPEED_MIDDLE 0x02 +#define CARD_SPEED_SLOW 0x03 +#define CARD_SPEED_MASK 0x03 + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + + +/*! \typedef struct _card_file card_file +\brief structure to hold the fileinformations upon open and for later use. +\param chn CARD slot. +\param filenum file index in the card directory structure. +\param offset offset into the file. +\param len length of file. +\param iblock block index on memory card. +*/ +typedef struct _card_file { + s32 chn; + s32 filenum; + s32 offset; + s32 len; + u16 iblock; +} card_file; + + +/*! \typedef struct card_dir +\brief structure to hold the information of a directory entry +\param chn CARD slot. +\param fileno file index in the card directory structure. +\param filelen length of file. +\param filename[CARD_FILENAMELEN] name of the file on card. +\param gamecode[4] string identifier <=4. +\param company[2] string identifier <=2. +\param showall boolean flag whether to showall entries or ony those identified by card_gamecode and card_company, previously set within the call to CARD_Init() +*/ +typedef struct _card_dir { + s32 chn; + u32 fileno; + u32 filelen; + u8 permissions; + u8 filename[CARD_FILENAMELEN]; + u8 gamecode[4]; + u8 company[2]; + bool showall; +} card_dir; + + +/*! \typedef struct card_stat +\brief structure to hold the additional statistical informations. +\param filename[CARD_FILENAMELEN] name of the file on card. +\param len length of file. +\param gamecode[4] string identifier <=4. +\param company[2] string identifier <=2. +\param banner_fmt format of banner. +\param icon_addr icon image address in file. +\param icon_speed speed of an animated icon. +\param comment_addr address in file of the comment block. +\param offset_banner offset in file to the banner's image data. +\param offset_banner_tlut offset in file to the banner's texture lookup table. +\param offset_icon[CARD_MAXICONS] array of offsets in file to the icon's image data banner_fmt)&CARD_BANNER_MASK) +#define CARD_SetBannerFmt(stat,fmt) ((stat)->banner_fmt = (u8)(((stat)->banner_fmt&~CARD_BANNER_MASK)|(fmt))) +#define CARD_GetIconFmt(stat,n) (((stat)->icon_fmt>>(2*(n)))&CARD_ICON_MASK) +#define CARD_SetIconFmt(stat,n,fmt) ((stat)->icon_fmt = (u16)(((stat)->icon_fmt&~(CARD_ICON_MASK<<(2*(n))))|((fmt)<<(2*(n))))) +#define CARD_GetIconSpeed(stat,n) (((stat)->icon_speed>>(2*(n)))&~CARD_SPEED_MASK); +#define CARD_SetIconSpeed(stat,n,speed) ((stat)->icon_speed = (u16)(((stat)->icon_fmt&~(CARD_SPEED_MASK<<(2*(n))))|((speed)<<(2*(n))))) +#define CARD_SetIconAddr(stat,addr) ((stat)->icon_addr = (u32)(addr)) +#define CARD_SetCommentAddr(stat,addr) ((stat)->comment_addr = (u32)(addr)) + +/*! \typedef void (*cardcallback)(s32 chan,s32 result) +\brief function pointer typedef for the user's operation callback +\param chan CARD slot +\param result result of operation upon call of callback. +*/ +typedef void (*cardcallback)(s32 chan,s32 result); + + +/*! \fn s32 CARD_Init(const char *gamecode,const char *company) +\brief Performs the initialization of the memory card subsystem +\param[in] gamecode pointer to a 4byte long string to specify the vendors game code. May be NULL +\param[in] company pointer to a 2byte long string to specify the vendors company code. May be NULL + +\return \ref card_errors "card error codes" +*/ +s32 CARD_Init(const char *gamecode,const char *company); + + +/*! \fn s32 CARD_Probe(s32 chn) +\brief Performs a check against the desired EXI channel if a device is inserted +\param[in] chn CARD slot + +\return \ref card_errors "card error codes" +*/ +s32 CARD_Probe(s32 chn); + + +/*! \fn s32 CARD_ProbeEx(s32 chn,s32 *mem_size,s32 *sect_size) +\brief Performs a check against the desired EXI channel if a memory card is inserted or mounted +\param[in] chn CARD slot +\param[out] mem_size pointer to a integer variable, ready to take the resulting value (this param is optional and can be NULL) +\param[out] sect_size pointer to a integer variable, ready to take the resulting value (this param is optional and can be NULL) + +\return \ref card_errors "card error codes" +*/ +s32 CARD_ProbeEx(s32 chn,s32 *mem_size,s32 *sect_size); + + +/*! \fn s32 CARD_Mount(s32 chn,void *workarea,cardcallback detach_cb) +\brief Mounts the memory card in the slot CHN. Synchronous version. +\param[in] chn CARD slot +\param[in] workarea pointer to memory area to hold the cards system area. The startaddress of the workdarea should be aligned on a 32byte boundery +\param[in] detach_cb pointer to a callback function. This callback function will be called when the card is removed from the slot. + +\return \ref card_errors "card error codes" +*/ +s32 CARD_Mount(s32 chn,void *workarea,cardcallback detach_cb); + + +/*! \fn s32 CARD_MountAsync(s32 chn,void *workarea,cardcallback detach_cb,cardcallback attach_cb) +\brief Mounts the memory card in the slot CHN. This function returns immediately. Asynchronous version. +\param[in] chn CARD slot +\param[in] workarea pointer to memory area to hold the cards system area. The startaddress of the workdarea should be aligned on a 32byte boundery +\param[in] detach_cb pointer to a callback function. This callback function will be called when the card is removed from the slot. +\param[in] attach_cb pointer to a callback function. This callback function will be called when the mount process has finished. + +\return \ref card_errors "card error codes" +*/ +s32 CARD_MountAsync(s32 chn,void *workarea,cardcallback detach_cb,cardcallback attach_cb); + + +/*! \fn s32 CARD_Unmount(s32 chn) +\brief Unmounts the memory card in the slot CHN and releases the EXI bus. +\param[in] chn CARD slot + +\return \ref card_errors "card error codes" +*/ +s32 CARD_Unmount(s32 chn); + + +/*! \fn s32 CARD_Read(card_file *file,void *buffer,u32 len,u32 offset) +\brief Reads the data from the file into the buffer from the given offset with the given length. Synchronous version +\param[in] file pointer to the card_file structure. It holds the fileinformations to read from. +\param[out] buffer pointer to memory area read-in the data. The startaddress of the buffer should be aligned to a 32byte boundery. +\param[in] len length of data to read. +\param[in] offset offset into the file to read from. + +\return \ref card_errors "card error codes" +*/ +s32 CARD_Read(card_file *file,void *buffer,u32 len,u32 offset); + + +/*! \fn s32 CARD_ReadAsync(card_file *file,void *buffer,u32 len,u32 offset,cardcallback callback) +\brief Reads the data from the file into the buffer from the given offset with the given length. This function returns immediately. Asynchronous version +\param[in] file pointer to the card_file structure. It holds the fileinformations to read from. +\param[out] buffer pointer to memory area read-in the data. The startaddress of the buffer should be aligned to a 32byte boundery. +\param[in] len length of data to read. +\param[in] offset offset into the file to read from. +\param[in] callback pointer to a callback function. This callback will be called when the read process has finished. + +\return \ref card_errors "card error codes" +*/ +s32 CARD_ReadAsync(card_file *file,void *buffer,u32 len,u32 offset,cardcallback callback); + + +/*! \fn s32 CARD_Open(s32 chn,const char *filename,card_file *file) +\brief Opens the file with the given filename and fills in the fileinformations. +\param[in] chn CARD slot +\param[in] filename name of the file to open. +\param[out] file pointer to the card_file structure. It receives the fileinformations for later usage. + +\return \ref card_errors "card error codes" +*/ +s32 CARD_Open(s32 chn,const char *filename,card_file *file); + + +/*! \fn s32 CARD_OpenEntry(s32 chn,card_dir *entry,card_file *file) +\brief Opens the file with the given filename and fills in the fileinformations. +\param[in] chn CARD slot +\param[in] entry pointer to the directory entry to open. +\param[out] file pointer to the card_file structure. It receives the fileinformations for later usage. + +\return \ref card_errors "card error codes" +*/ +s32 CARD_OpenEntry(s32 chn,card_dir *entry,card_file *file); + + +/*! \fn s32 CARD_Close(card_file *file) +\brief Closes the file with the given card_file structure and releases the handle. +\param[in] file pointer to the card_file structure to close. + +\return \ref card_errors "card error codes" +*/ +s32 CARD_Close(card_file *file); + + +/*! \fn s32 CARD_Create(s32 chn,const char *filename,u32 size,card_file *file) +\brief Creates a new file with the given filename and fills in the fileinformations. Synchronous version. +\param[in] chn CARD slot +\param[in] filename name of the file to create. +\param[in] size size of the newly created file. This must be a multiple of the memory card's sector size. +\param[out] file pointer to the card_file structure. It receives the fileinformations for later usage. + +\return \ref card_errors "card error codes" +*/ +s32 CARD_Create(s32 chn,const char *filename,u32 size,card_file *file); + + +/*! \fn s32 CARD_CreateAsync(s32 chn,const char *filename,u32 size,card_file *file,cardcallback callback) +\brief Creates a new file with the given filename and fills in the fileinformations. This function returns immediately. Asynchronous version. +\param[in] chn CARD slot +\param[in] filename name of the file to create. +\param[in] size size of the newly created file. This must be a multiple of the memory card's sector size. +\param[out] file pointer to the card_file structure. It receives the fileinformations for later usage. +\param[in] callback pointer to a callback function. This callback will be called when the create process has finished. + +\return \ref card_errors "card error codes" +*/ +s32 CARD_CreateAsync(s32 chn,const char *filename,u32 size,card_file *file,cardcallback callback); + + +/*! \fn s32 CARD_CreateEntry(s32 chn,card_dir *entry,card_file *file) +\brief Creates a new file with the given filename and fills in the fileinformations. Synchronous version. +\param[in] chn CARD slot +\param[in] entry pointer to the directory entry to create. +\param[out] file pointer to the card_file structure. It receives the fileinformations for later usage. + +\return \ref card_errors "card error codes" +*/ +s32 CARD_CreateEntry(s32 chn,card_dir *direntry,card_file *file); + + +/*! \fn s32 CARD_CreateEntryAsync(s32 chn,card_dir *entry,card_file *file,cardcallback callback) +\brief Creates a new file with the given filename and fills in the fileinformations. This function returns immediately. Asynchronous version. +\param[in] chn CARD slot +\param[in] entry pointer to the directory entry to create +\param[out] file pointer to the card_file structure. It receives the fileinformations for later usage. +\param[in] callback pointer to a callback function. This callback will be called when the create process has finished. + +\return \ref card_errors "card error codes" +*/ +s32 CARD_CreateEntryAsync(s32 chn,card_dir *direntry,card_file *file,cardcallback callback); + + +/*! \fn s32 CARD_Delete(s32 chn,const char *filename) +\brief Deletes a file with the given filename. Synchronous version. +\param[in] chn CARD slot +\param[in] filename name of the file to delete. + +\return \ref card_errors "card error codes" +*/ +s32 CARD_Delete(s32 chn,const char *filename); + + +/*! \fn s32 CARD_DeleteAsync(s32 chn,const char *filename,cardcallback callback) +\brief Deletes a file with the given filename. This function returns immediately. Asynchronous version. +\param[in] chn CARD slot +\param[in] filename name of the file to delete. +\param[in] callback pointer to a callback function. This callback will be called when the delete process has finished. + +\return \ref card_errors "card error codes" +*/ +s32 CARD_DeleteAsync(s32 chn,const char *filename,cardcallback callback); + + +/*! \fn s32 CARD_DeleteEntry(s32 chn,card_dir *dir_entry) +\brief Deletes a file with the given directory entry informations. +\param[in] chn CARD slot +\param[in] dir_entry pointer to the card_dir structure which holds the informations for the delete operation. + +\return \ref card_errors "card error codes" +*/ +s32 CARD_DeleteEntry(s32 chn,card_dir *dir_entry); + + +/*! \fn s32 CARD_DeleteEntryAsync(s32 chn,card_dir *dir_entry,cardcallback callback) +\brief Deletes a file with the given directory entry informations. This function returns immediately. Asynchronous version. +\param[in] chn CARD slot +\param[in] dir_entry pointer to the card_dir structure which holds the informations for the delete operation. +\param[in] callback pointer to a callback function. This callback will be called when the delete process has finished. + +\return \ref card_errors "card error codes" +*/ +s32 CARD_DeleteEntryAsync(s32 chn,card_dir *dir_entry,cardcallback callback); + + +/*! \fn s32 CARD_Write(card_file *file,void *buffer,u32 len,u32 offset) +\brief Writes the data to the file from the buffer to the given offset with the given length. Synchronous version +\param[in] file pointer to the card_file structure which holds the fileinformations. +\param[in] buffer pointer to the memory area to read from. The startaddress of the buffer should be aligned on a 32byte boundery. +\param[in] len length of data to write. +\param[in] offset starting point in the file to start writing. + +\return \ref card_errors "card error codes" +*/ +s32 CARD_Write(card_file *file,void *buffer,u32 len,u32 offset); + + +/*! \fn s32 CARD_WriteAsync(card_file *file,void *buffer,u32 len,u32 offset,cardcallback callback) +\brief Writes the data to the file from the buffer to the given offset with the given length. This function returns immediately. Asynchronous version +\param[in] file pointer to the card_file structure which holds the fileinformations. +\param[in] buffer pointer to the memory area to read from. The startaddress of the buffer should be aligned on a 32byte boundery. +\param[in] len length of data to write. +\param[in] offset starting point in the file to start writing. +\param[in] callback pointer to a callback function. This callback will be called when the write process has finished. + +\return \ref card_errors "card error codes" +*/ +s32 CARD_WriteAsync(card_file *file,void *buffer,u32 len,u32 offset,cardcallback callback); + + +/*! \fn s32 CARD_GetErrorCode(s32 chn) +\brief Returns the result code from the last operation. +\param[in] chn CARD slot + +\return \ref card_errors "card error codes" of last operation +*/ +s32 CARD_GetErrorCode(s32 chn); + + +/*! \fn s32 CARD_FindFirst(s32 chn, card_dir *dir, bool showall) +\brief Start to iterate thru the memory card's directory structure and returns the first directory entry. +\param[in] chn CARD slot +\param[out] dir pointer to card_dir structure to receive the result set. +\param[in] showall Whether to show all files of the memory card or only those which are identified by the company and gamecode string. + +\return \ref card_errors "card error codes" +*/ +s32 CARD_FindFirst(s32 chn, card_dir *dir, bool showall); + + +/*! \fn s32 CARD_FindNext(card_dir *dir) +\brief Returns the next directory entry from the memory cards directory structure. +\param[out] dir pointer to card_dir structure to receive the result set. + +\return \ref card_errors "card error codes" +*/ +s32 CARD_FindNext(card_dir *dir); + + +/*! \fn s32 CARD_GetDirectory(s32 chn, card_dir *dir_entries, s32 *count, bool showall) +\brief Returns the directory entries. size of entries is max. 128. +\param[in] chn CARD slot +\param[out] dir_entries pointer to card_dir structure to receive the result set. +\param[out] count pointer to an integer to receive the counted entries. +\param[in] showall Whether to show all files of the memory card or only those which are identified by the company and gamecode string. + +\return \ref card_errors "card error codes" +*/ +s32 CARD_GetDirectory(s32 chn, card_dir *dir_entries, s32 *count, bool showall); + + +/*! \fn s32 CARD_GetSectorSize(s32 chn,u32 *sector_size) +\brief Returns the next directory entry from the memory cards directory structure. +\param[in] chn CARD slot. +\param[out] sector_size pointer to receive the result. + +\return \ref card_errors "card error codes" +*/ +s32 CARD_GetSectorSize(s32 chn,u32 *sector_size); + + +/*! \fn s32 CARD_GetBlockCount(s32 chn,u32 *block_count) +\brief Returns the next directory entry from the memory cards directory structure. +\param[in] chn CARD slot. +\param[out] sector_size pointer to receive the result. + +\return \ref card_errors "card error codes" +*/ +s32 CARD_GetBlockCount(s32 chn,u32 *block_count); + + +/*! \fn s32 CARD_GetStatus(s32 chn,s32 fileno,card_stat *stats) +\brief Get additional file statistic informations. +\param[in] chn CARD slot. +\param[in] fileno file index. returned by a previous call to CARD_Open(). +\param[out] stats pointer to receive the result set. + +\return \ref card_errors "card error codes" +*/ +s32 CARD_GetStatus(s32 chn,s32 fileno,card_stat *stats); + + +/*! \fn s32 CARD_SetStatus(s32 chn,s32 fileno,card_stat *stats) +\brief Set additional file statistic informations. Synchronous version. +\param[in] chn CARD slot. +\param[in] fileno file index. returned by a previous call to CARD_Open(). +\param[out] stats pointer which holds the informations to set. + +\return \ref card_errors "card error codes" +*/ +s32 CARD_SetStatus(s32 chn,s32 fileno,card_stat *stats); + + +/*! \fn s32 CARD_SetStatusAsync(s32 chn,s32 fileno,card_stat *stats,cardcallback callback) +\brief Set additional file statistic informations. This function returns immediately. Asynchronous version. +\param[in] chn CARD slot. +\param[in] fileno file index. returned by a previous call to CARD_Open(). +\param[out] stats pointer which holds the informations to set. +\param[in] callback pointer to a callback function. This callback will be called when the setstatus process has finished. + +\return \ref card_errors "card error codes" +*/ +s32 CARD_SetStatusAsync(s32 chn,s32 fileno,card_stat *stats,cardcallback callback); + + +/*! \fn s32 CARD_GetAttributes(s32 chn,s32 fileno,u8 *attr) +\brief Get additional file attributes. Synchronous version. +\param[in] chn CARD slot. +\param[in] fileno file index. returned by a previous call to CARD_Open(). +\param[out] attr pointer to receive attribute value. + +\return \ref card_errors "card error codes" +*/ +s32 CARD_GetAttributes(s32 chn,s32 fileno,u8 *attr); + + +/*! \fn s32 CARD_SetAttributes(s32 chn,s32 fileno,u8 attr) +\brief Set additional file attributes. Synchronous version. +\param[in] chn CARD slot. +\param[in] fileno file index. returned by a previous call to CARD_Open(). +\param[in] attr attribute value to set. + +\return \ref card_errors "card error codes" +*/ +s32 CARD_SetAttributes(s32 chn,s32 fileno,u8 attr); + + +/*! \fn s32 CARD_SetAttributesAsync(s32 chn,s32 fileno,u8 attr,cardcallback callback) +\brief Set additional file attributes. This function returns immediately. Asynchronous version. +\param[in] chn CARD slot. +\param[in] fileno file index. returned by a previous call to CARD_Open(). +\param[in] attr attribute value to set. +\param[in] callback pointer to a callback function. This callback will be called when the setattributes process has finished. + +\return \ref card_errors "card error codes" +*/ +s32 CARD_SetAttributesAsync(s32 chn,s32 fileno,u8 attr,cardcallback callback); + +/** + * Not finished function +*/ +s32 CARD_Format(s32 chn); +/** + * Not finished function +*/ +s32 CARD_FormatAsync(s32 chn,cardcallback callback); + + +/*! \fn s32 CARD_SetCompany(const char *company) +\brief Set additional file attributes. This function returns immediately. Asynchronous version. +\param[in] chn CARD slot. + +\return \ref card_errors "card error codes" +*/ +s32 CARD_SetCompany(const char *company); + + +/*! \fn s32 CARD_SetGamecode(const char *gamecode) +\brief Set additional file attributes. This function returns immediately. Asynchronous version. +\param[in] chn CARD slot. + +\return \ref card_errors "card error codes" +*/ +s32 CARD_SetGamecode(const char *gamecode); + +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif diff --git a/wii/libogc/include/ogc/cast.h b/wii/libogc/include/ogc/cast.h new file mode 100644 index 0000000000..49016dc3b4 --- /dev/null +++ b/wii/libogc/include/ogc/cast.h @@ -0,0 +1,239 @@ +#ifndef __CAST_H__ +#define __CAST_H__ + +#include + +#define GQR2 914 +#define GQR3 915 +#define GQR4 916 +#define GQR5 917 +#define GQR6 918 +#define GQR7 919 + +#define GQR_TYPE_F32 0 +#define GQR_TYPE_U8 4 +#define GQR_TYPE_U16 5 +#define GQR_TYPE_S8 6 +#define GQR_TYPE_S16 7 + +#define GQR_CAST_U8 2 +#define GQR_CAST_U16 3 +#define GQR_CAST_S8 4 +#define GQR_CAST_S16 5 + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef GEKKO + +#define __set_gqr(_reg,_val) asm volatile("mtspr %0,%1" : : "i"(_reg), "b"(_val)) + +// does a default init +static inline void CAST_Init() +{ + __asm__ __volatile__ ( + "li 3,0x0004\n\ + oris 3,3,0x0004\n\ + mtspr 914,3\n\ + li 3,0x0005\n\ + oris 3,3,0x0005\n\ + mtspr 915,3\n\ + li 3,0x0006\n\ + oris 3,3,0x0006\n\ + mtspr 916,3\n\ + li 3,0x0007\n\ + oris 3,3,0x0007\n\ + mtspr 917,3\n" + : : : "r3" + ); +} + +static inline void CAST_SetGQR2(u32 type,u32 scale) +{ + register u32 val = (((((scale)<<8)|(type))<<16)|(((scale)<<8)|(type))); + __set_gqr(GQR2,val); +} + +static inline void CAST_SetGQR3(u32 type,u32 scale) +{ + register u32 val = (((((scale)<<8)|(type))<<16)|(((scale)<<8)|(type))); + __set_gqr(GQR3,val); +} + +static inline void CAST_SetGQR4(u32 type,u32 scale) +{ + register u32 val = (((((scale)<<8)|(type))<<16)|(((scale)<<8)|(type))); + __set_gqr(GQR4,val); +} + +static inline void CAST_SetGQR5(u32 type,u32 scale) +{ + register u32 val = (((((scale)<<8)|(type))<<16)|(((scale)<<8)|(type))); + __set_gqr(GQR5,val); +} + +static inline void CAST_SetGQR6(u32 type,u32 scale) +{ + register u32 val = (((((scale)<<8)|(type))<<16)|(((scale)<<8)|(type))); + __set_gqr(GQR6,val); +} + +static inline void CAST_SetGQR7(u32 type,u32 scale) +{ + register u32 val = (((((scale)<<8)|(type))<<16)|(((scale)<<8)|(type))); + __set_gqr(GQR7,val); +} + + +/******************************************************************/ +/* */ +/* cast from int to float */ +/* */ +/******************************************************************/ + +static inline f32 __castu8f32(register u8 *in) +{ + register f32 rval; + __asm__ __volatile__ ( + "psq_l %[rval],0(%[in]),1,2" : [rval]"=f"(rval) : [in]"r"(in) + ); + return rval; +} + +static inline f32 __castu16f32(register u16 *in) +{ + register f32 rval; + __asm__ __volatile__ ( + "psq_l %[rval],0(%[in]),1,3" : [rval]"=f"(rval) : [in]"r"(in) + ); + return rval; +} + +static inline f32 __casts8f32(register s8 *in) +{ + register f32 rval; + __asm__ __volatile__ ( + "psq_l %[rval],0(%[in]),1,4" : [rval]"=f"(rval) : [in]"r"(in) + ); + return rval; +} + +static inline f32 __casts16f32(register s16 *in) +{ + register f32 rval; + __asm__ __volatile__ ( + "psq_l %[rval],0(%[in]),1,5" : [rval]"=f"(rval) : [in]"r"(in) + ); + return rval; +} + +static inline void castu8f32(register u8 *in,register volatile f32 *out) +{ + *out = __castu8f32(in); +} + +static inline void castu16f32(register u16 *in,register volatile f32 *out) +{ + *out = __castu16f32(in); +} + +static inline void casts8f32(register s8 *in,register volatile f32 *out) +{ + *out = __casts8f32(in); +} + +static inline void casts16f32(register s16 *in,register volatile f32 *out) +{ + *out = __casts16f32(in); +} + +/******************************************************************/ +/* */ +/* cast from float to int */ +/* */ +/******************************************************************/ + +static inline u8 __castf32u8(register f32 in) +{ + f32 a; + register u8 rval; + register f32 *ptr = &a; + + __asm__ __volatile__ ( + "psq_st %[in],0(%[ptr]),1,2\n" + "lbz %[out],0(%[ptr])\n" + : [out]"=r"(rval), [ptr]"+r"(ptr) : [in]"f"(in) + ); + return rval; +} + +static inline u16 __castf32u16(register f32 in) +{ + f32 a; + register u16 rval; + register f32 *ptr = &a; + + __asm__ __volatile__ ( + "psq_st %[in],0(%[ptr]),1,3\n" + "lhz %[out],0(%[ptr])\n" + : [out]"=r"(rval), [ptr]"+r"(ptr) : [in]"f"(in) + ); + return rval; +} + +static inline s8 __castf32s8(register f32 in) +{ + f32 a; + register s8 rval; + register f32 *ptr = &a; + + __asm__ __volatile__ ( + "psq_st %[in],0(%[ptr]),1,4\n" + "lbz %[out],0(%[ptr])\n" + : [out]"=r"(rval), [ptr]"+r"(ptr) : [in]"f"(in) + ); + return rval; +} + +static inline s16 __castf32s16(register f32 in) +{ + f32 a; + register s16 rval; + register f32 *ptr = &a; + + __asm__ __volatile__ ( + "psq_st %[in],0(%[ptr]),1,5\n" + "lha %[out],0(%[ptr])\n" + : [out]"=r"(rval), [ptr]"+r"(ptr) : [in]"f"(in) + ); + return rval; +} + +static inline void castf32u8(register f32 *in,register vu8 *out) +{ + *out = __castf32u8(*in); +} + +static inline void castf32u16(register f32 *in,register vu16 *out) +{ + *out = __castf32u16(*in); +} + +static inline void castf32s8(register f32 *in,register vs8 *out) +{ + *out = __castf32s8(*in); +} + +static inline void castf32s16(register f32 *in,register vs16 *out) +{ + *out = __castf32s16(*in); +} + +#endif //GEKKO + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/wii/libogc/include/ogc/color.h b/wii/libogc/include/ogc/color.h new file mode 100644 index 0000000000..cb5cfef48c --- /dev/null +++ b/wii/libogc/include/ogc/color.h @@ -0,0 +1,28 @@ +#ifndef __COLOR_H__ +#define __COLOR_H__ + +// luminance is stored twice, thus one of the lum. is +// redundant, but this way we can fill the screen. + +#define COLOR_BLACK (0x00800080) +#define COLOR_MAROON (0x266A26C0) +#define COLOR_GREEN (0x4B554B4A) +#define COLOR_OLIVE (0x7140718A) +#define COLOR_NAVY (0x0EC00E75) +#define COLOR_PURPLE (0x34AA34B5) +#define COLOR_TEAL (0x59955940) +#define COLOR_GRAY (0x80808080) +#define COLOR_SILVER (0xC080C080) +#define COLOR_RED (0x4C544CFF) +#define COLOR_LIME (0x952B9515) +#define COLOR_YELLOW (0xE100E194) +#define COLOR_BLUE (0x1DFF1D6B) +#define COLOR_FUCHSIA (0x69D469EA) +#define COLOR_AQUA (0xB2ABB200) +#define COLOR_WHITE (0xFF80FF80) +#define COLOR_MONEYGREEN (0xD076D074) +#define COLOR_SKYBLUE (0xC399C36A) +#define COLOR_CREAM (0xFA79FA82) +#define COLOR_MEDGRAY (0xA082A07F) + +#endif /* COLOR_H */ diff --git a/wii/libogc/include/ogc/cond.h b/wii/libogc/include/ogc/cond.h new file mode 100644 index 0000000000..ce38e61996 --- /dev/null +++ b/wii/libogc/include/ogc/cond.h @@ -0,0 +1,115 @@ +/*------------------------------------------------------------- + +cond.h -- Thread subsystem V + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + + +#ifndef __COND_H__ +#define __COND_H__ + +/*! \file cond.h +\brief Thread subsystem V + +*/ + +#include +#include + +#define LWP_COND_NULL 0xffffffff + +#ifdef __cplusplus +extern "C" { +#endif + + +/*! \typedef u32 cond_t +\brief typedef for the condition variable handle +*/ +typedef u32 cond_t; + + +/*! \fn s32 LWP_CondInit(cond_t *cond) +\brief Initialize condition variable +\param[out] cond pointer to the cond_t handle + +\return 0 on success, <0 on error +*/ +s32 LWP_CondInit(cond_t *cond); + + +/*! \fn s32 LWP_CondWait(cond_t cond,mutex_t mutex) +\brief Wait on condition variable. +\param[in] cond handle to the cond_t structure +\param[in] mutex handle to the mutex_t structure + +\return 0 on success, <0 on error +*/ +s32 LWP_CondWait(cond_t cond,mutex_t mutex); + + +/*! \fn s32 LWP_CondSignal(cond_t cond) +\brief Signal a specific thread waiting on this condition variable to wake up. +\param[in] cond handle to the cond_t structure + +\return 0 on success, <0 on error +*/ +s32 LWP_CondSignal(cond_t cond); + + +/*! \fn s32 LWP_CondBroadcast(cond_t cond) +\brief Broadcast all threads waiting on this condition variable to wake up. +\param[in] cond handle to the cond_t structure + +\return 0 on success, <0 on error +*/ +s32 LWP_CondBroadcast(cond_t cond); + + +/*! \fn s32 LWP_CondTimedWait(cond_t cond,mutex_t mutex,const struct timespec *abstime) +\brief Timed wait on a conditionvariable. +\param[in] cond handle to the cond_t structure +\param[in] mutex handle to the mutex_t structure +\param[in] abstime pointer to a timespec structure holding the abs time for the timeout. + +\return 0 on success, <0 on error +*/ +s32 LWP_CondTimedWait(cond_t cond,mutex_t mutex,const struct timespec *abstime); + + +/*! \fn s32 LWP_CondDestroy(cond_t cond) +\brief Destroy condition variable, release all threads and handles blocked on that condition variable. +\param[in] cond handle to the cond_t structure + +\return 0 on success, <0 on error +*/ +s32 LWP_CondDestroy(cond_t cond); + +#ifdef __cplusplus + } +#endif + +#endif diff --git a/wii/libogc/include/ogc/conf.h b/wii/libogc/include/ogc/conf.h new file mode 100644 index 0000000000..4cdf2962a7 --- /dev/null +++ b/wii/libogc/include/ogc/conf.h @@ -0,0 +1,183 @@ +/*------------------------------------------------------------- + +conf.h -- SYSCONF support + +Copyright (C) 2008 +Hector Martin (marcan) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + +#ifndef __CONF_H__ +#define __CONF_H__ + +#if defined(HW_RVL) + +#include +#include + +#define CONF_EBADFILE -0x6001 +#define CONF_ENOENT -0x6002 +#define CONF_ETOOBIG -0x6003 +#define CONF_ENOTINIT -0x6004 +#define CONF_ENOTIMPL -0x6005 +#define CONF_EBADVALUE -0x6006 +#define CONF_ENOMEM -0x6007 +#define CONF_ERR_OK 0 + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +enum { + CONF_BIGARRAY = 1, + CONF_SMALLARRAY, + CONF_BYTE, + CONF_SHORT, + CONF_LONG, + CONF_BOOL = 7 +}; + +enum { + CONF_VIDEO_NTSC = 0, + CONF_VIDEO_PAL, + CONF_VIDEO_MPAL +}; + +enum { + CONF_REGION_JP = 0, + CONF_REGION_US = 1, + CONF_REGION_EU = 2, + CONF_REGION_KR = 4, + CONF_REGION_CN = 5 +}; + +enum { + CONF_AREA_JPN = 0, + CONF_AREA_USA, + CONF_AREA_EUR, + CONF_AREA_AUS, + CONF_AREA_BRA, + CONF_AREA_TWN, + CONF_AREA_ROC, + CONF_AREA_KOR, + CONF_AREA_HKG, + CONF_AREA_ASI, + CONF_AREA_LTN, + CONF_AREA_SAF, + CONF_AREA_CHN +}; + +enum { + CONF_SHUTDOWN_STANDBY = 0, + CONF_SHUTDOWN_IDLE +}; + +enum { + CONF_LED_OFF = 0, + CONF_LED_DIM, + CONF_LED_BRIGHT +}; + +enum { + CONF_SOUND_MONO = 0, + CONF_SOUND_STEREO, + CONF_SOUND_SURROUND +}; + +enum { + CONF_LANG_JAPANESE = 0, + CONF_LANG_ENGLISH, + CONF_LANG_GERMAN, + CONF_LANG_FRENCH, + CONF_LANG_SPANISH, + CONF_LANG_ITALIAN, + CONF_LANG_DUTCH, + CONF_LANG_SIMP_CHINESE, + CONF_LANG_TRAD_CHINESE, + CONF_LANG_KOREAN +}; + +enum { + CONF_ASPECT_4_3 = 0, + CONF_ASPECT_16_9 +}; + +enum { + CONF_SENSORBAR_BOTTOM = 0, + CONF_SENSORBAR_TOP +}; + +#define CONF_PAD_MAX_REGISTERED 10 +#define CONF_PAD_MAX_ACTIVE 4 + +typedef struct _conf_pad_device conf_pad_device; + +struct _conf_pad_device { + u8 bdaddr[6]; + char name[0x40]; +} ATTRIBUTE_PACKED; + +typedef struct _conf_pads conf_pads; + +struct _conf_pads { + u8 num_registered; + conf_pad_device registered[CONF_PAD_MAX_REGISTERED]; + conf_pad_device active[CONF_PAD_MAX_ACTIVE]; + conf_pad_device balance_board; + conf_pad_device unknown; +} ATTRIBUTE_PACKED; + +s32 CONF_Init(void); +s32 CONF_GetLength(const char *name); +s32 CONF_GetType(const char *name); +s32 CONF_Get(const char *name, void *buffer, u32 length); +s32 CONF_GetShutdownMode(void); +s32 CONF_GetIdleLedMode(void); +s32 CONF_GetProgressiveScan(void); +s32 CONF_GetEuRGB60(void); +s32 CONF_GetIRSensitivity(void); +s32 CONF_GetSensorBarPosition(void); +s32 CONF_GetPadSpeakerVolume(void); +s32 CONF_GetPadMotorMode(void); +s32 CONF_GetSoundMode(void); +s32 CONF_GetLanguage(void); +s32 CONF_GetCounterBias(u32 *bias); +s32 CONF_GetScreenSaverMode(void); +s32 CONF_GetDisplayOffsetH(s8 *offset); +s32 CONF_GetPadDevices(conf_pads *pads); +s32 CONF_GetNickName(u8 *nickname); +s32 CONF_GetAspectRatio(void); +s32 CONF_GetEULA(void); +s32 CONF_GetParentalPassword(s8 *password); +s32 CONF_GetParentalAnswer(s8 *answer); +s32 CONF_GetWiiConnect24(void); +s32 CONF_GetRegion(void); +s32 CONF_GetArea(void); +s32 CONF_GetVideo(void); + +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif + +#endif diff --git a/wii/libogc/include/ogc/consol.h b/wii/libogc/include/ogc/consol.h new file mode 100644 index 0000000000..294f7e6b11 --- /dev/null +++ b/wii/libogc/include/ogc/consol.h @@ -0,0 +1,81 @@ +#ifndef __CONSOL_H__ +#define __CONSOL_H__ + +/*! + * \file consol.h + * \brief Console subsystem + * + */ + +#include "gx_struct.h" + +/* macros to support old function names */ +#define console_init CON_Init +#define SYS_ConsoleInit CON_InitEx + +#ifdef __cplusplus + extern "C" { +#endif + +/*! + * \fn CON_Init(void *framebuffer,int xstart,int ystart,int xres,int yres,int stride) + * \brief Initializes the console subsystem with given parameters + * + * \param[in] framebuffer pointer to the framebuffer used for drawing the characters + * \param[in] xstart,ystart start position of the console output in pixel + * \param[in] xres,yres size of the console in pixel + * \param[in] stride size of one line of the framebuffer in bytes + * + * \return none + */ +void CON_Init(void *framebuffer,int xstart,int ystart,int xres,int yres,int stride); + +/*! + * \fn s32 CON_InitEx(GXRModeObj *rmode, s32 conXOrigin,s32 conYOrigin,s32 conWidth,s32 conHeight) + * \brief Initialize stdout console + * \param[in] rmode pointer to the video/render mode configuration + * \param[in] conXOrigin starting pixel in X direction of the console output on the external framebuffer + * \param[in] conYOrigin starting pixel in Y direction of the console output on the external framebuffer + * \param[in] conWidth width of the console output 'window' to be drawn + * \param[in] conHeight height of the console output 'window' to be drawn + * + * \return 0 on success, <0 on error + */ +s32 CON_InitEx(GXRModeObj *rmode, s32 conXOrigin,s32 conYOrigin,s32 conWidth,s32 conHeight); + +/*! + * \fn CON_GetMetrics(int *cols, int *rows) + * \brief retrieve the columns and rows of the current console + * + * \param[out] cols,rows number of columns and rows of the current console + * + * \return none + */ +void CON_GetMetrics(int *cols, int *rows); + +/*! + * \fn CON_GetPosition(int *col, int *row) + * \brief retrieve the current cursor position of the current console + * + * \param[out] col,row current cursor position + * + * \return none + */ +void CON_GetPosition(int *cols, int *rows); + +/*! + * \fn CON_EnableGecko(int channel, int safe) + * \brief Enable or disable the USB gecko console. + * + * \param[in] channel EXI channel, or -1 to disable the gecko console + * \param[in] safe If true, use safe mode (wait for peer) + * + * \return none + */ +void CON_EnableGecko(int channel,int safe); + +#ifdef __cplusplus + } +#endif + +#endif diff --git a/wii/libogc/include/ogc/context.h b/wii/libogc/include/ogc/context.h new file mode 100644 index 0000000000..7814bb5db5 --- /dev/null +++ b/wii/libogc/include/ogc/context.h @@ -0,0 +1,51 @@ +#ifndef __EXCONTEXT_H__ +#define __EXCONTEXT_H__ + +#define NUM_EXCEPTIONS 15 + +#define EX_SYS_RESET 0 +#define EX_MACH_CHECK 1 +#define EX_DSI 2 +#define EX_ISI 3 +#define EX_INT 4 +#define EX_ALIGN 5 +#define EX_PRG 6 +#define EX_FP 7 +#define EX_DEC 8 +#define EX_SYS_CALL 9 +#define EX_TRACE 10 +#define EX_PERF 11 +#define EX_IABR 12 +#define EX_RESV 13 +#define EX_THERM 14 + +#ifndef _LANGUAGE_ASSEMBLY + +#include + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +typedef struct _excption_frame { + u32 EXCPT_Number; + u32 SRR0,SRR1; + u32 GPR[32]; + u32 GQR[8]; + u32 CR, LR, CTR, XER, MSR, DAR; + + u16 state; //used to determine whether to restore the fpu context or not + u16 mode; //unused + + f64 FPR[32]; + u64 FPSCR; + f64 PSFPR[32]; +} frame_context; + +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif //!_LANGUAGE_ASSEMBLY + +#endif diff --git a/wii/libogc/include/ogc/disc_io.h b/wii/libogc/include/ogc/disc_io.h new file mode 100644 index 0000000000..0a6ef3e5a4 --- /dev/null +++ b/wii/libogc/include/ogc/disc_io.h @@ -0,0 +1,68 @@ +/* + disc_io.h + Interface template for low level disc functions. + + Copyright (c) 2006 Michael "Chishm" Chisholm + Based on code originally written by MightyMax + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef OGC_DISC_IO_INCLUDE +#define OGC_DISC_IO_INCLUDE + +#include +#include + + +#define FEATURE_MEDIUM_CANREAD 0x00000001 +#define FEATURE_MEDIUM_CANWRITE 0x00000002 +#define FEATURE_GAMECUBE_SLOTA 0x00000010 +#define FEATURE_GAMECUBE_SLOTB 0x00000020 +#define FEATURE_GAMECUBE_DVD 0x00000040 +#define FEATURE_WII_SD 0x00000100 +#define FEATURE_WII_USB 0x00000200 +#define FEATURE_WII_DVD 0x00000400 + +typedef uint32_t sec_t; + +typedef bool (* FN_MEDIUM_STARTUP)(void) ; +typedef bool (* FN_MEDIUM_ISINSERTED)(void) ; +typedef bool (* FN_MEDIUM_READSECTORS)(sec_t sector, sec_t numSectors, void* buffer) ; +typedef bool (* FN_MEDIUM_WRITESECTORS)(sec_t sector, sec_t numSectors, const void* buffer) ; +typedef bool (* FN_MEDIUM_CLEARSTATUS)(void) ; +typedef bool (* FN_MEDIUM_SHUTDOWN)(void) ; + +struct DISC_INTERFACE_STRUCT { + unsigned long ioType ; + unsigned long features ; + FN_MEDIUM_STARTUP startup ; + FN_MEDIUM_ISINSERTED isInserted ; + FN_MEDIUM_READSECTORS readSectors ; + FN_MEDIUM_WRITESECTORS writeSectors ; + FN_MEDIUM_CLEARSTATUS clearStatus ; + FN_MEDIUM_SHUTDOWN shutdown ; +} ; + +typedef struct DISC_INTERFACE_STRUCT DISC_INTERFACE ; + +#endif // define OGC_DISC_IO_INCLUDE diff --git a/wii/libogc/include/ogc/dsp.h b/wii/libogc/include/ogc/dsp.h new file mode 100644 index 0000000000..eba38aeefe --- /dev/null +++ b/wii/libogc/include/ogc/dsp.h @@ -0,0 +1,228 @@ +/*------------------------------------------------------------- + +dsp.h -- DSP subsystem + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + + +#ifndef __DSP_H__ +#define __DSP_H__ + +/*! \file dsp.h +\brief DSP subsystem + +*/ + +#include + +/*! + * \addtogroup dsp_taskstate DSP task states + * \brief DSP task state indicating DSP task's current operation + * @{ + */ + +#define DSPTASK_INIT 0 /*!< DSP task is initializing */ +#define DSPTASK_RUN 1 /*!< DSP task is running */ +#define DSPTASK_YIELD 2 /*!< DSP task has yield */ +#define DSPTASK_DONE 3 /*!< DSP task is done/ready */ + +/*! + * @} + */ + + +/*! + * \addtogroup dsp_taskflag DSP task flags + * \brief DSP task queue state flag indicating the task's current queue state. Multiple states are OR'd. + * @{ + */ + +#define DSPTASK_CLEARALL 0x00000000 /*!< DSP task emtpy/ready */ +#define DSPTASK_ATTACH 0x00000001 /*!< DSP task attached */ +#define DSPTASK_CANCEL 0x00000002 /*!< DSP task canceled */ + +/*! + * @} + */ + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + + +/*! +\typedef struct _dsp_task dsptask_t +\brief forward typdef to struct _dsp_task. This struture holds certain DSP task information for execution. +*/ +typedef struct _dsp_task dsptask_t; + + +/*! \typedef void (*DSPTaskCallback)(dsptask_t *task) +\brief function pointer typedef for the user's DSP task callbacks +\param[in] task pointer to the dsp_task structure. +*/ +typedef void (*DSPTaskCallback)(dsptask_t *task); + + +/*! \typedef void (*DSPCallback)(void) +\brief function pointer typedef for the user's DSP interrupt callback +*/ +typedef void (*DSPCallback)(void); + + +/*! \typedef struct _dsp_task dsptask_t +\param state current task \ref dsp_taskstate "state" set +\param prio priority of the task +\param flags currnet task \ref dsp_taskflag "flag(s)" set. +\param init_vec initialization vector. depends on the DSP code to execute. +\param resume_vec resume vector. depends on the DSP code to execute. +\param iram_maddr main memory address of i-ram image. NOTE: Has to be aligned on a 32byte boundery! +\param iram_len size of i-ram image. NOTE: Should be a multiple of 32 +\param iram_addr DSP i-ram address to load the image to. +\param dram_maddr main memory address of d-ram image. NOTE: Has to be aligned on a 32byte boundery! +\param dram_len size of d-ram image. NOTE: Should be a multiple of 32 +\param dram_addr DSP d-ram address to load the image to. +\param init_cb pointer to the user's init callback function. Called durring task initialization. +\param res_cb pointer to the user's resume callback function. Called when the task should resume. +\param done_cb pointer to the user's done callback function. Called when the task has finished. +\param req_cb pointer to the user's request callback function. Used to retrieve data from main application durring execution. +\param next pointer to the next task in the doubly linked list. +\param prev pointer to the previous task in the doubly linked list. +*/ +struct _dsp_task { + vu32 state; + vu32 prio; + vu32 flags; + + void *iram_maddr; + u32 iram_len; + u32 iram_addr; + + void *dram_maddr; + u32 dram_len; + u32 dram_addr; + + u16 init_vec; + u16 resume_vec; + + DSPTaskCallback init_cb; + DSPTaskCallback res_cb; + DSPTaskCallback done_cb; + DSPTaskCallback req_cb; + + struct _dsp_task *next; + struct _dsp_task *prev; +}; + + +/*! \fn void DSP_Init() +\brief Initialize DSP subsystem. + +\return none +*/ +void DSP_Init(); + + +/*! \fn u32 DSP_CheckMailTo() +\brief Check if mail was sent to DSP + +\return 1: mail sent, 0: mail on route +*/ +u32 DSP_CheckMailTo(); + + +/*! \fn u32 DSP_CheckMailFrom() +\brief Check for mail from DSP + +\return 1: has mail, 0: no mail +*/ +u32 DSP_CheckMailFrom(); + + +/*! \fn u32 DSP_ReadMailFrom() +\brief Read mail from DSP + +\return mail value received +*/ +u32 DSP_ReadMailFrom(); + + +/*! \fn void DSP_AssertInt() +\brief Asserts the processor interface interrupt + +\return none +*/ +void DSP_AssertInt(); + + +/*! \fn void DSP_SendMailTo(u32 mail) +\brief Send mail to DSP +\param[in] mail value to send + +\return none +*/ +void DSP_SendMailTo(u32 mail); + + +/*! \fn u32 DSP_ReadCPUtoDSP() +\brief Read back CPU->DSP mailbox + +\return mail value received +*/ +u32 DSP_ReadCPUtoDSP(); + + +/*! \fn dsptask_t* DSP_AddTask(dsptask_t *task) +\brief Add a DSP task to the tasklist and start executing if necessary. +\param[in] task pointer to a dsptask_t structure which holds all necessary values for DSP task execution. + +\return current task +*/ +dsptask_t* DSP_AddTask(dsptask_t *task); + +dsptask_t* DSP_AssertTask(dsptask_t *task); + +void DSP_CancelTask(dsptask_t *task); + +void DSP_Reset(); + +void DSP_Halt(); + +void DSP_Unhalt(); + +/*! \fn DSPCallback DSP_RegisterCallback(DSPCallback usr_cb) +\brief Register an user's interrupt callback. This may be used to handle DSP interrupts on its own. By default a system default callback is installed on DSP_Init(). +\param[in] user_cb pointer to the user's interrupt callback function. +\ +\return pointer to old interrupt callback function. +*/ +DSPCallback DSP_RegisterCallback(DSPCallback usr_cb); + +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif diff --git a/wii/libogc/include/ogc/dvd.h b/wii/libogc/include/ogc/dvd.h new file mode 100644 index 0000000000..b9e4c6369a --- /dev/null +++ b/wii/libogc/include/ogc/dvd.h @@ -0,0 +1,369 @@ +/*------------------------------------------------------------- + +dvd.h -- DVD subsystem + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + + +#ifndef __DVD_H__ +#define __DVD_H__ + +/*! + * \file dvd.h + * \brief DVD subsystem + * + */ + +#include +#include +#include + +/*! + * \addtogroup dvd_statecodes DVD state codes + * @{ + */ + +#define DVD_STATE_FATAL_ERROR -1 +#define DVD_STATE_END 0 +#define DVD_STATE_BUSY 1 +#define DVD_STATE_WAITING 2 +#define DVD_STATE_COVER_CLOSED 3 +#define DVD_STATE_NO_DISK 4 +#define DVD_STATE_COVER_OPEN 5 +#define DVD_STATE_WRONG_DISK 6 +#define DVD_STATE_MOTOR_STOPPED 7 +#define DVD_STATE_IGNORED 8 +#define DVD_STATE_CANCELED 10 +#define DVD_STATE_RETRY 11 + +#define DVD_ERROR_OK 0 +#define DVD_ERROR_FATAL -1 +#define DVD_ERROR_IGNORED -2 +#define DVD_ERROR_CANCELED -3 +#define DVD_ERROR_COVER_CLOSED -4 + +/*! + * @} + */ + + +/*! + * \addtogroup dvd_resetmode DVD reset modes + * @{ + */ + +#define DVD_RESETHARD 0 /*!< Performs a hard reset. Complete new boot of FW. */ +#define DVD_RESETSOFT 1 /*!< Performs a soft reset. FW restart and drive spinup */ +#define DVD_RESETNONE 2 /*!< Only initiate DI registers */ + +/*! + * @} + */ + + +/*! + * \addtogroup dvd_motorctrlmode DVD motor control modes + * @{ + */ + +#define DVD_SPINMOTOR_DOWN 0x00000000 /*!< Stop DVD drive */ +#define DVD_SPINMOTOR_UP 0x00000100 /*!< Start DVD drive */ +#define DVD_SPINMOTOR_ACCEPT 0x00004000 /*!< Force DVD to accept the disk */ +#define DVD_SPINMOTOR_CHECKDISK 0x00008000 /*!< Force DVD to perform a disc check */ + +/*! + * @} + */ + + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + + +/*! + * \typedef struct _dvddiskid dvddiskid + * \brief forward typedef for struct _dvddiskid + */ +typedef struct _dvddiskid dvddiskid; + +/*! + * \typedef struct _dvddiskid dvddiskid + * + * This structure holds the game vendors copyright informations.
+ * Additionally it holds certain parameters for audiocontrol and
+ * multidisc support. + * + * \param gamename[4] vendors game key + * \param company[2] vendors company key + * \param disknum number of disc when multidisc support is used. + * \param gamever version of game + * \param streaming flag to control audio streaming + * \param streambufsize size of buffer used for audio streaming + * \param pad[22] padding + */ +struct _dvddiskid { + s8 gamename[4]; + s8 company[2]; + u8 disknum; + u8 gamever; + u8 streaming; + u8 streambufsize; + u8 pad[22]; +}; + +/*! + * \typedef struct _dvdcmdblk dvdcmdblk + * \brief forward typedef for struct _dvdcmdblk + */ +typedef struct _dvdcmdblk dvdcmdblk; + + +/*! + * \typedef void (*dvdcbcallback)(s32 result,dvdcmdblk *block) + * \brief function pointer typedef for the user's operations callback + */ +typedef void (*dvdcbcallback)(s32 result,dvdcmdblk *block); + + +/*! + * \typedef struct _dvdcmdblk dvdcmdblk + * + * This structure is used internally to control the requested operation. + */ +struct _dvdcmdblk { + lwp_node node; + u32 cmd; + s32 state; + s64 offset; + u32 len; + void *buf; + u32 currtxsize; + u32 txdsize; + dvddiskid *id; + dvdcbcallback cb; + void *usrdata; +}; + + +/*! + * \typedef struct _dvddrvinfo dvddrvinfo + * \brief forward typedef for struct _dvddrvinfo + */ +typedef struct _dvddrvinfo dvddrvinfo; + + +/*! + * \typedef struct _dvddrvinfo dvddrvinfo + * + * This structure structure holds the drive version infromation.
+ * Use DVD_Inquiry() to retrieve this information. + * + * \param rev_leve revision level + * \param dev_code device code + * \param rel_date release date + * \param pad[24] padding + */ +struct _dvddrvinfo { + u16 rev_level; + u16 dev_code; + u32 rel_date; + u8 pad[24]; +}; + + +/*! + * \typedef struct _dvdfileinfo dvdfileinfo + * \brief forward typedef for struct _dvdfileinfo + */ +typedef struct _dvdfileinfo dvdfileinfo; + + +/*! + * \typedef void (*dvdcallback)(s32 result,dvdfileinfo *info) + * \brief function pointer typedef for the user's DVD operation callback + * + * \param[in] result error code of last operation + * \param[in] info pointer to user's file info strucutre + */ +typedef void (*dvdcallback)(s32 result,dvdfileinfo *info); + + +/*! + * \typedef struct _dvdfileinfo dvdfileinfo + * + * This structure is used internally to control the requested file operation. + */ +struct _dvdfileinfo { + dvdcmdblk block; + u32 addr; + u32 len; + dvdcallback cb; +}; + + +/*! + * \fn void DVD_Init() + * \brief Initializes the DVD subsystem + * + * You must call this function before calling any other DVD function + * + * \return none + */ +void DVD_Init(); +void DVD_Pause(); + + +/*! + * \fn void DVD_Reset(u32 reset_mode) + * \brief Performs a reset of the drive and FW respectively. + * + * \param[in] reset_mode \ref dvd_resetmode "type" of reset + * + * \return none + */ +void DVD_Reset(u32 reset_mode); + + +/*! + * \fn s32 DVD_Mount() + * \brief Mounts the DVD drive. + * + * This is a synchronous version of DVD_MountAsync(). + * + * \return none + */ +s32 DVD_Mount(); +s32 DVD_GetDriveStatus(); + + +/*! + * \fn s32 DVD_MountAsync(dvdcmdblk *block,dvdcbcallback cb) + * \brief Mounts the DVD drive. + * + * You must call this function in order to access the DVD. + * + * Following tasks are performed: + * - Issue a hard reset to the drive. + * - Turn on drive's debug mode. + * - Patch drive's FW. + * - Enable extensions. + * - Read disc ID + * + * The patch code and procedure was taken from the gc-linux DVD device driver. + * + * \param[in] block pointer to a dvdcmdblk structure used to process the operation + * \param[in] cb callback to be invoked upon completion of operation + * + * \return none + */ +s32 DVD_MountAsync(dvdcmdblk *block,dvdcbcallback cb); + + +/*! + * \fn s32 DVD_ControlDrive(dvdcmdblk *block,u32 cmd) + * \brief Controls the drive's motor and behavior. + * + * This is a synchronous version of DVD_ControlDriveAsync(). + * + * \param[in] block pointer to a dvdcmdblk structure used to process the operation + * \param[in] cmd \ref dvd_motorctrlmode "command" to control the drive. + * + * \return none + */ +s32 DVD_ControlDrive(dvdcmdblk *block,u32 cmd); + + +/*! + * \fn s32 DVD_ControlDriveAsync(dvdcmdblk *block,u32 cmd,dvdcbcallback cb) + * \brief Controls the drive's motor and behavior. + * + * \param[in] block pointer to a dvdcmdblk structure used to process the operation + * \param[in] cmd \ref dvd_motorctrlmode "command" to control the drive. + * \param[in] cb callback to be invoked upon completion of operation. + * + * \return none + */ +s32 DVD_ControlDriveAsync(dvdcmdblk *block,u32 cmd,dvdcbcallback cb); + + +/*! + * \fn s32 DVD_SetGCMOffset(dvdcmdblk *block,u32 offset) + * \brief Sets the offset to the GCM. Used for multigame discs. + * + * This is a synchronous version of DVD_SetGCMOffsetAsync(). + * + * \param[in] block pointer to a dvdcmdblk structure used to process the operation + * \param[in] offset offset to the GCM on disc. + * + * \return \ref dvd_errorcodes "dvd error code" + */ +s32 DVD_SetGCMOffset(dvdcmdblk *block,s64 offset); + + +/*! + * \fn s32 DVD_SetGCMOffsetAsync(dvdcmdblk *block,u32 offset,dvdcbcallback cb) + * \brief Sets the offset to the GCM. Used for multigame discs. + * + * This is a synchronous version of DVD_SetGCMOffsetAsync(). + * + * \param[in] block pointer to a dvdcmdblk structure used to process the operation + * \param[in] offset offset to the GCM on disc. + * \param[in] cb callback to be invoked upon completion of operation. + * + * \return \ref dvd_errorcodes "dvd error code" + */ +s32 DVD_SetGCMOffsetAsync(dvdcmdblk *block,s64 offset,dvdcbcallback cb); + +s32 DVD_GetCmdBlockStatus(dvdcmdblk *block); +s32 DVD_SpinUpDrive(dvdcmdblk *block); +s32 DVD_SpinUpDriveAsync(dvdcmdblk *block,dvdcbcallback cb); +s32 DVD_Inquiry(dvdcmdblk *block,dvddrvinfo *info); +s32 DVD_InquiryAsync(dvdcmdblk *block,dvddrvinfo *info,dvdcbcallback cb); +s32 DVD_ReadPrio(dvdcmdblk *block,void *buf,u32 len,s64 offset,s32 prio); +s32 DVD_ReadAbsAsyncPrio(dvdcmdblk *block,void *buf,u32 len,s64 offset,dvdcbcallback cb,s32 prio); +s32 DVD_ReadAbsAsyncForBS(dvdcmdblk *block,void *buf,u32 len,s64 offset,dvdcbcallback cb); +s32 DVD_SeekPrio(dvdcmdblk *block,s64 offset,s32 prio); +s32 DVD_SeekAbsAsyncPrio(dvdcmdblk *block,s64 offset,dvdcbcallback cb,s32 prio); +s32 DVD_CancelAllAsync(dvdcbcallback cb); +s32 DVD_StopStreamAtEndAsync(dvdcmdblk *block,dvdcbcallback cb); +s32 DVD_StopStreamAtEnd(dvdcmdblk *block); +s32 DVD_ReadDiskID(dvdcmdblk *block,dvddiskid *id,dvdcbcallback cb); +u32 DVD_SetAutoInvalidation(u32 auto_inv); +dvddiskid* DVD_GetCurrentDiskID(); +dvddrvinfo* DVD_GetDriveInfo(); + +#define DVD_SetUserData(block, data) ((block)->usrdata = (data)) +#define DVD_GetUserData(block) ((block)->usrdata) + +#define DEVICE_TYPE_GAMECUBE_DVD (('G'<<24)|('D'<<16)|('V'<<8)|'D') +extern const DISC_INTERFACE __io_gcdvd; + +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif diff --git a/wii/libogc/include/ogc/es.h b/wii/libogc/include/ogc/es.h new file mode 100644 index 0000000000..c675ed800c --- /dev/null +++ b/wii/libogc/include/ogc/es.h @@ -0,0 +1,309 @@ +/*------------------------------------------------------------- + +es.h -- tik services + +Copyright (C) 2008 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) +Hector Martin (marcan) +Andre Heider (dhewg) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + +#ifndef __ES_H__ +#define __ES_H__ + +#if defined(HW_RVL) + +#include +#include + +#define ES_EINVAL -0x1004 +#define ES_ENOMEM -0x100C +#define ES_ENOTINIT -0x1100 +#define ES_EALIGN -0x1101 + +#define ES_SIG_RSA4096 0x10000 +#define ES_SIG_RSA2048 0x10001 +#define ES_SIG_ECDSA 0x10002 + +#define ES_CERT_RSA4096 0 +#define ES_CERT_RSA2048 1 +#define ES_CERT_ECDSA 2 + +#define ES_KEY_COMMON 4 +#define ES_KEY_SDCARD 6 + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +typedef u32 sigtype; +typedef sigtype sig_header; +typedef sig_header signed_blob; + +typedef u8 sha1[20]; +typedef u8 aeskey[16]; + +typedef struct _sig_rsa2048 { + sigtype type; + u8 sig[256]; + u8 fill[60]; +} __attribute__((packed)) sig_rsa2048; + +typedef struct _sig_rsa4096 { + sigtype type; + u8 sig[512]; + u8 fill[60]; +} __attribute__((packed)) sig_rsa4096; + +typedef struct _sig_ecdsa { + sigtype type; + u8 sig[60]; + u8 fill[64]; +} __attribute__((packed)) sig_ecdsa; + +typedef char sig_issuer[0x40]; + +typedef struct _tiklimit { + u32 tag; + u32 value; +} __attribute__((packed)) tiklimit; + +typedef struct _tikview { + u32 view; + u64 ticketid; + u32 devicetype; + u64 titleid; + u16 access_mask; + u8 reserved[0x3c]; + u8 cidx_mask[0x40]; + u16 padding; + tiklimit limits[8]; +} __attribute__((packed)) tikview; + +typedef struct _tik { + sig_issuer issuer; + u8 fill[63]; //TODO: not really fill + aeskey cipher_title_key; + u8 fill2; + u64 ticketid; + u32 devicetype; + u64 titleid; + u16 access_mask; + u8 reserved[0x3c]; + u8 cidx_mask[0x40]; + u16 padding; + tiklimit limits[8]; +} __attribute__((packed)) tik; + +typedef struct _tmd_content { + u32 cid; + u16 index; + u16 type; + u64 size; + sha1 hash; +} __attribute__((packed)) tmd_content; + +typedef struct _tmd { + sig_issuer issuer; //0x140 + u8 version; //0x180 + u8 ca_crl_version; //0x181 + u8 signer_crl_version; //0x182 + u8 fill2; //0x183 + u64 sys_version; //0x184 + u64 title_id; //0x18c + u32 title_type; //0x194 + u16 group_id; //0x198 + u16 zero; //0x19a + u16 region; //0x19c + u8 ratings[16]; //0x19e + u8 reserved[12]; //0x1ae + u8 ipc_mask[12]; + u8 reserved2[18]; + u32 access_rights; + u16 title_version; + u16 num_contents; + u16 boot_index; + u16 fill3; + // content records follow + // C99 flexible array + tmd_content contents[]; +} __attribute__((packed)) tmd; + +typedef struct _tmd_view_content +{ + u32 cid; + u16 index; + u16 type; + u64 size; +} __attribute__((packed)) tmd_view_content; + +typedef struct _tmdview +{ + u8 version; // 0x0000; + u8 filler[3]; + u64 sys_version; //0x0004 + u64 title_id; // 0x00c + u32 title_type; //0x0014 + u16 group_id; //0x0018 + u8 reserved[0x3e]; //0x001a this is the same reserved 0x3e bytes from the tmd + u16 title_version; //0x0058 + u16 num_contents; //0x005a + tmd_view_content contents[]; //0x005c +}__attribute__((packed)) tmd_view; + +typedef struct _cert_header { + sig_issuer issuer; + u32 cert_type; + char cert_name[64]; + u32 cert_id; //??? +} __attribute__((packed)) cert_header; + +typedef struct _cert_rsa2048 { + sig_issuer issuer; + u32 cert_type; + char cert_name[64]; + u32 cert_id; + u8 modulus[256]; + u32 exponent; + u8 pad[0x34]; +} __attribute__((packed)) cert_rsa2048; + +typedef struct _cert_rsa4096 { + sig_issuer issuer; + u32 cert_type; + char cert_name[64]; + u32 cert_id; + u8 modulus[512]; + u32 exponent; + u8 pad[0x34]; +} __attribute__((packed)) cert_rsa4096; + +typedef struct _cert_ecdsa { + sig_issuer issuer; + u32 cert_type; + char cert_name[64]; + u32 cert_id; // ng key id + u8 r[30]; + u8 s[30]; + u8 pad[0x3c]; +} __attribute__((packed)) cert_ecdsa; + +#define TMD_SIZE(x) (((x)->num_contents)*sizeof(tmd_content) + sizeof(tmd)) +// backwards compatibility +#define TMD_CONTENTS(x) ((x)->contents) + +//TODO: add ECC stuff + +#define IS_VALID_SIGNATURE(x) ( \ + ((*(x))==ES_SIG_RSA2048) || \ + ((*(x))==ES_SIG_RSA4096) || \ + ((*(x))==ES_SIG_ECDSA)) + +#define SIGNATURE_SIZE(x) (\ + ((*(x))==ES_SIG_RSA2048) ? sizeof(sig_rsa2048) : ( \ + ((*(x))==ES_SIG_RSA4096) ? sizeof(sig_rsa4096) : ( \ + ((*(x))==ES_SIG_ECDSA) ? sizeof(sig_ecdsa) : 0 ))) + +#define SIGNATURE_SIG(x) (((u8*)x)+4) + +#define IS_VALID_CERT(x) ( \ + (((x)->cert_type)==ES_CERT_RSA2048) || \ + (((x)->cert_type)==ES_CERT_RSA4096) || \ + (((x)->cert_type)==ES_CERT_ECDSA)) + +#define CERTIFICATE_SIZE(x) (\ + (((x)->cert_type)==ES_CERT_RSA2048) ? sizeof(cert_rsa2048) : ( \ + (((x)->cert_type)==ES_CERT_RSA4096) ? sizeof(cert_rsa4096) : ( \ + (((x)->cert_type)==ES_CERT_ECDSA) ? sizeof(cert_ecdsa) : 0 ))) + +#define SIGNATURE_PAYLOAD(x) ((void *)(((u8*)(x)) + SIGNATURE_SIZE(x))) + +#define SIGNED_TMD_SIZE(x) ( TMD_SIZE((tmd*)SIGNATURE_PAYLOAD(x)) + SIGNATURE_SIZE(x)) +#define SIGNED_TIK_SIZE(x) ( sizeof(tik) + SIGNATURE_SIZE(x) ) +#define SIGNED_CERT_SIZE(x) ( CERTIFICATE_SIZE((cert_header*)SIGNATURE_PAYLOAD(x)) + SIGNATURE_SIZE(x)) + +#define STD_SIGNED_TIK_SIZE ( sizeof(tik) + sizeof(sig_rsa2048) ) + +#define MAX_NUM_TMD_CONTENTS 512 + +#define MAX_TMD_SIZE ( sizeof(tmd) + MAX_NUM_TMD_CONTENTS*sizeof(tmd_content) ) +#define MAX_SIGNED_TMD_SIZE ( MAX_TMD_SIZE + sizeof(sig_rsa2048) ) + +s32 __ES_Init(void); +s32 __ES_Close(void); +s32 __ES_Reset(void); +s32 ES_GetTitleID(u64 *titleID); +s32 ES_SetUID(u64 uid); +s32 ES_GetDataDir(u64 titleID, char *filepath); +s32 ES_GetNumTicketViews(u64 titleID, u32 *cnt); +s32 ES_GetTicketViews(u64 titleID, tikview *views, u32 cnt); +s32 ES_GetNumOwnedTitles(u32 *cnt); +s32 ES_GetOwnedTitles(u64 *titles, u32 cnt); +s32 ES_GetNumTitles(u32 *cnt); +s32 ES_GetTitles(u64 *titles, u32 cnt); +s32 ES_GetNumStoredTMDContents(const signed_blob *stmd, u32 tmd_size, u32 *cnt); +s32 ES_GetStoredTMDContents(const signed_blob *stmd, u32 tmd_size, u32 *contents, u32 cnt); +s32 ES_GetStoredTMDSize(u64 titleID, u32 *size); +s32 ES_GetStoredTMD(u64 titleID, signed_blob *stmd, u32 size); +s32 ES_GetTitleContentsCount(u64 titleID, u32 *num); +s32 ES_GetTitleContents(u64 titleID, u8 *data, u32 size); +s32 ES_GetTMDViewSize(u64 titleID, u32 *size); +s32 ES_GetTMDView(u64 titleID, u8 *data, u32 size); +s32 ES_GetNumSharedContents(u32 *cnt); +s32 ES_GetSharedContents(sha1 *contents, u32 cnt); +s32 ES_LaunchTitle(u64 titleID, const tikview *view); +s32 ES_LaunchTitleBackground(u64 titleID, const tikview *view); +s32 ES_Identify(const signed_blob *certificates, u32 certificates_size, const signed_blob *tmd, u32 tmd_size, const signed_blob *ticket, u32 ticket_size, u32 *keyid); +s32 ES_AddTicket(const signed_blob *tik, u32 tik_size, const signed_blob *certificates, u32 certificates_size, const signed_blob *crl, u32 crl_size); +s32 ES_DeleteTicket(const tikview *view); +s32 ES_AddTitleTMD(const signed_blob *tmd, u32 tmd_size); +s32 ES_AddTitleStart(const signed_blob *tmd, u32 tmd_size, const signed_blob *certificatess, u32 certificatess_size, const signed_blob *crl, u32 crl_size); +s32 ES_AddContentStart(u64 titleID, u32 cid); +s32 ES_AddContentData(s32 cid, u8 *data, u32 data_size); +s32 ES_AddContentFinish(u32 cid); +s32 ES_AddTitleFinish(void); +s32 ES_AddTitleCancel(void); +s32 ES_ImportBoot(const signed_blob *tik, u32 tik_size,const signed_blob *tik_certs, u32 tik_certs_size,const signed_blob *tmd, u32 tmd_size,const signed_blob *tmd_certs, u32 tmd_certs_size,const u8 *content, u32 content_size); +s32 ES_OpenContent(u16 index); +s32 ES_OpenTitleContent(u64 titleID, tikview *views, u16 index); +s32 ES_ReadContent(s32 cfd, u8 *data, u32 data_size); +s32 ES_SeekContent(s32 cfd, s32 where, s32 whence); +s32 ES_CloseContent(s32 cfd); +s32 ES_DeleteTitle(u64 titleID); +s32 ES_DeleteTitleContent(u64 titleID); +s32 ES_Encrypt(u32 keynum, u8 *iv, u8 *source, u32 size, u8 *dest); +s32 ES_Decrypt(u32 keynum, u8 *iv, u8 *source, u32 size, u8 *dest); +s32 ES_Sign(u8 *source, u32 size, u8 *sig, u8 *certs); +s32 ES_GetDeviceCert(u8 *outbuf); +s32 ES_GetDeviceID(u32 *device_id); +s32 ES_GetBoot2Version(u32 *version); +signed_blob *ES_NextCert(const signed_blob *certs); + +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif /* defined(HW_RVL) */ + +#endif diff --git a/wii/libogc/include/ogc/exi.h b/wii/libogc/include/ogc/exi.h new file mode 100644 index 0000000000..b3f104ebd0 --- /dev/null +++ b/wii/libogc/include/ogc/exi.h @@ -0,0 +1,325 @@ +/*------------------------------------------------------------- + +exi.h -- EXI subsystem + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + + +#ifndef __EXI_H__ +#define __EXI_H__ + +/*! +\file exi.h +\brief EXI subsystem + +*/ + + +#include "gctypes.h" + +/*! + * \addtogroup exi_tx_mode EXI tranfer types + * @{ + */ + +#define EXI_READ 0 /*!< EXI transfer type read */ +#define EXI_WRITE 1 /*!< EXI transfer type write */ +#define EXI_READWRITE 2 /*!< EXI transfer type read-write */ + +/*! + * @} + */ + + +/*! + * \addtogroup exi_channels EXI channels + * @{ + */ + +#define EXI_CHANNEL_0 0 /*!< EXI channel 0 (memory card slot A) */ +#define EXI_CHANNEL_1 1 /*!< EXI channel 1 (memory card slot B) */ +#define EXI_CHANNEL_2 2 /*!< EXI channel 2 (other EXI devices connected, e.g. BBA) */ +#define EXI_CHANNEL_MAX 3 /*!< _Termination */ + +/*! + * @} + */ + + +/*! + * \addtogroup exi_devices EXI devices + * @{ + */ + +#define EXI_DEVICE_0 0 /*!< EXI device 0 */ +#define EXI_DEVICE_1 1 /*!< EXI device 1 */ +#define EXI_DEVICE_2 2 /*!< EXI device 2 */ +#define EXI_DEVICE_MAX 3 /*!< _Termination */ + +/*! + * @} + */ + + +/*! + * \addtogroup exi_speed EXI device frequencies + * @{ + */ + +#define EXI_SPEED1MHZ 0 /*!< EXI device frequency 1MHz */ +#define EXI_SPEED2MHZ 1 /*!< EXI device frequency 2MHz */ +#define EXI_SPEED4MHZ 2 /*!< EXI device frequency 4MHz */ +#define EXI_SPEED8MHZ 3 /*!< EXI device frequency 8MHz */ +#define EXI_SPEED16MHZ 4 /*!< EXI device frequency 16MHz */ +#define EXI_SPEED32MHZ 5 /*!< EXI device frequency 32MHz */ + +/*! + * @} + */ + + +/*! + * \addtogroup exi_flags EXI device operation flags + * @{ + */ + +#define EXI_FLAG_DMA 0x0001 /*!< EXI DMA mode transfer in progress */ +#define EXI_FLAG_IMM 0x0002 /*!< EXI immediate mode transfer in progress */ +#define EXI_FLAG_SELECT 0x0004 /*!< EXI channel and device selected */ +#define EXI_FLAG_ATTACH 0x0008 /*!< EXI device on selected channel and device attached */ +#define EXI_FLAG_LOCKED 0x0010 /*!< EXI channel and device locked for device operations */ + +/*! + * @} + */ + + +/*! + * \addtogroup exi_mcident EXI memory card identifier + * @{ + */ + +#define EXI_MEMCARD59 0x00000004 /*!< Nintendo memory card: 64/ 4/ 0.5 (blocks/Mbits/MB). 3rd party vendors do have the same identification */ +#define EXI_MEMCARD123 0x00000008 /*!< Nintendo memory card: 128/ 8/ 1.0 (blocks/Mbits/MB). 3rd party vendors do have the same identification */ +#define EXI_MEMCARD251 0x00000010 /*!< Nintendo memory card: 256/ 16/ 2.0 (blocks/Mbits/MB). 3rd party vendors do have the same identification */ +#define EXI_MEMCARD507 0x00000020 /*!< Nintendo memory card: 512/ 32/ 4.0 (blocks/Mbits/MB). 3rd party vendors do have the same identification */ +#define EXI_MEMCARD1019 0x00000040 /*!< Nintendo memory card: 1024/ 64/ 8.0 (blocks/Mbits/MB). 3rd party vendors do have the same identification */ +#define EXI_MEMCARD2043 0x00000080 /*!< Nintendo memory card: 2048/128/16.0 (blocks/Mbits/MB). 3rd party vendors do have the same identification */ + +/*! + * @} + */ + + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +/*! \typedef s32 (*EXICallback)(s32 chn,s32 dev) +\brief function pointer typedef for the user's EXI callback +\param chn EXI channel +\param dev EXI device +*/ +typedef s32 (*EXICallback)(s32 chn,s32 dev); + + +/*! \fn s32 EXI_ProbeEx(s32 nChn) +\brief Performs an extended probe of the EXI channel +\param[in] nChn EXI channel to probe + +\return 1 on success, <=0 on error +*/ +s32 EXI_ProbeEx(s32 nChn); + + +/*! \fn s32 EXI_Probe(s32 nChn) +\brief Probes the EXI channel +\param[in] nChn EXI channel to probe + +\return 1 on success, <=0 on error +*/ +s32 EXI_Probe(s32 nChn); + + +/*! \fn s32 EXI_Lock(s32 nChn,s32 nDev,EXICallback unlockCB) +\brief Try to lock the desired EXI channel on the given device. +\param[in] nChn EXI channel to lock +\param[in] nDev EXI device to lock +\param[in] unlockCB pointer to callback to call when EXI_Unlock() is called. Thus allowing us a small way of mutual exclusion. + +\return 1 on success, <=0 on error +*/ +s32 EXI_Lock(s32 nChn,s32 nDev,EXICallback unlockCB); + + +/*! \fn s32 EXI_Unlock(s32 nChn) +\brief Unlock the desired EXI channel. +\param[in] nChn EXI channel to unlock + +\return 1 on success, <=0 on error +*/ +s32 EXI_Unlock(s32 nChn); + + +/*! \fn s32 EXI_Select(s32 nChn,s32 nDev,s32 nFrq) +\brief Selects the spedified EXI channel on the given device with the given frequency +\param[in] nChn EXI channel to select +\param[in] nDev EXI device to select +\param[in] nFrq EXI frequency to select + +\return 1 on success, <=0 on error +*/ +s32 EXI_Select(s32 nChn,s32 nDev,s32 nFrq); + + +/*! \fn s32 EXI_SelectSD(s32 nChn,s32 nDev,s32 nFrq) +\brief Performs a special select, for SD cards or adapters respectively, on the given device with the given frequence +\param[in] nChn EXI channel to select +\param[in] nDev EXI device to select +\param[in] nFrq EXI frequency to select + +\return 1 on success, <=0 on error +*/ +s32 EXI_SelectSD(s32 nChn,s32 nDev,s32 nFrq); + + +/*! \fn s32 EXI_Deselect(s32 nChn) +\brief Deselects the EXI channel. +\param[in] nChn EXI channel to deselect + +\return 1 on success, <=0 on error +*/ +s32 EXI_Deselect(s32 nChn); + + +/*! \fn s32 EXI_Sync(s32 nChn) +\brief Synchronize or finish respectively the last EXI transfer. +\param[in] nChn EXI channel to select + +\return 1 on success, <=0 on error +*/ +s32 EXI_Sync(s32 nChn); + + +/*! \fn s32 EXI_Imm(s32 nChn,void *pData,u32 nLen,u32 nMode,EXICallback tc_cb) +\brief Initializes an immediate mode EXI transfer. +\param[in] nChn EXI channel to select +\param[in,out] pData pointer to a buffer to read/copy from/to data. +\param[in] nLen lenght of data to transfer <=4. +\param[in] nMode direction of transferoperation(EXI_READ,EXI_WRITE,EXI_READWRITE) +\param[in] tc_cb pointer to a callback to call when transfer has completed. May be NULL. + +\return 1 on success, <=0 on error +*/ +s32 EXI_Imm(s32 nChn,void *pData,u32 nLen,u32 nMode,EXICallback tc_cb); + + +/*! \fn s32 EXI_ImmEx(s32 nChn,void *pData,u32 nLen,u32 nMode) +\brief Initializes an extended immediate mode EXI transfer. +\param[in] nChn EXI channel to select +\param[in,out] pData pointer to a buffer to read/copy from/to data. +\param[in] nLen lenght of data to transfer. +\param[in] nMode direction of transferoperation(EXI_READ,EXI_WRITE,EXI_READWRITE) + +\return 1 on success, <=0 on error +*/ +s32 EXI_ImmEx(s32 nChn,void *pData,u32 nLen,u32 nMode); + + +/*! \fn s32 EXI_Dma(s32 nChn,void *pData,u32 nLen,u32 nMode,EXICallback tc_cb) +\brief Initializes a DMA mode EXI transfer. +\param[in] nChn EXI channel to select +\param[in,out] pData pointer to a buffer to read/copy from/to data. +\param[in] nLen lenght of data to transfer. +\param[in] nMode direction of transferoperation(EXI_READ,EXI_WRITE,EXI_READWRITE) +\param[in] tc_cb pointer to a callback to call when transfer has completed. May be NULL. + +\return 1 on success, <=0 on error +*/ +s32 EXI_Dma(s32 nChn,void *pData,u32 nLen,u32 nMode,EXICallback tc_cb); + + +/*! \fn s32 EXI_GetState(s32 nChn) +\brief Get the EXI state +\param[in] nChn EXI channel to select + +\return EXI channels state flag. +*/ +s32 EXI_GetState(s32 nChn); + + +/*! \fn s32 EXI_GetID(s32 nChn,s32 nDev,u32 *nId) +\brief Get the ID of the connected EXI device on the given channel +\param[in] nChn EXI channel to select +\param[in] nDev EXI device to select +\param[out] nId EXI device ID to return. + +\return 1 on success, <=0 on error +*/ +s32 EXI_GetID(s32 nChn,s32 nDev,u32 *nId); + + +/*! \fn s32 EXI_Attach(s32 nChn,EXICallback ext_cb) +\brief Attach the device on the given channel +\param[in] nChn EXI channel to select +\param[in] ext_cb pointer to callback to call when device is physically removed. + +\return 1 on success, <=0 on error +*/ +s32 EXI_Attach(s32 nChn,EXICallback ext_cb); + + +/*! \fn s32 EXI_Detach(s32 nChn) +\brief Detach the device on the given channel +\param[in] nChn EXI channel to select + +\return 1 on success, <=0 on error +*/ +s32 EXI_Detach(s32 nChn); + + +/*! \fn void EXI_ProbeReset() +\brief Resets certain internal flags and counters and performs a probe on all 3 channels. + +\return nothing +*/ +void EXI_ProbeReset(); + + +/*! \fn EXICallback EXI_RegisterEXICallback(s32 nChn,EXICallback exi_cb) +\brief Register a callback function in the EXI driver for the EXI interrupt. +\param[in] nChn EXI channel to select +\param[in] exi_cb pointer to the function which to call when EXI interrupt has triggered. + +\return old callback function pointer or NULL +*/ +EXICallback EXI_RegisterEXICallback(s32 nChn,EXICallback exi_cb); + +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif diff --git a/wii/libogc/include/ogc/gu.h b/wii/libogc/include/ogc/gu.h new file mode 100644 index 0000000000..3ba8db46af --- /dev/null +++ b/wii/libogc/include/ogc/gu.h @@ -0,0 +1,499 @@ +#ifndef __GU_H__ +#define __GU_H__ + +/*! + * \file gu.h + * \brief GU/Matrix subsystem + * + * \details The GU/Matrix subsystem is used for many matrix- , vector- and quaternion-related operations. + * + * The matrix functions are coupled tightly with GX (GX will take Mtx for many of its own matrix-related functions, for example). + * This library supports 3x3, 3x4, 4x3 and 4x4 matrices. + * + * This library has functions for manipulating vectors as well; some of its functions are for transforming matrices using vectors. + * + * It also includes functions for using and converting between quaternions. Although quaternions are not used natively in libogc, + * they work well with rotation functions as they aren't susceptible to "gimbal lock". You can use the appropriate functions to + * freely convert between quaternions and matrices. + * + * \note Many of the functions come in two flavors: C and "paired single". Both perform the same exact operations, but with a key + * difference: the C versions are written in pure C and are slightly more accurate, while the PS versions are hand-written + * assembly routines utilizing the Gekko's "paired-single" extension, which is much faster for almost every operation but slightly + * less accurate. When building for the GameCube or Wii (which is probably always), the library is configured to automatically use + * the paired-single tuned versions, as the speed difference is worth the accuracy hit. If you want to use the C routine and take + * the performance hit instead, prefix the function with "c_". You are not limited to using only one or the other collection; you + * can use both in your code if you wish. + * + * \warning Some functions (notably guFrustum() and related) take a 4x4 matrix, while the rest work only on 4x3 matrices. Make sure + * you are passing the correct matrix type to each function, as passing the wrong one can create subtle bugs. + */ + +#include + +#ifdef GEKKO +#define MTX_USE_PS +#undef MTX_USE_C +#endif + +#ifndef GEKKO +#define MTX_USE_C +#undef MTX_USE_PS +#endif + +#ifndef MAX +#define MAX(a,b) (((a)>(b))?(a):(b)) +#endif +#ifndef MIN +#define MIN(a,b) (((a)<(b))?(a):(b)) +#endif + +#define M_PI 3.14159265358979323846 +#define M_DTOR (3.14159265358979323846/180.0) + +#define FTOFIX32(x) (s32)((x) * (f32)0x00010000) +#define FIX32TOF(x) ((f32)(x) * (1.0f / (f32)0x00010000)) +#define FTOFRAC8(x) ((s32) MIN(((x) * (128.0f)), 127.0f) & 0xff) + +#define DegToRad(a) ( (a) * 0.01745329252f ) +#define RadToDeg(a) ( (a) * 57.29577951f ) + +/*! + * \def guMtxRowCol(mt,row,col) + * \brief Provides storage-safe access to elements of Mtx and Mtx44. + * + * \details This macro provides storage-safe access to elements of Mtx and Mtx44. Matrix storage format is transparent to the + * programmer as long as matrices are initialized and manipulated exclusively with the matrix API. Do not initialize matrices + * when they are first declared and do not set values by hand. To insulate code from changes to matrix storage format, you should + * use this macro instead of directly accessing individual matrix elements. + * + * \note When using this function, think of the matrix in row-major format. + * + * \param[in] mt Matrix to be accessed. + * \param[in] r Row index of element to access. + * \param[in] c Column index of element to access. + * + * \return none + */ +#define guMtxRowCol(mt,row,col) (mt[row][col]) + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +/*! \struct guVector + * \brief 3-element vector with x, y and z components. + * + * \details When used in 3D transformations, it is treated as a column vector with an implied fourth 'w' coordinate of 1. + * For example, to multiply a vector vOld by a matrix m: vNew = m x vOld. In code: + * + * \code guVecMultiply( m, &vOld, &vNew ); \endcode + * + * \note This is a generic structure which can be used in any situation or function that accepts an array or struct with + * three f32 values. + */ +typedef struct _vecf { + f32 x,y,z; +} guVector; + +/*! \struct guQuaternion + * \brief Quaternion type consisting of an (x,y,z) vector component and a (w) scalar component. + * + * \details This struct is used by gu library function such as guQuatMtx(), which generates a rotation matrix from a + * quaternion. + * + * \note This is a generic structure which can be used in any situation or function that accepts an array or struct with + * four f32 values. + */ +typedef struct _qrtn { + f32 x,y,z,w; +} guQuaternion; + +/*! \typedef f32 Mtx[3][4] + * \brief Standard 3x4 matrix. + * \warning Some functions take the 4x4 matrix type rather than this one, so make sure you don't mix up the two. + */ +typedef f32 Mtx[3][4]; +typedef f32 (*MtxP)[4]; + +/*! \typedef f32 ROMtx[4][3] + * \brief Column-major representation of the standard Mtx structure. + * + * \details It is not a true transpose, as it is a 4x3 matrix. These structures are only accepted by functions that explicitly + * require reordered matrices. + */ +typedef f32 ROMtx[4][3]; +typedef f32 (*ROMtxP)[3]; + +/*! \typedef f32 Mtx33[3][3] + * \brief 3x3 matrix. + */ +typedef f32 Mtx33[3][3]; +typedef f32 (*Mtx33P)[3]; + +/*! \typedef f32 Mtx44[4][4] + * \brief 4x4 matrix. + * \warning Some functions take this instead of the 3x4 matrix, so make sure you don't mix up the two. + */ +typedef f32 Mtx44[4][4]; +typedef f32 (*Mtx44P)[4]; + +/*! + * \fn void guFrustum(Mtx44 mt,f32 t,f32 b,f32 l,f32 r,f32 n,f32 f) + * \brief Sets a 4x4 perspective projection matrix from viewing volume dimensions. + * + * \details This matrix is used by the GX API to transform points to screen space. + * + * For normal perspective projection, the axis of projection is the -z axis, so \a t = positive, \a b = -\a t, \a r = + * positive, \a l = -\a r. \a n and \a f must both be given as positive distances. + * + * \note \a m negates a point's 'z' values, so pre-transformed points should have negative 'z' values in eye space in + * order to be visible after projection. + * + * \param[out] mt New projection matrix. + * \param[in] t Top edge of view volume at the near clipping plane. + * \param[in] b Bottom edge of view volume at the near clipping plane. + * \param[in] l Left edge of view volume at the near clipping plane. + * \param[in] r Right edge of view volume at the near clipping plane. + * \param[in] n Positive distance to the near clipping plane. + * \param[in] f Positive distance to the far clipping plane. + * + * \return none + */ +void guFrustum(Mtx44 mt,f32 t,f32 b,f32 l,f32 r,f32 n,f32 f); + +/*! + * \fn void guPerspective(Mtx44 mt,f32 fovy,f32 aspect,f32 n,f32 f) + * \brief Sets a 4x4 perspective projection matrix from field of view and aspect ratio parameters. + * + * \details This matrix is used by the GX API to transform points to screen space. + * + * This function generates a projection matrix equivalent to that created by guFrustum() with the axis of projection + * centered around Z. It is included to provide an alternative method of specifying view volume dimensions. + * + * The field of view (\a fovy) is the total field of view in degrees in the Y-Z plane. \a aspect is the ratio + * (width/height) of the view window in screen space. \a n and \a f must both be given as positive distances. + * + * \note \a m negates a point's 'z' values, so pre-transformed points should have negative 'z' values in eye space in order to + * be visible after projection. + * + * \param[out] mt New perspective projection matrix. + * \param[in] fovy Total field of view in the Y-Z plane measured in degrees. + * \param[in] aspect View window aspect ratio (width/height) + * \param[in] n Positive distance to near clipping plane. + * \param[in] f Positive distance to far clipping plane. + * + * \return none + */ +void guPerspective(Mtx44 mt,f32 fovy,f32 aspect,f32 n,f32 f); + +/*! + * \fn void guOrtho(Mtx44 mt,f32 t,f32 b,f32 l,f32 r,f32 n,f32 f) + * \brief Sets a 4x4 matrix for orthographic projection. + * + * \details This matrix is used by the GX API to transform points from eye space to screen space. + * + * For normal parallel projections, the axis of projection is the -z axis, so \a t = positive, \a b = -\a t, \a r = + * positive, \a l = -\a r. \a n and \a f must both be given as positive distances. + * + * \note \a m negates \a a point's 'z' values, so pre-transformed points should have negative 'z' values in eye space in order + * to be visible after projection. + * + * \param[out] mt New parallel projection matrix. + * \param[in] t Top edge of view volume. + * \param[in] b Bottom edge of view volume. + * \param[in] l Left edge of view volume. + * \param[in] r Right edge of view volume. + * \param[in] n Positive distance to the near clipping plane. + * \param[in] f Positive distance to the far clipping plane. + * + * \return none + */ +void guOrtho(Mtx44 mt,f32 t,f32 b,f32 l,f32 r,f32 n,f32 f); + + +/*! + * \fn void guLightPerspective(Mtx mt,f32 fovY,f32 aspect,f32 scaleS,f32 scaleT,f32 transS,f32 transT) + * \brief Sets a 3x4 perspective projection matrix from field of view and aspect ratio parameters, two scale values, and two + * translation values. + * + * \details This matrix is used to project points into texture space and yield texture coordinates. + * + * This function generates a projection matrix, equivalent to that created by guLightFrustum(), with the axis of projection + * centered around Z. This function is included to provide an alternative method of specifying texture projection volume + * dimensions. + * + * The field of view (\a fovy) is the total field of view in degrees in the YZ plane. \a aspect is the ratio (width / height) + * of the view window in screen space. + * + * Standard projection yields values ranging from -1.0 to 1.0 in both dimensions of the front clipping plane. Since texture + * coordinates should usually be within the range of 0.0 to 1.0, we have added a scale and translation value for both S and T. + * The most common way to use these values is to set all of them to 0.5 (so that points in the range of -1.0 to 1.0 are first + * scaled by 0.5) to be in the range of -0.5 to 0.5. Then they are translated by 0.5 to be in the range of 0.0 to 1.0. Other + * values can be used for translation and scale to yield different effects. + * + * \param[out] mt New projection matrix. + * \param[in] fovy Total field of view in the YZ plane measured in degrees. + * \param[in] aspect View window aspect ratio (width / height) + * \param[in] scaleS Scale in the S direction for projected coordinates (usually 0.5). + * \param[in] scaleT Scale in the T direction for projected coordinates (usually 0.5). + * \param[in] transS Translate in the S direction for projected coordinates (usually 0.5). + * \param[in] transT Translate in the T direction for projected coordinates (usually 0.5). + * + * \return none + */ +void guLightPerspective(Mtx mt,f32 fovY,f32 aspect,f32 scaleS,f32 scaleT,f32 transS,f32 transT); + +/*! + * \fn void guLightOrtho(Mtx mt,f32 t,f32 b,f32 l,f32 r,f32 scaleS,f32 scaleT,f32 transS,f32 transT) + * \brief Sets a 3x4 matrix for orthographic projection. + * + * \details Use this matrix to project points into texture space and yield texture coordinates. + * + * For normal parallel projections, the axis of projection is the -z axis, so \a t = positive, \a b = -\a t, \a r = positive, + * \a l = -\a r. + * + * Standard projection yields values ranging from -1.0 to 1.0 in both dimensions of the front clipping plane. Since texture + * coordinates should usually be within the range of 0.0 to 1.0, we have added a scale and translation value for both S and T. + * The most common way to use these values is to set all of them to 0.5 so that points in the range of -1.0 to 1.0 are first + * scaled by 0.5 (to be in the range of -0.5 to 0.5). Then they are translated by 0.5 to be in the range of 0.0 to 1.0. Other + * values can be used for translation and scale to yield different effects. + * + * \param[out] mt New parallel projection matrix. + * \param[in] t Top edge of view volume. + * \param[in] b Bottom edge of view volume. + * \param[in] l Left edge of view volume. + * \param[in] r Right edge of view volume. + * \param[in] scaleS Scale in the S direction for projected coordinates (usually 0.5). + * \param[in] scaleT Scale in the T direction for projected coordinates (usually 0.5). + * \param[in] transS Translate in the S direction for projected coordinates (usually 0.5). + * \param[in] transT Translate in the T direction for projected coordinates (usually 0.5). + * + * \return none + */ +void guLightOrtho(Mtx mt,f32 t,f32 b,f32 l,f32 r,f32 scaleS,f32 scaleT,f32 transS,f32 transT); + +/*! + * \fn void guLightFrustum(Mtx mt,f32 t,f32 b,f32 l,f32 r,f32 n,f32 scaleS,f32 scaleT,f32 transS,f32 transT) + * \brief Sets a 3x4 perspective projection matrix from viewing volume dimensions, two scale values, and two translation values. + * + * \details This matrix is used to project points into texture space and yield texture coordinates. + * + * For normal perspective projection, the axis of projection is the -z axis, so \a t = positive, \a b = -\a t, \a r = positive, + * \a l = -\a r. \a n must be given as a positive distance. + * + * Standard projection yields values ranging from -1.0 to 1.0 in both dimensions of the front clipping plane. Since texture + * coordinates usually should be within the range of 0.0 to 1.0, we have added a scale and translation value for both S and T. + * The most common usage of these values is to set all of them to 0.5 so that points in the range of -1.0 to 1.0 are first + * scaled by 0.5 to be in the range of -0.5 to 0.5, and are then translated by 0.5 to be in the range of 0.0 to 1.0. Other + * values can be used for translation and scale to yield different effects. + * + * \param[out] mt New projection matrix. + * \param[in] t Top edge of view volume at the near clipping plane. + * \param[in] b Bottom edge of view volume at the near clipping plane. + * \param[in] l Left edge of view volume at the near clipping plane. + * \param[in] r Right edge of view volume at the near clipping plane. + * \param[in] n Positive distance to the near clipping plane. + * \param[in] scaleS Scale in the S direction for projected coordinates (usually 0.5). + * \param[in] scaleT Scale in the T direction for projected coordinates (usually 0.5). + * \param[in] transS Translate in the S direction for projected coordinates (usually 0.5). + * \param[in] transT Translate in the T direction for projected coordinates (usually 0.5). + * + * \return none + */ +void guLightFrustum(Mtx mt,f32 t,f32 b,f32 l,f32 r,f32 n,f32 scaleS,f32 scaleT,f32 transS,f32 transT); + + +/*! + * \fn void guLookAt(Mtx mt,guVector *camPos,guVector *camUp,guVector *target) + * \brief Sets a world-space to camera-space transformation matrix. + * + * \details Create the matrix \a m by specifying a camera position (\a camPos), a camera "up" direction (\a camUp), and a target + * position (\a target). + * + * The camera's reference viewing direction is the -z axis. The camera's reference 'up' direction is the +y axis. + * + * This function is especially convenient for creating a tethered camera, aiming at an object, panning, or specifying an + * arbitrary view. + * + * \param[out] mt New viewing matrix. + * \param[in] camPos Vector giving 3D camera position in world space. + * \param[in] camUp Vector containing camera "up" vector; does not have to be a unit vector. + * \param[in] target Vector giving 3D target position in world space. + * + * \return none + */ +void guLookAt(Mtx mt,guVector *camPos,guVector *camUp,guVector *target); + + +/*! + * \fn void guVecHalfAngle(guVector *a,guVector *b,guVector *half) + * \brief Computes a vector that lies halfway between \a a and \a b. + * + * \details The halfway vector is useful in specular reflection calculations. It is interpreted as pointing from the reflecting + * surface to the general viewing direction. + * + * \a a and \a b do not have to be unit vectors. Both of these vectors are assumed to be pointing towards the surface from the + * light or viewer, respectively. Local copies of these vectors are negated, normalized and added head to tail. + * + * \a half is computed as a unit vector that points from the surface to halfway between the light and the viewing direction. + * + * \param[in] a Pointer to incident vector. Must point from the light source to the surface. + * \param[in] b Pointer to viewing vector. Must point from the viewer to the surface. + * \param[out] half Pointer to resultant half-angle unit vector; points from the surface to halfway between the light and the viewing direction. + * + * \return none + */ +void guVecHalfAngle(guVector *a,guVector *b,guVector *half); + +void c_guVecAdd(guVector *a,guVector *b,guVector *ab); +void c_guVecSub(guVector *a,guVector *b,guVector *ab); +void c_guVecScale(guVector *src,guVector *dst,f32 scale); +void c_guVecNormalize(guVector *v); +void c_guVecMultiply(Mtx mt,guVector *src,guVector *dst); +void c_guVecCross(guVector *a,guVector *b,guVector *axb); +void c_guVecMultiplySR(Mtx mt,guVector *src,guVector *dst); +f32 c_guVecDotProduct(guVector *a,guVector *b); + +#ifdef GEKKO +void ps_guVecAdd(register guVector *a,register guVector *b,register guVector *ab); +void ps_guVecSub(register guVector *a,register guVector *b,register guVector *ab); +void ps_guVecScale(register guVector *src,register guVector *dst,f32 scale); +void ps_guVecNormalize(register guVector *v); +void ps_guVecCross(register guVector *a,register guVector *b,register guVector *axb); +void ps_guVecMultiply(register Mtx mt,register guVector *src,register guVector *dst); +void ps_guVecMultiplySR(register Mtx mt,register guVector *src,register guVector *dst); +f32 ps_guVecDotProduct(register guVector *a,register guVector *b); +#endif //GEKKO + +void c_guQuatAdd(guQuaternion *a,guQuaternion *b,guQuaternion *ab); +void c_guQuatSub(guQuaternion *a,guQuaternion *b,guQuaternion *ab); +void c_guQuatMultiply(guQuaternion *a,guQuaternion *b,guQuaternion *ab); +void c_guQuatNormalize(guQuaternion *a,guQuaternion *d); +void c_guQuatInverse(guQuaternion *a,guQuaternion *d); +void c_guQuatMtx(guQuaternion *a,Mtx m); + +#ifdef GEKKO +void ps_guQuatAdd(register guQuaternion *a,register guQuaternion *b,register guQuaternion *ab); +void ps_guQuatSub(register guQuaternion *a,register guQuaternion *b,register guQuaternion *ab); +void ps_guQuatMultiply(register guQuaternion *a,register guQuaternion *b,register guQuaternion *ab); +void ps_guQuatNormalize(register guQuaternion *a,register guQuaternion *d); +void ps_guQuatInverse(register guQuaternion *a,register guQuaternion *d); +#endif + +void c_guMtxIdentity(Mtx mt); +void c_guMtxCopy(Mtx src,Mtx dst); +void c_guMtxConcat(Mtx a,Mtx b,Mtx ab); +void c_guMtxScale(Mtx mt,f32 xS,f32 yS,f32 zS); +void c_guMtxScaleApply(Mtx src,Mtx dst,f32 xS,f32 yS,f32 zS); +void c_guMtxApplyScale(Mtx src,Mtx dst,f32 xS,f32 yS,f32 zS); +void c_guMtxTrans(Mtx mt,f32 xT,f32 yT,f32 zT); +void c_guMtxTransApply(Mtx src,Mtx dst,f32 xT,f32 yT,f32 zT); +void c_guMtxApplyTrans(Mtx src,Mtx dst,f32 xT,f32 yT,f32 zT); +u32 c_guMtxInverse(Mtx src,Mtx inv); +u32 c_guMtxInvXpose(Mtx src,Mtx xPose); +void c_guMtxTranspose(Mtx src,Mtx xPose); +void c_guMtxRotRad(Mtx mt,const char axis,f32 rad); +void c_guMtxRotTrig(Mtx mt,const char axis,f32 sinA,f32 cosA); +void c_guMtxRotAxisRad(Mtx mt,guVector *axis,f32 rad); +void c_guMtxReflect(Mtx m,guVector *p,guVector *n); +void c_guMtxQuat(Mtx m,guQuaternion *a); + +#ifdef GEKKO +void ps_guMtxIdentity(register Mtx mt); +void ps_guMtxCopy(register Mtx src,register Mtx dst); +void ps_guMtxConcat(register Mtx a,register Mtx b,register Mtx ab); +void ps_guMtxTranspose(register Mtx src,register Mtx xPose); +u32 ps_guMtxInverse(register Mtx src,register Mtx inv); +u32 ps_guMtxInvXpose(register Mtx src,register Mtx xPose); +void ps_guMtxScale(register Mtx mt,register f32 xS,register f32 yS,register f32 zS); +void ps_guMtxScaleApply(register Mtx src,register Mtx dst,register f32 xS,register f32 yS,register f32 zS); +void ps_guMtxApplyScale(register Mtx src,register Mtx dst,register f32 xS,register f32 yS,register f32 zS); +void ps_guMtxTrans(register Mtx mt,register f32 xT,register f32 yT,register f32 zT); +void ps_guMtxTransApply(register Mtx src,register Mtx dst,register f32 xT,register f32 yT,register f32 zT); +void ps_guMtxApplyTrans(register Mtx src,register Mtx dst,register f32 xT,register f32 yT,register f32 zT); +void ps_guMtxRotRad(register Mtx mt,register const char axis,register f32 rad); +void ps_guMtxRotTrig(register Mtx mt,register const char axis,register f32 sinA,register f32 cosA); +void ps_guMtxRotAxisRad(register Mtx mt,register guVector *axis,register f32 tmp0); +void ps_guMtxReflect(register Mtx m,register guVector *p,register guVector *n); +#endif //GEKKO + +#ifdef MTX_USE_C + +#define guVecAdd c_guVecAdd +#define guVecSub c_guVecSub +#define guVecScale c_guVecScale +#define guVecNormalize c_guVecNormalize +#define guVecMultiply c_guVecMultiply +#define guVecCross c_guVecCross +#define guVecMultiplySR c_guVecMultiplySR +#define guVecDotProduct c_guVecDotProduct + +#define guQuatAdd c_guQuatAdd +#define guQuatSub c_guQuatSub +#define guQuatMultiply c_guQuatMultiply +#define guQuatNoramlize c_guQuatNormalize +#define guQuatInverse c_guQuatInverse +#define guQuatMtx c_guQuatMtx + +#define guMtxIdentity c_guMtxIdentity +#define guMtxCopy c_guMtxCopy +#define guMtxConcat c_guMtxConcat +#define guMtxScale c_guMtxScale +#define guMtxScaleApply c_guMtxScaleApply +#define guMtxApplyScale c_guMtxApplyScale +#define guMtxTrans c_guMtxTrans +#define guMtxTransApply c_guMtxTransApply +#define guMtxApplyTrans c_guMtxApplyTrans +#define guMtxInverse c_guMtxInverse +#define guMtxTranspose c_guMtxTranspose +#define guMtxInvXpose c_guMtxInvXpose +#define guMtxRotRad c_guMtxRotRad +#define guMtxRotTrig c_guMtxRotTrig +#define guMtxRotAxisRad c_guMtxRotAxisRad +#define guMtxReflect c_guMtxReflect +#define guMtxQuat c_guMtxQuat + +#else //MTX_USE_C + +#define guVecAdd ps_guVecAdd +#define guVecSub ps_guVecSub +#define guVecScale ps_guVecScale +#define guVecNormalize ps_guVecNormalize +#define guVecMultiply ps_guVecMultiply +#define guVecCross ps_guVecCross +#define guVecMultiplySR ps_guVecMultiplySR +#define guVecDotProduct ps_guVecDotProduct + +#define guQuatAdd ps_guQuatAdd +#define guQuatSub ps_guQuatSub +#define guQuatMultiply ps_guQuatMultiply +#define guQuatNormalize ps_guQuatNormalize +#define guQuatInverse ps_guQuatInverse + +#define guMtxIdentity ps_guMtxIdentity +#define guMtxCopy ps_guMtxCopy +#define guMtxConcat ps_guMtxConcat +#define guMtxScale ps_guMtxScale +#define guMtxScaleApply ps_guMtxScaleApply +#define guMtxApplyScale ps_guMtxApplyScale +#define guMtxTrans ps_guMtxTrans +#define guMtxTransApply ps_guMtxTransApply +#define guMtxApplyTrans ps_guMtxApplyTrans +#define guMtxInverse ps_guMtxInverse +#define guMtxTranspose ps_guMtxTranspose +#define guMtxInvXpose ps_guMtxInvXpose +#define guMtxRotRad ps_guMtxRotRad +#define guMtxRotTrig ps_guMtxRotTrig +#define guMtxRotAxisRad ps_guMtxRotAxisRad +#define guMtxReflect ps_guMtxReflect + +#endif //MTX_USE_PS + +#define guMtxRotDeg(mt,axis,deg) guMtxRotRad(mt,axis,DegToRad(deg)) +#define guMtxRotAxisDeg(mt,axis,deg) guMtxRotAxisRad(mt,axis,DegToRad(deg)) + +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif diff --git a/wii/libogc/include/ogc/gx.h b/wii/libogc/include/ogc/gx.h new file mode 100644 index 0000000000..b58d35f69c --- /dev/null +++ b/wii/libogc/include/ogc/gx.h @@ -0,0 +1,5256 @@ +#ifndef __GX_H__ +#define __GX_H__ + +/*! + * \file gx.h + * \brief GX subsystem + * + */ + +#include +#include "lwp.h" +#include "gx_struct.h" +#include "gu.h" + +#define GX_FALSE 0 +#define GX_TRUE 1 +#define GX_DISABLE 0 +#define GX_ENABLE 1 + +/*! \addtogroup clipmode Clipping mode + * @{ + */ +#define GX_CLIP_DISABLE 1 +#define GX_CLIP_ENABLE 0 +/*! @} */ + +#define GX_FIFO_MINSIZE (64*1024) /*!< Smallest usable graphics FIFO size. */ +#define GX_FIFO_HIWATERMARK (16*1024) /*!< Default hi watermark for FIFO buffer control. */ +#define GX_FIFO_OBJSIZE 128 + +#define GX_PERSPECTIVE 0 +#define GX_ORTHOGRAPHIC 1 + +#define GX_MT_NULL 0 +#define GX_MT_XF_FLUSH 1 +#define GX_MT_DL_SAVE_CTX 2 + +#define GX_XF_FLUSH_NONE 0 +#define GX_XF_FLUSH_SAFE 1 + +/*! \addtogroup channelid Color channel ID + * @{ + */ +#define GX_COLOR0 0 +#define GX_COLOR1 1 +#define GX_ALPHA0 2 +#define GX_ALPHA1 3 +#define GX_COLOR0A0 4 +#define GX_COLOR1A1 5 +#define GX_COLORZERO 6 +#define GX_ALPHA_BUMP 7 +#define GX_ALPHA_BUMPN 8 +#define GX_COLORNULL 0xff +/*! @} */ + +/*! \addtogroup mtxtype Matrix type + * @{ + */ +#define GX_MTX2x4 0 +#define GX_MTX3x4 1 +/*! @} */ + +/*! \addtogroup vtxfmt Vertex format index + * @{ + */ +#define GX_VTXFMT0 0 +#define GX_VTXFMT1 1 +#define GX_VTXFMT2 2 +#define GX_VTXFMT3 3 +#define GX_VTXFMT4 4 +#define GX_VTXFMT5 5 +#define GX_VTXFMT6 6 +#define GX_VTXFMT7 7 +#define GX_MAXVTXFMT 8 + +/*! @} */ + + +/*! \addtogroup vtxattrin Vertex data input type + * @{ + */ +#define GX_NONE 0 /*!< Input data is not used */ +#define GX_DIRECT 1 /*!< Input data is set direct */ +#define GX_INDEX8 2 /*!< Input data is set by a 8bit index */ +#define GX_INDEX16 3 /*!< Input data is set by a 16bit index */ + +/*! @} */ + + +/*! \addtogroup compsize Number of components in an attribute + * @{ + */ +#define GX_U8 0 /*!< Unsigned 8-bit integer */ +#define GX_S8 1 /*!< Signed 8-bit integer */ +#define GX_U16 2 /*!< Unsigned 16-bit integer */ +#define GX_S16 3 /*!< Signed 16-bit integer */ +#define GX_F32 4 /*!< 32-bit floating-point */ +#define GX_RGB565 0 /*!< 16-bit RGB */ +#define GX_RGB8 1 /*!< 24-bit RGB */ +#define GX_RGBX8 2 /*!< 32-bit RGBX */ +#define GX_RGBA4 3 /*!< 16-bit RGBA */ +#define GX_RGBA6 4 /*!< 24-bit RGBA */ +#define GX_RGBA8 5 /*!< 32-bit RGBA */ +/*! @} */ + +/*! \addtogroup comptype Attribute component type + * @{ + */ +#define GX_POS_XY 0 /*!< X,Y position */ +#define GX_POS_XYZ 1 /*!< X,Y,Z position */ +#define GX_NRM_XYZ 0 /*!< X,Y,Z normal */ +#define GX_NRM_NBT 1 +#define GX_NRM_NBT3 2 +#define GX_CLR_RGB 0 /*!< RGB color */ +#define GX_CLR_RGBA 1 /*!< RGBA color */ +#define GX_TEX_S 0 /*!< One texture dimension */ +#define GX_TEX_ST 1 /*!< Two texture dimensions */ +/*! @} */ + +/*! \addtogroup vtxattr Vertex attribute array type + * @{ + */ +#define GX_VA_PTNMTXIDX 0 +#define GX_VA_TEX0MTXIDX 1 +#define GX_VA_TEX1MTXIDX 2 +#define GX_VA_TEX2MTXIDX 3 +#define GX_VA_TEX3MTXIDX 4 +#define GX_VA_TEX4MTXIDX 5 +#define GX_VA_TEX5MTXIDX 6 +#define GX_VA_TEX6MTXIDX 7 +#define GX_VA_TEX7MTXIDX 8 +#define GX_VA_POS 9 +#define GX_VA_NRM 10 +#define GX_VA_CLR0 11 +#define GX_VA_CLR1 12 +#define GX_VA_TEX0 13 +#define GX_VA_TEX1 14 +#define GX_VA_TEX2 15 +#define GX_VA_TEX3 16 +#define GX_VA_TEX4 17 +#define GX_VA_TEX5 18 +#define GX_VA_TEX6 19 +#define GX_VA_TEX7 20 +#define GX_POSMTXARRAY 21 +#define GX_NRMMTXARRAY 22 +#define GX_TEXMTXARRAY 23 +#define GX_LIGHTARRAY 24 +#define GX_VA_NBT 25 +#define GX_VA_MAXATTR 26 +#define GX_VA_NULL 0xff +/*! @} */ + +/*! \addtogroup primtype Primitive type + * \brief Collection of primitive types that can be drawn by the GP. + * + * \note Which type you use depends on your needs; however, performance can increase by using triangle strips or fans instead of discrete triangles. + * @{ + */ +#define GX_POINTS 0xB8 /*!< Draws a series of points. Each vertex is a single point. */ +#define GX_LINES 0xA8 /*!< Draws a series of unconnected line segments. Each pair of vertices makes a line. */ +#define GX_LINESTRIP 0xB0 /*!< Draws a series of lines. Each vertex (besides the first) makes a line between it and the previous. */ +#define GX_TRIANGLES 0x90 /*!< Draws a series of unconnected triangles. Three vertices make a single triangle. */ +#define GX_TRIANGLESTRIP 0x98 /*!< Draws a series of triangles. Each triangle (besides the first) shares a side with the previous triangle. + * Each vertex (besides the first two) completes a triangle. */ +#define GX_TRIANGLEFAN 0xA0 /*!< Draws a single triangle fan. The first vertex is the "centerpoint". The second and third vertex complete + * the first triangle. Each subsequent vertex completes another triangle which shares a side with the previous + * triangle (except the first triangle) and has the centerpoint vertex as one of the vertices. */ +#define GX_QUADS 0x80 /*!< Draws a series of unconnected quads. Every four vertices completes a quad. Internally, each quad is + * translated into a pair of triangles. */ +/*! @} */ + +#define GX_SRC_REG 0 +#define GX_SRC_VTX 1 + +/*! \addtogroup lightid Light ID + * @{ + */ +#define GX_LIGHT0 0x001 /*!< Light 0 */ +#define GX_LIGHT1 0x002 /*!< Light 2 */ +#define GX_LIGHT2 0x004 /*!< Light 3 */ +#define GX_LIGHT3 0x008 /*!< Light 4 */ +#define GX_LIGHT4 0x010 /*!< Light 5 */ +#define GX_LIGHT5 0x020 /*!< Light 6 */ +#define GX_LIGHT6 0x040 /*!< Light 7 */ +#define GX_LIGHT7 0x080 /*!< Light 8 */ +#define GX_MAXLIGHT 0x100 /*!< All lights */ +#define GX_LIGHTNULL 0x000 /*!< No lights */ +/*! @} */ + +/*! \addtogroup difffn Diffuse function + * @{ + */ +#define GX_DF_NONE 0 +#define GX_DF_SIGNED 1 +#define GX_DF_CLAMP 2 +/*! @} */ + +/*! \addtogroup attenfunc Attenuation function + * @{ + */ +#define GX_AF_SPEC 0 /*!< Specular computation */ +#define GX_AF_SPOT 1 /*!< Spot light attenuation */ +#define GX_AF_NONE 2 /*!< No attenuation */ +/*! @} */ + +/* pos,nrm,tex,dtt matrix */ +/*! \addtogroup pnmtx Position-normal matrix index + * @{ + */ +#define GX_PNMTX0 0 +#define GX_PNMTX1 3 +#define GX_PNMTX2 6 +#define GX_PNMTX3 9 +#define GX_PNMTX4 12 +#define GX_PNMTX5 15 +#define GX_PNMTX6 18 +#define GX_PNMTX7 21 +#define GX_PNMTX8 24 +#define GX_PNMTX9 27 +/*! @} */ + +/*! \addtogroup texmtx Texture matrix index + * @{ + */ +#define GX_TEXMTX0 30 +#define GX_TEXMTX1 33 +#define GX_TEXMTX2 36 +#define GX_TEXMTX3 39 +#define GX_TEXMTX4 42 +#define GX_TEXMTX5 45 +#define GX_TEXMTX6 48 +#define GX_TEXMTX7 51 +#define GX_TEXMTX8 54 +#define GX_TEXMTX9 57 +#define GX_IDENTITY 60 +/*! @} */ + +/*! \addtogroup dttmtx Post-transform texture matrix index + * @{ + */ +#define GX_DTTMTX0 64 +#define GX_DTTMTX1 67 +#define GX_DTTMTX2 70 +#define GX_DTTMTX3 73 +#define GX_DTTMTX4 76 +#define GX_DTTMTX5 79 +#define GX_DTTMTX6 82 +#define GX_DTTMTX7 85 +#define GX_DTTMTX8 88 +#define GX_DTTMTX9 91 +#define GX_DTTMTX10 94 +#define GX_DTTMTX11 97 +#define GX_DTTMTX12 100 +#define GX_DTTMTX13 103 +#define GX_DTTMTX14 106 +#define GX_DTTMTX15 109 +#define GX_DTTMTX16 112 +#define GX_DTTMTX17 115 +#define GX_DTTMTX18 118 +#define GX_DTTMTX19 121 +#define GX_DTTIDENTITY 125 +/*! @} */ + +/* tex coord id + used by: XF: 0x1040,0x1050 + BP: 0x30 +*/ +/*! \addtogroup texcoordid texture coordinate slot + * @{ + */ +#define GX_TEXCOORD0 0x0 +#define GX_TEXCOORD1 0x1 +#define GX_TEXCOORD2 0x2 +#define GX_TEXCOORD3 0x3 +#define GX_TEXCOORD4 0x4 +#define GX_TEXCOORD5 0x5 +#define GX_TEXCOORD6 0x6 +#define GX_TEXCOORD7 0x7 +#define GX_MAXCOORD 0x8 +#define GX_TEXCOORDNULL 0xff +/*! @} */ + +/* tex format */ +#define _GX_TF_ZTF 0x10 +#define _GX_TF_CTF 0x20 + +/*! \addtogroup texfmt Texture format + * @{ + */ + +#define GX_TF_I4 0x0 +#define GX_TF_I8 0x1 +#define GX_TF_IA4 0x2 +#define GX_TF_IA8 0x3 +#define GX_TF_RGB565 0x4 +#define GX_TF_RGB5A3 0x5 +#define GX_TF_RGBA8 0x6 +#define GX_TF_CI4 0x8 +#define GX_TF_CI8 0x9 +#define GX_TF_CI14 0xa +#define GX_TF_CMPR 0xE /*!< Compressed */ + +#define GX_TL_IA8 0x00 +#define GX_TL_RGB565 0x01 +#define GX_TL_RGB5A3 0x02 + +#define GX_CTF_R4 (0x0|_GX_TF_CTF) /*!< For copying 4 bits from red */ +#define GX_CTF_RA4 (0x2|_GX_TF_CTF) /*!< For copying 4 bits from red, 4 bits from alpha */ +#define GX_CTF_RA8 (0x3|_GX_TF_CTF) /*!< For copying 8 bits from red, 8 bits from alpha */ +#define GX_CTF_YUVA8 (0x6|_GX_TF_CTF) +#define GX_CTF_A8 (0x7|_GX_TF_CTF) /*!< For copying 8 bits from alpha */ +#define GX_CTF_R8 (0x8|_GX_TF_CTF) /*!< For copying 8 bits from red */ +#define GX_CTF_G8 (0x9|_GX_TF_CTF) /*!< For copying 8 bits from green */ +#define GX_CTF_B8 (0xA|_GX_TF_CTF) /*!< For copying 8 bits from blue */ +#define GX_CTF_RG8 (0xB|_GX_TF_CTF) /*!< For copying 8 bits from red, 8 bits from green */ +#define GX_CTF_GB8 (0xC|_GX_TF_CTF) /*!< For copying 8 bits from green, 8 bits from blue */ + +/*! \addtogroup ztexfmt Z Texture format + * @{ + */ + +#define GX_TF_Z8 (0x1|_GX_TF_ZTF) /*!< For texture copy, specifies upper 8 bits of Z */ +#define GX_TF_Z16 (0x3|_GX_TF_ZTF) /*!< For texture copy, specifies upper 16 bits of Z */ +#define GX_TF_Z24X8 (0x6|_GX_TF_ZTF) /*!< For texture copy, copies 24 Z bits and 0xFF */ + +/*! @} */ + +#define GX_CTF_Z4 (0x0|_GX_TF_ZTF|_GX_TF_CTF) /*!< For copying 4 upper bits from Z */ +#define GX_CTF_Z8M (0x9|_GX_TF_ZTF|_GX_TF_CTF) /*!< For copying the middle 8 bits of Z */ +#define GX_CTF_Z8L (0xA|_GX_TF_ZTF|_GX_TF_CTF) /*!< For copying the lower 8 bits of Z */ +#define GX_CTF_Z16L (0xC|_GX_TF_ZTF|_GX_TF_CTF) /*!< For copying the lower 16 bits of Z */ + +#define GX_TF_A8 GX_CTF_A8 + +/*! @} */ + +/* gx tlut size */ +#define GX_TLUT_16 1 // number of 16 entry blocks. +#define GX_TLUT_32 2 +#define GX_TLUT_64 4 +#define GX_TLUT_128 8 +#define GX_TLUT_256 16 +#define GX_TLUT_512 32 +#define GX_TLUT_1K 64 +#define GX_TLUT_2K 128 +#define GX_TLUT_4K 256 +#define GX_TLUT_8K 512 +#define GX_TLUT_16K 1024 + +/*! \addtogroup ztexop Z Texture operator + * @{ + */ + +#define GX_ZT_DISABLE 0 +#define GX_ZT_ADD 1 /*!< Add a Z texel to reference Z */ +#define GX_ZT_REPLACE 2 /*!< Replace reference Z with Z texel */ +#define GX_MAX_ZTEXOP 3 + +/*! @} */ + + +/*! \addtogroup texgentyp Texture coordinate generation type + * @{ + */ +#define GX_TG_MTX3x4 0 /*!< 2x4 matrix multiply on the input attribute and generate S,T texture coordinates. */ +#define GX_TG_MTX2x4 1 /*!< 3x4 matrix multiply on the input attribute and generate S,T,Q coordinates; S,T are then divided + * by Q to produce the actual 2D texture coordinates. */ +#define GX_TG_BUMP0 2 /*!< Use light 0 in the bump map calculation. */ +#define GX_TG_BUMP1 3 /*!< Use light 1 in the bump map calculation. */ +#define GX_TG_BUMP2 4 /*!< Use light 2 in the bump map calculation. */ +#define GX_TG_BUMP3 5 /*!< Use light 3 in the bump map calculation. */ +#define GX_TG_BUMP4 6 /*!< Use light 4 in the bump map calculation. */ +#define GX_TG_BUMP5 7 /*!< Use light 5 in the bump map calculation. */ +#define GX_TG_BUMP6 8 /*!< Use light 6 in the bump map calculation. */ +#define GX_TG_BUMP7 9 /*!< Use light 7 in the bump map calculation. */ +#define GX_TG_SRTG 10 /*!< Coordinates generated from vertex lighting results; one of the color channel results is converted + * into texture coordinates. */ +/*! @} */ + +/*! \addtogroup texgensrc Texture coordinate source + * @{ + */ +#define GX_TG_POS 0 +#define GX_TG_NRM 1 +#define GX_TG_BINRM 2 +#define GX_TG_TANGENT 3 +#define GX_TG_TEX0 4 +#define GX_TG_TEX1 5 +#define GX_TG_TEX2 6 +#define GX_TG_TEX3 7 +#define GX_TG_TEX4 8 +#define GX_TG_TEX5 9 +#define GX_TG_TEX6 10 +#define GX_TG_TEX7 11 +#define GX_TG_TEXCOORD0 12 +#define GX_TG_TEXCOORD1 13 +#define GX_TG_TEXCOORD2 14 +#define GX_TG_TEXCOORD3 15 +#define GX_TG_TEXCOORD4 16 +#define GX_TG_TEXCOORD5 17 +#define GX_TG_TEXCOORD6 18 +#define GX_TG_COLOR0 19 +#define GX_TG_COLOR1 20 +/*! @} */ + +/*! \addtogroup compare Compare type + * @{ + */ +#define GX_NEVER 0 +#define GX_LESS 1 +#define GX_EQUAL 2 +#define GX_LEQUAL 3 +#define GX_GREATER 4 +#define GX_NEQUAL 5 +#define GX_GEQUAL 6 +#define GX_ALWAYS 7 +/*! @} */ + +/* Text Wrap Mode */ +#define GX_CLAMP 0 +#define GX_REPEAT 1 +#define GX_MIRROR 2 +#define GX_MAXTEXWRAPMODE 3 + +/*! \addtogroup blendmode Blending type + * @{ + */ +#define GX_BM_NONE 0 /*!< Write input directly to EFB */ +#define GX_BM_BLEND 1 /*!< Blend using blending equation */ +#define GX_BM_LOGIC 2 /*!< Blend using bitwise operation */ +#define GX_BM_SUBTRACT 3 /*!< Input subtracts from existing pixel */ +#define GX_MAX_BLENDMODE 4 +/*! @} */ + +/*! \addtogroup blendfactor Blending control + * \details Each pixel (source or destination) is multiplied by any of these controls. + * @{ + */ +#define GX_BL_ZERO 0 /*!< 0.0 */ +#define GX_BL_ONE 1 /*!< 1.0 */ +#define GX_BL_SRCCLR 2 /*!< source color */ +#define GX_BL_INVSRCCLR 3 /*!< 1.0 - (source color) */ +#define GX_BL_SRCALPHA 4 /*!< source alpha */ +#define GX_BL_INVSRCALPHA 5 /*!< 1.0 - (source alpha) */ +#define GX_BL_DSTALPHA 6 /*!< framebuffer alpha */ +#define GX_BL_INVDSTALPHA 7 /*!< 1.0 - (FB alpha) */ +#define GX_BL_DSTCLR GX_BL_SRCCLR +#define GX_BL_INVDSTCLR GX_BL_INVSRCCLR +/*! @} */ + +/*! \addtogroup logicop Logical operation type + * \details Destination (dst) acquires the value of one of these operations, given in C syntax. + * @{ + */ +#define GX_LO_CLEAR 0 /*!< 0 */ +#define GX_LO_AND 1 /*!< src & dst */ +#define GX_LO_REVAND 2 /*!< src & ~dst */ +#define GX_LO_COPY 3 /*!< src */ +#define GX_LO_INVAND 4 /*!< ~src & dst */ +#define GX_LO_NOOP 5 /*!< dst */ +#define GX_LO_XOR 6 /*!< src ^ dst */ +#define GX_LO_OR 7 /*!< src | dst */ +#define GX_LO_NOR 8 /*!< ~(src | dst) */ +#define GX_LO_EQUIV 9 /*!< ~(src ^ dst) */ +#define GX_LO_INV 10 /*!< ~dst */ +#define GX_LO_REVOR 11 /*!< src | ~dst */ +#define GX_LO_INVCOPY 12 /*!< ~src */ +#define GX_LO_INVOR 13 /*!< ~src | dst */ +#define GX_LO_NAND 14 /*!< ~(src & dst) */ +#define GX_LO_SET 15 /*!< 1 */ +/*! @} */ + +/*! \addtogroup texoff Texture offset value + * \brief Used for texturing points or lines. + * @{ + */ +#define GX_TO_ZERO 0 +#define GX_TO_SIXTEENTH 1 +#define GX_TO_EIGHTH 2 +#define GX_TO_FOURTH 3 +#define GX_TO_HALF 4 +#define GX_TO_ONE 5 +#define GX_MAX_TEXOFFSET 6 +/*! @} */ + +/*! \addtogroup tevdefmode TEV combiner operation + * \brief Color/Alpha combiner modes for GX_SetTevOp(). + * + * \details For these equations, Cv is the output color for the stage, Cr is the output color of previous stage, and Ct is the texture color. Av is the output + * alpha for a stage, Ar is the output alpha of previous stage, and At is the texture alpha. As a special case, rasterized color + * (GX_CC_RASC) is used as Cr and rasterized alpha (GX_CA_RASA) is used as Ar at the first TEV stage because there is no previous stage. + * + * @{ + */ + +#define GX_MODULATE 0 /*!< Cv=CrCt; Av=ArAt */ +#define GX_DECAL 1 /*!< Cv=(1-At)Cr + AtCt; Av=Ar */ +#define GX_BLEND 2 /*!< Cv=(1-Ct)Cr + Ct; Av=AtAr */ +#define GX_REPLACE 3 /*!< Cv=Ct; Ar=At */ +#define GX_PASSCLR 4 /*!< Cv=Cr; Av=Ar */ + +/*! @} */ + + +/*! \addtogroup tevcolorarg TEV color combiner input + * @{ + */ + +#define GX_CC_CPREV 0 /*!< Use the color value from previous TEV stage */ +#define GX_CC_APREV 1 /*!< Use the alpha value from previous TEV stage */ +#define GX_CC_C0 2 /*!< Use the color value from the color/output register 0 */ +#define GX_CC_A0 3 /*!< Use the alpha value from the color/output register 0 */ +#define GX_CC_C1 4 /*!< Use the color value from the color/output register 1 */ +#define GX_CC_A1 5 /*!< Use the alpha value from the color/output register 1 */ +#define GX_CC_C2 6 /*!< Use the color value from the color/output register 2 */ +#define GX_CC_A2 7 /*!< Use the alpha value from the color/output register 2 */ +#define GX_CC_TEXC 8 /*!< Use the color value from texture */ +#define GX_CC_TEXA 9 /*!< Use the alpha value from texture */ +#define GX_CC_RASC 10 /*!< Use the color value from rasterizer */ +#define GX_CC_RASA 11 /*!< Use the alpha value from rasterizer */ +#define GX_CC_ONE 12 +#define GX_CC_HALF 13 +#define GX_CC_KONST 14 +#define GX_CC_ZERO 15 /*!< Use to pass zero value */ + +/*! @} */ + + +/*! \addtogroup tevalphaarg TEV alpha combiner input + * @{ + */ + +#define GX_CA_APREV 0 /*!< Use the alpha value from previous TEV stage */ +#define GX_CA_A0 1 /*!< Use the alpha value from the color/output register 0 */ +#define GX_CA_A1 2 /*!< Use the alpha value from the color/output register 1 */ +#define GX_CA_A2 3 /*!< Use the alpha value from the color/output register 2 */ +#define GX_CA_TEXA 4 /*!< Use the alpha value from texture */ +#define GX_CA_RASA 5 /*!< Use the alpha value from rasterizer */ +#define GX_CA_KONST 6 +#define GX_CA_ZERO 7 /*!< Use to pass zero value */ + +/*! @} */ + + +/*! \addtogroup tevstage TEV stage + * \details The GameCube's Graphics Processor (GP) can use up to 16 stages to compute a texel for a particular surface. + * By default, each texture will use two stages, but it can be configured through various functions calls. + * + * \note This is different from \ref texmapid s, where textures are loaded into. + * @{ + */ + +#define GX_TEVSTAGE0 0 +#define GX_TEVSTAGE1 1 +#define GX_TEVSTAGE2 2 +#define GX_TEVSTAGE3 3 +#define GX_TEVSTAGE4 4 +#define GX_TEVSTAGE5 5 +#define GX_TEVSTAGE6 6 +#define GX_TEVSTAGE7 7 +#define GX_TEVSTAGE8 8 +#define GX_TEVSTAGE9 9 +#define GX_TEVSTAGE10 10 +#define GX_TEVSTAGE11 11 +#define GX_TEVSTAGE12 12 +#define GX_TEVSTAGE13 13 +#define GX_TEVSTAGE14 14 +#define GX_TEVSTAGE15 15 +#define GX_MAX_TEVSTAGE 16 + +/*! @} */ + + +/*! \addtogroup tevop TEV combiner operator + * @{ + */ + +#define GX_TEV_ADD 0 +#define GX_TEV_SUB 1 +#define GX_TEV_COMP_R8_GT 8 +#define GX_TEV_COMP_R8_EQ 9 +#define GX_TEV_COMP_GR16_GT 10 +#define GX_TEV_COMP_GR16_EQ 11 +#define GX_TEV_COMP_BGR24_GT 12 +#define GX_TEV_COMP_BGR24_EQ 13 +#define GX_TEV_COMP_RGB8_GT 14 +#define GX_TEV_COMP_RGB8_EQ 15 +#define GX_TEV_COMP_A8_GT GX_TEV_COMP_RGB8_GT // for alpha channel +#define GX_TEV_COMP_A8_EQ GX_TEV_COMP_RGB8_EQ // for alpha channel + +/*! @} */ + + +/*! \addtogroup tevbias TEV bias value + * @{ + */ + +#define GX_TB_ZERO 0 +#define GX_TB_ADDHALF 1 +#define GX_TB_SUBHALF 2 +#define GX_MAX_TEVBIAS 3 + +/*! @} */ + + +/*! \addtogroup tevclampmode TEV clamping mode + * \note These modes are used for a function which is not implementable on production (i.e. retail) GameCube hardware. + * @{ + */ + +#define GX_TC_LINEAR 0 +#define GX_TC_GE 1 +#define GX_TC_EQ 2 +#define GX_TC_LE 3 +#define GX_MAX_TEVCLAMPMODE 4 + +/*! @} */ + + +/*! \addtogroup tevscale TEV scale value + * @{ + */ + +#define GX_CS_SCALE_1 0 +#define GX_CS_SCALE_2 1 +#define GX_CS_SCALE_4 2 +#define GX_CS_DIVIDE_2 3 +#define GX_MAX_TEVSCALE 4 + +/*! @} */ + + +/*! \addtogroup tevcoloutreg TEV color/output register + * @{ + */ + +#define GX_TEVPREV 0 /*!< Default register for passing results from one stage to another. */ +#define GX_TEVREG0 1 +#define GX_TEVREG1 2 +#define GX_TEVREG2 3 +#define GX_MAX_TEVREG 4 + +/*! @} */ + + +/*! \addtogroup cullmode Backface culling mode + * @{ + */ +#define GX_CULL_NONE 0 /*!< Do not cull any primitives. */ +#define GX_CULL_FRONT 1 /*!< Cull front-facing primitives. */ +#define GX_CULL_BACK 2 /*!< Cull back-facing primitives. */ +#define GX_CULL_ALL 3 /*!< Cull all primitives. */ +/*! @} */ + +/*! \addtogroup texmapid texture map slot + * \brief Texture map slots to hold textures in. + * + * \details The GameCube's Graphics Processor (GP) can apply up to eight textures to a single surface. Those textures + * are assigned one of these slots. Various operations used on or with a particular texture will also take one of these + * items, including operations regarding texture coordinate generation (although not necessarily on the same slot). + * + * \note This is different from \ref tevstage s, which are the actual quanta for work with textures. + * @{ + */ +#define GX_TEXMAP0 0 /*!< Texture map slot 0 */ +#define GX_TEXMAP1 1 /*!< Texture map slot 1 */ +#define GX_TEXMAP2 2 /*!< Texture map slot 2 */ +#define GX_TEXMAP3 3 /*!< Texture map slot 3 */ +#define GX_TEXMAP4 4 /*!< Texture map slot 4 */ +#define GX_TEXMAP5 5 /*!< Texture map slot 5 */ +#define GX_TEXMAP6 6 /*!< Texture map slot 6 */ +#define GX_TEXMAP7 7 /*!< Texture map slot 7 */ +#define GX_MAX_TEXMAP 8 +#define GX_TEXMAP_NULL 0xff /*!< No texmap */ +#define GX_TEXMAP_DISABLE 0x100 /*!< Disable texmap lookup for this texmap slot (use bitwise OR with a texture map slot). */ +/*! @} */ + +/*! \addtogroup alphaop Alpha combine control + * @{ + */ +#define GX_AOP_AND 0 +#define GX_AOP_OR 1 +#define GX_AOP_XOR 2 +#define GX_AOP_XNOR 3 +#define GX_MAX_ALPHAOP 4 +/*! @} */ + +/*! \addtogroup tevkcolorid TEV constant color register + * @{ + */ +#define GX_KCOLOR0 0 /*!< Constant register 0 */ +#define GX_KCOLOR1 1 /*!< Constant register 1 */ +#define GX_KCOLOR2 2 /*!< Constant register 2 */ +#define GX_KCOLOR3 3 /*!< Constant register 3 */ +#define GX_KCOLOR_MAX 4 +/*! @} */ + +/*! \addtogroup tevkcolorsel TEV constant color selection + * @{ + */ +#define GX_TEV_KCSEL_1 0x00 /*!< constant 1.0 */ +#define GX_TEV_KCSEL_7_8 0x01 /*!< constant 7/8 */ +#define GX_TEV_KCSEL_3_4 0x02 /*!< constant 3/4 */ +#define GX_TEV_KCSEL_5_8 0x03 /*!< constant 5/8 */ +#define GX_TEV_KCSEL_1_2 0x04 /*!< constant 1/2 */ +#define GX_TEV_KCSEL_3_8 0x05 /*!< constant 3/8 */ +#define GX_TEV_KCSEL_1_4 0x06 /*!< constant 1/4 */ +#define GX_TEV_KCSEL_1_8 0x07 /*!< constant 1/8 */ +#define GX_TEV_KCSEL_K0 0x0C /*!< K0[RGB] register */ +#define GX_TEV_KCSEL_K1 0x0D /*!< K1[RGB] register */ +#define GX_TEV_KCSEL_K2 0x0E /*!< K2[RGB] register */ +#define GX_TEV_KCSEL_K3 0x0F /*!< K3[RGB] register */ +#define GX_TEV_KCSEL_K0_R 0x10 /*!< K0[RRR] register */ +#define GX_TEV_KCSEL_K1_R 0x11 /*!< K1[RRR] register */ +#define GX_TEV_KCSEL_K2_R 0x12 /*!< K2[RRR] register */ +#define GX_TEV_KCSEL_K3_R 0x13 /*!< K3[RRR] register */ +#define GX_TEV_KCSEL_K0_G 0x14 /*!< K0[GGG] register */ +#define GX_TEV_KCSEL_K1_G 0x15 /*!< K1[GGG] register */ +#define GX_TEV_KCSEL_K2_G 0x16 /*!< K2[GGG] register */ +#define GX_TEV_KCSEL_K3_G 0x17 /*!< K3[GGG] register */ +#define GX_TEV_KCSEL_K0_B 0x18 /*!< K0[BBB] register */ +#define GX_TEV_KCSEL_K1_B 0x19 /*!< K1[BBB] register */ +#define GX_TEV_KCSEL_K2_B 0x1A /*!< K2[BBB] register */ +#define GX_TEV_KCSEL_K3_B 0x1B /*!< K3[RBB] register */ +#define GX_TEV_KCSEL_K0_A 0x1C /*!< K0[AAA] register */ +#define GX_TEV_KCSEL_K1_A 0x1D /*!< K1[AAA] register */ +#define GX_TEV_KCSEL_K2_A 0x1E /*!< K2[AAA] register */ +#define GX_TEV_KCSEL_K3_A 0x1F /*!< K3[AAA] register */ +/*! @} */ + +/*! \addtogroup tevkalphasel TEV constant alpha selection + * @{ + */ +#define GX_TEV_KASEL_1 0x00 /*!< constant 1.0 */ +#define GX_TEV_KASEL_7_8 0x01 /*!< constant 7/8 */ +#define GX_TEV_KASEL_3_4 0x02 /*!< constant 3/4 */ +#define GX_TEV_KASEL_5_8 0x03 /*!< constant 5/8 */ +#define GX_TEV_KASEL_1_2 0x04 /*!< constant 1/2 */ +#define GX_TEV_KASEL_3_8 0x05 /*!< constant 3/8 */ +#define GX_TEV_KASEL_1_4 0x06 /*!< constant 1/4 */ +#define GX_TEV_KASEL_1_8 0x07 /*!< constant 1/8 */ +#define GX_TEV_KASEL_K0_R 0x10 /*!< K0[R] register */ +#define GX_TEV_KASEL_K1_R 0x11 /*!< K1[R] register */ +#define GX_TEV_KASEL_K2_R 0x12 /*!< K2[R] register */ +#define GX_TEV_KASEL_K3_R 0x13 /*!< K3[R] register */ +#define GX_TEV_KASEL_K0_G 0x14 /*!< K0[G] register */ +#define GX_TEV_KASEL_K1_G 0x15 /*!< K1[G] register */ +#define GX_TEV_KASEL_K2_G 0x16 /*!< K2[G] register */ +#define GX_TEV_KASEL_K3_G 0x17 /*!< K3[G] register */ +#define GX_TEV_KASEL_K0_B 0x18 /*!< K0[B] register */ +#define GX_TEV_KASEL_K1_B 0x19 /*!< K1[B] register */ +#define GX_TEV_KASEL_K2_B 0x1A /*!< K2[B] register */ +#define GX_TEV_KASEL_K3_B 0x1B /*!< K3[B] register */ +#define GX_TEV_KASEL_K0_A 0x1C /*!< K0[A] register */ +#define GX_TEV_KASEL_K1_A 0x1D /*!< K1[A] register */ +#define GX_TEV_KASEL_K2_A 0x1E /*!< K2[A] register */ +#define GX_TEV_KASEL_K3_A 0x1F /*!< K3[A] register */ +/*! @} */ + + +/*! \addtogroup tevswapsel TEV color swap table entry + * @{ + */ + +#define GX_TEV_SWAP0 0 +#define GX_TEV_SWAP1 1 +#define GX_TEV_SWAP2 2 +#define GX_TEV_SWAP3 3 +#define GX_MAX_TEVSWAP 4 + +/*! @} */ + + +/* tev color chan */ +#define GX_CH_RED 0 +#define GX_CH_GREEN 1 +#define GX_CH_BLUE 2 +#define GX_CH_ALPHA 3 + +/*! \addtogroup indtexstage Indirect texture stage + * @{ + */ +#define GX_INDTEXSTAGE0 0 +#define GX_INDTEXSTAGE1 1 +#define GX_INDTEXSTAGE2 2 +#define GX_INDTEXSTAGE3 3 +#define GX_MAX_INDTEXSTAGE 4 +/*! @} */ + +/*! \addtogroup indtexformat Indirect texture format + * \details Bits for the indirect offsets are extracted from the high end of each component byte. Bits for the bump alpha + * are extraced off the low end of the byte. For GX_ITF_8, the byte is duplicated for the offset and the bump alpha. + * @{ + */ +#define GX_ITF_8 0 +#define GX_ITF_5 1 +#define GX_ITF_4 2 +#define GX_ITF_3 3 +#define GX_MAX_ITFORMAT 4 +/*! @} */ + +/*! \addtogroup indtexbias Indirect texture bias select + * \brief Indicates which components of the indirect offset should receive a bias value. + * + * \details The bias is fixed at -128 for GX_ITF_8 and +1 for the other formats. The bias happens prior to the indirect matrix multiply. + * @{ + */ +#define GX_ITB_NONE 0 +#define GX_ITB_S 1 +#define GX_ITB_T 2 +#define GX_ITB_ST 3 +#define GX_ITB_U 4 +#define GX_ITB_SU 5 +#define GX_ITB_TU 6 +#define GX_ITB_STU 7 +#define GX_MAX_ITBIAS 8 +/*! @} */ + +/*! \addtogroup indtexmtx Indirect texture matrix + * @{ + */ +#define GX_ITM_OFF 0 /*!< Specifies a matrix of all zeroes. */ +#define GX_ITM_0 1 /*!< Specifies indirect matrix 0, indirect scale 0. */ +#define GX_ITM_1 2 /*!< Specifies indirect matrix 1, indirect scale 1. */ +#define GX_ITM_2 3 /*!< Specifies indirect matrix 2, indirect scale 2. */ +#define GX_ITM_S0 5 /*!< Specifies dynamic S-type matrix, indirect scale 0. */ +#define GX_ITM_S1 6 /*!< Specifies dynamic S-type matrix, indirect scale 1. */ +#define GX_ITM_S2 7 /*!< Specifies dynamic S-type matrix, indirect scale 2. */ +#define GX_ITM_T0 9 /*!< Specifies dynamic T-type matrix, indirect scale 0. */ +#define GX_ITM_T1 10 /*!< Specifies dynamic T-type matrix, indirect scale 1. */ +#define GX_ITM_T2 11 /*!< Specifies dynamic T-type matrix, indirect scale 2. */ +/*! @} */ + +/*! \addtogroup indtexwrap Indirect texture wrap value + * \brief Indicates whether the regular texture coordinate should be wrapped before being added to the offset. + * + * \details GX_ITW_OFF specifies no wrapping. GX_ITW_0 will zero out the regular texture coordinate. + * @{ + */ +#define GX_ITW_OFF 0 +#define GX_ITW_256 1 +#define GX_ITW_128 2 +#define GX_ITW_64 3 +#define GX_ITW_32 4 +#define GX_ITW_16 5 +#define GX_ITW_0 6 +#define GX_MAX_ITWRAP 7 +/*! @} */ + +/*! \addtogroup indtexalphasel Indirect texture bump alpha select + * \brief Indicates which offset component should provide the "bump" alpha output for the given TEV stage. + * + * \note Bump alpha is not available for TEV stage 0. + * @{ + */ +#define GX_ITBA_OFF 0 +#define GX_ITBA_S 1 +#define GX_ITBA_T 2 +#define GX_ITBA_U 3 +#define GX_MAX_ITBALPHA 4 +/*! @} */ + +/*! \addtogroup indtexscale Indirect texture scale + * \brief Specifies an additional scale value that may be applied to the texcoord used for an indirect initial lookup (not a TEV stage regular lookup). + * + * \details The scale value is a fraction; thus GX_ITS_32 means to divide the texture coordinate values by 32. + * @{ + */ +#define GX_ITS_1 0 +#define GX_ITS_2 1 +#define GX_ITS_4 2 +#define GX_ITS_8 3 +#define GX_ITS_16 4 +#define GX_ITS_32 5 +#define GX_ITS_64 6 +#define GX_ITS_128 7 +#define GX_ITS_256 8 +#define GX_MAX_ITSCALE 9 +/*! @} */ + +/*! \addtogroup fogtype Fog equation control + * @{ + */ +#define GX_FOG_NONE 0 + +#define GX_FOG_PERSP_LIN 2 +#define GX_FOG_PERSP_EXP 4 +#define GX_FOG_PERSP_EXP2 5 +#define GX_FOG_PERSP_REVEXP 6 +#define GX_FOG_PERSP_REVEXP2 7 + +#define GX_FOG_ORTHO_LIN 10 +#define GX_FOG_ORTHO_EXP 12 +#define GX_FOG_ORTHO_EXP2 13 +#define GX_FOG_ORTHO_REVEXP 14 +#define GX_FOG_ORTHO_REVEXP2 15 + +#define GX_FOG_LIN GX_FOG_PERSP_LIN +#define GX_FOG_EXP GX_FOG_PERSP_EXP +#define GX_FOG_EXP2 GX_FOG_PERSP_EXP2 +#define GX_FOG_REVEXP GX_FOG_PERSP_REVEXP +#define GX_FOG_REVEXP2 GX_FOG_PERSP_REVEXP2 +/*! @} */ + + +/* pixel format */ +#define GX_PF_RGB8_Z24 0 +#define GX_PF_RGBA6_Z24 1 +#define GX_PF_RGB565_Z16 2 +#define GX_PF_Z24 3 +#define GX_PF_Y8 4 +#define GX_PF_U8 5 +#define GX_PF_V8 6 +#define GX_PF_YUV420 7 + +/*! \addtogroup zfmt Compressed Z format + * @{ + */ +#define GX_ZC_LINEAR 0 +#define GX_ZC_NEAR 1 +#define GX_ZC_MID 2 +#define GX_ZC_FAR 3 +/*! @} */ + +/*! \addtogroup xfbclamp XFB clamp modes + * @{ + */ + +#define GX_CLAMP_NONE 0 +#define GX_CLAMP_TOP 1 +#define GX_CLAMP_BOTTOM 2 + +/*! @} */ + + +/*! \addtogroup gammamode Gamma values + * @{ + */ + +#define GX_GM_1_0 0 +#define GX_GM_1_7 1 +#define GX_GM_2_2 2 + +/*! @} */ + + +/*! \addtogroup copymode EFB copy mode + * \brief Controls whether all lines, only even lines, or only odd lines are copied from the EFB. + * @{ + */ +#define GX_COPY_PROGRESSIVE 0 +#define GX_COPY_INTLC_EVEN 2 +#define GX_COPY_INTLC_ODD 3 +/*! @} */ + +/*! \addtogroup alphareadmode Alpha read mode + * @{ + */ +#define GX_READ_00 0 /*!< Always read 0x00. */ +#define GX_READ_FF 1 /*!< Always read 0xFF. */ +#define GX_READ_NONE 2 /*!< Always read the real alpha value. */ +/*! @} */ + +/*! \addtogroup texcachesize Texture cache size + * \brief Size of texture cache regions. + * @{ + */ +#define GX_TEXCACHE_32K 0 +#define GX_TEXCACHE_128K 1 +#define GX_TEXCACHE_512K 2 +#define GX_TEXCACHE_NONE 3 +/*! @} */ + +/*! \addtogroup distattnfn Brightness decreasing function + * \brief Type of the brightness decreasing function by distance. + * @{ + */ +#define GX_DA_OFF 0 +#define GX_DA_GENTLE 1 +#define GX_DA_MEDIUM 2 +#define GX_DA_STEEP 3 +/*! @} */ + +/*! \addtogroup spotfn Spot illumination distribution function + * @{ + */ +#define GX_SP_OFF 0 +#define GX_SP_FLAT 1 +#define GX_SP_COS 2 +#define GX_SP_COS2 3 +#define GX_SP_SHARP 4 +#define GX_SP_RING1 5 +#define GX_SP_RING2 6 +/*! @} */ + +/*! \addtogroup texfilter Texture filter types + * @{ + */ +#define GX_NEAR 0 /*!< Point sampling, no mipmap */ +#define GX_LINEAR 1 /*!< Bilinear filtering, no mipmap */ +#define GX_NEAR_MIP_NEAR 2 /*!< Point sampling, discrete mipmap */ +#define GX_LIN_MIP_NEAR 3 /*!< Bilinear filtering, discrete mipmap */ +#define GX_NEAR_MIP_LIN 4 /*!< Point sampling, linear mipmap */ +#define GX_LIN_MIP_LIN 5 /*!< Trilinear filtering */ +/*! @} */ + +/*! \addtogroup anisotropy Maximum anisotropy filter control + * @{ + */ +#define GX_ANISO_1 0 +#define GX_ANISO_2 1 +#define GX_ANISO_4 2 +#define GX_MAX_ANISOTROPY 3 +/*! @} */ + +/*! \addtogroup vcachemetrics Vertex cache performance counter + * @{ + */ +#define GX_VC_POS 0 +#define GX_VC_NRM 1 +#define GX_VC_CLR0 2 +#define GX_VC_CLR1 3 +#define GX_VC_TEX0 4 +#define GX_VC_TEX1 5 +#define GX_VC_TEX2 6 +#define GX_VC_TEX3 7 +#define GX_VC_TEX4 8 +#define GX_VC_TEX5 9 +#define GX_VC_TEX6 10 +#define GX_VC_TEX7 11 +#define GX_VC_ALL 15 +/*! @} */ + +/*! \addtogroup perf0metrics Performance counter 0 metric + * \details Performance counter 0 is used to measure attributes dealing with geometry and primitives, such as triangle counts and clipping ratios. + * + * \note GX_PERF0_XF_* measure how many GP cycles are spent in each stage of the XF.

+ * + * \note The triangle metrics (GX_PERF0_TRIANGLES_*) allow counting triangles under specific conditions or with specific attributes.

+ * + * \note GX_PERF0_TRIANGLES_*TEX count triangles based on the number of texture coordinates supplied; GX_PERF0_TRIANGLES_*CLR count + * triangles based on the number of colors supplied.

+ * + * \note The quad metrics allow you to count the number of quads (2x2 pixels) the GP processes. The term coverage is used to indicate how many + * pixels in the quad are actually part of the triangle being rasterized. For example, a coverage of 4 means all pixels in the quad intersect the + * triangle. A coverage of 1 indicates that only 1 pixel in the quad intersected the triangle. + * @{ + */ +#define GX_PERF0_VERTICES 0 /*!< Number of vertices processed by the GP. */ +#define GX_PERF0_CLIP_VTX 1 /*!< Number of vertices that were clipped by the GP. */ +#define GX_PERF0_CLIP_CLKS 2 /*!< Number of GP clocks spent clipping. */ +#define GX_PERF0_XF_WAIT_IN 3 /*!< Number of cycles the XF is waiting on input. If the XF is waiting a large percentage + * of the total time, it may indicate that the CPU is not supplying data fast enough to + * keep the GP busy. */ +#define GX_PERF0_XF_WAIT_OUT 4 /*!< Number of cycles the XF waits to send its output to the rest of the GP pipeline. If + * the XF cannot output, it may indicate that the GP is currently fill-rate limited. */ +#define GX_PERF0_XF_XFRM_CLKS 5 /*!< Number of cycles the transform engine is busy. */ +#define GX_PERF0_XF_LIT_CLKS 6 /*!< Number of cycles the lighting engine is busy. */ +#define GX_PERF0_XF_BOT_CLKS 7 /*!< Number of cycles the bottom of the pipe (result combiner) is busy. */ +#define GX_PERF0_XF_REGLD_CLKS 8 /*!< Number of cycles are spent loading XF state registers. */ +#define GX_PERF0_XF_REGRD_CLKS 9 /*!< Number of cycles the XF reads the state registers. */ +#define GX_PERF0_CLIP_RATIO 10 +#define GX_PERF0_TRIANGLES 11 /*!< Number of triangles. */ +#define GX_PERF0_TRIANGLES_CULLED 12 /*!< Number of triangles that failed the front-face/back-face culling test. */ +#define GX_PERF0_TRIANGLES_PASSED 13 /*!< Number of triangles that passed the front-face/back-face culling test. */ +#define GX_PERF0_TRIANGLES_SCISSORED 14 /*!< Number of triangles that are scissored. */ +#define GX_PERF0_TRIANGLES_0TEX 15 +#define GX_PERF0_TRIANGLES_1TEX 16 +#define GX_PERF0_TRIANGLES_2TEX 17 +#define GX_PERF0_TRIANGLES_3TEX 18 +#define GX_PERF0_TRIANGLES_4TEX 19 +#define GX_PERF0_TRIANGLES_5TEX 20 +#define GX_PERF0_TRIANGLES_6TEX 21 +#define GX_PERF0_TRIANGLES_7TEX 22 +#define GX_PERF0_TRIANGLES_8TEX 23 +#define GX_PERF0_TRIANGLES_0CLR 24 +#define GX_PERF0_TRIANGLES_1CLR 25 +#define GX_PERF0_TRIANGLES_2CLR 26 +#define GX_PERF0_QUAD_0CVG 27 /*!< Number of quads having zero coverage. */ +#define GX_PERF0_QUAD_NON0CVG 28 /*!< Number of quads having coverage greater than zero. */ +#define GX_PERF0_QUAD_1CVG 29 /*!< Number of quads with 1 pixel coverage. */ +#define GX_PERF0_QUAD_2CVG 30 /*!< Number of quads with 2 pixel coverage. */ +#define GX_PERF0_QUAD_3CVG 31 /*!< Number of quads with 3 pixel coverage. */ +#define GX_PERF0_QUAD_4CVG 32 /*!< Number of quads with 4 pixel coverage. */ +#define GX_PERF0_AVG_QUAD_CNT 33 /*!< Average quad count; average based on what is unknown */ +#define GX_PERF0_CLOCKS 34 /*!< Number of GP clocks that have elapsed since the previous call to GX_ReadGP0Metric(). */ +#define GX_PERF0_NONE 35 /*!< Disables performance measurement for perf0 and resets the counter. */ +/*! @} */ + +/*! \addtogroup perf1metrics Performance counter 1 metric + * \details Performance counter 1 is used for measuring texturing and caching performance as well as FIFO performance. + * + * \note GX_PERF1_TC_* can be used to compute the texture cache (TC) miss rate. The TC_CHECK* parameters count how many texture cache lines are + * accessed for each pixel. In the worst case, for a mipmap, up to 8 cache lines may be accessed to produce one textured pixel. + * GX_PERF1_TC_MISS counts how many of those accesses missed the texture cache. To compute the miss rate, divide GX_PERF1_TC_MISS by the sum of all four + * GX_PERF1_TC_CHECK* values.

+ * + * \note GX_PERF1_VC_* count different vertex cache stall conditions. + * @{ + */ +#define GX_PERF1_TEXELS 0 /*!< Number of texels processed by the GP. */ +#define GX_PERF1_TX_IDLE 1 /*!< Number of clocks that the texture unit (TX) is idle. */ +#define GX_PERF1_TX_REGS 2 /*!< Number of GP clocks spent writing to state registers in the TX unit. */ +#define GX_PERF1_TX_MEMSTALL 3 /*!< Number of GP clocks the TX unit is stalled waiting for main memory. */ +#define GX_PERF1_TC_CHECK1_2 4 +#define GX_PERF1_TC_CHECK3_4 5 +#define GX_PERF1_TC_CHECK5_6 6 +#define GX_PERF1_TC_CHECK7_8 7 +#define GX_PERF1_TC_MISS 8 /*!< Number of texture cache misses in total? */ +#define GX_PERF1_VC_ELEMQ_FULL 9 +#define GX_PERF1_VC_MISSQ_FULL 10 +#define GX_PERF1_VC_MEMREQ_FULL 11 +#define GX_PERF1_VC_STATUS7 12 +#define GX_PERF1_VC_MISSREP_FULL 13 +#define GX_PERF1_VC_STREAMBUF_LOW 14 +#define GX_PERF1_VC_ALL_STALLS 15 +#define GX_PERF1_VERTICES 16 /*!< Number of vertices processed by the GP. */ +#define GX_PERF1_FIFO_REQ 17 /*!< Number of lines (32B) read from the GP FIFO. */ +#define GX_PERF1_CALL_REQ 18 /*!< Number of lines (32B) read from called display lists. */ +#define GX_PERF1_VC_MISS_REQ 19 /*!< Number vertex cache miss request. Each miss requests a 32B transfer from main memory. */ +#define GX_PERF1_CP_ALL_REQ 20 /*!< Counts all requests (32B/request) from the GP Command Processor (CP). It should be equal to + * the sum of counts returned by GX_PERF1_FIFO_REQ, GX_PERF1_CALL_REQ, and GX_PERF1_VC_MISS_REQ. */ +#define GX_PERF1_CLOCKS 21 /*!< Number of GP clocks that have elapsed since the last call to GX_ReadGP1Metric(). */ +#define GX_PERF1_NONE 22 /*!< Disables performance measurement for perf1 and resets the counter. */ +/*! @} */ + +/*! \addtogroup tlutname TLUT name + * \brief Name of Texture Look-Up Table (TLUT) in texture memory. + * + * \details Each table GX_TLUT0-GX_TLUT15 contains 256 entries,16b per entry. GX_BIGTLUT0-3 + * contains 1024 entries, 16b per entry. Used for configuring texture memory in GX_Init(). + * @{ + */ +#define GX_TLUT0 0 +#define GX_TLUT1 1 +#define GX_TLUT2 2 +#define GX_TLUT3 3 +#define GX_TLUT4 4 +#define GX_TLUT5 5 +#define GX_TLUT6 6 +#define GX_TLUT7 7 +#define GX_TLUT8 8 +#define GX_TLUT9 9 +#define GX_TLUT10 10 +#define GX_TLUT11 11 +#define GX_TLUT12 12 +#define GX_TLUT13 13 +#define GX_TLUT14 14 +#define GX_TLUT15 15 +#define GX_BIGTLUT0 16 +#define GX_BIGTLUT1 17 +#define GX_BIGTLUT2 18 +#define GX_BIGTLUT3 19 +/*! @} */ + +#define GX_MAX_VTXDESC GX_VA_MAXATTR +#define GX_MAX_VTXDESC_LISTSIZE (GX_VA_MAXATTR+1) + +#define GX_MAX_VTXATTRFMT GX_VA_MAXATTR +#define GX_MAX_VTXATTRFMT_LISTSIZE (GX_VA_MAXATTR+1) + +#define GX_MAX_Z24 0x00ffffff + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +typedef union _wgpipe +{ + vu8 U8; + vs8 S8; + vu16 U16; + vs16 S16; + vu32 U32; + vs32 S32; + vf32 F32; +} WGPipe; + +/*! \typedef struct _gx_color GXColor + * \brief Structure used to pass colors to some GX functions. + */ +typedef struct _gx_color { + u8 r; /*!< Red color component. */ + u8 g; /*!< Green color component. */ + u8 b; /*!< Blue alpha component. */ + u8 a; /*!< Alpha component. If a function does not use the alpha value, it is safely ignored. */ +} GXColor; + +/*! \typedef struct _gx_colors10 GXColorS10 + * \brief Structure used to pass signed 10-bit colors to some GX functions. + */ +typedef struct _gx_colors10 { + s16 r; /*!< Red color component. */ + s16 g; /*!< Green color component. */ + s16 b; /*!< Blue color component. */ + s16 a; /*!< Alpha component. If a function does not use the alpha value, it is safely ignored. */ +} GXColorS10; + +/*! \typedef struct _gx_texobj GXTexObj + * \brief Object containing information about a texture. + * + * \details This structure contains precompiled register state setting commands and data. The application must use the GX_InitTexObj*() + * function to initialize or change this object. The proper size of the object is returned by + * + * \code sizeof(GXTexObj) \endcode + * + * \details but the internal data representation is not visible to the application. + */ +typedef struct _gx_texobj { + u32 val[8]; +} GXTexObj; + +/*! \typedef struct _gx_tlutobj GXTlutObj + * \brief Object containing information on a TLUT. + * + * \details This structure contains precompiled register state setting commands and data. The application must use the GX_InitTlutObj() + * function to initialize or change this object. The proper size of the object is returned by + * + * \code sizeof(GXTlutObj) \endcode + * + * \details but the internal data representation is not visible to the application. + */ +typedef struct _gx_tlutobj { + u32 val[3]; +} GXTlutObj; + +/*! \typedef struct _gx_texreg GXTexRegion + * \brief Object containing information on a texture cache region. + * + * \details This structure contains precompiled register state setting commands and data. The application must use the + * GX_InitTexCacheRegion() function to initialize or change this object. The proper size of the object is returned by + * + * \code sizeof(GXTexRegion) \endcode + * + * \details but the internal data representation is not visible to the application. + */ +typedef struct _gx_texreg { + u32 val[4]; +} GXTexRegion; + +/*! \typedef struct _gx_tlutreg GXTlutRegion + * \brief Object containing information on a TLUT cache region. + * + * \details This structure contains precompiled register state setting commands and data. The application must use the GX_InitTlutRegion() + * function to initialize or change this object. The proper size of the object is returned by + * + * \code sizeof(GXTlutRegion) \endcode + * + * \details but the internal data representation is not visible to the application. + */ +typedef struct _gx_tlutreg { + u32 val[4]; +} GXTlutRegion; + +/*! \typedef _gx_litobj GXLightObj + * \brief Object containing information on a light. + * + * \details This structure contains precompiled register state setting commands and data. The application must use the GX_InitLight*() functions + * to initialize or change this object. The proper size of the object is returned by + * + * \code sizeof(GXLightObj) \endcode + * + * \details but the internal data representation is not visible to the application. + */ +typedef struct _gx_litobj { + u32 val[16]; +} GXLightObj; + +typedef struct _vtx { + f32 x,y,z; + u16 s,t; + u32 rgba; +} Vtx; + +/*! \struct GXVtxDesc + * \brief Structure describing how a single vertex attribute will be referenced. + * + * \details An array of these structures can be used to describe all the attributes in a vertex. The attribute GX_VA_NULL should be + * used to mark the end of the array. + */ +typedef struct { + u8 attr; /*!< \ref vtxattr for this element. */ + u8 type; /*!< \ref vtxattrin for this element. */ +} GXVtxDesc; + +/*! \struct GXVtxAttrFmt + * \brief Structure describing the attribute format for one attribute. + * + * \details An array of these structures can be used to describe the format of all attributes in a vertex. The attribute GX_VA_NULL + * should be used to mark the end of the array. + */ +typedef struct { + u32 vtxattr; /*!< \ref vtxattr for this element. */ + u32 comptype; /*!< \ref comptype for this element. */ + u32 compsize; /*!< \ref compsize for this element. */ + u32 frac; /*!< Number of fractional bits for a fixed-point number. */ +} GXVtxAttrFmt; + +/*! \struct GXFifoObj + * \brief Object describing a graphics FIFO. + * + * \details This structure contains precompiled register state setting commands and data. The application must use the GX_InitFifo*() functions + * to initialize or change this object. The proper size of the object is returned by + * + * \code sizeof(GXFifoObj) \endcode + * + * but the internal data representation is not visible to the application. + */ +typedef struct { + u8 pad[GX_FIFO_OBJSIZE]; +} GXFifoObj; + +typedef struct { + u8 dummy[4]; +} GXTexReg; + +/*! \struct GXFogAdjTbl + * \brief Fog range adjustment parameter table. + */ +typedef struct { + u16 r[10]; /*!< u4.8 format range parameter. */ +} GXFogAdjTbl; + +/*! \typedef void (*GXBreakPtCallback)(void) + * \brief function pointer typedef for the GP breakpoint-token callback + */ +typedef void (*GXBreakPtCallback)(void); + +/*! \typedef void (*GXDrawDoneCallback)(void) + * \brief function pointer typedef for the GP drawdone-token callback + */ +typedef void (*GXDrawDoneCallback)(void); + +/*! \typedef void (*GXDrawSyncCallback)(u16 token) + * \brief function pointer typedef for the drawsync-token callback + * \param[out] token tokenvalue most recently encountered. + */ +typedef void (*GXDrawSyncCallback)(u16 token); + +/*! \typedef GXTexRegion* (*GXTexRegionCallback)(GXTexObj *obj,u8 mapid) + * \brief function pointer typedef for the texture region callback + * \param[out] token tokenvalue most recently encountered. + */ +typedef GXTexRegion* (*GXTexRegionCallback)(GXTexObj *obj,u8 mapid); + +/*! \typedef GXTlutRegion* (*GXTlutRegionCallback)(u32 tlut_name) + * \brief function pointer typedef for the TLUT region callback + * \param[out] token tokenvalue most recently encountered. + */ +typedef GXTlutRegion* (*GXTlutRegionCallback)(u32 tlut_name); + +extern WGPipe* const wgPipe; +/*! + * \fn GXFifoObj* GX_Init(void *base,u32 size) + * \brief Initializes the graphics processor to its initial state. + * + * \details This function sets the default state of the graphics processor and should be called before any other GX functions. + * This function sets up an immediate-mode method of communicating graphics commands from the CPU to the Graphics Processor + * (GP). This function will initialize a FIFO and attach it to both the CPU and GP. The CPU will write commands to the FIFO + * and the GP will read the commands. This function returns a pointer to the initialized FIFO. The application must allocate + * the memory for the FIFO. The parameter \a base is a pointer to the allocated main memory and must be aligned to 32B. \a size + * is the size of the FIFO in bytes and must be a multiple of 32B. Refer to additional notes in GX_InitFifoBase() concerning + * the FIFO memory. + * + * \note It is also possible to override the default immediate-mode style and instead buffer the graphics for frame n+1 + * while the GP is reading the graphics for frame n. See GX_SetCPUFifo() and GX_SetGPFifo() for further information.

+ * + * \note This function also designates the calling thread as the default GX thread; i.e., it assumes the calling thread is the + * one responsible for generating graphics data. This thread will be the thread to be suspended when the FIFO gets too full. + * The current GX thread can be changed by calling GX_SetCurrentGXThread(). + * + * \param[in] base pointer to the GX FIFO buffer base address. Must be aligned on a 32 Byte boundery. + * \param[in] size size of buffer. Must be a multiple of 32. + * + * \return pointer to the intialized GXFifoObj object. + */ +GXFifoObj* GX_Init(void *base,u32 size); + +/*! + * \fn void GX_InitFifoBase(GXFifoObj *fifo,void *base,u32 size) + * \brief Describes the area of main memory that will be used for this \a fifo. + * + * The Graphics FIFO is the mechanism used to communicate graphics commands from the CPU to the Graphics Processor (GP). The FIFO + * base pointer should be 32-byte aligned. memalign() can return 32-byte aligned pointers. The size should also be a multiple of + * 32B. + * + * The CPU's write-gather pipe is used to write data to the FIFO. Therefore, the FIFO memory area must be forced out of the CPU + * cache prior to being used. DCInvalidateRange() may be used for this purpose. Due to the mechanics of flushing the write-gather + * pipe, the FIFO memory area should be at least 32 bytes larger than the maximum expected amount of data stored. Up to 32 NOPs + * may be written at the end during flushing. + * + * \note GX_Init() also takes the arguments \a base and \a size and initializes a FIFO using these values and attaches the FIFO + * to both the CPU and GP. The application must allocate the memory for the graphics FIFO before calling GX_Init(). Therefore, it + * is not necessary to call this function unless you want to resize the default FIFO sometime after GX_Init() has been called or + * you are creating a new FIFO. The minimum size is 64kB defined by GX_FIFO_MINSIZE.

+ * + * \note This function will also set the read and write pointers for the FIFO to the base address, so ordinarily it is not + * necessary to call GX_InitFifoPtrs() when initializing the FIFO. In addition, This function sets the FIFO's high water mark to + * (size-16kB) and the low water mark to (size/2), so it is also not necessary to call GX_InitFifoLimits(). + * + * \param[in] fifo the fifo struct to use + * \param[in] base ptr to the base of allocation; must be 32-byte aligned + * \param[in] size size of the FIFO in bytes; must be multiple of 32; size must be GX_FIFO_MINSIZE or larger + * + * \return none + */ +void GX_InitFifoBase(GXFifoObj *fifo,void *base,u32 size); + +/*! + * \fn void GX_InitFifoLimits(GXFifoObj *fifo,u32 hiwatermark,u32 lowatermark) + * \brief Sets the high and low water mark for the \a fifo. + * + * \details The high and low water marks are used in immediate-mode, i.e. when the \a fifo is attached to both the CPU and + * Graphics Processor (GP) (see GX_SetCPUFifo() and GX_SetGPFifo()). + * + * The hardware keeps track of the number of bytes between the read and write pointers. This number represents how full the FIFO is, + * and when it is greater than or equal to the \a hiwatermark, the hardware issues an interrupt. The GX API will suspend sending + * graphics to the Graphics FIFO until it has emptied to a certain point. The \a lowatermark is used to set the point at which the + * FIFO is empty enough to resume sending graphics commands to the FIFO. Both \a hiwatermark and \a lowatermark should be in + * multiples of 32B. The count for \a lowatermark should be less than \a hiwatermark. Of course, \a hiwatermark and \a lowatermark + * must be less than the size of the FIFO. + * + * \note When the FIFO is only attached to the CPU or only attached to the GP, the high and low water mark interrupts are disabled. + * + * \param[in] fifo the fifo struct to use + * \param[in] hiwatermark number of bytes to be queued before libogc stops writing commands to the FIFO + * \param[in] lowatermark number of bytes to be queued before libogc resumes writing commands to the FIFO + * + * \return none + */ +void GX_InitFifoLimits(GXFifoObj *fifo,u32 hiwatermark,u32 lowatermark); + +/*! + * \fn void GX_InitFifoPtrs(GXFifoObj *fifo,void *rd_ptr,void *wt_ptr) + * \brief Sets the \a fifo read and write pointers. + * + * \note This is normally done only during initialization of the FIFO. After that, the graphics hardware manages the FIFO pointers. + * + * \param[in] fifo the fifo struct to use + * \param[in] rd_ptr the pointer to use for the FIFO read pointer; must be 32-byte aligned + * \param[in] wt_ptr the pointer to use for the FIFO write pointer; must be 32-byte aligned + * + * \return none + */ +void GX_InitFifoPtrs(GXFifoObj *fifo,void *rd_ptr,void *wt_ptr); + +/*! + * \fn void GX_GetFifoPtrs(GXFifoObj *fifo,void **rd_ptr,void **wt_ptr) + * \brief Returns the current value of the Graphics FIFO read and write pointers. + * + * \note See GX_EnableBreakPt() for an example of why you would do this. + * + * \param[in] fifo pointer to a FIFO struct + * \param[out] rd_ptr address of the FIFO read pointer + * \param[out] wt_ptr address of the FIFO write pointer + * + * \return none + */ +void GX_GetFifoPtrs(GXFifoObj *fifo,void **rd_ptr,void **wt_ptr); + +/*! + * \fn void GX_SetCPUFifo(GXFifoObj *fifo) + * \brief Attaches a FIFO to the CPU. + * + * \note If the FIFO being attached is one already attached to the GP, the FIFO can be considered to be in immediate mode. If not, + * the CPU can write commands, and the GP will execute them when the GP attaches to this FIFO (multi-buffered mode). + * + * \param[in] fifo fifo struct containing info on the FIFO to attach + * + * \return none + */ +void GX_SetCPUFifo(GXFifoObj *fifo); + +/*! + * \fn void GX_SetGPFifo(GXFifoObj *fifo) + * \brief Attaches \a fifo to the GP. + * + * \note If the FIFO is also attached to the CPU, the system is in immediate-mode, and the fifo acts like a true FIFO. In immediate-mode, + * graphics commands are fed directly from the CPU to the GP. In immediate-mode the FIFO's high and low water marks are active. The high + * and low water marks implement the flow-control mechanism between the CPU and GP. When the FIFO becomes more full than the high water + * mark, the CPU will stop writing graphics commands into the FIFO. When the FIFO empties to a point lower than the low water mark, the + * CPU will resume writing graphics commands into the FIFO. The high and low water marks are set when intializing the FIFO using + * GX_InitFifoLimits().

+ * + * \note If the FIFO is only attached to the GP, the FIFO acts like a buffer. In this case, high and low water marks are disabled, and + * the GP reads the FIFO until it is empty. Before attaching a new FIFO to the GP, you should make sure the previous FIFO is empty, using + * the \a cmdIdle status returned by GX_GetGPStatus().

+ * + * \note The break point mechanism can be used to force the FIFO to stop reading commands at a certain point; see GX_EnableBreakPt(). + * + * \param[in] fifo struct containing info on the FIFO to attach + * + * \return none + */ +void GX_SetGPFifo(GXFifoObj *fifo); + +/*! + * \fn void GX_GetCPUFifo(GXFifoObj *fifo) + * \brief Copies the information from the currently attached CPU FIFO into \a fifo. + * + * \param[out] fifo the object to copy the current CPU FIFO object data into + * + * \return none + */ +void GX_GetCPUFifo(GXFifoObj *fifo); + +/*! + * \fn void GX_GetGPFifo(GXFifoObj *fifo) + * \brief Copies the information from the currently attached GP FIFO info \a fifo. + * + * \param[out] fifo the object to copy the current GP FIFO object data into + * + * \return none + */ +void GX_GetGPFifo(GXFifoObj *fifo); + +/*! + * \fn void* GX_GetFifoBase(GXFifoObj *fifo) + * \brief Get the base address for a given \a fifo. + * + * \param[in] fifo the object to get the address from + * + * \return pointer to the base address of the FIFO in main memory. + */ +void* GX_GetFifoBase(GXFifoObj *fifo); + +/*! + * \fn u32 GX_GetFifoCount(GXFifoObj *fifo) + * \brief Returns number of cache lines in the FIFO. + * + * \note The count is incorrect if an overflow has occurred (i.e. you have written more data than the size of the fifo), as the + * hardware cannot detect an overflow in general. + * + * \param[in] fifo the FIFO to get the count from + * + * \return number of cache lines in the FIFO + */ +u32 GX_GetFifoCount(GXFifoObj *fifo); + +/*! + * \fn u32 GX_GetFifoSize(GXFifoObj *fifo) + * \brief Get the size of a given \a fifo. + * + * \param[in] fifo the object to get the size from + * + * \return size of the FIFO, in bytes + */ +u32 GX_GetFifoSize(GXFifoObj *fifo); + +/*! + * \fn u8 GX_GetFifoWrap(GXFifoObj *fifo) + * \brief Returns a non-zero value if the write pointer has passed the TOP of the FIFO. + * + * \details Returns true only if the FIFO is attached to the CPU and the FIFO write pointer has passed the top of the FIFO. Use the + * return value to detect whether or not an overflow has occured by initializing the FIFO's write pointer to the base of the FIFO + * before sending any commands to the FIFO. + * + * \note If the FIFO write pointer is not explicitly set to the base of the FIFO, you cannot rely on this function to detect overflows. + * + * \param[in] fifo the object to get the wrap status from + * + * \return wrap value + */ +u8 GX_GetFifoWrap(GXFifoObj *fifo); + +/*! + * \fn GXDrawDoneCallback GX_SetDrawDoneCallback(GXDrawDoneCallback cb) + * \brief Installs a callback that is invoked whenever a DrawDone command is encountered by the GP. + * + * \details The DrawDone command is sent by GX_SetDrawDone(). + * + * \note By the time the callback is invoked, the GP will already have resumed reading from the FIFO, if there are any commands in it. + * + * \param[in] cb callback to be invoked when DrawDone is encountered + * + * \return pointer to the previous callback + */ +GXDrawDoneCallback GX_SetDrawDoneCallback(GXDrawDoneCallback cb); + +/*! + * \fn GXBreakPtCallback GX_SetBreakPtCallback(GXBreakPtCallback cb) + * \brief Registers \a cb as a function to be invoked when a break point is encountered. + * + * \warning The callback will run with interrupts disabled, so it should terminate as quickly as possible. + * + * \param[in] cb function to be invoked when the breakpoint is encountered; NULL means no function will run + * + * \return pointer to the previous callback function + */ +GXBreakPtCallback GX_SetBreakPtCallback(GXBreakPtCallback cb); + +/*! + * \fn void GX_AbortFrame() + * \brief Aborts the current frame. + * + * \details This command will reset the entire graphics pipeline, including any commands in the graphics FIFO. + * + * \note Texture memory will not be reset, so currently loaded textures will still be valid; however, when loading texture using + * GX_PreloadEntireTexture() or TLUTs using GX_LoadTlut(), you must make sure the command completed. You can use the draw sync mechanism to + * do this; see GX_SetDrawSync() and GX_GetDrawSync(). + * + * \return none + */ +void GX_AbortFrame(); + +/*! + * \fn void GX_Flush() + * \brief Flushes all commands to the GP. + * + * \details Specifically, it flushes the write-gather FIFO in the CPU to make sure that all commands are sent to the GP. + * + * \return none + */ +void GX_Flush(); + +/*! + * \fn void GX_SetMisc(u32 token,u32 value) + * \brief Sets miscellanous settings in the GP. + * + * \param[in] token setting to change + * \param[in] value value to change the setting to + * + * \return none + */ +void GX_SetMisc(u32 token,u32 value); + +/*! + * \fn void GX_SetDrawDone() + * \brief Sends a DrawDone command to the GP. + * + * \details When all previous commands have been processed and the pipeline is empty, a DrawDone status bit will be set, + * and an interrupt will occur. You can receive notification of this event by installing a callback on the interrupt with + * GX_SetDrawDoneCallback(), or you can poll the status bit with GX_WaitDrawDone(). This function also flushes the write-gather + * FIFO in the CPU to make sure that all commands are sent to the graphics processor. + * + * \note This function is normally used in multibuffer mode (see GX_SetCPUFifo()). In immediate mode, the GX_DrawDone() command + * can be used, which both sends the command and stalls until the DrawDone status is true. + * + * \return none + */ +void GX_SetDrawDone(); + +/*! + * \fn void GX_WaitDrawDone() + * \brief Stalls until DrawDone is encountered by the GP. + * + * \details It means all graphics commands sent before this DrawDone command have executed and the last pixel has been written to + * the frame buffer. You may want to execute some non-graphics operations between executing GX_SetDrawDone() and this function, but + * if you simply want to wait and have nothing to execute, you can use GX_DrawDone(). + * + * \note This function is normally used in immediate mode (see GX_SetCPUFifo()). In multibuffer mode, sending the 'done' command is + * separated from polling the 'done' status (see GX_SetDrawDone() and GX_WaitDrawDone()). + * + * \return none + */ +void GX_WaitDrawDone(); + +/*! + * \fn u16 GX_GetDrawSync() + * \brief Returns the value of the token register, which is written using the GX_SetDrawSync() function. + * + * \return the value of the token register. + */ +u16 GX_GetDrawSync(); + +/*! + * \fn void GX_SetDrawSync(u16 token) + * \brief This function sends a token into the command stream. + * + * \details When the token register is set, an interrupt will also be received by the CPU. You can install a callback on this interrupt + * with GX_SetDrawSyncCallback(). Draw syncs can be used to notify the CPU that the graphics processor is finished using a shared + * resource (a vertex array for instance). + * + * \param[in] token 16-bit value to write to the token register. + * + * \return none + */ +void GX_SetDrawSync(u16 token); + +/*! + * \fn GXDrawSyncCallback GX_SetDrawSyncCallback(GXDrawSyncCallback cb) + * \brief Installs a callback that is invoked whenever a DrawSync token is encountered by the graphics pipeline. + * + * \details The callback's argument is the value of the token most recently encountered. Since it is possible to + * miss tokens (graphics processing does not stop while the callback is running), your code should be + * capable of deducing if any tokens have been missed. + * + * \param[in] cb callback to be invoked when the DrawSync tokens are encountered in the graphics pipeline. + * + * \return pointer to the previously set callback function. + */ +GXDrawSyncCallback GX_SetDrawSyncCallback(GXDrawSyncCallback cb); + +/*! + * \fn void GX_DisableBreakPt() + * \brief Allows reads from the FIFO currently attached to the Graphics Processor (GP) to resume. + * + * \details See GX_EnableBreakPt() for an explanation of the FIFO break point feature. + * + * \note The breakpoint applies to the FIFO currently attached to the Graphics Processor (GP) (see GX_SetGPFifo()). + * + * \return none + */ +void GX_DisableBreakPt(); + +/*! + * \fn void GX_EnableBreakPt(void *break_pt) + * \brief Sets a breakpoint that causes the GP to halt when encountered. + * + * \note The break point feature allows the application to have two frames of graphics in the FIFO at the same time, overlapping + * one frame's processing by the graphics processor with another frame's processing by the CPU. For example, suppose you finish + * writing the graphics commands for one frame and are ready to start on the next. First, execute a GX_Flush() command to make + * sure all the data in the CPU write gatherer is flushed into the FIFO. This will also align the FIFO write pointer to a 32B + * boundary. Next, read the value of the current write pointer using GX_GetFifoPtrs(). Write the value of the write pointer as + * the break point address using GX_EnableBreakPt(). When the FIFO read pointer reaches the break point address the hardware + * will disable reads from the FIFO. The status \a brkpt, returned by GX_GetGPStatus(), can be polled to detect when the break point + * is reached. The application can then decide when to disable the break point, using GX_DisableBreakPt(), which will allow the FIFO + * to resume reading graphics commands.

+ * + * \note FIFO reads will stall when the GP FIFO read pointer is equal to the break point address \a break_pt. To re-enable reads of + * the GP FIFO, use GX_DisableBreakPt().

+ * + * \note Use GX_SetBreakPtCallback() to set what function runs when the breakpoint is encountered. + * + * \param[in] break_pt address for GP to break on when read. + * + * \return none + */ +void GX_EnableBreakPt(void *break_pt); + +/*! + * \fn void GX_DrawDone() + * \brief Sends a DrawDone command to the GP and stalls until its subsequent execution. + * + * \note This function is equivalent to calling GX_SetDrawDone() then GX_WaitDrawDone(). + * + * \return none + */ +void GX_DrawDone(); + +/*! + * \fn void GX_TexModeSync() + * \brief Inserts a synchronization command into the graphics FIFO. When the Graphics Processor sees this command, it will + * allow the texture pipeline to flush before continuing. + * + * \details This command is necessary when changing the usage of regions of texture memory from preloaded or TLUT to cached areas. + * It makes sure that the texture pipeline is finished with that area of the texture memory prior to changing its usage. + * This function should be called prior to drawing any primitives that uses the texture memory region in its new mode. It is not + * necessary to call this command when changing texture memory regions from cached to preloaded (or TLUT), since the commands to + * load the regions with data will cause the necessary synchronization to happen automatically. + * + * \return none + */ +void GX_TexModeSync(); + +/*! + * \fn void GX_InvVtxCache(); + * \brief Invalidates the vertex cache. + * + * \details Specifically, this functions invalidates the vertex cache tags. This function should be used whenever you relocate or modify + * data that is read by, or may be cached by, the vertex cache. The invalidate is very fast, taking only two Graphics Processor (GP) clock + * cycles to complete. + * + * \note The vertex cache is used to cache indexed attribute data. Any attribute that is set to GX_INDEX8 or GX_INDEX16 in the current + * vertex descriptor (see GX_SetVtxDesc()) is indexed. Direct data bypasses the vertex cache. Direct data is any attribute that is set to + * GX_DIRECT in the current vertex descriptor. + * + * \return none + */ +void GX_InvVtxCache(); + +/*! + * \fn void GX_ClearVtxDesc() + * \brief Clears all vertex attributes of the current vertex descriptor to GX_NONE. + * + * \note The same functionality can be obtained using GX_SetVtxDescv(), however using GX_ClearVtxDesc() is much more efficient. + * + * \return none + */ +void GX_ClearVtxDesc(); + +/*! + * \fn void GX_LoadProjectionMtx(Mtx44 mt,u8 type) + * \brief Sets the projection matrix. + * + * \note Only two types of projection matrices are supported: GX_PERSPECTIVE or GX_ORTHOGRAPHIC. + * + * \param[in] mt matrix to use for the perspective + * \param[in] type which perspective type to use + * + * \return none + */ +void GX_LoadProjectionMtx(Mtx44 mt,u8 type); + +/*! + * \fn void GX_SetViewport(f32 xOrig,f32 yOrig,f32 wd,f32 ht,f32 nearZ,f32 farZ) + * \brief Sets the viewport rectangle in screen coordinates. + * + * \details The screen origin (\a xOrig = 0.0f, \a yOrig = 0.0f) is at the top left corner of the display. Floating point arguments allow the + * viewport to be adjusted by 1/2 line for interlaced field rendering modes; see GX_SetViewportJitter(). The viewport depth parameters are normalized coordinates + * from 0.0f - 1.0f. The GX API will convert the depth range values to proper scale values depending on the type and format of the Z-buffer. + * + * \note You should avoid using negative values for \a xOrig or \a yOrig. While this may work, it may cause problems with points and lines being clipped incorrectly. If + * you need to shift the viewport up or left, consider using GX_SetScissorBoxOffset() instead. + * + * \param[in] xOrig left-most X coordinate on the screen + * \param[in] yOrig top-most Y coordinate on the screen + * \param[in] wd width of the viewport + * \param[in] ht height of the viewport + * \param[in] nearZ value to use for near depth scale + * \param[in] farZ value to use for far depth scale + * + * \return none + */ +void GX_SetViewport(f32 xOrig,f32 yOrig,f32 wd,f32 ht,f32 nearZ,f32 farZ); + +/*! + * \fn void GX_SetViewportJitter(f32 xOrig,f32 yOrig,f32 wd,f32 ht,f32 nearZ,f32 farZ,u32 field) + * \brief Sets the viewport and adjusts the viewport's line offset for interlaced field rendering. + * + * \details Depending on whether the viewport starts on an even or odd line, and whether the next \a field to be rendered is + * even or odd, the viewport may be adjusted by half a line. This has the same effect as slightly tilting the camera down and is necessary + * for interlaced rendering. No other camera adjustment (i.e. don't change the projection matrix) is needed for interlaced field rendering. + * + * \note To set a viewport without jitter, use GX_SetViewport(). + * + * \param[in] xOrig left-most X coordinate on the screen + * \param[in] yOrig top-most Y coordinate on the screen + * \param[in] wd width of the viewport + * \param[in] ht height of the viewport + * \param[in] nearZ value to use for near depth scale + * \param[in] farZ value to use for far depth scale + * \param[in] field whether the next field is even (0) or odd (1) + * + * \return none + */ +void GX_SetViewportJitter(f32 xOrig,f32 yOrig,f32 wd,f32 ht,f32 nearZ,f32 farZ,u32 field); + +/*! + * \fn void GX_SetChanCtrl(s32 channel,u8 enable,u8 ambsrc,u8 matsrc,u8 litmask,u8 diff_fn,u8 attn_fn) + * \brief Sets the lighting controls for a particular color channel. + * + * \details The color channel can have one or more (up to 8) lights associated with it, set using \a litmask. The \a diff_fn and \a attn_fn parameters + * control the lighting equation for all lights associated with this channel; the \a ambsrc and \a matsrc can be used to select whether the input + * source colors come from register colors or vertex colors. When the channel \a enable is set to GX_FALSE, the material color source (set by \a matsrc) + * is passed through as the channel's output color. When the channel \a enable is GX_TRUE, the output color depends on the settings of the other + * controls (i.e., the lighting equation). GX_Init() sets the \a enable for all channels to GX_FALSE. This function only configures the lighting + * channel; to output the result of the channel computation, use GX_SetNumChans(). + * + * \note Even though channels GX_COLOR0 and GX_ALPHA0 are controlled separately for lighting, they are rasterized together as one RGBA color, effectively + * GX_COLOR0A0. The same is true for GX_COLOR1 and GX_ALPHA1-- effectively, they are rasterized as GX_COLOR1A1. Since there is only one rasterizer for + * color in the graphics hardware, you must choose which color to rasterize for each stage in the Texture Environment (TEV) unit. This is accomplished + * using GX_SetTevOrder().

+ * + * \note In order to use a vertex color in channel GX_COLOR1A1, two colors per vertex must be supplied, i.e. both GX_VA_CLR0 and GX_VA_CLR1 must be + * enabled in the current vertex descriptor. If only GX_VA_CLR0 or GX_VA_CLR1 is enabled in the current vertex descriptor, the vertex color is + * directed to the channel GX_VA_COLOR0A0.

+ * + * \note When \a ambsrc is set to GX_SRC_REG, the color set by GX_SetChanAmbColor() is used as the ambient color. When \a matsrc is GX_SRC_REG, the color set + * by GX_SetChanMatColor() is used as the material color. + * + * \param[in] channel color channel to use + * \param[in] enable whether or not to enable lighting for this channel + * \param[in] ambsrc source for the ambient color + * \param[in] matsrc source for the material color + * \param[in] litmask \ref lightid or IDs to associate with this channel + * \param[in] diff_fn \ref difffn to use + * \param[in] attn_fn \ref attenfunc to use + * + * \return none + */ +void GX_SetChanCtrl(s32 channel,u8 enable,u8 ambsrc,u8 matsrc,u8 litmask,u8 diff_fn,u8 attn_fn); + +/*! + * \fn void GX_SetChanAmbColor(s32 channel,GXColor color) + * \brief Sets the ambient color register for color channel \a chan. + * + * \details This color will be used by the channel as the ambient color if the ambient source, set by GX_SetChanCtrl(), is GX_SRC_REG. + * + * \param[in] channel channel to set + * \param[in] color color to set it to + * + * \return none + */ +void GX_SetChanAmbColor(s32 channel,GXColor color); + +/*! + * \fn void GX_SetChanMatColor(s32 channel,GXColor color) + * \brief Sets the material color register for color channel \a chan. + * + * \details This color will be used by the channel as the material color if the material source, set by GX_SetChanCtrl(), is GX_SRC_REG. + * + * \param[in] channel channel to set + * \param[in] color color to set it to + * + * \return none + */ +void GX_SetChanMatColor(s32 channel,GXColor color); + +/*! + * \fn void GX_SetArray(u32 attr,void *ptr,u8 stride) + * \brief Sets the array base pointer and stride for a single attribute. + * + * \details The array base and stride are used to compute the address of indexed attribute data using the equation:

+ * + *       attr_addr = \a ptr + attr_idx * \a stride + * + * When drawing a graphics primitive that has been enabled to use indexed attributes (see GX_SetVtxDesc()), attr_idx is supplied in the vertex + * data. The format and size of the data in the array must also be described using GX_SetVtxAttrFmt(). You can also index other data, such as + * matrices (see GX_LoadPosMtxIdx(), GX_LoadNrmMtxIdx3x3(), and GX_LoadTexMtxIdx()), and light objects (see GX_LoadLightObjIdx()). In the case + * of matrices and light objects, the size and format of the data to be loaded is implied by the function call. + * + * There is a base pointer, \a ptr, for each type of attribute as well as for light data and matrices. Each attribute can be stored in its own + * array for maximum data compression (i.e., removal of redundant attribute data). The \a stride is in byte units and is the distance between + * attributes in the array. + * + * \note Indexed data is loaded into a vertex cache in the graphics processor. The vertex cache fetches 32B of data for each cache miss; + * therefore, there is a small performance benefit to aligning attribute arrays to 32B, and possibly for arranging vertex data so that it + * doesn't span 32B boundaries. Conveniently enough, memalign() returns 32-byte aligned pointers. For static data arrays, you can use the + * ATTRIBUTE_ALIGN(32) attribute macro to align the \a ptr to 32B. + * + * \param[in] attr \ref vtxattr that the array is storing + * \param[in] ptr pointer to the array itself + * \param[in] stride stride (in bytes) between each element in the array + * + * \return none + */ +void GX_SetArray(u32 attr,void *ptr,u8 stride); + +/*! + * \fn void GX_SetVtxAttrFmt(u8 vtxfmt,u32 vtxattr,u32 comptype,u32 compsize,u32 frac) + * \brief Sets the attribute format (\a vtxattr) for a single attribute in the Vertex Attribute Table (VAT). + * + * \details Each attribute format describes the data type (comptype), number of elements (compsize), and fixed point format (frac), if required. The + * are eight vertex formats available in the VAT. The vertex format describes the format of all attributes in a vertex. The application can pre-program + * all eight vertex formats and then select one of them during the actual drawing of geometry (See GX_Begin()). Note that all vertices used to draw a + * particular graphics primitive will have the same format. The vertex format set using this function, along with the current vertex descriptor set + * using GX_SetVtxDesc(), completely define the vertex data format. + * + * \note The vertex format allows data to be sent to the graphics processor in its most quantized format. The graphics hardware will inverse-quantize + * the data (into floating point format) before it is used. The vertex attribute format is used to communicate the data quantization format to the hardware.

+ * + * \note GX_VA_NRM and GX_VA_NBT attributes share the same type. Also, the frac for these attributes is fixed according to the type. The component count + * (compsize) for GX_VA_NRM must be set to GX_NRM_XYZ. The component count for GX_VA_NBT must be set to GX_NRM_NBT or GX_NRM_NBT3. + * + * \param[in] vtxfmt \ref vtxfmt + * \param[in] vtxattr \ref vtxattr + * \param[in] comptype \ref comptype + * \param[in] compsize \ref compsize + * \param[in] frac number of fractional bits in a fixed-point number + * + * \return none + */ +void GX_SetVtxAttrFmt(u8 vtxfmt,u32 vtxattr,u32 comptype,u32 compsize,u32 frac); + +/*! + * \fn void GX_SetVtxAttrFmtv(u8 vtxfmt,GXVtxAttrFmt *attr_list) + * \brief Sets multiple attribute formats within a single vertex format. + * + * \details This is useful when you need to set all the attributes in a vertex format at once (e.g., during graphics initialization). + * + * \note The constant GX_MAX_VTXATTRFMT_LISTSIZE should be used to allocate the list. You can get a current vertex format using GX_GetVtxAttrFmtv(). + * + * \param[in] vtxfmt \ref vtxfmt + * \param[in] attr_list pointer to array of GXVtxAttrFmt structs to draw from + * + * \return none + */ +void GX_SetVtxAttrFmtv(u8 vtxfmt,GXVtxAttrFmt *attr_list); + +/*! + * \fn void GX_SetVtxDesc(u8 attr,u8 type) + * \brief Sets the \a type of a single attribute (\a attr) in the current vertex descriptor. + * + * \details The current vertex descriptor defines which attributes are present in a vertex and how each attribute is referenced. The current + * vertex descriptor is used by the Graphics Processor (GP) to interpret the graphics command stream produced by the GX API. In particular, + * the current vertex descriptor is used to parse the vertex data that is present in the command stream. + * + * \param[in] attr \ref vtxattr + * \param[in] type \ref vtxattrin + * + * \return none + */ +void GX_SetVtxDesc(u8 attr,u8 type); + +/*! + * \fn void GX_SetVtxDescv(GXVtxDesc *attr_list) + * \brief Sets the type of multiple attributes. + * + * \details This function is used when more than one attribute needs to be set (e.g., during initialization of geometry). + * + * \note The constant GX_MAX_VTXATTRFMT_LISTSIZE can be used to allocate memory for \a attr_list + * + * \param[in] attr_list array of pointers to GXVtxDesc structs; last element of the array should be GX_VA_NULL + * + * \return none + */ +void GX_SetVtxDescv(GXVtxDesc *attr_list); + +/*! + * \fn void GX_GetVtxDescv(GXVtxDesc *attr_list) + * \brief Gets the type of multiple attributes. + * + * \details This function saves the attributes that are current set. This is usually used in conjunction with GX_SetVtxDescv + * + * \note The constant GX_MAX_VTXATTRFMT_LISTSIZE must be used to allocate memory for \a attr_list + * + * \param[in] attr_list array of pointers to GXVtxDesc structs + * + * \return none + */ +void GX_GetVtxDescv(GXVtxDesc *attr_list); + +/*! + * \fn u32 GX_EndDispList() + * \brief Ends a display list and resumes writing graphics commands to the CPU FIFO. + * + * \details This function returns the size of the display list written to the display list buffer since GX_BeginDispList() was called. If + * the display list size exceeds the size of the buffer allocated, a zero length size will be returned. The display list size is a + * multiple of 32B and any unsed commands in the last 32B will be padded with GX_NOP. The size returned should be passed to + * GX_CallDispList() when the display list needs to be executed. + * + * \note Due to the mechanics of flushing the write-gather pipe (which is used to create the display list), the display buffer should be + * at least 32 bytes larger than the maximum expected amount of data stored. This function calls GX_Flush(), and thus it is not necessary + * to call GX_Flush() explicitly after creating the display list.

+ * + * \note A display list cannot be nested; i.e., no display list functions (GX_BeginDispList(), GX_EndDispList() and GX_CallDispList()) can + * be called between a GX_BeginDispList() and GX_EndDispList() pair.

+ * + * \note To execute a display list, use GX_CallDispList(). + * + * \return 0 if display list size exceeds buffer, otherwise gives list size in bytes + * + * \bug Specifying a display list buffer size for GX_BeginDispList() the exact size that the display list will be (after padding) will cause + * this function to return a very large (and very incorrect) value. + */ +u32 GX_EndDispList(); + +/*! + * \fn void GX_Begin(u8 primitve,u8 vtxfmt,u16 vtxcnt) + * \brief Begins drawing of a graphics primitive. + * + * \details To draw a graphics primitive, a stream of vertex data matching the description of both GX_SetVtxDesc() and GX_SetVtxAttrFmt() is + * enclosed between GX_Begin()/GX_End() pairs. The number of vertices between GX_Begin() and GX_End() must match that specified by the \a vtxcnt + * parameter. The type of the primitive will determine the minimum number of vertices required. For example, a GX_TRIANGLES primitive must + * have at least 3 vertices. + * + * \note Primitives in which the vertex order is clockwise to the viewer are considered front-facing (for culling purposes). + * + * \param[in] primitve \ref primtype to draw + * \param[in] vtxfmt \ref vtxfmt to use + * \param[in] vtxcnt number of vertices being drawn; maximum is 65536 + */ +void GX_Begin(u8 primitve,u8 vtxfmt,u16 vtxcnt); + +/*! + * \fn void GX_BeginDispList(void *list,u32 size) + * \brief Begins a display list and disables writes to the FIFO currently attached to the CPU. + * + * \details After this function is called, GX API functions that normally send command or data into the CPU FIFO will send them to the + * display list buffer instead of the FIFO until GX_EndDispList() is called. Writes to the CPU FIFO will be re-enabled when the function + * GX_EndDispList() executes. + * + * Basically you can put most of GX API commands into a display list. However, since the use of display list can bypass all state + * coherences controlled by GX API in run-time, sometimes it brings some state collisions or incoherences that may lead to unexpected + * behavior or even graphics pipeline hang. The most recommended safe way is putting only primitives (regions enclosed by GX_Begin() and + * GX_End()) that don't cause any state collisions. + * + * \note The application is expected to allocate the memory for the display list buffer. If the display list exceeds the maximum size + * of the buffer, GX_EndDispList() will return 0. The address of the buffer must be 32-byte aligned; memalign() can return 32-byte-aligned + * pointers. You can use the macro ATTRIBUTE_ALIGN(32) to align statically allocated buffers.

+ * + * \note The CPU's write-gather pipe is used to write graphics commands to the display list. Therefore, the display list buffer must be + * forced out of the CPU cache prior to being filled. DCInvalidateRange() may be used for this purpose. In addition, due to the mechanics + * of flushing the write-gather pipe, the display list buffer should be at least 63 bytes larger than the maximum expected amount of data + * stored.

+ * + * \note A display list cannot be nested; i.e., no display list functions (GX_BeginDispList(), GX_EndDispList() and GX_CallDispList()) can + * be called between a GX_BeginDispList() and GX_EndDispList() pair.

+ * + * \note To execute a display list, use GX_CallDispList(). + * + * \param[in] list 32-byte aligned buffer to hold the list + * \param[in] size size of the buffer, multiple of 32 + * + * \return none + */ +void GX_BeginDispList(void *list,u32 size); + +/*! + * \fn void GX_CallDispList(void *list,u32 nbytes) + * \brief Causes the GP to execute graphics commands from the display \a list instead of from the GP FIFO. + * + * \details When the number of bytes specified by \a nbytes have been read, the graphics processor will resume executing + * commands from the graphics FIFO. Graphics commands from a display list are prefetched into a separate 4KB FIFO. This prevents + * any data prefetched for the main graphics command stream from being lost during the display list call. + * + * \note A display list cannot call another display list.

+ * + * \note The display list must be padded to a length of 32B. All the data in the display list is interpreted by the graphics + * processor, so any unused memory at the end of a display list should be set to GX_NOP. If you create the display list using + * GX_BeginDispList()/GX_EndDispList(), this padding will be inserted automatically. + * + * \param[in] list 32-byte aligned pointer to the display list buffer + * \param[in] nbytes number of bytes in the display list. Use the return value of GX_EndDispList() here. + * + * \return none + */ +void GX_CallDispList(void *list,u32 nbytes); + +/*! + * \fn static inline void GX_End() + * \brief Used to end the drawing of a graphics primitive. This does nothing in libogc. + * + * \return none + */ +static inline void GX_End() +{ +} + +static inline void GX_Position3f32(f32 x,f32 y,f32 z) +{ + wgPipe->F32 = x; + wgPipe->F32 = y; + wgPipe->F32 = z; +} + +static inline void GX_Position3u16(u16 x,u16 y,u16 z) +{ + wgPipe->U16 = x; + wgPipe->U16 = y; + wgPipe->U16 = z; +} + +static inline void GX_Position3s16(s16 x,s16 y,s16 z) +{ + wgPipe->S16 = x; + wgPipe->S16 = y; + wgPipe->S16 = z; +} + +static inline void GX_Position3u8(u8 x,u8 y,u8 z) +{ + wgPipe->U8 = x; + wgPipe->U8 = y; + wgPipe->U8 = z; +} + +static inline void GX_Position3s8(s8 x,s8 y,s8 z) +{ + wgPipe->S8 = x; + wgPipe->S8 = y; + wgPipe->S8 = z; +} + +static inline void GX_Position2f32(f32 x,f32 y) +{ + wgPipe->F32 = x; + wgPipe->F32 = y; +} + +static inline void GX_Position2u16(u16 x,u16 y) +{ + wgPipe->U16 = x; + wgPipe->U16 = y; +} + +static inline void GX_Position2s16(s16 x,s16 y) +{ + wgPipe->S16 = x; + wgPipe->S16 = y; +} + +static inline void GX_Position2u8(u8 x,u8 y) +{ + wgPipe->U8 = x; + wgPipe->U8 = y; +} + +static inline void GX_Position2s8(s8 x,s8 y) +{ + wgPipe->S8 = x; + wgPipe->S8 = y; +} + +static inline void GX_Position1x8(u8 index) +{ + wgPipe->U8 = index; +} + +static inline void GX_Position1x16(u16 index) +{ + wgPipe->U16 = index; +} + +static inline void GX_Normal3f32(f32 nx,f32 ny,f32 nz) +{ + wgPipe->F32 = nx; + wgPipe->F32 = ny; + wgPipe->F32 = nz; +} + +static inline void GX_Normal3s16(s16 nx,s16 ny,s16 nz) +{ + wgPipe->S16 = nx; + wgPipe->S16 = ny; + wgPipe->S16 = nz; +} + +static inline void GX_Normal3s8(s8 nx,s8 ny,s8 nz) +{ + wgPipe->S8 = nx; + wgPipe->S8 = ny; + wgPipe->S8 = nz; +} + +static inline void GX_Normal1x8(u8 index) +{ + wgPipe->U8 = index; +} + +static inline void GX_Normal1x16(u16 index) +{ + wgPipe->U16 = index; +} + +static inline void GX_Color4u8(u8 r,u8 g,u8 b,u8 a) +{ + wgPipe->U8 = r; + wgPipe->U8 = g; + wgPipe->U8 = b; + wgPipe->U8 = a; +} + +static inline void GX_Color3u8(u8 r,u8 g,u8 b) +{ + wgPipe->U8 = r; + wgPipe->U8 = g; + wgPipe->U8 = b; +} + +static inline void GX_Color3f32(f32 r, f32 g, f32 b) +{ + wgPipe->U8 = (u8)(r * 255.0); + wgPipe->U8 = (u8)(g * 255.0); + wgPipe->U8 = (u8)(b * 255.0); +} + +static inline void GX_Color1u32(u32 clr) +{ + wgPipe->U32 = clr; +} + +static inline void GX_Color1u16(u16 clr) +{ + wgPipe->U16 = clr; +} + +static inline void GX_Color1x8(u8 index) +{ + wgPipe->U8 = index; +} + +static inline void GX_Color1x16(u16 index) +{ + wgPipe->U16 = index; +} + +static inline void GX_TexCoord2f32(f32 s,f32 t) +{ + wgPipe->F32 = s; + wgPipe->F32 = t; +} + +static inline void GX_TexCoord2u16(u16 s,u16 t) +{ + wgPipe->U16 = s; + wgPipe->U16 = t; +} + +static inline void GX_TexCoord2s16(s16 s,s16 t) +{ + wgPipe->S16 = s; + wgPipe->S16 = t; +} + +static inline void GX_TexCoord2u8(u8 s,u8 t) +{ + wgPipe->U8 = s; + wgPipe->U8 = t; +} + +static inline void GX_TexCoord2s8(s8 s,s8 t) +{ + wgPipe->S8 = s; + wgPipe->S8 = t; +} + +static inline void GX_TexCoord1f32(f32 s) +{ + wgPipe->F32 = s; +} + +static inline void GX_TexCoord1u16(u16 s) +{ + wgPipe->U16 = s; +} + +static inline void GX_TexCoord1s16(s16 s) +{ + wgPipe->S16 = s; +} + +static inline void GX_TexCoord1u8(u8 s) +{ + wgPipe->U8 = s; +} + +static inline void GX_TexCoord1s8(s8 s) +{ + wgPipe->S8 = s; +} + +static inline void GX_TexCoord1x8(u8 index) +{ + wgPipe->U8 = index; +} + +static inline void GX_TexCoord1x16(u16 index) +{ + wgPipe->U16 = index; +} + +static inline void GX_MatrixIndex1x8(u8 index) +{ + wgPipe->U8 = index; +} + +/*! + * \fn void GX_AdjustForOverscan(GXRModeObj *rmin,GXRModeObj *rmout,u16 hor,u16 ver) + * \brief Takes a given render mode and returns a version that is reduced in size to account for overscan. + * + * \details The number of pixels specified by \a hor is subtracted from each side of the screen, and the number of pixels specified + * by \a ver is subtracted from both the top and the bottom of the screen. The active screen area is centered within what the render + * mode specified before the adjustment. + * + * \note Due to the wide possibilities of how a render mode may be configured, this function may not work in all cases. For instance, + * if you use Y-scaling to create a size difference between the EFB and XFB, this function may not do the right thing. In such cases, + * you should configure the desired render mode manually (or else call this function and then fix up the results). + * + * \param[in] rmin rmode that is being copied + * \param[in] rmout rmode to hold the adjusted version. Needs to be allocated but can be uninitialized. + * \param[in] hor pixels to trim from each side of the screen + * \param[in] ver pixels to tim from top and bottom of the screen + * + * \returns none + */ +void GX_AdjustForOverscan(GXRModeObj *rmin,GXRModeObj *rmout,u16 hor,u16 ver); + +/*! + * \fn void GX_LoadPosMtxImm(Mtx mt,u32 pnidx) + * \brief Used to load a 3x4 modelview matrix \a mt into matrix memory at location \a pnidx. + * + * \details This matrix can be used to transform positions in model space to view space, either by making the matrix the current one (see + * GX_SetCurrentMtx()), or by setting a matrix \a pnidx for each vertex. The parameter \a mt is a pointer to a 3x4 (row x column) matrix. The + * parameter \a pnidx is used to refer to the matrix location (see \ref pnmtx) in matrix memory. + * + * You can also load a normal matrix (GX_LoadNrmMtxImm() or GX_LoadNrmMtxIdx3x3()) to the same \a pnidx. Generally, the normal matrix + * will be the inverse transpose of the position matrix. The normal matrix is used during vertex lighting. In cases where the modelview + * and inverse transpose of the modelview (excluding translation) are the same, you can load the same matrix for both position and normal + * transforms. + * + * \note The matrix data is copied from DRAM through the CPU cache into the Graphics FIFO, so matrices loaded using this function are always + * coherent with the CPU cache. + * + * \param[in] mt the matrix to load + * \param[in] pnidx \ref pnmtx to load into + * + * \return none + */ +void GX_LoadPosMtxImm(Mtx mt,u32 pnidx); + +/*! + * \fn void GX_LoadPosMtxIdx(u16 mtxidx,u32 pnidx) + * \brief Loads a 3x4 modelview matrix at index \a mtxidx from the array in main memory. + * + * \details The array is set by GX_SetArray(), and the matrix is loaded into matrix memory at index \a pnidx (see \ref pnmtx). This + * modelview matrix is used to transform positions in model space to view space, either by making the matrix the current one (see + * GX_SetCurrentMtx()) or by setting a matrix \a pnidx for each vertex (see GX_SetVtxDesc()). The matrix will be loaded through the vertex cache. + * + * You can also load a normal matrix (GX_LoadNrmMtxImm() or GX_LoadNrmMtxIdx3x3()) to the same \a pnidx. Generally, the normal matrix + * will be the inverse transpose of the position matrix. The normal matrix is used during vertex lighting. In cases where the modelview + * and inverse transpose of the modelview (excluding translation) are the same, you can load the same matrix for both position and normal + * transforms. Since indexed matrix loads are through the vertex cache, you will only incur the main memory bandwidth load of one matrix load. + * + * \note The matrix is loaded directly from main memory into the matrix memory thrugh the vertex cache, so it is incoherent with the CPU's cache. + * It is the application's responsibility to flush any matrix data from the CPU cache (see DCStoreRange()) before calling this function. + * + * \param[in] mtxidx index to the matrix array to load + * \param[in] pnidx \ref pnmtx to load into + * + * \return none + */ +void GX_LoadPosMtxIdx(u16 mtxidx,u32 pnidx); + +/*! + * \fn void GX_LoadNrmMtxImm(Mtx mt,u32 pnidx) + * \brief Used to load a normal transform matrix into matrix memory at location \a pnidx from the 4x3 matrix \a mt. + * + * \details This matrix is used to transform normals in model space to view space, either by making it the current matrix (see GX_SetCurrentMtx()), + * or by setting a matrix pnidx for each vertex. The parameter \a mt is a pointer to a 3x4 (row x column) matrix. The translation terms + * in the 3x4 matrix are not needed for normal rotation and are ignored during the load. The parameter \a pnidx is used to refer to the + * matrix location (see \ref pnmtx) in matrix memory. + * + * \note You can also load a position matrix (GX_LoadPosMtxImm()) to the same \a pnidx. Normally, the normal matrix will be the inverse transpose of + * the position (modelview) matrix and is used during vertex lighting. In cases where the modelview and the inverse transpose of the modelview + * matrix (excluding translation) are the same, the same matrix can be loaded for both normal and position matrices.

+ * + * \note The matrix data is copied from main memory or the CPU cache into the Graphics FIFO, so matrices loaded by this function are always coherent + * with the CPU cache.

+ * + * \param[in] mt the matrix to load + * \param[in] pnidx \ref pnmtx to load into + * + * \return none + */ +void GX_LoadNrmMtxImm(Mtx mt,u32 pnidx); + +/*! + * \fn void GX_LoadNrmMtxIdx3x3(u16 mtxidx,u32 pnidx) + * \brief Loads a 3x3 normal matrix into matrix memory at location \a pnidx from a 3x3 matrix located at index \a mtxidx + * from the array in main memory. + * + * \details The array is set by set by GX_SetArray(), and the matrix is loaded into matrix memory at index \a pnidx. This matrix can be used to + * transform normals in model space to view space, either by making the matrix the current one (see GX_SetCurrentMtx()), or by setting a + * matrix \a pnidx for each vertex (see GX_SetVtxDesc()). The matrix will be loaded through the vertex cache. You can also load a position + * matrix (GX_LoadPosMtxImm() or GX_LoadPosMtxIdx()) to the same \a pnidx. + * + * \note You cannot use an indexed load to load a 3x3 matrix from an indexed 3x4 matrix in main memory; you must use GX_LoadNrmMtxImm() for + * this case.

+ * + * \note The matrix is loaded directly from main memory into the matrix memory through the vertex cache, therefore it is incoherent with the + * CPU's cache. It is the application's responsibility to flush any matrix data from the CPU cache (see DCStoreRange()) before calling this + * function. + * + * \param[in] mtxidx index to the matrix array to load + * \param[in] pnidx \ref pnmtx to load into + * + * \return none + */ +void GX_LoadNrmMtxIdx3x3(u16 mtxidx,u32 pnidx); + +/*! + * \fn void GX_LoadTexMtxImm(Mtx mt,u32 texidx,u8 type) + * \brief Loads a texture matrix \a mt into the matrix memory at location \a texidx. + * + * \details The matrix loaded can be either a 2x4 or 3x4 matrix as indicated by \a type. You can use the loaded matrix to + * transform texture coordinates, or to generate texture coordinates from position or normal vectors. Such generated texture + * coordinates are used for projected textures, reflection mapping, etc. See GX_SetTexCoordGen() for more details. + * + * Texture matrices can be either 2x4 or 3x4. GX_MTX_2x4 matrices can be used for simple translations and/or rotations of texture + * coordinates. GX_MTX_3x4 matrices are used when projection is required. + * + * \note The default matrix memory configuration allows for ten (3x4 or 2x4) texture matrices, and a 3x4 identity matrix. The GX_IDENTITY + * matrix is preloaded by GX_Init().

+ * + * \note This function allows one to load post-transform texture matrices as well. Specifying a texidx in the range of \ref dttmtx will load a + * post-transform texture matrix instead of a regular, first-pass texture matrix. Note that post-transform matrices are always 3x4. Refer to + * GX_SetTexCoordGen2() for information about how to use post-transform texture matrices. + * + * \param[in] mt the matrix to load + * \param[in] texidx \ref texmtx + * \param[in] type \ref mtxtype + * + * \return none + */ +void GX_LoadTexMtxImm(Mtx mt,u32 texidx,u8 type); + +/*! + * \fn void GX_LoadTexMtxIdx(u16 mtxidx,u32 texidx,u8 type) + * \brief Loads a texture matrix at index \a mtxidx from the array in main memory + * + * \details The array is set by GX_SetArray(), and the matrix is loaded into matrix memory at location \a texid. The loaded matrix can be + * either 2x4 or 3x4 as indicated by \a type. This matrix can be used to generate texture coordinates from positions, normals, and input + * texture coordinates (see GX_SetTexCoordGen()). The matrix is loaded through the vertex cache. The size of the matrix to load is indicated by its + * \a type. Texture matrices can be either 2x4 or 3x4. GX_MTX_2x4 matrices can be used for simple translations and/or rotations of texture + * coordinates; GX_MTX_3x4 matrices are used when projection is required. + * + * \note The matrix is loaded directly from main memory into the matrix memory through the vertex cache, so it is incoherent with the CPU's + * cache. It is the application's responsibility to flush any matrix data from the CPU cache (see DCStoreRange()) before calling this function.

+ * + * \note This function allows one to load post-transform texture matrices as well. Specifying a \a texidx in the range of \ref dttmtx will load a + * post-transform texture matrix instead of a regular, first-pass texture matrix. Note that post-transform matrices are always 3x4. Refer to + * GX_SetTexCoordGen2() for information about how to use post-transform texture matrices. + * + * \param[in] mtxidx index to the matrix array to load + * \param[in] texidx \ref texmtx + * \param[in] type \ref mtxtype + * + * \return none + */ +void GX_LoadTexMtxIdx(u16 mtxidx,u32 texidx,u8 type); + +/*! + * \fn void GX_SetCurrentMtx(u32 mtx) + * \brief Selects a specific matrix to use for transformations. + * + * \details The matrix \a mtx specified will be used to select the current modelview transform matrix and normal transform matrix, + * as long as a matrix index is not present in the vertex data (see GX_SetVtxDesc()). If the current vertex descriptor enables GX_VA_PTNMTXIDX, + * the matrix \a mtx specified by this function will be overwritten when the vertices are drawn. + * + * \param[in] mtx \ref pnmtx + * + * \return none + */ +void GX_SetCurrentMtx(u32 mtx); + +/*! + * \fn void GX_SetTevOp(u8 tevstage,u8 mode) + * \brief Simplified function to set various TEV parameters for this \a tevstage based on a predefined combiner \a mode. + * + * \details This is a convenience function designed to make initial programming of the Texture Environment unit (TEV) easier. This function calls + * GX_SetTevColorIn(), GX_SetTevColorOp(), GX_SetTevAlphaIn() and GX_SetTevAlphaOp() with predefined arguments to implement familiar texture + * combining functions. + * + * \note To enable a consecutive set of TEV stages, you must call GX_SetNumTevStages(). + * + * \param[in] tevstage \ref tevstage. + * \param[in] mode \ref tevdefmode + * + * \return none + */ +void GX_SetTevOp(u8 tevstage,u8 mode); + +/*! + * \fn void GX_SetTevColor(u8 tev_regid,GXColor color) + * \brief Used to set one of the primary color registers in the TEV unit. + * + * \details These registers are available to all TEV stages. At least one of these registers is used to pass the output of one TEV stage to + * the next in a multi-texture configuration. The application is responsible for allocating these registers so that no collisions in usage occur. + * + * \note This function can only set unsigned 8-bit colors. To set signed, 10-bit colors use GX_SetTevColorS10(). + * + * \param[in] tev_regid \ref tevcoloutreg. + * \param[in] color Constant color value. + * + * \return none + */ +void GX_SetTevColor(u8 tev_regid,GXColor color); + +/*! + * \fn void GX_SetTevColorS10(u8 tev_regid,GXColorS10 color) + * \brief Used to set one of the constant color registers in the TEV unit. + * + * \details These registers are available to all TEV stages. At least one of these registers is used to pass the output of one TEV stage to the + * next in a multi-texture configuration. The application is responsible for allocating these registers so that no collisions in usage occur. + * + * \note This function enables the color components to be signed 10-bit numbers. To set 8-bit unsigned colors (the common case), use GX_SetTevColor(). + * + * \param[in] tev_regid \ref tevcoloutreg. + * \param[in] color Constant color value in S10 format. + * + * \return none + */ +void GX_SetTevColorS10(u8 tev_regid,GXColorS10 color); + +/*! + * \fn void GX_SetTevColorIn(u8 tevstage,u8 a,u8 b,u8 c,u8 d) + * \brief Sets the color input sources for one \a tevstage of the Texture Environment (TEV) color combiner. + * + * \details This includes constant (register) colors and alphas, texture color/alpha, rasterized color/alpha (the result of per-vertex lighting), + * and a few useful constants. + * + * \note The input controls are independent for each TEV stage. + * + * \param[in] tevstage \ref tevstage + * \param[in] a \ref tevcolorarg + * \param[in] b \ref tevcolorarg + * \param[in] c \ref tevcolorarg + * \param[in] d \ref tevcolorarg + * + * \return none + */ +void GX_SetTevColorIn(u8 tevstage,u8 a,u8 b,u8 c,u8 d); + +/*! + * \fn void GX_SetTevAlphaIn(u8 tevstage,u8 a,u8 b,u8 c,u8 d) + * \brief Sets the alpha input sources for one \a tevstage of the Texture Environment (TEV) alpha combiner. + * + * \details There are fewer alpha inputs than color inputs, and there are no color channels available in the alpha combiner. + * + * \note The input controls are independent for each TEV stage. + * + * \param[in] tevstage \ref tevstage + * \param[in] a \ref tevalphaarg + * \param[in] b \ref tevalphaarg + * \param[in] c \ref tevalphaarg + * \param[in] d \ref tevalphaarg + * + * \return none + */ +void GX_SetTevAlphaIn(u8 tevstage,u8 a,u8 b,u8 c,u8 d); + +/*! + * \fn void GX_SetTevColorOp(u8 tevstage,u8 tevop,u8 tevbias,u8 tevscale,u8 clamp,u8 tevregid) + * \brief Sets the \a tevop, \a tevbias, \a tevscale and \a clamp-mode operation for the color combiner + * for this \a tevstage of the TEV unit. + * + * \details This function also specifies the register, \a tevregid, that will contain the result of the color combiner function. The color + * combiner function is:

+ * + *       \a tevregid = (d (\a tevop) ((1.0 - c)*a + c*b) + \a tevbias) * \a tevscale;

+ * + * + * The input sources a,b,c and d are set using GX_SetTevColorIn(). + * + * \param[in] tevstage \ref tevstage. + * \param[in] tevop \ref tevop + * \param[in] tevbias \ref tevbias. + * \param[in] tevscale \ref tevscale. + * \param[in] clamp Clamp results when GX_TRUE. + * \param[in] tevregid \ref tevcoloutreg + * + * \return none + */ +void GX_SetTevColorOp(u8 tevstage,u8 tevop,u8 tevbias,u8 tevscale,u8 clamp,u8 tevregid); + + +/*! + * \fn void GX_SetTevAlphaOp(u8 tevstage,u8 tevop,u8 tevbias,u8 tevscale,u8 clamp,u8 tevregid) + * \brief Sets the \a tevop, \a tevbias, \a tevscale and \a clamp-mode operation for the alpha combiner + * for this \a tevstage of the TEV unit. + * + * \details This function also specifies the register, \a tevregid, that will contain the result of the alpha combiner function. The alpha + * combiner function is:

+ * + *       \a tevregid = (d (\a tevop) ((1.0 - c)*a + c*b) + \a tevbias) * \a tevscale;

+ * + * The input sources a,b,c and d are set using GX_SetTevAlphaIn(). + * + * \param[in] tevstage \ref tevstage. + * \param[in] tevop \ref tevop + * \param[in] tevbias \ref tevbias. + * \param[in] tevscale \ref tevscale. + * \param[in] clamp Clamp results when GX_TRUE. + * \param[in] tevregid \ref tevcoloutreg + * + * \return none + */ +void GX_SetTevAlphaOp(u8 tevstage,u8 tevop,u8 tevbias,u8 tevscale,u8 clamp,u8 tevregid); + +/*! + * \fn void GX_SetNumTexGens(u32 nr) + * \brief Sets the number of texture coordinates that are generated and available for use in the Texture Environment TEV stages. + * + * \details Texture coordinates are generated from input data as described by GX_SetTexCoordGen(). The generated texture coordinates are linked to + * specific textures and specific TEV stages using GX_SetTevOrder(). + * + * \note A consecutive number of texture coordinates may be generated, starting at GX_TEXCOORD0. A maximum of 8 texture coordinates may be generated. + * If \a nr is set to 0, no texture coordinates will be generated. In this case, at least one color channel must be output (see GX_SetNumChans()). + * + * \param[in] nr number of tex coords to generate, between 0 and 8 inclusive + * + * \return none + */ +void GX_SetNumTexGens(u32 nr); + +/*! + * \fn void GX_SetTexCoordGen(u16 texcoord,u32 tgen_typ,u32 tgen_src,u32 mtxsrc) + * \brief Specifies how texture coordinates are generated. + * + * \details Output texture coordinates are usually the result of some transform of an input attribute; either position, normal, or texture coordinate. + * You can also generate texture coordinates from the output color channel of the per-vertex lighting calculations. In C-language syntax the texture + * coordinate generation function would look like this:

+ * + *       \a texcoord = \a tgen_typ(\a tgen_src, \a mtxsrc);

+ * + * The current vertex descriptor as set by GX_SetVtxDesc() only describes the data input to the graphics processor. Using this function, you can create + * new output texture coordinates from the input data. The texcoord parameter is used to give the output texture coordinate a name. This texture + * coordinate can be bound to a texture using GX_SetTevOrder(). GX_SetNumTexGens() specifies a consecutive number of texture coordinates, starting at + * GX_TEXCOORD0, that are available to GX_SetTevOrder(). + * + * \ref texmtx defines a default set of texture matrix names that can be supplied as mtxsrc. The matrix names are actually row addresses (4 floats per + * row) in the matrix memory that indicate the first row of a loaded matrix. The user may define another memory map of matrix memory to suit their + * needs. Keep in mind, however, that modelview matrices (see GX_LoadPosMtxImm() and \ref pnmtx) and texture matrices share matrix memory. + * + * \note Input texture coordinates must always go through the texture coordinate generation hardware. GX_Init() initializes the hardware (by calling + * this function) so that all texture coordinates are transformed by the GX_IDENTITY matrix in order to appear as if input coordinates are passed + * unchanged through to the texture hardware. + * + * There are 8 output texture coordinates that can be referenced in any of the 16 TEV stages. There are a maximum of 8 input texture coordinates. + * + * \param[in] texcoord \ref texcoordid + * \param[in] tgen_typ \ref texgentyp + * \param[in] tgen_src \ref texgensrc + * \param[in] mtxsrc \ref texmtx + * + * \return none + */ +void GX_SetTexCoordGen(u16 texcoord,u32 tgen_typ,u32 tgen_src,u32 mtxsrc); + +/*! + * \fn void GX_SetTexCoordGen2(u16 texcoord,u32 tgen_typ,u32 tgen_src,u32 mtxsrc,u32 normalize,u32 postmtx) + * \brief An extension of GX_SetTexCoordGen(). It allows one to specify additional texgen options. + * + * \details The first four arguments are identical to those for GX_SetTexCoordGen() and function in the same way. All requirements for the first + * four arguments are the same as they are for that function as well. The new options only apply for "ordinary" texgens, where the texgen type is + * GX_TG_MTX2x4 or GX_TG_MTX3x4. They do not work for light-based texgens or emboss texgens. + * + * The \a normalize argument allows the computed texcoord to be normalized after the multiplication by \a mtxsrc (the first-pass transformation). + * After the optional normalization step, the texcoord is then multiplied by the 3x4 matrix \a postmtx. This matrix is refered to as the + * post-transform matrix. + * + * The result of this step is the texture coordinate that is used to look up the texture. + * + * \note The post-transform matrices are separate from the first pass matrices. They are stored in a separate memory area in the same format as the + * first pass matrices, except that all matrices have three rows.

+ * + * \note When a vertex contains only position and one texture coordinate and the texgen type is GX_TG_MTX2x4, there are certain limitations. In + * this special performance case, normalization is not performed (even if specified). + * + * \param[in] texcoord \ref texcoordid + * \param[in] tgen_typ \ref texgentyp + * \param[in] tgen_src \ref texgensrc + * \param[in] mtxsrc \ref texmtx + * \param[in] normalize if GX_TRUE, normalize tex coord after first-pass transform. Only used with GX_TG_MTX*. + * \param[in] postmtx \ref dttmtx + * + * \return none + */ +void GX_SetTexCoordGen2(u16 texcoord,u32 tgen_typ,u32 tgen_src,u32 mtxsrc,u32 normalize,u32 postmtx); + +/*! + * \fn void GX_SetZTexture(u8 op,u8 fmt,u32 bias) + * \brief Controls Z texture operations. + * + * \details Z textures can be used to implement image-based rendering algorithms. A composite image consisting of color and depth image planes can + * be merged into the Embedded Frame Buffer (EFB). + * + * Normally, the Z for a quad (2x2) of pixels is computed as a reference Z and two slopes. Once Z texturing is enabled, the Z is computed by adding + * a Z texel to the reference Z (\a op = GX_ZT_ADD) or by replacing the reference Z with the Z texel value (\a op = GX_ZT_REPLACE). + * + * Z textures are always the output from the last active Texture Environment (TEV) stage (see GX_SetNumTevStages()) when enabled. When Z texturing is + * enabled, the texture color of the last TEV stage is not available, but all other color inputs and operations are available. The pixel color is + * always output from the last active TEV stage. You cannot use the TEV to operate on the Z texture, it is fed directly into the Z texture logic. + * + * Z texel formats can be unsigned 8-bit (GX_TF_Z8), 16-bit (GX_TF_Z16), or 24-bit (GX_TF_Z24X8 (32-bit texture)) are used. The Graphics Processor + * converts the Z-textures to 24-bit values by placing the texel value in the least-significant bits and inserting zero's in the remaining + * most-significant bits. The 24-bit constant \a bias is added to the Z texture. If the pixel format is GX_PF_RGB565_Z16 the 24-bit result is converted + * to the current 16-bit Z format before comparing with the EFB's Z. + * + * \note The Z-texture calculation is done before the fog range calculation.

+ * + * \note GX_Init() disables Z texturing. + * + * \param[in] op \ref ztexop to perform + * \param[in] fmt \ref ztexfmt to use + * \param[in] bias Bias value. Format is 24bit unsigned. + * + * \return none + */ +void GX_SetZTexture(u8 op,u8 fmt,u32 bias); + +/*! + * \fn void GX_SetZMode(u8 enable,u8 func,u8 update_enable) + * \brief Sets the Z-buffer compare mode. + * + * \details The result of the Z compare is used to conditionally write color values to the Embedded Frame Buffer (EFB). + * + * When \a enable is set to GX_DISABLE, Z buffering is disabled and the Z buffer is not updated. + * + * The \a func parameter determines the comparison that is performed. In the comparison function, the newly rasterized Z value is on the left + * while the Z value from the Z buffer is on the right. If the result of the comparison is false, the newly rasterized pixel is discarded. + * + * The parameter \a update_enable determines whether or not the Z buffer is updated with the new Z value after a comparison is performed. This + * parameter also affects whether the Z buffer is cleared during copy operations (see GX_CopyDisp() and GX_CopyTex()). + * + * \param[in] enable Enables comparisons with source and destination Z values if GX_TRUE; disables compares otherwise. + * \param[in] func \ref compare + * \param[in] update_enable Enables Z-buffer updates when GX_TRUE; otherwise, Z-buffer updates are disabled, but compares may still be enabled. + * + * \return none + */ +void GX_SetZMode(u8 enable,u8 func,u8 update_enable); + +/*! + * \fn void GX_SetZCompLoc(u8 before_tex) + * \brief Sets whether Z buffering happens before or after texturing. + * + * \details Normally, Z buffering should happen before texturing, as this enables better performance by not texturing pixels that are not + * visible; however, when alpha compare is used, Z buffering must be done after texturing (see GX_SetAlphaCompare()). + * + * \param[in] before_tex Enables Z-buffering before texturing when set to GX_TRUE; otherwise, Z-buffering takes place after texturing. + * + * \return none + */ +void GX_SetZCompLoc(u8 before_tex); + +/*! + * \fn void GX_SetLineWidth(u8 width,u8 fmt) + * \brief Sets the width of line primitives. + * + * The parameter \a fmt is added to the texture coordinate to obtain texture coordinates at the other corners of a wide line. The \a fmt + * values are added after the texture coordinate generation operation; see GX_SetTexCoordGen(). + * + * \param[in] width width of the line in 1/16th pixel increments; maximum width is 42.5 px + * \param[in] fmt \ref texoff + * + * \return none + */ +void GX_SetLineWidth(u8 width,u8 fmt); + +/*! + * \fn void GX_SetPointSize(u8 width,u8 fmt) + * \brief Sets the size of point primitives. + * + * \details The parameter \a fmt is added to the texture coordinate(s), if any, to obtain texture coordinates at the other corners of a point. The + * \a fmts are added after the texture coordinate generation operation; see GX_SetTexCoordGen(). + * + * \param[in] width width of the point in 1/16th pixel increments; maximum width is 42.5 px + * \param[in] fmt \ref texoff + * + * \return none + */ +void GX_SetPointSize(u8 width,u8 fmt); + +/*! + * \fn void GX_SetBlendMode(u8 type,u8 src_fact,u8 dst_fact,u8 op) + * \brief Determines how the source image, generated by the graphics processor, is blended with the Embedded Frame Buffer (EFB). + * + * \details When \a type is set to GX_BM_NONE, the source data is written directly to the EFB. When \a type is set to GX_BM_BLEND, the source color and EFB + * pixels are blended using the following equation: + * + *       dst_pix_clr = src_pix_clr * \a src_fact + dst_pix_clr * \a dst_fact + * + * The GX_BL_DSTALPHA / GX_BL_INVDSTALPHA can be used only when the EFB has GX_PF_RGBA6_Z24 as the pixel format (see GX_SetPixelFmt()). If the pixel + * format is GX_PF_RGBA6_Z24 then the \a src_fact and \a dst_fact are also applied to the alpha channel. To write the alpha channel to the EFB you must + * call GX_SetAlphaUpdate(). + * + * When type is set to GX_BM_LOGIC, the source and EFB pixels are blended using logical bitwise operations. When type is set to GX_BM_SUBTRACT, the destination + * pixel is computed as follows: + * + *       dst_pix_clr = dst_pix_clr - src_pix_clr [clamped to zero] + * + * Note that \a src_fact and \a dst_fact are not part of this equation. + * + * \note Color updates should be enabled by calling GX_SetColorUpdate(). + * + * \param[in] type \ref blendmode + * \param[in] src_fact \ref blendfactor + * \param[in] dst_fact \ref blendfactor + * \param[in] op \ref logicop + * + * \return none + */ +void GX_SetBlendMode(u8 type,u8 src_fact,u8 dst_fact,u8 op); + +/*! + * \fn void GX_SetCullMode(u8 mode) + * \brief Enables or disables culling of geometry based on its orientation to the viewer. + * + * \details Primitives in which the vertex order is clockwise to the viewer are considered front-facing. + * + * \note GX_Init() sets this to GX_CULL_BACK. + * + * \param[in] mode \ref cullmode + * + * \return none + */ +void GX_SetCullMode(u8 mode); + +/*! + * \fn void GX_SetCoPlanar(u8 enable) + * \brief Enables or disables coplanar triangle processing. + * + * \details While coplanar mode is enabled, all subsequent triangles (called decal triangles) will have the same Z coefficients as the reference + * plane. Coplanar mode should be enabled immediately after a reference triangle is drawn. + * + * \note The reference triangle can be culled using GX_SetCullMode(GX_CULL_ALL) to create an invisible reference plane; however, the reference + * triangle must not be completely out of view, i.e. trivially rejected by clipping.

+ * + * \note GX_Init() disables coplanar mode. + * + * \param[in] enable when GX_ENABLE, coplanar mode is enabled; GX_DISABLE disables this mode + * + * \return none + */ +void GX_SetCoPlanar(u8 enable); + +/*! + * \fn void GX_EnableTexOffsets(u8 coord,u8 line_enable,u8 point_enable) + * \brief Enables a special texture offset feature for points and lines. + * + * \details When a point's size is defined using GX_SetPointSize() or a line's width is described using GX_SetLineWidth(), you can also specify a second + * parameter. The parameter \a fmt is added to the texture coordinate(s), if any, to obtain texture coordinates at the other corners of a + * point or line. The \a fmts are added after the texture coordinate generation operation; see GX_SetTexCoordGen(). This function enables this + * operation for a particular texture coordinate. Offset operations for points and lines are enabled separately. If the enables are false, the same + * texture coordinate is used for every vertex of the line or point. + * + * \param[in] coord \ref texcoordid + * \param[in] line_enable enable or disable tex offset calculation for lines + * \param[in] point_enable enable or disable tex offset calculation for points + * + * \return none + */ +void GX_EnableTexOffsets(u8 coord,u8 line_enable,u8 point_enable); + +/*! + * \fn void GX_SetClipMode(u8 mode) + * \brief Enables or disables clipping of geometry. + * + * \details This may help performance issues that occur when objects are far-clipped; however, any near-clipped objects will be rendered incorrectly. + * + * \note GX_Init() sets this to GX_CLIP_ENABLE. + * + * \param[in] mode \ref clipmode + * + * \return none + */ +void GX_SetClipMode(u8 mode); + +/*! + * \fn void GX_SetScissor(u32 xOrigin,u32 yOrigin,u32 wd,u32 ht) + * \brief Sets the scissor rectangle. + * + * \details The scissor rectangle specifies an area of the screen outside of which all primitives are culled. This function sets the scissor rectangle in + * screen coordinates. The screen origin (\a xOrigin=0, \a yOrigin=0) is at the top left corner of the display. + * + * The values may be within the range of 0 - 2047 inclusive. Using values that extend beyond the EFB size is allowable since the scissor box may be + * repositioned within the EFB using GX_SetScissorBoxOffset(). + * + * \note By default, the scissor rectangle is set to match the viewport rectangle. GX_Init() initializes the scissor rectangle to match the viewport + * given the current render mode. + * + * \param[in] xOrigin left-most coord in screen coordinates + * \param[in] yOrigin top-most coord in screen coordinates + * \param[in] wd width of the scissorbox in screen coordinates + * \param[in] ht height of the scissorbox in screen coordinates + * + * \return none + */ +void GX_SetScissor(u32 xOrigin,u32 yOrigin,u32 wd,u32 ht); + +/*! + * \fn void GX_SetScissorBoxOffset(s32 xoffset,s32 yoffset) + * \brief Repositions the scissorbox rectangle within the Embedded Frame Buffer (EFB) memory space. + * + * \details The offsets are subtracted from the screen coordinates to determine the actual EFB coordinates where the pixels are stored. Thus with + * positive offsets, the scissor box may be shifted left and/or up; and with negative offsets, the scissor box may be shifted right and/or down. + * + * The intended use for this command is to make it easy to do two-pass antialiased rendering. To draw the top half of the screen, the scissor box is set to + * the top and the offset set to zero. To draw the bottom half, the scissor box is set to the bottom, and the offset is set to shift the scissor box back up + * to the top. + * + * Another use for the offset is to displace how an image is rendered with respect to the dither matrix. Since the dither matrix is 4x4, a \a yoffset of -2 + * shifts the image down by 2 lines with respect to the matrix. This can be useful for field-rendering mode. + * + * \note Achieving an offset of an odd number of lines is possible, but more difficult than just changing the scissor box: one must render and copy 2 + * additional lines, then skip one by adjusting the argument of VIDEO_SetNextFrameBuffer().

+ * + * \note GX_Init() initializes the scissor box offset to zero. Since the GP works on 2x2 regions of pixels, only even offsets are allowed. + * + * \param[in] xoffset number of pixels to shift the scissorbox left, between -342 - 382 inclusive; must be even + * \param[in] yoffset number of pixels to shift the scissorbox up, between -342 - 494 inclusive; must be even + * + * \return none + */ +void GX_SetScissorBoxOffset(s32 xoffset,s32 yoffset); + +/*! + * \fn void GX_SetNumChans(u8 num) + * \brief Sets the number of color channels that are output to the TEV stages. + * + * \details Color channels are the mechanism used to compute per-vertex lighting effects. Color channels are controlled using GX_SetChanCtrl(). + * Color channels are linked to specific TEV stages using GX_SetTevOrder(). + * + * This function basically defines the number of per-vertex colors that get rasterized. If \a num is set to 0, then at least one texture coordinate + * must be generated (see GX_SetNumTexGens()). If \a num is set to 1, then channel GX_COLOR0A0 will be rasterized. If \a num is set to 2 (the maximum + * value), then GX_COLOR0A0 and GX_COLOR1A1 will be rasterized. + * + * \param[in] num number of color channels to rasterize; number must be 0, 1 or 2 + * + * \return none + */ +void GX_SetNumChans(u8 num); + +/*! + * \fn void GX_SetTevOrder(u8 tevstage,u8 texcoord,u32 texmap,u8 color) + * \brief Specifies the texture and rasterized color that will be available as inputs to this TEV \a tevstage. + * + * The texture coordinate \a texcoord is generated from input attributes using the GX_SetTexCoordGen() function and is used to look up the + * texture map, previously loaded by GX_LoadTexObj(). The \a color to rasterize for this \a tevstage is also specified. The color + * is the result of per-vertex lighting which is controlled by GX_SetChanCtrl(). + * + * This function will scale the normalized texture coordinates produced by GX_SetTexCoordGen() according to the size of the texture map in the + * function call. For this reason, texture coordinates can only be broadcast to multiple texture maps if and only if the maps are the same size. In + * some cases, you may want to generate a texture coordinate having a certain scale, but disable the texture lookup (this comes up when generating + * texture coordinates for indirect bump mapping). To accomplish this, use the GX_TEXMAP_DISABLE flag: + * + * \code GX_SetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD0, GX_TEXMAP3 | GX_TEXMAP_DISABLE, GX_COLORNULL); \endcode + * + * \details This will scale GX_TEXCOORD0 using GX_TEXMAP3 but disable the lookup of GX_TEXMAP3. + * + * \note This function does not enable the TEV stage. To enable a consecutive number of TEV stages, starting at stage GX_TEVSTAGE0, use GX_SetNumTevStages().

+ * + * \note The operation of each TEV stage is independent. The color operations are controlled by GX_SetTevColorIn() and GX_SetTevColorOp(). The alpha + * operations are controlled by GX_SetTevAlphaIn() and GX_SetTevAlphaOp().

+ * + * \note The number of texture coordinates available for all the active TEV stages is set using GX_SetNumTexGens(). The number of color channels + * available for all the active TEV stages is set using GX_SetNumChans(). Active TEV stages should not reference more texture coordinates or colors + * than are being generated.

+ * + * \note There are some special settings for the \a color argument. If you specify GX_COLOR_ZERO, you always get zero as rasterized color. If you specify + * GX_ALPHA_BUMP or GX_ALPHA_BUMPN, you can use "Bump alpha" component from indirect texture unit as rasterized color input (see GX_SetTevIndirect() + * for details about how to configure bump alpha). Since bump alpha contains only 5-bit data, GX_ALPHA_BUMP shifts them to higher bits, which makes the + * value range 0-248. Meanwhile GX_ALPHA_BUMPN performs normalization and you can get the value range 0-255. + * + * \param[in] tevstage \ref tevstage + * \param[in] texcoord \ref texcoordid + * \param[in] texmap \ref texmapid + * \param[in] color \ref channelid + * + * \return none + */ +void GX_SetTevOrder(u8 tevstage,u8 texcoord,u32 texmap,u8 color); + +/*! + * \fn void GX_SetNumTevStages(u8 num) + * \brief Enables a consecutive number of TEV stages. + * + * \details The output pixel color (before fogging and blending) is the result from the last stage. The last TEV stage must write to register GX_TEVPREV; + * see GX_SetTevColorOp() and GX_SetTevAlphaOp(). At least one TEV stage must be enabled. If a Z-texture is enabled, the Z texture must be looked up on + * the last stage; see GX_SetZTexture(). + * + * \note The association of lighting colors, texture coordinates, and texture maps with a TEV stage is set using GX)SetTevOrder(). The number of texture + * coordinates available is set using GX_SetNumTexGens(). The number of color channels available is set using GX_SetNumChans().

+ * + * \note GX_Init() will set \a num to 1. + * + * \param[in] num number of active TEV stages, between 1 and 16 inclusive + * + * \return none + */ +void GX_SetNumTevStages(u8 num); + +/*! + * \fn void GX_SetAlphaCompare(u8 comp0,u8 ref0,u8 aop,u8 comp1,u8 ref1) + * \brief Sets the parameters for the alpha compare function which uses the alpha output from the last active TEV stage. + * + * \details The alpha compare operation is:

+ * + *       alpha_pass = (alpha_src (\a comp0) \a ref0) (\a op) (alpha_src (\a comp1) \a ref1)

+ * + * where alpha_src is the alpha from the last active TEV stage. As an example, you can implement these equations:

+ * + *       alpha_pass = (alpha_src \> \a ref0) AND (alpha_src \< \a ref1) + * + * or + * + *       alpha_pass = (alpha_src \> \a ref0) OR (alpha_src \< \a ref1) + * + * \note The output alpha can be used in the blending equation (see GX_SetBlendMode()) to control how source and destination (frame buffer) + * pixels are combined.

+ * + * \note The Z compare can occur either before or after texturing (see GX_SetZCompLoc()). In the case where Z compare occurs before texturing, the Z is + * written based only on the Z test. The color is written if both the Z test and alpha test pass. When Z compare occurs after texturing, the color + * and Z are written if both the Z test and alpha test pass. When using texture to make cutout shapes (like billboard trees) that need to be correctly Z + * buffered, you should configure the pipeline to Z buffer after texturing.

+ * + * \note The number of active TEV stages is specified using GX_SetNumTevStages(). + * + * \param[in] comp0 \ref compare subfunction 0 + * \param[in] ref0 reference val for subfunction 0 + * \param[in] aop \ref alphaop for combining subfunctions 0 and 1; must not be GX_MAX_ALPHAOP + * \param[in] comp1 \ref compare subfunction 1 + * \param[in] ref1 reference val for subfunction 1 + * + * \return none + */ +void GX_SetAlphaCompare(u8 comp0,u8 ref0,u8 aop,u8 comp1,u8 ref1); + +/*! + * \fn void GX_SetTevKColor(u8 sel, GXColor col) + * \brief Sets one of the "konstant" color registers in the TEV unit. + * + * \details These registers are available to all TEV stages. They are constant in the sense that they cannot be written to be the TEV itself. + * + * \param[in] sel \ref tevkcolorid + * \param[in] col constant color value + * + * \return none + */ +void GX_SetTevKColor(u8 sel, GXColor col); + +/*! + * \fn void GX_SetTevKColorSel(u8 tevstage,u8 sel) + * \brief Selects a "konstant" color input to be used in a given TEV stage. + * + * The constant color input is used only if GX_CC_KONST is selected for an input for that TEV stage. Only one constant color selection is + * available for a given TEV stage, though it may be used for more than one input. + * + * \param[in] tevstage \ref tevstage + * \param[in] sel \ref tevkcolorsel + * + * \return none + */ +void GX_SetTevKColorSel(u8 tevstage,u8 sel); + +/*! + * \fn void GX_SetTevKAlphaSel(u8 tevstage,u8 sel) + * \brief Selects a "konstant" alpha input to be used in a given TEV stage. + * + * \details The constant alpha input is used only if GX_CA_KONST is selected for an input for that TEV stage. Only one constant alpha selection is + * available for a given TEV stage, though it may be used for more than one input. + * + * \param[in] tevstage \ref tevstage + * \param[in] sel \ref tevkalphasel + * + * \return none + */ +void GX_SetTevKAlphaSel(u8 tevstage,u8 sel); + +/*! + * \fn void GX_SetTevKColorS10(u8 sel, GXColorS10 col) + * \brief Used to set one of the constant color registers in the Texture Environment (TEV) unit. + * + * \details These registers are available to all TEV stages. At least one of these registers is used to pass the output of one TEV stage to the next + * in a multi-texture configuration. + * + * \note The application is responsible for allocating these registers so that no collisions in usage occur.

+ * + * \note This function takes 10-bit signed values as color values; use GX_SetTevColor() to give 8-bit values. + * + * \param[in] sel \ref tevcoloutreg + * \param[in] col constant color value + * + * \return none + */ +void GX_SetTevKColorS10(u8 sel, GXColorS10 col); + +/*! + * \fn void GX_SetTevSwapMode(u8 tevstage,u8 ras_sel,u8 tex_sel) + * \brief Selects a set of swap modes for the rasterized color and texture color for a given TEV stage. + * + * \details This allows the color components of these inputs to be rearranged or duplicated. + * + * \note There are four different swap mode table entries, and each entry in the table specifies how the RGBA inputs map to the RGBA outputs. + * + * \param[in] tevstage \ref tevstage + * \param[in] ras_sel selects a swap mode for the rasterized color input. + * \param[in] tex_sel selects a swap mode for the texture color input. + * + * \return none + */ +void GX_SetTevSwapMode(u8 tevstage,u8 ras_sel,u8 tex_sel); + +/*! + * \fn void GX_SetTevSwapModeTable(u8 swapid,u8 r,u8 g,u8 b,u8 a) + * \brief Sets up the TEV color swap table. + * + * \details The swap table allows the rasterized color and texture color to be swapped component-wise. An entry in the table specifies how the + * input color components map to the output color components. + * + * \param[in] swapid \ref tevswapsel + * \param[in] r input color component that should be mapped to the red output component. + * \param[in] g input color component that should be mapped to the green output component. + * \param[in] b input color component that should be mapped to the blue output component. + * \param[in] a input color component that should be mapped to the alpha output component. + * + * \return none + */ +void GX_SetTevSwapModeTable(u8 swapid,u8 r,u8 g,u8 b,u8 a); + +/*! + * \fn void GX_SetTevIndirect(u8 tevstage,u8 indtexid,u8 format,u8 bias,u8 mtxid,u8 wrap_s,u8 wrap_t,u8 addprev,u8 utclod,u8 a) + * \brief Controls how the results from an indirect lookup will be used to modify a given regular TEV stage lookup. + * + * \param[in] tevstage \ref tevstage being affected + * \param[in] indtexid \ref indtexstage results to use with this TEV stage + * \param[in] format \ref indtexformat, i.e. how many bits to extract from the indirect result color to use in indirect offsets and the indirect "bump" alpha + * \param[in] bias \ref indtexbias to be applied to each component of the indirect offset + * \param[in] mtxid which \ref indtexmtx and scale value to multiply the offsets with + * \param[in] wrap_s \ref indtexwrap to use with the S component of the regular texture coordinate + * \param[in] wrap_t \ref indtexwrap to use with the T component of the regular texture coordinate + * \param[in] addprev whether the tex coords results from the previous TEV stage should be added in + * \param[in] utclod whether to the unmodified (GX_TRUE) or modified (GX_FALSE) tex coords for mipmap LOD computation + * \param[in] a which offset component will supply the \ref indtexalphasel, if any + * + * \return none + */ +void GX_SetTevIndirect(u8 tevstage,u8 indtexid,u8 format,u8 bias,u8 mtxid,u8 wrap_s,u8 wrap_t,u8 addprev,u8 utclod,u8 a); + +/*! + * \fn void GX_SetTevDirect(u8 tevstage) + * \brief Used to turn off all indirect texture processing for the specified regular TEV stage. + * + * \param[in] tevstage the \ref tevstage to change + * + * \return none + */ +void GX_SetTevDirect(u8 tevstage); + +/*! + * \fn void GX_SetNumIndStages(u8 nstages) + * \brief Used to set how many indirect lookups will take place. + * + * \details The results from these indirect lookups may then be used to alter the lookups for any number of regular TEV stages. + * + * \param[in] nstages number of indirect lookup stages + * + * \return none + */ +void GX_SetNumIndStages(u8 nstages); + +/*! + * \fn void GX_SetIndTexOrder(u8 indtexstage,u8 texcoord,u8 texmap) + * \brief Used to specify the \a texcoord and \a texmap to used with a given indirect lookup. + * + * \param[in] indtexstage \ref indtexstage being affected + * \param[in] texcoord \ref texcoordid to be used for this stage + * \param[in] texmap \ref texmapid to be used for this stage + * + * \return none + */ +void GX_SetIndTexOrder(u8 indtexstage,u8 texcoord,u8 texmap); + +/*! + * \fn void GX_SetIndTexCoordScale(u8 indtexid,u8 scale_s,u8 scale_t) + * \brief Allows the sharing of a texcoord between an indirect stage and a regular TEV stage. + * + * It allows the texture coordinates to be scaled down for use with an indirect map that is smaller than the corresponding regular map. + * + * \param[in] indtexid \ref indtexstage being affected + * \param[in] scale_s \ref indtexscale factor for the S coord + * \param[in] scale_t \ref indtexscale factor for the T coord + * + * \return none + */ +void GX_SetIndTexCoordScale(u8 indtexid,u8 scale_s,u8 scale_t); + +/*! + * \fn void GX_SetFog(u8 type,f32 startz,f32 endz,f32 nearz,f32 farz,GXColor col) + * \brief Enables fog. + * + * \details Using \a type, the programmer may select one of several functions to control the fog density as a function of range to a quad (2x2 pixels). + * Range is cosine corrected Z in the x-z plane (eye coordinates), but is not corrected in the y direction (see GX_SetFogRangeAdj()). The parameters \a startz and + * \a endz allow further control over the fog behavior. The parameters \a nearz and \a farz should be set consistent with the projection matrix parameters. Note that these + * parameters are defined in eye-space. The fog color, in RGBX format (i.e. the alpha component is ignored), is set using the \a col parameter. This will be the + * color of the pixel when fully fogged. + * + * \note GX_Init() turns fog off by default. + * + * \param[in] type \ref fogtype to use + * \param[in] startz minimum Z value at which the fog function is active + * \param[in] endz maximum Z value at which the fog function is active + * \param[in] nearz near plane (which should match the projection matrix parameters) + * \param[in] farz far plane (which should match the projection matrix parameters) + * \param[in] col fog color; alpha component is ignored + * + * \return none + */ +void GX_SetFog(u8 type,f32 startz,f32 endz,f32 nearz,f32 farz,GXColor col); + +/*! + * \fn void GX_SetFogRangeAdj(u8 enable,u16 center,GXFogAdjTbl *table) + * \brief Enables or disables horizontal fog-range adjustment. + * + * \details This adjustment is a factor that is multiplied by the eye-space Z used for fog computation; it is based upon the X position of the pixels being + * rendered. The Y direction is not compensated. This effectively increases the fog density at the edges of the screen, making for a more realistic fog + * effect. The adjustment is computed per quad (2x2 pixels), not per-pixel. The center of the viewport is specified using \a center. The range adjustment + * table is specified using \a table. The range adjust function is mirrored horizontally about the \a center. + * + * \note GX_Init() disables range adjustment. + * + * \sa GX_InitFogAdjTable() + * + * \param[in] enable enables adjustment when GX_ENABLE is passed; disabled with GX_DISABLE + * \param[in] center centers the range adjust function; normally corresponds with the center of the viewport + * \param[in] table range adjustment parameter table + * + * \return none + */ +void GX_SetFogRangeAdj(u8 enable,u16 center,GXFogAdjTbl *table); + +/*! + * \fn GX_SetFogColor(GXColor color) + * \brief Sets the fog color. + * + * \details \a color is the color that a pixel will be if fully fogged. Alpha channel is ignored. + * + * \param[in] color color to set fog to + */ +void GX_SetFogColor(GXColor color); + +/*! + * \fn void GX_InitFogAdjTable(GXFogAdjTbl *table,u16 width,f32 projmtx[4][4]) + * \brief Generates the standard range adjustment table and puts the results into \a table. + * + * \details This table can be used by GX_SetFogRangeAdj() to adjust the eye-space Z used for fog based upon the X position of the pixels being rendered. + * The Y direction is not compensated. This effectively increases the fog density at the edges of the screen, making for a more realistic fog effect. The + * width of the viewport is specified using \a width. The \a projmtx parameter is the projection matrix that is used to render into the viewport. It must + * be specified so that the function can compute the X extent of the viewing frustum in eye space. + * + * \note You must allocate \a table yourself. + * + * \param[in] table range adjustment parameter table + * \param[in] width width of the viewport + * \param[in] projmtx projection matrix used to render into the viewport + */ +void GX_InitFogAdjTable(GXFogAdjTbl *table,u16 width,f32 projmtx[4][4]); + +/*! + * \fn void GX_SetIndTexMatrix(u8 indtexmtx,f32 offset_mtx[2][3],s8 scale_exp) + * \brief Sets one of the three static indirect matrices and the associated scale factor. + * + * \details The indirect matrix and scale is used to process the results of an indirect lookup in order to produce offsets to use during a regular lookup. + * The matrix is multiplied by the [S T U] offsets that have been extracted (and optionally biased) from the indirect lookup color. In this matrix-vector + * multiply, the matrix is on the left and the [S T U] column vector is on the right. + * + * \note The matrix values are stored in the hardware as a sign and 10 fractional bits (two's complement); thus the smallest number that can be stored is + * -1 and the largest is (1 - 1/1024) or approximately 0.999. Since +1 cannot be stored, you may consider dividing all the matrix values by 2 (thus +1 + * becomes +0.5) and adding one to the scale value in order to compensate. + * + * \param[in] indtexmtx \ref indtexmtx that is being affected + * \param[in] offset_mtx values to assign to the indirect matrix + * \param[in] scale_exp exponent to use for the associated scale factor + * + * \return none + */ +void GX_SetIndTexMatrix(u8 indtexmtx,f32 offset_mtx[2][3],s8 scale_exp); + +/*! + * \fn void GX_SetTevIndBumpST(u8 tevstage,u8 indstage,u8 mtx_sel) + * \brief Sets up an environment-mapped bump-mapped indirect lookup. + * + * \details The indirect map specifies offsets in (S,T) space. This kind of lookup requires 3 TEV stages to compute. As a result of all this work, a simple + * 2D bump map is properly oriented to the surface to which it is applied. It is used to alter a normal-based texgen which then looks up an environment map. + * The environment map may be a simple light map, or else it may be a reflection map of the surrounding scenery. + * + * \note When using this function, texture lookup should be disabled for the first two TEV stages. The third stage is where the texture lookup is actually performed. + * The associated geometry must supply normal/binormal/tangent coordinates at each vertex. Appropriate texgens must supply each of these to the proper stages + * (binormal to the first, tangent to the second, and normal to the third). Although a static indirect matrix is not used, one must choose a matrix slot and set up + * the associated scale value to be used with this lookup. + * + * \param[in] tevstage \ref tevstage that is being affected + * \param[in] indstage \ref indtexstage results to use with this TEV stage + * \param[in] mtx_sel which \ref indtexmtx to multiply the offsets with + * + * \return none + */ +void GX_SetTevIndBumpST(u8 tevstage,u8 indstage,u8 mtx_sel); + +/*! + * \fn void GX_SetTevIndBumpXYZ(u8 tevstage,u8 indstage,u8 mtx_sel) + * \brief Sets up an environment-mapped bump-mapped indirect lookup. + * + * \details The indirect map specifies offsets in object (X, Y, Z) space. This kind of lookup requires only one TEV stage to compute; however, the bump map (indirect + * map) used is geometry-specific. Thus there is a space/computation tradeoff between using this function and using GX_SetTevIndBumpST(). + * + * \note The indirect matrix must be loaded with a transformation for normals from object space to texture space (similar to eye space, but possibly with an inverted + * Y axis). The surface geometry need only provide regular normals at each vertex. A normal-based texgen must be set up for the regular texture coordinate. + * + * \param[in] tevstage \ref tevstage that is being affected + * \param[in] indstage \ref indtexstage results to use with this TEV stage + * \param[in] mtx_sel which \ref indtexmtx to multiply the offsets with + * + * \return none + */ +void GX_SetTevIndBumpXYZ(u8 tevstage,u8 indstage,u8 mtx_sel); + +/*! + * \fn void GX_SetTevIndTile(u8 tevstage,u8 indtexid,u16 tilesize_x,u16 tilesize_y,u16 tilespacing_x,u16 tilespacing_y,u8 indtexfmt,u8 indtexmtx,u8 bias_sel,u8 alpha_sel) + * \brief Used to implement tiled texturing using indirect textures. + * + * \details It will set up the correct values in the given indirect matrix; you only need to specify which matrix slot to use. + * + * \note The regular texture map contains only the tile definitions. The actual texture size to be applied to the polygon being drawn is the product of the base tile + * size and the size of the indirect map. In order to set the proper texture coordinate scale, one must call GX_SetTexCoordScaleManually(). One can also use + * GX_SetIndTexCoordScale() in order to use the same texcoord for the indirect stage as the regular TEV stage. + * + * \param[in] tevstage \ref tevstage that is being affected + * \param[in] indtexid \ref indtexstage results to use with this TEV stage + * \param[in] tilesize_x size of the tile in the X dimension + * \param[in] tilesize_y size of the tile in the Y dimension + * \param[in] tilespacing_x spacing of the tiles (in the tile-definition map) in the X dimension + * \param[in] tilespacing_y spacing of the tiles (in the tile-definition map) in the Y dimension + * \param[in] indtexfmt \ref indtexformat to use + * \param[in] indtexmtx \ref indtexmtx to multiply the offsets with + * \param[in] bias_sel \ref indtexbias to indicate tile stacking direction for pseudo-3D textures + * \param[in] alpha_sel which \ref indtexalphasel will supply the indirect "bump" alpha, if any (for pseudo-3D textures). + * + * \return none + */ +void GX_SetTevIndTile(u8 tevstage,u8 indtexid,u16 tilesize_x,u16 tilesize_y,u16 tilespacing_x,u16 tilespacing_y,u8 indtexfmt,u8 indtexmtx,u8 bias_sel,u8 alpha_sel); + +/*! + * \fn void GX_SetTevIndRepeat(u8 tevstage) + * \brief Set a given TEV stage to use the same texture coordinates as were computed in the previous stage. + * + * \note This is only useful when the previous stage texture coordinates took more than one stage to compute, as is the case for GX_SetTevIndBumpST(). + * + * \param[in] tevstage \ref tevstage to modify + * + * \return none + */ +void GX_SetTevIndRepeat(u8 tevstage); + +/*! + * \fn void GX_SetColorUpdate(u8 enable) + * \brief Enables or disables color-buffer updates when rendering into the Embedded Frame Buffer (EFB). + * + * \note This function also affects whether the color buffer is cleared during copies; see GX_CopyDisp() and GX_CopyTex(). + * + * \param[in] enable enables color-buffer updates with GX_TRUE + * + * \return none + */ +void GX_SetColorUpdate(u8 enable); + +/*! + * \fn void GX_SetAlphaUpdate(u8 enable) + * \brief Enables or disables alpha-buffer updates of the Embedded Frame Buffer (EFB). + * + * \note This function also affects whether the alpha buffer is cleared during copy operations; see GX_CopyDisp() and GX_CopyTex().

+ * + * \note The only EFB pixel format supporting an alpha buffer is GX_PF_RGBA6_Z24; see GX_SetPixelFmt(). The alpha \a enable is ignored for non-alpha + * pixel formats. + * + * \param[in] enable enables alpha-buffer updates with GX_TRUE + * + * \return none + */ +void GX_SetAlphaUpdate(u8 enable); + +/*! + * \fn void GX_SetPixelFmt(u8 pix_fmt,u8 z_fmt) + * \brief Sets the format of pixels in the Embedded Frame Buffer (EFB). + * + * \details There are two non-antialiased \a pix_fmts: GX_PF_RGB8_Z24 and GX_PF_RGBA6_Z24. The stride of the EFB is fixed at 640 pixels. The + * non-antialiased EFB has 528 lines available. + * + * When \a pix_fmt is set to GX_PF_RGB565_Z16, multi-sample antialiasing is enabled. In order to get proper results, one must also call GX_SetCopyFilter(). + * The position of the subsamples and the antialiasing filter coefficients are set using GX_SetCopyFilter(). When antialiasing, three 16b color/Z + * samples are computed for each pixel, and the total available number of pixels in the EFB is reduced by half (640 pixels x 264 lines). This function also sets the + * compression type for 16-bit Z formats, which allows trading off Z precision for range. The following guidelines apply:

+ * + *       a) far/near ratio <= 2^16, use GX_ZC_LINEAR
+ *       b) far/near ratio <= 2^18, use GX_ZC_NEAR
+ *       c) far/near ratio <= 2^20, use GX_ZC_MID
+ *       d) far/near ratio <= 2^24, use GX_ZC_FAR

+ * + * It is always best to use as little compression as possible (choice "a" is least compressed, choice "d" is most compressed). You get less precision with higher compression. + * The "far" in the above list does not necessarily refer to the far clipping plane. You should think of it as the farthest object you want correct occlusion for. + * + * \note This function also controls antialiasing (AA) mode.

+ * + * \note Since changing pixel format requires the pixel pipeline to be synchronized, the use of this function causes stall of the graphics processor as a result. Therefore, + * you should avoid redundant calls of this function. + * + * \param[in] pix_fmt GX_PF_RGB8_Z24 or GX_PF_RGBA6_Z24 for non-AA, GX_PF_RGB565_Z16 for AA + * \param[in] z_fmt \ref zfmt to use + * + * \return none + */ +void GX_SetPixelFmt(u8 pix_fmt,u8 z_fmt); + +/*! + * \fn void GX_SetDither(u8 dither) + * \brief Enables or disables dithering. + * + * \details A 4x4 Bayer matrix is used for dithering. + * + * \note Only valid when the pixel format (see GX_SetPixelFmt()) is either GX_PF_RGBA6_Z24 or GX_PF_RGB565_Z16.

+ * + * \note Dithering should probably be turned off if you are planning on using the result of rendering for comparisons (e.g. outline rendering + * algorithm that writes IDs to the alpha channel, copies the alpha channel to a texture, and later compares the texture in the TEV). + * + * \param[in] dither enables dithering if GX_TRUE is given and pixel format is one of the two above, otherwise disabled + * + * \return none + */ +void GX_SetDither(u8 dither); + +/*! + * \fn void GX_SetDstAlpha(u8 enable,u8 a) + * \brief Sets a constant alpha value for writing to the Embedded Frame Buffer (EFB). + * + * \note To be effective, the EFB pixel type must have an alpha channel (see GX_SetPixelFmt()). The alpha compare operation (see + * GX_SetAlphaCompare()) and blending operations (see GX_SetBlendMode()) still use source alpha (output from the last TEV stage) but when + * writing the pixel color, the constant alpha will replace the pixel alpha in the EFB. + * + * \param[in] enable \a a will be written to the framebuffer if GX_ENABLE is here and frame buffer pixel format supports destination alpha + * \param[in] a constant alpha value + * + * \return none + */ +void GX_SetDstAlpha(u8 enable,u8 a); + +/*! + * \fn void GX_SetFieldMask(u8 even_mask,u8 odd_mask) + * \brief selectively enables and disables interlacing of the frame buffer image. + * + * \details This function is used when rendering fields to an interlaced Embedded Frame Buffer (EFB). + * + * \note When the mask is GX_FALSE, that field will not be written to the EFB, but the other field will be computed. In other words, you pay the + * fill rate price of a frame to produce a field. + * + * \param[in] even_mask whether to write pixels with even Y coordinate + * \param[in] odd_mask whether to write pixels with odd Y coordinate + * + * \return none + */ +void GX_SetFieldMask(u8 even_mask,u8 odd_mask); + +/*! + * \fn void GX_SetFieldMode(u8 field_mode,u8 half_aspect_ratio) + * \brief Controls various rasterization and texturing parameters that relate to field-mode and double-strike rendering. + * + * \details In field-mode rendering, one must adjust the vertical part of the texture LOD computation to account for the fact that pixels cover only half of + * the space from one rendered scan line to the next (with the other half of the space filled by a pixel from the other field). In both field-mode and + * double-strike rendering, one must adjust the aspect ratio for points and lines to account for the fact that pixels will be double-height when displayed + * (the pixel aspect ratio is 1/2). + * + * \note The values set here usually come directly from the render mode. The \a field_rendering flags goes straight into \a field_mode. The \a half_aspect_ratio + * parameter is true if the \a xfbHeight is half of the \a viHeight, false otherwise.

+ * + * \note GX_Init() sets both fields according to the default render mode.

+ * + * \note On production hardware (i.e. a retail GameCube), only line aspect-ratio adjustment is implemented. Points are not adjusted. + * + * \param[in] field_mode adjusts texture LOD computation as described above if true, otherwise does not + * \param[in] half_aspect_ratio adjusts line aspect ratio accordingly, otherwise does not + * + * \return none + */ +void GX_SetFieldMode(u8 field_mode,u8 half_aspect_ratio); + +/*! + * \fn f32 GX_GetYScaleFactor(u16 efbHeight,u16 xfbHeight) + * \brief Calculates an appropriate Y scale factor value for GX_SetDispCopyYScale() based on the height of the EFB and + * the height of the XFB. + * + * \param[in] efbHeight Height of embedded framebuffer. Range from 2 to 528. Should be a multiple of 2. + * \param[in] xfbHeight Height of external framebuffer. Range from 2 to 1024. Should be equal or greater than \a efbHeight. + * + * \return Y scale factor which can be used as argument of GX_SetDispCopyYScale(). + */ +f32 GX_GetYScaleFactor(u16 efbHeight,u16 xfbHeight); + +/*! + * \fn u32 GX_SetDispCopyYScale(f32 yscale) + * \brief Sets the vertical scale factor for the EFB to XFB copy operation. + * + * \details The number of actual lines copied is returned, based on the current EFB height. You can use this number to allocate the proper XFB size. You + * have to call GX_SetDispCopySrc() prior to this function call if you want to get the number of lines by using this function. + * + * \param[in] yscale Vertical scale value. Range from 1.0 to 256.0. + * + * \return Number of lines that will be copied. + */ +u32 GX_SetDispCopyYScale(f32 yscale); + +/*! + * \fn void GX_SetDispCopySrc(u16 left,u16 top,u16 wd,u16 ht) + * \brief Sets the source parameters for the EFB to XFB copy operation. + * + * \param[in] left left most source pixel to copy. Must be a multiple of 2 pixels. + * \param[in] top top most source line to copy. Must be a multiple of 2 lines. + * \param[in] wd width in pixels to copy. Must be a multiple of 2 pixels. + * \param[in] ht height in lines to copy. Must be a multiple of 2 lines. + * + * \return none + */ +void GX_SetDispCopySrc(u16 left,u16 top,u16 wd,u16 ht); + +/*! + * \fn void GX_SetDispCopyDst(u16 wd,u16 ht) + * \brief Sets the witdth and height of the display buffer in pixels. + * + * \details The application typical renders an image into the EFB(source) and then copies it into the XFB(destination) in main memory. \a wd + * specifies the number of pixels between adjacent lines in the destination buffer and can be different than the width of the EFB. + * + * \param[in] wd Distance between successive lines in the XFB, in pixels. Must be a multiple of 16. + * \param[in] ht Height of the XFB in lines. + * + * \return none + */ +void GX_SetDispCopyDst(u16 wd,u16 ht); + +/*! + * \fn void GX_SetCopyClamp(u8 clamp) + * \brief Sets the vertical clamping mode to use during the EFB to XFB or texture copy. + * + * \param[in] clamp bit-wise OR of desired \ref xfbclamp. Use GX_CLAMP_NONE for no clamping. + * + * \return none + */ +void GX_SetCopyClamp(u8 clamp); + +/*! + * \fn void GX_SetDispCopyGamma(u8 gamma) + * \brief Sets the gamma correction applied to pixels during EFB to XFB copy operation. + * + * \param[in] gamma \ref gammamode + * + * \return none + */ +void GX_SetDispCopyGamma(u8 gamma); + +/*! + * \fn void GX_SetCopyFilter(u8 aa,u8 sample_pattern[12][2],u8 vf,u8 vfilter[7]) + * \brief Sets the subpixel sample patterns and vertical filter coefficients used to filter subpixels into pixels. + * + * \details This function normally uses the \a aa, \a sample_pattern and \a vfilter provided by the render mode struct:

+ * + * \code GXRModeObj* rmode = VIDEO_GetPreferredMode(NULL); + * GX_SetCopyFilter(rmode->aa,rmode->sample_pattern,GX_TRUE,rmode->vfilter); \endcode + * + * \note In order to make use of the \a sample_pattern, antialiasing must be enabled by setting the Embedded Frame Buffer (EFB) format to + * GX_PF_RGB565_Z16; see GX_SetPixelFmt(). + * + * \param[in] aa utilizes \a sample_pattern if GX_TRUE, otherwise all sample points are centered + * \param[in] sample_pattern array of coordinates for sample points; valid range is 1 - 11 inclusive + * \param[in] vf use \a vfilter if GX_TRUE, otherwise use default 1-line filter + * \param[in] vfilter vertical filter coefficients; valid coefficient range is 0 - 63 inclusive; sum should equal 64 + * + * \return none + */ +void GX_SetCopyFilter(u8 aa,u8 sample_pattern[12][2],u8 vf,u8 vfilter[7]); + +/*! + * \fn void GX_SetDispCopyFrame2Field(u8 mode) + * \brief Determines which lines are read from the Embedded Frame Buffer (EFB) when using GX_CopyDisp(). + * + * \details Specifically, it determines whether all lines, only even lines, or only odd lines are read. + * + * \note The opposite function, which determines whether all lines, only even lines or only odd lines are written to the EFB, is GX_SetFieldMask().

+ * + * \note Only applies to display copies, GX_CopyTex() always uses the GX_COPY_PROGRESSIVE mode. + * + * \param[in] mode \ref copymode to determine which field to copy (or both) + * + * \return none + */ +void GX_SetDispCopyFrame2Field(u8 mode); + +/*! + * \fn void GX_SetCopyClear(GXColor color,u32 zvalue) + * \brief Sets color and Z value to clear the EFB to during copy operations. + * + * \details These values are used during both display copies and texture copies. + * + * \param[in] color RGBA color (8-bit/component) to use during clear operation. + * \param[in] zvalue 24-bit Z value to use during clear operation. Use the constant GX_MAX_Z24 to specify the maximum depth value. + * + * \return none + */ +void GX_SetCopyClear(GXColor color,u32 zvalue); + +/*! + * \fn void GX_CopyDisp(void *dest,u8 clear) + * \brief Copies the embedded framebuffer (EFB) to the external framebuffer(XFB) in main memory. + * + * \note The stride of the XFB is set using GX_SetDispCopyDst(). The source image in the EFB is described using GX_SetDispCopySrc().

+ * + * \note The graphics processor will stall all graphics commands util the copy is complete.

+ * + * \note If the \a clear flag is true, the color and Z buffers will be cleared during the copy. They will be cleared to the constant + * values set using GX_SetCopyClear(). + * + * \param[in] dest pointer to the external framebuffer. \a dest should be 32B aligned. + * \param[in] clear flag that indicates framebuffer should be cleared if GX_TRUE. + * + * \return none + */ +void GX_CopyDisp(void *dest,u8 clear); + +/*! + * \fn void GX_SetTexCopySrc(u16 left,u16 top,u16 wd,u16 ht) + * \brief Sets the source parameters for the Embedded Frame Buffer (EFB) to texture image copy. + * + * \details The GP will copy textures into the tiled texture format specified in GX_CopyTex(). The GP always copies tiles (32B) so image widths and + * heights that are not a multiple of the tile width will be padded with undefined data in the copied image + * + * \param[in] left left-most source pixel to copy, multiple of two + * \param[in] top top-most source line to copy, multiple of two + * \param[in] wd width to copy in pixels, multiple of two + * \param[in] ht height to copy in pixels, multiple of two + * + * \return none + */ +void GX_SetTexCopySrc(u16 left,u16 top,u16 wd,u16 ht); + +/*! + * \fn void GX_SetTexCopyDst(u16 wd,u16 ht,u32 fmt,u8 mipmap) + * \brief This function sets the width and height of the destination texture buffer in texels. + * + * \details This function sets the width (\a wd) and height (\a ht) of the destination texture buffer in texels. The application may render an image into + * the EFB and then copy it into a texture buffer in main memory. \a wd specifies the number of texels between adjacent lines in the texture buffer and can + * be different than the width of the source image. This function also sets the texture format (\a fmt) to be created during the copy operation. An + * optional box filter can be enabled using \a mipmap. This flag will scale the source image by 1/2. + * + * Normally, the width of the EFB and destination \a wd are the same. When rendering smaller images that get copied and composited into a larger texture + * buffer, however, the EFB width and texture buffer \a wd are not necessarily the same. + * + * The Z buffer can be copied to a Z texture format by setting \a fmt to GX_TF_Z24X8. This operation is only valid when the EFB format is + * GX_PF_RGB8_Z24 or GX_PF_RGBA6_Z24. + * + * The alpha channel can be copied from an EFB with format GX_PF_RGBA6_Z24 by setting \a fmt to GX_TF_A8. + * + * \param[in] wd distance between successive lines in the texture buffer, in texels; must be a multiple of the texture tile width, which depends on \a fmt. + * \param[in] ht height of the texture buffer + * \param[in] fmt \ref texfmt + * \param[in] mipmap flag that indicates framebuffer should be cleared if GX_TRUE. + * + * \return none + */ +void GX_SetTexCopyDst(u16 wd,u16 ht,u32 fmt,u8 mipmap); + +/*! + * \fn void GX_CopyTex(void *dest,u8 clear) + * \brief Copies the embedded framebuffer (EFB) to the texture image buffer \a dest in main memory. + * + * \details This is useful when creating textures using the Graphics Processor (GP). If the \a clear flag is set to GX_TRUE, the EFB will be cleared + * to the current color(see GX_SetCopyClear()) during the copy operation. + * + * \param[in] dest pointer to the image buffer in main memory. \a dest should be 32B aligned. + * \param[in] clear flag that indicates framebuffer should be cleared if GX_TRUE. + * + * \return none + */ +void GX_CopyTex(void *dest,u8 clear); + +/*! + * \fn void GX_PixModeSync() + * \brief Causes the GPU to wait for the pipe to flush. + * + * \details This function inserts a synchronization command into the graphics FIFO. When the GPU sees this command it will allow the rest of the pipe to + * flush before continuing. This command is useful in certain situation such as after using GX_CopyTex() and before a primitive that uses the copied texture. + * + * \note The command is actually implemented by writing the control register that determines the format of the embedded frame buffer (EFB). As a result, care + * should be used if this command is placed within a display list. + * + * \return none + */ +void GX_PixModeSync(); + +/*! + * \fn void GX_ClearBoundingBox() + * \brief Clears the bounding box values before a new image is drawn. + * + * \details The graphics hardware keeps track of a bounding box of pixel coordinates that are drawn in the Embedded Frame Buffer (EFB). + * + * \return none + */ +void GX_ClearBoundingBox(); + +/*! + * \fn GX_PokeAlphaMode(u8 func,u8 threshold) + * \brief Sets a threshold which is compared to the alpha of pixels written to the Embedded Frame Buffer (EFB) using the GX_Poke*() functions. + * + * \details The compare function order is:

+ * + *       src_alpha \a func \a threshold + * + * \note The alpha compare function can be used to conditionally write pixels to the EFB using the source alpha channel as a template. If the compare function is + * true, the source color will be written to the EFB based on the result of the Z compare (see GX_PokeZMode()). If the alpha compare function is false, the source + * color is not written to the EFB.

+ * + * \note The alpha compare test happens before the Z compare and before blending (see GX_PokeBlendMode()). + * + * \param[in] func \ref compare to use + * \param[in] threshold to which the source alpha will be compared to + * + * \return none + */ +void GX_PokeAlphaMode(u8 func,u8 threshold); + +/*! + * \fn void GX_PokeAlphaUpdate(u8 update_enable) + * \brief Enables or disables alpha-buffer updates for GX_Poke*() functions. + * + * \details The normal rendering state (set by GX_SetAlphaUpdate()) is not affected. + * + * \param[in] update_enable enables alpha-buffer updates with GX_TRUE, otherwise does not + * + * \return none + */ +void GX_PokeAlphaUpdate(u8 update_enable); + +/*! + * \fn void GX_PokeColorUpdate(u8 update_enable) + * \brief Enables or disables color-buffer updates when writing the Embedded Frame Buffer (EFB) using the GX_Poke*() functions. + * + * \param[in] update_enable enables color-buffer updates with GX_TRUE, otherwise does not + * + * \return none + */ +void GX_PokeColorUpdate(u8 update_enable); + +/*! + * \fn void GX_PokeDither(u8 dither) + * \brief Enables dithering when writing the Embedded Frame Buffer (EFB) using GX_Poke*() functions. + * + * \note The \a dither enable is only valid when the pixel format (see GX_SetPixelFmt()) is either GX_PF_RGBA6_Z24 or GX_PF_RGB565_Z16.

+ * + * \note A 4x4 Bayer matrix is used for dithering. + * + * \param[in] dither if set to GX_TRUE and pixel format is one of the above, dithering is enabled; otherwise disabled + * + * \return none + */ +void GX_PokeDither(u8 dither); + +/*! + * \fn void GX_PokeBlendMode(u8 type,u8 src_fact,u8 dst_fact,u8 op) + * \brief Determines how the source image, is blended with the current Embedded Frame Buffer (EFB). + * + * \details When type is set to GX_BM_NONE, no color data is written to the EFB. When type is set to GX_BM_BLEND, the source and EFB pixels + * are blended using the following equation:

+ * + *       dst_pix_clr = src_pix_clr * \a src_fact + dst_pix_clr * \a dst_fact

+ * + * When type is set to GX_BM_SUBTRACT, the destination pixel is computed as follows:

+ * + *       dst_pix_clr = dst_pix_clr - src_pix_clr [clamped to zero]

+ * + * Note that \a src_fact and \a dst_fact are not part of the equation. + * + * \note \a dst_fact can be used only when the frame buffer has GX_PF_RGBA6_Z24 as the pixel format (see GX_SetPixelFmt()).

+ * + * \note When type is set to GX_BM_LOGIC, the source and EFB pixels are blended using logical bitwise operations.

+ * + * \note This function does not effect the normal rendering state; see GX_SetBlendMode(). + * + * \param[in] type \ref blendmode + * \param[in] src_fact source \ref blendfactor; the pixel color produced by the graphics processor is multiplied by this factor + * \param[in] dst_fact destination \ref blendfactor; the current frame buffer pixel color is multiplied by this factor + * \param[in] op \ref logicop to use + */ +void GX_PokeBlendMode(u8 type,u8 src_fact,u8 dst_fact,u8 op); + +/*! + * \fn void GX_PokeAlphaRead(u8 mode) + * \brief Determines what value of alpha will be read from the Embedded Frame Buffer (EFB). + * + * \details The mode only applies to GX_Peek*() functions. + * + * \note This feature works no matter what pixel type (see GX_SetPixelFmt()) you are using. If you are using the EFB with alpha plane, it is + * recommended that you use GX_READ_NONE so that you can read correct alpha value from the EFB. If you are using the EFB with no alpha, you should + * set either of GX_READ_00 or GX_READ_FF in order to get a certain value.

+ * + * \param[in] mode \ref alphareadmode that determines value of alpha read from a frame buffer with no alpha channel. + * + * \return none + */ +void GX_PokeAlphaRead(u8 mode); + +/*! + * \fn void GX_PokeDstAlpha(u8 enable,u8 a) + * \brief Sets a constant alpha value for writing to the Embedded Frame Buffer (EFB). + * + * \details The EFB pixel type must have an alpha channel for this function to be effective (see GX_SetPixelFmt()). The blending operations (see + * GX_PokeBlendMode()) still use source alpha but when writing the pixel color, the constant \a a will replace the pixel alpha in the EFB. + * + * \param[in] enable if set to GX_ENABLE and pixel format supports dest alpha, \a a will be written to the framebuffer + * \param[in] a constant alpha value + * + * \return none + */ +void GX_PokeDstAlpha(u8 enable,u8 a); + +/*! + * \fn void GX_PokeARGB(u16 x,u16 y,GXColor color) + * \brief Allows the CPU to write \a color directly to the Embedded Frame Buffer (EFB) at position \a x,\a y. + * + * \details The alpha value in \a color can be compared with the current alpha threshold (see GX_PokeAlphaMode()). The color will be blended + * into the EFB using the blend mode set by GX_PokeBlendMode(). + * + * \note For an antialiased frame buffer, all 3 subsamples of a pixel are affected by the poke. + * + * \param[in] x coordinate, in pixels; must be 0 - 639 inclusive + * \param[in] y coordinate, in lines; must be 0 - 527 inclusive + * \param[in] color color to write at the location + * + * \return none + */ +void GX_PokeARGB(u16 x,u16 y,GXColor color); + +/*! + * \fn void GX_PeekARGB(u16 x,u16 y,GXColor *color) + * \brief Allows the CPU to read a color value directly from the Embedded Frame Buffer (EFB) at position \a x,\a y. + * + * \note For an antialiased frame buffer, only subsample 0 of a pixel is read. + * + * \param[in] x coordinate, in pixels; must be 0 - 639 inclusive + * \param[in] y coordinate, in lines; must be 0 - 527 inclusive + * \param[out] color struct to store color in + * + * \return none + */ +void GX_PeekARGB(u16 x,u16 y,GXColor *color); + +/*! + * \fn void GX_PokeZ(u16 x,u16 y,u32 z) + * \brief Allows the CPU to write a z value directly to the Embedded Frame Buffer (EFB) at position \a x,\a y. + * + * \details The \a z value can be compared with the current contents of the EFB. The Z compare fuction is set using GX_PokeZMode(). + * + * \note The \a z value should be in the range of 0x00000000 <= \a z < 0x00FFFFFF in the case of non-antialiased frame buffer. For an antialiased + * frame buffer, the \a z value should be in the compressed 16-bit format (0x00000000 <= \a z <= 0x0000FFFF), and the poke will affect all 3 + * subsamples of a pixel. + * + * \param[in] x coordinate, in pixels; must be 0 - 639 inclusive + * \param[in] y coordinate, in lines; must be 0 - 527 inclusive + * \param[in] z value to write at position \a x,\a y in the EFB + * + * \return none + */ +void GX_PokeZ(u16 x,u16 y,u32 z); + +/*! + * \fn void GX_PeekZ(u16 x,u16 y,u32 *z) + * \brief Allows the CPU to read a z value directly from the Embedded Frame Buffer (EFB) at position x,y. + * + * \details The z value is raw integer value from the Z buffer. + * + * \note The value range is 24-bit when reading from non-antialiased frame buffer. When reading from an antialiased frame buffer, subsample + * 0 is read and returned. The value will be compressed 16-bit form in this case. + * + * \param[in] x coordinate, in pixels; must be 0 - 639 inclusive + * \param[in] y coordinate, in lines; must be 0 - 527 inclusive + * \param[out] z pointer to a returned Z value + * + * \return none + */ +void GX_PeekZ(u16 x,u16 y,u32 *z); + +/*! + * \fn void GX_PokeZMode(u8 comp_enable,u8 func,u8 update_enable) + * \brief Sets the Z-buffer compare mode when writing the Embedded Frame Buffer (EFB). + * + * \details The result of the Z compare is used to conditionally write color values to the EFB. The Z value will be updated according to the + * result of the compare if Z update is enabled. + * + * When \a comp_enable is set to GX_DISABLE, poke Z buffering is disabled and the Z buffer is not updated. The \a func parameter determines the + * comparison that is performed. In the comparison function, the poked Z value is on the left while the Z value from the Z buffer is on the + * right. If the result of the comparison is false, the poked Z value is discarded. The parameter \a update_enable determines whether or not the + * Z buffer is updated with the new Z value after a comparison is performed. + * + * \note The normal rendering Z mode (set by GX_SetZMode()) is not affected by this function.

+ * + * \note Even if update_enable is GX_FALSE, compares may still be enabled. + * + * \param[in] comp_enable enables comparisons with source and destination Z values if GX_TRUE + * \param[in] func \ref compare function to use + * \param[in] update_enable enables Z-buffer updates when GX_TRUE + * + * \return none + */ +void GX_PokeZMode(u8 comp_enable,u8 func,u8 update_enable); + +/*! + * \fn u32 GX_GetTexObjFmt(GXTexObj *obj) + * \brief Returns the texture format described by texture object \a obj. + * + * \note Use GX_InitTexObj() or GX_InitTexObjCI() to initialize the texture format. + * + * \param[in] obj ptr to a texture object + * + * \return texture format of the given texture object + */ +u32 GX_GetTexObjFmt(GXTexObj *obj); + +/*! + * \fn u32 GX_GetTexObjMipMap(GXTexObj *obj) + * \brief Returns the texture mipmap enable described by texture object \a obj. + * + * \note Use GX_InitTexObj() or GX_InitTexObjCI() to initialize the texture mipmap enable. + * + * \param[in] obj ptr to a texture object + * + * \return mipmap enable flag + */ +u32 GX_GetTexObjMipMap(GXTexObj *obj); + +/*! + * \fn void* GX_GetTexObjUserData(GXTexObj *obj) + * \brief Used to get a pointer to user data from the \ref GXTexObj structure. + * + * \details You can use this function to retrieve private data structures from the texture object. This pointer is set using GX_InitTexObjUserData(). + * + * \param[in] obj ptr to object to read data from + * + * \return Pointer to user data. + */ +void* GX_GetTexObjUserData(GXTexObj *obj); + +/*! + * \fn void* GX_GetTexObjData(GXTexObj *obj) + * \brief Used to get a pointer to texture data from the \ref GXTexObj structure. + * + * \note The returned pointer is a physical address. + * + * \param[in] obj ptr to a texture object + * + * \return Physical pointer to texture data. + */ +void* GX_GetTexObjData(GXTexObj *obj); + +/*! + * \fn u8 GX_GetTexObjWrapS(GXTexObj* obj) + * \brief Returns the texture wrap s mode described by texture object \a obj. + * + * \note Use GX_InitTexObj() or GX_InitTexObjCI() to initialize the texture wrap s mode. + * + * \param[in] obj ptr to a texture object + * + * \return wrap s mode + */ +u8 GX_GetTexObjWrapS(GXTexObj* obj); + +/*! + * \fn u8 GX_GetTexObjWrapT(GXTexObj* obj) + * \brief Returns the texture wrap t mode described by texture object \a obj. + * + * \note Use GX_InitTexObj() or GX_InitTexObjCI() to initialize the texture wrap t mode. + * + * \param[in] obj ptr to a texture object + * + * \return wrap t mode + */ +u8 GX_GetTexObjWrapT(GXTexObj* obj); + +/*! + * \fn u16 GX_GetTexObjHeight(GXTexObj* obj) + * \brief Returns the texture height described by texture object \a obj. + * + * \note Use GX_InitTexObj() or GX_InitTexObjCI() to initialize the texture height. + * + * \param[in] obj ptr to a texture object + * + * \return texture height + */ +u16 GX_GetTexObjHeight(GXTexObj* obj); + +/*! + * \fn u16 GX_GetTexObjWidth(GXTexObj* obj) + * \brief Returns the texture width described by texture object \a obj. + * + * \note Use GX_InitTexObj() or GX_InitTexObjCI() to initialize the texture width. + * + * \param[in] obj ptr to a texture object + * + * \return texture width + */ +u16 GX_GetTexObjWidth(GXTexObj* obj); + +/*! + * \fn void GX_GetTexObjAll(GXTexObj* obj, void** image_ptr, u16* width, u16* height, u8* format, u8* wrap_s, u8* wrap_t, u8* mipmap); + * \brief Returns the parameters described by a texture object. Texture objects are used to describe all the parameters associated with a texture, including size, format, wrap modes, filter modes, etc. Texture objects are initialized using either GX_InitTexObj() or, for color index format textures, GX_InitTexObjCI(). + * + * \param[in] obj ptr to a texture object + * \param[out] image_ptr Returns a physical pointer to the image data for a texture. + * \param[out] width Returns the width of the texture or LOD 0 for mipmaps + * \param[out] height Returns the height of the texture or LOD 0 for mipmaps + * \param[out] format Returns the texel format + * \param[out] mipmap Returns the mipmap enable flag. + * + * \return none + */ +void GX_GetTexObjAll(GXTexObj* obj, void** image_ptr, u16* width, u16* height, u8* format, u8* wrap_s, u8* wrap_t, u8* mipmap); + +/*! + * \fn u32 GX_GetTexBufferSize(u16 wd,u16 ht,u32 fmt,u8 mipmap,u8 maxlod) + * \brief Returns the amount of memory in bytes needed to store a texture of the given size and \a fmt. + * + * \details If the \a mipmap flag is GX_TRUE, then the size of buffer needed for the mipmap pyramid up to \a maxlod will be returned. + * \a maxlod will be clamped to the number of LODs possible given the map \a wd and \a ht. For mipmaps, \a wd and \a ht must be a power of two. + * + * \note This function takes into account the tiling and padding requirements of the GameCube's native texture format. The resulting size can be used + * along with memalign() to allocate texture buffers (see GX_CopyTex()). + * + * \param[in] wd width of the texture in texels + * \param[in] ht height of the texture in texels + * \param[in] fmt format of the texture; use GX_TexFmt() or GX_CITexFmt() to get it + * \param[in] mipmap flag indicating whether or not the texture is a mipmap + * \param[in] maxlod if \a mipmap is \a GX_TRUE, texture size will include mipmap pyramid up to this value + * + * \return number of bytes needed for the texture, including tile padding + */ +u32 GX_GetTexBufferSize(u16 wd,u16 ht,u32 fmt,u8 mipmap,u8 maxlod); + +/*! + * \fn void GX_InvalidateTexAll() + * \brief Invalidates the current caches of the Texture Memory (TMEM). + * + * \details It takes about 512 GP clocks to invalidate all the texture caches. + * + * \note Preloaded textures (see GX_PreloadEntireTexture()) are not affected. + * + * \return none + */ +void GX_InvalidateTexAll(); + +/*! + * \fn void GX_InvalidateTexRegion(GXTexRegion *region) + * \brief Invalidates the texture cache in Texture Memory (TMEM) described by \a region. + * + * \details This function should be called when the CPU is used to modify a texture in main memory, or a new texture is loaded into main memory that + * is possibly cached in the texture region. + * + * \note In reality, this function invalidates the cache tags, forcing the texture cache to load new data. Preloaded textures (see + * GX_PreloadEntireTexture()) do not use the tags.

+ * + * \note The texture hardware can invalidate 4 tags each GP clock. Each tag represents a superline or 512B of TMEM. Therefore, it takes 16 + * GP clocks to invalidate a 32KB texture region. + * + * \param[in] region ptr to GXTexRegion object + * + * \return none + */ +void GX_InvalidateTexRegion(GXTexRegion *region); + +/*! + * \fn void GX_InitTexCacheRegion(GXTexRegion *region,u8 is32bmipmap,u32 tmem_even,u8 size_even,u32 tmem_odd,u8 size_odd) + * \brief Initializes a texture memory (TMEM) region object for cache. + * + * \details The region is allocated by the application and can be used as a cache. An application can create many region objects and some of them can + * overlap; however, no two overlapping regions can be active at the same time. + * + * The possible sizes of a TMEM cache region are 32K, 128K or 512K. + * + * \note For pre-loaded textures, the region must be defined by using GX_InitTexPreloadRegion().

+ * + * \note GX_Init() creates default texture regions, so it is not necessary for the application to use this function unless a different Texture Memory + * configuration is desired. In that case, the application should also define a region allocator using GX_SetTexRegionCallback().

+ * + * \note The function GX_InvalidateTexRegion() can be used to force the texture in main memory associated with this region to be reloaded. This will be + * necessary whenever the texture data in main memory changes. You may invalidate all cached regions at once using GX_InvalidateTexAll(). + * + * \param[in] region ptr to a GXTexRegion struct + * \param[in] is32bmipmap should be set to GX_TRUE to interpret parameters according to the 32b mipmap meaning. + * \param[in] tmem_even base ptr in TMEM for even LODs; must be multiple of 2KB + * \param[in] size_even even \ref texcachesize other than GX_TEXCACHE_NONE + * \param[in] tmem_odd base ptr in TMEM for odd LODs; must be multiple of 2KB + * \param[in] size_odd odd \ref texcachesize other than GX_TEXCACHE_NONE + * + * \return none + */ +void GX_InitTexCacheRegion(GXTexRegion *region,u8 is32bmipmap,u32 tmem_even,u8 size_even,u32 tmem_odd,u8 size_odd); + +/*! + * \fn void GX_InitTexPreloadRegion(GXTexRegion *region,u32 tmem_even,u32 size_even,u32 tmem_odd,u32 size_odd) + * \brief Initializes a Texture Memory (TMEM) region object for preloading. + * + * \details The region is allocated in TMEM by the application and can be used only as a pre-loaded buffer. Cache regions must be allocated + * by using GX_InitTexCacheRegion(). For pre-loaded textures, the size of the region must match the size of the texture. An application can + * create many region objects and some of them can overlap; however, no two overlapping regions can be active at the same time. + * + * \note The maximum size of a region is 512K. + * + * \warning GX_Init() creates no region for preloading, so the application should allocate appropriate regions if preloading is necessary. It + * is also required to create cache regions and its allocator by using GX_InitTexCacheRegion() and GX_SetTexRegionCallback(), otherwise new + * cache regions may overwrite the preloaded areas. (Alternatively, if you do not use any color-index textures, you may preload textures into + * the portion of texture memory normally allocated to color-index usage by the default allocator.) + * + * \param[in] region ptr to a GXTexRegion struct + * \param[in] tmem_even base ptr in TMEM for even LODs; must be 32B aligned + * \param[in] size_even size of the even cache, in bytes; should be multiple of 32B + * \param[in] tmem_odd base ptr in TMEM for odd LODs; must be 32B aligned + * \param[in] size_odd size of the odd cache, in bytes; should be multiple of 32B + * + * \return none + */ +void GX_InitTexPreloadRegion(GXTexRegion *region,u32 tmem_even,u32 size_even,u32 tmem_odd,u32 size_odd); + +/*! + * \fn void GX_InitTexObj(GXTexObj *obj,void *img_ptr,u16 wd,u16 ht,u8 fmt,u8 wrap_s,u8 wrap_t,u8 mipmap) + * \brief Used to initialize or change a texture object for non-color index textures. + * + * \details Texture objects are used to describe all the parameters associated with a texture, including size, format, wrap modes, filter modes, + * etc. It is the application's responsibility to provide memory for a texture object. Once initialized, a texture object can be associated with + * one of eight active texture IDs using GX_LoadTexObj(). + * + * \note To initialize a texture object for color index format textures, use GX_InitTexObjCI().

+ * + * \note If the mipmap flag is GX_TRUE, then the texture is a mipmap and the texture will be trilerped. If the mipmap flag is GX_FALSE, the texture + * is not a mipmap and the texture will be bilerped. To override the filter modes and other mipmap controls, see GX_InitTexObjLOD(). + * + * \param[out] obj ptr to a texture object + * \param[in] img_ptr ptr to the image data for a texture, aligned to 32B + * \param[in] wd width of the texture, or LOD level 0 for mipmaps; max value is 1024; mipmaps must be a power of two + * \param[in] ht height of the texture, or LOD level 0 for mipmaps; max value is 1024; mipmaps must be a power of two + * \param[in] fmt \ref texfmt + * \param[in] wrap_s texture coordinate wrapping strategy in the S direction; use GX_CLAMP, GX_REPEAT or GX_MIRROR + * \param[in] wrap_t texture coordinate wrapping strategy in the T direction; use GX_CLAMP, GX_REPEAT or GX_MIRROR + * \param[in] mipmap trilinear filtering will be used if GX_TRUE, otherwise bilinear is used + * + * \return none + */ +void GX_InitTexObj(GXTexObj *obj,void *img_ptr,u16 wd,u16 ht,u8 fmt,u8 wrap_s,u8 wrap_t,u8 mipmap); + +/*! + * \fn void GX_InitTexObjCI(GXTexObj *obj,void *img_ptr,u16 wd,u16 ht,u8 fmt,u8 wrap_s,u8 wrap_t,u8 mipmap,u32 tlut_name) + * \brief Used to initialize or change a texture object when the texture is color index format. + * + * \details Texture objects are used to describe all the parameters associated with a texture, including size, format, wrap modes, filter modes, + * etc. It is the application's responsibility to provide memory for a texture object. Once initialized, a texture object can be associated with + * one of eight active texture IDs using GX_LoadTexObj(). + * + * \note If the \a mipmap flag is GX_TRUE, then the texture is a mipmap and the texture will be filtered using the GX_LIN_MIP_NEAR filter mode + * (color index mipmaps cannot use the GX_LIN_MIP_LIN or GX_NEAR_MIP_LIN mode). If the \a mipmap flag is GX_FALSE, the texture is not a mipmap + * and the texture will be bilerped. To override the filter modes and other mipmap controls, use GX_InitTexObjLOD(). Mipmap textures should + * set the width and height to a power of two, but mipmaps do not need to be square.

+ * + * \note Non-mipmap (planar) textures do not have to be a power of two. However, to use the GX_REPEAT or GX_MIRROR modes for \a wrap_s and \a wrap_t + * the width and height, respectively, must be a power of two.

+ * + * \note The \a tlut_name is used to indicate which texture lookup table (TLUT) to use for the index to color conversion. To load the TLUT into + * texture memory, use GX_LoadTlut(). + * + * \param[in] obj ptr to a texture object + * \param[in] img_ptr ptr to the image data for a texture, aligned to 32B + * \param[in] wd width of the texture, or LOD level 0 for mipmaps; max value is 1024; mipmaps must be a power of two + * \param[in] ht height of the texture, or LOD level 0 for mipmaps; max value is 1024; mipmaps must be a power of two + * \param[in] fmt \ref texfmt + * \param[in] wrap_s texture coordinate wrapping strategy in the S direction; use GX_CLAMP, GX_REPEAT or GX_MIRROR + * \param[in] wrap_t texture coordinate wrapping strategy in the T direction; use GX_CLAMP, GX_REPEAT or GX_MIRROR + * \param[in] mipmap if GX_TRUE, it is a mipmap texture, else it is a planar texture + * \param[in] tlut_name TLUT name to use for this texture; default texture configuration recognizes \ref tlutname + * + * \return none + */ +void GX_InitTexObjCI(GXTexObj *obj,void *img_ptr,u16 wd,u16 ht,u8 fmt,u8 wrap_s,u8 wrap_t,u8 mipmap,u32 tlut_name); + +/*! + * \fn void GX_InitTexObjTlut(GXTexObj *obj,u32 tlut_name) + * \brief Allows one to modify the TLUT that is associated with an existing texture object. + * + * \param[in] obj ptr to a texture object + * \param[in] tlut_name TLUT name to use for this texture; default texture configuration recognizes \ref tlutname + * + * \return none + */ +void GX_InitTexObjTlut(GXTexObj *obj,u32 tlut_name); + +/*! + * \fn void GX_InitTexObjData(GXTexObj *obj,void *img_ptr) + * \brief Allows one to modify the image data pointer for an existing texture object. + * + * \note The image format and size for the new data must agree with what they were when the texture object was first initialized using + * GX_InitTexObj() or GX_InitTexObjCI(). + * + * \param[in] obj ptr to a texture object + * \param[in] img_ptr ptr to the texture data in main memory + * + * \return none + */ +void GX_InitTexObjData(GXTexObj *obj,void *img_ptr); + +/*! + * \fn void GX_InitTexObjWrapMode(GXTexObj *obj,u8 wrap_s,u8 wrap_t) + * \brief Allows one to modify the texture coordinate wrap modes for an existing texture object. + * + * \param[in] obj ptr to a texture object + * \param[in] wrap_s texture coordinate wrapping strategy in the S direction; use GX_CLAMP, GX_REPEAT or GX_MIRROR + * \param[in] wrap_t texture coordinate wrapping strategy in the T direction; use GX_CLAMP, GX_REPEAT or GX_MIRROR + * + * \return none + */ +void GX_InitTexObjWrapMode(GXTexObj *obj,u8 wrap_s,u8 wrap_t); + +/*! + * \fn void GX_InitTexObjFilterMode(GXTexObj *obj,u8 minfilt,u8 magfilt) + * \brief Sets the filter mode for a texture. + * + * \details When the ratio of texels for this texture to pixels is not 1:1, the filter type for \a minfilt or \a magfilt is used. + * + * \param[in] obj texture object to set the filters for + * \param[in] minfilt filter mode to use when the texel/pixel ratio is >= 1.0; needs to be one of \ref texfilter. + * \param[in] magfilt filter mode to use when the texel/pixel ratio is < 1.0; needs to be \a GX_NEAR or \a GX_LINEAR + */ +void GX_InitTexObjFilterMode(GXTexObj *obj,u8 minfilt,u8 magfilt); + +/*! + * \fn void GX_InitTexObjMinLOD(GXTexObj *obj,f32 minlod) + * \brief Sets the minimum LOD for a given texture. + * + * \param[in] obj texture to set the minimum LOD for + * \param[in] minlod minimum LOD value; the hardware will use MAX(min_lod, lod); range is 0.0 to 10.0. + */ +void GX_InitTexObjMinLOD(GXTexObj *obj,f32 minlod); + +/*! + * void GX_InitTexObjMaxLOD(GXTexObj *obj,f32 maxlod) + * \brief Sets the maximum LOD for a given texture. + * + * \param[in] obj texture to set the maximum LOD for + * \param[in] maxlod maximum LOD value; the hardware will use MIN(max_lod, lod); range is 0.0 to 10.0. + */ +void GX_InitTexObjMaxLOD(GXTexObj *obj,f32 maxlod); + +/*! + * \fn void GX_InitTexObjLODBias(GXTexObj *obj,f32 lodbias) + * \brief Sets the LOD bias for a given texture. + * + * \details The LOD computed by the graphics hardware can be biased using this function. The \a lodbias is added to the computed lod and the + * result is clamped between the values given to GX_InitTexObjMinLOD() and GX_InitTexObjMaxLOD(). If \a GX_ENABLE is given to + * GX_InitTexObjBiasClamp(), the effect of \a lodbias will diminish as the polygon becomes more perpendicular to the view direction. + * + * \param[in] obj texture to set the LOD bias for + * \param[in] lodbias bias to add to computed LOD value + */ +void GX_InitTexObjLODBias(GXTexObj *obj,f32 lodbias); + +/*! + * \fn void GX_InitTexObjBiasClamp(GXTexObj *obj,u8 biasclamp) + * \brief Enables bias clamping for texture LOD. + * + * \details If \a biasclamp is \a GX_ENABLE, the sum of LOD and \a lodbias (given in GX_InitTexObjLODBias()) is clamped so that it is never + * less than the minimum extent of the pixel projected in texture space. This prevents over-biasing the LOD when the polygon is perpendicular + * to the view direction. + * + * \param[in] obj texture to set the bias clamp value for + * \param[in] biasclamp whether or not to enable the bias clamp + */ +void GX_InitTexObjBiasClamp(GXTexObj *obj,u8 biasclamp); + +/*! + * \fn void GX_InitTexObjEdgeLOD(GXTexObj *obj,u8 edgelod) + * \brief Changes LOD computing mode. + * + * \details When set to \a GX_ENABLE, the LOD is computed using adjacent texels; when \a GX_DISABLE, diagonal texels are used instead. This + * should be set to \a GX_ENABLE if you use bias clamping (see GX_InitTexObjBiasClamp()) or anisotropic filtering (GX_ANISO_2 or GX_ANISO_4 + * for GX_InitTexObjMaxAniso() argument). + * + * \param[in] obj texture to set the edge LOD for + * \param[in] edgelod mode to set LOD computation to + */ +void GX_InitTexObjEdgeLOD(GXTexObj *obj,u8 edgelod); + +/*! + * \fn void GX_InitTexObjMaxAniso(GXTexObj *obj,u8 maxaniso) + * \brief Sets the maximum anisotropic filter to use for a texture. + * + * \details Anisotropic filtering is accomplished by iterating the square filter along the direction of anisotropy to better approximate the + * quadralateral. This type of filtering results in sharper textures at the expense of multiple cycles per quad. The hardware will only use + * multiple cycles when necessary, and the maximum number of cycles is clamped by the \a maxaniso parameter, so setting \a maxaniso to + * \a GX_ANISO_2 will use at most 2 filter cycles per texture. + * + * \note These filter cycles are internal to the texture filter hardware and do not affect the available number of TEV stages. When setting + * \a maxaniso to \a GX_ANISO_2 or \a GX_ANISO_4, the \a minfilt parameter given to GX_InitTexObjFilterMode() should be set to + * \a GX_LIN_MIP_LIN. + * + * \param[in] obj texture to set the max anisotropy value to + * \param[in] maxaniso the maximum anistropic filter to use; must be one of \ref anisotropy + */ +void GX_InitTexObjMaxAniso(GXTexObj *obj,u8 maxaniso); + +/*! + * \fn GX_InitTexObjUserData(GXTexObj *obj,void *userdata) + * \brief Used to set a pointer to user data in the \ref GXTexObj structure. + * + * \details You can use this function to attach private data structures to the texture object. This pointer can be retrieved using GX_GetTexObjUserData(). + * + * \param[in] obj ptr to a texture object + * \param[in] userdata pointer to your data to attach to this texture + */ +void GX_InitTexObjUserData(GXTexObj *obj,void *userdata); + +/*! + * \fn void GX_LoadTexObj(GXTexObj *obj,u8 mapid) + * \brief Loads the state describing a texture into one of eight hardware register sets. + * + * \details Before this happens, the texture object \a obj should be initialized using GX_InitTexObj() or GX_InitTexObjCI(). The \a id parameter refers to + * the texture state register set. Once loaded, the texture can be used in any Texture Environment (TEV) stage using GX_SetTevOrder(). + * + * \note This function will call the functions set by GX_SetTexRegionCallback() (and GX_SetTlutRegionCallback() if the texture is color-index + * format) to obtain the texture regions associated with this texture object. These callbacks are set to default functions by GX_Init(). + * + * \warning If the texture is a color-index texture, you must load the associated TLUT (using GX_LoadTlut()) before calling GX_LoadTexObj(). + * + * \param[in] obj ptr to a texture object + * \param[in] mapid \ref texmapid, GX_TEXMAP0 to GX_TEXMAP7 only + * + * \return none + */ +void GX_LoadTexObj(GXTexObj *obj,u8 mapid); + +/*! + * \fn void GX_LoadTlut(GXTlutObj *obj,u32 tlut_name) + * \brief Copies a Texture Look-Up Table (TLUT) from main memory to Texture Memory (TMEM). + * + * \details The \a tlut_name parameter is the name of a pre-allocated area of TMEM. The callback function set by GX_SetTlutRegionCallback() converts + * the \a tlut_name into a \ref GXTlutRegion pointer. The TLUT is loaded in the TMEM region described by this pointer. The TLUT object \a obj describes the + * location of the TLUT in main memory, the TLUT format, and the TLUT size. \a obj should have been previously initialized using GX_InitTlutObj(). + * + * \note GX_Init() sets a default callback to convert \a tlut_names from \ref tlutname to \ref GXTlutRegion pointers. The default configuration of + * TMEM has 20 TLUTs, 16 each 256 entries by 16 bits, and 4 each 1k entries by 16 bits. This configuration can be overriden by calling + * GX_InitTlutRegion() and GX_InitTexCacheRegion() to allocate TMEM. Then you can define your own region allocation scheme using GX_SetTlutRegionCallback() + * and GX_SetTexRegionCallback(). + * + * \param[in] obj ptr to a TLUT object; application must allocate this + * \param[in] tlut_name \ref tlutname + * + * \return none + */ +void GX_LoadTlut(GXTlutObj *obj,u32 tlut_name); + +/*! + * \fn void GX_LoadTexObjPreloaded(GXTexObj *obj,GXTexRegion *region,u8 mapid) + * \brief Loads the state describing a preloaded texture into one of eight hardware register sets. + * + * \details Before this happens, the texture object \a obj should be initialized using GX_InitTexObj() or GX_InitTexObjCI(). The \a mapid parameter refers to + * the texture state register set. The texture should be loaded beforehand using GX_PreloadEntireTexture(). Once loaded, the texture can be used in any Texture Environment + * (TEV) stage using GX_SetTevOrder(). + * + * \note GX_Init() initially calls GX_SetTevOrder() to make a simple texture pipeline that associates GX_TEXMAP0 with GX_TEVSTAGE0, + * GX_TEXMAP1 with GX_TEVSTAGE1, etc.

+ * + * \note GX_LoadTexObjPreloaded() will not call the functions set by GX_SetTexRegionCallback() (and GX_SetTlutRegionCallback() if the texture is color + * index format) because the region is set explicitly; however, these callback functions must be aware of all regions that are preloaded. The default + * callbacks set by GX_Init() assume there are no preloaded regions. + * + * \param[in] obj ptr to a texture object + * \param[in] region ptr to a region object that describes an area of texture memory + * \param[in] mapid \ref texmapid for reference in a TEV stage + * + * \return none + */ +void GX_LoadTexObjPreloaded(GXTexObj *obj,GXTexRegion *region,u8 mapid); + +/*! + * \fn void GX_PreloadEntireTexture(GXTexObj *obj,GXTexRegion *region) + * \brief Loads a given texture from DRAM into the texture memory. + * + * \details Accesses to this texture will bypass the texture cache tag look-up and instead read the texels directly from texture memory. The + * texture region must be the same size as the texture (see GX_InitTexPreloadRegion()). + * + * \note This function loads the texture into texture memory, but to use it as a source for the Texture Environment (TEV) unit, you must first + * call GX_LoadTexObjPreloaded(). The default configuration (as set by GX_Init()) of texture memory has no preloaded regions, so you must install + * your own region allocator callbacks using GX_SetTexRegionCallback() and GX_SetTlutRegionCallback(). + * + * \param[in] obj ptr to object describing the texture to laod + * \param[in] region TMEM texture region to load the texture into + * + * \return none + */ +void GX_PreloadEntireTexture(GXTexObj *obj,GXTexRegion *region); + +/*! + * \fn void GX_InitTlutObj(GXTlutObj *obj,void *lut,u8 fmt,u16 entries) + * \brief Initializes a Texture Look-Up Table (TLUT) object. + * + * \details The TLUT object describes the location of the TLUT in main memory, its format and the number of entries. The TLUT in main + * memory described by this object can be loaded into a TLUT allocated in the texture memory using the GX_LoadTlut() function. + * + * \param[in] obj ptr to a TLUT object + * \param[in] lut ptr to look-up table data; must be 32B aligned + * \param[in] fmt format of the entries in the TLUt; GX_TL_IA8, GX_TL_RGB565 or GX_TL_RGB5A3 + * \param[in] entries number of entries in this table; maximum is 16,384 + * + * \return none + */ +void GX_InitTlutObj(GXTlutObj *obj,void *lut,u8 fmt,u16 entries); + +/*! + * \fn void GX_InitTlutRegion(GXTlutRegion *region,u32 tmem_addr,u8 tlut_sz) + * \brief Initializes a Texture Look-Up Table (TLUT) region object. + * + * \note GX_Init() creates default TLUT regions, so the application does not need to call this function unless a new configuration + * of Texture Memory is desired. In that case, the application should also set a new TLUT region allocator using GX_SetTlutRegionCallback(). + * + * \param[in] region obj ptr to a TLUT region struct; application must allocate this + * \param[in] tmem_addr location of the TLU in TMEM; ptr must be aligned to table size + * \param[in] tlut_sz size of the table + * + * \return none + */ +void GX_InitTlutRegion(GXTlutRegion *region,u32 tmem_addr,u8 tlut_sz); + +/*! + * \fn void GX_InitTexObjLOD(GXTexObj *obj,u8 minfilt,u8 magfilt,f32 minlod,f32 maxlod,f32 lodbias,u8 biasclamp,u8 edgelod,u8 maxaniso) + * \brief Sets texture Level Of Detail (LOD) controls explicitly for a texture object. + * + * \details It is the application's responsibility to provide memory for a texture object. When initializing a texture object using GX_InitTexObj() + * or GX_InitTexObjCI(), this information is set to default values based on the mipmap flag. This function allows the programmer to override those + * defaults. + * + * \note This function should be called after GX_InitTexObj() or GX_InitTexObjCI() for a particular texture object.

+ * + * \note Setting \a biasclamp prevents over-biasing the LOD when the polygon is perpendicular to the view direction.

+ * + * \note \a edgelod should be set if \a biasclamp is set or \a maxaniso is set to GX_ANISO_2 or GX_ANISO_4.

+ * + * \note Theoretically, there is no performance difference amongst various magnification/minification filter settings except GX_LIN_MIP_LIN filter with + * GX_TF_RGBA8 texture format which takes twice as much as other formats. However, this argument is assuming an environment where texture cache always + * hits. On real environments, you will see some performance differences by changing filter modes (especially minification filter) because cache-hit ratio + * changes according to which filter mode is being used. + * + * \param[in] obj ptr to a texture object + * \param[in] minfilt \ref texfilter to use when the texel/pixel ratio is >= 1.0 + * \param[in] magfilt \ref texfilter to use when the texel/pixel ratio is < 1.0; use only GX_NEAR or GX_LINEAR + * \param[in] minlod minimum LOD value from 0.0 - 10.0 inclusive + * \param[in] maxlod maximum LOD value from 0.0 - 10.0 inclusive + * \param[in] lodbias bias to add to computed LOD value + * \param[in] biasclamp if GX_ENABLE, clamp (LOD+lodbias) so that it is never less than the minimum extent of the pixel projected in texture space + * \param[in] edgelod if GX_ENABLE, compute LOD using adjacent texels + * \param[in] maxaniso \ref anisotropy to use + * + * \return none + */ +void GX_InitTexObjLOD(GXTexObj *obj,u8 minfilt,u8 magfilt,f32 minlod,f32 maxlod,f32 lodbias,u8 biasclamp,u8 edgelod,u8 maxaniso); + +/*! + * \fn void GX_SetTexCoordScaleManually(u8 texcoord,u8 enable,u16 ss,u16 ts) + * \brief Overrides the automatic texture coordinate scaling (based upon the associated map size) and lets one manually assign the scale values that + * are used for a given \a texcoord. + * + * \details Setting the \a enable parameter to GX_TRUE gives this behavior. The given \a texcoord retains these manual scale values until this function is + * called again. This function is also used to return a given texture coordinate back to normal, automatic scaling (by setting \a enable to GX_FALSE). + * + * \note A texture coordinate is scaled after being computed by the relevant texgen and before the actual texture lookup Normally, the scale value is set + * according to the texture map that is associated with the texcoord by GX_SetTevOrder(). However, there are certain cases where a different scale value is + * desirable. One such case is when using indirect tiled textures (see GX_SetTevIndTile()). + * + * \param[in] texcoord the \ref texcoordid being changed + * \param[in] enable if GX_TRUE, scale will be set manually, otherwise set automatically and \a ss and \a ts ignored + * \param[in] ss manual scale value for the S component of the coordinate + * \param[in] ts manual scale value for the T component of the coordinate + * + * \return none + */ +void GX_SetTexCoordScaleManually(u8 texcoord,u8 enable,u16 ss,u16 ts); + +/*! + * \fn void GX_SetTexCoordBias(u8 texcoord,u8 s_enable,u8 t_enable) + * \brief Sets the texture coordinate bias of a particular texture. + * + * \details Range bias is used with texture coordinates applied in GX_REPEAT wrap mode in order to increase the precision of texture coordinates + * that spread out over a large range. The texture coordinate values for a primitive are biased (by an equal integer) towards zero early in the + * graphics pipeline, thus preserving bits for calculation later in the pipe. Since the coordinates are repeated, this bias by an integer should + * have no effect upon the actual appearance of the texture. + * + * \note Texture coordinate range bias is something that is normally set automatically by the GX API (during GX_Begin()); however, when a texture + * coordinate is being scaled manually (by using GX_SetTexCoordScaleManually()), the associated bias is no longer modified by GX. Thus, + * GX_SetTexCoordBias() allows the bias to be changed while a texture coordinate is being manually controlled. + * + * \param[in] texcoord \ref texcoordid being changed + * \param[in] s_enable enable or disable range bias in the S direction with GX_ENABLE/GX_DISABLE + * \param[in] t_enable enable or disable range bias in the T direction with GX_ENABLE/GX_DISABLE + * + * \return none + */ +void GX_SetTexCoordBias(u8 texcoord,u8 s_enable,u8 t_enable); + +/*! + * \fn GXTexRegionCallback GX_SetTexRegionCallback(GXTexRegionCallback cb) + * \brief Sets the callback function called by GX_LoadTexObj() to obtain an available texture region. + * + * \details GX_Init() calls this function to set a default region-assignment policy. A programmer can override this default region assignment + * by implementing his own callback function. A pointer to the texture object and the texture map ID that are passed + * to GX_LoadTexObj() are provided to the callback function. + * + * \param[in] cb ptr to a function that takes a pointer to a GXTexObj and a \ref texmapid as a parameter and returns a pointer to a \ref GXTexRegion. + * + * \return pointer to the previously set callback + */ +GXTexRegionCallback GX_SetTexRegionCallback(GXTexRegionCallback cb); + +/*! + * \fn GXTlutRegionCallback GX_SetTlutRegionCallback(GXTlutRegionCallback cb) + * \brief Sets the callback function called by GX_LoadTlut() to find the region into which to load the TLUT. + * + * \details GX_LoadTexObj() will also call \a cb to obtain the Texture Look-up Table (TLUT) region when the texture forma + * is color-index. + * + * GX_Init() calls GX_SetTlutRegionCallback() to set a default TLUT index-to-region mapping. The name for the TLUT from the texture + * object is provided as an argument to the callback. The callback should return a pointer to the \ref GXTlutRegion for this TLUT index. + * + * \note For a given \a tlut_name (in the \ref GXTlutRegionCallback struct), \a cb must always return the same \ref GXTlutRegion; this is because + * GX_LoadTlut() will initialize data into the \ref GXTlutRegion which GX_LoadTexObj() will subsequently use. + * + * \param[in] cb ptr to a function that takes a u32 TLUT name as a parameter and returns a pointer to a \ref GXTlutRegion. + * + * \return pointer to the previously set callback + */ +GXTlutRegionCallback GX_SetTlutRegionCallback(GXTlutRegionCallback cb); + +/*! + * \fn void GX_InitLightPos(GXLightObj *lit_obj,f32 x,f32 y,f32 z) + * \brief Sets the position of the light in the light object. + * + * \details The GameCube graphics hardware supports local diffuse lights. The position of the light should be in the same space as a transformed + * vertex position (i.e., view space). + * + * \note Although the hardware doesn't support parallel directional diffuse lights, it is possible to get "almost parallel" lights by setting + * sufficient large values to position parameters (x, y and z) which makes the light position very far away from objects to be lit and all rays + * considered almost parallel.

+ * + * \note The memory for the light object must be allocated by the application; this function does not load any hardware registers directly. To + * load a light object into a hardware light, use GX_LoadLightObj() or GX_LoadLightObjIdx(). + * + * \param[in] lit_obj ptr to the light object + * \param[in] x X coordinate to place the light at + * \param[in] y Y coordinate to place the light at + * \param[in] z Z coordinate to place the light at + * + * \return none + */ +void GX_InitLightPos(GXLightObj *lit_obj,f32 x,f32 y,f32 z); + +/*! + * \fn void GX_InitLightColor(GXLightObj *lit_obj,GXColor col) + * \brief Sets the color of the light in the light object. + * + * \note The memory for the light object should be allocated by the application; this function does not load any hardware register directly. To + * load a light object into a hardware light, use GX_LoadLightObj() or GX_LoadLightObjIdx(). + * + * \param[in] lit_obj ptr to the light object + * \param[in] col color to set the light to + * + * \return none + */ +void GX_InitLightColor(GXLightObj *lit_obj,GXColor col); + +/*! + * \fn void GX_InitLightDir(GXLightObj *lit_obj,f32 nx,f32 ny,f32 nz) + * \brief Sets the direction of a light in the light object. + * + * \details This direction is used when the light object is used as spotlight or a specular light (see the attn_fn parameter of GX_SetChanCtrl()). + * + * \note The coordinate space of the light normal should be consistent with a vertex normal transformed by a normal matrix; i.e., it should be + * transformed to view space.

+ * + * \note This function does not set the direction of parallel directional diffuse lights. If you want parallel diffuse lights, you may put the light + * position very far from every objects to be lit. (See GX_InitLightPos() and GX_SetChanCtrl())

+ * + * \note The memory for the light object must be allocated by the application; this function does not load any hardware registers. To load a light + * object into a hardware light, use GX_LoadLightObj() or GX_LoadLightObjIdx(). + * + * \param[in] lit_obj ptr to the light object + * \param[in] nx X coordinate of the light normal + * \param[in] ny Y coordinate of the light normal + * \param[in] nz Z coordinate of the light normal + * + * \return none + */ +void GX_InitLightDir(GXLightObj *lit_obj,f32 nx,f32 ny,f32 nz); + +/*! + * \fn void GX_LoadLightObj(GXLightObj *lit_obj,u8 lit_id) + * \brief Loads a light object into a set of hardware registers associated with a \ref lightid. + * + * \details This function copies the light object data into the graphics FIFO through the CPU write-gather buffer mechanism. This guarantees that + * the light object is coherent with the CPU cache. + * + * \note The light object must have been initialized first using the necessary GX_InitLight*() functions.

+ * + * \note Another way to load a light object is with GX_LoadLightObjIdx(). + * + * \param[in] lit_obj ptr to the light object to load + * \param[in] lit_id \ref lightid to load this light into + * + * \return none + */ +void GX_LoadLightObj(GXLightObj *lit_obj,u8 lit_id); + +/*! + * \fn void GX_LoadLightObjIdx(u32 litobjidx,u8 litid) + * \brief Instructs the GP to fetch the light object at \a ltobjindx from an array. + * + * \details The light object is retrieved from the array to which GX_SetArray(GX_VA_LIGHTARRAY, ...) points. Then it loads the object into + * the hardware register associated with \ref lightid. + * + * \note Data flows directly from the array in DRAM to the GP; therefore, the light object data may not be coherent with the CPU's cache. The + * application is responsible for storing the light object data from the CPU cache (using DCStoreRange()) before calling GX_LoadLightObjIdx(). + * + * \param[in] litobjidx index to a light object + * \param[in] litid \ref lightid to load this light into + * + * \return none + */ +void GX_LoadLightObjIdx(u32 litobjidx,u8 litid); + +/*! + * \fn void GX_InitLightDistAttn(GXLightObj *lit_obj,f32 ref_dist,f32 ref_brite,u8 dist_fn) + * \brief Sets coefficients for distance attenuation in a light object. + * + * \details This function uses three easy-to-control parameters instead of k0, k1, and k2 in GX_InitLightAttn(). + * + * In this function, you can specify the brightness on an assumed reference point. The parameter \a ref_distance is distance between the light + * and the reference point. The parameter \a ref_brite specifies ratio of the brightness on the reference point. The value for \a ref_dist should + * be greater than 0 and that for \a ref_brite should be within 0 < \a ref_brite < 1, otherwise distance attenuation feature is turned off. The + * parameter \a dist_fn defines type of the brightness decreasing curve by distance; GX_DA_OFF turns distance attenuation feature off. + * + * \note If you want more flexible control, it is better to use GX_InitLightAttn() and calculate appropriate coefficients.

+ * + * \note This function sets parameters only for distance attenuation. Parameters for angular attenuation should be set by using + * GX_InitLightSpot() or GX_InitLightAttnA().

+ * + * \note This function does not load any hardware registers directly. To load a light object into a hardware light, use GX_LoadLightObj() or + * GX_LoadLightObjIdx(). + * + * \param[in] lit_obj ptr to a light object + * \param[in] ref_dist distance between the light and reference point + * \param[in] ref_brite brightness of the reference point + * \param[in] dist_fn \ref distattnfn to use + * + * \return none + */ +void GX_InitLightDistAttn(GXLightObj *lit_obj,f32 ref_dist,f32 ref_brite,u8 dist_fn); + +/*! + * \fn void GX_InitLightAttn(GXLightObj *lit_obj,f32 a0,f32 a1,f32 a2,f32 k0,f32 k1,f32 k2) + * \brief Sts coefficients used in the lighting attenuation calculation in a given light object. + * + * \details The parameters \a a0, \a a1, and \a a2 are used for angular (spotlight) attenuation. The coefficients \a k0, \a k1, and \a k2 are used for + * distance attenuation. The attenuation function is: + * + *       atten = clamp0(\a a2^2 * aattn^2 + \a a1 * aattn + \a a0) / (\a k2 * d^2 + \a k1 * d + \a k0) + * + * where aattn is the cosine of the angle between the light direction and the vector from the light position to the vertex, and d is + * the distance from the light position to the vertex when the channel attenuation function is GX_AF_SPOT. The light color will be + * multiplied by the atten factor when the attenuation function for the color channel referencing this light is set to GX_AF_SPOT + * (see GX_SetChanCtrl()). + * + * \note The convenience function GX_InitLightSpot() can be used to set the angle attenuation coefficents based on several spot light + * types. The convenience function GX_InitLightDistAttn() can be used to set the distance attenuation coefficients using one of several + * common attenuation functions.

+ * + * \note The convenience macro GX_InitLightShininess() can be used to set the attenuation parameters for specular lights.

+ * + * \note When the channel attenuation function is set to GX_AF_SPEC, the aattn and d parameter are equal to the dot product of the + * eye-space vertex normal and the half-angle vector set by GX_InitSpecularDir().

+ * + * \note This function does not load any hardware registers directly. To load a light object into a hardware light, use GX_LoadLightObj() + * or GX_LoadLightObjIdx(). + * + * \param[in] lit_obj ptr to a light object + * \param[in] a0 angle attenuation coefficient + * \param[in] a1 angle attenuation coefficient + * \param[in] a2 angle attenuation coefficient + * \param[in] k0 distance attenuation coefficient + * \param[in] k1 distance attenuation coefficient + * \param[in] k2 distance attenuation coefficient + * + * \return none + */ +void GX_InitLightAttn(GXLightObj *lit_obj,f32 a0,f32 a1,f32 a2,f32 k0,f32 k1,f32 k2); + +/*! + * \fn void GX_InitLightAttnA(GXLightObj *lit_obj,f32 a0,f32 a1,f32 a2) + * \brief Sets coefficients used in the lighting angle attenuation calculation in a given light object. + * + * \details The parameters \a a0, \a a1, and \a a2 are used for angular (spotlight) attenuation. The attenuation + * function is: + * + *       atten = clamp0(\a a2^2 * cos(theta)^2 + \a a1 * cos(theta) + \a a0) / (\a k2 * d^2 + \a k1 * d + \a k0) + * + * where cos(theta) is the cosine of the angle between the light normal and the vector from the light position to the vertex, and d is the distance + * from the light position to the vertex. The \a k0-\a 2 coefficients can be set using GX_InitLightAttnK(). You can set both the \a a0-\a 2 and \a k0-\a 2 coefficients + * can be set using GX_InitLightAttn(). The light color will be multiplied by the atten factor when the attenuation function for the color channel + * referencing this light is set to GX_AF_SPOT (see GX_SetChanCtrl()). + * + * \note The convenience function GX_InitLightSpot() can be used to set the angle attenuation coefficents based on several spot light types. The + * convenience function GX_InitLightDistAttn() can be used to set the distance attenuation coefficients using one of several common attenuation functions.

+ * + * \note This function does not load any hardware registers directly. To load a light object into a hardware light, use GX_LoadLightObj() or GX_LoadLightObjIdx(). + * + * \param[in] lit_obj ptr to a light object + * \param[in] a0 angle attenuation coefficient + * \param[in] a1 angle attenuation coefficient + * \param[in] a2 angle attenuation coefficient + * + * \return none + */ +void GX_InitLightAttnA(GXLightObj *lit_obj,f32 a0,f32 a1,f32 a2); + +/*! + * \fn void GX_InitLightAttnK(GXLightObj *lit_obj,f32 k0,f32 k1,f32 k2) + * \brief Sets coefficients used in the lighting distance attenuation calculation in a given light object. + * + * \details The coefficients \a k0, \a k1, and \a k2 are used for distance attenuation. The attenuation function is: + * + *       atten = clamp0(\a a2^2 * cos(theta)^2 + \a a1 * cos(theta) + \a a0) / (\a k2 * d^2 + \a k1 * d + \a k0) + * + * where cos(theta) is the cosine of the angle between the light normal and the vector from the light position to the vertex, and d is the distance + * from the light position to the vertex. The \a a0-\a 2 coefficients can be set using GX_InitLightAttnA(). You can set both the \a a0-\a 2 and \a k0-\a 2 coefficients + * can be set using GX_InitLightAttn(). The light color will be multiplied by the atten factor when the attenuation function for the color channel + * referencing this light is set to GX_AF_SPOT (see GX_SetChanCtrl()). + * + * \note The convenience function GX_InitLightSpot() can be used to set the angle attenuation coefficents based on several spot light types. The convenience + * function GX_InitLightDistAttn() can be used to set the distance attenuation coefficients using one of several common attenuation functions.

+ * + * \note Note that this function does not load any hardware registers directly. To load a light object into a hardware light, use GX_LoadLightObj() or + * GX_LoadLightObjIdx(). + * + * \param[in] lit_obj ptr to a light object + * \param[in] k0 distance attenuation coefficient + * \param[in] k1 distance attenuation coefficient + * \param[in] k2 distance attenuation coefficient + * + * \return none + */ +void GX_InitLightAttnK(GXLightObj *lit_obj,f32 k0,f32 k1,f32 k2); + +/*! + * \fn void GX_InitSpecularDirHA(GXLightObj *lit_obj,f32 nx,f32 ny,f32 nz,f32 hx,f32 hy,f32 hz) + * \brief Sets the direction and half-angle vector of a specular light in the light object. + * + * \details These vectors are used when the light object is used only as specular light. In contrast to GX_InitSpecularDir(), + * which caclulates half-angle vector automatically by assuming the view vector as (0, 0, 1), this function allows users to + * specify half-angle vector directly as input arguments. It is useful to do detailed control for orientation of highlights. + * + * \note This function does not load any hardware registers. To load a light object into a hardware light, use GX_LoadLightObj() + * or GX_LoadLightObjIdx().

+ * + * \note Other notes are similar to those described in GX_InitSpecularDir(). + * + * \param[in] lit_obj ptr to a light object + * \param[in] nx X coordinate of the light normal + * \param[in] ny Y coordinate of the light normal + * \param[in] nz Z coordinate of the light normal + * \param[in] hx X coordinate of half-angle + * \param[in] hy Y coordinate of half-angle + * \param[in] hz Z coordinate of half-angle + * + * \return none + */ +void GX_InitSpecularDirHA(GXLightObj *lit_obj,f32 nx,f32 ny,f32 nz,f32 hx,f32 hy,f32 hz); + +/*! + * \fn void GX_InitSpecularDir(GXLightObj *lit_obj,f32 nx,f32 ny,f32 nz) + * \brief Sets the direction of a specular light in the light object. + * + * \details This direction is used when the light object is used only as specular light. The coordinate space of the light normal + * should be consistent with a vertex normal transformed by a normal matrix; i.e., it should be transformed to view space. + * + * \note This function should be used if and only if the light object is used as specular light. One specifies a specular light in + * GX_SetChanCtrl() by setting the \ref attenfunc to GX_AF_SPEC. Furthermore, one must not use GX_InitLightDir() or + * GX_InitLightPos() to set up a light object which will be used as a specular light since these functions will destroy the information + * set by GX_InitSpecularDir(). In contrast to diffuse lights (including spotlights) that are considered local lights, a specular light + * is a parallel light (i.e. the specular light is infinitely far away such that all the rays of the light are parallel), and thus one + * can only specify directional information. + * + * \note This function does not load any hardware registers. To load a light object into a hardware light, use GX_LoadLightObj() + * or GX_LoadLightObjIdx(). + * + * \param[in] lit_obj ptr to a light object + * \param[in] nx X coordinate of the light normal + * \param[in] ny Y coordinate of the light normal + * \param[in] nz Z coordinate of the light normal + * + * \return none + */ +void GX_InitSpecularDir(GXLightObj *lit_obj,f32 nx,f32 ny,f32 nz); + +/*! + * \fn void GX_InitLightSpot(GXLightObj *lit_obj,f32 cut_off,u8 spotfn) + * \brief Sets coefficients for angular (spotlight) attenuation in light object. + * + * \details This function uses two easy-to-control parameters instead of \a a0, \a a1, and \a a2 on GX_InitLightAttn(). + * + * \details The parameter \a cut_off specifies cutoff angle of the spotlight by degree. The spotlight works while the angle between the ray for a vertex and + * the light direction given by GX_InitLightDir() is smaller than this cutoff angle. The value for \a cut_off should be within 0 < \a cut_off <= 90.0, otherwise + * given light object doesn't become a spotlight. + * + * The parameter \a spotfn defines type of the illumination distribution within cutoff angle. The value GX_SP_OFF turns spotlight feature off even if + * color channel setting is using GX_AF_SPOT (see GX_SetChanCtrl()). + * + * \note This function can generate only some kind of simple spotlights. If you want more flexible control, it is better to use GX_InitLightAttn() and calculate + * appropriate coefficients.

+ * + * \note This function sets parameters only for angular attenuation. Parameters for distance attenuation should be set by using GX_InitLightDistAttn() or + * GX_InitLightAttnK().

+ * + * \note This function does not load any hardware registers directly. To load a light object into a hardware light, use GX_LoadLightObj() or GX_LoadLightObjIdx(). + * + * \param[in] lit_obj ptr to a light object + * \param[in] cut_off cutoff angle of the spotlight, in degrees + * \param[in] spotfn \ref spotfn to use for this light + * + * \return none + */ +void GX_InitLightSpot(GXLightObj *lit_obj,f32 cut_off,u8 spotfn); + +u32 GX_ReadClksPerVtx(); +u32 GX_GetOverflowCount(); +u32 GX_ResetOverflowCount(); + +/*! + * \fn lwp_t GX_GetCurrentGXThread() + * \brief Returns the current GX thread. + * + * \details The current GX thread should be the thread that is currently responsible for generating graphics data. By default, + * the GX thread is the thread that invoked GX_Init(); however, it may be changed by calling GX_SetCurrentGXThread(). + * + * \note When graphics data is being generated in immediate mode (that is, the CPU FIFO = GP FIFO, and the GP is actively consuming + * data), the high watermark may be triggered. When this happens, the high watermark interrupt handler will suspend the GX thread, thus + * preventing any further graphics data from being generated. The low watermark interrupt handler will resume the thread. + * + * \return the current GX thread + */ +lwp_t GX_GetCurrentGXThread(); + +/*! + * \fn lwp_t GX_SetCurrentGXThread() + * \brief Sets the current GX thread to the calling thread. + * + * \details The new thread should be the thread that will be responsible for generating graphics data. By default, the GX thread is + * the thread that invoked GX_Init(); however, it may be changed by calling this function. + * + * \note It is a programming error to change GX thread while the current GX thread is suspended by a high water mark interrupt. This + * indicates that you have two threads about to generate GX data.

+ * + * \note When graphics data is being generated in immediate mode (that is, the CPU FIFO = GP FIFO, and the GP is actively consuming + * data), the high watermark may be triggered. When this happens, the high watermark interrupt handler will suspend the GX thread, thus + * preventing any further graphics data from being generated. The low watermark interrupt handler will resume the thread. + * + * \return the previous GX thread ID + */ +lwp_t GX_SetCurrentGXThread(); + +/*! + * \fn void GX_RestoreWriteGatherPipe() + * \brief Restores the write-gather pipe. + * + * \details The CPU fifo that was attached at the time GX_RedirectWriteGatherPipe() was called will be re-attached. If there is data pending + * in the write gather pipe (e.g. if the amount of data written was not a multiple of 32 bytes), the data will be padded with zeroes and + * flushed out. + * + * \warning This function must be called between successive calls to GX_RedirectWriteGatherPipe(). + * + * \return none + */ +void GX_RestoreWriteGatherPipe(); + +/*! + * \fn void GX_SetGPMetric(u32 perf0,u32 perf1) + * \brief Sets two performance metrics to measure in the GP. + * + * \details perf0 and perf1 are set to measure. The initial metrics measured are GX_PERF0_NONE and GX_PERF1_NONE, which return counts of zero + * for the first call to GX_ReadGPMetric(). + * + * Each performance counter has a unique set of events or ratios that it can count. In some cases the same metric can be counted using both + * counters, for example GX_PERF0_VERTICES and GX_PERF1_VERTICES. Ratios (the metric name ends in _RATIO) are multiplied by + * 1000 (1000 = all misses/clips, etc., 0 = no misses/clips, etc.). + * + * \note GX_ReadGPMetric() and GX_ClearGPMetric() can be used in the callback associated with the draw sync interrupt (see GX_SetDrawSyncCallback()). + * This function should not be used in the draw sync callback because it will insert tokens in the GP command stream at random times. + * + * \warning This function reads results from CPU-accessible registers in the GP, therefore, this command must not be used in a display list. In + * addition, the performance counters in some cases are triggered by sending tokens through the Graphics FIFO to the GP. This implies that + * the function should only be used in immediate mode (when the Graphics FIFO is connected to the CPU and the GP at the same time). It may + * also be necessary to send a draw sync token using GX_SetDrawSync() or call GX_SetDrawDone() after GX_ReadGPMetric() to ensure that the + * state has actually been processed by the GP. + * + * \param[in] perf0 \ref perf0metrics to measure + * \param[in] perf1 \ref perf1metrics to measure + * + * \returns none + */ +void GX_SetGPMetric(u32 perf0,u32 perf1); + +/*! + * \fn void GX_ClearGPMetric() + * \brief Clears the two virtual GP performance counters to zero. + * + * \note The counter's function is set using GX_SetGPMetric(); the counter's value is read using GX_ReadGPMetric(). Consult these for more details. + * + * \warning This function resets CPU accessible counters, so it should not be used in a display list. + * + * \return none + */ +void GX_ClearGPMetric(); + +/*! + * \fn void GX_InitXfRasMetric() + * \brief Initialize the transformation unit (XF) rasterizer unit (RAS) to take performance measurements. + * + * \warning This function should be avoided; use the GP performance metric functions instead. + * + * \return none + */ +void GX_InitXfRasMetric(); + +/*! + * \fn void GX_ReadXfRasMetric(u32 *xfwaitin,u32 *xfwaitout,u32 *rasbusy,u32 *clks) + * \brief Read performance metric values from the XF and RAS units. + * + * \warning This function should be avoided; use the GP performance metric functions instead.

+ * + * \warning The parameters for this function are a best guess based on names and existing code. + * + * \param[out] xfwaitin Number of clocks the XF has waited for data to arrive? + * \param[out] xfwaitout Number of clocks the XF has waited to push finished data down? + * \param[out] rasbusy Number of clocks the RAS has spent being busy? + * \param[out] clks Clocks that have passed since last count reset? + * + * \return none + */ +void GX_ReadXfRasMetric(u32 *xfwaitin,u32 *xfwaitout,u32 *rasbusy,u32 *clks); + +/*! + * \fn void GX_ClearVCacheMetric() + * \brief Clears the Vertex Cache performance counter. + * + * \details This function clears the performance counter by sending a special clear token via the Graphics FIFO. + * + * \note To set the metric for the counter, call GX_SetVCacheMetric(); to read the counter value, call GX_ReadVCacheMetric(). + * + * \return none + */ +void GX_ClearVCacheMetric(); + +/*! + * \fn void GX_ReadVCacheMetric(u32 *check,u32 *miss,u32 *stall) + * \brief Returns Vertex Cache performance counters. + * + * \details Each call to this function resets the counter to zero. GX_SetVCacheMetric() sets the metric to be measured by + * the Vertex Cache performance counter. + * + * \warning This function reads CPU-accessible registers in the GP and so should not be called in a display list. + * + * \param[out] check total number of accesses to the vertex cache + * \param[out] miss total number of cache misses to the vertex cache + * \param[out] stall number of GP clocks that the vertex cache was stalled + * + * \return none + */ +void GX_ReadVCacheMetric(u32 *check,u32 *miss,u32 *stall); + +/*! + * \fn void GX_SetVCacheMetric(u32 attr) + * \brief Sets the metric the Vertex Cache performance counter will measure. + * + * \details It is possible to monitor a particular attribute or all attributes using \a attr. + * + * \note To clear the counter, call GX_ClearVCacheMetric(); to read the counter value, call GX_ReadVCacheMetric(). + * + * \param[in] attr \ref vcachemetrics to measure + * + * \return none + */ +void GX_SetVCacheMetric(u32 attr); + +/*! + * \fn void GX_GetGPStatus(u8 *overhi,u8 *underlow,u8 *readIdle,u8 *cmdIdle,u8 *brkpt) + * \brief Reads the current status of the GP. + * + * \details \a overhi and \a underlow will indicate whether or not the watermarks have been reached. If the CPU and GP FIFOs + * are the same, then \a overhi will indicate whether or not the current GX thread is suspended. The value of \a brkpt can be + * used to determine if a breakpoint is in progress (i.e. GP reads are suspended; they are resumed by a call to + * GX_DisableBreakPt()). A callback can also be used to notify your application that the break point has been reached. (see + * GX_SetBreakPtCallback()) + * + * \param[out] overhi GX_TRUE if high watermark has been passed + * \param[out] underlow GX_TRUE if low watermark has been passed + * \param[out] readIdle GX_TRUE if the GP read unit is idle + * \param[out] cmdIdle GX_TRUE if all commands have been flushed to XF + * \param[out] brkpt GX_TRUE if FIFO has reached a breakpoint and GP reads have been stopped + * + * \return none + */ +void GX_GetGPStatus(u8 *overhi,u8 *underlow,u8 *readIdle,u8 *cmdIdle,u8 *brkpt); + +/*! + * \fn void GX_ReadGPMetric(u32 *cnt0,u32 *cnt1) + * \brief Returns the count of the previously set performance metrics. + * + * \note The performance metrics can be set using GX_SetGPMetric(); the counters can be cleared using GX_ClearGPMetric().

+ * + * \note GX_ReadGPMetric() and GX_ClearGPMetric() can be used in the callback associated with the draw sync interrupt (see GX_SetDrawSyncCallback()). + * The function GX_SetGPMetric() should not be used in the draw sync callback because it will insert tokens in the GP command stream at random times.

+ * + * \warning This function reads results from CPU-accessible registers in the GP, therefore, this command must not be used in a display list. It + * may also be necessary to send a draw sync token using GX_SetDrawSync() or GX_SetDrawDone() before GX_ReadGPMetric() is called to ensure that the + * state has actually been processed by the GP. + * + * \param[out] cnt0 current value of GP counter 0 + * \param[out] cnt1 current value of GP counter 1 + * + * \return none + */ +void GX_ReadGPMetric(u32 *cnt0,u32 *cnt1); + +/*! + * \fn void GX_ReadBoundingBox(u16 *top,u16 *bottom,u16 *left,u16 *right) + * \brief Returns the bounding box of pixel coordinates that are drawn in the Embedded Framebuffer (EFB). + * + * \details This function reads the bounding box values. GX_ClearBoundingBox() can be used reset the values of the bounding box. + * + * \note Since the hardware can only test the bounding box in quads (2x2 pixel blocks), the result of this function may contain error + * of plus or minus 1 pixel. Also because of this, left and top are always even-numbered and right and bottom + * are always odd-numbered. + * + * \param[out] top uppermost line in the bounding box + * \param[out] bottom lowest line in the bounding box + * \param[out] left leftmost pixel in the bounding box + * \param[out] right rightmost pixel in the bounding box + * + * \return none + */ +void GX_ReadBoundingBox(u16 *top,u16 *bottom,u16 *left,u16 *right); + +/*! + * \fn volatile void* GX_RedirectWriteGatherPipe(void *ptr) + * \brief Temporarily points the CPU's write-gather pipe at a new location. + * + * \details After calling this function, subsequent writes to the address returned by this function (or the WGPipe union) + * will be gathered and sent to a destination buffer. The write pointer is automatically incremented by the GP. The write + * gather pipe can be restored by calling GX_RestoreWriteGatherPipe(). This function cannot be called between a + * GX_Begin()/GX_End() pair. + * + * \note The destination buffer, referred to by \a ptr, must be 32 byte aligned. The amount of data written should + * also be 32-byte aligned. If it is not, zeroes will be added to pad the destination buffer to 32 bytes. No part of the + * destination buffer should be modified inside the CPU caches - this may introduce cache incoherency problems.

+ * + * \note The write gather pipe is one of the fastest ways to move data out of the CPU (the other being the locked cache DMA). + * In general, you are compute-bound when sending data from the CPU.

+ * + * \note This function is cheaper than trying to create a fake CPU fifo around a destination buffer, which requires calls to + * GX_SetCPUFifo(), GX_InitFifoBase(), etc. This function performs very light weight state saves by assuming that the CPU and + * GP FIFOs never change. + * + * \warning No GX commands can be called until the write gather pipe is restored. You MUST call + * GX_RestoreWriteGatherPipe() before calling this function again, or else the final call to restore the pipe will fail. + * + * \param[in] ptr to destination buffer, 32-byte aligned + * + * \return real address of the write-gather "port". All writes to this address will be gathered by the CPU write gather pipe. + * You may also use the WGPipe union. If you do not use the WGPipe union, ensure that your local variable is volatile. + */ +volatile void* GX_RedirectWriteGatherPipe(void *ptr); + +/*! + * \def GX_InitLightPosv(lo,vec) + * \brief Sets the position of the light in the light object using a vector structure. + * + * \note The GameCube graphics hardware supports local diffuse lights. The position of the light should be in the same space as a + * transformed vertex position (i.e. view space).

+ * + * \note The memory for the light object must be allocated by the application; this function does not load any hardware registers directly. To + * load a light object into a hardware light, use GX_LoadLightObj() or GX_LoadLightObjIdx(). + * + * \param[in] lo ptr to the light object + * \param[in] vec struct or array of three values for the position + * + * \return none + */ +#define GX_InitLightPosv(lo,vec) \ + (GX_InitLightPos((lo), *(f32*)(vec), *((f32*)(vec)+1), *((f32*)(vec)+2))) + +/*! + * \def GX_InitLightDirv(lo,vec) + * \brief Sets the direction of a light in the light object using a vector structure. + * + * \details This direction is used when the light object is used as a spotlight or a specular light, see the \a attn_fn parameter of + * GX_SetChanCtrl(). + * + * \note The memory for the light object must be allocated by the application; this function does not load any hardware registers. To load a + * light object into a hardware light, use GX_LoadLightObj() or GX_LoadLightObjIdx().

+ * + * \note The coordinate space of the light normal should be consistent with a vertex normal transformed by a normal matrix; i.e., it should be + * transformed to view space.

+ * + * \note This function does not set the direction of parallel lights. + * + * \param[in] lo ptr to the light object + * \param[in] vec struct or array of three values for the direction + * + * \return none + */ +#define GX_InitLightDirv(lo,vec) \ + (GX_InitLightDir((lo), *(f32*)(vec), *((f32*)(vec)+1), *((f32*)(vec)+2))) + +/*! + * \def GX_InitSpecularDirv(lo,vec) + * \brief Sets the direction of a specular light in the light object using a vector. + * + * \details This direction is used when the light object is used only as specular light. + * + * \note The memory for the light object must be allocated by the application; this function does not load any hardware registers. To load a + * light object into a hardware light, use GX_LoadLightObj() or GX_LoadLightObjIdx().

+ * + * \note The coordinate space of the light normal should be consistent with a vertex normal transformed by a normal matrix; i.e., it should + * be transformed to view space. + * + * \warning This function should be used if and only if the light object is used as specular light. One specifies a specular light in + * GX_SetChanCtrl() by setting \a attn_fn to GX_AF_SPEC. Furthermore, one must not use GX_InitLightDir() or GX_InitLightPos() to + * set up a light object which will be used as a specular light since these functions will destroy the information set by GX_InitSpecularDir(). + * In contrast to diffuse lights (including spotlights) that are considered local lights, a specular light is a parallel light (i.e. the + * specular light is infinitely far away such that all the rays of the light are parallel), and thus one can only specify directional + * information. + * + * \param[in] lo ptr to the light object + * \param[in] vec struct or array of three values for the direction + * + * \return none + */ +#define GX_InitSpecularDirv(lo,vec) \ + (GX_InitSpecularDir((lo), *(f32*)(vec), *((f32*)(vec)+1), *((f32*)(vec)+2))) + +/*! + * \def GX_InitSpecularDirHAv(lo,vec0,vec1) + * \brief Sets the direction and half-angle vector of a specular light in the light object using a vector. + * + * \details These vectors are used when the light object is used only as specular light. + * + * \note The memory for the light object must be allocated by the application; this function does not load any hardware registers. To load a + * light object into a hardware light, use GX_LoadLightObj() or GX_LoadLightObjIdx().

+ * + * \note In contrast to GX_InitSpecularDirv(), which caclulates half-angle vector automatically by assuming the view vector as (0,0,1), this + * function allows users to specify half-angle vector directly as input arguments. It is useful to do detailed control for orientation of + * highlights.

+ * + * \note Other notes are similar to that described in GX_InitSpecularDirv(). + * + * \param[in] lo ptr to the light object + * \param[in] vec0 struct or array of three values for the direction + * \param[in] vec1 struct or array of three values for the half-angle + * + * \return none + */ +#define GX_InitSpecularDirHAv(lo,vec0,vec1) \ + (GX_InitSpecularDirHA((lo), \ + *(f32*)(vec0), *((f32*)(vec0)+1), *((f32*)(vec0)+2), \ + *(f32*)(vec1), *((f32*)(vec1)+1), *((f32*)(vec1)+2))) + +/*! + * \def GX_InitLightShininess(lobj, shininess) + * \brief Sets \a shininess of a per-vertex specular light. + * + * \details In reality, shininess is a property of the material being lit, not the light. However, in the Graphics Processor, the specular + * calculation is implemented by reusing the diffuse angle/distance attenuation function, so shininess is determined by the light attenuation + * parameters (see GX_InitLightAttn()). Note that the equation is attempting to approximate the function (N*H)^shininess. Since the attenuation + * equation is only a ratio of quadratics, a true exponential function is not possible. To enable the specular calculation, you must set the + * attenuation parameter of the lighting channel to GX_AF_SPEC using GX_SetChanCtrl(). + * + * \param[in] lobj ptr to the light object + * \param[in] shininess shininess parameter + * + * \return none + */ +#define GX_InitLightShininess(lobj, shininess) \ + (GX_InitLightAttn(lobj, 0.0F, 0.0F, 1.0F, \ + (shininess)/2.0F, 0.0F, \ + 1.0F-(shininess)/2.0F )) + +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif diff --git a/wii/libogc/include/ogc/gx_struct.h b/wii/libogc/include/ogc/gx_struct.h new file mode 100644 index 0000000000..107e7a7b72 --- /dev/null +++ b/wii/libogc/include/ogc/gx_struct.h @@ -0,0 +1,78 @@ +/*------------------------------------------------------------- + +gx_struct.h -- support header + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + + +#ifndef __GX_STRUCT_H__ +#define __GX_STRUCT_H__ + +/*! +\file gx_struct.h +\brief support header +*/ + +#include + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + + +/*! +\typedef struct _gx_rmodeobj GXRModeObj +\brief structure to hold the selected video and render settings +\param viTVMode mode and type of TV +\param fbWidth width of external framebuffer +\param efbHeight height of embedded framebuffer +\param xfbHeight height of external framebuffer +\param viXOrigin x starting point of first pixel to draw on VI +\param viYOrigin y starting point of first pixel to draw on VI +\param viWidth width of configured VI +\param viHeight height of configured VI +*/ +typedef struct _gx_rmodeobj { + u32 viTVMode; + u16 fbWidth; + u16 efbHeight; + u16 xfbHeight; + u16 viXOrigin; + u16 viYOrigin; + u16 viWidth; + u16 viHeight; + u32 xfbMode; + u8 field_rendering; + u8 aa; + u8 sample_pattern[12][2]; + u8 vfilter[7]; +} GXRModeObj; + +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif diff --git a/wii/libogc/include/ogc/ios.h b/wii/libogc/include/ogc/ios.h new file mode 100644 index 0000000000..c308d02345 --- /dev/null +++ b/wii/libogc/include/ogc/ios.h @@ -0,0 +1,65 @@ +/*------------------------------------------------------------- + +ios.h -- IOS control + +Copyright (C) 2008 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) +Hector Martin (marcan) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + +#ifndef __IOS_H__ +#define __IOS_H__ + +#if defined(HW_RVL) + +#include +#include + +#define IOS_EINVAL -0x3004 +#define IOS_EBADVERSION -0x3100 +#define IOS_ETOOMANYVIEWS -0x3101 +#define IOS_EMISMATCH -0x3102 + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +s32 __IOS_InitializeSubsystems(void); +s32 __IOS_ShutdownSubsystems(void); +s32 __IOS_LoadStartupIOS(void); +s32 __IOS_LaunchNewIOS(int version); +s32 IOS_GetPreferredVersion(void); +s32 IOS_ReloadIOS(int version); +s32 IOS_GetVersion(); +s32 IOS_GetRevision(); +s32 IOS_GetRevisionMajor(); +s32 IOS_GetRevisionMinor(); + +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif + +#endif diff --git a/wii/libogc/include/ogc/ipc.h b/wii/libogc/include/ogc/ipc.h new file mode 100644 index 0000000000..c65c44be19 --- /dev/null +++ b/wii/libogc/include/ogc/ipc.h @@ -0,0 +1,103 @@ +/*------------------------------------------------------------- + +ipc.h -- Interprocess Communication with Starlet + +Copyright (C) 2008 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) +Hector Martin (marcan) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + +#ifndef __IPC_H__ +#define __IPC_H__ + +#include + +#define IPC_HEAP -1 + +#define IPC_OPEN_NONE 0 +#define IPC_OPEN_READ 1 +#define IPC_OPEN_WRITE 2 +#define IPC_OPEN_RW (IPC_OPEN_READ|IPC_OPEN_WRITE) + +#define IPC_MAXPATH_LEN 64 + +#define IPC_OK 0 +#define IPC_EINVAL -4 +#define IPC_ENOHEAP -5 +#define IPC_ENOENT -6 +#define IPC_EQUEUEFULL -8 +#define IPC_ENOMEM -22 + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +typedef struct _ioctlv +{ + void *data; + u32 len; +} ioctlv; + +void __IPC_Reinitialize(void); + +typedef s32 (*ipccallback)(s32 result,void *usrdata); + +s32 iosCreateHeap(s32 size); +void* iosAlloc(s32 hid,s32 size); +void iosFree(s32 hid,void *ptr); + +void* IPC_GetBufferLo(); +void* IPC_GetBufferHi(); +void IPC_SetBufferLo(void *bufferlo); +void IPC_SetBufferHi(void *bufferhi); + +s32 IOS_Open(const char *filepath,u32 mode); +s32 IOS_OpenAsync(const char *filepath,u32 mode,ipccallback ipc_cb,void *usrdata); + +s32 IOS_Close(s32 fd); +s32 IOS_CloseAsync(s32 fd,ipccallback ipc_cb,void *usrdata); + +s32 IOS_Seek(s32 fd,s32 where,s32 whence); +s32 IOS_SeekAsync(s32 fd,s32 where,s32 whence,ipccallback ipc_cb,void *usrdata); +s32 IOS_Read(s32 fd,void *buf,s32 len); +s32 IOS_ReadAsync(s32 fd,void *buf,s32 len,ipccallback ipc_cb,void *usrdata); +s32 IOS_Write(s32 fd,const void *buf,s32 len); +s32 IOS_WriteAsync(s32 fd,const void *buf,s32 len,ipccallback ipc_cb,void *usrdata); + +s32 IOS_Ioctl(s32 fd,s32 ioctl,void *buffer_in,s32 len_in,void *buffer_io,s32 len_io); +s32 IOS_IoctlAsync(s32 fd,s32 ioctl,void *buffer_in,s32 len_in,void *buffer_io,s32 len_io,ipccallback ipc_cb,void *usrdata); +s32 IOS_Ioctlv(s32 fd,s32 ioctl,s32 cnt_in,s32 cnt_io,ioctlv *argv); +s32 IOS_IoctlvAsync(s32 fd,s32 ioctl,s32 cnt_in,s32 cnt_io,ioctlv *argv,ipccallback ipc_cb,void *usrdata); + +s32 IOS_IoctlvFormat(s32 hId,s32 fd,s32 ioctl,const char *format,...); +s32 IOS_IoctlvFormatAsync(s32 hId,s32 fd,s32 ioctl,ipccallback usr_cb,void *usr_data,const char *format,...); + +s32 IOS_IoctlvReboot(s32 fd,s32 ioctl,s32 cnt_in,s32 cnt_io,ioctlv *argv); +s32 IOS_IoctlvRebootBackground(s32 fd,s32 ioctl,s32 cnt_in,s32 cnt_io,ioctlv *argv); + +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif diff --git a/wii/libogc/include/ogc/irq.h b/wii/libogc/include/ogc/irq.h new file mode 100644 index 0000000000..2dae7bdc90 --- /dev/null +++ b/wii/libogc/include/ogc/irq.h @@ -0,0 +1,189 @@ +/*------------------------------------------------------------- + +irq.h -- Interrupt subsystem + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + + +-------------------------------------------------------------*/ + + +#ifndef __IRQ_H__ +#define __IRQ_H__ + +/*! \file irq.h +\brief Interrupt subsystem + +*/ + +#include +#include "context.h" + +#define IM_NONE (0xffffffff) +#define IRQ_MEM0 0 +#define IRQ_MEM1 1 +#define IRQ_MEM2 2 +#define IRQ_MEM3 3 +#define IRQ_MEMADDRESS 4 +#define IRQ_DSP_AI 5 +#define IRQ_DSP_ARAM 6 +#define IRQ_DSP_DSP 7 +#define IRQ_AI 8 +#define IRQ_EXI0_EXI 9 +#define IRQ_EXI0_TC 10 +#define IRQ_EXI0_EXT 11 +#define IRQ_EXI1_EXI 12 +#define IRQ_EXI1_TC 13 +#define IRQ_EXI1_EXT 14 +#define IRQ_EXI2_EXI 15 +#define IRQ_EXI2_TC 16 +#define IRQ_PI_CP 17 +#define IRQ_PI_PETOKEN 18 +#define IRQ_PI_PEFINISH 19 +#define IRQ_PI_SI 20 +#define IRQ_PI_DI 21 +#define IRQ_PI_RSW 22 +#define IRQ_PI_ERROR 23 +#define IRQ_PI_VI 24 +#define IRQ_PI_DEBUG 25 +#define IRQ_PI_HSP 26 +#if defined(HW_RVL) +#define IRQ_PI_ACR 27 +#endif +#define IRQ_MAX 32 + +#define IRQMASK(irq) (0x80000000u>>irq) + +#define IM_MEM0 IRQMASK(IRQ_MEM0) +#define IM_MEM1 IRQMASK(IRQ_MEM1) +#define IM_MEM2 IRQMASK(IRQ_MEM2) +#define IM_MEM3 IRQMASK(IRQ_MEM3) +#define IM_MEMADDRESS IRQMASK(IRQ_MEMADDRESS) +#define IM_MEM (IM_MEM0|IM_MEM1|IM_MEM2|IM_MEM3|IM_MEMADDRESS) + +#define IM_DSP_AI IRQMASK(IRQ_DSP_AI) +#define IM_DSP_ARAM IRQMASK(IRQ_DSP_ARAM) +#define IM_DSP_DSP IRQMASK(IRQ_DSP_DSP) +#define IM_DSP (IM_DSP_AI|IM_DSP_ARAM|IM_DSP_DSP) + +#define IM_AI IRQMASK(IRQ_AI) + +#define IM_EXI0_EXI IRQMASK(IRQ_EXI0_EXI) +#define IM_EXI0_TC IRQMASK(IRQ_EXI0_TC) +#define IM_EXI0_EXT IRQMASK(IRQ_EXI0_EXT) +#define IM_EXI0 (IM_EXI0_EXI|IM_EXI0_TC|IM_EXI0_EXT) + +#define IM_EXI1_EXI IRQMASK(IRQ_EXI1_EXI) +#define IM_EXI1_TC IRQMASK(IRQ_EXI1_TC) +#define IM_EXI1_EXT IRQMASK(IRQ_EXI1_EXT) +#define IM_EXI1 (IM_EXI1_EXI|IM_EXI1_TC|IM_EXI1_EXT) + +#define IM_EXI2_EXI IRQMASK(IRQ_EXI2_EXI) +#define IM_EXI2_TC IRQMASK(IRQ_EXI2_TC) +#define IM_EXI2 (IM_EXI2_EXI|IM_EXI2_TC) +#define IM_EXI (IM_EXI0|IM_EXI1|IM_EXI2) + +#define IM_PI_CP IRQMASK(IRQ_PI_CP) +#define IM_PI_PETOKEN IRQMASK(IRQ_PI_PETOKEN) +#define IM_PI_PEFINISH IRQMASK(IRQ_PI_PEFINISH) +#define IM_PI_SI IRQMASK(IRQ_PI_SI) +#define IM_PI_DI IRQMASK(IRQ_PI_DI) +#define IM_PI_RSW IRQMASK(IRQ_PI_RSW) +#define IM_PI_ERROR IRQMASK(IRQ_PI_ERROR) +#define IM_PI_VI IRQMASK(IRQ_PI_VI) +#define IM_PI_DEBUG IRQMASK(IRQ_PI_DEBUG) +#define IM_PI_HSP IRQMASK(IRQ_PI_HSP) +#if defined(HW_DOL) +#define IM_PI (IM_PI_CP|IM_PI_PETOKEN|IM_PI_PEFINISH|IM_PI_SI|IM_PI_DI|IM_PI_RSW|IM_PI_ERROR|IM_PI_VI|IM_PI_DEBUG|IM_PI_HSP) +#elif defined(HW_RVL) +#define IM_PI_ACR IRQMASK(IRQ_PI_ACR) +#define IM_PI (IM_PI_CP|IM_PI_PETOKEN|IM_PI_PEFINISH|IM_PI_SI|IM_PI_DI|IM_PI_RSW|IM_PI_ERROR|IM_PI_VI|IM_PI_DEBUG|IM_PI_HSP|IM_PI_ACR) +#endif + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + + +/*! \typedef void (*raw_irq_handler_t)(u32 irq,void *ctx) +\brief function pointer typedef for the interrupt handler callback +\param[in] irq interrupt number of triggered interrupt. +\param[in] ctx pointer to the user data. +*/ +typedef void (*raw_irq_handler_t)(u32 irq,void *ctx); + + +/*! \fn raw_irq_handler_t IRQ_Request(u32 nIrq,raw_irq_handler_t pHndl,void *pCtx) +\brief Register an interrupt handler. +\param[in] nIrq interrupt number to which to register the handler +\param[in] pHndl pointer to the handler callback function which to call when interrupt has triggered +\param[in] pCtx pointer to user data to pass with, when handler is called + +\return Old interrupt handler, else NULL +*/ +raw_irq_handler_t IRQ_Request(u32 nIrq,raw_irq_handler_t pHndl,void *pCtx); + + +/*! \fn raw_irq_handler_t IRQ_Free(u32 nIrq) +\brief Free an interrupt handler. +\param[in] nIrq interrupt number for which to free the handler + +\return Old interrupt handler, else NULL +*/ +raw_irq_handler_t IRQ_Free(u32 nIrq); + + +/*! \fn raw_irq_handler_t IRQ_GetHandler(u32 nIrq) +\brief Get the handler from interrupt number +\param[in] nIrq interrupt number for which to retrieve the handler + +\return interrupt handler, else NULL +*/ +raw_irq_handler_t IRQ_GetHandler(u32 nIrq); + + +/*! \fn u32 IRQ_Disable() +\brief Disable the complete IRQ subsystem. No interrupts will be served. Multithreading kernel fully disabled. + +\return Old state of the IRQ subsystem +*/ +u32 IRQ_Disable(void); + + +/*! \fn u32 IRQ_Restore(u32 level) +\brief Restore the IRQ subsystem with the given level. This is function should be used together with IRQ_Disable() +\param[in] level IRQ level to restore to. + +\return none +*/ +void IRQ_Restore(u32 level); + +void __MaskIrq(u32 nMask); +void __UnmaskIrq(u32 nMask); + +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif diff --git a/wii/libogc/include/ogc/isfs.h b/wii/libogc/include/ogc/isfs.h new file mode 100644 index 0000000000..584848c57d --- /dev/null +++ b/wii/libogc/include/ogc/isfs.h @@ -0,0 +1,70 @@ +#ifndef __ISFS_H__ +#define __ISFS_H__ + +#if defined(HW_RVL) + +#include + +#define ISFS_MAXPATH IPC_MAXPATH_LEN + +#define ISFS_OPEN_READ 0x01 +#define ISFS_OPEN_WRITE 0x02 +#define ISFS_OPEN_RW (ISFS_OPEN_READ | ISFS_OPEN_WRITE) + +#define ISFS_OK 0 +#define ISFS_ENOMEM -22 +#define ISFS_EINVAL -101 + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +typedef struct _fstats +{ + u32 file_length; + u32 file_pos; +} fstats; + +typedef s32 (*isfscallback)(s32 result,void *usrdata); + +s32 ISFS_Initialize(); +s32 ISFS_Deinitialize(); + +s32 ISFS_Open(const char *filepath,u8 mode); +s32 ISFS_OpenAsync(const char *filepath,u8 mode,isfscallback cb,void *usrdata); +s32 ISFS_Close(s32 fd); +s32 ISFS_CloseAsync(s32 fd,isfscallback cb,void *usrdata); +s32 ISFS_Delete(const char *filepath); +s32 ISFS_DeleteAsync(const char *filepath,isfscallback cb,void *usrdata); +s32 ISFS_ReadDir(const char *filepath,char *name_list,u32 *num); +s32 ISFS_ReadDirAsync(const char *filepath,char *name_list,u32 *num,isfscallback cb,void *usrdata); +s32 ISFS_CreateFile(const char *filepath,u8 attributes,u8 owner_perm,u8 group_perm,u8 other_perm); +s32 ISFS_CreateFileAsync(const char *filepath,u8 attributes,u8 owner_perm,u8 group_perm,u8 other_perm,isfscallback cb,void *usrdata); +s32 ISFS_Write(s32 fd,const void *buffer,u32 length); +s32 ISFS_WriteAsync(s32 fd,const void *buffer,u32 length,isfscallback cb,void *usrdata); +s32 ISFS_Read(s32 fd,void *buffer,u32 length); +s32 ISFS_ReadAsync(s32 fd,void *buffer,u32 length,isfscallback cb,void *usrdata); +s32 ISFS_Seek(s32 fd,s32 where,s32 whence); +s32 ISFS_SeekAsync(s32 fd,s32 where,s32 whence,isfscallback cb,void *usrdata); +s32 ISFS_CreateDir(const char *filepath,u8 attributes,u8 owner_perm,u8 group_perm,u8 other_perm); +s32 ISFS_CreateDirAsync(const char *filepath,u8 attributes,u8 owner_perm,u8 group_perm,u8 other_perm,isfscallback cb,void *usrdata); +s32 ISFS_GetStats(void *stats); +s32 ISFS_GetStatsAsync(void *stats,isfscallback cb,void *usrdata); +s32 ISFS_GetFileStats(s32 fd,fstats *status); +s32 ISFS_GetFileStatsAsync(s32 fd,fstats *status,isfscallback cb,void *usrdata); +s32 ISFS_GetAttr(const char *filepath,u32 *ownerID,u16 *groupID,u8 *attributes,u8 *ownerperm,u8 *groupperm,u8 *otherperm); +s32 ISFS_GetAttrAsync(const char *filepath,u32 *ownerID,u16 *groupID,u8 *attributes,u8 *ownerperm,u8 *groupperm,u8 *otherperm,isfscallback cb,void *usrdata); +s32 ISFS_Rename(const char *filepathOld,const char *filepathNew); +s32 ISFS_RenameAsync(const char *filepathOld,const char *filepathNew,isfscallback cb,void *usrdata); +s32 ISFS_SetAttr(const char *filepath,u32 ownerID,u16 groupID,u8 attributes,u8 ownerperm,u8 groupperm,u8 otherperm); +s32 ISFS_SetAttrAsync(const char *filepath,u32 ownerID,u16 groupID,u8 attributes,u8 ownerperm,u8 groupperm,u8 otherperm,isfscallback cb,void *usrdata); +s32 ISFS_GetUsage(const char* filepath, u32* usage1, u32* usage2); +s32 ISFS_GetUsageAsync(const char* filepath, u32* usage1, u32* usage2,isfscallback cb,void *usrdata); + +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif /* defined(HW_RVL) */ + +#endif diff --git a/wii/libogc/include/ogc/libversion.h b/wii/libogc/include/ogc/libversion.h new file mode 100644 index 0000000000..88d910daff --- /dev/null +++ b/wii/libogc/include/ogc/libversion.h @@ -0,0 +1,13 @@ +#ifndef __LIBVERSION_H__ +#define __LIBVERSION_H__ + +#define _V_MAJOR_ 1 +#define _V_MINOR_ 8 +#define _V_PATCH_ 17 + +#define _V_DATE_ __DATE__ +#define _V_TIME_ __TIME__ + +#define _V_STRING "libOGC Release 1.8.17" + +#endif // __LIBVERSION_H__ diff --git a/wii/libogc/include/ogc/lwp.h b/wii/libogc/include/ogc/lwp.h new file mode 100644 index 0000000000..b68bf065f2 --- /dev/null +++ b/wii/libogc/include/ogc/lwp.h @@ -0,0 +1,204 @@ +/*------------------------------------------------------------- + +lwp.h -- Thread subsystem I + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + + + +-------------------------------------------------------------*/ + + +#ifndef __LWP_H__ +#define __LWP_H__ + +/*! \file lwp.h +\brief Thread subsystem I + +*/ + +#include + +#define LWP_CLOSED -1 +#define LWP_SUCCESSFUL 0 +#define LWP_ALREADY_SUSPENDED 1 +#define LWP_NOT_SUSPENDED 2 + +#define LWP_PRIO_IDLE 0 +#define LWP_PRIO_HIGHEST 127 + +#define LWP_THREAD_NULL 0xffffffff +#define LWP_TQUEUE_NULL 0xffffffff + +#ifdef __cplusplus +extern "C" { +#endif + + +/*! \typedef u32 lwp_t +\brief typedef for the thread context handle +*/ +typedef u32 lwp_t; + + +/*! \typedef u32 lwpq_t +\brief typedef for the thread queue's context handle +*/ +typedef u32 lwpq_t; + +/*! \fn s32 LWP_CreateThread(lwp_t *thethread,void* (*entry)(void *),void *arg,void *stackbase,u32 stack_size,u8 prio) +\brief Spawn a new thread with the given parameters +\param[out] thethread pointer to a lwp_t handle +\param[in] entry pointer to the thread's entry function. +\param[in] arg pointer to an argument for the thread's entry function. +\param[in] stackbase pointer to the threads stackbase address. If NULL, the stack is allocated by the thread system. +\param[in] stack_size size of the provided stack. If 0, the default STACKSIZE of 8Kb is taken. +\param[in] prio priority on which the newly created thread runs. + +\return 0 on success, <0 on error +*/ +s32 LWP_CreateThread(lwp_t *thethread,void* (*entry)(void *),void *arg,void *stackbase,u32 stack_size,u8 prio); + + +/*! \fn s32 LWP_SuspendThread(lwp_t thethread) +\brief Suspend the given thread. +\param[in] thethread handle to the thread context which should be suspended. + +\return 0 on success, <0 on error +*/ +s32 LWP_SuspendThread(lwp_t thethread); + + +/*! \fn s32 LWP_ResumeThread(lwp_t thethread) +\brief Resume the given thread. +\param[in] thethread handle to the thread context which should be resumed. + +\return 0 on success, <0 on error +*/ +s32 LWP_ResumeThread(lwp_t thethread); + + +/*! \fn BOOL LWP_ThreadIsSuspended(lwp_t thethread) +\brief Test whether the given thread is suspended or not +\param[in] thethread handle to the thread context which should be tested. + +\return TRUE or FALSE +*/ +BOOL LWP_ThreadIsSuspended(lwp_t thethread); + + +/*! \fn lwp_t LWP_GetSelf() +\brief Return the handle to the current thread. + +\return thread context handle +*/ +lwp_t LWP_GetSelf(); + + +/*! \fn void LWP_SetThreadPriority(lwp_t thethread,u32 prio) +\brief Set the priority of the given thread. +\param[in] thethread handle to the thread context whos priority should be changed. If NULL, the current thread will be taken. +\param[in] prio new priority to set + +\return none +*/ +void LWP_SetThreadPriority(lwp_t thethread,u32 prio); + + +/*! \fn void LWP_YieldThread() +\brief Yield the current thread to another one with higher priority or if not running at the same priority which state is runnable. + +\return none +*/ +void LWP_YieldThread(); + + +/*! \fn void LWP_Reschedule(u32 prio) +\brief Reschedule all threads running at the given priority +\param[in] prio priority level to reschedule + +\return none +*/ +void LWP_Reschedule(u32 prio); + + +/*! \fn s32 LWP_JoinThread(lwp_t thethread,void **value_ptr) +\brief Join the given thread. +\param[in] thethread handle to the thread's context which should be joined to wait on termination. +\param[in] value_ptr pointer-pointer to a variable to receive the return code of the terminated thread. + +\return 0 on success, <0 on error +*/ +s32 LWP_JoinThread(lwp_t thethread,void **value_ptr); + + +/*! \fn void LWP_InitQueue(lwpq_t *thequeue) +\brief Initialize the thread synchronization queue +\param[in] thequeue pointer to a lwpq_t handle. + +\return 0 on success, <0 on error +*/ +s32 LWP_InitQueue(lwpq_t *thequeue); + + +/*! \fn void LWP_CloseQueue(lwpq_t thequeue) +\brief Close the thread synchronization queue and releas the handle +\param[in] thequeue handle to the thread's synchronization queue + +\return none +*/ +void LWP_CloseQueue(lwpq_t thequeue); + + +/*! \fn s32 LWP_ThreadSleep(lwpq_t thequeue) +\brief Pushes the current thread onto the given thread synchronization queue and sets the thread state to blocked. +\param[in] thequeue handle to the thread's synchronization queue to push the thread on + +\return none +*/ +s32 LWP_ThreadSleep(lwpq_t thequeue); + + +/*! \fn void LWP_ThreadSignal(lwpq_t thequeue) +\brief Signals one thread to be revmoved from the thread synchronization queue and sets it back to running state. +\param[in] thequeue handle to the thread's synchronization queue to pop the blocked thread off + +\return none +*/ +void LWP_ThreadSignal(lwpq_t thequeue); + + +/*! \fn void LWP_ThreadBroadcast(lwpq_t thequeue) +\brief Removes all blocked threads from the thread synchronization queue and sets them back to running state. +\param[in] thequeue handle to the thread's synchronization queue to pop the blocked threads off + +\return none +*/ +void LWP_ThreadBroadcast(lwpq_t thequeue); + +#ifdef __cplusplus + } +#endif + +#endif diff --git a/wii/libogc/include/ogc/lwp_config.h b/wii/libogc/include/ogc/lwp_config.h new file mode 100644 index 0000000000..beda421e54 --- /dev/null +++ b/wii/libogc/include/ogc/lwp_config.h @@ -0,0 +1,19 @@ +#ifndef __LWP_CONFIG_H__ +#define __LWP_CONFIG_H__ + + +#define LWP_MAX_MQUEUES 64 + +#define LWP_MAX_MUTEXES 64 + +#define LWP_MAX_THREADS 16 + +#define LWP_MAX_SEMAS 64 + +#define LWP_MAX_CONDVARS 64 + +#define LWP_MAX_TQUEUES 64 + +#define LWP_MAX_WATCHDOGS 64 + +#endif diff --git a/wii/libogc/include/ogc/lwp_heap.h b/wii/libogc/include/ogc/lwp_heap.h new file mode 100644 index 0000000000..3c9ac48502 --- /dev/null +++ b/wii/libogc/include/ogc/lwp_heap.h @@ -0,0 +1,59 @@ +#ifndef __LWP_HEAP_H__ +#define __LWP_HEAP_H__ + +#include +#include "machine/asm.h" + +#define HEAP_BLOCK_USED 1 +#define HEAP_BLOCK_FREE 0 + +#define HEAP_DUMMY_FLAG (0+HEAP_BLOCK_USED) + +#define HEAP_OVERHEAD (sizeof(u32)*2) +#define HEAP_BLOCK_USED_OVERHEAD (sizeof(void*)*2) +#define HEAP_MIN_SIZE (HEAP_OVERHEAD+sizeof(heap_block)) + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _heap_block_st heap_block; +struct _heap_block_st { + u32 back_flag; + u32 front_flag; + heap_block *next; + heap_block *prev; +}; + +typedef struct _heap_iblock_st { + u32 free_blocks; + u32 free_size; + u32 used_blocks; + u32 used_size; +} heap_iblock; + +typedef struct _heap_cntrl_st { + heap_block *start; + heap_block *final; + + heap_block *first; + heap_block *perm_null; + heap_block *last; + u32 pg_size; + u32 reserved; +} heap_cntrl; + +u32 __lwp_heap_init(heap_cntrl *theheap,void *start_addr,u32 size,u32 pg_size); +void* __lwp_heap_allocate(heap_cntrl *theheap,u32 size); +BOOL __lwp_heap_free(heap_cntrl *theheap,void *ptr); +u32 __lwp_heap_getinfo(heap_cntrl *theheap,heap_iblock *theinfo); + +#ifdef LIBOGC_INTERNAL +#include +#endif + +#ifdef __cplusplus + } +#endif + +#endif diff --git a/wii/libogc/include/ogc/lwp_messages.h b/wii/libogc/include/ogc/lwp_messages.h new file mode 100644 index 0000000000..2529b6331d --- /dev/null +++ b/wii/libogc/include/ogc/lwp_messages.h @@ -0,0 +1,79 @@ +#ifndef __LWP_MESSAGES_H__ +#define __LWP_MESSAGES_H__ + +#include +#include +#include +#include + +//#define _LWPMQ_DEBUG + +#define LWP_MQ_FIFO 0 +#define LWP_MQ_PRIORITY 1 + +#define LWP_MQ_STATUS_SUCCESSFUL 0 +#define LWP_MQ_STATUS_INVALID_SIZE 1 +#define LWP_MQ_STATUS_TOO_MANY 2 +#define LWP_MQ_STATUS_UNSATISFIED 3 +#define LWP_MQ_STATUS_UNSATISFIED_NOWAIT 4 +#define LWP_MQ_STATUS_DELETED 5 +#define LWP_MQ_STATUS_TIMEOUT 6 +#define LWP_MQ_STATUS_UNSATISFIED_WAIT 7 + +#define LWP_MQ_SEND_REQUEST INT_MAX +#define LWP_MQ_SEND_URGENT INT_MIN + +#ifdef __cplusplus +extern "C" { +#endif + +typedef void (*mq_notifyhandler)(void *); + +typedef struct _mqbuffer { + u32 size; + u32 buffer[1]; +} mq_buffer; + +typedef struct _mqbuffercntrl { + lwp_node node; + u32 prio; + mq_buffer contents; +} mq_buffercntrl; + +//the following struct is extensible +typedef struct _mqattr { + u32 mode; +} mq_attr; + +typedef struct _mqcntrl { + lwp_thrqueue wait_queue; + mq_attr attr; + u32 max_pendingmsgs; + u32 num_pendingmsgs; + u32 max_msgsize; + lwp_queue pending_msgs; + mq_buffer *msq_buffers; + mq_notifyhandler notify_handler; + void *notify_arg; + lwp_queue inactive_msgs; +} mq_cntrl; + +u32 __lwpmq_initialize(mq_cntrl *mqueue,mq_attr *attrs,u32 max_pendingmsgs,u32 max_msgsize); +void __lwpmq_close(mq_cntrl *mqueue,u32 status); +u32 __lwpmq_seize(mq_cntrl *mqueue,u32 id,void *buffer,u32 *size,u32 wait,u64 timeout); +u32 __lwpmq_submit(mq_cntrl *mqueue,u32 id,void *buffer,u32 size,u32 type,u32 wait,u64 timeout); +u32 __lwpmq_broadcast(mq_cntrl *mqueue,void *buffer,u32 size,u32 id,u32 *count); +void __lwpmq_msg_insert(mq_cntrl *mqueue,mq_buffercntrl *msg,u32 type); +u32 __lwpmq_flush(mq_cntrl *mqueue); +u32 __lwpmq_flush_support(mq_cntrl *mqueue); +void __lwpmq_flush_waitthreads(mq_cntrl *mqueue); + +#ifdef LIBOGC_INTERNAL +#include +#endif + +#ifdef __cplusplus + } +#endif + +#endif diff --git a/wii/libogc/include/ogc/lwp_mutex.h b/wii/libogc/include/ogc/lwp_mutex.h new file mode 100644 index 0000000000..fb8c495eaa --- /dev/null +++ b/wii/libogc/include/ogc/lwp_mutex.h @@ -0,0 +1,76 @@ +#ifndef __LWP_MUTEX_H__ +#define __LWP_MUTEX_H__ + +#include +#include + +#define LWP_MUTEX_LOCKED 0 +#define LWP_MUTEX_UNLOCKED 1 + +#define LWP_MUTEX_NEST_ACQUIRE 0 +#define LWP_MUTEX_NEST_ERROR 1 +#define LWP_MUTEX_NEST_BLOCK 2 + +#define LWP_MUTEX_FIFO 0 +#define LWP_MUTEX_PRIORITY 1 +#define LWP_MUTEX_INHERITPRIO 2 +#define LWP_MUTEX_PRIORITYCEIL 3 + +#define LWP_MUTEX_SUCCESSFUL 0 +#define LWP_MUTEX_UNSATISFIED_NOWAIT 1 +#define LWP_MUTEX_NEST_NOTALLOWED 2 +#define LWP_MUTEX_NOTOWNER 3 +#define LWP_MUTEX_DELETED 4 +#define LWP_MUTEX_TIMEOUT 5 +#define LWP_MUTEX_CEILINGVIOL 6 + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _lwpmutexattr { + u32 mode; + u32 nest_behavior; + u8 prioceil,onlyownerrelease; +} lwp_mutex_attr; + +typedef struct _lwpmutex { + lwp_thrqueue wait_queue; + lwp_mutex_attr atrrs; + u32 lock,nest_cnt,blocked_cnt; + lwp_cntrl *holder; +} lwp_mutex; + +void __lwp_mutex_initialize(lwp_mutex *mutex,lwp_mutex_attr *attrs,u32 init_lock); +u32 __lwp_mutex_surrender(lwp_mutex *mutex); +void __lwp_mutex_seize_irq_blocking(lwp_mutex *mutex,u64 timeout); +void __lwp_mutex_flush(lwp_mutex *mutex,u32 status); + +static __inline__ u32 __lwp_mutex_seize_irq_trylock(lwp_mutex *mutex,u32 *isr_level); + +#define __lwp_mutex_seize(_mutex_t,_id,_wait,_timeout,_level) \ + do { \ + if(__lwp_mutex_seize_irq_trylock(_mutex_t,&_level)) { \ + if(!_wait) { \ + _CPU_ISR_Restore(_level); \ + _thr_executing->wait.ret_code = LWP_MUTEX_UNSATISFIED_NOWAIT; \ + } else { \ + __lwp_threadqueue_csenter(&(_mutex_t)->wait_queue); \ + _thr_executing->wait.queue = &(_mutex_t)->wait_queue; \ + _thr_executing->wait.id = _id; \ + __lwp_thread_dispatchdisable(); \ + _CPU_ISR_Restore(_level); \ + __lwp_mutex_seize_irq_blocking(_mutex_t,(u64)_timeout); \ + } \ + } \ + } while(0) + +#ifdef LIBOGC_INTERNAL +#include +#endif + +#ifdef __cplusplus + } +#endif + +#endif diff --git a/wii/libogc/include/ogc/lwp_objmgr.h b/wii/libogc/include/ogc/lwp_objmgr.h new file mode 100644 index 0000000000..00c6e788fb --- /dev/null +++ b/wii/libogc/include/ogc/lwp_objmgr.h @@ -0,0 +1,49 @@ +#ifndef __LWP_OBJMGR_H__ +#define __LWP_OBJMGR_H__ + +#include +#include "lwp_queue.h" + +#define LWP_OBJMASKTYPE(type) ((type)<<16) +#define LWP_OBJMASKID(id) ((id)&0xffff) +#define LWP_OBJTYPE(id) ((id)>>16) + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _lwp_objinfo lwp_objinfo; + +typedef struct _lwp_obj { + lwp_node node; + s32 id; + lwp_objinfo *information; +} lwp_obj; + +struct _lwp_objinfo { + u32 min_id; + u32 max_id; + u32 max_nodes; + u32 node_size; + lwp_obj **local_table; + void *obj_blocks; + lwp_queue inactives; + u32 inactives_cnt; +}; + +void __lwp_objmgr_initinfo(lwp_objinfo *info,u32 max_nodes,u32 node_size); +void __lwp_objmgr_free(lwp_objinfo *info,lwp_obj *object); +lwp_obj* __lwp_objmgr_allocate(lwp_objinfo *info); +lwp_obj* __lwp_objmgr_get(lwp_objinfo *info,u32 id); +lwp_obj* __lwp_objmgr_getisrdisable(lwp_objinfo *info,u32 id,u32 *p_level); +lwp_obj* __lwp_objmgr_getnoprotection(lwp_objinfo *info,u32 id); + +#ifdef LIBOGC_INTERNAL +#include +#endif + +#ifdef __cplusplus + } +#endif + +#endif diff --git a/wii/libogc/include/ogc/lwp_priority.h b/wii/libogc/include/ogc/lwp_priority.h new file mode 100644 index 0000000000..3a55f3ac98 --- /dev/null +++ b/wii/libogc/include/ogc/lwp_priority.h @@ -0,0 +1,33 @@ +#ifndef __LWP_PRIORITY_H__ +#define __LWP_PRIORITY_H__ + +#include +#include "machine/processor.h" + +#define LWP_PRIO_MIN 0 +#define LWP_PRIO_MAX 255 + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _priocntrl { + u32 *minor; + u32 ready_minor,ready_major; + u32 block_minor,block_major; +} prio_cntrl; + +extern vu32 _prio_major_bitmap; +extern u32 _prio_bitmap[]; + +void __lwp_priority_init(); + +#ifdef LIBOGC_INTERNAL +#include +#endif + +#ifdef __cplusplus + } +#endif + +#endif diff --git a/wii/libogc/include/ogc/lwp_queue.h b/wii/libogc/include/ogc/lwp_queue.h new file mode 100644 index 0000000000..4f6993c2f6 --- /dev/null +++ b/wii/libogc/include/ogc/lwp_queue.h @@ -0,0 +1,41 @@ +#ifndef __LWP_QUEUE_H__ +#define __LWP_QUEUE_H__ + +#include + +//#define _LWPQ_DEBUG + +#ifdef _LWPQ_DEBUG +extern int printk(const char *fmt,...); +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _lwpnode { + struct _lwpnode *next; + struct _lwpnode *prev; +} lwp_node; + +typedef struct _lwpqueue { + lwp_node *first; + lwp_node *perm_null; + lwp_node *last; +} lwp_queue; + +void __lwp_queue_initialize(lwp_queue *,void *,u32,u32); +lwp_node* __lwp_queue_get(lwp_queue *); +void __lwp_queue_append(lwp_queue *,lwp_node *); +void __lwp_queue_extract(lwp_node *); +void __lwp_queue_insert(lwp_node *,lwp_node *); + +#ifdef LIBOGC_INTERNAL +#include +#endif + +#ifdef __cplusplus + } +#endif + +#endif diff --git a/wii/libogc/include/ogc/lwp_sema.h b/wii/libogc/include/ogc/lwp_sema.h new file mode 100644 index 0000000000..f4c5816ad3 --- /dev/null +++ b/wii/libogc/include/ogc/lwp_sema.h @@ -0,0 +1,44 @@ +#ifndef __LWP_SEMA_H__ +#define __LWP_SEMA_H__ + +#include +#include + +#define LWP_SEMA_MODEFIFO 0 +#define LWP_SEMA_MODEPRIORITY 1 + +#define LWP_SEMA_SUCCESSFUL 0 +#define LWP_SEMA_UNSATISFIED_NOWAIT 1 +#define LWP_SEMA_DELETED 2 +#define LWP_SEMA_TIMEOUT 3 +#define LWP_SEMA_MAXCNT_EXCEEDED 4 + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _lwpsemattr { + u32 max_cnt; + u32 mode; +} lwp_semattr; + +typedef struct _lwpsema { + lwp_thrqueue wait_queue; + lwp_semattr attrs; + u32 count; +} lwp_sema; + +void __lwp_sema_initialize(lwp_sema *sema,lwp_semattr *attrs,u32 init_count); +u32 __lwp_sema_surrender(lwp_sema *sema,u32 id); +u32 __lwp_sema_seize(lwp_sema *sema,u32 id,u32 wait,u64 timeout); +void __lwp_sema_flush(lwp_sema *sema,u32 status); + +#ifdef LIBOGC_INTERNAL +#include +#endif + +#ifdef __cplusplus + } +#endif + +#endif diff --git a/wii/libogc/include/ogc/lwp_stack.h b/wii/libogc/include/ogc/lwp_stack.h new file mode 100644 index 0000000000..b047b700c3 --- /dev/null +++ b/wii/libogc/include/ogc/lwp_stack.h @@ -0,0 +1,27 @@ +#ifndef __LWP_STACK_H__ +#define __LWP_STACK_H__ + +#include +#include + +#define CPU_STACK_ALIGNMENT 8 +#define CPU_MINIMUM_STACK_SIZE 1024*8 +#define CPU_MINIMUM_STACK_FRAME_SIZE 16 +#define CPU_MODES_INTERRUPT_MASK 0x00000001 /* interrupt level in mode */ + +#ifdef __cplusplus +extern "C" { +#endif + +u32 __lwp_stack_allocate(lwp_cntrl *,u32); +void __lwp_stack_free(lwp_cntrl *); + +#ifdef LIBOGC_INTERNAL +#include +#endif + +#ifdef __cplusplus + } +#endif + +#endif diff --git a/wii/libogc/include/ogc/lwp_states.h b/wii/libogc/include/ogc/lwp_states.h new file mode 100644 index 0000000000..6fc1236e04 --- /dev/null +++ b/wii/libogc/include/ogc/lwp_states.h @@ -0,0 +1,48 @@ +#ifndef ___LWP_STATES_H__ +#define ___LWP_STATES_H__ + +#include + +#define LWP_STATES_READY 0x00000000 +#define LWP_STATES_DORMANT 0x00000001 +#define LWP_STATES_SUSPENDED 0x00000002 +#define LWP_STATES_TRANSIENT 0x00000004 +#define LWP_STATES_DELAYING 0x00000008 +#define LWP_STATES_WAITING_FOR_TIME 0x00000010 +#define LWP_STATES_WAITING_FOR_BUFFER 0x00000020 +#define LWP_STATES_WAITING_FOR_SEGMENT 0x00000040 +#define LWP_STATES_WAITING_FOR_MESSAGE 0x00000080 +#define LWP_STATES_WAITING_FOR_EVENT 0x00000100 +#define LWP_STATES_WAITING_FOR_MUTEX 0x00000200 +#define LWP_STATES_WAITING_FOR_SEMAPHORE 0x00000400 +#define LWP_STATES_WAITING_FOR_CONDVAR 0x00000800 +#define LWP_STATES_WAITING_FOR_JOINATEXIT 0x00001000 +#define LWP_STATES_WAITING_FOR_RPCREPLAY 0x00002000 +#define LWP_STATES_WAITING_FOR_PERIOD 0x00004000 +#define LWP_STATES_WAITING_FOR_SIGNAL 0x00008000 +#define LWP_STATES_INTERRUPTIBLE_BY_SIGNAL 0x00010000 + +#define LWP_STATES_LOCALLY_BLOCKED (LWP_STATES_WAITING_FOR_BUFFER | LWP_STATES_WAITING_FOR_SEGMENT | \ + LWP_STATES_WAITING_FOR_MESSAGE | LWP_STATES_WAITING_FOR_SEMAPHORE | \ + LWP_STATES_WAITING_FOR_MUTEX | LWP_STATES_WAITING_FOR_CONDVAR | \ + LWP_STATES_WAITING_FOR_JOINATEXIT | LWP_STATES_WAITING_FOR_SIGNAL) + +#define LWP_STATES_WAITING_ON_THREADQ (LWP_STATES_LOCALLY_BLOCKED | LWP_STATES_WAITING_FOR_RPCREPLAY) + +#define LWP_STATES_BLOCKED (LWP_STATES_DELAYING | LWP_STATES_WAITING_FOR_TIME | \ + LWP_STATES_WAITING_FOR_PERIOD | LWP_STATES_WAITING_FOR_EVENT | \ + LWP_STATES_WAITING_ON_THREADQ | LWP_STATES_INTERRUPTIBLE_BY_SIGNAL) + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef LIBOGC_INTERNAL +#include +#endif + +#ifdef __cplusplus + } +#endif + +#endif diff --git a/wii/libogc/include/ogc/lwp_threadq.h b/wii/libogc/include/ogc/lwp_threadq.h new file mode 100644 index 0000000000..ed9c6bbd4b --- /dev/null +++ b/wii/libogc/include/ogc/lwp_threadq.h @@ -0,0 +1,39 @@ +#ifndef __LWP_THREADQ_H__ +#define __LWP_THREADQ_H__ + +#include +#include +#include +#include + +#define LWP_THREADQ_NOTIMEOUT LWP_WD_NOTIMEOUT + +#ifdef __cplusplus +extern "C" { +#endif + +lwp_cntrl* __lwp_threadqueue_firstfifo(lwp_thrqueue *queue); +lwp_cntrl* __lwp_threadqueue_firstpriority(lwp_thrqueue *queue); +void __lwp_threadqueue_enqueuefifo(lwp_thrqueue *queue,lwp_cntrl *thethread,u64 timeout); +lwp_cntrl* __lwp_threadqueue_dequeuefifo(lwp_thrqueue *queue); +void __lwp_threadqueue_enqueuepriority(lwp_thrqueue *queue,lwp_cntrl *thethread,u64 timeout); +lwp_cntrl* __lwp_threadqueue_dequeuepriority(lwp_thrqueue *queue); +void __lwp_threadqueue_init(lwp_thrqueue *queue,u32 mode,u32 state,u32 timeout_state); +lwp_cntrl* __lwp_threadqueue_first(lwp_thrqueue *queue); +void __lwp_threadqueue_enqueue(lwp_thrqueue *queue,u64 timeout); +lwp_cntrl* __lwp_threadqueue_dequeue(lwp_thrqueue *queue); +void __lwp_threadqueue_flush(lwp_thrqueue *queue,u32 status); +void __lwp_threadqueue_extract(lwp_thrqueue *queue,lwp_cntrl *thethread); +void __lwp_threadqueue_extractfifo(lwp_thrqueue *queue,lwp_cntrl *thethread); +void __lwp_threadqueue_extractpriority(lwp_thrqueue *queue,lwp_cntrl *thethread); +u32 __lwp_threadqueue_extractproxy(lwp_cntrl *thethread); + +#ifdef LIBOGC_INTERNAL +#include +#endif + +#ifdef __cplusplus + } +#endif + +#endif diff --git a/wii/libogc/include/ogc/lwp_threads.h b/wii/libogc/include/ogc/lwp_threads.h new file mode 100644 index 0000000000..5b504aef2a --- /dev/null +++ b/wii/libogc/include/ogc/lwp_threads.h @@ -0,0 +1,107 @@ +#ifndef __LWP_THREADS_H__ +#define __LWP_THREADS_H__ + +#include +#include +#include "lwp_states.h" +#include "lwp_tqdata.h" +#include "lwp_watchdog.h" +#include "lwp_objmgr.h" +#include "context.h" + +//#define _LWPTHREADS_DEBUG +#define LWP_TIMESLICE_TIMER_ID 0x00070040 + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum +{ + LWP_CPU_BUDGET_ALGO_NONE = 0, + LWP_CPU_BUDGET_ALGO_TIMESLICE +} lwp_cpu_budget_algorithms; + +typedef struct _lwpwaitinfo { + u32 id; + u32 cnt; + void *ret_arg; + void *ret_arg_1; + u32 option; + u32 ret_code; + lwp_queue block2n; + lwp_thrqueue *queue; +} lwp_waitinfo; + +typedef struct _lwpcntrl { + lwp_obj object; + u8 cur_prio,real_prio; + u32 suspendcnt,res_cnt; + u32 isr_level; + u32 cur_state; + u32 cpu_time_budget; + lwp_cpu_budget_algorithms budget_algo; + bool is_preemptible; + lwp_waitinfo wait; + prio_cntrl priomap; + wd_cntrl timer; + + void* (*entry)(void *); + void *arg; + void *stack; + u32 stack_size; + u8 stack_allocated; + lwp_queue *ready; + lwp_thrqueue join_list; + frame_context context; //16 + void *libc_reent; +} lwp_cntrl, *lwp_cntrl_t; + +extern lwp_cntrl *_thr_main; +extern lwp_cntrl *_thr_idle; +extern lwp_cntrl *_thr_executing; +extern lwp_cntrl *_thr_heir; +extern lwp_cntrl *_thr_allocated_fp; +extern vu32 _context_switch_want; +extern vu32 _thread_dispatch_disable_level; + +extern wd_cntrl _lwp_wd_timeslice; +extern void **__lwp_thr_libc_reent; +extern lwp_queue _lwp_thr_ready[]; + +void __thread_dispatch(); +void __lwp_thread_yield(); +void __lwp_thread_closeall(); +void __lwp_thread_setstate(lwp_cntrl *,u32); +void __lwp_thread_clearstate(lwp_cntrl *,u32); +void __lwp_thread_changepriority(lwp_cntrl *,u32,u32); +void __lwp_thread_setpriority(lwp_cntrl *,u32); +void __lwp_thread_settransient(lwp_cntrl *); +void __lwp_thread_suspend(lwp_cntrl *); +void __lwp_thread_resume(lwp_cntrl *,u32); +void __lwp_thread_loadenv(lwp_cntrl *); +void __lwp_thread_ready(lwp_cntrl *); +u32 __lwp_thread_init(lwp_cntrl *,void *,u32,u32,u32,bool); +u32 __lwp_thread_start(lwp_cntrl *,void* (*)(void*),void *); +void __lwp_thread_exit(void *); +void __lwp_thread_close(lwp_cntrl *); +void __lwp_thread_startmultitasking(); +void __lwp_thread_stopmultitasking(void (*exitfunc)()); +lwp_obj* __lwp_thread_getobject(lwp_cntrl *); +u32 __lwp_evaluatemode(); + +u32 __lwp_isr_in_progress(); +void __lwp_thread_resettimeslice(); +void __lwp_rotate_readyqueue(u32); +void __lwp_thread_delayended(void *); +void __lwp_thread_tickle_timeslice(void *); + +#ifdef LIBOGC_INTERNAL +#include +#endif + +#ifdef __cplusplus + } +#endif + +#endif diff --git a/wii/libogc/include/ogc/lwp_tqdata.h b/wii/libogc/include/ogc/lwp_tqdata.h new file mode 100644 index 0000000000..0ebaffd2d3 --- /dev/null +++ b/wii/libogc/include/ogc/lwp_tqdata.h @@ -0,0 +1,38 @@ +#ifndef __LWP_TQDATA_H__ +#define __LWP_TQDATA_H__ + +#define LWP_THREADQ_NUM_PRIOHEADERS 4 +#define LWP_THREADQ_PRIOPERHEADER 64 +#define LWP_THREADQ_REVERSESEARCHMASK 0x20 + +#define LWP_THREADQ_SYNCHRONIZED 0 +#define LWP_THREADQ_NOTHINGHAPPEND 1 +#define LWP_THREADQ_TIMEOUT 2 +#define LWP_THREADQ_SATISFIED 3 + +#define LWP_THREADQ_MODEFIFO 0 +#define LWP_THREADQ_MODEPRIORITY 1 + +#ifdef __cplusplus +extern "C" { +#endif + +#include "lwp_queue.h" +#include "lwp_priority.h" + +typedef struct _lwpthrqueue { + union { + lwp_queue fifo; + lwp_queue priority[LWP_THREADQ_NUM_PRIOHEADERS]; + } queues; + u32 sync_state; + u32 mode; + u32 state; + u32 timeout_state; +} lwp_thrqueue; + +#ifdef __cplusplus + } +#endif + +#endif diff --git a/wii/libogc/include/ogc/lwp_watchdog.h b/wii/libogc/include/ogc/lwp_watchdog.h new file mode 100644 index 0000000000..421373cd25 --- /dev/null +++ b/wii/libogc/include/ogc/lwp_watchdog.h @@ -0,0 +1,107 @@ +#ifndef __LWP_WATCHDOG_H__ +#define __LWP_WATCHDOG_H__ + +#include +#include "lwp_queue.h" +#include + +#if defined(HW_RVL) + #define TB_BUS_CLOCK 243000000u + #define TB_CORE_CLOCK 729000000u +#elif defined(HW_DOL) + #define TB_BUS_CLOCK 162000000u + #define TB_CORE_CLOCK 486000000u +#endif +#define TB_TIMER_CLOCK (TB_BUS_CLOCK/4000) //4th of the bus frequency + +#define TB_SECSPERMIN 60 +#define TB_MINSPERHR 60 +#define TB_MONSPERYR 12 +#define TB_DAYSPERYR 365 +#define TB_HRSPERDAY 24 +#define TB_SECSPERDAY (TB_SECSPERMIN*TB_MINSPERHR*TB_HRSPERDAY) +#define TB_SECSPERNYR (365*TB_SECSPERDAY) + +#define TB_MSPERSEC 1000 +#define TB_USPERSEC 1000000 +#define TB_NSPERSEC 1000000000 +#define TB_NSPERMS 1000000 +#define TB_NSPERUS 1000 +#define TB_USPERTICK 10000 + +#define ticks_to_cycles(ticks) ((((u64)(ticks)*(u64)((TB_CORE_CLOCK*2)/TB_TIMER_CLOCK))/2)) +#define ticks_to_secs(ticks) (((u64)(ticks)/(u64)(TB_TIMER_CLOCK*1000))) +#define ticks_to_millisecs(ticks) (((u64)(ticks)/(u64)(TB_TIMER_CLOCK))) +#define ticks_to_microsecs(ticks) ((((u64)(ticks)*8)/(u64)(TB_TIMER_CLOCK/125))) +#define ticks_to_nanosecs(ticks) ((((u64)(ticks)*8000)/(u64)(TB_TIMER_CLOCK/125))) + +#define tick_microsecs(ticks) ((((u64)(ticks)*8)%(u64)(TB_TIMER_CLOCK/125))) +#define tick_nanosecs(ticks) ((((u64)(ticks)*8000)%(u64)(TB_TIMER_CLOCK/125))) + + +#define secs_to_ticks(sec) ((u64)(sec)*(TB_TIMER_CLOCK*1000)) +#define millisecs_to_ticks(msec) ((u64)(msec)*(TB_TIMER_CLOCK)) +#define microsecs_to_ticks(usec) (((u64)(usec)*(TB_TIMER_CLOCK/125))/8) +#define nanosecs_to_ticks(nsec) (((u64)(nsec)*(TB_TIMER_CLOCK/125))/8000) + +#define diff_ticks(tick0,tick1) (((u64)(tick1)<(u64)(tick0))?((u64)-1-(u64)(tick0)+(u64)(tick1)):((u64)(tick1)-(u64)(tick0))) + +#define LWP_WD_INACTIVE 0 +#define LWP_WD_INSERTED 1 +#define LWP_WD_ACTIVE 2 +#define LWP_WD_REMOVE 3 + +#define LWP_WD_FORWARD 0 +#define LWP_WD_BACKWARD 1 + +#define LWP_WD_NOTIMEOUT 0 + +#define LWP_WD_ABS(x) ((s64)(x)>0?(s64)(x):-((s64)(x))) + +#ifdef __cplusplus +extern "C" { +#endif + +extern vu32 _wd_sync_level; +extern vu32 _wd_sync_count; +extern u32 _wd_ticks_since_boot; + +extern lwp_queue _wd_ticks_queue; + +extern u32 gettick(); +extern u64 gettime(); +extern void settime(u64); + +u32 diff_sec(u64 start,u64 end); +u32 diff_msec(u64 start,u64 end); +u32 diff_usec(u64 start,u64 end); +u32 diff_nsec(u64 start,u64 end); + +typedef void (*wd_service_routine)(void *); + +typedef struct _wdcntrl { + lwp_node node; + u64 start; + u32 id; + u32 state; + u64 fire; + wd_service_routine routine; + void *usr_data; +} wd_cntrl; + +void __lwp_watchdog_init(); +void __lwp_watchdog_settimer(wd_cntrl *wd); +void __lwp_wd_insert(lwp_queue *header,wd_cntrl *wd); +u32 __lwp_wd_remove(lwp_queue *header,wd_cntrl *wd); +void __lwp_wd_tickle(lwp_queue *queue); +void __lwp_wd_adjust(lwp_queue *queue,u32 dir,s64 interval); + +#ifdef LIBOGC_INTERNAL +#include +#endif + +#ifdef __cplusplus + } +#endif + +#endif diff --git a/wii/libogc/include/ogc/lwp_wkspace.h b/wii/libogc/include/ogc/lwp_wkspace.h new file mode 100644 index 0000000000..c5dd500a23 --- /dev/null +++ b/wii/libogc/include/ogc/lwp_wkspace.h @@ -0,0 +1,23 @@ +#ifndef __LWP_WKSPACE_H__ +#define __LWP_WKSPACE_H__ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern heap_cntrl __wkspace_heap; + +void __lwp_wkspace_init(u32 size); + +#ifdef LIBOGC_INTERNAL +#include +#endif + +#ifdef __cplusplus + } +#endif + +#endif diff --git a/wii/libogc/include/ogc/machine/asm.h b/wii/libogc/include/ogc/machine/asm.h new file mode 100644 index 0000000000..2feed006f4 --- /dev/null +++ b/wii/libogc/include/ogc/machine/asm.h @@ -0,0 +1,338 @@ +#ifndef __ASM_H__ +#define __ASM_H__ + +#ifdef _LANGUAGE_ASSEMBLY +/* Condition Register Bit Fields */ + +#define cr0 0 +#define cr1 1 +#define cr2 2 +#define cr3 3 +#define cr4 4 +#define cr5 5 +#define cr6 6 +#define cr7 7 + + +/* General Purpose Registers (GPRs) */ + +#define r0 0 +#define r1 1 +#define sp 1 +#define r2 2 +#define toc 2 +#define r3 3 +#define r4 4 +#define r5 5 +#define r6 6 +#define r7 7 +#define r8 8 +#define r9 9 +#define r10 10 +#define r11 11 +#define r12 12 +#define r13 13 +#define r14 14 +#define r15 15 +#define r16 16 +#define r17 17 +#define r18 18 +#define r19 19 +#define r20 20 +#define r21 21 +#define r22 22 +#define r23 23 +#define r24 24 +#define r25 25 +#define r26 26 +#define r27 27 +#define r28 28 +#define r29 29 +#define r30 30 +#define r31 31 + + +/* Floating Point Registers (FPRs) */ + +#define fr0 0 +#define fr1 1 +#define fr2 2 +#define fr3 3 +#define fr4 4 +#define fr5 5 +#define fr6 6 +#define fr7 7 +#define fr8 8 +#define fr9 9 +#define fr10 10 +#define fr11 11 +#define fr12 12 +#define fr13 13 +#define fr14 14 +#define fr15 15 +#define fr16 16 +#define fr17 17 +#define fr18 18 +#define fr19 19 +#define fr20 20 +#define fr21 21 +#define fr22 22 +#define fr23 23 +#define fr24 24 +#define fr25 25 +#define fr26 26 +#define fr27 27 +#define fr28 28 +#define fr29 29 +#define fr30 30 +#define fr31 31 + +#define vr0 0 +#define vr1 1 +#define vr2 2 +#define vr3 3 +#define vr4 4 +#define vr5 5 +#define vr6 6 +#define vr7 7 +#define vr8 8 +#define vr9 9 +#define vr10 10 +#define vr11 11 +#define vr12 12 +#define vr13 13 +#define vr14 14 +#define vr15 15 +#define vr16 16 +#define vr17 17 +#define vr18 18 +#define vr19 19 +#define vr20 20 +#define vr21 21 +#define vr22 22 +#define vr23 23 +#define vr24 24 +#define vr25 25 +#define vr26 26 +#define vr27 27 +#define vr28 28 +#define vr29 29 +#define vr30 30 +#define vr31 31 + +#endif //_LANGUAGE_ASSEMBLY + +#define SPRG0 272 +#define SPRG1 273 +#define SPRG2 274 +#define SPRG3 275 + +#define PMC1 953 +#define PMC2 954 +#define PMC3 957 +#define PMC4 958 + +#define MMCR0 952 +#define MMCR1 956 + + +#define LINK_REGISTER_CALLEE_UPDATE_ROOM 4 +#define EXCEPTION_NUMBER 8 +#define SRR0_OFFSET 12 +#define SRR1_OFFSET 16 +#define GPR0_OFFSET 20 +#define GPR1_OFFSET 24 +#define GPR2_OFFSET 28 +#define GPR3_OFFSET 32 +#define GPR4_OFFSET 36 +#define GPR5_OFFSET 40 +#define GPR6_OFFSET 44 +#define GPR7_OFFSET 48 +#define GPR8_OFFSET 52 +#define GPR9_OFFSET 56 +#define GPR10_OFFSET 60 +#define GPR11_OFFSET 64 +#define GPR12_OFFSET 68 +#define GPR13_OFFSET 72 +#define GPR14_OFFSET 76 +#define GPR15_OFFSET 80 +#define GPR16_OFFSET 84 +#define GPR17_OFFSET 88 +#define GPR18_OFFSET 92 +#define GPR19_OFFSET 96 +#define GPR20_OFFSET 100 +#define GPR21_OFFSET 104 +#define GPR22_OFFSET 108 +#define GPR23_OFFSET 112 +#define GPR24_OFFSET 116 +#define GPR25_OFFSET 120 +#define GPR26_OFFSET 124 +#define GPR27_OFFSET 128 +#define GPR28_OFFSET 132 +#define GPR29_OFFSET 136 +#define GPR30_OFFSET 140 +#define GPR31_OFFSET 144 + +#define GQR0_OFFSET 148 +#define GQR1_OFFSET 152 +#define GQR2_OFFSET 156 +#define GQR3_OFFSET 160 +#define GQR4_OFFSET 164 +#define GQR5_OFFSET 168 +#define GQR6_OFFSET 172 +#define GQR7_OFFSET 176 + +#define CR_OFFSET 180 +#define LR_OFFSET 184 +#define CTR_OFFSET 188 +#define XER_OFFSET 192 +#define MSR_OFFSET 196 +#define DAR_OFFSET 200 + +#define STATE_OFFSET 204 +#define MODE_OFFSET 206 + +#define FPR0_OFFSET 208 +#define FPR1_OFFSET 216 +#define FPR2_OFFSET 224 +#define FPR3_OFFSET 232 +#define FPR4_OFFSET 240 +#define FPR5_OFFSET 248 +#define FPR6_OFFSET 256 +#define FPR7_OFFSET 264 +#define FPR8_OFFSET 272 +#define FPR9_OFFSET 280 +#define FPR10_OFFSET 288 +#define FPR11_OFFSET 296 +#define FPR12_OFFSET 304 +#define FPR13_OFFSET 312 +#define FPR14_OFFSET 320 +#define FPR15_OFFSET 328 +#define FPR16_OFFSET 336 +#define FPR17_OFFSET 344 +#define FPR18_OFFSET 352 +#define FPR19_OFFSET 360 +#define FPR20_OFFSET 368 +#define FPR21_OFFSET 376 +#define FPR22_OFFSET 384 +#define FPR23_OFFSET 392 +#define FPR24_OFFSET 400 +#define FPR25_OFFSET 408 +#define FPR26_OFFSET 416 +#define FPR27_OFFSET 424 +#define FPR28_OFFSET 432 +#define FPR29_OFFSET 440 +#define FPR30_OFFSET 448 +#define FPR31_OFFSET 456 + +#define FPSCR_OFFSET 464 + +#define PSR0_OFFSET 472 +#define PSR1_OFFSET 480 +#define PSR2_OFFSET 488 +#define PSR3_OFFSET 496 +#define PSR4_OFFSET 504 +#define PSR5_OFFSET 512 +#define PSR6_OFFSET 520 +#define PSR7_OFFSET 528 +#define PSR8_OFFSET 536 +#define PSR9_OFFSET 544 +#define PSR10_OFFSET 552 +#define PSR11_OFFSET 560 +#define PSR12_OFFSET 568 +#define PSR13_OFFSET 576 +#define PSR14_OFFSET 584 +#define PSR15_OFFSET 592 +#define PSR16_OFFSET 600 +#define PSR17_OFFSET 608 +#define PSR18_OFFSET 616 +#define PSR19_OFFSET 624 +#define PSR20_OFFSET 632 +#define PSR21_OFFSET 640 +#define PSR22_OFFSET 648 +#define PSR23_OFFSET 656 +#define PSR24_OFFSET 664 +#define PSR25_OFFSET 672 +#define PSR26_OFFSET 680 +#define PSR27_OFFSET 688 +#define PSR28_OFFSET 696 +#define PSR29_OFFSET 704 +#define PSR30_OFFSET 712 +#define PSR31_OFFSET 720 +/* + * maintain the EABI requested 8 bytes aligment + * As SVR4 ABI requires 16, make it 16 (as some + * exception may need more registers to be processed...) + */ +#define EXCEPTION_FRAME_END 728 + +#define IBAT0U 528 +#define IBAT0L 529 +#define IBAT1U 530 +#define IBAT1L 531 +#define IBAT2U 532 +#define IBAT2L 533 +#define IBAT3U 534 +#define IBAT3L 535 +#define IBAT4U 560 +#define IBAT4L 561 +#define IBAT5U 562 +#define IBAT5L 563 +#define IBAT6U 564 +#define IBAT6L 565 +#define IBAT7U 566 +#define IBAT7L 567 + +#define DBAT0U 536 +#define DBAT0L 537 +#define DBAT1U 538 +#define DBAT1L 539 +#define DBAT2U 540 +#define DBAT2L 541 +#define DBAT3U 542 +#define DBAT3L 543 +#define DBAT4U 568 +#define DBAT4L 569 +#define DBAT5U 570 +#define DBAT5L 571 +#define DBAT6U 572 +#define DBAT6L 573 +#define DBAT7U 574 +#define DBAT7L 575 + +#define HID0 1008 +#define HID1 1009 +#define HID2 920 +#define HID4 1011 + +#define GQR0 912 +#define GQR1 913 +#define GQR2 914 +#define GQR3 915 +#define GQR4 916 +#define GQR5 917 +#define GQR6 918 +#define GQR7 919 + +#define L2CR 1017 + +#define WPAR 921 + +#define DMAU 922 +#define DMAL 923 + +#define MSR_RI 0x00000002 +#define MSR_DR 0x00000010 +#define MSR_IR 0x00000020 +#define MSR_IP 0x00000040 +#define MSR_SE 0x00000400 +#define MSR_ME 0x00001000 +#define MSR_FP 0x00002000 +#define MSR_POW 0x00004000 +#define MSR_EE 0x00008000 + +#define PPC_ALIGNMENT 8 + +#define PPC_CACHE_ALIGNMENT 32 + +#endif //__ASM_H__ diff --git a/wii/libogc/include/ogc/machine/processor.h b/wii/libogc/include/ogc/machine/processor.h new file mode 100644 index 0000000000..f8693927ac --- /dev/null +++ b/wii/libogc/include/ogc/machine/processor.h @@ -0,0 +1,251 @@ +#ifndef __PROCESSOR_H__ +#define __PROCESSOR_H__ + +#include +#include "asm.h" + +#define __stringify(rn) #rn +#define ATTRIBUTE_ALIGN(v) __attribute__((aligned(v))) +// courtesy of Marcan +#define STACK_ALIGN(type, name, cnt, alignment) u8 _al__##name[((sizeof(type)*(cnt)) + (alignment) + (((sizeof(type)*(cnt))%(alignment)) > 0 ? ((alignment) - ((sizeof(type)*(cnt))%(alignment))) : 0))]; \ + type *name = (type*)(((u32)(_al__##name)) + ((alignment) - (((u32)(_al__##name))&((alignment)-1)))) + +#define _sync() asm volatile("sync") +#define _nop() asm volatile("nop") +#define ppcsync() asm volatile("sc") +#define ppchalt() ({ \ + asm volatile("sync"); \ + while(1) { \ + asm volatile("nop"); \ + asm volatile("li 3,0"); \ + asm volatile("nop"); \ + } \ +}) + +#define mfpvr() ({register u32 _rval; \ + asm volatile("mfpvr %0" : "=r"(_rval)); _rval;}) + +#define mfdcr(_rn) ({register u32 _rval; \ + asm volatile("mfdcr %0," __stringify(_rn) \ + : "=r" (_rval)); _rval;}) +#define mtdcr(rn, val) asm volatile("mtdcr " __stringify(rn) ",%0" : : "r" (val)) + +#define mfmsr() ({register u32 _rval; \ + asm volatile("mfmsr %0" : "=r" (_rval)); _rval;}) +#define mtmsr(val) asm volatile("mtmsr %0" : : "r" (val)) + +#define mfdec() ({register u32 _rval; \ + asm volatile("mfdec %0" : "=r" (_rval)); _rval;}) +#define mtdec(_val) asm volatile("mtdec %0" : : "r" (_val)) + +#define mfspr(_rn) \ +({ register u32 _rval = 0; \ + asm volatile("mfspr %0," __stringify(_rn) \ + : "=r" (_rval));\ + _rval; \ +}) + +#define mtspr(_rn, _val) asm volatile("mtspr " __stringify(_rn) ",%0" : : "r" (_val)) + +#define mfwpar() mfspr(WPAR) +#define mtwpar(_val) mtspr(WPAR,_val) + +#define mfmmcr0() mfspr(MMCR0) +#define mtmmcr0(_val) mtspr(MMCR0,_val) +#define mfmmcr1() mfspr(MMCR1) +#define mtmmcr1(_val) mtspr(MMCR1,_val) + +#define mfpmc1() mfspr(PMC1) +#define mtpmc1(_val) mtspr(PMC1,_val) +#define mfpmc2() mfspr(PMC2) +#define mtpmc2(_val) mtspr(PMC2,_val) +#define mfpmc3() mfspr(PMC3) +#define mtpmc3(_val) mtspr(PMC3,_val) +#define mfpmc4() mfspr(PMC4) +#define mtpmc4(_val) mtspr(PMC4,_val) + +#define mfhid0() mfspr(HID0) +#define mthid0(_val) mtspr(HID0,_val) +#define mfhid1() mfspr(HID1) +#define mthid1(_val) mtspr(HID1,_val) +#define mfhid2() mfspr(HID2) +#define mthid2(_val) mtspr(HID2,_val) +#define mfhid4() mfspr(HID4) +#define mthid4(_val) mtspr(HID4,_val) + +#define __lhbrx(base,index) \ +({ register u16 res; \ + __asm__ volatile ("lhbrx %0,%1,%2" : "=r"(res) : "b%"(index), "r"(base) : "memory"); \ + res; }) + +#define __lwbrx(base,index) \ +({ register u32 res; \ + __asm__ volatile ("lwbrx %0,%1,%2" : "=r"(res) : "b%"(index), "r"(base) : "memory"); \ + res; }) + +#define __sthbrx(base,index,value) \ + __asm__ volatile ("sthbrx %0,%1,%2" : : "r"(value), "b%"(index), "r"(base) : "memory") + +#define __stwbrx(base,index,value) \ + __asm__ volatile ("stwbrx %0,%1,%2" : : "r"(value), "b%"(index), "r"(base) : "memory") + +#define cntlzw(_val) ({register u32 _rval; \ + asm volatile("cntlzw %0, %1" : "=r"((_rval)) : "r"((_val))); _rval;}) + +#define _CPU_MSR_GET( _msr_value ) \ + do { \ + _msr_value = 0; \ + asm volatile ("mfmsr %0" : "=&r" ((_msr_value)) : "0" ((_msr_value))); \ + } while (0) + +#define _CPU_MSR_SET( _msr_value ) \ +{ asm volatile ("mtmsr %0" : "=&r" ((_msr_value)) : "0" ((_msr_value))); } + +#define _CPU_ISR_Enable() \ + { register u32 _val = 0; \ + __asm__ __volatile__ ( \ + "mfmsr %0\n" \ + "ori %0,%0,0x8000\n" \ + "mtmsr %0" \ + : "=&r" ((_val)) : "0" ((_val)) \ + ); \ + } + +#define _CPU_ISR_Disable( _isr_cookie ) \ + { register u32 _disable_mask = 0; \ + _isr_cookie = 0; \ + __asm__ __volatile__ ( \ + "mfmsr %0\n" \ + "rlwinm %1,%0,0,17,15\n" \ + "mtmsr %1\n" \ + "extrwi %0,%0,1,16" \ + : "=&r" ((_isr_cookie)), "=&r" ((_disable_mask)) \ + : "0" ((_isr_cookie)), "1" ((_disable_mask)) \ + ); \ + } + +#define _CPU_ISR_Restore( _isr_cookie ) \ + { register u32 _enable_mask = 0; \ + __asm__ __volatile__ ( \ + " cmpwi %0,0\n" \ + " beq 1f\n" \ + " mfmsr %1\n" \ + " ori %1,%1,0x8000\n" \ + " mtmsr %1\n" \ + "1:" \ + : "=r"((_isr_cookie)),"=&r" ((_enable_mask)) \ + : "0"((_isr_cookie)),"1" ((_enable_mask)) \ + ); \ + } + +#define _CPU_ISR_Flash( _isr_cookie ) \ + { register u32 _flash_mask = 0; \ + __asm__ __volatile__ ( \ + " cmpwi %0,0\n" \ + " beq 1f\n" \ + " mfmsr %1\n" \ + " ori %1,%1,0x8000\n" \ + " mtmsr %1\n" \ + " rlwinm %1,%1,0,17,15\n" \ + " mtmsr %1\n" \ + "1:" \ + : "=r" ((_isr_cookie)), "=&r" ((_flash_mask)) \ + : "0" ((_isr_cookie)), "1" ((_flash_mask)) \ + ); \ + } + +#define _CPU_FPR_Enable() \ +{ register u32 _val = 0; \ + asm volatile ("mfmsr %0; ori %0,%0,0x2000; mtmsr %0" : \ + "=&r" (_val) : "0" (_val));\ +} + +#define _CPU_FPR_Disable() \ +{ register u32 _val = 0; \ + asm volatile ("mfmsr %0; rlwinm %0,%0,0,19,17; mtmsr %0" : \ + "=&r" (_val) : "0" (_val));\ +} + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +static inline u16 bswap16(u16 val) +{ + u16 tmp = val; + return __lhbrx(&tmp,0); +} + +static inline u32 bswap32(u32 val) +{ + u32 tmp = val; + return __lwbrx(&tmp,0); +} + +static inline u64 bswap64(u64 val) +{ + union ullc { + u64 ull; + u32 ul[2]; + } outv; + u64 tmp = val; + + outv.ul[0] = __lwbrx(&tmp,4); + outv.ul[1] = __lwbrx(&tmp,0); + + return outv.ull; +} + +// Basic I/O + +static inline u32 read32(u32 addr) +{ + u32 x; + asm volatile("lwz %0,0(%1) ; sync" : "=r"(x) : "b"(0xc0000000 | addr)); + return x; +} + +static inline void write32(u32 addr, u32 x) +{ + asm("stw %0,0(%1) ; eieio" : : "r"(x), "b"(0xc0000000 | addr)); +} + +static inline void mask32(u32 addr, u32 clear, u32 set) +{ + write32(addr, (read32(addr)&(~clear)) | set); +} + +static inline u16 read16(u32 addr) +{ + u16 x; + asm volatile("lhz %0,0(%1) ; sync" : "=r"(x) : "b"(0xc0000000 | addr)); + return x; +} + +static inline void write16(u32 addr, u16 x) +{ + asm("sth %0,0(%1) ; eieio" : : "r"(x), "b"(0xc0000000 | addr)); +} + +static inline u8 read8(u32 addr) +{ + u8 x; + asm volatile("lbz %0,0(%1) ; sync" : "=r"(x) : "b"(0xc0000000 | addr)); + return x; +} + +static inline void write8(u32 addr, u8 x) +{ + asm("stb %0,0(%1) ; eieio" : : "r"(x), "b"(0xc0000000 | addr)); +} + +static inline void writef32(u32 addr, f32 x) +{ + asm("stfs %0,0(%1) ; eieio" : : "f"(x), "b"(0xc0000000 | addr)); +} + +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif diff --git a/wii/libogc/include/ogc/machine/spinlock.h b/wii/libogc/include/ogc/machine/spinlock.h new file mode 100644 index 0000000000..1d6022a2fb --- /dev/null +++ b/wii/libogc/include/ogc/machine/spinlock.h @@ -0,0 +1,191 @@ +#ifndef __SPINLOCK_H__ +#define __SPINLOCK_H__ + +#include +#include + +typedef struct { + vu32 lock; +} spinlock_t; + +#define SPIN_LOCK_UNLOCKED (spinlock_t){0} + +#define spin_lock_init(x) do { *(x) = SPIN_LOCK_UNLOCKED; }while(0) + +static __inline__ u32 _test_and_set(u32 *atomic) +{ + register u32 ret; + + __asm__ __volatile__ ("1: lwarx %0,0,%1\n" + " cmpwi 0,%0,0\n" + " bne- 2f\n" + " stwcx. %2,0,%1\n" + " bne- 1b\n" + " isync\n" + "2:" : "=&r"(ret) + : "r"(atomic), "r"(1) + : "cr0", "memory"); + + return ret; +} + +static __inline__ u32 atomic_inc(u32 *pint) +{ + register u32 ret; + __asm__ __volatile__( + "1: lwarx %0,0,%1\n\ + addi %0,%0,1\n\ + stwcx. %0,0,%1\n\ + bne- 1b\n\ + isync\n" + : "=&r"(ret) : "r"(pint) + : "cr0", "memory"); + return ret; +} + +static __inline__ u32 atomic_dec(u32 *pint) +{ + register u32 ret; + __asm__ __volatile__( + "1: lwarx %0,0,%1\n\ + addi %0,%0,-1\n\ + stwcx. %0,0,%1\n\ + bne- 1b\n\ + isync\n" + : "=&r"(ret) : "r"(pint) + : "cr0", "memory"); + return ret; +} + +static __inline__ void spin_lock(spinlock_t *lock) +{ + register u32 tmp; + + __asm__ __volatile__( + "b 1f # spin_lock\n\ +2: lwzx %0,0,%1\n\ + cmpwi 0,%0,0\n\ + bne+ 2b\n\ +1: lwarx %0,0,%1\n\ + cmpwi 0,%0,0\n\ + bne- 2b\n\ + stwcx. %2,0,%1\n\ + bne- 2b\n\ + isync" + : "=&r"(tmp) + : "r"(lock), "r"(1) + : "cr0", "memory"); +} + +static __inline__ void spin_lock_irqsave(spinlock_t *lock,register u32 *p_isr_level) +{ + register u32 level; + register u32 tmp; + + _CPU_ISR_Disable(level); + + __asm__ __volatile__( + " b 1f # spin_lock\n\ + 2: lwzx %0,0,%1\n\ + cmpwi 0,%0,0\n\ + bne+ 2b\n\ + 1: lwarx %0,0,%1\n\ + cmpwi 0,%0,0\n\ + bne- 2b\n\ + stwcx. %2,0,%1\n\ + bne- 2b\n\ + isync" + : "=&r"(tmp) + : "r"(lock), "r"(1) + : "cr0", "memory"); + + *p_isr_level = level; +} + +static __inline__ void spin_unlock(spinlock_t *lock) +{ + __asm__ __volatile__("eieio # spin_unlock": : :"memory"); + lock->lock = 0; +} + +static __inline__ void spin_unlock_irqrestore(spinlock_t *lock,register u32 isr_level) +{ + __asm__ __volatile__( + "eieio # spin_unlock" + : : :"memory"); + lock->lock = 0; + + _CPU_ISR_Restore(isr_level); +} + +typedef struct { + vu32 lock; +} rwlock_t; + +#define RW_LOCK_UNLOCKED (rwlock_t){0} + +#define read_lock_init(lp) do { *(lp) = RW_LOCK_UNLOCKED; }while(0) + +static __inline__ void read_lock(rwlock_t *rw) +{ + register u32 tmp; + + __asm__ __volatile__( + "b 2f # read_lock\n\ +1: lwzx %0,0,%1\n\ + cmpwi 0,%0,0\n\ + blt+ 1b\n\ +2: lwarx %0,0,%1\n\ + addic. %0,%0,1\n\ + ble- 1b\n\ + stwcx. %0,0,%1\n\ + bne- 2b\n\ + isync" + : "=&r"(tmp) + : "r"(&rw->lock) + : "cr0", "memory"); +} + +static __inline__ void read_unlock(rwlock_t *rw) +{ + register u32 tmp; + + __asm__ __volatile__( + "eieio # read_unlock\n\ +1: lwarx %0,0,%1\n\ + addic %0,%0,-1\n\ + stwcx. %0,0,%1\n\ + bne- 1b" + : "=&r"(tmp) + : "r"(&rw->lock) + : "cr0", "memory"); +} + +static __inline__ void write_lock(rwlock_t *rw) +{ + register u32 tmp; + + __asm__ __volatile__( + "b 2f # write_lock\n\ +1: lwzx %0,0,%1\n\ + cmpwi 0,%0,0\n\ + bne+ 1b\n\ +2: lwarx %0,0,%1\n\ + cmpwi 0,%0,0\n\ + bne- 1b\n\ + stwcx. %2,0,%1\n\ + bne- 2b\n\ + isync" + : "=&r"(tmp) + : "r"(&rw->lock), "r"(-1) + : "cr0", "memory"); +} + +static __inline__ void write_unlock(rwlock_t *rw) +{ + __asm__ __volatile__("eieio # write_unlock": : :"memory"); + rw->lock = 0; +} + + +#endif diff --git a/wii/libogc/include/ogc/message.h b/wii/libogc/include/ogc/message.h new file mode 100644 index 0000000000..445b1bc4d6 --- /dev/null +++ b/wii/libogc/include/ogc/message.h @@ -0,0 +1,123 @@ +/*------------------------------------------------------------- + +message.h -- Thread subsystem II + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + + +#ifndef __MESSAGE_H__ +#define __MESSAGE_H__ + +/*! \file message.h +\brief Thread subsystem II + +*/ + +#include + +#define MQ_BOX_NULL 0xffffffff + +#define MQ_ERROR_SUCCESSFUL 0 +#define MQ_ERROR_TOOMANY -5 + +#define MQ_MSG_BLOCK 0 +#define MQ_MSG_NOBLOCK 1 + + +#ifdef __cplusplus +extern "C" { +#endif + + +/*! \typedef u32 mqbox_t +\brief typedef for the message queue handle +*/ +typedef u32 mqbox_t; + + +/*! \typedef void* mqmsg_t +\brief typedef for the message pointer +*/ +typedef void* mqmsg_t; + + + +/*! \fn u32 MQ_Init(mqbox_t *mqbox,u32 count) +\brief Initializes a message queue +\param[out] mqbox pointer to the mqbox_t handle. +\param[in] count maximum number of messages the queue can hold + +\return 0 on success, <0 on error +*/ +s32 MQ_Init(mqbox_t *mqbox,u32 count); + + +/*! \fn void MQ_Close(mqbox_t mqbox) +\brief Closes the message queue and releases all memory. +\param[in] mqbox handle to the mqbox_t structure. + +\return none +*/ +void MQ_Close(mqbox_t mqbox); + + +/*! \fn BOOL MQ_Send(mqbox_t mqbox,mqmsg_t msg,u32 flags) +\brief Sends a message to the given message queue. +\param[in] mqbox mqbox_t handle to the message queue +\param[in] msg message to send +\param[in] flags message flags (MQ_MSG_BLOCK, MQ_MSG_NOBLOCK) + +\return bool result +*/ +BOOL MQ_Send(mqbox_t mqbox,mqmsg_t msg,u32 flags); + + +/*! \fn BOOL MQ_Jam(mqbox_t mqbox,mqmsg_t msg,u32 flags) +\brief Sends a message to the given message queue and jams it in front of the queue. +\param[in] mqbox mqbox_t handle to the message queue +\param[in] msg message to send +\param[in] flags message flags (MQ_MSG_BLOCK, MQ_MSG_NOBLOCK) + +\return bool result +*/ +BOOL MQ_Jam(mqbox_t mqbox,mqmsg_t msg,u32 flags); + + +/*! \fn BOOL MQ_Receive(mqbox_t mqbox,mqmsg_t *msg,u32 flags) +\brief Sends a message to the given message queue. +\param[in] mqbox mqbox_t handle to the message queue +\param[in] msg pointer to a mqmsg_t_t-type message to receive. +\param[in] flags message flags (MQ_MSG_BLOCK, MQ_MSG_NOBLOCK) + +\return bool result +*/ +BOOL MQ_Receive(mqbox_t mqbox,mqmsg_t *msg,u32 flags); + +#ifdef __cplusplus + } +#endif + +#endif diff --git a/wii/libogc/include/ogc/mutex.h b/wii/libogc/include/ogc/mutex.h new file mode 100644 index 0000000000..4faaf23926 --- /dev/null +++ b/wii/libogc/include/ogc/mutex.h @@ -0,0 +1,103 @@ +/*------------------------------------------------------------- + +mutex.h -- Thread subsystem III + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + + +#ifndef __MUTEX_H__ +#define __MUTEX_H__ + +/*! \file mutex.h +\brief Thread subsystem III + +*/ + +#include + +#define LWP_MUTEX_NULL 0xffffffff + +#ifdef __cplusplus + extern "C" { +#endif + + +/*! \typedef u32 mutex_t +\brief typedef for the mutex handle +*/ +typedef u32 mutex_t; + + +/*! \fn s32 LWP_MutexInit(mutex_t *mutex,bool use_recursive) +\brief Initializes a mutex lock. +\param[out] mutex pointer to a mutex_t handle. +\param[in] use_recursive whether to allow the thread, whithin the same context, to enter multiple times the lock or not. + +\return 0 on success, <0 on error +*/ +s32 LWP_MutexInit(mutex_t *mutex,bool use_recursive); + + +/*! \fn s32 LWP_MutexDestroy(mutex_t mutex) +\brief Close mutex lock, release all threads and handles locked on this mutex. +\param[in] mutex handle to the mutex_t structure. + +\return 0 on success, <0 on error +*/ +s32 LWP_MutexDestroy(mutex_t mutex); + + +/*! \fn s32 LWP_MutexLock(mutex_t mutex) +\brief Enter the mutex lock. +\param[in] mutex handle to the mutext_t structure. + +\return 0 on success, <0 on error +*/ +s32 LWP_MutexLock(mutex_t mutex); + + +/*! \fn s32 LWP_MutexTryLock(mutex_t mutex) +\brief Try to enter the mutex lock. +\param[in] mutex handle to the mutex_t structure. + +\return 0: on first aquire, 1: would lock +*/ +s32 LWP_MutexTryLock(mutex_t mutex); + + +/*! \fn s32 LWP_MutexUnlock(mutex_t mutex) +\brief Release the mutex lock and let other threads process further on this mutex. +\param[in] mutex handle to the mutex_t structure. + +\return 0 on success, <0 on error +*/ +s32 LWP_MutexUnlock(mutex_t mutex); + +#ifdef __cplusplus + } +#endif + +#endif diff --git a/wii/libogc/include/ogc/pad.h b/wii/libogc/include/ogc/pad.h new file mode 100644 index 0000000000..3488c5c5b4 --- /dev/null +++ b/wii/libogc/include/ogc/pad.h @@ -0,0 +1,97 @@ +#ifndef __PAD_H__ +#define __PAD_H__ + +#include + +#define PAD_CHAN0 0 +#define PAD_CHAN1 1 +#define PAD_CHAN2 2 +#define PAD_CHAN3 3 +#define PAD_CHANMAX 4 + +#define PAD_MOTOR_STOP 0 +#define PAD_MOTOR_RUMBLE 1 +#define PAD_MOTOR_STOP_HARD 2 + +#define PAD_ERR_NONE 0 +#define PAD_ERR_NO_CONTROLLER -1 +#define PAD_ERR_NOT_READY -2 +#define PAD_ERR_TRANSFER -3 + +#define PAD_BUTTON_LEFT 0x0001 +#define PAD_BUTTON_RIGHT 0x0002 +#define PAD_BUTTON_DOWN 0x0004 +#define PAD_BUTTON_UP 0x0008 +#define PAD_TRIGGER_Z 0x0010 +#define PAD_TRIGGER_R 0x0020 +#define PAD_TRIGGER_L 0x0040 +#define PAD_BUTTON_A 0x0100 +#define PAD_BUTTON_B 0x0200 +#define PAD_BUTTON_X 0x0400 +#define PAD_BUTTON_Y 0x0800 +#define PAD_BUTTON_MENU 0x1000 +#define PAD_BUTTON_START 0x1000 + +#define PAD_CHAN0_BIT 0x80000000 +#define PAD_CHAN1_BIT 0x40000000 +#define PAD_CHAN2_BIT 0x20000000 +#define PAD_CHAN3_BIT 0x10000000 +/*+----------------------------------------------------------------------------------------------+*/ +/*+----------------------------------------------------------------------------------------------+*/ +/*+----------------------------------------------------------------------------------------------+*/ +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ +/*+----------------------------------------------------------------------------------------------+*/ +typedef struct _padstatus { + u16 button; + s8 stickX; + s8 stickY; + s8 substickX; + s8 substickY; + u8 triggerL; + u8 triggerR; + u8 analogA; + u8 analogB; + s8 err; +} PADStatus; + +typedef void (*sampling_callback)(void); +/*+----------------------------------------------------------------------------------------------+*/ +/*+----------------------------------------------------------------------------------------------+*/ +/*+----------------------------------------------------------------------------------------------+*/ + +u32 PAD_Init(); +u32 PAD_Sync(); +u32 PAD_Read(PADStatus *status); +u32 PAD_Reset(u32 mask); +u32 PAD_Recalibrate(u32 mask); +void PAD_Clamp(PADStatus *status); +void PAD_ControlMotor(s32 chan,u32 cmd); +void PAD_SetSpec(u32 spec); + +u32 PAD_ScanPads(); + +u16 PAD_ButtonsUp(int pad); +u16 PAD_ButtonsDown(int pad); +u16 PAD_ButtonsHeld(int pad); + +s8 PAD_SubStickX(int pad); +s8 PAD_SubStickY(int pad); + +s8 PAD_StickX(int pad); +s8 PAD_StickY(int pad); + +u8 PAD_TriggerL(int pad); +u8 PAD_TriggerR(int pad); + + +sampling_callback PAD_SetSamplingCallback(sampling_callback cb); + +/*+----------------------------------------------------------------------------------------------+*/ + +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif diff --git a/wii/libogc/include/ogc/semaphore.h b/wii/libogc/include/ogc/semaphore.h new file mode 100644 index 0000000000..c7ba6c6d0e --- /dev/null +++ b/wii/libogc/include/ogc/semaphore.h @@ -0,0 +1,96 @@ +/*------------------------------------------------------------- + +semaphore.h -- Thread subsystem IV + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + + +#ifndef __SEMAPHORE_H__ +#define __SEMAPHORE_H__ + +/*! \file semaphore.h +\brief Thread subsystem IV + +*/ + + +#include + +#define LWP_SEM_NULL 0xffffffff + +#ifdef __cplusplus +extern "C" { +#endif + + +/*! \typedef u32 sem_t +\brief typedef for the semaphore handle +*/ +typedef u32 sem_t; + + +/*! \fn s32 LWP_SemInit(sem_t *sem,u32 start,u32 max) +\brief Initializes a semaphore. +\param[out] sem pointer to a sem_t handle. +\param[in] start start count of the semaphore +\param[in] max maximum count of the semaphore + +\return 0 on success, <0 on error +*/ +s32 LWP_SemInit(sem_t *sem,u32 start,u32 max); + + +/*! \fn s32 LWP_SemDestroy(sem_t sem) +\brief Close and destroy a semaphore, release all threads and handles locked on this semaphore. +\param[in] sem handle to the sem_t structure. + +\return 0 on success, <0 on error +*/ +s32 LWP_SemDestroy(sem_t sem); + + +/*! \fn s32 LWP_SemWait(sem_t sem) +\brief Count down semaphore counter and enter lock if counter <=0 +\param[in] sem handle to the sem_t structure. + +\return 0 on success, <0 on error +*/ +s32 LWP_SemWait(sem_t sem); + + +/*! \fn s32 LWP_SemPost(sem_t sem) +\brief Count up semaphore counter and release lock if counter >0 +\param[in] sem handle to the sem_t structure. + +\return 0 on success, <0 on error +*/ +s32 LWP_SemPost(sem_t sem); + +#ifdef __cplusplus + } +#endif + +#endif diff --git a/wii/libogc/include/ogc/si.h b/wii/libogc/include/ogc/si.h new file mode 100644 index 0000000000..df40c81709 --- /dev/null +++ b/wii/libogc/include/ogc/si.h @@ -0,0 +1,95 @@ +#ifndef __SI_H__ +#define __SI_H__ + +#include + +#define SI_CHAN0 0 +#define SI_CHAN1 1 +#define SI_CHAN2 2 +#define SI_CHAN3 3 +#define SI_MAX_CHAN 4 + +#define SI_CHAN0_BIT 0x80000000 +#define SI_CHAN1_BIT 0x40000000 +#define SI_CHAN2_BIT 0x20000000 +#define SI_CHAN3_BIT 0x10000000 +#define SI_CHAN_BIT(chn) (SI_CHAN0_BIT>>(chn)) + +#define SI_ERROR_UNDER_RUN 0x0001 +#define SI_ERROR_OVER_RUN 0x0002 +#define SI_ERROR_COLLISION 0x0004 +#define SI_ERROR_NO_RESPONSE 0x0008 +#define SI_ERROR_WRST 0x0010 +#define SI_ERROR_RDST 0x0020 +#define SI_ERR_UNKNOWN 0x0040 +#define SI_ERR_BUSY 0x0080 + +// +// CMD_TYPE_AND_STATUS response data +// +#define SI_TYPE_MASK 0x18000000u +#define SI_TYPE_N64 0x00000000u +#define SI_TYPE_DOLPHIN 0x08000000u +#define SI_TYPE_GC SI_TYPE_DOLPHIN + +// GameCube specific +#define SI_GC_WIRELESS 0x80000000u +#define SI_GC_NOMOTOR 0x20000000u // no rumble motor +#define SI_GC_STANDARD 0x01000000u // dolphin standard controller + +// WaveBird specific +#define SI_WIRELESS_RECEIVED 0x40000000u // 0: no wireless unit +#define SI_WIRELESS_IR 0x04000000u // 0: IR 1: RF +#define SI_WIRELESS_STATE 0x02000000u // 0: variable 1: fixed +#define SI_WIRELESS_ORIGIN 0x00200000u // 0: invalid 1: valid +#define SI_WIRELESS_FIX_ID 0x00100000u // 0: not fixed 1: fixed +#define SI_WIRELESS_TYPE 0x000f0000u +#define SI_WIRELESS_LITE_MASK 0x000c0000u // 0: normal 1: lite controller +#define SI_WIRELESS_LITE 0x00040000u // 0: normal 1: lite controller +#define SI_WIRELESS_CONT_MASK 0x00080000u // 0: non-controller 1: non-controller +#define SI_WIRELESS_CONT 0x00000000u +#define SI_WIRELESS_ID 0x00c0ff00u +#define SI_WIRELESS_TYPE_ID (SI_WIRELESS_TYPE | SI_WIRELESS_ID) + +#define SI_N64_CONTROLLER (SI_TYPE_N64 | 0x05000000) +#define SI_N64_MIC (SI_TYPE_N64 | 0x00010000) +#define SI_N64_KEYBOARD (SI_TYPE_N64 | 0x00020000) +#define SI_N64_MOUSE (SI_TYPE_N64 | 0x02000000) +#define SI_GBA (SI_TYPE_N64 | 0x00040000) +#define SI_GC_CONTROLLER (SI_TYPE_GC | SI_GC_STANDARD) +#define SI_GC_RECEIVER (SI_TYPE_GC | SI_GC_WIRELESS) +#define SI_GC_WAVEBIRD (SI_TYPE_GC | SI_GC_WIRELESS | SI_GC_STANDARD | SI_WIRELESS_STATE | SI_WIRELESS_FIX_ID) +#define SI_GC_KEYBOARD (SI_TYPE_GC | 0x00200000) +#define SI_GC_STEERING (SI_TYPE_GC | 0x00000000) + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +typedef void (*SICallback)(s32,u32); +typedef void (*RDSTHandler)(u32,void*); + +u32 SI_Sync(); +u32 SI_Busy(); +u32 SI_IsChanBusy(s32 chan); +void SI_EnablePolling(u32 poll); +void SI_DisablePolling(u32 poll); +void SI_SetCommand(s32 chan,u32 cmd); +u32 SI_GetStatus(s32 chan); +u32 SI_GetResponse(s32 chan,void *buf); +u32 SI_GetResponseRaw(s32 chan); +void SI_RefreshSamplingRate(); +u32 SI_Transfer(s32 chan,void *out,u32 out_len,void *in,u32 in_len,SICallback cb,u32 us_delay); +u32 SI_GetTypeAsync(s32 chan,SICallback cb); +u32 SI_GetType(s32 chan); +u32 SI_GetCommand(s32 chan); +void SI_TransferCommands(); +u32 SI_RegisterPollingHandler(RDSTHandler handler); +u32 SI_UnregisterPollingHandler(RDSTHandler handler); +u32 SI_EnablePollingInterrupt(s32 enable); + +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif diff --git a/wii/libogc/include/ogc/stm.h b/wii/libogc/include/ogc/stm.h new file mode 100644 index 0000000000..5d2307f4c5 --- /dev/null +++ b/wii/libogc/include/ogc/stm.h @@ -0,0 +1,66 @@ +/*------------------------------------------------------------- + +stm.h - System and miscellaneous hardware control functions + +Copyright (C) 2008 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) +Hector Martin (marcan) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + +#ifndef __STM_H__ +#define __STM_H__ + +#if defined(HW_RVL) + +#include +#include + +#define STM_EVENT_RESET 0x00020000 +#define STM_EVENT_POWER 0x00000800 + +#define STM_EINVAL -0x2004 +#define STM_ENOTINIT -0x2100 +#define STM_ENOHANDLER -0x2101 + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +typedef void (*stmcallback)(u32 event); + +s32 __STM_Init(); +s32 __STM_Close(); +s32 STM_ShutdownToStandby(); +s32 STM_ShutdownToIdle(); +s32 STM_SetLedMode(u32 mode); +s32 STM_RebootSystem(); +stmcallback STM_RegisterEventHandler(stmcallback newhandler); + +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif /* defined(HW_RVL) */ + +#endif diff --git a/wii/libogc/include/ogc/sys_state.h b/wii/libogc/include/ogc/sys_state.h new file mode 100644 index 0000000000..b48837b2e2 --- /dev/null +++ b/wii/libogc/include/ogc/sys_state.h @@ -0,0 +1,27 @@ +#ifndef __SYS_STATE_H__ +#define __SYS_STATE_H__ + +#define SYS_STATE_BEFORE_INIT 0 +#define SYS_STATE_BEFORE_MT 1 +#define SYS_STATE_BEGIN_MT 2 +#define SYS_STATE_UP 3 +#define SYS_STATE_SHUTDOWN 4 +#define SYS_STATE_FAILED 5 + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern u32 _sys_state_curr; + +#ifdef LIBOGC_INTERNAL +#include +#endif + +#ifdef __cplusplus + } +#endif + +#endif diff --git a/wii/libogc/include/ogc/system.h b/wii/libogc/include/ogc/system.h new file mode 100644 index 0000000000..b82e251438 --- /dev/null +++ b/wii/libogc/include/ogc/system.h @@ -0,0 +1,350 @@ +/*------------------------------------------------------------- + +system.h -- OS functions and initialization + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + + +-------------------------------------------------------------*/ + + +#ifndef __SYSTEM_H__ +#define __SYSTEM_H__ + + +/*! \file system.h +\brief OS functions and initialization + +*/ + +#include +#include +#include +#include +#include "gx_struct.h" + +#define SYS_BASE_CACHED (0x80000000) +#define SYS_BASE_UNCACHED (0xC0000000) + +#define SYS_WD_NULL 0xffffffff + +/*! + * \addtogroup sys_resettypes OS reset types + * @{ + */ + +#define SYS_RESTART 0 /*!< Reboot the gamecube, force, if necessary, to boot the IPL menu. Cold reset is issued */ +#define SYS_HOTRESET 1 /*!< Restart the application. Kind of softreset */ +#define SYS_SHUTDOWN 2 /*!< Shutdown the thread system, card management system etc. Leave current thread running and return to caller */ + +#define SYS_RETURNTOMENU 3 /*!< Directly load the Wii Channels menu, without actually cold-resetting the system */ +#define SYS_POWEROFF 4 /*!< Powers off the Wii, automatically choosing Standby or Idle mode depending on the user's configuration */ +#define SYS_POWEROFF_STANDBY 5 /*!< Powers off the Wii to standby (red LED, WC24 off) mode. */ +#define SYS_POWEROFF_IDLE 6 /*!< Powers off the Wii to idle (yellow LED, WC24 on) mode. */ + +/*! + *@} + */ + + +/*! + * \addtogroup sys_mprotchans OS memory protection channels + * @{ + */ + +#define SYS_PROTECTCHAN0 0 /*!< OS memory protection channel 0 */ +#define SYS_PROTECTCHAN1 1 /*!< OS memory protection channel 1 */ +#define SYS_PROTECTCHAN2 2 /*!< OS memory protection channel 2 */ +#define SYS_PROTECTCHAN3 3 /*!< OS memory protection channel 2 */ +#define SYS_PROTECTCHANMAX 4 /*!< _Termination */ + +/*! + *@} + */ + + +/*! + * \addtogroup sys_mprotmodes OS memory protection modes + * @{ + */ + +#define SYS_PROTECTNONE 0x00000000 /*!< Read and write operations on protected region is granted */ +#define SYS_PROTECTREAD 0x00000001 /*!< Read from protected region is permitted */ +#define SYS_PROTECTWRITE 0x00000002 /*!< Write to protected region is permitted */ +#define SYS_PROTECTRDWR (SYS_PROTECTREAD|SYS_PROTECTWRITE) /*!< Read and write operations on protected region is permitted */ + +/*! + *@} + */ + +#define SYS_FONTSIZE_ANSI (288 + 131072) +#define SYS_FONTSIZE_SJIS (3840 + 1179648) + + + +/*! + * \addtogroup sys_mcastmacros OS memory casting macros + * @{ + */ + +#define MEM_VIRTUAL_TO_PHYSICAL(x) (((u32)(x)) & ~SYS_BASE_UNCACHED) /*!< Cast virtual address to physical address, e.g. 0x8xxxxxxx -> 0x0xxxxxxx */ +#define MEM_PHYSICAL_TO_K0(x) (void*)((u32)(x) + SYS_BASE_CACHED) /*!< Cast physical address to cached virtual address, e.g. 0x0xxxxxxx -> 0x8xxxxxxx */ +#define MEM_PHYSICAL_TO_K1(x) (void*)((u32)(x) + SYS_BASE_UNCACHED) /*!< Cast physical address to uncached virtual address, e.g. 0x0xxxxxxx -> 0xCxxxxxxx */ +#define MEM_K0_TO_PHYSICAL(x) (void*)((u32)(x) - SYS_BASE_CACHED) /*!< Cast physical address to cached virtual address, e.g. 0x0xxxxxxx -> 0x8xxxxxxx */ +#define MEM_K1_TO_PHYSICAL(x) (void*)((u32)(x) - SYS_BASE_UNCACHED) /*!< Cast physical address to uncached virtual address, e.g. 0x0xxxxxxx -> 0xCxxxxxxx */ +#define MEM_K0_TO_K1(x) (void*)((u32)(x) + (SYS_BASE_UNCACHED - SYS_BASE_CACHED)) /*!< Cast cached virtual address to uncached virtual address, e.g. 0x8xxxxxxx -> 0xCxxxxxxx */ +#define MEM_K1_TO_K0(x) (void*)((u32)(x) - (SYS_BASE_UNCACHED - SYS_BASE_CACHED)) /*!< Cast uncached virtual address to cached virtual address, e.g. 0xCxxxxxxx -> 0x8xxxxxxx */ + +/*! + *@} + */ + +#define SYS_GetArenaLo SYS_GetArena1Lo +#define SYS_SetArenaLo SYS_SetArena1Lo +#define SYS_GetArenaHi SYS_GetArena1Hi +#define SYS_SetArenaHi SYS_SetArena1Hi +#define SYS_GetArenaSize SYS_GetArena1Size + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + + +/*! + * \typedef u32 syswd_t + * \brief handle typedef for the alarm context + */ +typedef u32 syswd_t; + + + /*! + * \typedef struct _syssram syssram + * \brief holds the stored configuration value from the system SRAM area + * \param checksum holds the block checksum. + * \param checksum_in holds the inverse block checksum + * \param ead0 unknown attribute + * \param ead1 unknown attribute + * \param counter_bias bias value for the realtime clock + * \param display_offsetH pixel offset for the VI + * \param ntd unknown attribute + * \param lang language of system + * \param flags device and operations flag + */ +typedef struct _syssram syssram; + +struct _syssram { + u16 checksum; + u16 checksum_inv; + u32 ead0; + u32 ead1; + u32 counter_bias; + s8 display_offsetH; + u8 ntd; + u8 lang; + u8 flags; +} ATTRIBUTE_PACKED; + + +/*! + * \typedef struct _syssramex syssramex + * \brief holds the stored configuration value from the extended SRAM area + * \param flash_id[2][12] 96bit memorycard unlock flash ID + * \param wirelessKbd_id Device ID of last connected wireless keyboard + * \param wirelessPad_id[4] 16bit device ID of last connected pad. + * \param dvderr_code last non-recoverable error from DVD interface + * \param __padding0 padding + * \param flashID_chksum[2] 16bit checksum of unlock flash ID + * \param __padding1[4] padding + */ +typedef struct _syssramex syssramex; + +struct _syssramex { + u8 flash_id[2][12]; + u32 wirelessKbd_id; + u16 wirelessPad_id[4]; + u8 dvderr_code; + u8 __padding0; + u16 flashID_chksum[2]; + u8 __padding1[4]; +} ATTRIBUTE_PACKED; + +typedef void (*alarmcallback)(syswd_t alarm,void *cb_arg); + +typedef struct _sys_fontheader sys_fontheader; + +struct _sys_fontheader { + u16 font_type; + u16 first_char; + u16 last_char; + u16 inval_char; + u16 asc; + u16 desc; + u16 width; + u16 leading; + u16 cell_width; + u16 cell_height; + u32 sheet_size; + u16 sheet_format; + u16 sheet_column; + u16 sheet_row; + u16 sheet_width; + u16 sheet_height; + u16 width_table; + u32 sheet_image; + u32 sheet_fullsize; + u8 c0; + u8 c1; + u8 c2; + u8 c3; +} ATTRIBUTE_PACKED; + +typedef void (*resetcallback)(void); +typedef void (*powercallback)(void); +typedef s32 (*resetfunction)(s32 final); +typedef struct _sys_resetinfo sys_resetinfo; + +struct _sys_resetinfo { + lwp_node node; + resetfunction func; + u32 prio; +}; + +/*! \fn void SYS_Init() +\deprecated Performs basic system initialization such as EXI init etc. This function is called from within the crt0 startup code. + +\return none +*/ +void SYS_Init(); + + +/*! + * \fn void* SYS_AllocateFramebuffer(GXRModeObj *rmode) + * \brief Allocate cacheline aligned memory for the external framebuffer based on the rendermode object. + * \param[in] rmode pointer to the video/render mode configuration + * + * \return pointer to the framebuffer's startaddress. NOTE: Address returned is aligned to a 32byte boundery! + */ +void* SYS_AllocateFramebuffer(GXRModeObj *rmode); + + +void SYS_ProtectRange(u32 chan,void *addr,u32 bytes,u32 cntrl); +void SYS_StartPMC(u32 mcr0val,u32 mcr1val); +void SYS_DumpPMC(); +void SYS_StopPMC(); + + +/*! \fn s32 SYS_CreateAlarm(syswd_t *thealarm) +\brief Create/initialize sysalarm structure +\param[in] thealarm pointer to the handle to store the created alarm context identifier + +\return 0 on succuess, non-zero on error +*/ +s32 SYS_CreateAlarm(syswd_t *thealarm); + + +/*! \fn s32 SYS_SetAlarm(syswd_t thealarm,const struct timespec *tp,alarmcallback cb) +\brief Set the alarm parameters for a one-shot alarm, add to the list of alarms and start. +\param[in] thealarm identifier to the alarm context to be initialize for a one-shot alarm +\param[in] tp pointer to timespec structure holding the time to fire the alarm +\param[in] cb pointer to callback which is called when the alarm fires. + +\return 0 on succuess, non-zero on error +*/ +s32 SYS_SetAlarm(syswd_t thealarm,const struct timespec *tp,alarmcallback cb,void *cbarg); + + +/*! \fn s32 SYS_SetPeriodicAlarm(syswd_t thealarm,const struct timespec *tp_start,const struct timespec *tp_period,alarmcallback cb) +\brief Set the alarm parameters for a periodioc alarm, add to the list of alarms and start. The alarm and interval persists as long as SYS_CancelAlarm() isn't called. +\param[in] thealarm identifier to the alarm context to be initialized for a periodic alarm +\param[in] tp_start pointer to timespec structure holding the time to fire first time the alarm +\param[in] tp_period pointer to timespec structure holding the interval for all following alarm triggers. +\param[in] cb pointer to callback which is called when the alarm fires. + +\return 0 on succuess, non-zero on error +*/ +s32 SYS_SetPeriodicAlarm(syswd_t thealarm,const struct timespec *tp_start,const struct timespec *tp_period,alarmcallback cb,void *cbarg); + + +/*! \fn s32 SYS_RemoveAlarm(syswd_t thealarm) +\brief Remove the given alarm context from the list of contexts and destroy it +\param[in] thealarm identifier to the alarm context to be removed and destroyed + +\return 0 on succuess, non-zero on error +*/ +s32 SYS_RemoveAlarm(syswd_t thealarm); + + +/*! \fn s32 SYS_CancelAlarm(syswd_t thealarm) +\brief Cancel the alarm, but do not remove from the list of contexts. +\param[in] thealarm identifier to the alram context to be canceled + +\return 0 on succuess, non-zero on error +*/ +s32 SYS_CancelAlarm(syswd_t thealarm); + + +void SYS_SetWirelessID(u32 chan,u32 id); +u32 SYS_GetWirelessID(u32 chan); +u32 SYS_GetFontEncoding(); +u32 SYS_InitFont(sys_fontheader *font_data); +void SYS_GetFontTexture(s32 c,void **image,s32 *xpos,s32 *ypos,s32 *width); +void SYS_GetFontTexel(s32 c,void *image,s32 pos,s32 stride,s32 *width); +void SYS_ResetSystem(s32 reset,u32 reset_code,s32 force_menu); +void SYS_RegisterResetFunc(sys_resetinfo *info); +void SYS_UnregisterResetFunc(sys_resetinfo *info); +void SYS_SwitchFiber(u32 arg0,u32 arg1,u32 arg2,u32 arg3,u32 pc,u32 newsp); + +void* SYS_GetArena1Lo(); +void SYS_SetArena1Lo(void *newLo); +void* SYS_GetArena1Hi(); +void SYS_SetArena1Hi(void *newHi); +u32 SYS_GetArena1Size(); + +resetcallback SYS_SetResetCallback(resetcallback cb); + +u32 SYS_ResetButtonDown(); + +#if defined(HW_RVL) +u32 SYS_GetHollywoodRevision(); +void* SYS_GetArena2Lo(); +void SYS_SetArena2Lo(void *newLo); +void* SYS_GetArena2Hi(); +void SYS_SetArena2Hi(void *newHi); +u32 SYS_GetArena2Size(); +powercallback SYS_SetPowerCallback(powercallback cb); +#endif + +/* \fn u64 SYS_Time() +\brief Returns the current time in ticks since 2000 (proper Dolphin/Wii time) +\return ticks since 2000 +*/ +u64 SYS_Time(); + +void kprintf(const char *str, ...); + +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif diff --git a/wii/libogc/include/ogc/texconv.h b/wii/libogc/include/ogc/texconv.h new file mode 100644 index 0000000000..3a07ee0ca7 --- /dev/null +++ b/wii/libogc/include/ogc/texconv.h @@ -0,0 +1,51 @@ +/*------------------------------------------------------------- + +texconv.h -- GX texture helper functions + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + + +#ifndef __TEXCONV_H__ +#define __TEXTCONV_H__ + +/*! +\file texconv.h +\brief GX texture helper functions +*/ + +#include + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +void MakeTexture565(const void *src,void *dst,s32 width,s32 height); + +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif diff --git a/wii/libogc/include/ogc/tpl.h b/wii/libogc/include/ogc/tpl.h new file mode 100644 index 0000000000..740b7613ae --- /dev/null +++ b/wii/libogc/include/ogc/tpl.h @@ -0,0 +1,31 @@ +#ifndef __TPL_H__ +#define __TPL_H__ + +#include "gx.h" + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +typedef void* FHANDLE; + +// tdf file +typedef struct _tplfile { + int type; + int ntextures; + void *texdesc; + FHANDLE tpl_file; +} TPLFile; + +s32 TPL_OpenTPLFromFile(TPLFile* tdf, const char* file_name); +s32 TPL_OpenTPLFromMemory(TPLFile* tdf, void *memory,u32 len); +s32 TPL_GetTexture(TPLFile *tdf,s32 id,GXTexObj *texObj); +s32 TPL_GetTextureCI(TPLFile *tdf,s32 id,GXTexObj *texObj,GXTlutObj *tlutObj,u8 tluts); +s32 TPL_GetTextureInfo(TPLFile *tdf,s32 id,u32 *fmt,u16 *width,u16 *height); +void TPL_CloseTPLFile(TPLFile *tdf); + +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif diff --git a/wii/libogc/include/ogc/usb.h b/wii/libogc/include/ogc/usb.h new file mode 100644 index 0000000000..706b81139f --- /dev/null +++ b/wii/libogc/include/ogc/usb.h @@ -0,0 +1,239 @@ +#ifndef __USB_H__ +#define __USB_H__ + +#if defined(HW_RVL) + +#include +#include + +#define USB_MAXPATH IPC_MAXPATH_LEN + +#define USB_OK 0 +#define USB_FAILED 1 + +#define USB_CLASS_HID 0x03 +#define USB_SUBCLASS_BOOT 0x01 +#define USB_PROTOCOL_KEYBOARD 0x01 +#define USB_PROTOCOL_MOUSE 0x02 + +#define USB_REPTYPE_INPUT 0x01 +#define USB_REPTYPE_OUTPUT 0x02 +#define USB_REPTYPE_FEATURE 0x03 + +/* Descriptor types */ +#define USB_DT_DEVICE 0x01 +#define USB_DT_CONFIG 0x02 +#define USB_DT_STRING 0x03 +#define USB_DT_INTERFACE 0x04 +#define USB_DT_ENDPOINT 0x05 +#define USB_DT_DEVICE_QUALIFIER 0x06 +#define USB_DT_OTHER_SPEED_CONFIG 0x07 +#define USB_DT_INTERFACE_POWER 0x08 +#define USB_DT_OTG 0x09 +#define USB_DT_DEBUG 0x10 +#define USB_DT_INTERFACE_ASSOCIATION 0x11 +#define USB_DT_HID 0x21 +#define USB_DT_REPORT 0x22 +#define USB_DT_PHYSICAL 0x23 +#define USB_DT_CLASS_SPECIFIC_INTERFACE 0x24 +#define USB_DT_CLASS_SPECIFIC_ENDPOINT 0x25 +#define USB_DT_HUB 0x29 + +/* Standard requests */ +#define USB_REQ_GETSTATUS 0x00 +#define USB_REQ_CLEARFEATURE 0x01 +#define USB_REQ_SETFEATURE 0x03 +#define USB_REQ_SETADDRESS 0x05 +#define USB_REQ_GETDESCRIPTOR 0x06 +#define USB_REQ_SETDESCRIPTOR 0x07 +#define USB_REQ_GETCONFIG 0x08 +#define USB_REQ_SETCONFIG 0x09 +#define USB_REQ_GETINTERFACE 0x0A +#define USB_REQ_SETINTERFACE 0x0B +#define USB_REQ_SYNCFRAME 0x0C + +#define USB_REQ_GETREPORT 0x01 +#define USB_REQ_GETIDLE 0x02 +#define USB_REQ_GETPROTOCOL 0x03 +#define USB_REQ_SETREPORT 0x09 +#define USB_REQ_SETIDLE 0x0A +#define USB_REQ_SETPROTOCOL 0x0B + +/* Descriptor sizes per descriptor type */ +#define USB_DT_DEVICE_SIZE 18 +#define USB_DT_CONFIG_SIZE 9 +#define USB_DT_INTERFACE_SIZE 9 +#define USB_DT_ENDPOINT_SIZE 7 +#define USB_DT_ENDPOINT_AUDIO_SIZE 9 /* Audio extension */ +#define USB_DT_HID_SIZE 9 +#define USB_DT_HUB_NONVAR_SIZE 7 + +/* control message request type bitmask */ +#define USB_CTRLTYPE_DIR_HOST2DEVICE (0<<7) +#define USB_CTRLTYPE_DIR_DEVICE2HOST (1<<7) +#define USB_CTRLTYPE_TYPE_STANDARD (0<<5) +#define USB_CTRLTYPE_TYPE_CLASS (1<<5) +#define USB_CTRLTYPE_TYPE_VENDOR (2<<5) +#define USB_CTRLTYPE_TYPE_RESERVED (3<<5) +#define USB_CTRLTYPE_REC_DEVICE 0 +#define USB_CTRLTYPE_REC_INTERFACE 1 +#define USB_CTRLTYPE_REC_ENDPOINT 2 +#define USB_CTRLTYPE_REC_OTHER 3 + +#define USB_REQTYPE_INTERFACE_GET (USB_CTRLTYPE_DIR_DEVICE2HOST|USB_CTRLTYPE_TYPE_CLASS|USB_CTRLTYPE_REC_INTERFACE) +#define USB_REQTYPE_INTERFACE_SET (USB_CTRLTYPE_DIR_HOST2DEVICE|USB_CTRLTYPE_TYPE_CLASS|USB_CTRLTYPE_REC_INTERFACE) +#define USB_REQTYPE_ENDPOINT_GET (USB_CTRLTYPE_DIR_DEVICE2HOST|USB_CTRLTYPE_TYPE_CLASS|USB_CTRLTYPE_REC_ENDPOINT) +#define USB_REQTYPE_ENDPOINT_SET (USB_CTRLTYPE_DIR_HOST2DEVICE|USB_CTRLTYPE_TYPE_CLASS|USB_CTRLTYPE_REC_ENDPOINT) + +#define USB_FEATURE_ENDPOINT_HALT 0 + +#define USB_ENDPOINT_INTERRUPT 0x03 +#define USB_ENDPOINT_IN 0x80 +#define USB_ENDPOINT_OUT 0x00 + +#define USB_OH0_DEVICE_ID 0x00000000 // for completion +#define USB_OH1_DEVICE_ID 0x00200000 + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +typedef struct _usbendpointdesc +{ + u8 bLength; + u8 bDescriptorType; + u8 bEndpointAddress; + u8 bmAttributes; + u16 wMaxPacketSize; + u8 bInterval; +} ATTRIBUTE_PACKED usb_endpointdesc; + +typedef struct _usbinterfacedesc +{ + u8 bLength; + u8 bDescriptorType; + u8 bInterfaceNumber; + u8 bAlternateSetting; + u8 bNumEndpoints; + u8 bInterfaceClass; + u8 bInterfaceSubClass; + u8 bInterfaceProtocol; + u8 iInterface; + u8 *extra; + u16 extra_size; + struct _usbendpointdesc *endpoints; +} ATTRIBUTE_PACKED usb_interfacedesc; + +typedef struct _usbconfdesc +{ + u8 bLength; + u8 bDescriptorType; + u16 wTotalLength; + u8 bNumInterfaces; + u8 bConfigurationValue; + u8 iConfiguration; + u8 bmAttributes; + u8 bMaxPower; + struct _usbinterfacedesc *interfaces; +} ATTRIBUTE_PACKED usb_configurationdesc; + +typedef struct _usbdevdesc +{ + u8 bLength; + u8 bDescriptorType; + u16 bcdUSB; + u8 bDeviceClass; + u8 bDeviceSubClass; + u8 bDeviceProtocol; + u8 bMaxPacketSize0; + u16 idVendor; + u16 idProduct; + u16 bcdDevice; + u8 iManufacturer; + u8 iProduct; + u8 iSerialNumber; + u8 bNumConfigurations; + struct _usbconfdesc *configurations; +} ATTRIBUTE_PACKED usb_devdesc; + +typedef struct _usbhiddesc +{ + u8 bLength; + u8 bDescriptorType; + u16 bcdHID; + u8 bCountryCode; + u8 bNumDescriptors; + struct { + u8 bDescriptorType; + u16 wDescriptorLength; + } ATTRIBUTE_PACKED descr[1]; +} ATTRIBUTE_PACKED usb_hiddesc; + +typedef struct _usb_device_entry { + s32 device_id; + u16 vid; + u16 pid; + u32 token; +} usb_device_entry; + +typedef s32 (*usbcallback)(s32 result,void *usrdata); + +s32 USB_Initialize(); +s32 USB_Deinitialize(); + +s32 USB_OpenDevice(s32 device_id,u16 vid,u16 pid,s32 *fd); +s32 USB_CloseDevice(s32 *fd); +s32 USB_CloseDeviceAsync(s32 *fd,usbcallback cb,void *usrdata); + +s32 USB_GetDescriptors(s32 fd, usb_devdesc *udd); +void USB_FreeDescriptors(usb_devdesc *udd); + +s32 USB_GetGenericDescriptor(s32 fd,u8 type,u8 index,u8 interface,void *data,u32 size); +s32 USB_GetHIDDescriptor(s32 fd,u8 interface,usb_hiddesc *uhd,u32 size); + +s32 USB_GetDeviceDescription(s32 fd,usb_devdesc *devdesc); +s32 USB_DeviceRemovalNotifyAsync(s32 fd,usbcallback cb,void *userdata); +s32 USB_DeviceChangeNotifyAsync(u8 interface_class,usbcallback cb,void *userdata); + +s32 USB_SuspendDevice(s32 fd); +s32 USB_ResumeDevice(s32 fd); + +s32 USB_ReadIsoMsg(s32 fd,u8 bEndpoint,u8 bPackets,u16 *rpPacketSizes,void *rpData); +s32 USB_ReadIsoMsgAsync(s32 fd,u8 bEndpoint,u8 bPackets,u16 *rpPacketSizes,void *rpData,usbcallback cb,void *userdata); + +s32 USB_ReadIntrMsg(s32 fd,u8 bEndpoint,u16 wLength,void *rpData); +s32 USB_ReadIntrMsgAsync(s32 fd,u8 bEndpoint,u16 wLength,void *rpData,usbcallback cb,void *usrdata); + +s32 USB_ReadBlkMsg(s32 fd,u8 bEndpoint,u16 wLength,void *rpData); +s32 USB_ReadBlkMsgAsync(s32 fd,u8 bEndpoint,u16 wLength,void *rpData,usbcallback cb,void *usrdata); + +s32 USB_ReadCtrlMsg(s32 fd,u8 bmRequestType,u8 bmRequest,u16 wValue,u16 wIndex,u16 wLength,void *rpData); +s32 USB_ReadCtrlMsgAsync(s32 fd,u8 bmRequestType,u8 bmRequest,u16 wValue,u16 wIndex,u16 wLength,void *rpData,usbcallback cb,void *usrdata); + +s32 USB_WriteIsoMsg(s32 fd,u8 bEndpoint,u8 bPackets,u16 *rpPacketSizes,void *rpData); +s32 USB_WriteIsoMsgAsync(s32 fd,u8 bEndpoint,u8 bPackets,u16 *rpPacketSizes,void *rpData,usbcallback cb,void *userdata); + +s32 USB_WriteIntrMsg(s32 fd,u8 bEndpoint,u16 wLength,void *rpData); +s32 USB_WriteIntrMsgAsync(s32 fd,u8 bEndpoint,u16 wLength,void *rpData,usbcallback cb,void *usrdata); + +s32 USB_WriteBlkMsg(s32 fd,u8 bEndpoint,u16 wLength,void *rpData); +s32 USB_WriteBlkMsgAsync(s32 fd,u8 bEndpoint,u16 wLength,void *rpData,usbcallback cb,void *usrdata); + +s32 USB_WriteCtrlMsg(s32 fd,u8 bmRequestType,u8 bmRequest,u16 wValue,u16 wIndex,u16 wLength,void *rpData); +s32 USB_WriteCtrlMsgAsync(s32 fd,u8 bmRequestType,u8 bmRequest,u16 wValue,u16 wIndex,u16 wLength,void *rpData,usbcallback cb,void *usrdata); + +s32 USB_GetConfiguration(s32 fd, u8 *configuration); +s32 USB_SetConfiguration(s32 fd, u8 configuration); +s32 USB_SetAlternativeInterface(s32 fd, u8 interface, u8 alternateSetting); +s32 USB_ClearHalt(s32 fd, u8 endpointAddress); +s32 USB_GetDeviceList(usb_device_entry *descr_buffer,u8 num_descr,u8 interface_class,u8 *cnt_descr); + +s32 USB_GetAsciiString(s32 fd,u8 bIndex,u16 wLangID,u16 wLength,void *rpData); + +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif /* defined(HW_RVL) */ + +#endif diff --git a/wii/libogc/include/ogc/usbgecko.h b/wii/libogc/include/ogc/usbgecko.h new file mode 100644 index 0000000000..dbbbbe928c --- /dev/null +++ b/wii/libogc/include/ogc/usbgecko.h @@ -0,0 +1,28 @@ +#ifndef __USBGECKO_H___ +#define __USBGECKO_H___ + +#include + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +void usb_flush(s32 chn); +int usb_isgeckoalive(s32 chn); +int usb_recvbuffer(s32 chn,void *buffer,int size); +int usb_sendbuffer(s32 chn,const void *buffer,int size); +int usb_recvbuffer_safe(s32 chn,void *buffer,int size); +int usb_sendbuffer_safe(s32 chn,const void *buffer,int size); +int usb_recvbuffer_ex(s32 chn,void *buffer,int size, int retries); +int usb_sendbuffer_ex(s32 chn,const void *buffer,int size, int retries); +int usb_recvbuffer_safe_ex(s32 chn,void *buffer,int size, int retries); +int usb_sendbuffer_safe_ex(s32 chn,const void *buffer,int size, int retries); +int usb_flashread(s32 chn, u32 offset, void *buffer, size_t length); +int usb_flashwrite(s32 chn, u32 offset, const void *buffer, size_t length); +int usb_flashverify(s32 chn); + +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif diff --git a/wii/libogc/include/ogc/usbmouse.h b/wii/libogc/include/ogc/usbmouse.h new file mode 100644 index 0000000000..28b8581120 --- /dev/null +++ b/wii/libogc/include/ogc/usbmouse.h @@ -0,0 +1,30 @@ +#ifndef __USBMOUSE_H__ +#define __USBMOUSE_H__ + +#if defined(HW_RVL) + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +typedef struct { + u8 button; + int rx; + int ry; + int rz; +} mouse_event; + +s32 MOUSE_Init(void); +s32 MOUSE_Deinit(void); + +s32 MOUSE_GetEvent(mouse_event *event); +s32 MOUSE_FlushEvents(void); +bool MOUSE_IsConnected(void); + +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif + +#endif diff --git a/wii/libogc/include/ogc/usbstorage.h b/wii/libogc/include/ogc/usbstorage.h new file mode 100644 index 0000000000..04efa5fbed --- /dev/null +++ b/wii/libogc/include/ogc/usbstorage.h @@ -0,0 +1,92 @@ +#ifndef __USBSTORAGE_H__ +#define __USBSTORAGE_H__ + +#if defined(HW_RVL) + +#include +#include +#include +#include + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +#define USBSTORAGE_OK 0 +#define USBSTORAGE_ENOINTERFACE -10000 +#define USBSTORAGE_ESENSE -10001 +#define USBSTORAGE_ESHORTWRITE -10002 +#define USBSTORAGE_ESHORTREAD -10003 +#define USBSTORAGE_ESIGNATURE -10004 +#define USBSTORAGE_ETAG -10005 +#define USBSTORAGE_ESTATUS -10006 +#define USBSTORAGE_EDATARESIDUE -10007 +#define USBSTORAGE_ETIMEDOUT -10008 +#define USBSTORAGE_EINIT -10009 +#define USBSTORAGE_PROCESSING -10010 + +typedef struct +{ + u8 configuration; + u32 interface; + u32 altInterface; + u8 bInterfaceSubClass; + + u8 ep_in; + u8 ep_out; + + u8 max_lun; + u32 *sector_size; + + s32 usb_fd; + + mutex_t lock; + syswd_t alarm; + s32 retval; + + u32 tag; + u8 suspended; + + u8 *buffer; +} usbstorage_handle; + +#define B_RAW_DEVICE_DATA_IN 0x01 +#define B_RAW_DEVICE_COMMAND 0 + +typedef struct { + uint8_t command[16]; + uint8_t command_length; + uint8_t flags; + uint8_t scsi_status; + void* data; + size_t data_length; +} raw_device_command; + +s32 USBStorage_Initialize(); + +s32 USBStorage_Open(usbstorage_handle *dev, s32 device_id, u16 vid, u16 pid); +s32 USBStorage_Close(usbstorage_handle *dev); +s32 USBStorage_Reset(usbstorage_handle *dev); + +s32 USBStorage_GetMaxLUN(usbstorage_handle *dev); +s32 USBStorage_MountLUN(usbstorage_handle *dev, u8 lun); +s32 USBStorage_Suspend(usbstorage_handle *dev); +s32 USBStorage_IsDVD(); +s32 USBStorage_ioctl(int request, ...); + +s32 USBStorage_ReadCapacity(usbstorage_handle *dev, u8 lun, u32 *sector_size, u32 *n_sectors); +s32 USBStorage_Read(usbstorage_handle *dev, u8 lun, u32 sector, u16 n_sectors, u8 *buffer); +s32 USBStorage_Write(usbstorage_handle *dev, u8 lun, u32 sector, u16 n_sectors, const u8 *buffer); +s32 USBStorage_StartStop(usbstorage_handle *dev, u8 lun, u8 lo_ej, u8 start, u8 imm); + +#define DEVICE_TYPE_WII_USB (('W'<<24)|('U'<<16)|('S'<<8)|'B') + +extern DISC_INTERFACE __io_usbstorage; + +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif /* HW_RVL */ + +#endif /* __USBSTORAGE_H__ */ diff --git a/wii/libogc/include/ogc/video.h b/wii/libogc/include/ogc/video.h new file mode 100644 index 0000000000..4e01bdc2f8 --- /dev/null +++ b/wii/libogc/include/ogc/video.h @@ -0,0 +1,206 @@ +/*------------------------------------------------------------- + +video.h -- VIDEO subsystem + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + + +#ifndef __VIDEO_H__ +#define __VIDEO_H__ + +/*! + * \file video.h + * \brief VIDEO subsystem + * + */ + +#include +#include "gx_struct.h" +#include "video_types.h" + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + + +/*! + * \typedef void (*VIRetraceCallback)(u32 retraceCnt) + * \brief function pointer typedef for the user's retrace callback + * \param[in] retraceCnt current retrace count + */ +typedef void (*VIRetraceCallback)(u32 retraceCnt); + +typedef void (*VIPositionCallback)(u32 posX,u32 posY); + +void* VIDEO_GetNextFramebuffer(); +void* VIDEO_GetCurrentFramebuffer(); + + +/*! + * \fn void VIDEO_Init() + * \brief Initializes the VIDEO subsystem. This call should be done in the early stages of your main() + * + * \return none + */ +void VIDEO_Init(); + + +/*! + * \fn void VIDEO_Flush() + * \brief Flush the shadow registers to the drivers video registers. + * + * \return none + */ +void VIDEO_Flush(); + + +/*! + * \fn void VIDEO_SetBlack(bool black) + * \brief Blackout the VIDEO interface. + * + * \param[in] black Boolean flag to determine whether to blackout the VI or not. + * + * \return none + */ +void VIDEO_SetBlack(bool black); + + +/*! + * \fn u32 VIDEO_GetNextField() + * \brief Get the next field in DS mode. + * + * \return \ref vi_fielddef "field" + */ +u32 VIDEO_GetNextField(); + + +/*! + * \fn u32 VIDEO_GetCurrentLine() + * \brief Get current video line + * + * \return linenumber + */ +u32 VIDEO_GetCurrentLine(); + + +/*! + * \fn u32 VIDEO_GetCurrentTvMode() + * \brief Get current configured TV mode + * + * \return \ref vi_standardtypedef "tvmode" + */ +u32 VIDEO_GetCurrentTvMode(); + + +/*! + * \fn void VIDEO_Configure(GXRModeObj *rmode) + * \brief Configure the VI with the given render mode object + * + * \param[in] rmode pointer to the video/render mode \ref gxrmode_obj "configuration". + * + * \return none + */ +void VIDEO_Configure(GXRModeObj *rmode); + +u32 VIDEO_GetFrameBufferSize(GXRModeObj *rmode); + +/*! + * \fn void VIDEO_ClearFrameBuffer(GXRModeObj *rmode,void *fb,u32 color) + * \brief Clear the given framebuffer. + * + * \param[in] rmode pointer to a GXRModeObj, specifying the mode. + * \param[in] fb pointer to the startaddress of the framebuffer to clear. + * \param[in] color YUYUV value to use for clearing. + * + * \return none + */ +void VIDEO_ClearFrameBuffer(GXRModeObj *rmode,void *fb,u32 color); + + +/*! + * \fn void VIDEO_WaitVSync(void) + * \brief Wait on the next vertical retrace + * + * \return none + */ +void VIDEO_WaitVSync(void); + + +/*! + * \fn void VIDEO_SetNextFramebuffer(void *fb) + * \brief Set the framebuffer for the next VI register update. + * + * \return none + */ +void VIDEO_SetNextFramebuffer(void *fb); + + +/*! + * \fn void VIDEO_SetNextRightFramebuffer(void *fb) + * \brief Set the right framebuffer for the next VI register update. This is used for 3D Gloves for instance. + * + * \return none + */ +void VIDEO_SetNextRightFramebuffer(void *fb); + + +/*! + * \fn VIRetraceCallback VIDEO_SetPreRetraceCallback(VIRetraceCallback callback) + * \brief Set the Pre-Retrace callback function. This function is called within the video interrupt handler before the VI registers will be updated. + * + * \param[in] callback pointer to the callback function which is called at pre-retrace. + * + * \return Old pre-retrace callback or NULL + */ +VIRetraceCallback VIDEO_SetPreRetraceCallback(VIRetraceCallback callback); + + +/*! + * \fn VIRetraceCallback VIDEO_SetPostRetraceCallback(VIRetraceCallback callback) + * \brief Set the Post-Retrace callback function. This function is called within the video interrupt handler after the VI registers are updated. + * + * \param[in] callback pointer to the callback function which is called at post-retrace. + * + * \return Old post-retrace callback or NULL + */ +VIRetraceCallback VIDEO_SetPostRetraceCallback(VIRetraceCallback callback); + + +/*! + * \fn u32 VIDEO_HaveComponentCable(void) + * \brief Check for a component cable. This function returns 1 when a Component (YPbPr) cable is connected. + * + * \return 1 if a component cable is connected, 0 otherwise + */ +u32 VIDEO_HaveComponentCable(void); + +GXRModeObj * VIDEO_GetPreferredMode(GXRModeObj *mode); + +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif diff --git a/wii/libogc/include/ogc/video_types.h b/wii/libogc/include/ogc/video_types.h new file mode 100644 index 0000000000..9a03873d82 --- /dev/null +++ b/wii/libogc/include/ogc/video_types.h @@ -0,0 +1,195 @@ +/*------------------------------------------------------------- + +video_types.h -- support header + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + + +#ifndef __VIDEO_TYPES_H__ +#define __VIDEO_TYPES_H__ + +/*! +\file video_types.h +\brief support header +*/ + +#include + +/*! + * \addtogroup vi_defines List of defines used for the VIDEO subsystem + * @{ + */ + + +#define VI_DISPLAY_PIX_SZ 2 /*!< multiplier to get real pixel size in bytes */ + +/*! + * \addtogroup vi_modetypedef VIDEO mode types + * @{ + */ + +#define VI_INTERLACE 0 /*!< Video mode INTERLACED. */ +#define VI_NON_INTERLACE 1 /*!< Video mode NON INTERLACED */ +#define VI_PROGRESSIVE 2 /*!< Video mode PROGRESSIVE. Special mode for higher quality */ + +/*! + * @} + */ + + +/*! + * \addtogroup vi_standardtypedef VIDEO standard types + * @{ + */ + +#define VI_NTSC 0 /*!< Video standard used in North America and Japan */ +#define VI_PAL 1 /*!< Video standard used in Europe */ +#define VI_MPAL 2 /*!< Video standard, similar to NTSC, used in Brazil */ +#define VI_DEBUG 3 /*!< Video standard, for debugging purpose, used in North America and Japan. Special decoder needed */ +#define VI_DEBUG_PAL 4 /*!< Video standard, for debugging purpose, used in Europe. Special decoder needed */ +#define VI_EURGB60 5 /*!< RGB 60Hz, 480 lines mode (same timing and aspect ratio as NTSC) used in Europe */ + +/*! + * @} + */ + + +#define VI_XFBMODE_SF 0 +#define VI_XFBMODE_DF 1 + + +/*! + * \addtogroup vi_fielddef VIDEO field types + * @{ + */ + +#define VI_FIELD_ABOVE 1 /*!< Upper field in DS mode */ +#define VI_FIELD_BELOW 0 /*!< Lower field in DS mode */ + +/*! + * @} + */ + + +// Maximum screen space +#define VI_MAX_WIDTH_NTSC 720 +#define VI_MAX_HEIGHT_NTSC 480 + +#define VI_MAX_WIDTH_PAL 720 +#define VI_MAX_HEIGHT_PAL 576 + +#define VI_MAX_WIDTH_MPAL 720 +#define VI_MAX_HEIGHT_MPAL 480 + +#define VI_MAX_WIDTH_EURGB60 VI_MAX_WIDTH_NTSC +#define VI_MAX_HEIGHT_EURGB60 VI_MAX_HEIGHT_NTSC + +#define VIDEO_PadFramebufferWidth(width) ((u16)(((u16)(width) + 15) & ~15)) /*!< macro to pad the width to a multiple of 16 */ + +/*! + * @} + */ + + +#define VI_TVMODE(fmt, mode) ( ((fmt) << 2) + (mode) ) + +#define VI_TVMODE_NTSC_INT VI_TVMODE(VI_NTSC, VI_INTERLACE) +#define VI_TVMODE_NTSC_DS VI_TVMODE(VI_NTSC, VI_NON_INTERLACE) +#define VI_TVMODE_NTSC_PROG VI_TVMODE(VI_NTSC, VI_PROGRESSIVE) + +#define VI_TVMODE_PAL_INT VI_TVMODE(VI_PAL, VI_INTERLACE) +#define VI_TVMODE_PAL_DS VI_TVMODE(VI_PAL, VI_NON_INTERLACE) +#define VI_TVMODE_PAL_PROG VI_TVMODE(VI_PAL, VI_PROGRESSIVE) + +#define VI_TVMODE_EURGB60_INT VI_TVMODE(VI_EURGB60, VI_INTERLACE) +#define VI_TVMODE_EURGB60_DS VI_TVMODE(VI_EURGB60, VI_NON_INTERLACE) +#define VI_TVMODE_EURGB60_PROG VI_TVMODE(VI_EURGB60, VI_PROGRESSIVE) + +#define VI_TVMODE_MPAL_INT VI_TVMODE(VI_MPAL, VI_INTERLACE) +#define VI_TVMODE_MPAL_DS VI_TVMODE(VI_MPAL, VI_NON_INTERLACE) +#define VI_TVMODE_MPAL_PROG VI_TVMODE(VI_MPAL, VI_PROGRESSIVE) + +#define VI_TVMODE_DEBUG_INT VI_TVMODE(VI_DEBUG, VI_INTERLACE) + +#define VI_TVMODE_DEBUG_PAL_INT VI_TVMODE(VI_DEBUG_PAL, VI_INTERLACE) +#define VI_TVMODE_DEBUG_PAL_DS VI_TVMODE(VI_DEBUG_PAL, VI_NON_INTERLACE) + + +/*! + * \addtogroup vi_defines List of defines used for the VIDEO subsystem + * @{ + */ + + +/*! + * \addtogroup gxrmode_obj VIDEO render modes + * @{ + */ + +extern GXRModeObj TVNtsc240Ds; /*!< Video and render mode configuration for 240 lines,singlefield NTSC mode */ +extern GXRModeObj TVNtsc240DsAa; /*!< Video and render mode configuration for 240 lines,singlefield,antialiased NTSC mode */ +extern GXRModeObj TVNtsc240Int; /*!< Video and render mode configuration for 240 lines,interlaced NTSC mode */ +extern GXRModeObj TVNtsc240IntAa; /*!< Video and render mode configuration for 240 lines,interlaced,antialiased NTSC mode */ +extern GXRModeObj TVNtsc480Int; /*!< Video and render mode configuration for 480 lines,interlaced NTSC mode */ +extern GXRModeObj TVNtsc480IntDf; /*!< Video and render mode configuration for 480 lines,interlaced,doublefield NTSC mode */ +extern GXRModeObj TVNtsc480IntAa; /*!< Video and render mode configuration for 480 lines,interlaced,doublefield,antialiased NTSC mode */ +extern GXRModeObj TVNtsc480Prog; /*!< Video and render mode configuration for 480 lines,progressive,singlefield NTSC mode */ +extern GXRModeObj TVNtsc480ProgSoft; +extern GXRModeObj TVNtsc480ProgAa; +extern GXRModeObj TVMpal240Ds; +extern GXRModeObj TVMpal240DsAa; +extern GXRModeObj TVMpal480IntDf; /*!< Video and render mode configuration for 480 lines,interlaced,doublefield,antialiased MPAL mode */ +extern GXRModeObj TVMpal480IntAa; +extern GXRModeObj TVMpal480Prog; +extern GXRModeObj TVPal264Ds; /*!< Video and render mode configuration for 264 lines,singlefield PAL mode */ +extern GXRModeObj TVPal264DsAa; /*!< Video and render mode configuration for 264 lines,singlefield,antialiased PAL mode */ +extern GXRModeObj TVPal264Int; /*!< Video and render mode configuration for 264 lines,interlaced PAL mode */ +extern GXRModeObj TVPal264IntAa; /*!< Video and render mode configuration for 264 lines,interlaced,antialiased PAL mode */ +extern GXRModeObj TVPal524IntAa; /*!< Video and render mode configuration for 524 lines,interlaced,antialiased PAL mode */ +extern GXRModeObj TVPal528Int; /*!< Video and render mode configuration for 528 lines,interlaced,antialiased PAL mode */ +extern GXRModeObj TVPal528IntDf; /*!< Video and render mode configuration for 264 lines,interlaced,doublefield antialiased PAL mode */ +extern GXRModeObj TVPal576IntDfScale; +extern GXRModeObj TVPal576ProgScale; +extern GXRModeObj TVEurgb60Hz240Ds; +extern GXRModeObj TVEurgb60Hz240DsAa; +extern GXRModeObj TVEurgb60Hz240Int; +extern GXRModeObj TVEurgb60Hz240IntAa; +extern GXRModeObj TVEurgb60Hz480Int; +extern GXRModeObj TVEurgb60Hz480IntDf; +extern GXRModeObj TVEurgb60Hz480IntAa; +extern GXRModeObj TVEurgb60Hz480Prog; +extern GXRModeObj TVEurgb60Hz480ProgSoft; +extern GXRModeObj TVEurgb60Hz480ProgAa; + +/*! + * @} + */ + +/*! + * @} + */ + +#endif diff --git a/wii/libogc/include/ogc/wiilaunch.h b/wii/libogc/include/ogc/wiilaunch.h new file mode 100644 index 0000000000..18475465c0 --- /dev/null +++ b/wii/libogc/include/ogc/wiilaunch.h @@ -0,0 +1,79 @@ +/*------------------------------------------------------------- + +wiilaunch.h -- Wii NAND title launching and argument passing + +Copyright (C) 2008 +Hector Martin (marcan) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + +#if defined(HW_RVL) + +#ifndef __WIILAUNCH_H__ +#define __WIILAUNCH_H__ + +#include +#include + +// not initialized +#define WII_ENOTINIT -0x9001 +// internal error +#define WII_EINTERNAL -0x9002 +// checksum error +#define WII_ECHECKSUM -0x9003 +// required title not installed +#define WII_EINSTALL -0x9004 +// argument list too big +#define WII_E2BIG -0x9005 + +// you probably shouldn't use anything not in this list, since those may change +// these are guaranteed to exist because Nintendo hardcodes them +// any category not on this list will cause a hang when the settings menu tries to do the animation +// however, settings items contained in one of the following categories will work +// nonexistent items will cause a 404 +#define SETTINGS_CALENDAR "Calendar/Calendar_index.html" +#define SETTINGS_DISPLAY "Display/Display_index.html" +#define SETTINGS_SOUND "Sound/Sound_index.html" +#define SETTINGS_PARENTAL "Parental_Control/Parental_Control_index.html" +#define SETTINGS_INTERNET "Internet/Internet_index.html" +#define SETTINGS_WC24 "WiiConnect24/Wiiconnect24_index.html" +#define SETTINGS_UPDATE "Update/Update_index.html" + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +s32 WII_Initialize(void); +s32 WII_ReturnToMenu(void); +s32 WII_ReturnToSettings(void); +s32 WII_ReturnToSettingsPage(const char *page); +s32 WII_LaunchTitle(u64 titleID); +s32 WII_LaunchTitleWithArgs(u64 titleID, int launchcode, ...); +s32 WII_OpenURL(const char *url); + +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif + +#endif diff --git a/wii/libogc/include/ogcsys.h b/wii/libogc/include/ogcsys.h new file mode 100644 index 0000000000..3c52eccd90 --- /dev/null +++ b/wii/libogc/include/ogcsys.h @@ -0,0 +1,41 @@ +#ifndef __OGCSYS_H__ +#define __OGCSYS_H__ + +#include +#include + +#if defined(HW_RVL) + #define TB_BUS_CLOCK 243000000u + #define TB_CORE_CLOCK 729000000u +#elif defined(HW_DOL) + #define TB_BUS_CLOCK 162000000u + #define TB_CORE_CLOCK 486000000u +#endif +#define TB_TIMER_CLOCK (TB_BUS_CLOCK/4000) //4th of the bus frequency + +#define TB_MSPERSEC 1000 +#define TB_USPERSEC 1000000 +#define TB_NSPERSEC 1000000000 +#define TB_NSPERMS 1000000 +#define TB_NSPERUS 1000 +#define TB_USPERTICK 10000 + +#define TB_SECSPERMIN 60 +#define TB_MINSPERHR 60 +#define TB_MONSPERYR 12 +#define TB_DAYSPERYR 365 +#define TB_HRSPERDAY 24 +#define TB_SECSPERDAY (TB_SECSPERMIN*TB_MINSPERHR*TB_HRSPERDAY) +#define TB_SECSPERNYR (365*TB_SECSPERDAY) + +#ifdef __cplusplus + extern "C" { +#endif + +int nanosleep(struct timespec *tb); + +#ifdef __cplusplus + } +#endif + +#endif diff --git a/wii/libogc/include/samplerate.h b/wii/libogc/include/samplerate.h new file mode 100644 index 0000000000..9232dc29da --- /dev/null +++ b/wii/libogc/include/samplerate.h @@ -0,0 +1,196 @@ +/* +** Copyright (C) 2002-2004 Erik de Castro Lopo +** +** This program is free software; you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation; either version 2 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program; if not, write to the Free Software +** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. +*/ + +/* +** API documentation is available here: +** http://www.mega-nerd.com/SRC/api.html +*/ + +#ifndef SAMPLERATE_H +#define SAMPLERATE_H + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + + +/* Opaque data type SRC_STATE. */ +typedef struct SRC_STATE_tag SRC_STATE ; + +/* SRC_DATA is used to pass data to src_simple() and src_process(). */ +typedef struct +{ float *data_in, *data_out ; + + long input_frames, output_frames ; + long input_frames_used, output_frames_gen ; + + int end_of_input ; + + double src_ratio ; +} SRC_DATA ; + +/* SRC_CB_DATA is used with callback based API. */ +typedef struct +{ long frames ; + float *data_in ; +} SRC_CB_DATA ; + +/* +** User supplied callback function type for use with src_callback_new() +** and src_callback_read(). First parameter is the same pointer that was +** passed into src_callback_new(). Second parameter is pointer to a +** pointer. The user supplied callback function must modify *data to +** point to the start of the user supplied float array. The user supplied +** function must return the number of frames that **data points to. +*/ + +typedef long (*src_callback_t) (void *cb_data, float **data) ; + +/* +** Standard initialisation function : return an anonymous pointer to the +** internal state of the converter. Choose a converter from the enums below. +** Error returned in *error. +*/ + +SRC_STATE* src_new (int converter_type, int channels, int *error) ; + +/* +** Initilisation for callback based API : return an anonymous pointer to the +** internal state of the converter. Choose a converter from the enums below. +** The cb_data pointer can point to any data or be set to NULL. Whatever the +** value, when processing, user supplied function "func" gets called with +** cb_data as first parameter. +*/ + +SRC_STATE* src_callback_new (src_callback_t func, int converter_type, int channels, + int *error, void* cb_data) ; + +/* +** Cleanup all internal allocations. +** Always returns NULL. +*/ + +SRC_STATE* src_delete (SRC_STATE *state) ; + +/* +** Standard processing function. +** Returns non zero on error. +*/ + +int src_process (SRC_STATE *state, SRC_DATA *data) ; + +/* +** Callback based processing function. Read up to frames worth of data from +** the converter int *data and return frames read or -1 on error. +*/ +long src_callback_read (SRC_STATE *state, double src_ratio, long frames, float *data) ; + +/* +** Simple interface for performing a single conversion from input buffer to +** output buffer at a fixed conversion ratio. +** Simple interface does not require initialisation as it can only operate on +** a single buffer worth of audio. +*/ + +int src_simple (SRC_DATA *data, int converter_type, int channels) ; + +/* +** This library contains a number of different sample rate converters, +** numbered 0 through N. +** +** Return a string giving either a name or a more full description of each +** sample rate converter or NULL if no sample rate converter exists for +** the given value. The converters are sequentially numbered from 0 to N. +*/ + +const char *src_get_name (int converter_type) ; +const char *src_get_description (int converter_type) ; +const char *src_get_version (void) ; + +/* +** Set a new SRC ratio. This allows step responses +** in the conversion ratio. +** Returns non zero on error. +*/ + +int src_set_ratio (SRC_STATE *state, double new_ratio) ; + +/* +** Reset the internal SRC state. +** Does not modify the quality settings. +** Does not free any memory allocations. +** Returns non zero on error. +*/ + +int src_reset (SRC_STATE *state) ; + +/* +** Return TRUE if ratio is a valid conversion ratio, FALSE +** otherwise. +*/ + +int src_is_valid_ratio (double ratio) ; + +/* +** Return an error number. +*/ + +int src_error (SRC_STATE *state) ; + +/* +** Convert the error number into a string. +*/ +const char* src_strerror (int error) ; + +/* +** The following enums can be used to set the interpolator type +** using the function src_set_converter(). +*/ + +enum +{ + SRC_SINC_BEST_QUALITY = 0, + SRC_SINC_MEDIUM_QUALITY = 1, + SRC_SINC_FASTEST = 2, + SRC_ZERO_ORDER_HOLD = 3, + SRC_LINEAR = 4 +} ; + +/* +** Extra helper functions for converting from short to float and +** back again. +*/ + +void src_short_to_float_array (const short *in, float *out, int len) ; +void src_float_to_short_array (const float *in, short *out, int len) ; + + +#ifdef __cplusplus +} /* extern "C" */ +#endif /* __cplusplus */ + +#endif /* SAMPLERATE_H */ + +/* +** Do not edit or modify anything in this comment block. +** The arch-tag line is a file identity tag for the GNU Arch +** revision control system. +** +** arch-tag: 5421ef3e-c898-4ec3-8671-ea03d943ee00 +*/ + diff --git a/wii/libogc/include/sdcard/card_buf.h b/wii/libogc/include/sdcard/card_buf.h new file mode 100644 index 0000000000..0590f2e176 --- /dev/null +++ b/wii/libogc/include/sdcard/card_buf.h @@ -0,0 +1,18 @@ +#ifndef __CARD_BUF_H__ +#define __CARD_BUF_H__ + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +void sdgecko_initBufferPool(); +u8* sdgecko_allocBuffer(); +void sdgecko_freeBuffer(u8 *buf); + +#ifdef __cplusplus + } +#endif + +#endif diff --git a/wii/libogc/include/sdcard/card_cmn.h b/wii/libogc/include/sdcard/card_cmn.h new file mode 100644 index 0000000000..e35cece8a1 --- /dev/null +++ b/wii/libogc/include/sdcard/card_cmn.h @@ -0,0 +1,65 @@ +#ifndef __CARD_CMN_H__ +#define __CARD_CMN_H__ + +#include + +#define CARDIO_ERROR_READY 0 +#define CARDIO_ERROR_BUSY -1 +#define CARDIO_ERROR_WRONGDEVICE -2 +#define CARDIO_ERROR_NOCARD -3 +#define CARDIO_ERROR_IDLE -4 +#define CARDIO_ERROR_IOERROR -5 +#define CARDIO_ERROR_IOTIMEOUT -6 + +#define CARDIO_ERROR_NOTPERMITTED -107 +#define CARDIO_ERROR_ROOTENTRY -108 +#define CARDIO_ERROR_OUTOFROOTENTRY -109 +#define CARDIO_ERROR_FILEEXIST -110 +#define CARDIO_ERROR_NOEMPTYCLUSTER -111 +#define CARDIO_ERROR_EOF -112 +#define CARDIO_ERROR_SYSTEMPARAM -113 +#define CARDIO_ERROR_FILEOPENED -114 +#define CARDIO_ERROR_FILENOTOPENED -115 +#define CARDIO_ERROR_FILENAMETOOLONG -116 +#define CARDIO_ERROR_INVALIDNAME -117 +#define CARDIO_ERROR_NOLONGNAME -118 +#define CARDIO_ERROR_INCORRECTFAT -119 +#define CARDIO_ERROR_NOTFOUND -120 +#define CARDIO_ERROR_OUTOFMEMORY -121 +#define CARDIO_ERROR_INVALIDFAT -122 +#define CARDIO_ERROR_INVALIDMBR -123 +#define CARDIO_ERROR_INVALIDPBR -124 +#define CARDIO_ERROR_NOEMPTYBLOCK -125 +#define CARDIO_ERROR_INTERNAL -126 +#define CARDIO_ERROR_INVALIDPARAM -127 +#define CARDIO_ERROR_FATALERROR -128 + +#define MAX_DRIVE 2 +#define SECTOR_SIZE 512 + +#define NOT_INITIALIZED 0 +#define INITIALIZING 1 +#define INITIALIZED 2 + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +typedef struct _dev_info { + u32 CpV; + u32 HpC; + u32 SpH; + u32 allS; + u32 szS; + u32 PBpV; + u32 LBpV; + u32 SpB; + u32 PpB; + u32 szP; +} DEV_INFO; + +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif diff --git a/wii/libogc/include/sdcard/card_io.h b/wii/libogc/include/sdcard/card_io.h new file mode 100644 index 0000000000..b0c2bdc166 --- /dev/null +++ b/wii/libogc/include/sdcard/card_io.h @@ -0,0 +1,51 @@ +#ifndef __CARD_IO_H__ +#define __CARD_IO_H__ + +#include + +#define MAX_MI_NUM 1 +#define MAX_DI_NUM 5 + +#define PAGE_SIZE256 256 +#define PAGE_SIZE512 512 + +/* CID Register */ +#define MANUFACTURER_ID(drv_no) ((u8)(g_CID[drv_no][0])) + +/* CSD Register */ +#define READ_BL_LEN(drv_no) ((u8)(g_CSD[drv_no][5]&0x0f)) +#define WRITE_BL_LEN(drv_no) ((u8)((g_CSD[drv_no][12]&0x03)<<2)|((g_CSD[drv_no][13]>>6)&0x03)) +#define C_SIZE(drv_no) ((u16)(((g_CSD[drv_no][6]&0x03)<<10)|(g_CSD[drv_no][7]<<2)|((g_CSD[drv_no][8]>>6)&0x03))) +#define C_SIZE_MULT(drv_no) ((u8)((g_CSD[drv_no][9]&0x03)<<1)|((g_CSD[drv_no][10]>>7)&0x01)) + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +extern u8 g_CSD[MAX_DRIVE][16]; +extern u8 g_CID[MAX_DRIVE][16]; +extern u8 g_mCode[MAX_MI_NUM]; +extern u16 g_dCode[MAX_MI_NUM][MAX_DI_NUM]; + + +void sdgecko_initIODefault(); +s32 sdgecko_initIO(s32 drv_no); +s32 sdgecko_preIO(s32 drv_no); +s32 sdgecko_readCID(s32 drv_no); +s32 sdgecko_readCSD(s32 drv_no); +s32 sdgecko_readStatus(s32 drv_no); +s32 sdgecko_readSectors(s32 drv_no,u32 sector_no,u32 num_sectors,void *buf); +s32 sdgecko_writeSector(s32 drv_no,u32 sector_no,const void *buf,u32 len); +s32 sdgecko_writeSectors(s32 drv_no,u32 sector_no,u32 num_sectors,const void *buf); + +s32 sdgecko_doUnmount(s32 drv_no); + +void sdgecko_insertedCB(s32 drv_no); +void sdgecko_ejectedCB(s32 drv_no); + + +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif diff --git a/wii/libogc/include/sdcard/gcsd.h b/wii/libogc/include/sdcard/gcsd.h new file mode 100644 index 0000000000..b64b159548 --- /dev/null +++ b/wii/libogc/include/sdcard/gcsd.h @@ -0,0 +1,45 @@ +/* + + gcsd.h + + Hardware routines for reading and writing to SD geckos connected + to the memory card ports. + + These functions are just wrappers around libsdcard's functions. + + Copyright (c) 2008 Sven "svpe" Peter + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef __GCSD_H__ +#define __GCSD_H__ + +#include +#include + +#define DEVICE_TYPE_GC_SD (('G'<<24)|('C'<<16)|('S'<<8)|'D') + +extern const DISC_INTERFACE __io_gcsda; +extern const DISC_INTERFACE __io_gcsdb; + +#endif diff --git a/wii/libogc/include/sdcard/wiisd_io.h b/wii/libogc/include/sdcard/wiisd_io.h new file mode 100644 index 0000000000..2c3de8a035 --- /dev/null +++ b/wii/libogc/include/sdcard/wiisd_io.h @@ -0,0 +1,44 @@ +/* + + wii_sd.h + + Hardware interface for libfat Wii internal SD + + Copyright (c) 2008 + Michael Wiedenbauer (shagkur) + Dave Murphy (WinterMute) + + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef __WIISD_IO_H__ +#define __WIISD_IO_H__ + +#include +#include + +#define DEVICE_TYPE_WII_SD (('W'<<24)|('I'<<16)|('S'<<8)|'D') + +extern const DISC_INTERFACE __io_wiisd; + +#endif diff --git a/wii/libogc/include/smb.h b/wii/libogc/include/smb.h new file mode 100644 index 0000000000..579f1979c4 --- /dev/null +++ b/wii/libogc/include/smb.h @@ -0,0 +1,150 @@ +/**************************************************************************** + * TinySMB + * Nintendo Wii/GameCube SMB implementation + * + * Copyright softdev + * Modified by Tantric to utilize NTLM authentication + * PathInfo added by rodries + * SMB devoptab by scip, rodries + * + * You will find WireShark (http://www.wireshark.org/) + * invaluable for debugging SAMBA implementations. + * + * Recommended Reading + * Implementing CIFS - Christopher R Hertel + * http://www.ubiqx.org/cifs/SMB.html + * + * License: + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + ****************************************************************************/ + +#ifndef __NBTSMB_H__ +#define __NBTSMB_H__ + +#include +#include + +#define SMB_MAXPATH 4096 + +/** +* SMB Error codes +*/ +#define SMB_SUCCESS 0 +#define SMB_ERROR -1 +#define SMB_BAD_PROTOCOL -2 +#define SMB_BAD_COMMAND -3 +#define SMB_PROTO_FAIL -4 +#define SMB_NOT_USER -5 +#define SMB_BAD_KEYLEN -6 +#define SMB_BAD_DATALEN -7 +#define SMB_BAD_LOGINDATA -8 + +/** +* SMB File Open Function +*/ +#define SMB_OF_OPEN 1 +#define SMB_OF_TRUNCATE 2 +#define SMB_OF_CREATE 16 + +/** +* FileSearch +*/ +#define SMB_SRCH_READONLY 1 +#define SMB_SRCH_HIDDEN 2 +#define SMB_SRCH_SYSTEM 4 +#define SMB_SRCH_VOLUME 8 +#define SMB_SRCH_DIRECTORY 16 +#define SMB_SRCH_ARCHIVE 32 + +/** +* SMB File Access Modes +*/ +#define SMB_OPEN_READING 0 +#define SMB_OPEN_WRITING 1 +#define SMB_OPEN_READWRITE 2 +#define SMB_OPEN_COMPATIBLE 0 +#define SMB_DENY_READWRITE 0x10 +#define SMB_DENY_WRITE 0x20 +#define SMB_DENY_READ 0x30 +#define SMB_DENY_NONE 0x40 + + +#ifdef __cplusplus +extern "C" { +#endif + +/*** + * SMB Connection Handle + */ +typedef u32 SMBCONN; + +/*** + * SMB File Handle + */ +typedef void* SMBFILE; + +/*** SMB_FILEENTRY + SMB Long Filename Directory Entry + ***/ + typedef struct +{ + u64 size; + u64 ctime; + u64 atime; + u64 mtime; + u32 attributes; + u16 sid; + char name[768]; //unicode +} SMBDIRENTRY; + +/** + * Prototypes + */ + +/*** Functions to be used with stdio API ***/ +bool smbInitDevice(const char* name, const char *user, const char *password, const char *share, const char *ip); +bool smbInit(const char *user, const char *password, const char *share, const char *ip); +void smbClose(const char* name); +bool smbCheckConnection(const char* name); +void smbSetSearchFlags(unsigned short flags); + +/*** Session ***/ +s32 SMB_Connect(SMBCONN *smbhndl, const char *user, const char *password, const char *share, const char *IP); +void SMB_Close(SMBCONN smbhndl); +s32 SMB_Reconnect(SMBCONN *_smbhndl, bool test_conn); + +/*** File Find ***/ +s32 SMB_PathInfo(const char *filename, SMBDIRENTRY *sdir, SMBCONN smbhndl); +s32 SMB_FindFirst(const char *filename, unsigned short flags, SMBDIRENTRY *sdir, SMBCONN smbhndl); +s32 SMB_FindNext(SMBDIRENTRY *sdir,SMBCONN smbhndl); +s32 SMB_FindClose(SMBDIRENTRY *sdir,SMBCONN smbhndl); + +/*** File I/O ***/ +SMBFILE SMB_OpenFile(const char *filename, unsigned short access, unsigned short creation,SMBCONN smbhndl); +void SMB_CloseFile(SMBFILE sfid); +s32 SMB_ReadFile(char *buffer, size_t size, off_t offset, SMBFILE sfid); +s32 SMB_WriteFile(const char *buffer, size_t size, off_t offset, SMBFILE sfid); +s32 SMB_CreateDirectory(const char *dirname, SMBCONN smbhndl); +s32 SMB_DeleteDirectory(const char *dirname, SMBCONN smbhndl); +s32 SMB_DeleteFile(const char *filename, SMBCONN smbhndl); +s32 SMB_Rename(const char *filename, const char * newname, SMBCONN smbhndl); +s32 SMB_DiskInformation(struct statvfs *buf, SMBCONN smbhndl); + +#ifdef __cplusplus + } +#endif + +#endif diff --git a/wii/libogc/include/wiiuse/wiiuse.h b/wii/libogc/include/wiiuse/wiiuse.h new file mode 100644 index 0000000000..7be2a7d9e9 --- /dev/null +++ b/wii/libogc/include/wiiuse/wiiuse.h @@ -0,0 +1,748 @@ +#ifndef __WIIUSE_H__ +#define __WIIUSE_H__ + +#if defined(_WIN32) + /* windows */ + #include +#elif defined(GEKKO) + /* wii */ + #include +#elif defined(__linux__) + /* nix */ + #include +#endif + +#ifdef WIIUSE_INTERNAL_H_INCLUDED + #define WCONST +#else + #define WCONST const +#endif + +/* led bit masks */ +#define WIIMOTE_LED_NONE 0x00 +#define WIIMOTE_LED_1 0x10 +#define WIIMOTE_LED_2 0x20 +#define WIIMOTE_LED_3 0x40 +#define WIIMOTE_LED_4 0x80 + +/* button codes */ +#define WIIMOTE_BUTTON_TWO 0x0001 +#define WIIMOTE_BUTTON_ONE 0x0002 +#define WIIMOTE_BUTTON_B 0x0004 +#define WIIMOTE_BUTTON_A 0x0008 +#define WIIMOTE_BUTTON_MINUS 0x0010 +#define WIIMOTE_BUTTON_ZACCEL_BIT6 0x0020 +#define WIIMOTE_BUTTON_ZACCEL_BIT7 0x0040 +#define WIIMOTE_BUTTON_HOME 0x0080 +#define WIIMOTE_BUTTON_LEFT 0x0100 +#define WIIMOTE_BUTTON_RIGHT 0x0200 +#define WIIMOTE_BUTTON_DOWN 0x0400 +#define WIIMOTE_BUTTON_UP 0x0800 +#define WIIMOTE_BUTTON_PLUS 0x1000 +#define WIIMOTE_BUTTON_ZACCEL_BIT4 0x2000 +#define WIIMOTE_BUTTON_ZACCEL_BIT5 0x4000 +#define WIIMOTE_BUTTON_UNKNOWN 0x8000 +#define WIIMOTE_BUTTON_ALL 0x1F9F + +/* nunchul button codes */ +#define NUNCHUK_BUTTON_Z 0x01 +#define NUNCHUK_BUTTON_C 0x02 +#define NUNCHUK_BUTTON_ALL 0x03 + +/* classic controller button codes */ +#define CLASSIC_CTRL_BUTTON_UP 0x0001 +#define CLASSIC_CTRL_BUTTON_LEFT 0x0002 +#define CLASSIC_CTRL_BUTTON_ZR 0x0004 +#define CLASSIC_CTRL_BUTTON_X 0x0008 +#define CLASSIC_CTRL_BUTTON_A 0x0010 +#define CLASSIC_CTRL_BUTTON_Y 0x0020 +#define CLASSIC_CTRL_BUTTON_B 0x0040 +#define CLASSIC_CTRL_BUTTON_ZL 0x0080 +#define CLASSIC_CTRL_BUTTON_FULL_R 0x0200 +#define CLASSIC_CTRL_BUTTON_PLUS 0x0400 +#define CLASSIC_CTRL_BUTTON_HOME 0x0800 +#define CLASSIC_CTRL_BUTTON_MINUS 0x1000 +#define CLASSIC_CTRL_BUTTON_FULL_L 0x2000 +#define CLASSIC_CTRL_BUTTON_DOWN 0x4000 +#define CLASSIC_CTRL_BUTTON_RIGHT 0x8000 +#define CLASSIC_CTRL_BUTTON_ALL 0xFEFF + +/* guitar hero 3 button codes */ +#define GUITAR_HERO_3_BUTTON_STRUM_UP 0x0001 +#define GUITAR_HERO_3_BUTTON_YELLOW 0x0008 +#define GUITAR_HERO_3_BUTTON_GREEN 0x0010 +#define GUITAR_HERO_3_BUTTON_BLUE 0x0020 +#define GUITAR_HERO_3_BUTTON_RED 0x0040 +#define GUITAR_HERO_3_BUTTON_ORANGE 0x0080 +#define GUITAR_HERO_3_BUTTON_PLUS 0x0400 +#define GUITAR_HERO_3_BUTTON_MINUS 0x1000 +#define GUITAR_HERO_3_BUTTON_STRUM_DOWN 0x4000 +#define GUITAR_HERO_3_BUTTON_ALL 0xFEFF + +/* guitar hero world tour touch bar codes */ +#define GUITAR_HERO_3_TOUCH_AVAILABLE 0x1000 +#define GUITAR_HERO_3_TOUCH_GREEN 0x1001 +#define GUITAR_HERO_3_TOUCH_RED 0x1002 +#define GUITAR_HERO_3_TOUCH_YELLOW 0x1004 +#define GUITAR_HERO_3_TOUCH_BLUE 0x1008 +#define GUITAR_HERO_3_TOUCH_ORANGE 0x1010 + +/* wiimote option flags */ +#define WIIUSE_SMOOTHING 0x01 +#define WIIUSE_CONTINUOUS 0x02 +#define WIIUSE_ACCEL_THRESH 0x04 +#define WIIUSE_IR_THRESH 0x08 +#define WIIUSE_JS_THRESH 0x10 +#define WIIUSE_INIT_FLAGS WIIUSE_SMOOTHING + +#define WIIUSE_ORIENT_PRECISION 100.0f + +/* expansion codes */ +#define EXP_NONE 0 +#define EXP_NUNCHUK 1 +#define EXP_CLASSIC 2 +#define EXP_GUITAR_HERO_3 3 +#define EXP_WII_BOARD 4 +#define EXP_MOTION_PLUS 5 + +/* IR correction types */ +typedef enum ir_position_t { + WIIUSE_IR_ABOVE, + WIIUSE_IR_BELOW +} ir_position_t; + +/** + * @brief Check if a button is pressed. + * @param dev Pointer to a wiimote_t or expansion structure. + * @param button The button you are interested in. + * @return 1 if the button is pressed, 0 if not. + */ +#define IS_PRESSED(dev, button) ((dev->btns & button) == button) + +/** + * @brief Check if a button is being held. + * @param dev Pointer to a wiimote_t or expansion structure. + * @param button The button you are interested in. + * @return 1 if the button is held, 0 if not. + */ +#define IS_HELD(dev, button) ((dev->btns_held & button) == button) + +/** + * @brief Check if a button is released on this event. \n\n + * This does not mean the button is not pressed, it means \n + * this button was just now released. + * @param dev Pointer to a wiimote_t or expansion structure. + * @param button The button you are interested in. + * @return 1 if the button is released, 0 if not. + * + */ +#define IS_RELEASED(dev, button) ((dev->btns_released & button) == button) + +/** + * @brief Check if a button has just been pressed this event. + * @param dev Pointer to a wiimote_t or expansion structure. + * @param button The button you are interested in. + * @return 1 if the button is pressed, 0 if not. + */ +#define IS_JUST_PRESSED(dev, button) (IS_PRESSED(dev, button) && !IS_HELD(dev, button)) + +/** + * @brief Return the IR sensitivity level. + * @param wm Pointer to a wiimote_t structure. + * @param lvl [out] Pointer to an int that will hold the level setting. + * If no level is set 'lvl' will be set to 0. + */ +#define WIIUSE_GET_IR_SENSITIVITY(dev, lvl) \ + do { \ + if ((wm->state & 0x01000) == 0x01000) *lvl = 1; \ + else if ((wm->state & 0x02000) == 0x02000) *lvl = 2; \ + else if ((wm->state & 0x04000) == 0x04000) *lvl = 3; \ + else if ((wm->state & 0x08000) == 0x08000) *lvl = 4; \ + else if ((wm->state & 0x10000) == 0x10000) *lvl = 5; \ + else *lvl = 0; \ + } while (0) + +#define WIIUSE_USING_ACC(wm) ((wm->state & 0x00100) == 0x00100) +#define WIIUSE_USING_EXP(wm) ((wm->state & 0x00200) == 0x00200) +#define WIIUSE_USING_IR(wm) ((wm->state & 0x00400) == 0x00400) +#define WIIUSE_USING_SPEAKER(wm) ((wm->state & 0x00800) == 0x00800) + +#define WIIUSE_IS_LED_SET(wm, num) ((wm->leds & WIIMOTE_LED_##num) == WIIMOTE_LED_##num) + +/* + * Largest known payload is 21 bytes. + * Add 2 for the prefix and round up to a power of 2. + */ +#define MAX_PAYLOAD 32 + +/* + * This is left over from an old hack, but it may actually + * be a useful feature to keep so it wasn't removed. + */ +#ifdef WIN32 + #define WIIMOTE_DEFAULT_TIMEOUT 100 + #define WIIMOTE_EXP_TIMEOUT 100 +#endif + +typedef unsigned char ubyte; +typedef char sbyte; +typedef unsigned short uword; +typedef short sword; +typedef unsigned int uint; +typedef char sint; + + +struct wiimote_t; +struct vec3b_t; +struct orient_t; +struct gforce_t; + +#ifdef GEKKO + typedef void (*wii_event_cb)(struct wiimote_t*, s32 event); +#endif + +/** + * @brief Callback that handles a read event. + * + * @param wm Pointer to a wiimote_t structure. + * @param data Pointer to the filled data block. + * @param len Length in bytes of the data block. + * + * @see wiiuse_init() + * + * A registered function of this type is called automatically by the wiiuse + * library when the wiimote has returned the full data requested by a previous + * call to wiiuse_read_data(). + */ +typedef void (*wiiuse_data_cb)(struct wiimote_t* wm, ubyte* data, unsigned short len); + +typedef enum data_req_s +{ + REQ_READY = 0, + REQ_SENT, + REQ_DONE +} data_req_s; + +/** + * @struct data_req_t + * @brief Data read request structure. + */ +struct data_req_t { + lwp_node node; + ubyte data[48]; /**< buffer where read data is written */ + unsigned int len; + data_req_s state; /**< set to 1 if not using callback and needs to be cleaned up */ + wiiuse_data_cb cb; /**< read data callback */ + struct data_req_t *next; +}; + +typedef void (*cmd_blk_cb)(struct wiimote_t *wm,ubyte *data,uword len); + +typedef enum cmd_blk_s +{ + CMD_READY = 0, + CMD_SENT, + CMD_DONE +} cmd_blk_s; + +struct cmd_blk_t +{ + lwp_node node; + + ubyte data[48]; + uint len; + + cmd_blk_s state; + cmd_blk_cb cb; + + struct cmd_blk_t *next; +}; + + +/** + * @struct vec2b_t + * @brief Unsigned x,y byte vector. + */ +typedef struct vec2b_t { + ubyte x, y; +} vec2b_t; + + +/** +* @struct vec3b_t +* @brief Unsigned x,y,z byte vector. +*/ +typedef struct vec3b_t { + ubyte x, y, z; +} vec3b_t; + +/** +* @struct vec3b_t +* @brief Unsigned x,y,z byte vector. +*/ +typedef struct vec3w_t { + uword x, y, z; +} vec3w_t; + + +/** + * @struct vec3f_t + * @brief Signed x,y,z float struct. + */ +typedef struct vec3f_t { + float x, y, z; +} vec3f_t; + + +/** + * @struct orient_t + * @brief Orientation struct. + * + * Yaw, pitch, and roll range from -180 to 180 degrees. + */ +typedef struct orient_t { + float roll; /**< roll, this may be smoothed if enabled */ + float pitch; /**< pitch, this may be smoothed if enabled */ + float yaw; + + float a_roll; /**< absolute roll, unsmoothed */ + float a_pitch; /**< absolute pitch, unsmoothed */ +} orient_t; + + +/** + * @struct gforce_t + * @brief Gravity force struct. + */ +typedef struct gforce_t { + float x, y, z; +} gforce_t; + + +/** + * @struct accel_t + * @brief Accelerometer struct. For any device with an accelerometer. + */ +typedef struct accel_t { + struct vec3w_t cal_zero; /**< zero calibration */ + struct vec3w_t cal_g; /**< 1g difference around 0cal */ + + float st_roll; /**< last smoothed roll value */ + float st_pitch; /**< last smoothed roll pitch */ + float st_alpha; /**< alpha value for smoothing [0-1] */ +} accel_t; + + +/** + * @struct ir_dot_t + * @brief A single IR source. + */ +typedef struct ir_dot_t { + ubyte visible; /**< if the IR source is visible */ + + short rx; /**< raw X coordinate (0-1023) */ + short ry; /**< raw Y coordinate (0-767) */ + + ubyte size; /**< size of the IR dot (0-15) */ +} ir_dot_t; + + +typedef struct fdot_t { + float x,y; +} fdot_t; + +typedef struct sb_t { + fdot_t dots[2]; + fdot_t acc_dots[2]; + fdot_t rot_dots[2]; + float angle; + float off_angle; + float score; +} sb_t; + +/** + * @enum aspect_t + * @brief Screen aspect ratio. + */ +typedef enum aspect_t { + WIIUSE_ASPECT_4_3, + WIIUSE_ASPECT_16_9 +} aspect_t; + + +/** + * @struct ir_t + * @brief IR struct. Hold all data related to the IR tracking. + */ +typedef struct ir_t { + struct ir_dot_t dot[4]; /**< IR dots */ + ubyte num_dots; /**< number of dots at this time */ + + int state; /**< keeps track of the IR state */ + + int raw_valid; /**< is the raw position valid? */ + sb_t sensorbar; /**< sensor bar, detected or guessed */ + float ax; /**< raw X coordinate */ + float ay; /**< raw Y coordinate */ + float distance; /**< pixel width of the sensor bar */ + float z; /**< calculated distance in meters */ + float angle; /**< angle of the wiimote to the sensor bar*/ + + int smooth_valid; /**< is the smoothed position valid? */ + float sx; /**< smoothed X coordinate */ + float sy; /**< smoothed Y coordinate */ + float error_cnt; /**< error count, for smoothing algorithm*/ + float glitch_cnt; /**< glitch count, same */ + + int valid; /**< is the bounded position valid? */ + float x; /**< bounded X coordinate */ + float y; /**< bounded Y coordinate */ + enum aspect_t aspect; /**< aspect ratio of the screen */ + enum ir_position_t pos; /**< IR sensor bar position */ + unsigned int vres[2]; /**< IR virtual screen resolution */ + int offset[2]; /**< IR XY correction offset */ + +} ir_t; + + +/** + * @struct joystick_t + * @brief Joystick calibration structure. + * + * The angle \a ang is relative to the positive y-axis into quadrant I + * and ranges from 0 to 360 degrees. So if the joystick is held straight + * upwards then angle is 0 degrees. If it is held to the right it is 90, + * down is 180, and left is 270. + * + * The magnitude \a mag is the distance from the center to where the + * joystick is being held. The magnitude ranges from 0 to 1. + * If the joystick is only slightly tilted from the center the magnitude + * will be low, but if it is closer to the outter edge the value will + * be higher. + */ +typedef struct joystick_t { + struct vec2b_t max; /**< maximum joystick values */ + struct vec2b_t min; /**< minimum joystick values */ + struct vec2b_t center; /**< center joystick values */ + struct vec2b_t pos; /**< raw position values */ + + float ang; /**< angle the joystick is being held */ + float mag; /**< magnitude of the joystick (range 0-1) */ +} joystick_t; + + +/** + * @struct nunchuk_t + * @brief Nunchuk expansion device. + */ +typedef struct nunchuk_t { + struct accel_t accel_calib; /**< nunchuk accelerometer calibration */ + struct joystick_t js; /**< joystick calibration */ + + int* flags; /**< options flag (points to wiimote_t.flags) */ + + ubyte btns; /**< what buttons have just been pressed */ + ubyte btns_last; /**< what buttons have just been pressed */ + ubyte btns_held; /**< what buttons are being held down */ + ubyte btns_released; /**< what buttons were just released this */ + + struct vec3w_t accel; /**< current raw acceleration data */ + struct orient_t orient; /**< current orientation on each axis */ + struct gforce_t gforce; /**< current gravity forces on each axis */ +} nunchuk_t; + + +/** + * @struct classic_ctrl_t + * @brief Classic controller expansion device. + */ +typedef struct classic_ctrl_t { + short btns; /**< what buttons have just been pressed */ + short btns_last; /**< what buttons have just been pressed */ + short btns_held; /**< what buttons are being held down */ + short btns_released; /**< what buttons were just released this */ + + ubyte rs_raw; + ubyte ls_raw; + + float r_shoulder; /**< right shoulder button (range 0-1) */ + float l_shoulder; /**< left shoulder button (range 0-1) */ + + struct joystick_t ljs; /**< left joystick calibration */ + struct joystick_t rjs; /**< right joystick calibration */ + ubyte type; /**< original, pro, wiiu pro */ +} classic_ctrl_t; + + +/** + * @struct guitar_hero_3_t + * @brief Guitar Hero 3 expansion device. + */ +typedef struct guitar_hero_3_t { + short btns; /**< what buttons have just been pressed */ + short btns_last; /**< what buttons have just been pressed */ + short btns_held; /**< what buttons are being held down */ + short btns_released; /**< what buttons were just released this */ + + ubyte wb_raw; + float whammy_bar; /**< whammy bar (range 0-1) */ + + ubyte tb_raw; + int touch_bar; /**< touch bar */ + + struct joystick_t js; /**< joystick calibration */ +} guitar_hero_3_t; + +/** + * @struct wii_board_t + * @brief Wii Balance Board expansion device. + */ +typedef struct wii_board_t { + float tl; /* Interpolated */ + float tr; + float bl; + float br; /* End interp */ + short rtl; /* RAW */ + short rtr; + short rbl; + short rbr; /* /RAW */ + short ctl[3]; /* Calibration */ + short ctr[3]; + short cbl[3]; + short cbr[3]; /* /Calibration */ + float x; + float y; +} wii_board_t; + +typedef struct motion_plus_t +{ + short rx, ry, rz; + ubyte status; + ubyte ext; +} motion_plus_t; + +/** + * @struct expansion_t + * @brief Generic expansion device plugged into wiimote. + */ +typedef struct expansion_t { + int type; /**< type of expansion attached */ + + union { + struct nunchuk_t nunchuk; + struct classic_ctrl_t classic; + struct guitar_hero_3_t gh3; + struct wii_board_t wb; + struct motion_plus_t mp; + }; +} expansion_t; + + +/** + * @enum win32_bt_stack_t + * @brief Available bluetooth stacks for Windows. + */ +typedef enum win_bt_stack_t { + WIIUSE_STACK_UNKNOWN, + WIIUSE_STACK_MS, + WIIUSE_STACK_BLUESOLEIL +} win_bt_stack_t; + + +/** + * @struct wiimote_state_t + * @brief Significant data from the previous event. + */ +typedef struct wiimote_state_t { + unsigned short btns; + + struct ir_t ir; + struct vec3w_t accel; + struct expansion_t exp; +} wiimote_state_t; + + +/** + * @enum WIIUSE_EVENT_TYPE + * @brief Events that wiiuse can generate from a poll. + */ +typedef enum WIIUSE_EVENT_TYPE { + WIIUSE_NONE = 0, + WIIUSE_EVENT, + WIIUSE_STATUS, + WIIUSE_CONNECT, + WIIUSE_DISCONNECT, + WIIUSE_UNEXPECTED_DISCONNECT, + WIIUSE_READ_DATA, + WIIUSE_ACK, + WIIUSE_NUNCHUK_INSERTED, + WIIUSE_NUNCHUK_REMOVED, + WIIUSE_CLASSIC_CTRL_INSERTED, + WIIUSE_CLASSIC_CTRL_REMOVED, + WIIUSE_GUITAR_HERO_3_CTRL_INSERTED, + WIIUSE_GUITAR_HERO_3_CTRL_REMOVED, + WIIUSE_WII_BOARD_INSERTED, + WIIUSE_WII_BOARD_REMOVED, + WIIUSE_MOTION_PLUS_ACTIVATED, + WIIUSE_MOTION_PLUS_REMOVED +} WIIUSE_EVENT_TYPE; + +/** + * @struct wiimote_t + * @brief Wiimote structure. + */ +typedef struct wiimote_t { + WCONST int unid; /**< user specified id */ + + #if defined(_WIN32) + WCONST HANDLE dev_handle; /**< HID handle */ + WCONST OVERLAPPED hid_overlap; /**< overlap handle */ + WCONST enum win_bt_stack_t stack; /**< type of bluetooth stack to use */ + WCONST int timeout; /**< read timeout */ + WCONST ubyte normal_timeout; /**< normal timeout */ + WCONST ubyte exp_timeout; /**< timeout for expansion handshake */ + #elif defined(GEKKO) + WCONST lwp_queue cmdq; + WCONST struct bd_addr bdaddr; /**< bt address */ + WCONST char bdaddr_str[18]; /**< readable bt address */ + WCONST struct bte_pcb *sock; /**< output socket */ + WCONST wii_event_cb event_cb; /**< event callback */ + #elif defined(unix) + WCONST bdaddr_t bdaddr; /**< bt address */ + WCONST char bdaddr_str[18]; /**< readable bt address */ + WCONST int out_sock; /**< output socket */ + WCONST int in_sock; /**< input socket */ + #endif + + WCONST int state; /**< various state flags */ + WCONST ubyte leds; /**< currently lit leds */ +#ifdef GEKKO + WCONST ubyte battery_level; /**< battery level */ +#else + WCONST float battery_level; /**< battery level */ +#endif + + WCONST int flags; /**< options flag */ + + WCONST ubyte handshake_state; /**< the state of the connection handshake */ + WCONST ubyte expansion_state; /**< the state of the expansion handshake */ + + WCONST struct data_req_t* data_req; /**< list of data read requests */ + + WCONST struct cmd_blk_t *cmd_head; + WCONST struct cmd_blk_t *cmd_tail; + + WCONST struct accel_t accel_calib; /**< wiimote accelerometer calibration */ + WCONST struct expansion_t exp; /**< wiimote expansion device */ + + WCONST struct vec3w_t accel; /**< current raw acceleration data */ + WCONST struct orient_t orient; /**< current orientation on each axis */ + WCONST struct gforce_t gforce; /**< current gravity forces on each axis */ + + WCONST struct ir_t ir; /**< IR data */ + + WCONST unsigned short btns; /**< what buttons are down */ + WCONST unsigned short btns_last; /**< what buttons were down before */ + WCONST unsigned short btns_held; /**< what buttons are and were held down */ + WCONST unsigned short btns_released; /**< what buttons were just released */ + + WCONST struct wiimote_state_t lstate; /**< last saved state */ + + WCONST WIIUSE_EVENT_TYPE event; /**< type of event that occured */ + WCONST ubyte event_buf[MAX_PAYLOAD]; /**< event buffer */ + + WCONST ubyte motion_plus_id[6]; +} wiimote; + +#if defined(GEKKO) +/** + * @struct wiimote_listen_t + * @brief Wiimote listen structure. + */ +typedef struct wiimote_listen_t { + WCONST struct bd_addr bdaddr; + WCONST struct bte_pcb *sock; + WCONST struct wiimote_t *(*assign_cb)(struct bd_addr *bdaddr); + WCONST struct wiimote_t *wm; +} wiimote_listen; +#endif + +/***************************************** + * + * Include API specific stuff + * + *****************************************/ + +#ifdef _WIN32 + #define WIIUSE_EXPORT_DECL __declspec(dllexport) + #define WIIUSE_IMPORT_DECL __declspec(dllimport) +#else + #define WIIUSE_EXPORT_DECL + #define WIIUSE_IMPORT_DECL +#endif + +#ifdef WIIUSE_COMPILE_LIB + #define WIIUSE_EXPORT WIIUSE_EXPORT_DECL +#else + #define WIIUSE_EXPORT WIIUSE_IMPORT_DECL +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* wiiuse.c */ +WIIUSE_EXPORT extern const char* wiiuse_version(); + +#ifndef GEKKO +WIIUSE_EXPORT extern struct wiimote_t** wiiuse_init(int wiimotes); +#else +WIIUSE_EXPORT extern int wiiuse_register(struct wiimote_listen_t *wml, struct bd_addr *bdaddr, struct wiimote_t *(*assign_cb)(struct bd_addr *bdaddr)); +WIIUSE_EXPORT extern struct wiimote_t** wiiuse_init(int wiimotes, wii_event_cb event_cb); +WIIUSE_EXPORT extern void wiiuse_sensorbar_enable(int enable); +#endif + +WIIUSE_EXPORT extern void wiiuse_disconnected(struct wiimote_t* wm); +WIIUSE_EXPORT extern void wiiuse_cleanup(struct wiimote_t** wm, int wiimotes); +WIIUSE_EXPORT extern void wiiuse_rumble(struct wiimote_t* wm, int status); +WIIUSE_EXPORT extern void wiiuse_toggle_rumble(struct wiimote_t* wm); +WIIUSE_EXPORT extern void wiiuse_set_leds(struct wiimote_t* wm, int leds,cmd_blk_cb cb); +WIIUSE_EXPORT extern void wiiuse_motion_sensing(struct wiimote_t* wm, int status); +WIIUSE_EXPORT extern int wiiuse_read_data(struct wiimote_t* wm, ubyte* buffer, unsigned int offset, unsigned short len, cmd_blk_cb cb); +WIIUSE_EXPORT extern int wiiuse_write_data(struct wiimote_t *wm,unsigned int addr,ubyte *data,ubyte len,cmd_blk_cb cb); +WIIUSE_EXPORT extern void wiiuse_status(struct wiimote_t *wm,cmd_blk_cb cb); +WIIUSE_EXPORT extern struct wiimote_t* wiiuse_get_by_id(struct wiimote_t** wm, int wiimotes, int unid); +WIIUSE_EXPORT extern int wiiuse_set_flags(struct wiimote_t* wm, int enable, int disable); +WIIUSE_EXPORT extern float wiiuse_set_smooth_alpha(struct wiimote_t* wm, float alpha); +WIIUSE_EXPORT extern void wiiuse_set_bluetooth_stack(struct wiimote_t** wm, int wiimotes, enum win_bt_stack_t type); +WIIUSE_EXPORT extern void wiiuse_resync(struct wiimote_t* wm); +WIIUSE_EXPORT extern void wiiuse_set_timeout(struct wiimote_t** wm, int wiimotes, ubyte normal_timeout, ubyte exp_timeout); +WIIUSE_EXPORT extern int wiiuse_write_streamdata(struct wiimote_t *wm,ubyte *data,ubyte len,cmd_blk_cb cb); + +/* connect.c */ +WIIUSE_EXPORT extern int wiiuse_find(struct wiimote_t** wm, int max_wiimotes, int timeout); +WIIUSE_EXPORT extern int wiiuse_connect(struct wiimote_t** wm, int wiimotes); +WIIUSE_EXPORT extern void wiiuse_disconnect(struct wiimote_t* wm); + +/* events.c */ +WIIUSE_EXPORT extern int wiiuse_poll(struct wiimote_t** wm, int wiimotes); + +/* ir.c */ +WIIUSE_EXPORT extern void wiiuse_set_ir_mode(struct wiimote_t *wm); +WIIUSE_EXPORT extern void wiiuse_set_ir(struct wiimote_t* wm, int status); +WIIUSE_EXPORT extern void wiiuse_set_ir_vres(struct wiimote_t* wm, unsigned int x, unsigned int y); +WIIUSE_EXPORT extern void wiiuse_set_ir_position(struct wiimote_t* wm, enum ir_position_t pos); +WIIUSE_EXPORT extern void wiiuse_set_aspect_ratio(struct wiimote_t* wm, enum aspect_t aspect); +WIIUSE_EXPORT extern void wiiuse_set_ir_sensitivity(struct wiimote_t* wm, int level); + +/* motion_plus.c */ +WIIUSE_EXPORT extern void wiiuse_set_motion_plus(struct wiimote_t *wm, int status); + +/* speaker.c */ +WIIUSE_EXPORT extern void wiiuse_set_speaker(struct wiimote_t *wm, int status); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/wii/libogc/include/wiiuse/wpad.h b/wii/libogc/include/wiiuse/wpad.h new file mode 100644 index 0000000000..3f7f5c496e --- /dev/null +++ b/wii/libogc/include/wiiuse/wpad.h @@ -0,0 +1,208 @@ +/*------------------------------------------------------------- + +wpad.h -- Wiimote Application Programmers Interface + +Copyright (C) 2008 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) +Hector Martin (marcan) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + +#ifndef __WPAD_H__ +#define __WPAD_H__ + +#include +#include + +#define WPAD_MAX_IR_DOTS 4 + +enum { + WPAD_CHAN_ALL = -1, + WPAD_CHAN_0, + WPAD_CHAN_1, + WPAD_CHAN_2, + WPAD_CHAN_3, + WPAD_BALANCE_BOARD, + WPAD_MAX_WIIMOTES, +}; + +#define WPAD_BUTTON_2 0x0001 +#define WPAD_BUTTON_1 0x0002 +#define WPAD_BUTTON_B 0x0004 +#define WPAD_BUTTON_A 0x0008 +#define WPAD_BUTTON_MINUS 0x0010 +#define WPAD_BUTTON_HOME 0x0080 +#define WPAD_BUTTON_LEFT 0x0100 +#define WPAD_BUTTON_RIGHT 0x0200 +#define WPAD_BUTTON_DOWN 0x0400 +#define WPAD_BUTTON_UP 0x0800 +#define WPAD_BUTTON_PLUS 0x1000 + +#define WPAD_NUNCHUK_BUTTON_Z (0x0001<<16) +#define WPAD_NUNCHUK_BUTTON_C (0x0002<<16) + +#define WPAD_CLASSIC_BUTTON_UP (0x0001<<16) +#define WPAD_CLASSIC_BUTTON_LEFT (0x0002<<16) +#define WPAD_CLASSIC_BUTTON_ZR (0x0004<<16) +#define WPAD_CLASSIC_BUTTON_X (0x0008<<16) +#define WPAD_CLASSIC_BUTTON_A (0x0010<<16) +#define WPAD_CLASSIC_BUTTON_Y (0x0020<<16) +#define WPAD_CLASSIC_BUTTON_B (0x0040<<16) +#define WPAD_CLASSIC_BUTTON_ZL (0x0080<<16) +#define WPAD_CLASSIC_BUTTON_FULL_R (0x0200<<16) +#define WPAD_CLASSIC_BUTTON_PLUS (0x0400<<16) +#define WPAD_CLASSIC_BUTTON_HOME (0x0800<<16) +#define WPAD_CLASSIC_BUTTON_MINUS (0x1000<<16) +#define WPAD_CLASSIC_BUTTON_FULL_L (0x2000<<16) +#define WPAD_CLASSIC_BUTTON_DOWN (0x4000<<16) +#define WPAD_CLASSIC_BUTTON_RIGHT (0x8000<<16) + +#define WPAD_GUITAR_HERO_3_BUTTON_STRUM_UP (0x0001<<16) +#define WPAD_GUITAR_HERO_3_BUTTON_YELLOW (0x0008<<16) +#define WPAD_GUITAR_HERO_3_BUTTON_GREEN (0x0010<<16) +#define WPAD_GUITAR_HERO_3_BUTTON_BLUE (0x0020<<16) +#define WPAD_GUITAR_HERO_3_BUTTON_RED (0x0040<<16) +#define WPAD_GUITAR_HERO_3_BUTTON_ORANGE (0x0080<<16) +#define WPAD_GUITAR_HERO_3_BUTTON_PLUS (0x0400<<16) +#define WPAD_GUITAR_HERO_3_BUTTON_MINUS (0x1000<<16) +#define WPAD_GUITAR_HERO_3_BUTTON_STRUM_DOWN (0x4000<<16) + +enum { + WPAD_EXP_NONE = 0, + WPAD_EXP_NUNCHUK, + WPAD_EXP_CLASSIC, + WPAD_EXP_GUITARHERO3, + WPAD_EXP_WIIBOARD, + WPAD_EXP_UNKNOWN = 255 +}; + +enum { + WPAD_FMT_BTNS = 0, + WPAD_FMT_BTNS_ACC, + WPAD_FMT_BTNS_ACC_IR +}; + +enum { + WPAD_STATE_DISABLED, + WPAD_STATE_ENABLING, + WPAD_STATE_ENABLED +}; + +#define WPAD_ERR_NONE 0 +#define WPAD_ERR_NO_CONTROLLER -1 +#define WPAD_ERR_NOT_READY -2 +#define WPAD_ERR_TRANSFER -3 +#define WPAD_ERR_NONEREGISTERED -4 +#define WPAD_ERR_UNKNOWN -5 +#define WPAD_ERR_BAD_CHANNEL -6 +#define WPAD_ERR_QUEUE_EMPTY -7 +#define WPAD_ERR_BADVALUE -8 +#define WPAD_ERR_BADCONF -9 + +#define WPAD_DATA_BUTTONS 0x01 +#define WPAD_DATA_ACCEL 0x02 +#define WPAD_DATA_EXPANSION 0x04 +#define WPAD_DATA_IR 0x08 + +#define WPAD_ENC_FIRST 0x00 +#define WPAD_ENC_CONT 0x01 + +#define WPAD_THRESH_IGNORE -1 +#define WPAD_THRESH_ANY 0 +#define WPAD_THRESH_DEFAULT_BUTTONS 0 +#define WPAD_THRESH_DEFAULT_IR WPAD_THRESH_IGNORE +#define WPAD_THRESH_DEFAULT_ACCEL 20 +#define WPAD_THRESH_DEFAULT_JOYSTICK 2 +#define WPAD_THRESH_DEFAULT_BALANCEBOARD 60 +#define WPAD_THRESH_DEFAULT_MOTION_PLUS 100 + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +typedef struct _wpad_data +{ + s16 err; + + u32 data_present; + u8 battery_level; + + u32 btns_h; + u32 btns_l; + u32 btns_d; + u32 btns_u; + + struct ir_t ir; + struct vec3w_t accel; + struct orient_t orient; + struct gforce_t gforce; + struct expansion_t exp; +} WPADData; + +typedef struct _wpad_encstatus +{ + u8 data[32]; +}WPADEncStatus; + +typedef void (*WPADDataCallback)(s32 chan, const WPADData *data); +typedef void (*WPADShutdownCallback)(s32 chan); + +s32 WPAD_Init(); +s32 WPAD_ControlSpeaker(s32 chan,s32 enable); +s32 WPAD_ReadEvent(s32 chan, WPADData *data); +s32 WPAD_DroppedEvents(s32 chan); +s32 WPAD_Flush(s32 chan); +s32 WPAD_ReadPending(s32 chan, WPADDataCallback datacb); +s32 WPAD_SetDataFormat(s32 chan, s32 fmt); +s32 WPAD_SetMotionPlus(s32 chan, u8 enable); +s32 WPAD_SetVRes(s32 chan,u32 xres,u32 yres); +s32 WPAD_GetStatus(); +s32 WPAD_Probe(s32 chan,u32 *type); +s32 WPAD_SetEventBufs(s32 chan, WPADData *bufs, u32 cnt); +s32 WPAD_Disconnect(s32 chan); +s32 WPAD_IsSpeakerEnabled(s32 chan); +s32 WPAD_SendStreamData(s32 chan,void *buf,u32 len); +void WPAD_Shutdown(); +void WPAD_SetIdleTimeout(u32 seconds); +void WPAD_SetPowerButtonCallback(WPADShutdownCallback cb); +void WPAD_SetBatteryDeadCallback(WPADShutdownCallback cb); +s32 WPAD_ScanPads(); +s32 WPAD_Rumble(s32 chan, int status); +s32 WPAD_SetIdleThresholds(s32 chan, s32 btns, s32 ir, s32 accel, s32 js, s32 wb, s32 mp); +void WPAD_EncodeData(WPADEncStatus *info,u32 flag,const s16 *pcmSamples,s32 numSamples,u8 *encData); +WPADData *WPAD_Data(int chan); +u8 WPAD_BatteryLevel(int chan); +u32 WPAD_ButtonsUp(int chan); +u32 WPAD_ButtonsDown(int chan); +u32 WPAD_ButtonsHeld(int chan); +void WPAD_IR(int chan, struct ir_t *ir); +void WPAD_Orientation(int chan, struct orient_t *orient); +void WPAD_GForce(int chan, struct gforce_t *gforce); +void WPAD_Accel(int chan, struct vec3w_t *accel); +void WPAD_Expansion(int chan, struct expansion_t *exp); + +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif diff --git a/wii/libogc/libdb/debug.c b/wii/libogc/libdb/debug.c new file mode 100644 index 0000000000..f9dce171de --- /dev/null +++ b/wii/libogc/libdb/debug.c @@ -0,0 +1,653 @@ +#include +#include +#include +#include +#include +#include "asm.h" +#include "processor.h" +#include "spinlock.h" +#include "lwp.h" +#include "lwp_threads.h" +#include "sys_state.h" +#include "context.h" +#include "cache.h" +#include "video.h" +#include "ogcsys.h" + +#include "lwp_config.h" + +#include "tcpip.h" +#include "geckousb.h" +#include "debug_if.h" +#include "debug_supp.h" + +#define GEKKO_MAX_BP 256 + +#define SP_REGNUM 1 //register no. for stackpointer +#define PC_REGNUM 64 //register no. for programcounter (srr0) + +#define BUFMAX 2048 //we take the same as in ppc-stub.c + +#define BPCODE 0x7d821008 + +#define highhex(x) hexchars [((x)>>4)&0xf] +#define lowhex(x) hexchars [(x)&0xf] + +#if UIP_LOGGING == 1 +#include +#define UIP_LOG(m) uip_log(__FILE__,__LINE__,m) +#else +#define UIP_LOG(m) +#endif /* UIP_LOGGING == 1 */ + +static s32 dbg_active = 0; +static s32 dbg_instep = 0; +static s32 dbg_initialized = 0; + +static struct dbginterface *current_device = NULL; + +static char remcomInBuffer[BUFMAX]; +static char remcomOutBuffer[BUFMAX]; + +const char hexchars[]="0123456789abcdef"; + +static struct hard_trap_info { + u32 tt; + u8 signo; +} hard_trap_info[] = { + {EX_MACH_CHECK,SIGSEGV},/* Machine Check */ + {EX_DSI,SIGSEGV}, /* Adress Error(store) DSI */ + {EX_ISI,SIGBUS}, /* Instruction Bus Error ISI */ + {EX_INT,SIGINT}, /* Interrupt */ + {EX_ALIGN,SIGBUS}, /* Alignment */ + {EX_PRG,SIGTRAP}, /* Breakpoint Trap */ + {EX_FP,SIGFPE}, /* FPU unavail */ + {EX_DEC,SIGALRM}, /* Decrementer */ + {EX_SYS_CALL,SIGSYS}, /* System Call */ + {EX_TRACE,SIGTRAP}, /* Singel-Step/Watch */ + {0xB,SIGILL}, /* Reserved */ + {EX_IABR,SIGTRAP}, /* Instruction Address Breakpoint (GEKKO) */ + {0xD,SIGFPE}, /* FP assist */ + {0,0} /* MUST be the last */ +}; + +static struct bp_entry { + u32 *address; + u32 instr; + struct bp_entry *next; +} bp_entries[GEKKO_MAX_BP]; + +static struct bp_entry *p_bpentries = NULL; +static frame_context current_thread_registers; + +void __breakinst(); +void c_debug_handler(frame_context *ctx); + +extern void dbg_exceptionhandler(); +extern void __exception_sethandler(u32 nExcept, void (*pHndl)(frame_context*)); + +extern void __clr_iabr(); +extern void __enable_iabr(); +extern void __disable_iabr(); +extern void __set_iabr(void *); + +extern const char *tcp_localip; +extern const char *tcp_netmask; +extern const char *tcp_gateway; +extern u8 __text_start[],__data_start[],__bss_start[]; +extern u8 __text_fstart[],__data_fstart[],__bss_fstart[]; + +static __inline__ void bp_init() +{ + s32 i; + + for(i=0;i= 'a' && ch <= 'f') + return ch-'a'+10; + if (ch >= '0' && ch <= '9') + return ch-'0'; + if (ch >= 'A' && ch <= 'F') + return ch-'A'+10; + return -1; +} + +static s32 hexToInt(char **ptr, s32 *ival) +{ + s32 cnt; + s32 val,nibble; + + val = 0; + cnt = 0; + while(**ptr) { + nibble = hex(**ptr); + if(nibble<0) break; + + val = (val<<4)|nibble; + cnt++; + + (*ptr)++; + } + *ival = val; + return cnt; +} + +static s32 computeSignal(s32 excpt) +{ + struct hard_trap_info *ht; + for(ht = hard_trap_info;ht->tt && ht->signo;ht++) { + if(ht->tt==excpt) return ht->signo; + } + return SIGHUP; +} + +static u32 insert_bp(void *mem) +{ + u32 i; + struct bp_entry *p; + + for(i=0;inext = p_bpentries; + p->address = mem; + p_bpentries = p; + + p->instr = *(p->address); + *(p->address) = BPCODE; + + DCStoreRangeNoSync((void*)((u32)mem&~0x1f),32); + ICInvalidateRange((void*)((u32)mem&~0x1f),32); + _sync(); + + return 1; +} + +static u32 remove_bp(void *mem) +{ + struct bp_entry *e = p_bpentries; + struct bp_entry *f = NULL; + + if(!e) return 0; + if(e->address==mem) { + p_bpentries = e->next; + f = e; + } else { + for(;e->next;e=e->next) { + if(e->next->address==mem) { + f = e->next; + e->next = f->next; + break; + } + } + } + if(!f) return 0; + + *(f->address) = f->instr; + f->instr = 0xffffffff; + f->address = NULL; + + DCStoreRangeNoSync((void*)((u32)mem&~0x1f),32); + ICInvalidateRange((void*)((u32)mem&~0x1f),32); + _sync(); + + return 1; +} + +static char getdbgchar() +{ + char ch = 0; + s32 len = 0; + + len = current_device->read(current_device,&ch,1); + + return (len>0)?ch:0; +} + +static void putdbgchar(char ch) +{ + current_device->write(current_device,&ch,1); +} + +static void putdbgstr(const char *str) +{ + current_device->write(current_device,str,strlen(str)); +} + +static void putpacket(const char *buffer) +{ + u8 recv; + u8 chksum,ch; + char *ptr; + const char *inp; + static char outbuf[2048]; + + do { + inp = buffer; + ptr = outbuf; + + *ptr++ = '$'; + + chksum = 0; + while((ch=*inp++)!='\0') { + *ptr++ = ch; + chksum += ch; + } + + *ptr++ = '#'; + *ptr++ = hexchars[chksum>>4]; + *ptr++ = hexchars[chksum&0x0f]; + *ptr = '\0'; + + putdbgstr(outbuf); + + recv = getdbgchar(); + } while((recv&0x7f)!='+'); +} + +static void getpacket(char *buffer) +{ + char ch; + u8 chksum,xmitsum; + s32 i,cnt; + + do { + while((ch=(getdbgchar()&0x7f))!='$'); + + cnt = 0; + chksum = 0; + xmitsum = -1; + + while(cnt=BUFMAX) continue; + + buffer[cnt] = 0; + if(ch=='#') { + xmitsum = hex(getdbgchar()&0x7f)<<4; + xmitsum |= hex(getdbgchar()&0x7f); + + if(chksum!=xmitsum) putdbgchar('-'); + else { + putdbgchar('+'); + if(buffer[2]==':') { + putdbgchar(buffer[0]); + putdbgchar(buffer[1]); + + cnt = strlen((const char*)buffer); + for(i=3;i<=cnt;i++) buffer[i-3] = buffer[i]; + } + } + } + } while(chksum!=xmitsum); +} + +static void process_query(const char *inp,char *outp,s32 thread) +{ + char *optr; + + switch(inp[1]) { + case 'C': + optr = outp; + *optr++ = 'Q'; + *optr++ = 'C'; + optr = thread2vhstr(optr,thread); + *optr++ = 0; + break; + case 'P': + { + s32 ret,rthread,mask; + struct gdbstub_threadinfo info; + + ret = parseqp(inp,&mask,&rthread); + if(!ret || mask&~0x1f) { + strcpy(outp,"E01"); + break; + } + + ret = gdbstub_getthreadinfo(rthread,&info); + if(!ret) { + strcpy(outp,"E02"); + break; + } + packqq(outp,mask,rthread,&info); + } + break; + case 'L': + { + s32 ret,athread,first,max_cnt,i,done,rthread; + + ret = parseql(inp,&first,&max_cnt,&athread); + if(!ret) { + strcpy(outp,"E02"); + break; + } + if(max_cnt==0) { + strcpy(outp,"E02"); + break; + } + if(max_cnt>QM_MAXTHREADS) max_cnt = QM_MAXTHREADS; + + optr = reserve_qmheader(outp); + if(first) rthread = 0; + else rthread = athread; + + done = 0; + for(i=0;iGPR,th->context.GPR,(32*4)); + memcpy(frame->FPR,th->context.FPR,(32*8)); + frame->SRR0 = th->context.LR; + frame->SRR1 = th->context.MSR; + frame->CR = th->context.CR; + frame->LR = th->context.LR; + frame->CTR = th->context.CTR; + frame->XER = th->context.XER; + frame->FPSCR = th->context.FPSCR; + return 1; + } + return 0; +} + +static void gdbstub_report_exception(frame_context *frame,s32 thread) +{ + s32 sigval; + char *ptr; + + ptr = remcomOutBuffer; + sigval = computeSignal(frame->EXCPT_Number); + *ptr++ = 'T'; + *ptr++ = highhex(sigval); + *ptr++ = lowhex(sigval); + *ptr++ = highhex(SP_REGNUM); + *ptr++ = lowhex(SP_REGNUM); + *ptr++ = ':'; + ptr = mem2hstr(ptr,(char*)&frame->GPR[1],4); + *ptr++ = ';'; + *ptr++ = highhex(PC_REGNUM); + *ptr++ = lowhex(PC_REGNUM); + *ptr++ = ':'; + ptr = mem2hstr(ptr,(char*)&frame->SRR0,4); + *ptr++ = ';'; + + *ptr++ = 't'; + *ptr++ = 'h'; + *ptr++ = 'r'; + *ptr++ = 'e'; + *ptr++ = 'a'; + *ptr++ = 'd'; + *ptr++ = ':'; + ptr = thread2vhstr(ptr,thread); + *ptr++ = ';'; + + *ptr++ = '\0'; + +} + + +void c_debug_handler(frame_context *frame) +{ + char *ptr; + s32 addr,len; + s32 thread,current_thread; + s32 host_has_detached; + frame_context *regptr; + + thread = gdbstub_getcurrentthread(); + current_thread = thread; + + if(current_device->open(current_device)<0) return; + + if(dbg_active) { + gdbstub_report_exception(frame,thread); + putpacket(remcomOutBuffer); + } + + if(frame->SRR0==(u32)__breakinst) frame->SRR0 += 4; + + host_has_detached = 0; + while(!host_has_detached) { + remcomOutBuffer[0]= 0; + getpacket(remcomInBuffer); + switch(remcomInBuffer[0]) { + case '?': + gdbstub_report_exception(frame,thread); + break; + case 'D': + dbg_instep = 0; + dbg_active = 0; + frame->SRR1 &= ~MSR_SE; + strcpy(remcomOutBuffer,"OK"); + host_has_detached = 1; + break; + case 'k': + dbg_instep = 0; + dbg_active = 0; + frame->SRR1 &= ~MSR_SE; + frame->SRR0 = 0x80001800; + host_has_detached = 1; + goto exit; + case 'g': + regptr = frame; + ptr = remcomOutBuffer; + if(current_thread!=thread) regptr = ¤t_thread_registers; + + ptr = mem2hstr(ptr,(char*)regptr->GPR,32*4); + ptr = mem2hstr(ptr,(char*)regptr->FPR,32*8); + ptr = mem2hstr(ptr,(char*)®ptr->SRR0,4); + ptr = mem2hstr(ptr,(char*)®ptr->SRR1,4); + ptr = mem2hstr(ptr,(char*)®ptr->CR,4); + ptr = mem2hstr(ptr,(char*)®ptr->LR,4); + ptr = mem2hstr(ptr,(char*)®ptr->CTR,4); + ptr = mem2hstr(ptr,(char*)®ptr->XER,4); + ptr = mem2hstr(ptr,(char*)®ptr->FPSCR,4); + break; + case 'm': + ptr = &remcomInBuffer[1]; + if(hexToInt(&ptr,&addr) && ((addr&0xC0000000)==0xC0000000 || (addr&0xC0000000)==0x80000000) + && *ptr++==',' + && hexToInt(&ptr,&len) && len<=((BUFMAX - 4)/2)) + mem2hstr(remcomOutBuffer,(void*)addr,len); + else + strcpy(remcomOutBuffer,"E00"); + break; + case 'q': + process_query(remcomInBuffer,remcomOutBuffer,thread); + break; + case 'c': + dbg_instep = 0; + dbg_active = 1; + frame->SRR1 &= ~MSR_SE; + current_device->wait(current_device); + goto exit; + case 's': + dbg_instep = 1; + dbg_active = 1; + frame->SRR1 |= MSR_SE; + current_device->wait(current_device); + goto exit; + case 'z': + { + s32 ret,type; + u32 len; + char *addr; + + ret = parsezbreak(remcomInBuffer,&type,&addr,&len); + if(!ret) { + strcpy(remcomOutBuffer,"E01"); + break; + } + if(type!=0) break; + + if(len<4) { + strcpy(remcomOutBuffer,"E02"); + break; + } + + ret = remove_bp(addr); + if(!ret) { + strcpy(remcomOutBuffer,"E03"); + break; + } + strcpy(remcomOutBuffer,"OK"); + } + break; + case 'H': + if(remcomInBuffer[1]=='g') + { + s32 tmp,ret; + + if(vhstr2thread(&remcomInBuffer[2],&tmp)==NULL) { + strcpy(remcomOutBuffer,"E01"); + break; + } + if(!tmp) tmp = thread; + if(tmp==current_thread) { + strcpy(remcomOutBuffer,"OK"); + break; + } + + if(current_thread!=thread) ret = gdbstub_setthreadregs(current_thread,¤t_thread_registers); + if(tmp!=thread) { + ret = gdbstub_getthreadregs(tmp,¤t_thread_registers); + if(!ret) { + strcpy(remcomOutBuffer,"E02"); + break; + } + } + current_thread= tmp; + } + strcpy(remcomOutBuffer,"OK"); + break; + case 'T': + { + s32 tmp; + + if(vhstr2thread(&remcomInBuffer[1],&tmp)==NULL) { + strcpy(remcomOutBuffer,"E01"); + break; + } + if(gdbstub_indextoid(tmp)==NULL) strcpy(remcomOutBuffer,"E02"); + else strcpy(remcomOutBuffer,"OK"); + } + break; + case 'Z': + { + s32 ret,type; + u32 len; + char *addr; + + ret = parsezbreak(remcomInBuffer,&type,&addr,&len); + if(!ret) { + strcpy(remcomOutBuffer,"E01"); + break; + } + if(type!=0) { + strcpy(remcomOutBuffer,"E02"); + break; + } + if(len<4) { + strcpy(remcomOutBuffer,"E03"); + break; + } + + ret = insert_bp(addr); + if(!ret) { + strcpy(remcomOutBuffer,"E04"); + break; + } + strcpy(remcomOutBuffer,"OK"); + } + break; + } + putpacket(remcomOutBuffer); + } + current_device->close(current_device); +exit: + return; +} + +void _break(void) +{ + if(!dbg_initialized) return; + __asm__ __volatile__ (".globl __breakinst\n\ + __breakinst: .long 0x7d821008"); +} + +void DEBUG_Init(s32 device_type,s32 channel_port) +{ + u32 level; + struct uip_ip_addr localip,netmask,gateway; + + UIP_LOG("DEBUG_Init()\n"); + + __lwp_thread_dispatchdisable(); + + bp_init(); + + if(device_type==GDBSTUB_DEVICE_USB) { + current_device = usb_init(channel_port); + } else { + localip.addr = uip_ipaddr((const u8_t*)tcp_localip); + netmask.addr = uip_ipaddr((const u8_t*)tcp_netmask); + gateway.addr = uip_ipaddr((const u8_t*)tcp_gateway); + + current_device = tcpip_init(&localip,&netmask,&gateway,(u16)channel_port); + } + + if(current_device!=NULL) { + _CPU_ISR_Disable(level); + __exception_sethandler(EX_DSI,dbg_exceptionhandler); + __exception_sethandler(EX_PRG,dbg_exceptionhandler); + __exception_sethandler(EX_TRACE,dbg_exceptionhandler); + __exception_sethandler(EX_IABR,dbg_exceptionhandler); + _CPU_ISR_Restore(level); + + dbg_initialized = 1; + + } + __lwp_thread_dispatchenable(); +} + diff --git a/wii/libogc/libdb/debug_handler.S b/wii/libogc/libdb/debug_handler.S new file mode 100644 index 0000000000..7a311a3c13 --- /dev/null +++ b/wii/libogc/libdb/debug_handler.S @@ -0,0 +1,169 @@ +#include + +#define EXCEPTION_PROLOG \ + mfspr r0,912; \ + stw r0,GQR0_OFFSET(sp); \ + mfspr r0,913; \ + stw r0,GQR1_OFFSET(sp); \ + mfspr r0,914; \ + stw r0,GQR2_OFFSET(sp); \ + mfspr r0,915; \ + stw r0,GQR3_OFFSET(sp); \ + mfspr r0,916; \ + stw r0,GQR4_OFFSET(sp); \ + mfspr r0,917; \ + stw r0,GQR5_OFFSET(sp); \ + mfspr r0,918; \ + stw r0,GQR6_OFFSET(sp); \ + mfspr r0,919; \ + stw r0,GQR7_OFFSET(sp); \ + stmw r6,GPR6_OFFSET(sp) + +#define EXCEPTION_EPILOG \ + lwz r4,GQR0_OFFSET(sp); \ + mtspr 912,r4; \ + lwz r4,GQR1_OFFSET(sp); \ + mtspr 913,r4; \ + lwz r4,GQR2_OFFSET(sp); \ + mtspr 914,r4; \ + lwz r4,GQR3_OFFSET(sp); \ + mtspr 915,r4; \ + lwz r4,GQR4_OFFSET(sp); \ + mtspr 916,r4; \ + lwz r4,GQR5_OFFSET(sp); \ + mtspr 917,r4; \ + lwz r4,GQR6_OFFSET(sp); \ + mtspr 918,r4; \ + lwz r4,GQR7_OFFSET(sp); \ + mtspr 919,r4; \ + lmw r5,GPR5_OFFSET(sp) + + .extern c_debug_handler + .extern _cpu_context_save_fp + .globl dbg_exceptionhandler +dbg_exceptionhandler: + stwu sp,-EXCEPTION_FRAME_END(sp) //now we're able to adjust the stackpointer with it's cached address + + EXCEPTION_PROLOG + + mfmsr r4 + ori r4,r4,MSR_FP + mtmsr r4 + isync + + addi r14,sp,0 + + lis r15,__debug_nestlevel@ha + lwz r6,__debug_nestlevel@l(r15) + cmpwi r6,0 + bne nested + + lis sp,__debugstack@h + ori sp,sp,__debugstack@l + lis r0,0 + stwu r0,-16(sp) + +nested: + addi r6,r6,1 + stw r6,__debug_nestlevel@l(r15) + + addi r3,r14,0x08 + bl _cpu_context_save_fp + bl c_debug_handler + + lwz r6,__debug_nestlevel@l(r15) + addi r6,r6,-1 + stw r6,__debug_nestlevel@l(r15) + + addi sp,r14,0 + +exit: + lwz r4,CR_OFFSET(sp) + mtcr r4 + lwz r4,LR_OFFSET(sp) + mtlr r4 + lwz r4,CTR_OFFSET(sp) + mtctr r4 + lwz r4,XER_OFFSET(sp) + mtxer r4 + + EXCEPTION_EPILOG + + mfmsr r4 + rlwinm r4,r4,0,19,17 + mtmsr r4 + isync + + lwz toc,GPR2_OFFSET(sp) + lwz r0,GPR0_OFFSET(sp) + + lwz r4,SRR0_OFFSET(sp) + mtsrr0 r4 + lwz r4,SRR1_OFFSET(sp) + mtsrr1 r4 + + lwz r4,GPR4_OFFSET(sp) + lwz r3,GPR3_OFFSET(sp) + addi sp,sp,EXCEPTION_FRAME_END + rfi + + .globl __set_iabr +__set_iabr: + mfmsr r4 + rlwinm r5,r4,0,18,16 + mtmsr r5 + clrrwi r3,r3,2 + mtspr 1010,r3 + isync + sync + mtmsr r4 + blr + + .globl __enable_iabr +__enable_iabr: + mfmsr r4 + rlwinm r5,r4,0,18,16 + mtmsr r5 + mfspr r3,1010 + ori r3,r3,0x0003 + mtspr 1010,r3 + isync + sync + mtmsr r4 + blr + + .globl __disable_iabr +__disable_iabr: + mfmsr r4 + rlwinm r5,r4,0,18,16 + mtmsr r5 + mfspr r3,1010 + clrrwi r3,r3,2 + mtspr 1010,r3 + isync + sync + mtmsr r4 + blr + + .globl __clr_iabr +__clr_iabr: + mfmsr r4 + rlwinm r5,r4,0,18,16 + mtmsr r5 + mtspr 1010,0 + isync + sync + mtmsr r4 + blr + + .section .bss + + .balign 4 +__debug_nestlevel: + .long 0 + + .balign 8 + .globl __debugstack_end,__debugstack +__debugstack_end: + .space 0x4000 +__debugstack: diff --git a/wii/libogc/libdb/debug_if.h b/wii/libogc/libdb/debug_if.h new file mode 100644 index 0000000000..d739a7cde8 --- /dev/null +++ b/wii/libogc/libdb/debug_if.h @@ -0,0 +1,20 @@ +#ifndef __DEBUG_IF_H__ +#define __DEBUG_IF_H__ + +#include + +#define GDBSTUB_DEVICE_USB 0 +#define GDBSTUB_DEVICE_TCP 1 + +struct dbginterface +{ + s32 fhndl; + + int (*open)(struct dbginterface *device); + int (*close)(struct dbginterface *device); + int (*wait)(struct dbginterface *device); + int (*read)(struct dbginterface *device,void *buffer,int size); + int (*write)(struct dbginterface *devicec,const void *buffer,int size); +}; + +#endif diff --git a/wii/libogc/libdb/debug_supp.c b/wii/libogc/libdb/debug_supp.c new file mode 100644 index 0000000000..dbbc7d0c5f --- /dev/null +++ b/wii/libogc/libdb/debug_supp.c @@ -0,0 +1,477 @@ +#include +#include +#include +#include + +#include "lwp_threads.h" +#include "debug_supp.h" + +extern lwp_objinfo _lwp_cond_objects; +extern lwp_objinfo _lwp_thr_objects; +extern lwp_objinfo _lwp_tqueue_objects; +extern lwp_objinfo _lwp_mqbox_objects; +extern lwp_objinfo _lwp_mutex_objects; +extern lwp_objinfo _lwp_sema_objects; + +extern const u8 hexchars[]; + +extern u8 __text_start[],__data_start[],__bss_start[]; +extern u8 __text_fstart[],__data_fstart[],__bss_fstart[]; + +s32 hstr2nibble(const char *buf,s32 *nibble) +{ + s32 ch; + + ch = *buf; + if(ch>='0' && ch<='9') { + *nibble = ch - '0'; + return 1; + } + if(ch>='a' && ch<='f') { + *nibble = ch - 'a' + 10; + return 1; + } + if(ch>='A' && ch<='F') { + *nibble = ch - 'A' + 10; + return 1; + } + return 0; +} + +s32 hstr2byte(const char *buf,s32 *bval) +{ + s32 hnib,lnib; + + if(!hstr2nibble(buf,&hnib) || !hstr2nibble(buf+1,&lnib)) return 0; + + *bval = (hnib<<4)|lnib; + return 1; +} + +const char* vhstr2int(const char *buf,s32 *ival) +{ + s32 i,val,nibble; + s32 found0,lim; + + found0 = 0; + for(i=0;i<8;i++,buf++) { + if(*buf!='0') break; + + found0 = 1; + } + + val = 0; + lim = 8 - i; + for(i=0;i>shift)&0x0f; + *buf = hexchars[nibble]; + } + return buf; +} + +char* int2vhstr(char *buf,s32 val) +{ + s32 i,nibble,shift; + + for(i=0,shift=28;i<8;i++,shift-=4) { + nibble = (val>>shift)&0x0f; + if(nibble) break; + } + if(i==8) { + *buf++ = '0'; + return buf; + } + + *buf++ = hexchars[nibble]; + for(i++,shift-=4;i<8;i++,shift-=4,buf++) { + nibble = (val>>shift)&0x0f; + *buf = hexchars[nibble]; + } + return buf; +} + +char* mem2hstr(char *buf,const char *mem,s32 count) +{ + s32 i; + char ch; + + for(i=0;i>4]; + *buf++ = hexchars[ch&0x0f]; + } + *buf = 0; + return buf; +} +char* thread2fhstr(char *buf,s32 thread) +{ + s32 i,nibble,shift; + + for(i=0;i<8;i++,buf++) *buf = '0'; + for(i=0,shift=28;i<8;i++,shift-=4,buf++) { + nibble = (thread>>shift)&0x0f; + *buf = hexchars[nibble]; + } + return buf; +} + +char* thread2vhstr(char *buf,s32 thread) +{ + s32 i,nibble,shift; + + for(i=0,shift=28;i<8;i++,shift-=4) { + nibble = (thread>>shift)&0x0f; + if(nibble) break; + } + if(i==8) { + *buf++ = '0'; + return buf; + } + + *buf++ = hexchars[nibble]; + for(i++,shift-=4;i<8;i++,shift-=4,buf++) { + nibble = (thread>>shift)&0x0f; + *buf = hexchars[nibble]; + } + return buf; +} + +const char* fhstr2thread(const char *buf,s32 *thread) +{ + s32 i,nibble,val; + + for(i=0;i<8;i++,buf++) + if(*buf!='0') return NULL; + + val = 0; + for(i=0;i<8;i++,buf++) { + if(!hstr2nibble(buf,&nibble)) return NULL; + + val = (val<<4)|nibble; + } + + *thread = val; + return buf; +} + +const char* vhstr2thread(const char *buf,s32 *thread) +{ + s32 i,val,nibble; + s32 found0,lim; + + found0 = 0; + for(i=0;i<16;i++,buf++) { + if(*buf!='0') break; + + found0 = 1; + } + + val = 0; + lim = 16 - i; + for(i=0;i=min_id && objidobject.id); +} + +s32 gdbstub_getnextthread(s32 athread) +{ + s32 id,start; + s32 first_id,min_id,max_id,lim; + + if(athread<1) return 1; + + first_id = 1; + min_id = _lwp_thr_objects.min_id; + max_id = _lwp_thr_objects.max_id; + lim = first_id + max_id - min_id; + if(athreaddisplay,"idle thread"); + strcpy(info->name,"IDLE"); + info->more_display[0] = 0; + return 1; + } + + first_id = 1; + min_id = _lwp_thr_objects.min_id; + max_id = _lwp_thr_objects.max_id; + if(thread<=(first_id + (max_id - min_id))){ + th = (lwp_cntrl*)_lwp_thr_objects.local_table[thread - first_id]; + if(th==NULL) return 0; + + strcpy(info->display,"libogc task: control at: 0x"); + tmp_buf[0] = hexchars[(((int)th)>>28)&0x0f]; + tmp_buf[1] = hexchars[(((int)th)>>24)&0x0f]; + tmp_buf[2] = hexchars[(((int)th)>>20)&0x0f]; + tmp_buf[3] = hexchars[(((int)th)>>16)&0x0f]; + tmp_buf[4] = hexchars[(((int)th)>>12)&0x0f]; + tmp_buf[5] = hexchars[(((int)th)>>8)&0x0f]; + tmp_buf[6] = hexchars[(((int)th)>>4)&0x0f]; + tmp_buf[7] = hexchars[((int)th)&0x0f]; + tmp_buf[8] = 0; + strcat(info->display,tmp_buf); + + info->name[0] = 0; + info->name[1] = 0; + info->name[2] = 0; + info->name[3] = 0; + info->name[4] = 0; + + info->more_display[0] = 0; + return 1; + } + return 0; +} + +s32 parsezbreak(const char *in,s32 *type,char **addr,u32 *len) +{ + s32 ttmp,atmp,ltmp; + + in++; + if(!hstr2nibble(in,&ttmp) || *(in+1)!=',') return 0; + + in += 2; + in = vhstr2int(in,&atmp); + if(in==NULL || *in!=',') return 0; + + in++; + in = vhstr2int(in,<mp); + if(in==NULL || ltmp<1) return 0; + + *type = ttmp; + *addr = (char*)atmp; + *len = ltmp; + + return 1; +} + +s32 parseqp(const char *in,s32 *mask,s32 *thread) +{ + const char *ptr; + + ptr = fhstr2int(in+2,mask); + if(ptr==NULL) return 0; + + ptr = fhstr2thread(ptr,thread); + if(ptr==NULL) return 0; + + return 1; +} + +void packqq(char *out,s32 mask,s32 thread,struct gdbstub_threadinfo *info) +{ + s32 len; + + *out++ = 'q'; + *out++ = 'Q'; + out = int2fhstr(out,mask); + out = thread2fhstr(out,thread); + + if(mask&0x01) { + memcpy(out,"00000001",8); + out += 8; + *out++ = '1'; + *out++ = '0'; + out = thread2fhstr(out,thread); + } + if(mask&0x02) { + memcpy(out,"00000002",8); + out += 8; + *out++ = '0'; + *out++ = '1'; + *out++ = '1'; + } + if(mask&0x04) { + memcpy(out,"00000004",8); + out += 8; + + info->display[sizeof(info->display)-1] = 0; //for god sake + len = strlen(info->display); + + *out++ = hexchars[(len>>4)&0x0f]; + *out++ = hexchars[len&0x0f]; + + memcpy(out,info->display,len); + out += len; + } + if(mask&0x08) { + memcpy(out,"00000008",8); + out += 8; + + info->display[sizeof(info->name)-1] = 0; //for god sake + len = strlen(info->name); + + *out++ = hexchars[(len>>4)&0x0f]; + *out++ = hexchars[len&0x0f]; + + memcpy(out,info->name,len); + out += len; + } + if(mask&0x10) { + memcpy(out,"00000010",8); + out += 8; + + info->display[sizeof(info->more_display)-1] = 0; //for god sake + len = strlen(info->more_display); + + *out++ = hexchars[(len>>4)&0x0f]; + *out++ = hexchars[len&0x0f]; + + memcpy(out,info->more_display,len); + out += len; + } + *out = 0; +} + +s32 parseql(const char *in,s32 *first,s32 *max_cnt,s32 *athread) +{ + const char *ptr; + + ptr = in+2; + if(!hstr2nibble(ptr,first)) return 0; + + ptr++; + if(!hstr2byte(ptr,max_cnt)) return 0; + + ptr += 2; + ptr = fhstr2thread(ptr,athread); + if(ptr==NULL) return 0; + + return 1; +} + +char* reserve_qmheader(char *out) +{ + return (out+21); +} + +char* packqmthread(char *out,s32 thread) +{ + return thread2fhstr(out,thread); +} + +void packqmheader(char *out,s32 count,s32 done,s32 athread) +{ + *out++ = 'q'; + *out++ = 'M'; + *out++ = hexchars[(count>>4)&0x0f]; + *out++ = hexchars[count&0x0f]; + + if(done) *out++ = '1'; + else *out++ = '0'; + + thread2fhstr(out,athread); +} diff --git a/wii/libogc/libdb/debug_supp.h b/wii/libogc/libdb/debug_supp.h new file mode 100644 index 0000000000..a12e38663c --- /dev/null +++ b/wii/libogc/libdb/debug_supp.h @@ -0,0 +1,32 @@ +#ifndef __DEBUG_SUPP_H__ +#define __DEBUG_SUPP_H__ + +#include + +#define QM_MAXTHREADS (20) + +struct gdbstub_threadinfo { + char display[256]; + char more_display[256]; + char name[256]; +}; + +s32 gdbstub_getcurrentthread(); +s32 hstr2nibble(const char *buf,s32 *nibble); +char* int2vhstr(char *buf,s32 val); +char* mem2hstr(char *buf,const char *mem,s32 count); +char* thread2vhstr(char *buf,s32 thread); +const char* vhstr2thread(const char *buf,s32 *thread); +lwp_cntrl* gdbstub_indextoid(s32 thread); +s32 gdbstub_getoffsets(char **textaddr,char **dataaddr,char **bssaddr); +s32 parsezbreak(const char *in,s32 *type,char **addr,u32 *len); +s32 gdbstub_getthreadinfo(s32 thread,struct gdbstub_threadinfo *info); +s32 parseqp(const char *in,s32 *mask,s32 *thread); +void packqq(char *out,s32 mask,s32 thread,struct gdbstub_threadinfo *info); +char* reserve_qmheader(char *out); +s32 parseql(const char *in,s32 *first,s32 *max_cnt,s32 *athread); +s32 gdbstub_getnextthread(s32 athread); +char* packqmthread(char *out,s32 thread); +void packqmheader(char *out,s32 count,s32 done,s32 athread); + +#endif diff --git a/wii/libogc/libdb/geckousb.c b/wii/libogc/libdb/geckousb.c new file mode 100644 index 0000000000..2e92e2dd79 --- /dev/null +++ b/wii/libogc/libdb/geckousb.c @@ -0,0 +1,198 @@ +#include +#include +#include +#include +#include +#include + +#include "geckousb.h" + +#define _SHIFTL(v, s, w) \ + ((u32) (((u32)(v) & ((0x01 << (w)) - 1)) << (s))) +#define _SHIFTR(v, s, w) \ + ((u32)(((u32)(v) >> (s)) & ((0x01 << (w)) - 1))) + +static struct dbginterface usb_device; + +static __inline__ int __send_command(s32 chn,u16 *cmd) +{ + s32 ret; + + ret = 0; + if(!EXI_Select(chn,EXI_DEVICE_0,EXI_SPEED32MHZ)) ret |= 0x01; + if(!EXI_Imm(chn,cmd,sizeof(u16),EXI_READWRITE,NULL)) ret |= 0x02; + if(!EXI_Sync(chn)) ret |= 0x04; + if(!EXI_Deselect(chn)) ret |= 0x08; + + if(ret) return 0; + return 1; +} + +static int __usb_sendbyte(s32 chn,char ch) +{ + s32 ret; + u16 val; + + val = (0xB000|_SHIFTL(ch,4,8)); + ret = __send_command(chn,&val); + if(ret==1 && !(val&0x0400)) ret = 0; + + return ret; +} + +static int __usb_recvbyte(s32 chn,char *ch) +{ + s32 ret; + u16 val; + + *ch = 0; + val = 0xA000; + ret = __send_command(chn,&val); + if(ret==1 && !(val&0x0800)) ret = 0; + else if(ret==1) *ch = (val&0xff); + + return ret; +} + +static int __usb_checksend(s32 chn) +{ + s32 ret; + u16 val; + + val = 0xC000; + ret = __send_command(chn,&val); + if(ret==1 && !(val&0x0400)) ret = 0; + + return ret; +} + +static int __usb_checkrecv(s32 chn) +{ + s32 ret; + u16 val; + + val = 0xD000; + ret = __send_command(chn,&val); + if(ret==1 && !(val&0x0400)) ret = 0; + + return ret; +} + +static void __usb_flush(s32 chn) +{ + char tmp; + + if(!EXI_Lock(chn,EXI_DEVICE_0,NULL)) return; + + while(__usb_recvbyte(chn,&tmp)); + + EXI_Unlock(chn); +} + + +static int __usb_isgeckoalive(s32 chn) +{ + s32 ret; + u16 val; + + if(!EXI_Lock(chn,EXI_DEVICE_0,NULL)) return 0; + + val = 0x9000; + ret = __send_command(chn,&val); + if(ret==1 && !(val&0x0470)) ret = 0; + + EXI_Unlock(chn); + return ret; +} + +static int __usb_recvbuffer(s32 chn,void *buffer,int size) +{ + s32 ret; + s32 left = size; + char *ptr = (char*)buffer; + + if(!EXI_Lock(chn,EXI_DEVICE_0,NULL)) return 0; + + while(left>0) { + if(__usb_checkrecv(chn)) { + ret = __usb_recvbyte(chn,ptr); + if(ret==0) break; + + ptr++; + left--; + } + } + + EXI_Unlock(chn); + return (size - left); +} + +static int __usb_sendbuffer(s32 chn,const void *buffer,int size) +{ + s32 ret; + s32 left = size; + char *ptr = (char*)buffer; + + if(!EXI_Lock(chn,EXI_DEVICE_0,NULL)) return 0; + + while(left>0) { + if(__usb_checksend(chn)) { + ret = __usb_sendbyte(chn,*ptr); + if(ret==0) break; + + ptr++; + left--; + } + } + + EXI_Unlock(chn); + return (size - left); +} + +static int usbopen(struct dbginterface *device) +{ + if(!__usb_isgeckoalive(device->fhndl)) { + return -1; + } + + return 0; +} + +static int usbclose(struct dbginterface *device) +{ + return 0; +} + +static int usbwait(struct dbginterface *device) +{ + return 0; +} + +static int usbread(struct dbginterface *device,void *buffer,int size) +{ + int ret; + ret = __usb_recvbuffer(device->fhndl,buffer,size); + return ret; +} + +static int usbwrite(struct dbginterface *device,const void *buffer,int size) +{ + int ret; + ret = __usb_sendbuffer(device->fhndl,buffer,size); + return ret; +} + +struct dbginterface* usb_init(s32 channel) +{ + usb_device.fhndl = channel; + if(__usb_isgeckoalive(channel)) + __usb_flush(channel); + + usb_device.open = usbopen; + usb_device.close = usbclose; + usb_device.wait = usbwait; + usb_device.read = usbread; + usb_device.write = usbwrite; + + return &usb_device; +} diff --git a/wii/libogc/libdb/geckousb.h b/wii/libogc/libdb/geckousb.h new file mode 100644 index 0000000000..7e14a42d90 --- /dev/null +++ b/wii/libogc/libdb/geckousb.h @@ -0,0 +1,8 @@ +#ifndef __GECKOUSB_H___ +#define __GECKOUSB_H___ + +#include "debug_if.h" + +struct dbginterface* usb_init(s32 channel); + +#endif diff --git a/wii/libogc/libdb/tcpip.c b/wii/libogc/libdb/tcpip.c new file mode 100644 index 0000000000..66a4889553 --- /dev/null +++ b/wii/libogc/libdb/tcpip.c @@ -0,0 +1,466 @@ +#include +#include +#include + +#include "asm.h" +#include "processor.h" + +#include "uIP/bba.h" +#include "uIP/memr.h" +#include "uIP/memb.h" +#include "uIP/uip_ip.h" +#include "uIP/uip_arp.h" +#include "uIP/uip_tcp.h" +#include "uIP/uip_pbuf.h" +#include "uIP/uip_netif.h" + +#include "tcpip.h" +#include "debug_if.h" + +#if UIP_LOGGING == 1 +#include +#define UIP_LOG(m) uip_log(__FILE__,__LINE__,m) +#else +#define UIP_LOG(m) +#endif /* UIP_LOGGING == 1 */ + +#if UIP_STATISTICS == 1 +struct uip_stats uip_stat; +#define UIP_STAT(s) s +#else +#define UIP_STAT(s) +#endif /* UIP_STATISTICS == 1 */ + +const char *tcp_localip __attribute__ ((weak)) = ""; +const char *tcp_netmask __attribute__ ((weak)) = ""; +const char *tcp_gateway __attribute__ ((weak)) = ""; + +struct tcpip_sock { + struct tcpip_sock *next; + struct uip_tcp_pcb *pcb; + struct uip_pbuf *lastdata; + s32 lastoffset,recvevt,sendevt,flags; + s32 err,socket; +} tcpip_socks[UIP_TCPIP_SOCKS]; + +static s64 tcpip_time = 0; +static s32 listensock = -1; +static struct uip_netif netif; +static struct dbginterface netif_device; +static struct tcpip_sock *tcpip_accepted_sockets = NULL; + +extern s64 gettime(); +extern u32 diff_msec(s64 start,s64 end); + +static s32_t tcpip_allocsocket(struct uip_tcp_pcb *pcb) +{ + s32_t i; + + for(i=0;i=UIP_TCPIP_SOCKS) return NULL; + + sock = &tcpip_socks[s]; + if(!sock->pcb) return NULL; + + return sock; +} + +//device callbacks +static int opentcpip(struct dbginterface *device) +{ + if(listensock>=0 && (device->fhndl<0 )) + device->fhndl = tcpip_accept(listensock); + + if(device->fhndl<0) + return -1; + else + tcpip_starttimer(device->fhndl); + + return 0; +} + +static int closetcpip(struct dbginterface *device) +{ + tcpip_stoptimer(device->fhndl); + tcpip_close(device->fhndl); + device->fhndl = -1; + return 0; +} + +static int waittcpip(struct dbginterface *device) +{ + tcpip_stoptimer(device->fhndl); + return 0; +} + +static int readtcpip(struct dbginterface *device,void *buffer,int size) +{ + if(device->fhndl>=0) + return tcpip_read(device->fhndl,buffer,size); + + return 0; +} + +static int writetcpip(struct dbginterface *device,const void *buffer,int size) +{ + if(device->fhndl>=0) + return tcpip_write(device->fhndl,buffer,size); + + return 0; +} + +static void tcpip_err(void *arg,s8_t err) +{ +// printf("tcpip_err: err_code(%d)\n",err); +} + +static s8_t tcpip_poll(void *arg,struct uip_tcp_pcb *pcb) +{ + UIP_LOG("tcpip_poll()"); + return UIP_ERR_OK; +} + +static s8_t tcpip_sent(void *arg,struct uip_tcp_pcb *pcb,u16_t space) +{ +// printf("tcpip_sent(%d)\n",space); + return UIP_ERR_OK; +} + +//static u32 qcnt = 0; + +static s8_t tcpip_recved(void *arg,struct uip_tcp_pcb *pcb,struct uip_pbuf *p,s8_t err) +{ + u16_t len; + struct tcpip_sock *sock = (struct tcpip_sock*)arg; + + //printf("tcpip_recved(%s (%d/%d))\n",(u8_t*)p->payload,p->len,p->tot_len); + if(!sock) { + uip_pbuf_free(p); + return UIP_ERR_VAL; + } + + if(p) { + len = p->tot_len; + if(sock->lastdata==NULL) { + sock->lastdata = p; + } else { +/* + qcnt++; + printf("tcpip_recved(queuing %d)\n",qcnt); +*/ + uip_pbuf_queue(sock->lastdata,p); + } + } else + len = 1; + + uip_tcp_recved(pcb,len); + return UIP_ERR_OK; +} + + +static s8_t tcpip_accept_func(void *arg,struct uip_tcp_pcb *newpcb,s8_t err) +{ + s32_t s; + struct tcpip_sock *ptr,*newsock = NULL; + struct tcpip_sock *sock = (struct tcpip_sock*)arg; + + UIP_LOG("tcpip_accept_func()"); + if(!sock) return UIP_ERR_ABRT; + + s = tcpip_allocsocket(newpcb); + if(s<0) { + uip_tcp_close(newpcb); + return UIP_ERR_ABRT; + } + + newsock = tcpip_getsocket(s); + newsock->pcb->flags |= UIP_TF_NODELAY; + + ptr = tcpip_accepted_sockets; + while(ptr && ptr->next) ptr = ptr->next; + if(!ptr) tcpip_accepted_sockets = newsock; + else ptr->next = newsock; + + uip_tcp_arg(newpcb,newsock); + uip_tcp_recv(newpcb,tcpip_recved); + uip_tcp_sent(newpcb,tcpip_sent); + uip_tcp_err(newpcb,tcpip_err); + uip_tcp_poll(newpcb,tcpip_poll,4); + + return UIP_ERR_OK; +} + +static void __tcpip_poll() +{ + u32 diff; + s64 now; + + if(uip_netif_default==NULL) return; + + uip_bba_poll(uip_netif_default); + + if(tcpip_time && (uip_tcp_active_pcbs || uip_tcp_tw_pcbs)) { + now = gettime(); + diff = diff_msec(tcpip_time,now); + if(diff>=UIP_TCP_TMR_INTERVAL) { + uip_tcp_tmr(); + tcpip_time = gettime(); + } + } else + tcpip_time = 0; +} + +void tcpip_tmr_needed() +{ + if(!tcpip_time && (uip_tcp_active_pcbs || uip_tcp_tw_pcbs)) { + tcpip_time = gettime(); + } +} + +struct dbginterface* tcpip_init(struct uip_ip_addr *localip,struct uip_ip_addr *netmask,struct uip_ip_addr *gateway,u16 port) +{ + uipdev_s hbba; + struct uip_netif *pnet ; + struct sockaddr_in name; + socklen_t namelen = sizeof(struct sockaddr); + + memr_init(); + uip_ipinit(); + uip_pbuf_init(); + uip_netif_init(); + uip_tcp_init(); + + UIP_MEMSET(tcpip_socks,0,(UIP_TCPIP_SOCKS*sizeof(struct tcpip_sock))); + + hbba = uip_bba_create(&netif); + pnet = uip_netif_add(&netif,localip,netmask,gateway,hbba,uip_bba_init,uip_ipinput); + if(pnet) { + uip_netif_setdefault(pnet); + + listensock = tcpip_socket(); + if(listensock<0) return NULL; + + name.sin_addr.s_addr = INADDR_ANY; + name.sin_port = htons(port); + name.sin_family = AF_INET; + + if(tcpip_bind(listensock,(struct sockaddr*)&name,&namelen)<0){ + tcpip_close(listensock); + listensock = -1; + return NULL; + } + if(tcpip_listen(listensock,1)<0) { + tcpip_close(listensock); + listensock = -1; + return NULL; + } + + netif_device.fhndl = -1; + netif_device.wait = waittcpip; + netif_device.open = opentcpip; + netif_device.close = closetcpip; + netif_device.read = readtcpip; + netif_device.write = writetcpip; + + return &netif_device; + } + return NULL; +} + +s32_t tcpip_socket() +{ + s32_t s; + struct tcpip_sock *sock; + struct uip_tcp_pcb *pcb; + + pcb = uip_tcp_new(); + if(!pcb) return -1; + + s = tcpip_allocsocket(pcb); + if(s<0) { + uip_tcp_close(pcb); + return -1; + } + + sock = tcpip_getsocket(s); + uip_tcp_arg(pcb,sock); + + return s; +} + +s32_t tcpip_bind(s32_t s,struct sockaddr *name,socklen_t *namelen) +{ + struct tcpip_sock *sock; + struct uip_ip_addr local_ip; + u16_t local_port; + s8_t err; + + sock = tcpip_getsocket(s); + if(!sock) return -1; + + local_ip.addr = ((struct sockaddr_in*)name)->sin_addr.s_addr; + local_port = ((struct sockaddr_in*)name)->sin_port; + + err = uip_tcp_bind(sock->pcb,&local_ip,local_port); + + return (s32_t)err; +} + +s32_t tcpip_listen(s32_t s,u32_t backlog) +{ + struct tcpip_sock *sock; + + sock = tcpip_getsocket(s); + if(!sock) return -1; + + sock->pcb = uip_tcp_listen(sock->pcb); + if(sock->pcb==NULL) return -1; + + uip_tcp_accept(sock->pcb,tcpip_accept_func); + + return 0; +} + +s32_t tcpip_accept(s32_t s) +{ + s32_t newsock = -1; + struct tcpip_sock *sock; + + sock = tcpip_getsocket(s); + if(sock==NULL) return -1; + + do { + __tcpip_poll(); + } while(!tcpip_accepted_sockets); + + newsock = tcpip_accepted_sockets->socket; + tcpip_accepted_sockets = tcpip_accepted_sockets->next; + + return newsock; +} + +s32_t tcpip_read(s32_t s,void *buffer,u32_t len) +{ + u32_t off,copy; + u8_t *ptr; + struct uip_pbuf *p; + struct tcpip_sock *sock; + + sock = tcpip_getsocket(s); + if(!sock) return -1; + + do { + __tcpip_poll(); + } while(sock->lastdata==NULL); + + if(sock->lastdata) { + off = 0; + ptr = buffer; + while(len>0 && sock->lastdata) { + p = sock->lastdata; + + if(len>p->len-sock->lastoffset) copy = (p->len-sock->lastoffset); + else copy = len; + + UIP_MEMCPY(ptr+off,(u8_t*)p->payload+sock->lastoffset,copy); + + off += copy; + len -= copy; + sock->lastoffset += copy; + + if(sock->lastoffset>=p->len) { + sock->lastoffset = 0; + sock->lastdata = uip_pbuf_dequeue(p); + uip_pbuf_free(p); +/* + if(qcnt>0) { + printf("tcpip_read(dequeuing %d)\n",--qcnt); + } +*/ + } + } + return off; + } + return -1; +} + +s32_t tcpip_write(s32_t s,const void *buffer,u32_t len) +{ + s8_t err; + u16_t snd_buf,copy; + struct tcpip_sock *sock; + + sock = tcpip_getsocket(s); + if(!sock) return -1; + +// printf("tcpip_write()\n"); + while(len>0) { + do { + __tcpip_poll(); + } while((snd_buf=uip_tcp_sndbuf(sock->pcb))==0); + + if(len>snd_buf) copy = snd_buf; + else copy = len; + + err = uip_tcp_write(sock->pcb,buffer,copy,1); + if(err==UIP_ERR_OK && (!sock->pcb->unacked || sock->pcb->flags&UIP_TF_NODELAY || sock->pcb->snd_queuelen>1)) + uip_tcpoutput(sock->pcb); + + buffer = buffer+copy; + len -= copy; + } + return UIP_ERR_OK; +} + +void tcpip_close(s32_t s) +{ + struct tcpip_sock *sock; + + sock = tcpip_getsocket(s); + if(sock==NULL) return; + + uip_tcp_close(sock->pcb); + sock->pcb = NULL; +} + +// does basically only stop the tcpip timer +void tcpip_stoptimer(s32_t s) +{ + struct tcpip_sock *sock; + + sock = tcpip_getsocket(s); + if(!sock) return; + + if(tcpip_time && sock->pcb && (uip_tcp_active_pcbs || uip_tcp_tw_pcbs)) tcpip_time = 0; +} + +// does basically only restart the tcpip timer +void tcpip_starttimer(s32_t s) +{ + struct tcpip_sock *sock; + + sock = tcpip_getsocket(s); + if(!sock) return; + + if(tcpip_time==0 && sock->pcb && (uip_tcp_active_pcbs || uip_tcp_tw_pcbs)) tcpip_time = gettime(); +} + diff --git a/wii/libogc/libdb/tcpip.h b/wii/libogc/libdb/tcpip.h new file mode 100644 index 0000000000..99f9db73e2 --- /dev/null +++ b/wii/libogc/libdb/tcpip.h @@ -0,0 +1,53 @@ +#ifndef __TCPIP_H__ +#define __TCPIP_H__ + +#include "uIP/uip.h" +#include +#include + +#define AF_UNSPEC 0 +#define AF_INET 2 +#define PF_INET AF_INET +#define PF_UNSPEC AF_UNSPEC + +#define INADDR_ANY 0 +#define INADDR_BROADCAST 0xffffffff + +#ifndef socklen_t +#define socklen_t u32_t +#endif + +#ifndef HAVE_IN_ADDR +#define HAVE_IN_ADDR +struct in_addr { + u32 s_addr; +}; +#endif + +struct sockaddr_in { + u8 sin_len; + u8 sin_family; + u16 sin_port; + struct in_addr sin_addr; + s8 sin_zero[8]; +}; + +struct sockaddr { + u8 sa_len; + u8 sa_family; + s8 sa_data[14]; +}; + +struct dbginterface* tcpip_init(struct uip_ip_addr *localip,struct uip_ip_addr *netmask,struct uip_ip_addr *gateway,u16 port); + +void tcpip_close(s32_t s); +void tcpip_starttimer(s32_t s); +void tcpip_stoptimer(s32_t s); +s32_t tcpip_socket(); +s32_t tcpip_listen(s32_t s,u32_t backlog); +s32_t tcpip_bind(s32_t s,struct sockaddr *name,socklen_t *namelen); +s32_t tcpip_accept(s32_t s); +s32_t tcpip_read(s32_t s,void *buffer,u32_t len); +s32_t tcpip_write(s32_t s,const void *buffer,u32_t len); + +#endif diff --git a/wii/libogc/libdb/uIP/bba.c b/wii/libogc/libdb/uIP/bba.c new file mode 100644 index 0000000000..0e6075ecf8 --- /dev/null +++ b/wii/libogc/libdb/uIP/bba.c @@ -0,0 +1,835 @@ +#include +#include +#include +#include "asm.h" +#include "processor.h" +#include "exi.h" +#include "cache.h" +#include "bba.h" +#include "uip_pbuf.h" +#include "uip_netif.h" +#include "uip_arp.h" + +#define IFNAME0 'e' +#define IFNAME1 't' + +#define BBA_MINPKTSIZE 60 + +#define BBA_CID 0x04020200 + +#define BBA_CMD_IRMASKALL 0x00 +#define BBA_CMD_IRMASKNONE 0xF8 + +#define BBA_NCRA 0x00 /* Network Control Register A, RW */ +#define BBA_NCRA_RESET (1<<0) /* RESET */ +#define BBA_NCRA_ST0 (1<<1) /* ST0, Start transmit command/status */ +#define BBA_NCRA_ST1 (1<<2) /* ST1, " */ +#define BBA_NCRA_SR (1<<3) /* SR, Start Receive */ + +#define BBA_NCRB 0x01 /* Network Control Register B, RW */ +#define BBA_NCRB_PR (1<<0) /* PR, Promiscuous Mode */ +#define BBA_NCRB_CA (1<<1) /* CA, Capture Effect Mode */ +#define BBA_NCRB_PM (1<<2) /* PM, Pass Multicast */ +#define BBA_NCRB_PB (1<<3) /* PB, Pass Bad Frame */ +#define BBA_NCRB_AB (1<<4) /* AB, Accept Broadcast */ +#define BBA_NCRB_HBD (1<<5) /* HBD, reserved */ +#define BBA_NCRB_RXINTC0 (1<<6) /* RXINTC, Receive Interrupt Counter */ +#define BBA_NCRB_RXINTC1 (1<<7) /* " */ +#define BBA_NCRB_1_PACKET_PER_INT (0<<6) /* 0 0 */ +#define BBA_NCRB_2_PACKETS_PER_INT (1<<6) /* 0 1 */ +#define BBA_NCRB_4_PACKETS_PER_INT (2<<6) /* 1 0 */ +#define BBA_NCRB_8_PACKETS_PER_INT (3<<6) /* 1 1 */ + +#define BBA_LTPS 0x04 /* Last Transmitted Packet Status, RO */ +#define BBA_LRPS 0x05 /* Last Received Packet Status, RO */ + +#define BBA_IMR 0x08 /* Interrupt Mask Register, RW, 00h */ +#define BBA_IMR_FRAGIM (1<<0) /* FRAGIM, Fragment Counter Int Mask */ +#define BBA_IMR_RIM (1<<1) /* RIM, Receive Interrupt Mask */ +#define BBA_IMR_TIM (1<<2) /* TIM, Transmit Interrupt Mask */ +#define BBA_IMR_REIM (1<<3) /* REIM, Receive Error Interrupt Mask */ +#define BBA_IMR_TEIM (1<<4) /* TEIM, Transmit Error Interrupt Mask */ +#define BBA_IMR_FIFOEIM (1<<5) /* FIFOEIM, FIFO Error Interrupt Mask */ +#define BBA_IMR_BUSEIM (1<<6) /* BUSEIM, BUS Error Interrupt Mask */ +#define BBA_IMR_RBFIM (1<<7) /* RBFIM, RX Buffer Full Interrupt Mask */ + +#define BBA_IR 0x09 /* Interrupt Register, RW, 00h */ +#define BBA_IR_FRAGI (1<<0) /* FRAGI, Fragment Counter Interrupt */ +#define BBA_IR_RI (1<<1) /* RI, Receive Interrupt */ +#define BBA_IR_TI (1<<2) /* TI, Transmit Interrupt */ +#define BBA_IR_REI (1<<3) /* REI, Receive Error Interrupt */ +#define BBA_IR_TEI (1<<4) /* TEI, Transmit Error Interrupt */ +#define BBA_IR_FIFOEI (1<<5) /* FIFOEI, FIFO Error Interrupt */ +#define BBA_IR_BUSEI (1<<6) /* BUSEI, BUS Error Interrupt */ +#define BBA_IR_RBFI (1<<7) /* RBFI, RX Buffer Full Interrupt */ + +#define BBA_BP 0x0a/*+0x0b*/ /* Boundary Page Pointer Register */ +#define BBA_TLBP 0x0c/*+0x0d*/ /* TX Low Boundary Page Pointer Register */ +#define BBA_TWP 0x0e/*+0x0f*/ /* Transmit Buffer Write Page Pointer Register */ +#define BBA_TRP 0x12/*+0x13*/ /* Transmit Buffer Read Page Pointer Register */ +#define BBA_RWP 0x16/*+0x17*/ /* Receive Buffer Write Page Pointer Register */ +#define BBA_RRP 0x18/*+0x19*/ /* Receive Buffer Read Page Pointer Register */ +#define BBA_RHBP 0x1a/*+0x1b*/ /* Receive High Boundary Page Pointer Register */ + +#define BBA_RXINTT 0x14/*+0x15*/ /* Receive Interrupt Timer Register */ + +#define BBA_NAFR_PAR0 0x20 /* Physical Address Register Byte 0 */ +#define BBA_NAFR_PAR1 0x21 /* Physical Address Register Byte 1 */ +#define BBA_NAFR_PAR2 0x22 /* Physical Address Register Byte 2 */ +#define BBA_NAFR_PAR3 0x23 /* Physical Address Register Byte 3 */ +#define BBA_NAFR_PAR4 0x24 /* Physical Address Register Byte 4 */ +#define BBA_NAFR_PAR5 0x25 /* Physical Address Register Byte 5 */ + +#define BBA_NWAYC 0x30 /* NWAY Configuration Register, RW, 84h */ +#define BBA_NWAYC_FD (1<<0) /* FD, Full Duplex Mode */ +#define BBA_NWAYC_PS100 (1<<1) /* PS100/10, Port Select 100/10 */ +#define BBA_NWAYC_ANE (1<<2) /* ANE, Autonegotiation Enable */ +#define BBA_NWAYC_ANS_RA (1<<3) /* ANS, Restart Autonegotiation */ +#define BBA_NWAYC_LTE (1<<7) /* LTE, Link Test Enable */ + +#define BBA_NWAYS 0x31 +#define BBA_NWAYS_LS10 (1<<0) +#define BBA_NWAYS_LS100 (1<<1) +#define BBA_NWAYS_LPNWAY (1<<2) +#define BBA_NWAYS_ANCLPT (1<<3) +#define BBA_NWAYS_100TXF (1<<4) +#define BBA_NWAYS_100TXH (1<<5) +#define BBA_NWAYS_10TXF (1<<6) +#define BBA_NWAYS_10TXH (1<<7) + +#define BBA_GCA 0x32 /* GMAC Configuration A Register, RW, 00h */ +#define BBA_GCA_ARXERRB (1<<3) /* ARXERRB, Accept RX packet with error */ + +#define BBA_MISC 0x3d /* MISC Control Register 1, RW, 3ch */ +#define BBA_MISC_BURSTDMA (1<<0) +#define BBA_MISC_DISLDMA (1<<1) + +#define BBA_TXFIFOCNT 0x3e/*0x3f*/ /* Transmit FIFO Counter Register */ +#define BBA_WRTXFIFOD 0x48/*-0x4b*/ /* Write TX FIFO Data Port Register */ + +#define BBA_MISC2 0x50 /* MISC Control Register 2, RW, 00h */ +#define BBA_MISC2_HBRLEN0 (1<<0) /* HBRLEN, Host Burst Read Length */ +#define BBA_MISC2_HBRLEN1 (1<<1) /* " */ +#define BBA_MISC2_RUNTSIZE (1<<2) /* " */ +#define BBA_MISC2_DREQBCTRL (1<<3) /* " */ +#define BBA_MISC2_RINTSEL (1<<4) /* " */ +#define BBA_MISC2_ITPSEL (3<<5) /* " */ +#define BBA_MISC2_AUTORCVR (1<<7) /* Auto RX Full Recovery */ + +#define BBA_RX_STATUS_BF (1<<0) +#define BBA_RX_STATUS_CRC (1<<1) +#define BBA_RX_STATUS_FAE (1<<2) +#define BBA_RX_STATUS_FO (1<<3) +#define BBA_RX_STATUS_RW (1<<4) +#define BBA_RX_STATUS_MF (1<<5) +#define BBA_RX_STATUS_RF (1<<6) +#define BBA_RX_STATUS_RERR (1<<7) + +#define BBA_TX_STATUS_CC0 (1<<0) +#define BBA_TX_STATUS_CC1 (1<<1) +#define BBA_TX_STATUS_CC2 (1<<2) +#define BBA_TX_STATUS_CC3 (1<<3) +#define BBA_TX_STATUS_CCMASK (0x0f) +#define BBA_TX_STATUS_CRSLOST (1<<4) +#define BBA_TX_STATUS_UF (1<<5) +#define BBA_TX_STATUS_OWC (1<<6) +#define BBA_TX_STATUS_OWN (1<<7) +#define BBA_TX_STATUS_TERR (1<<7) + +#define BBA_TX_MAX_PACKET_SIZE 1518 /* 14+1500+4 */ +#define BBA_RX_MAX_PACKET_SIZE 1536 /* 6 pages * 256 bytes */ + +#define BBA_INIT_TLBP 0x00 +#define BBA_INIT_BP 0x01 +#define BBA_INIT_RHBP 0x0f +#define BBA_INIT_RWP BBA_INIT_BP +#define BBA_INIT_RRP BBA_INIT_BP + +#define BBA_NAPI_WEIGHT 16 + +#define RX_BUFFERS 16 + +#define cpu_to_be16(x) (x) +#define cpu_to_be32(x) (x) +static inline u16 cpu_to_le16(u16 x) { return (x<<8) | (x>>8);} +static inline u32 cpu_to_le32(u32 x) { return((x>>24) | ((x>>8)&0xff00) | ((x<<8)&0xff0000) | (x<<24));} + +#define cpu_to_le16p(addr) (cpu_to_le16(*(addr))) +#define cpu_to_le32p(addr) (cpu_to_le32(*(addr))) +#define cpu_to_be16p(addr) (cpu_to_be16(*(addr))) +#define cpu_to_be32p(addr) (cpu_to_be32(*(addr))) + +static inline void cpu_to_le16s(u16 *a) {*a = cpu_to_le16(*a);} +static inline void cpu_to_le32s(u32 *a) {*a = cpu_to_le32(*a);} +static inline void cpu_to_be16s(u16 *a) {*a = cpu_to_be16(*a);} +static inline void cpu_to_be32s(u32 *a) {*a = cpu_to_be32(*a);} + +#define le16_to_cpup(x) cpu_to_le16p(x) +#define le32_to_cpup(x) cpu_to_le32p(x) +#define be16_to_cpup(x) cpu_to_be16p(x) +#define be32_to_cpup(x) cpu_to_be32p(x) + +#define le16_to_cpus(x) cpu_to_le16s(x) +#define le32_to_cpus(x) cpu_to_le32s(x) +#define be16_to_cpus(x) cpu_to_be16s(x) +#define be32_to_cpus(x) cpu_to_be32s(x) + +struct bba_priv { + u8 revid; + u16 devid; + u8 acstart; + s8_t state; + struct uip_eth_addr *ethaddr; +}; + +#define X(a,b) b,a +struct bba_descr { + u32 X(X(next_packet_ptr:12, packet_len:12), status:8); +} __attribute((packed)); + +#define _SHIFTL(v, s, w) \ + ((u32) (((u32)(v) & ((0x01 << (w)) - 1)) << (s))) +#define _SHIFTR(v, s, w) \ + ((u32)(((u32)(v) >> (s)) & ((0x01 << (w)) - 1))) + +/* new functions */ +#define bba_select() EXI_Select(EXI_CHANNEL_0,EXI_DEVICE_2,EXI_SPEED32MHZ) +#define bba_deselect() EXI_Deselect(EXI_CHANNEL_0) + +#define bba_in12(reg) ((bba_in8(reg)&0xff)|((bba_in8((reg)+1)&0x0f)<<8)) +#define bba_out12(reg,val) do { \ + bba_out8((reg),(val)&0xff); \ + bba_out8((reg)+1,((val)&0x0f00)>>8); \ + } while(0) + +#if UIP_LOGGING == 1 +#include +#define UIP_LOG(m) uip_log(__FILE__,__LINE__,m) +#else +#define UIP_LOG(m) +#endif /* UIP_LOGGING == 1 */ + +#if UIP_STATISTICS == 1 +struct uip_stats uip_stat; +#define UIP_STAT(s) s +#else +#define UIP_STAT(s) +#endif /* UIP_STATISTICS == 1 */ + +static s64 bba_arp_tmr = 0; + +static struct uip_pbuf *bba_recv_pbufs = NULL; +static struct uip_netif *bba_netif = NULL; +static struct bba_priv bba_device; +static struct bba_descr cur_descr; + +static void bba_cmd_ins(u32 reg,void *val,u32 len); +static void bba_cmd_outs(u32 reg,void *val,u32 len); +static void bba_ins(u32 reg,void *val,u32 len); +static void bba_outs(u32 reg,void *val,u32 len); + +static void bba_devpoll(u16 *pstatus); + +extern void udelay(int us); +extern u32 diff_msec(long long start,long long end); +extern u32 diff_usec(long long start,long long end); +extern long long gettime(); + +static __inline__ void bba_cmd_insnosel(u32 reg,void *val,u32 len) +{ + u16 req; + req = reg<<8; + EXI_Imm(EXI_CHANNEL_0,&req,sizeof(req),EXI_WRITE,NULL); + EXI_Sync(EXI_CHANNEL_0); + EXI_ImmEx(EXI_CHANNEL_0,val,len,EXI_READ); +} + +static void bba_cmd_ins(u32 reg,void *val,u32 len) +{ + bba_select(); + bba_cmd_insnosel(reg,val,len); + bba_deselect(); +} + +static __inline__ void bba_cmd_outsnosel(u32 reg,void *val,u32 len) +{ + u16 req; + req = (reg<<8)|0x4000; + EXI_Imm(EXI_CHANNEL_0,&req,sizeof(req),EXI_WRITE,NULL); + EXI_Sync(EXI_CHANNEL_0); + EXI_ImmEx(EXI_CHANNEL_0,val,len,EXI_WRITE); +} + +static void bba_cmd_outs(u32 reg,void *val,u32 len) +{ + bba_select(); + bba_cmd_outsnosel(reg,val,len); + bba_deselect(); +} + +static inline u8 bba_cmd_in8(u32 reg) +{ + u8 val; + bba_cmd_ins(reg,&val,sizeof(val)); + return val; +} + +static inline u8 bba_cmd_in8_slow(u32 reg) +{ + u8 val; + bba_select(); + bba_cmd_insnosel(reg,&val,sizeof(val)); + udelay(200); //usleep doesn't work on this amount, decrementer is based on 10ms, wait is 200us + bba_deselect(); + return val; +} + +static inline void bba_cmd_out8(u32 reg,u8 val) +{ + bba_cmd_outs(reg,&val,sizeof(val)); +} + +static inline u8 bba_in8(u32 reg) +{ + u8 val; + bba_ins(reg,&val,sizeof(val)); + return val; +} + +static inline void bba_out8(u32 reg,u8 val) +{ + bba_outs(reg,&val,sizeof(val)); +} + +static inline void bba_insnosel(u32 reg,void *val,u32 len) +{ + u32 req; + req = (reg<<8)|0x80000000; + EXI_Imm(EXI_CHANNEL_0,&req,sizeof(req),EXI_WRITE,NULL); + EXI_Sync(EXI_CHANNEL_0); + EXI_ImmEx(EXI_CHANNEL_0,val,len,EXI_READ); +} + +static void bba_ins(u32 reg,void *val,u32 len) +{ + bba_select(); + bba_insnosel(reg,val,len); + bba_deselect(); +} + +static inline void bba_outsnoselect(u32 reg,void *val,u32 len) +{ + u32 req; + req = (reg<<8)|0xC0000000; + EXI_Imm(EXI_CHANNEL_0,&req,sizeof(req),EXI_WRITE,NULL); + EXI_Sync(EXI_CHANNEL_0); + EXI_ImmEx(EXI_CHANNEL_0,val,len,EXI_WRITE); +} + +static void bba_outs(u32 reg,void *val,u32 len) +{ + bba_select(); + bba_outsnoselect(reg,val,len); + bba_deselect(); +} + +static inline void bba_insregister(u32 reg) +{ + u32 req; + req = (reg<<8)|0x80000000; + EXI_Imm(EXI_CHANNEL_0,&req,sizeof(req),EXI_WRITE,NULL); + EXI_Sync(EXI_CHANNEL_0); +} + +static inline void bba_insdata(void *val,u32 len) +{ + EXI_ImmEx(EXI_CHANNEL_0,val,len,EXI_READ); +} + + +static inline void bba_outsregister(u32 reg) +{ + u32 req; + req = (reg<<8)|0xC0000000; + EXI_Imm(EXI_CHANNEL_0,&req,sizeof(req),EXI_WRITE,NULL); + EXI_Sync(EXI_CHANNEL_0); +} + +static inline void bba_outsdata(void *val,u32 len) +{ + EXI_ImmEx(EXI_CHANNEL_0,val,len,EXI_WRITE); +} + +static __inline__ u32 __linkstate() +{ + u8 nways = 0; + + nways = bba_in8(BBA_NWAYS); + if(nways&BBA_NWAYS_LS10 || nways&BBA_NWAYS_LS100) return 1; + return 0; +} + +static u32 __bba_getlink_state_async() +{ + u32 ret; + + + if(EXI_Lock(EXI_CHANNEL_0,EXI_DEVICE_2,NULL)==0) return 0; + ret = __linkstate(); + EXI_Unlock(EXI_CHANNEL_0); + return ret; +} + + +static u32 __bba_read_cid() +{ + u16 cmd = 0; + u32 cid = 0; + + bba_select(); + EXI_Imm(EXI_CHANNEL_0,&cmd,2,EXI_WRITE,NULL); + EXI_Sync(EXI_CHANNEL_0); + EXI_Imm(EXI_CHANNEL_0,&cid,4,EXI_READ,NULL); + EXI_Sync(EXI_CHANNEL_0); + bba_deselect(); + + return cid; +} +static void __bba_reset() +{ + bba_out8(0x60,0x00); + udelay(10000); + bba_cmd_in8_slow(0x0F); + udelay(10000); + bba_out8(BBA_NCRA,BBA_NCRA_RESET); + bba_out8(BBA_NCRA,0x00); +} + +static void __bba_recv_init() +{ + bba_out8(BBA_NCRB,(BBA_NCRB_CA|BBA_NCRB_AB)); + bba_out8(BBA_MISC2,(BBA_MISC2_AUTORCVR)); + + bba_out12(BBA_TLBP, BBA_INIT_TLBP); + bba_out12(BBA_BP,BBA_INIT_BP); + bba_out12(BBA_RWP,BBA_INIT_RWP); + bba_out12(BBA_RRP,BBA_INIT_RRP); + bba_out12(BBA_RHBP,BBA_INIT_RHBP); + + bba_out8(BBA_GCA,BBA_GCA_ARXERRB); + bba_out8(BBA_NCRA,BBA_NCRA_SR); +} + +static void bba_process(struct uip_pbuf *p,struct uip_netif *dev) +{ + struct uip_eth_hdr *ethhdr = NULL; + struct bba_priv *priv = (struct bba_priv*)dev->state; + const s32 ethhlen = sizeof(struct uip_eth_hdr); + + if(p) { + ethhdr = p->payload; + switch(htons(ethhdr->type)) { + case UIP_ETHTYPE_IP: + uip_arp_ipin(dev,p); + uip_pbuf_header(p,-(ethhlen)); + dev->input(p,dev); + break; + case UIP_ETHTYPE_ARP: + uip_arp_arpin(dev,priv->ethaddr,p); + break; + default: + uip_pbuf_free(p); + break; + } + } +} + +static s8_t bba_start_rx(struct uip_netif *dev,u32 budget) +{ + s32 size; + u16 top,pos,rwp,rrp; + u32 pkt_status,recvd; + struct uip_pbuf *p,*q; + + UIP_LOG("bba_start_rx()\n"); + + recvd = 0; + rwp = bba_in12(BBA_RWP); + rrp = bba_in12(BBA_RRP); + while(recvd(BBA_RX_MAX_PACKET_SIZE+4)) { + UIP_LOG("bba_start_rx: packet dropped due to big buffer.\n"); + continue; + } + + if(pkt_status&(BBA_RX_STATUS_RERR|BBA_RX_STATUS_FAE)) { + UIP_LOG("bba_start_rx: packet dropped due to receive errors.\n"); + rwp = bba_in12(BBA_RWP); + rrp = bba_in12(BBA_RRP); + continue; + } + + pos = (rrp<<8)+4; + top = (BBA_INIT_RHBP+1)<<8; + + p = uip_pbuf_alloc(UIP_PBUF_RAW,size,UIP_PBUF_POOL); + if(p) { + for(q=p;q!=NULL;q=q->next) { + bba_select(); + bba_insregister(pos); + if((pos+size)payload,size); + } else { + s32 chunk = top-pos; + + size -= chunk; + pos = BBA_INIT_RRP<<8; + bba_insdata(q->payload,chunk); + bba_deselect(); + + bba_select(); + bba_insregister(pos); + bba_insdata(q->payload+chunk,size); + } + bba_deselect(); + pos += size; + } + + EXI_Unlock(EXI_CHANNEL_0); + bba_process(p,dev); + EXI_Lock(EXI_CHANNEL_0,EXI_DEVICE_2,NULL); + } else + break; + + recvd++; + + bba_out12(BBA_RRP,(rrp=cur_descr.next_packet_ptr)); + rwp = bba_in12(BBA_RWP); + } + return UIP_ERR_OK; +} + +static inline void bba_interrupt(u16 *pstatus) +{ + u8 ir,imr,status; + + ir = bba_in8(BBA_IR); + imr = bba_in8(BBA_IMR); + status = ir&imr; + + if(status&BBA_IR_FRAGI) { + bba_out8(BBA_IR,BBA_IR_FRAGI); + } + if(status&BBA_IR_RI) { + bba_start_rx(bba_netif,0x10); + bba_out8(BBA_IR,BBA_IR_RI); + } + if(status&BBA_IR_REI) { + bba_out8(BBA_IR,BBA_IR_REI); + } + if(status&BBA_IR_TI) { + bba_out8(BBA_IR,BBA_IR_TI); + } + if(status&BBA_IR_TEI) { + bba_out8(BBA_IR,BBA_IR_TEI); + } + if(status&BBA_IR_FIFOEI) { + bba_out8(BBA_IR,BBA_IR_FIFOEI); + } + if(status&BBA_IR_BUSEI) { + bba_out8(BBA_IR,BBA_IR_BUSEI); + } + if(status&BBA_IR_RBFI) { + bba_start_rx(bba_netif,0x10); + bba_out8(BBA_IR,BBA_IR_RBFI); + } + *pstatus |= status; +} + +static s8_t bba_dochallengeresponse() +{ + u16 status; + s32 cnt; + + UIP_LOG("bba_dochallengeresponse()\n"); + /* as we do not have interrupts we've to poll the irqs */ + cnt = 0; + do { + cnt++; + bba_devpoll(&status); + if(status==0x1000) cnt = 0; + } while(cnt<100 && !(status&0x0800)); + + if(cnt>=1000) return UIP_ERR_IF; + return UIP_ERR_OK; +} + +static s8_t __bba_init(struct uip_netif *dev) +{ + struct bba_priv *priv = (struct bba_priv*)dev->state; + if(!priv) return UIP_ERR_IF; + + __bba_reset(); + + priv->revid = bba_cmd_in8(0x01); + + bba_cmd_outs(0x04,&priv->devid,2); + bba_cmd_out8(0x05,priv->acstart); + + bba_out8(0x5b, (bba_in8(0x5b)&~0x80)); + bba_out8(0x5e, 0x01); + bba_out8(0x5c, (bba_in8(0x5c)|0x04)); + + __bba_recv_init(); + + bba_ins(BBA_NAFR_PAR0,priv->ethaddr->addr, 6); + + bba_out8(BBA_IR,0xFF); + bba_out8(BBA_IMR,0xFF&~BBA_IMR_FIFOEIM); + + bba_cmd_out8(0x02,BBA_CMD_IRMASKNONE); + + return UIP_ERR_OK; +} + +static s8_t bba_init_one(struct uip_netif *dev) +{ + s32 ret; + struct bba_priv *priv = (struct bba_priv*)dev->state; + + if(!priv) return UIP_ERR_IF; + + priv->revid = 0x00; + priv->devid = 0xD107; + priv->acstart = 0x4E; + + ret = __bba_init(dev); + + return ret; +} + +static s8_t bba_probe(struct uip_netif *dev) +{ + s32 ret; + u32 cid; + + if(EXI_Lock(EXI_CHANNEL_0,EXI_DEVICE_2,NULL)==0) return -1; + + cid = __bba_read_cid(); + if(cid!=BBA_CID) { + EXI_Unlock(EXI_CHANNEL_0); + return -1; + } + + ret = bba_init_one(dev); + + EXI_Unlock(EXI_CHANNEL_0); + return ret; +} + +static u32 bba_calc_response(struct uip_netif *dev,u32 val) +{ + u8 revid_0, revid_eth_0, revid_eth_1; + struct bba_priv *priv = (struct bba_priv*)dev->state; + + UIP_LOG("bba_calc_response()\n"); + + revid_0 = priv->revid; + revid_eth_0 = _SHIFTR(priv->devid,8,8); + revid_eth_1 = priv->devid&0xff; + + u8 i0, i1, i2, i3; + i0 = (val & 0xff000000) >> 24; + i1 = (val & 0x00ff0000) >> 16; + i2 = (val & 0x0000ff00) >> 8; + i3 = (val & 0x000000ff); + + u8 c0, c1, c2, c3; + c0 = ((i0 + i1 * 0xc1 + 0x18 + revid_0) ^ (i3 * i2 + 0x90) + ) & 0xff; + c1 = ((i1 + i2 + 0x90) ^ (c0 + i0 - 0xc1) + ) & 0xff; + c2 = ((i2 + 0xc8) ^ (c0 + ((revid_eth_0 + revid_0 * 0x23) ^ 0x19)) + ) & 0xff; + c3 = ((i0 + 0xc1) ^ (i3 + ((revid_eth_1 + 0xc8) ^ 0x90)) + ) & 0xff; + + return ((c0 << 24) | (c1 << 16) | (c2 << 8) | c3); +} + +static void bba_devpoll(u16 *pstatus) +{ + u8 status; + s64 now; + + UIP_LOG("bba_devpoll()\n"); + + now = gettime(); + if(diff_msec(bba_arp_tmr,now)>=UIP_ARP_TMRINTERVAL) { + uip_arp_timer(); + bba_arp_tmr = gettime(); + } + + status = 0; + *pstatus = 0; + if(EXI_Lock(EXI_CHANNEL_0,EXI_DEVICE_2,NULL)==1) { + status = bba_cmd_in8(0x03); + if(status) { + bba_cmd_out8(0x02,BBA_CMD_IRMASKALL); + if(status&0x80) { + *pstatus |= (status<<8); + bba_interrupt(pstatus); + bba_cmd_out8(0x03,0x80); + bba_cmd_out8(0x02,BBA_CMD_IRMASKNONE); + EXI_Unlock(EXI_CHANNEL_0); + return; + } + if(status&0x40) { + *pstatus |= (status<<8); + __bba_init(bba_netif); + bba_cmd_out8(0x03, 0x40); + bba_cmd_out8(0x02,BBA_CMD_IRMASKNONE); + EXI_Unlock(EXI_CHANNEL_0); + return; + } + if(status&0x20) { + *pstatus |= (status<<8); + bba_cmd_out8(0x03, 0x20); + bba_cmd_out8(0x02,BBA_CMD_IRMASKNONE); + EXI_Unlock(EXI_CHANNEL_0); + return; + } + if(status&0x10) { + u32 response,challange; + + *pstatus |= (status<<8); + bba_cmd_out8(0x05,bba_device.acstart); + bba_cmd_ins(0x08,&challange,sizeof(challange)); + response = bba_calc_response(bba_netif,challange); + bba_cmd_outs(0x09,&response,sizeof(response)); + bba_cmd_out8(0x03, 0x10); + bba_cmd_out8(0x02,BBA_CMD_IRMASKNONE); + EXI_Unlock(EXI_CHANNEL_0); + return; + } + if(status&0x08) { + *pstatus |= (status<<8); + bba_cmd_out8(0x03, 0x08); + bba_cmd_out8(0x02,BBA_CMD_IRMASKNONE); + EXI_Unlock(EXI_CHANNEL_0); + return; + } + + *pstatus |= (status<<8); + bba_interrupt(pstatus); + bba_cmd_out8(0x02,BBA_CMD_IRMASKNONE); + } + EXI_Unlock(EXI_CHANNEL_0); + } +} + +static s8_t __bba_start_tx(struct uip_netif *dev,struct uip_pbuf *p,struct uip_ip_addr *ipaddr) +{ + return uip_arp_out(dev,ipaddr,p); +} + +static s8_t __bba_link_tx(struct uip_netif *dev,struct uip_pbuf *p) +{ + u8 pad[60]; + u32 len; + struct uip_pbuf *tmp; + + if(EXI_Lock(EXI_CHANNEL_0,EXI_DEVICE_2,NULL)==0) return UIP_ERR_IF; + + if(p->tot_len>BBA_TX_MAX_PACKET_SIZE) { + UIP_LOG("__bba_link_tx: packet dropped due to big buffer.\n"); + EXI_Unlock(EXI_CHANNEL_0); + return UIP_ERR_PKTSIZE; + } + + if(!__linkstate()) { + EXI_Unlock(EXI_CHANNEL_0); + return UIP_ERR_ABRT; + } + + while((bba_in8(BBA_NCRA)&(BBA_NCRA_ST0|BBA_NCRA_ST1))); + + len = p->tot_len; + bba_out12(BBA_TXFIFOCNT,len); + + bba_select(); + bba_outsregister(BBA_WRTXFIFOD); + for(tmp=p;tmp!=NULL;tmp=tmp->next) { + bba_outsdata(tmp->payload,tmp->len); + } + if(lenflags |= UIP_NETIF_FLAG_LINK_UP; + uip_netif_setup(dev); + uip_arp_init(); + + bba_recv_pbufs = NULL; + bba_arp_tmr = gettime(); + + return UIP_ERR_OK; +} + +uipdev_s uip_bba_create(struct uip_netif *dev) +{ + dev->name[0] = IFNAME0; + dev->name[1] = IFNAME1; + + dev->output = __bba_start_tx; + dev->linkoutput = __bba_link_tx; + dev->mtu = 1500; + dev->flags = UIP_NETIF_FLAG_BROADCAST; + dev->hwaddr_len = 6; + + bba_device.ethaddr = (struct uip_eth_addr*)dev->hwaddr; + bba_device.state = UIP_ERR_OK; + + bba_netif = dev; + return &bba_device; +} + +void uip_bba_poll(struct uip_netif *dev) +{ + u16 status; + + UIP_LOG("uip_bba_poll()\n"); + + bba_devpoll(&status); + +} diff --git a/wii/libogc/libdb/uIP/bba.h b/wii/libogc/libdb/uIP/bba.h new file mode 100644 index 0000000000..4fa92f60e4 --- /dev/null +++ b/wii/libogc/libdb/uIP/bba.h @@ -0,0 +1,14 @@ +#ifndef __BBA_DBG_H__ +#define __BBA_DBG_H__ + +#include "uip.h" + +struct uip_netif; + +typedef void* uipdev_s; + +uipdev_s uip_bba_create(struct uip_netif *dev); +s8_t uip_bba_init(struct uip_netif *dev); +void uip_bba_poll(struct uip_netif *dev); + +#endif diff --git a/wii/libogc/libdb/uIP/memb.c b/wii/libogc/libdb/uIP/memb.c new file mode 100644 index 0000000000..5787a6db4c --- /dev/null +++ b/wii/libogc/libdb/uIP/memb.c @@ -0,0 +1,48 @@ +#include +#include + +#include "uip.h" +#include "memb.h" + +void memb_init(struct memb_blks *blk) +{ + UIP_MEMSET(blk->mem,0,(MEM_ALIGN_SIZE(blk->size)+sizeof(u32))*blk->num); +} + +void* memb_alloc(struct memb_blks *blk) +{ + s32 i; + u32 *ptr; + + ptr = (u32*)blk->mem; + for(i=0;inum;i++) { + if(*ptr==0) { + ++(*ptr); + return (void*)(ptr+1); + } + ptr = (u32*)(u8*)ptr+(MEM_ALIGN_SIZE(blk->size)+sizeof(u32)); + } + return NULL; +} + +u8 memb_free(struct memb_blks *blk,void *ptr) +{ + s32 i; + u32 *ptr2,*ptr1; + + ptr1 = ptr; + ptr2 = (u32*)blk->mem; + for(i=0;inum;i++) { + if(ptr2==(ptr1 - 1)) { + return --(*ptr2); + } + ptr2 = (u32*)(u8*)ptr2+(MEM_ALIGN_SIZE(blk->size)+sizeof(u32)); + } + return -1; +} + +u8 memb_ref(struct memb_blks *blk,void *ptr) +{ + u32 *pref = ptr-sizeof(u32); + return ++(*pref); +} diff --git a/wii/libogc/libdb/uIP/memb.h b/wii/libogc/libdb/uIP/memb.h new file mode 100644 index 0000000000..8da054ed7a --- /dev/null +++ b/wii/libogc/libdb/uIP/memb.h @@ -0,0 +1,21 @@ +#ifndef __MEMB_H__ +#define __MEMB_H__ + +#include + +#define MEMB(name,size,num) \ + static u8 memb_mem_##name[(MEM_ALIGN_SIZE(size)+sizeof(u32))*num]; \ + static struct memb_blks name = {size,num,memb_mem_##name} + +struct memb_blks { + u16 size; + u16 num; + u8 *mem; +}; + +void memb_init(struct memb_blks *blk); +void* memb_alloc(struct memb_blks *blk); +u8 memb_free(struct memb_blks *blk,void *ptr); +u8 memb_ref(struct memb_blks *blk,void *ptr); + +#endif diff --git a/wii/libogc/libdb/uIP/memr.c b/wii/libogc/libdb/uIP/memr.c new file mode 100644 index 0000000000..c4df89cafa --- /dev/null +++ b/wii/libogc/libdb/uIP/memr.c @@ -0,0 +1,155 @@ +#include +#include + +#include "uip.h" +#include "memr.h" + +#if UIP_ERRORING == 1 +#include +#define UIP_ERROR(m) uip_log(__FILE__,__LINE__,m) +#else +#define UIP_ERROR(m) +#endif /* UIP_ERRORING == 1 */ + +#define MIN_SIZE 12 +#define SIZEOF_STRUCT_MEM (sizeof(struct mem)+(((sizeof(struct mem)%MEM_ALIGNMENT)==0)?0:(4-(sizeof(struct mem)%MEM_ALIGNMENT)))) + +struct mem { + u32 next,prev; + u32 used; +}; + +static struct mem *ram_free; +static struct mem *ram_end; +static u8 ram_block[sizeof(struct mem)+UIP_MEM_SIZE+MEM_ALIGNMENT]; + +static void plug_holes(struct mem *rmem) +{ + struct mem *nmem; + struct mem *pmem; + + nmem = (struct mem*)&ram_block[rmem->next]; + if(rmem!=nmem && nmem->used==0 && (u8_t*)nmem!=(u8_t*)ram_end) { + if(ram_free==nmem) ram_free = rmem; + + rmem->next = nmem->next; + ((struct mem*)&ram_block[nmem->next])->prev = (u8_t*)rmem - ram_block; + } + + pmem = (struct mem*)&ram_block[rmem->prev]; + if(pmem!=rmem && pmem->used==0) { + if(ram_free==rmem) ram_free = pmem; + pmem->next = rmem->next; + ((struct mem*)&ram_block[rmem->next])->prev = (u8_t*)pmem - ram_block; + } +} + +void memr_init() +{ + struct mem *rmem; + + UIP_MEMSET(ram_block,0,UIP_MEM_SIZE); + rmem = (struct mem*)ram_block; + rmem->next = UIP_MEM_SIZE; + rmem->prev = 0; + rmem->used = 0; + + ram_end = (struct mem*)&ram_block[UIP_MEM_SIZE]; + ram_end->used = 1; + ram_end->prev = UIP_MEM_SIZE; + ram_end->next = UIP_MEM_SIZE; + + ram_free = (struct mem*)ram_block; +} + +void* memr_malloc(u32 size) +{ + u32 ptr,ptr2; + struct mem *rmem,*rmem2; + + if(size==0) return NULL; + + if(size%MEM_ALIGNMENT) size += MEM_ALIGNMENT - ((size+SIZEOF_STRUCT_MEM)%SIZEOF_STRUCT_MEM); + if(size>UIP_MEM_SIZE) return NULL; + + for(ptr = (u8_t*)ram_free - ram_block;ptrnext) { + rmem = (struct mem*)&ram_block[ptr]; + if(!rmem->used && rmem->next - (ptr + SIZEOF_STRUCT_MEM)>=size + SIZEOF_STRUCT_MEM) { + ptr2 = ptr + SIZEOF_STRUCT_MEM + size; + rmem2 = (struct mem*)&ram_block[ptr2]; + + rmem2->prev = ptr; + rmem2->next = rmem->next; + rmem->next = ptr2; + if(rmem->next!=UIP_MEM_SIZE) ((struct mem*)&ram_block[rmem2->next])->prev = ptr2; + + rmem2->used = 0; + rmem->used = 1; + + if(rmem==ram_free) { + while(ram_free->used && ram_free!=ram_end) ram_free = (struct mem*)&ram_block[ram_free->next]; + } + + return (u8_t*)rmem+SIZEOF_STRUCT_MEM; + } + } + return NULL; +} + +void memr_free(void *ptr) +{ + struct mem *rmem; + + if(ptr==NULL) return; + if((u8_t*)ptr<(u8_t*)ram_block || (u8_t*)ptr>=(u8_t*)ram_end) return; + + rmem = (struct mem*)((u8_t*)ptr - SIZEOF_STRUCT_MEM); + rmem->used = 0; + + if(rmemUIP_MEM_SIZE) return NULL; + if((u8_t*)ptr<(u8_t*)ram_block || (u8_t*)ptr>=(u8_t*)ram_end) { + UIP_ERROR("memr_realloc: illegal memory.\n"); + return ptr; + } + rmem = (struct mem*)((u8_t*)ptr - SIZEOF_STRUCT_MEM); + ptr1 = (u8_t*)rmem - ram_block; + size = rmem->next - ptr1 - SIZEOF_STRUCT_MEM; + + if(newsize+SIZEOF_STRUCT_MEM+MIN_SIZEused = 0; + rmem2->next = rmem->next; + rmem2->prev = ptr1; + rmem->next = ptr2; + if(rmem2->next!=UIP_MEM_SIZE) ((struct mem*)&ram_block[rmem2->next])->prev = ptr2; + + plug_holes(rmem2); + } + + return ptr; +} + +void* memr_reallocm(void *ptr,u32 newsize) +{ + void *nmem; + + nmem = memr_malloc(newsize); + if(nmem==NULL) return memr_realloc(ptr,newsize); + + UIP_MEMCPY(nmem,ptr,newsize); + memr_free(ptr); + + return nmem; +} diff --git a/wii/libogc/libdb/uIP/memr.h b/wii/libogc/libdb/uIP/memr.h new file mode 100644 index 0000000000..a2455d6cc4 --- /dev/null +++ b/wii/libogc/libdb/uIP/memr.h @@ -0,0 +1,12 @@ +#ifndef __MEMR_H__ +#define __MEMR_H__ + +#include + +void memr_init(); +void* memr_malloc(u32 size); +void memr_free(void *ptr); +void* memr_realloc(void *ptr,u32 newsize); +void* memr_reallocm(void *ptr,u32 newsize); + +#endif diff --git a/wii/libogc/libdb/uIP/uip.h b/wii/libogc/libdb/uIP/uip.h new file mode 100644 index 0000000000..2bc5713d17 --- /dev/null +++ b/wii/libogc/libdb/uIP/uip.h @@ -0,0 +1,176 @@ +/** + * \addtogroup uip + * @{ + */ + +/** + * \file + * Header file for the uIP TCP/IP stack. + * \author Adam Dunkels + * + * The uIP TCP/IP stack header file contains definitions for a number + * of C macros that are used by uIP programs as well as internal uIP + * structures, TCP/IP header structures and function declarations. + * + */ + + +/* + * Copyright (c) 2001-2003, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * + */ + +#ifndef __UIP_H__ +#define __UIP_H__ + +#include "uipopt.h" +#include "uip_arch.h" +#include "uip_ip.h" + +#define UIP_ERR_OK 0 +#define UIP_ERR_MEM -1 +#define UIP_ERR_BUF -2 +#define UIP_ERR_ABRT -3 +#define UIP_ERR_RST -4 +#define UIP_ERR_CLSD -5 +#define UIP_ERR_CONN -6 +#define UIP_ERR_VAL -7 +#define UIP_ERR_ARG -8 +#define UIP_ERR_RTE -9 +#define UIP_ERR_USE -10 +#define UIP_ERR_IF -11 +#define UIP_ERR_PKTSIZE -17 + +#define UIP_PROTO_ICMP 1 +#define UIP_PROTO_TCP 6 +#define UIP_PROTO_UDP 17 + +/* Header sizes. */ +#define UIP_IP_HLEN 20 /* Size of IP header */ +#define UIP_TRANSPORT_HLEN 20 + +#define UIP_UDP_HLEN 8 /* Size of UDP header */ +#define UIP_TCP_HLEN 20 /* Size of TCP header */ +#define UIP_IPUDP_HLEN 28 /* Size of IP + UDP header */ +#define UIP_IPTCP_HLEN 40 /* Size of IP + TCP header */ + +/** + * Convert 16-bit quantity from host byte order to network byte order. + * + * This macro is primarily used for converting constants from host + * byte order to network byte order. For converting variables to + * network byte order, use the htons() function instead. + * + * \hideinitializer + */ +#ifndef HTONS +# if BYTE_ORDER == BIG_ENDIAN +# define HTONS(n) (n) +# else /* BYTE_ORDER == BIG_ENDIAN */ +# define HTONS(n) ((((u16_t)((n) & 0xff)) << 8) | (((n) & 0xff00) >> 8)) +# endif /* BYTE_ORDER == BIG_ENDIAN */ +#endif /* HTONS */ + +/** + * The structure holding the TCP/IP statistics that are gathered if + * UIP_STATISTICS is set to 1. + * + */ +struct uip_stats { + struct { + uip_stats_t drop; /**< Number of dropped packets at the IP + layer. */ + uip_stats_t recv; /**< Number of received packets at the IP + layer. */ + uip_stats_t sent; /**< Number of sent packets at the IP + layer. */ + uip_stats_t vhlerr; /**< Number of packets dropped due to wrong + IP version or header length. */ + uip_stats_t hblenerr; /**< Number of packets dropped due to wrong + IP length, high byte. */ + uip_stats_t lblenerr; /**< Number of packets dropped due to wrong + IP length, low byte. */ + uip_stats_t fragerr; /**< Number of packets dropped since they + were IP fragments. */ + uip_stats_t chkerr; /**< Number of packets dropped due to IP + checksum errors. */ + uip_stats_t protoerr; /**< Number of packets dropped since they + were neither ICMP, UDP nor TCP. */ + } ip; /**< IP statistics. */ + struct { + uip_stats_t drop; /**< Number of dropped ICMP packets. */ + uip_stats_t recv; /**< Number of received ICMP packets. */ + uip_stats_t sent; /**< Number of sent ICMP packets. */ + uip_stats_t typeerr; /**< Number of ICMP packets with a wrong + type. */ + } icmp; /**< ICMP statistics. */ + struct { + uip_stats_t drop; /**< Number of dropped TCP segments. */ + uip_stats_t recv; /**< Number of recived TCP segments. */ + uip_stats_t sent; /**< Number of sent TCP segments. */ + uip_stats_t chkerr; /**< Number of TCP segments with a bad + checksum. */ + uip_stats_t ackerr; /**< Number of TCP segments with a bad ACK + number. */ + uip_stats_t rst; /**< Number of recevied TCP RST (reset) segments. */ + uip_stats_t rexmit; /**< Number of retransmitted TCP segments. */ + uip_stats_t syndrop; /**< Number of dropped SYNs due to too few + connections was avaliable. */ + uip_stats_t synrst; /**< Number of SYNs for closed ports, + triggering a RST. */ + } tcp; /**< TCP statistics. */ +}; + +/** + * The uIP TCP/IP statistics. + * + * This is the variable in which the uIP TCP/IP statistics are gathered. + */ +extern struct uip_stats uip_stat; + +/** + * Convert 16-bit quantity from host byte order to network byte order. + * + * This function is primarily used for converting variables from host + * byte order to network byte order. For converting constants to + * network byte order, use the HTONS() macro instead. + */ +#ifndef htons +u16_t htons(u16_t val); +#endif /* htons */ + +/** @} */ + +#endif /* __UIP_H__ */ + + +/** @} */ + diff --git a/wii/libogc/libdb/uIP/uip_arch.c b/wii/libogc/libdb/uIP/uip_arch.c new file mode 100644 index 0000000000..5a973caf81 --- /dev/null +++ b/wii/libogc/libdb/uIP/uip_arch.c @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2001, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * + */ + +#include +#include +#include + +#include "uip.h" +#include "uip_arch.h" +#include "uip_ip.h" +#include "uip_tcp.h" +#include "uip_pbuf.h" + + +/*-----------------------------------------------------------------------------------*/ +u16_t uip_chksum(u16_t *sdata, u32_t len) +{ + u32_t acc; + + for(acc = 0;len > 1;len -= 2) { + acc += *sdata++; + } + + /* add up any odd byte */ + if(len==1) { + acc += htons((u16_t)((((u8_t *)sdata)[0]&0xff)<<8)); + } + while(acc>>16) acc = (acc&0xffffUL)+(acc>>16); + + return (u16_t)acc; +} + +/*-----------------------------------------------------------------------------------*/ +u16_t uip_chksum_pseudo(struct uip_pbuf *p,struct uip_ip_addr *src,struct uip_ip_addr *dst,u8_t proto,u16_t proto_len) +{ + u32_t acc,len,rem; + struct uip_pbuf *q; + + acc = 0; + + rem = proto_len; + for(q=p;q!=NULL && rem>0;q=q->next) { + len = (rem>q->len)?q->len:rem; + acc += uip_chksum(q->payload,len); + rem -= len; + } + + acc += (src->addr&0xffffUL); + acc += ((src->addr>>16)&0xffffUL); + acc += (dst->addr&0xffffUL); + acc += ((dst->addr>>16)&0xffffUL); + acc += (u32_t)htons(proto); + acc += (u32_t)htons(proto_len); + + while(acc>>16) acc = (acc&0xffffUL)+(acc>>16); + + return (u16_t)~(acc&0xffffUL); +} +/*-----------------------------------------------------------------------------------*/ +u16_t +uip_ipchksum(void *dataptr,u16_t len) +{ + return ~(uip_chksum(dataptr,len)); +} + +u16_t uip_ipchksum_pbuf(struct uip_pbuf *p) +{ + u32_t acc; + struct uip_pbuf *q; + + acc = 0; + for(q = p; q != NULL; q = q->next) { + acc += uip_chksum(q->payload,q->len); + } + while(acc>>16) acc = (acc&0xffffUL)+(acc>>16); + + return (u16_t)~(acc & 0xffffUL); +} + +void uip_log(const char *filename,int line_nb,char *msg) +{ + printf("%s(%d):\n%s\n",filename,line_nb,msg); +} + +/*-----------------------------------------------------------------------------------*/ diff --git a/wii/libogc/libdb/uIP/uip_arch.h b/wii/libogc/libdb/uIP/uip_arch.h new file mode 100644 index 0000000000..2a0e26a8b9 --- /dev/null +++ b/wii/libogc/libdb/uIP/uip_arch.h @@ -0,0 +1,170 @@ +/** + * \defgroup uiparch Architecture specific uIP functions + * @{ + * + * The functions in the architecture specific module implement the IP + * check sum and 32-bit additions. + * + * The IP checksum calculation is the most computationally expensive + * operation in the TCP/IP stack and it therefore pays off to + * implement this in efficient assembler. The purpose of the uip-arch + * module is to let the checksum functions to be implemented in + * architecture specific assembler. + * + */ + +/** + * \file + * Declarations of architecture specific functions. + * \author Adam Dunkels + */ + +/* + * Copyright (c) 2001, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * + */ + +#ifndef __UIP_ARCH_H__ +#define __UIP_ARCH_H__ + +#include "uip.h" + +#define UIP_MIN(x,y) (x)<(y)?(x):(y) + +#define MEM_ALIGNMENT 4 +#define MEM_ALIGN(mem) ((void*)(((u32_t)(mem)+MEM_ALIGNMENT-1)&~(u32_t)(MEM_ALIGNMENT-1))) +#define MEM_ALIGN_SIZE(size) (((size)+MEM_ALIGNMENT-1)&~(u32_t)(MEM_ALIGNMENT-1)) + +#define PACK_STRUCT_STRUCT __attribute__((packed)) +#define PACK_STRUCT_FIELD(x) x +#define PACK_STRUCT_BEGIN +#define PACK_STRUCT_END + +#ifndef htons +#define htons(x) (x) +#endif +#ifndef ntohs +#define ntohs(x) (x) +#endif +#ifndef htonl +#define htonl(x) (x) +#endif +#ifndef ntohl +#define ntohl(x) (x) +#endif + +struct uip_pbuf; +struct uip_ip_addr; + +/** + * Calculate the Internet checksum over a buffer. + * + * The Internet checksum is the one's complement of the one's + * complement sum of all 16-bit words in the buffer. + * + * See RFC1071. + * + * \note This function is not called in the current version of uIP, + * but future versions might make use of it. + * + * \param buf A pointer to the buffer over which the checksum is to be + * computed. + * + * \param len The length of the buffer over which the checksum is to + * be computed. + * + * \return The Internet checksum of the buffer. + */ +u16_t uip_chksum(u16_t *buf, u32_t len); + +/** + * Calculate the IP header checksum of the packet header in uip_buf. + * + * The IP header checksum is the Internet checksum of the 20 bytes of + * the IP header. + * + * \return The IP header checksum of the IP header in the uip_buf + * buffer. + */ +u16_t uip_ipchksum(void *dataptr,u16_t len); + +u16_t uip_ipchksum_pbuf(struct uip_pbuf *p); + +/** + * Calculate the TCP checksum of the packet in uip_buf and uip_appdata. + * + * The TCP checksum is the Internet checksum of data contents of the + * TCP segment, and a pseudo-header as defined in RFC793. + * + * \note The uip_appdata pointer that points to the packet data may + * point anywhere in memory, so it is not possible to simply calculate + * the Internet checksum of the contents of the uip_buf buffer. + * + * \return The TCP checksum of the TCP segment in uip_buf and pointed + * to by uip_appdata. + */ +u16_t uip_chksum_pseudo(struct uip_pbuf *p,struct uip_ip_addr *src,struct uip_ip_addr *dst,u8_t proto,u16_t proto_len); + + + +extern void tcpip_tmr_needed(); +#define tcp_tmr_needed tcpip_tmr_needed + +#if UIP_LIBC_MEMFUNCREPLACE +static __inline__ void uip_memcpy(void *dest,const void *src,s32_t len) +{ + u8_t *dest0 = (u8_t*)dest; + u8_t *src0 = (u8_t*)src; + + while(len--) { + *dest0++ = *src0++; + } +} + +static __inline__ void uip_memset(void *dest,s32_t c,s32_t len) +{ + u8_t *dest0 = (u8_t*)dest; + + while(len--) { + *dest0++ = (s8_t)c; + } +} + +#define UIP_MEMCPY uip_memcpy +#define UIP_MEMSET uip_memset +#else +#define UIP_MEMCPY memcpy +#define UIP_MEMSET memset +#endif + +/** @} */ + +#endif /* __UIP_ARCH_H__ */ diff --git a/wii/libogc/libdb/uIP/uip_arp.c b/wii/libogc/libdb/uIP/uip_arp.c new file mode 100644 index 0000000000..44cb1f5300 --- /dev/null +++ b/wii/libogc/libdb/uIP/uip_arp.c @@ -0,0 +1,464 @@ +/** + * \addtogroup uip + * @{ + */ + +/** + * \defgroup uiparp uIP Address Resolution Protocol + * @{ + * + * The Address Resolution Protocol ARP is used for mapping between IP + * addresses and link level addresses such as the Ethernet MAC + * addresses. ARP uses broadcast queries to ask for the link level + * address of a known IP address and the host which is configured with + * the IP address for which the query was meant, will respond with its + * link level address. + * + * \note This ARP implementation only supports Ethernet. + */ + +/** + * \file + * Implementation of the ARP Address Resolution Protocol. + * \author Adam Dunkels + * + */ + +/* + * Copyright (c) 2001-2003, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * + */ + + +#include "uip_pbuf.h" +#include "uip_netif.h" +#include "uip_arp.h" + +#include + +#if UIP_LOGGING == 1 +#include +#define UIP_LOG(m) uip_log(__FILE__,__LINE__,m) +#else +#define UIP_LOG(m) +#endif /* UIP_LOGGING == 1 */ + +#if UIP_STATISTICS == 1 +struct uip_stats uip_stat; +#define UIP_STAT(s) s +#else +#define UIP_STAT(s) +#endif /* UIP_STATISTICS == 1 */ + + +#define ARP_TRY_HARD 0x01 + +#define ARP_MAXAGE 240 +#define ARP_MAXPENDING 2 + +#define ARP_REQUEST 1 +#define ARP_REPLY 2 + +#define ARP_HWTYPE_ETH 1 + +#define ARPH_HWLEN(hdr) (ntohs((hdr)->_hwlen_protolen) >> 8) +#define ARPH_PROTOLEN(hdr) (ntohs((hdr)->_hwlen_protolen) & 0xff) + +#define ARPH_HWLEN_SET(hdr, len) (hdr)->_hwlen_protolen = htons(ARPH_PROTOLEN(hdr) | ((len) << 8)) +#define ARPH_PROTOLEN_SET(hdr, len) (hdr)->_hwlen_protolen = htons((len) | (ARPH_HWLEN(hdr) << 8)) + +enum arp_state { + ARP_STATE_EMPTY, + ARP_STATE_PENDING, + ARP_STATE_STABLE, + ARP_STATE_EXPIRED +}; + +struct arp_entry { + struct uip_ip_addr ipaddr; + struct uip_eth_addr ethaddr; + enum arp_state state; + u8_t time; +}; + +static const struct uip_eth_addr ethbroadcast = {{0xff,0xff,0xff,0xff,0xff,0xff}}; +static struct arp_entry arp_table[UIP_ARPTAB_SIZE]; +/*-----------------------------------------------------------------------------------*/ +/** + * Initialize the ARP module. + * + */ +/*-----------------------------------------------------------------------------------*/ +void +uip_arp_init(void) +{ + s32_t i; + for(i = 0; i < UIP_ARPTAB_SIZE; ++i) { + arp_table[i].state = ARP_STATE_EMPTY; + arp_table[i].time = 0; + } +} +/*-----------------------------------------------------------------------------------*/ +/** + * Periodic ARP processing function. + * + * This function performs periodic timer processing in the ARP module + * and should be called at regular intervals. The recommended interval + * is 10 seconds between the calls. + * + */ +/*-----------------------------------------------------------------------------------*/ +void +uip_arp_timer(void) +{ + u8_t i; + + for(i=0;i=ARP_MAXAGE) { + arp_table[i].state = ARP_STATE_EXPIRED; + } else if(arp_table[i].state==ARP_STATE_PENDING) { + if(arp_table[i].time>=ARP_MAXPENDING) arp_table[i].state = ARP_STATE_EXPIRED; + } + + if(arp_table[i].state==ARP_STATE_EXPIRED) arp_table[i].state = ARP_STATE_EMPTY; + } +} + +static s8_t uip_arp_findentry(struct uip_ip_addr *ipaddr,u8_t flags) +{ + s8_t old_pending = UIP_ARPTAB_SIZE, old_stable = UIP_ARPTAB_SIZE; + s8_t empty = UIP_ARPTAB_SIZE; + u8_t i = 0,age_pending = 0,age_stable = 0; + + /* Walk through the ARP mapping table and try to find an entry to + update. If none is found, the IP -> MAC address mapping is + inserted in the ARP table. */ + for(i = 0; i < UIP_ARPTAB_SIZE; ++i) { + if(empty==UIP_ARPTAB_SIZE && arp_table[i].state==ARP_STATE_EMPTY) { + empty = i; + } else if(arp_table[i].state==ARP_STATE_PENDING) { + if(ipaddr && ip_addr_cmp(ipaddr,&arp_table[i].ipaddr)) return i; + else if(arp_table[i].time>=age_pending) { + old_pending = i; + age_pending = arp_table[i].time; + } + } else if(arp_table[i].state==ARP_STATE_STABLE) { + if(ipaddr && ip_addr_cmp(ipaddr,&arp_table[i].ipaddr)) return i; + else if(arp_table[i].time>=age_stable) { + old_stable = i; + age_stable = arp_table[i].time; + } + } + } + if(empty==UIP_ARPTAB_SIZE && !(flags&ARP_TRY_HARD)) return UIP_ERR_MEM; + + if(emptyhwaddr_len;k++) arp_table[i].ethaddr.addr[k] = ethaddr->addr[k]; + + return UIP_ERR_OK; +} +/*-----------------------------------------------------------------------------------*/ +/** + * ARP processing for incoming IP packets + * + * This function should be called by the device driver when an IP + * packet has been received. The function will check if the address is + * in the ARP cache, and if so the ARP cache entry will be + * refreshed. If no ARP cache entry was found, a new one is created. + * + * This function expects an IP packet with a prepended Ethernet header + * in the uip_buf[] buffer, and the length of the packet in the global + * variable uip_len. + */ +/*-----------------------------------------------------------------------------------*/ +void +uip_arp_ipin(struct uip_netif *netif,struct uip_pbuf *p) +{ + struct uip_ethip_hdr *hdr; + + hdr = p->payload; + if(!ip_addr_netcmp(&hdr->ip.src,&netif->ip_addr,&netif->netmask)) return; + + uip_arp_update(netif,&hdr->ip.src,&hdr->ethhdr.src,0); + } + +/*-----------------------------------------------------------------------------------*/ +/** + * ARP processing for incoming ARP packets. + * + * This function should be called by the device driver when an ARP + * packet has been received. The function will act differently + * depending on the ARP packet type: if it is a reply for a request + * that we previously sent out, the ARP cache will be filled in with + * the values from the ARP reply. If the incoming ARP packet is an ARP + * request for our IP address, an ARP reply packet is created and put + * into the uip_buf[] buffer. + * + * When the function returns, the value of the global variable uip_len + * indicates whether the device driver should send out a packet or + * not. If uip_len is zero, no packet should be sent. If uip_len is + * non-zero, it contains the length of the outbound packet that is + * present in the uip_buf[] buffer. + * + * This function expects an ARP packet with a prepended Ethernet + * header in the uip_buf[] buffer, and the length of the packet in the + * global variable uip_len. + */ +/*-----------------------------------------------------------------------------------*/ +void +uip_arp_arpin(struct uip_netif *netif,struct uip_eth_addr *ethaddr,struct uip_pbuf *p) +{ + u8_t i,for_us; + struct uip_ip_addr sipaddr,dipaddr; + struct uip_arp_hdr *hdr; + + if(p->tot_lenpayload; + + *(struct uip_ip_addr2*)((void*)&sipaddr) = hdr->sipaddr; + *(struct uip_ip_addr2*)((void*)&dipaddr) = hdr->dipaddr; + + if(netif->ip_addr.addr==0) for_us = 0; + else for_us = ip_addr_cmp(&dipaddr,&netif->ip_addr); + + if(for_us) uip_arp_update(netif,&sipaddr,&hdr->shwaddr,ARP_TRY_HARD); + else uip_arp_update(netif,&sipaddr,&hdr->shwaddr,0); + + switch(htons(hdr->opcode)) { + case ARP_REQUEST: + if(for_us) { + hdr->opcode = htons(ARP_REPLY); + hdr->dipaddr = hdr->sipaddr; + hdr->sipaddr = *(struct uip_ip_addr2*)((void*)&netif->ip_addr); + + for(i=0;ihwaddr_len;i++) { + hdr->dhwaddr.addr[i] = hdr->shwaddr.addr[i]; + hdr->shwaddr.addr[i] = ethaddr->addr[i]; + hdr->ethhdr.dest.addr[i] = hdr->dhwaddr.addr[i]; + hdr->ethhdr.src.addr[i] = ethaddr->addr[i]; + } + + hdr->hwtype = htons(ARP_HWTYPE_ETH); + ARPH_HWLEN_SET(hdr,netif->hwaddr_len); + + hdr->protocol = htons(UIP_ETHTYPE_IP); + ARPH_PROTOLEN_SET(hdr,sizeof(struct uip_ip_addr)); + + netif->linkoutput(netif,p); + } else { + UIP_LOG("uip_arp_arpin: ip packet not for us.\n"); + } + break; + case ARP_REPLY: + break; + default: + UIP_LOG("uip_arp_arpin: ARP unknown opcode type.\n"); + break; + } + uip_pbuf_free(p); +} +/*-----------------------------------------------------------------------------------*/ +/** + * Prepend Ethernet header to an outbound IP packet and see if we need + * to send out an ARP request. + * + * This function should be called before sending out an IP packet. The + * function checks the destination IP address of the IP packet to see + * what Ethernet MAC address that should be used as a destination MAC + * address on the Ethernet. + * + * If the destination IP address is in the local network (determined + * by logical ANDing of netmask and our IP address), the function + * checks the ARP cache to see if an entry for the destination IP + * address is found. If so, an Ethernet header is prepended and the + * function returns. If no ARP cache entry is found for the + * destination IP address, the packet in the uip_buf[] is replaced by + * an ARP request packet for the IP address. The IP packet is dropped + * and it is assumed that they higher level protocols (e.g., TCP) + * eventually will retransmit the dropped packet. + * + * If the destination IP address is not on the local network, the IP + * address of the default router is used instead. + * + * When the function returns, a packet is present in the uip_buf[] + * buffer, and the length of the packet is in the global variable + * uip_len. + */ +/*-----------------------------------------------------------------------------------*/ +s8_t uip_arp_out(struct uip_netif *netif,struct uip_ip_addr *ipaddr,struct uip_pbuf *q) +{ + u8_t i; + struct uip_eth_addr *dest,*srcaddr,mcastaddr; + struct uip_eth_hdr *ethhdr; + + if(uip_pbuf_header(q,sizeof(struct uip_eth_hdr))!=0) { + UIP_LOG("uip_arp_out: could not allocate room for header.\n"); + return UIP_ERR_BUF; + } + + dest = NULL; + if(ip_addr_isbroadcast(ipaddr,netif)) { + dest = (struct uip_eth_addr*)ðbroadcast; + } else if(ip_addr_ismulticast(ipaddr)) { + /* Hash IP multicast address to MAC address.*/ + mcastaddr.addr[0] = 0x01; + mcastaddr.addr[1] = 0x00; + mcastaddr.addr[2] = 0x5e; + mcastaddr.addr[3] = ip4_addr2(ipaddr) & 0x7f; + mcastaddr.addr[4] = ip4_addr3(ipaddr); + mcastaddr.addr[5] = ip4_addr4(ipaddr); + /* destination Ethernet address is multicast */ + dest = &mcastaddr; + } else { + if(!ip_addr_netcmp(ipaddr,&netif->ip_addr,&netif->netmask)) { + if(netif->gw.addr!=0) ipaddr = &netif->gw; + else return UIP_ERR_RTE; + } + return uip_arp_arpquery(netif,ipaddr,q); + } + + srcaddr = (struct uip_eth_addr*)netif->hwaddr; + ethhdr = q->payload; + for(i=0;ihwaddr_len;i++) { + ethhdr->dest.addr[i] = dest->addr[i]; + ethhdr->src.addr[i] = srcaddr->addr[i]; + } + + ethhdr->type = htons(UIP_ETHTYPE_IP); + return netif->linkoutput(netif,q); +} +/*-----------------------------------------------------------------------------------*/ + +s8_t uip_arp_arpquery(struct uip_netif *netif,struct uip_ip_addr *ipaddr,struct uip_pbuf *q) +{ + s8_t i,k; + s8_t err = UIP_ERR_MEM; + struct uip_eth_addr *srcaddr = (struct uip_eth_addr*)netif->hwaddr; + + if(ip_addr_isbroadcast(ipaddr,netif) || + ip_addr_ismulticast(ipaddr) || + ip_addr_isany(ipaddr)) return UIP_ERR_ARG; + + i = uip_arp_findentry(ipaddr,ARP_TRY_HARD); + if(i<0) return i; + + if(arp_table[i].state==ARP_STATE_EMPTY) arp_table[i].state = ARP_STATE_PENDING; + if(arp_table[i].state==ARP_STATE_PENDING || q==NULL) err = uip_arp_arprequest(netif,ipaddr); + + if(q!=NULL) { + if(arp_table[i].state==ARP_STATE_STABLE) { + + struct uip_eth_hdr *hdr = q->payload; + for(k=0;khwaddr_len;k++) { + hdr->dest.addr[k] = arp_table[i].ethaddr.addr[k]; + hdr->src.addr[k] = srcaddr->addr[k]; + } + + hdr->type = htons(UIP_ETHTYPE_IP); + err = netif->linkoutput(netif,q); + } else if(arp_table[i].state==ARP_STATE_PENDING) { + UIP_LOG("uip_arp_query: Ethernet destination address unknown, queueing disabled, packet dropped.\n"); + } + } + return err; +} + +s8_t uip_arp_arprequest(struct uip_netif *netif,struct uip_ip_addr *ipaddr) +{ + s8_t k; + s8_t err = UIP_ERR_MEM; + struct uip_arp_hdr *hdr; + struct uip_pbuf *p; + struct uip_eth_addr *srcaddr = (struct uip_eth_addr*)netif->hwaddr; + + p = uip_pbuf_alloc(UIP_PBUF_LINK,sizeof(struct uip_arp_hdr),UIP_PBUF_RAM); + if(p==NULL) return err; + + hdr = p->payload; + hdr->opcode = htons(ARP_REQUEST); + + for(k=0;khwaddr_len;k++) { + hdr->shwaddr.addr[k] = srcaddr->addr[k]; + hdr->dhwaddr.addr[k] = 0; + } + + hdr->dipaddr = *(struct uip_ip_addr2*)((void*)ipaddr); + hdr->sipaddr = *(struct uip_ip_addr2*)((void*)&netif->ip_addr); + + hdr->hwtype = htons(ARP_HWTYPE_ETH); + ARPH_HWLEN_SET(hdr,netif->hwaddr_len); + + hdr->protocol = htons(UIP_ETHTYPE_IP); + ARPH_PROTOLEN_SET(hdr,sizeof(struct uip_ip_addr)); + for(k=0;khwaddr_len;k++) { + hdr->ethhdr.dest.addr[k] = 0xff; + hdr->ethhdr.src.addr[k] = srcaddr->addr[k]; + } + hdr->ethhdr.type = htons(UIP_ETHTYPE_ARP); + + err = netif->linkoutput(netif,p); + uip_pbuf_free(p); + + return err; +} + +/** @} */ +/** @} */ diff --git a/wii/libogc/libdb/uIP/uip_arp.h b/wii/libogc/libdb/uIP/uip_arp.h new file mode 100644 index 0000000000..16569cf43a --- /dev/null +++ b/wii/libogc/libdb/uIP/uip_arp.h @@ -0,0 +1,150 @@ +/** + * \addtogroup uip + * @{ + */ + +/** + * \addtogroup uiparp + * @{ + */ + +/** + * \file + * Macros and definitions for the ARP module. + * \author Adam Dunkels + */ + + +/* + * Copyright (c) 2001-2003, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * + */ + +#ifndef __UIP_ARP_H__ +#define __UIP_ARP_H__ + +#include "uip.h" +#include "uip_arch.h" + +#define UIP_ARP_TMRINTERVAL 5000 + +#define UIP_ETHTYPE_ARP 0x0806 +#define UIP_ETHTYPE_IP 0x0800 +#define UIP_ETHTYPE_IP6 0x86dd +/** + * Representation of a 48-bit Ethernet address. + */ +PACK_STRUCT_BEGIN +struct uip_eth_addr { + PACK_STRUCT_FIELD(u8_t addr[6]); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END + +/** + * The Ethernet header. + */ +PACK_STRUCT_BEGIN +struct uip_eth_hdr { + PACK_STRUCT_FIELD(struct uip_eth_addr dest); + PACK_STRUCT_FIELD(struct uip_eth_addr src); + PACK_STRUCT_FIELD(u16_t type); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END + +PACK_STRUCT_BEGIN +struct uip_arp_hdr { + PACK_STRUCT_FIELD(struct uip_eth_hdr ethhdr); + PACK_STRUCT_FIELD(u16_t hwtype); + PACK_STRUCT_FIELD(u16_t protocol); + PACK_STRUCT_FIELD(u16_t _hwlen_protolen); + PACK_STRUCT_FIELD(u16_t opcode); + PACK_STRUCT_FIELD(struct uip_eth_addr shwaddr); + PACK_STRUCT_FIELD(struct uip_ip_addr2 sipaddr); + PACK_STRUCT_FIELD(struct uip_eth_addr dhwaddr); + PACK_STRUCT_FIELD(struct uip_ip_addr2 dipaddr); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END + +PACK_STRUCT_BEGIN +struct uip_ethip_hdr { + PACK_STRUCT_FIELD(struct uip_eth_hdr ethhdr); + PACK_STRUCT_FIELD(struct uip_ip_hdr ip); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END + + +extern struct uip_eth_addr uip_ethaddr; + +struct uip_pbuf; +struct uip_netif; + +/* The uip_arp_init() function must be called before any of the other + ARP functions. */ +void uip_arp_init(void); + +/* The uip_arp_ipin() function should be called whenever an IP packet + arrives from the Ethernet. This function refreshes the ARP table or + inserts a new mapping if none exists. The function assumes that an + IP packet with an Ethernet header is present in the uip_buf buffer + and that the length of the packet is in the uip_len variable. */ +void uip_arp_ipin(struct uip_netif *netif,struct uip_pbuf *p); + +/* The uip_arp_arpin() should be called when an ARP packet is received + by the Ethernet driver. This function also assumes that the + Ethernet frame is present in the uip_buf buffer. When the + uip_arp_arpin() function returns, the contents of the uip_buf + buffer should be sent out on the Ethernet if the uip_len variable + is > 0. */ +void uip_arp_arpin(struct uip_netif *netif,struct uip_eth_addr *ethaddr,struct uip_pbuf *p); + +/* The uip_arp_out() function should be called when an IP packet + should be sent out on the Ethernet. This function creates an + Ethernet header before the IP header in the uip_buf buffer. The + Ethernet header will have the correct Ethernet MAC destination + address filled in if an ARP table entry for the destination IP + address (or the IP address of the default router) is present. If no + such table entry is found, the IP packet is overwritten with an ARP + request and we rely on TCP to retransmit the packet that was + overwritten. In any case, the uip_len variable holds the length of + the Ethernet frame that should be transmitted. */ +s8_t uip_arp_out(struct uip_netif *netif,struct uip_ip_addr *ipaddr,struct uip_pbuf *q); + +/* The uip_arp_timer() function should be called every ten seconds. It + is responsible for flushing old entries in the ARP table. */ +void uip_arp_timer(void); + +s8_t uip_arp_arpquery(struct uip_netif *netif,struct uip_ip_addr *ipaddr,struct uip_pbuf *q); + +s8_t uip_arp_arprequest(struct uip_netif *netif,struct uip_ip_addr *ipaddr); + +#endif /* __UIP_ARP_H__ */ + + diff --git a/wii/libogc/libdb/uIP/uip_icmp.c b/wii/libogc/libdb/uIP/uip_icmp.c new file mode 100644 index 0000000000..5c96e65355 --- /dev/null +++ b/wii/libogc/libdb/uIP/uip_icmp.c @@ -0,0 +1,101 @@ +#include +#include + +#include "uip_ip.h" +#include "uip_pbuf.h" +#include "uip_netif.h" +#include "uip_icmp.h" + +#if UIP_LOGGING == 1 +#include +#define UIP_LOG(m) uip_log(__FILE__,__LINE__,m) +#else +#define UIP_LOG(m) +#endif /* UIP_LOGGING == 1 */ + +#if UIP_STATISTICS == 1 +struct uip_stats uip_stat; +#define UIP_STAT(s) s +#else +#define UIP_STAT(s) +#endif /* UIP_STATISTICS == 1 */ + +void uip_icmpinput(struct uip_pbuf *p,struct uip_netif *inp) +{ + u8_t type; + u16_t hlen; + struct uip_ip_addr tmpaddr; + struct uip_ip_hdr *iphdr; + struct uip_icmp_echo_hdr *iecho; + + iphdr = p->payload; + hlen = UIP_IPH_HL(iphdr)*4; + if(uip_pbuf_header(p,-((s16_t)hlen)) || p->tot_lenpayload); + //code = *((u8_t*)p->payload+1); + switch(type) { + case UIP_ICMP_ECHO: + if(ip_addr_isbroadcast(&iphdr->dst,inp) || ip_addr_ismulticast(&iphdr->dst)) { + UIP_LOG("uip_icmpinput: Not echoing to broadcast pings.\n"); + uip_pbuf_free(p); + return; + } + + if(p->tot_lenpayload; + if(uip_ipchksum_pbuf(p)!=0) { + UIP_LOG("uip_icmpinput: checksum failed for received ICMP echo.\n"); + uip_pbuf_free(p); + return; + } + + tmpaddr.addr = iphdr->src.addr; + iphdr->src.addr = iphdr->dst.addr; + iphdr->dst.addr = tmpaddr.addr; + UIP_ICMPH_TYPE_SET(iecho,UIP_ICMP_ER); + + if(iecho->chksum>=htons(0xffff-(UIP_ICMP_ECHO<<8))) iecho->chksum += htons(UIP_ICMP_ECHO<<8)+1; + else iecho->chksum += htons(UIP_ICMP_ECHO<<8); + + uip_pbuf_header(p,hlen); + uip_ipoutput_if(p,&iphdr->src,NULL,UIP_IPH_TTL(iphdr),0,UIP_PROTO_ICMP,inp); + break; + default: + UIP_LOG("uip_icmpinput: ICMP type/code not supported.\n"); + break; + } + uip_pbuf_free(p); +} + +void uip_icmp_destunreach(struct uip_pbuf *p,enum uip_icmp_dur_type t) +{ + struct uip_pbuf *q; + struct uip_ip_hdr *iphdr; + struct uip_icmp_dur_hdr *idur; + + q = uip_pbuf_alloc(UIP_PBUF_IP,sizeof(struct uip_icmp_dur_hdr)+UIP_IP_HLEN+8,UIP_PBUF_RAM); + + iphdr = p->payload; + idur = q->payload; + + UIP_ICMPH_TYPE_SET(idur,UIP_ICMP_DUR); + UIP_ICMPH_CODE_SET(idur,t); + + UIP_MEMCPY((u8_t*)q->payload+sizeof(struct uip_icmp_dur_hdr),p->payload,UIP_IP_HLEN+8); + + idur->chksum = 0; + idur->chksum = uip_ipchksum(idur,q->len); + + uip_ipoutput(q,NULL,&iphdr->src,UIP_ICMP_TTL,0,UIP_PROTO_ICMP); + uip_pbuf_free(q); +} diff --git a/wii/libogc/libdb/uIP/uip_icmp.h b/wii/libogc/libdb/uIP/uip_icmp.h new file mode 100644 index 0000000000..42928a0fab --- /dev/null +++ b/wii/libogc/libdb/uIP/uip_icmp.h @@ -0,0 +1,60 @@ +#ifndef __UIP_ICMP_H__ +#define __UIP_ICMP_H__ + +#include "uip.h" +#include "uip_arch.h" + +#define UIP_ICMP_TTL 255 + +#define UIP_ICMP_ER 0 /* echo reply */ +#define UIP_ICMP_DUR 3 /* destination unreachable */ +#define UIP_ICMP_SQ 4 /* source quench */ +#define UIP_ICMP_RD 5 /* redirect */ +#define UIP_ICMP_ECHO 8 /* echo */ +#define UIP_ICMP_TE 11 /* time exceeded */ +#define UIP_ICMP_PP 12 /* parameter problem */ +#define UIP_ICMP_TS 13 /* timestamp */ +#define UIP_ICMP_TSR 14 /* timestamp reply */ +#define UIP_ICMP_IRQ 15 /* information request */ +#define UIP_ICMP_IR 16 /* information reply */ + +#define UIP_ICMPH_TYPE(hdr) (ntohs((hdr)->_type_code) >> 8) +#define UIP_ICMPH_CODE(hdr) (ntohs((hdr)->_type_code) & 0xff) + +#define UIP_ICMPH_TYPE_SET(hdr, type) ((hdr)->_type_code = htons(UIP_ICMPH_CODE(hdr) | ((type) << 8))) +#define UIP_ICMPH_CODE_SET(hdr, code) ((hdr)->_type_code = htons((code) | (UIP_ICMPH_TYPE(hdr) << 8))) + +enum uip_icmp_dur_type { + UIP_ICMP_DUR_NET = 0, /* net unreachable */ + UIP_ICMP_DUR_HOST = 1, /* host unreachable */ + UIP_ICMP_DUR_PROTO = 2, /* protocol unreachable */ + UIP_ICMP_DUR_PORT = 3, /* port unreachable */ + UIP_ICMP_DUR_FRAG = 4, /* fragmentation needed and DF set */ + UIP_ICMP_DUR_SR = 5 /* source route failed */ +}; + +PACK_STRUCT_BEGIN +struct uip_icmp_echo_hdr { + PACK_STRUCT_FIELD(u16_t _type_code); + PACK_STRUCT_FIELD(u16_t chksum); + PACK_STRUCT_FIELD(u16_t id); + PACK_STRUCT_FIELD(u16_t seqno); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END + +PACK_STRUCT_BEGIN +struct uip_icmp_dur_hdr { + PACK_STRUCT_FIELD(u16_t _type_code); + PACK_STRUCT_FIELD(u16_t chksum); + PACK_STRUCT_FIELD(u32_t unused); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END + +struct uip_pbuf; +struct uip_netif; + + +void uip_icmpinput(struct uip_pbuf *p,struct uip_netif *inp); +void uip_icmp_destunreach(struct uip_pbuf *p,enum uip_icmp_dur_type t); + +#endif diff --git a/wii/libogc/libdb/uIP/uip_ip.c b/wii/libogc/libdb/uIP/uip_ip.c new file mode 100644 index 0000000000..baac2014b9 --- /dev/null +++ b/wii/libogc/libdb/uIP/uip_ip.c @@ -0,0 +1,490 @@ +#include +#include +#include + +#include "uip_ip.h" +#include "uip_tcp.h" +#include "uip_icmp.h" +#include "uip_netif.h" +#include "uip_pbuf.h" + +#if UIP_LOGGING == 1 +#include +#define UIP_LOG(m) uip_log(__FILE__,__LINE__,m) +#else +#define UIP_LOG(m) +#endif /* UIP_LOGGING == 1 */ + +#if UIP_ERRORING == 1 +#include +#define UIP_ERROR(m) uip_log(__FILE__,__LINE__,m) +#else +#define UIP_ERROR(m) +#endif /* UIP_ERRORING == 1 */ + +#if UIP_STATISTICS == 1 +struct uip_stats uip_stat; +#define UIP_STAT(s) s +#else +#define UIP_STAT(s) +#endif /* UIP_STATISTICS == 1 */ + +const struct uip_ip_addr ipaddr_any = { 0x0000000UL }; +const struct uip_ip_addr ipaddr_broadcast = { 0xffffffffUL }; + +#if UIP_IP_REASSEMBLY + +#define UIP_REASS_FLAG_LASTFRAG 0x01 +#define UIP_REASS_BUFSIZE 5760 + +static u8_t uip_reassbuf[UIP_IP_HLEN+UIP_REASS_BUFSIZE]; +static u8_t uip_reassbitmap[UIP_REASS_BUFSIZE / (8 * 8)]; +static const u8_t bitmap_bits[8] = {0xff, 0x7f, 0x3f, 0x1f, 0x0f, 0x07, 0x03, 0x01}; +static u16_t uip_reasslen; +static u8_t uip_reassflags; +static u8_t uip_reasstmr; +static s64 uip_reasstime = 0; + +extern s64 gettime(); + +static struct uip_pbuf* uip_copyfrom_pbuf(struct uip_pbuf *p,u16_t *offset,u8_t *buffer,u16_t len) +{ + u16_t l; + + p->payload = (u8_t*)p->payload+(*offset); + p->len -= (*offset); + while(len) { + l = lenlen?len:p->len; + UIP_MEMCPY(buffer,p->payload,l); + buffer += l; + len -= l; + if(len) p = p->next; + else *offset = l; + } + return p; +} + +static struct uip_pbuf* uip_ipreass(struct uip_pbuf *p) +{ + u16_t offset, len; + u16_t i; + struct uip_pbuf *q; + struct uip_ip_hdr *iphdr,*fraghdr; + + /* If ip_reasstmr is zero, no packet is present in the buffer, so we + write the IP header of the fragment into the reassembly + buffer. The timer is updated with the maximum age. */ + iphdr = (struct uip_ip_hdr*)uip_reassbuf; + fraghdr = (struct uip_ip_hdr*)p->payload; + if(uip_reasstmr == 0) { + UIP_MEMCPY(iphdr, fraghdr, UIP_IP_HLEN); + uip_reasstmr = UIP_REASS_MAXAGE; + uip_reassflags = 0; + uip_reasstime = gettime(); + /* Clear the bitmap. */ + UIP_MEMSET(uip_reassbitmap, 0,sizeof(uip_reassbitmap)); + } + + /* Check if the incoming fragment matches the one currently present + in the reasembly buffer. If so, we proceed with copying the + fragment into the buffer. */ + if(ip_addr_cmp(&iphdr->src,&fraghdr->src) + && ip_addr_cmp(&iphdr->dst,&fraghdr->dst) + && UIP_IPH_ID(iphdr) == UIP_IPH_ID(fraghdr)) { + + len = ntohs(UIP_IPH_LEN(fraghdr)) - UIP_IPH_HL(fraghdr)*4; + offset = (ntohs(UIP_IPH_OFFSET(fraghdr))&UIP_IP_OFFMASK)*8; + + /* If the offset or the offset + fragment length overflows the + reassembly buffer, we discard the entire packet. */ + if(offset > UIP_REASS_BUFSIZE || + offset + len > UIP_REASS_BUFSIZE) { + uip_reasstmr = 0; + uip_reasstime = 0; + goto nullreturn; + } + + /* Copy the fragment into the reassembly buffer, at the right + offset. */ + i = UIP_IPH_HL(fraghdr)*4; + uip_copyfrom_pbuf(p,&i,&uip_reassbuf[UIP_IP_HLEN+offset],len); + + /* Update the bitmap. */ + if(offset / (8 * 8) == (offset + len) / (8 * 8)) { + /* If the two endpoints are in the same byte, we only update + that byte. */ + + uip_reassbitmap[offset / (8 * 8)] |= + bitmap_bits[(offset / 8 ) & 7] & + ~bitmap_bits[((offset + len) / 8 ) & 7]; + } else { + /* If the two endpoints are in different bytes, we update the + bytes in the endpoints and fill the stuff inbetween with + 0xff. */ + uip_reassbitmap[offset / (8 * 8)] |= + bitmap_bits[(offset / 8 ) & 7]; + for(i = 1 + offset / (8 * 8); i < (offset + len) / (8 * 8); ++i) { + uip_reassbitmap[i] = 0xff; + } + uip_reassbitmap[(offset + len) / (8 * 8)] |= + ~bitmap_bits[((offset + len) / 8 ) & 7]; + } + + /* If this fragment has the More Fragments flag set to zero, we + know that this is the last fragment, so we can calculate the + size of the entire packet. We also set the + IP_REASS_FLAG_LASTFRAG flag to indicate that we have received + the final fragment. */ + + if((ntohs(UIP_IPH_OFFSET(fraghdr))&UIP_IP_MF)==0) { + uip_reassflags |= UIP_REASS_FLAG_LASTFRAG; + uip_reasslen = offset + len; + } + + /* Finally, we check if we have a full packet in the buffer. We do + this by checking if we have the last fragment and if all bits + in the bitmap are set. */ + if(uip_reassflags & UIP_REASS_FLAG_LASTFRAG) { + /* Check all bytes up to and including all but the last byte in + the bitmap. */ + for(i = 0; i < uip_reasslen / (8 * 8) - 1; ++i) { + if(uip_reassbitmap[i] != 0xff) { + goto nullreturn; + } + } + /* Check the last byte in the bitmap. It should contain just the + right amount of bits. */ + if(uip_reassbitmap[uip_reasslen / (8 * 8)] != + (u8_t)~bitmap_bits[uip_reasslen / 8 & 7]) { + goto nullreturn; + } + + uip_reasslen += UIP_IP_HLEN; + + /* Pretend to be a "normal" (i.e., not fragmented) IP packet + from now on. */ + UIP_IPH_LEN_SET(iphdr,htons(uip_reasslen)); + UIP_IPH_OFFSET_SET(iphdr,0); + UIP_IPH_CHKSUM_SET(iphdr,0); + UIP_IPH_CHKSUM_SET(iphdr,uip_ipchksum(iphdr,UIP_IP_HLEN)); + + /* If we have come this far, we have a full packet in the + buffer, so we allocate a pbuf and copy the packet into it. We + also reset the timer. */ + uip_reasstmr = 0; + uip_reasstime = 0; + uip_pbuf_free(p); + p = uip_pbuf_alloc(UIP_PBUF_LINK,uip_reasslen,UIP_PBUF_POOL); + if(p==NULL) return NULL; + + i = 0; + for(q=p;q!=NULL;q=q->next) { + UIP_MEMCPY(q->payload,&uip_reassbuf[i],((q->len>(uip_reasslen-i))?(uip_reasslen-i):q->len)); + i += q->len; + } + return p; + } + } + + nullreturn: + uip_pbuf_free(p); + return NULL; +} +#endif /* UIP_IP_REASSEMBLY */ + +#if UIP_IP_FRAG +#define MAX_MTU 1500 +static u8_t buf[MEM_ALIGN_SIZE(MAX_MTU)]; + +s8_t uip_ipfrag(struct uip_pbuf *p,struct uip_netif *netif,struct uip_ip_addr *ipaddr) +{ + struct uip_pbuf *rambuf; + struct uip_pbuf *header; + struct uip_ip_hdr *iphdr; + u16_t left,cop,ofo,omf,last,tmp; + u16_t mtu = netif->mtu; + u16_t poff = UIP_IP_HLEN; + u16_t nfb = 0; + + rambuf = uip_pbuf_alloc(UIP_PBUF_LINK,0,UIP_PBUF_REF); + rambuf->tot_len = rambuf->len = mtu; + rambuf->payload = MEM_ALIGN(buf); + + iphdr = rambuf->payload; + UIP_MEMCPY(iphdr,p->payload,UIP_IP_HLEN); + + tmp = ntohs(UIP_IPH_OFFSET(iphdr)); + ofo = tmp&UIP_IP_OFFMASK; + omf = tmp&UIP_IP_MF; + + left = p->tot_len - UIP_IP_HLEN; + while(left) { + last = (left<=(mtu-UIP_IP_HLEN)); + + ofo += nfb; + tmp = omf|(UIP_IP_OFFMASK&ofo); + + if(!last) tmp |= UIP_IP_MF; + UIP_IPH_OFFSET_SET(iphdr,htons(tmp)); + + nfb = (mtu - UIP_IP_HLEN)/8; + cop = last?left:nfb*8; + + p = uip_copyfrom_pbuf(p,&poff,(u8_t*)iphdr+UIP_IP_HLEN,cop); + + UIP_IPH_LEN_SET(iphdr,htons(cop+UIP_IP_HLEN)); + UIP_IPH_CHKSUM_SET(iphdr,0); + UIP_IPH_CHKSUM_SET(iphdr,uip_ipchksum(iphdr,UIP_IP_HLEN)); + + if(last) uip_pbuf_realloc(rambuf,left+UIP_IP_HLEN); + + header = uip_pbuf_alloc(UIP_PBUF_LINK,0,UIP_PBUF_RAM); + uip_pbuf_chain(header,rambuf); + netif->output(netif,header,ipaddr); + uip_pbuf_free(header); + + left -= cop; + } + uip_pbuf_free(rambuf); + return UIP_ERR_OK; +} +#endif /* UIP_IP_FRAG */ + +struct uip_netif* uip_iproute(struct uip_ip_addr *dst) +{ + struct uip_netif *netif; + + for(netif=uip_netif_list;netif!=NULL;netif=netif->next) { + if(ip_addr_netcmp(dst,&netif->ip_addr,&netif->netmask)) return netif; + } + + return uip_netif_default; +} + +u8_t uip_ipaddr_isbroadcast(struct uip_ip_addr *addr,struct uip_netif *netif) +{ + if(addr->addr==ipaddr_broadcast.addr + || addr->addr==ipaddr_any.addr) + return 1; + else if(!(netif->flags&UIP_NETIF_FLAG_BROADCAST)) + return 0; + else if(addr->addr==netif->ip_addr.addr) + return 0; + else if(ip_addr_netcmp(addr,&netif->ip_addr,&netif->netmask) + && ((addr->addr&~netif->netmask.addr)==(ipaddr_broadcast.addr&~netif->netmask.addr))) + return 1; + else + return 0; +} + +s8_t uip_ipinput(struct uip_pbuf *p,struct uip_netif *inp) +{ + u16_t iphdr_len; + struct uip_ip_hdr *iphdr; + struct uip_netif *netif; + + iphdr = p->payload; + if(UIP_IPH_V(iphdr)!=4) { + UIP_ERROR("uip_ipinput: ip packet dropped due to bad version number.\n"); + uip_pbuf_free(p); + return 0; + } + + iphdr_len = UIP_IPH_HL(iphdr); + iphdr_len *= 4; + + if(iphdr_len>p->len) { + UIP_ERROR("uip_ipinput: ip packet dropped due to too small packet size.\n"); + uip_pbuf_free(p); + return 0; + } + + if(uip_ipchksum(iphdr,iphdr_len)!=0) { + UIP_STAT(++uip_stat.ip.drop); + UIP_STAT(++uip_stat.ip.chkerr); + UIP_ERROR("uip_ipinput: bad checksum.\n"); + uip_pbuf_free(p); + return 0; + } + + uip_pbuf_realloc(p,ntohs(UIP_IPH_LEN(iphdr))); + + for(netif=uip_netif_list;netif!=NULL;netif=netif->next) { + if(uip_netif_isup(netif) && !ip_addr_isany(&netif->ip_addr)) { + if(ip_addr_cmp(&iphdr->dst,&netif->ip_addr) || + ip_addr_isbroadcast(&iphdr->dst,netif)) break; + } + } + + if(!netif) { + UIP_ERROR("uip_ipinput: no route found.\n"); + uip_pbuf_free(p); + return 0; + } + + if((UIP_IPH_OFFSET(iphdr)&htons(UIP_IP_OFFMASK|UIP_IP_MF))!=0) { +#if UIP_IP_REASSEMBLY + p = uip_ipreass(p); + if(p==NULL) return UIP_ERR_OK; + + iphdr = (struct uip_ip_hdr*)p->payload; +#else + uip_pbuf_free(p); + UIP_STAT(++uip_stat.ip.drop); + UIP_ERROR("ip: fragment dropped.\n"); + return 0; +#endif + } + + switch(UIP_IPH_PROTO(iphdr)) { + case UIP_PROTO_TCP: + uip_tcpinput(p,inp); + break; + case UIP_PROTO_ICMP: + uip_icmpinput(p,inp); + break; + default: + UIP_LOG("uip_ipinput: Unsupported protocol.\n"); + if(!ip_addr_isbroadcast(&(iphdr->dst),inp) + && !ip_addr_ismulticast(&(iphdr->dst))) { + p->payload = iphdr; + uip_icmp_destunreach(p,UIP_ICMP_DUR_PROTO); + } + uip_pbuf_free(p); + break; + } + return 0; +} + +s8_t uip_ipoutput_if(struct uip_pbuf *p,struct uip_ip_addr *src,struct uip_ip_addr *dst,u8_t ttl,u8_t tos,u8_t proto,struct uip_netif *netif) +{ + struct uip_ip_hdr *iphdr = NULL; + u16_t ip_id = 0; + + if(dst!=NULL) { + if(uip_pbuf_header(p,UIP_IP_HLEN)) { + UIP_ERROR("uip_ipoutput_if: not enough room for IP header in pbuf.\n"); + return UIP_ERR_BUF; + } + + iphdr = p->payload; + + UIP_IPH_TTL_SET(iphdr,ttl); + UIP_IPH_PROTO_SET(iphdr,proto); + + ip_addr_set(&iphdr->dst,dst); + + UIP_IPH_VHLTOS_SET(iphdr,4,(UIP_IP_HLEN/4),tos); + UIP_IPH_LEN_SET(iphdr,htons(p->tot_len)); + UIP_IPH_OFFSET_SET(iphdr,htons(UIP_IP_DF)); + UIP_IPH_ID_SET(iphdr,htons(ip_id)); + ++ip_id; + + if(ip_addr_isany(src)) ip_addr_set(&iphdr->src,&netif->ip_addr); + else ip_addr_set(&iphdr->src,src); + + UIP_IPH_CHKSUM_SET(iphdr,0); + UIP_IPH_CHKSUM_SET(iphdr,uip_ipchksum(iphdr,UIP_IP_HLEN)); + } else { + iphdr = p->payload; + dst = &iphdr->dst; + } +#if UIP_IP_FRAG + if(netif->mtu && p->tot_len>netif->mtu) + return uip_ipfrag(p,netif,dst); +#endif + return netif->output(netif,p,dst); +} + +s8_t uip_ipoutput(struct uip_pbuf *p,struct uip_ip_addr *src,struct uip_ip_addr *dst,u8_t ttl,u8_t tos,u8_t proto) +{ + struct uip_netif *netif; + + if((netif=uip_iproute(dst))==NULL) { + UIP_ERROR("uip_ipoutput: No route found.\n"); + return UIP_ERR_RTE; + } + return uip_ipoutput_if(p,src,dst,ttl,tos,proto,netif); +} + +void uip_ipinit() +{ + +} + +s32_t uip_ipaton(const u8_t *cp,struct in_addr *addr) +{ + u32_t val; + u8_t c; + u32_t parts[4]; + u32_t *pp = parts; + int base,n; + + c = *cp; + for(;;) { + if(!isdigit(c)) return 0; + + val = 0; base = 10; + if(c=='0') { + c = *++cp; + if(c=='x' || c=='X') + base = 16, c = *++cp; + else + base = 8; + } + for(;;) { + if(isdigit(c)) { + val = (val*base)+(int)(c-'0'); + c = *++cp; + } else if(base==16 && isxdigit(c)) { + val = (val<<4)|(int)(c+10-(islower(c)?'a':'A')); + c = *++cp; + } else + break; + } + if(c=='.') { + if(pp>=parts+3) return 0; + *pp++ = val; + c = *++cp; + } else + break; + } + + if(c!='\0' && (!isascii(c) || isspace(c))) return 0; + + n = pp-parts+1; + switch(n) { + case 0: + return 0; + case 1: + break; + case 2: + if(val>0x00ffffff) return 0; + + val |= (parts[0]<<24); + break; + case 3: + if(val>0x0000ffff) return 0; + + val |= (parts[0]<<24)|(parts[1]<<16); + break; + case 4: + if(val>0x000000ff) return 0; + + val |= (parts[0]<<24)|(parts[1]<<16)|(parts[2]<<8); + break; + } + if(addr) + addr->s_addr = htonl(val); + + return 1; +} + +u32_t uip_ipaddr(const u8_t *cp) +{ + struct in_addr val; + + if(uip_ipaton(cp,&val)) return (val.s_addr); + + return (UIP_INADDR_NONE); +} diff --git a/wii/libogc/libdb/uIP/uip_ip.h b/wii/libogc/libdb/uIP/uip_ip.h new file mode 100644 index 0000000000..366829efee --- /dev/null +++ b/wii/libogc/libdb/uIP/uip_ip.h @@ -0,0 +1,135 @@ +#ifndef __UIP_IP_H__ +#define __UIP_IP_H__ + +#include "uip.h" + +#define UIP_INADDR_NONE ((u32_t) 0xffffffff) /* 255.255.255.255 */ +#define UIP_INADDR_LOOPBACK ((u32_t) 0x7f000001) /* 127.0.0.1 */ + +#define UIP_IPH_V(hdr) (ntohs((hdr)->_v_hl_tos) >> 12) +#define UIP_IPH_HL(hdr) ((ntohs((hdr)->_v_hl_tos) >> 8) & 0x0f) +#define UIP_IPH_TOS(hdr) (ntohs((hdr)->_v_hl_tos) & 0xff) +#define UIP_IPH_LEN(hdr) ((hdr)->_len) +#define UIP_IPH_ID(hdr) ((hdr)->_id) +#define UIP_IPH_OFFSET(hdr) ((hdr)->_offset) +#define UIP_IPH_TTL(hdr) (ntohs((hdr)->_ttl_proto) >> 8) +#define UIP_IPH_PROTO(hdr) (ntohs((hdr)->_ttl_proto) & 0xff) +#define UIP_IPH_CHKSUM(hdr) ((hdr)->_chksum) + +#define UIP_IPH_VHLTOS_SET(hdr, v, hl, tos) (hdr)->_v_hl_tos = (htons(((v) << 12) | ((hl) << 8) | (tos))) +#define UIP_IPH_LEN_SET(hdr, len) (hdr)->_len = (len) +#define UIP_IPH_ID_SET(hdr, id) (hdr)->_id = (id) +#define UIP_IPH_OFFSET_SET(hdr, off) (hdr)->_offset = (off) +#define UIP_IPH_TTL_SET(hdr, ttl) (hdr)->_ttl_proto = (htons(UIP_IPH_PROTO(hdr) | ((ttl) << 8))) +#define UIP_IPH_PROTO_SET(hdr, proto) (hdr)->_ttl_proto = (htons((proto) | (UIP_IPH_TTL(hdr) << 8))) +#define UIP_IPH_CHKSUM_SET(hdr, chksum) (hdr)->_chksum = (chksum) + +/* + * Option flags per-socket. These are the same like SO_XXX. + */ +#define UIP_SOF_DEBUG (u16_t)0x0001U /* turn on debugging info recording */ +#define UIP_SOF_ACCEPTCONN (u16_t)0x0002U /* socket has had listen() */ +#define UIP_SOF_REUSEADDR (u16_t)0x0004U /* allow local address reuse */ +#define UIP_SOF_KEEPALIVE (u16_t)0x0008U /* keep connections alive */ +#define UIP_SOF_DONTROUTE (u16_t)0x0010U /* just use interface addresses */ +#define UIP_SOF_BROADCAST (u16_t)0x0020U /* permit sending of broadcast msgs */ +#define UIP_SOF_USELOOPBACK (u16_t)0x0040U /* bypass hardware when possible */ +#define UIP_SOF_LINGER (u16_t)0x0080U /* linger on close if data present */ +#define UIP_SOF_OOBINLINE (u16_t)0x0100U /* leave received OOB data in line */ +#define UIP_SOF_REUSEPORT (u16_t)0x0200U /* allow local address & port reuse */ + +#define IP4_ADDR(ipaddr, a,b,c,d) (ipaddr)->addr = htonl(((u32_t)(a & 0xff) << 24) | ((u32_t)(b & 0xff) << 16) | \ + ((u32_t)(c & 0xff) << 8) | (u32_t)(d & 0xff)) + +#define ip_addr_set(dest, src) (dest)->addr = \ + ((src) == NULL? 0:\ + (src)->addr) + +/** + * Determine if two address are on the same network. + * + * @arg addr1 IP address 1 + * @arg addr2 IP address 2 + * @arg mask network identifier mask + * @return !0 if the network identifiers of both address match + */ +#define ip_addr_netcmp(addr1, addr2, mask) (((addr1)->addr & \ + (mask)->addr) == \ + ((addr2)->addr & \ + (mask)->addr)) +#define ip_addr_cmp(addr1, addr2) ((addr1)->addr == (addr2)->addr) + +#define ip_addr_isany(addr1) ((addr1) == NULL || (addr1)->addr == 0) + +#define ip_addr_isbroadcast uip_ipaddr_isbroadcast + +#define ip_addr_ismulticast(addr1) (((addr1)->addr & ntohl(0xf0000000)) == ntohl(0xe0000000)) + +#define ip4_addr1(ipaddr) ((u16_t)(ntohl((ipaddr)->addr) >> 24) & 0xff) +#define ip4_addr2(ipaddr) ((u16_t)(ntohl((ipaddr)->addr) >> 16) & 0xff) +#define ip4_addr3(ipaddr) ((u16_t)(ntohl((ipaddr)->addr) >> 8) & 0xff) +#define ip4_addr4(ipaddr) ((u16_t)(ntohl((ipaddr)->addr)) & 0xff) + +#ifndef HAVE_IN_ADDR +#define HAVE_IN_ADDR +struct in_addr { + u32 s_addr; +}; +#endif + +/* The IP Address */ +PACK_STRUCT_BEGIN +struct uip_ip_addr { + PACK_STRUCT_FIELD(u32_t addr); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END + +PACK_STRUCT_BEGIN +struct uip_ip_addr2 { + PACK_STRUCT_FIELD(u16_t addrw[2]); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END + +/* The IP Header */ +PACK_STRUCT_BEGIN +struct uip_ip_hdr { +#define UIP_IP_RF 0x8000 +#define UIP_IP_DF 0x4000 +#define UIP_IP_MF 0x2000 +#define UIP_IP_OFFMASK 0x1fff + PACK_STRUCT_FIELD(u16_t _v_hl_tos); + PACK_STRUCT_FIELD(u16_t _len); + PACK_STRUCT_FIELD(u16_t _id); + PACK_STRUCT_FIELD(u16_t _offset); + PACK_STRUCT_FIELD(u16_t _ttl_proto); + PACK_STRUCT_FIELD(u16_t _chksum); + + PACK_STRUCT_FIELD(struct uip_ip_addr src); + PACK_STRUCT_FIELD(struct uip_ip_addr dst); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END + +#define UIP_IP_PCB \ + struct uip_ip_addr local_ip; \ + struct uip_ip_addr remote_ip; \ + u16_t so_options; \ + u8_t tos; \ + u8_t ttl + +struct uip_pbuf; +struct uip_netif; +struct ip_addr; + + +void uip_ipinit(); + +u32_t uip_ipaddr(const u8_t *cp); +s32_t uip_ipaton(const u8_t *cp,struct in_addr *addr); +s8_t uip_ipinput(struct uip_pbuf *p,struct uip_netif *inp); +s8_t uip_ipoutput(struct uip_pbuf *p,struct uip_ip_addr *src,struct uip_ip_addr *dst,u8_t ttl,u8_t tos,u8_t proto); +s8_t uip_ipoutput_if(struct uip_pbuf *p,struct uip_ip_addr *src,struct uip_ip_addr *dst,u8_t ttl,u8_t tos,u8_t proto,struct uip_netif *netif); +struct uip_netif* uip_iproute(struct uip_ip_addr *dst); +u8_t uip_ipaddr_isbroadcast(struct uip_ip_addr *addr,struct uip_netif *netif); + + +#endif diff --git a/wii/libogc/libdb/uIP/uip_netif.c b/wii/libogc/libdb/uIP/uip_netif.c new file mode 100644 index 0000000000..5c7e1b77ff --- /dev/null +++ b/wii/libogc/libdb/uIP/uip_netif.c @@ -0,0 +1,133 @@ +#include +#include + +#include "uip_ip.h" +#include "uip_tcp.h" +#include "uip_pbuf.h" +#include "uip_netif.h" + +#if UIP_LOGGING == 1 +#include +#define UIP_LOG(m) uip_log(__FILE__,__LINE__,m) +#else +#define UIP_LOG(m) +#endif /* UIP_LOGGING == 1 */ + +#if UIP_ERRORING == 1 +#include +#define UIP_ERROR(m) uip_log(__FILE__,__LINE__,m) +#else +#define UIP_ERROR(m) +#endif /* UIP_ERRORING == 1 */ + +#if UIP_STATISTICS == 1 +struct uip_stats uip_stat; +#define UIP_STAT(s) s +#else +#define UIP_STAT(s) +#endif /* UIP_STATISTICS == 1 */ + + +struct uip_netif *uip_netif_list; +struct uip_netif *uip_netif_default; + +void uip_netif_init() +{ + uip_netif_list = uip_netif_default = NULL; +} + +void uip_netif_setup(struct uip_netif *netif) +{ + netif->flags |= UIP_NETIF_FLAG_UP; +} + +u8_t uip_netif_isup(struct uip_netif *netif) +{ + return (netif->flags&UIP_NETIF_FLAG_UP); +} + +struct uip_netif* uip_netif_add(struct uip_netif *netif,struct uip_ip_addr *ipaddr,struct uip_ip_addr *netmask,struct uip_ip_addr *gw,void *state,s8_t (*init)(struct uip_netif *netif),s8_t (*input)(struct uip_pbuf *p,struct uip_netif *netif)) +{ + static int netif_num = 0; + + netif->state = state; + netif->num = netif_num++; + netif->input = input; + + uip_netif_setaddr(netif,ipaddr,netmask,gw); + + if(init(netif)!=0) return NULL; + + UIP_LOG("uip_netif_add: netif is up.\n"); + + netif->next = uip_netif_list; + uip_netif_list = netif; + + return netif; +} + +void uip_netif_setaddr(struct uip_netif *netif,struct uip_ip_addr *ipaddr,struct uip_ip_addr *netmask,struct uip_ip_addr *gw) +{ + uip_netif_setipaddr(netif,ipaddr); + uip_netif_setnetmask(netif,netmask); + uip_netif_setgw(netif,gw); +} + +void uip_netif_setipaddr(struct uip_netif *netif,struct uip_ip_addr *ipaddr) +{ +#if UIP_TCP + struct uip_tcp_pcb *pcb; + struct uip_tcp_pcb_listen *lpcb; + + if((ip_addr_cmp(ipaddr,&netif->ip_addr))==0) { + pcb = uip_tcp_active_pcbs; + while(pcb!=NULL) { + if(ip_addr_cmp(&pcb->local_ip,&netif->ip_addr)) { + struct uip_tcp_pcb *next = pcb->next; + pcb = next; + } else { + pcb = pcb->next; + } + } + for(lpcb=uip_tcp_listen_pcbs.listen_pcbs;lpcb!=NULL;lpcb=lpcb->next) { + if(ip_addr_cmp(&lpcb->local_ip,&netif->ip_addr)) { + ip_addr_set(&lpcb->local_ip,ipaddr); + } + } + } +#endif + ip_addr_set(&netif->ip_addr,ipaddr); +} + +void uip_netif_setnetmask(struct uip_netif *netif,struct uip_ip_addr *netmask) +{ + ip_addr_set(&netif->netmask,netmask); +} + +void uip_netif_setgw(struct uip_netif *netif,struct uip_ip_addr *gw) +{ + ip_addr_set(&netif->gw,gw); +} + +void uip_netif_setdefault(struct uip_netif *netif) +{ + uip_netif_default = netif; +} + +struct uip_netif* uip_netif_find(const char *name) +{ + u8_t num; + struct uip_netif *netif; + + if(name==NULL) return NULL; + + num = name[2] - '0'; + + for(netif=uip_netif_list;netif!=NULL;netif=netif->next) { + if(netif->num==num && + netif->name[0]==name[0] && + netif->name[1]==name[1]) return netif; + } + + return NULL; +} diff --git a/wii/libogc/libdb/uIP/uip_netif.h b/wii/libogc/libdb/uIP/uip_netif.h new file mode 100644 index 0000000000..364d825c88 --- /dev/null +++ b/wii/libogc/libdb/uIP/uip_netif.h @@ -0,0 +1,65 @@ +#ifndef __UIP_NETIF_H__ +#define __UIP_NETIF_H__ + +#include "uip.h" + +#define UIP_NETIF_MAX_HWADDR_LEN 6U + +/** TODO: define the use (where, when, whom) of netif flags */ + +/** whether the network interface is 'up'. this is + * a software flag used to control whether this network + * interface is enabled and processes traffic. + */ +#define UIP_NETIF_FLAG_UP 0x1U +/** if set, the netif has broadcast capability */ +#define UIP_NETIF_FLAG_BROADCAST 0x2U +/** if set, the netif is one end of a point-to-point connection */ +#define UIP_NETIF_FLAG_POINTTOPOINT 0x4U +/** if set, the interface is configured using DHCP */ +#define UIP_NETIF_FLAG_DHCP 0x08U +/** if set, the interface has an active link + * (set by the network interface driver) */ +#define UIP_NETIF_FLAG_LINK_UP 0x10U + +struct uip_netif; +struct uip_pbuf; +struct uip_ip_addr; + +struct uip_netif { + struct uip_netif *next; + + struct uip_ip_addr ip_addr; + struct uip_ip_addr netmask; + struct uip_ip_addr gw; + + s8_t (*input)(struct uip_pbuf *p,struct uip_netif *inp); + s8_t (*output)(struct uip_netif *netif,struct uip_pbuf *p,struct uip_ip_addr *ipaddr); + s8_t (*linkoutput)(struct uip_netif *netif,struct uip_pbuf *p); + + void *state; + + u8_t hwaddr_len; + u8_t hwaddr[UIP_NETIF_MAX_HWADDR_LEN]; + + u16_t mtu; + u8_t flags; + + s8_t name[2]; + u8_t num; +}; + +extern struct uip_netif *uip_netif_list; +extern struct uip_netif *uip_netif_default; + +void uip_netif_init(); +void uip_netif_setup(struct uip_netif *netif); +void uip_netif_setaddr(struct uip_netif *netif,struct uip_ip_addr *ipaddr,struct uip_ip_addr *netmask,struct uip_ip_addr *gw); +void uip_netif_setipaddr(struct uip_netif *netif,struct uip_ip_addr *ipaddr); +void uip_netif_setnetmask(struct uip_netif *netif,struct uip_ip_addr *netmask); +void uip_netif_setgw(struct uip_netif *netif,struct uip_ip_addr *gw); +void uip_netif_setdefault(struct uip_netif *netif); +u8_t uip_netif_isup(struct uip_netif *netif); +struct uip_netif* uip_netif_add(struct uip_netif *netif,struct uip_ip_addr *ipaddr,struct uip_ip_addr *netmask,struct uip_ip_addr *gw,void *state,s8_t (*init)(struct uip_netif *netif),s8_t (*input)(struct uip_pbuf *p,struct uip_netif *netif)); + +#endif diff --git a/wii/libogc/libdb/uIP/uip_pbuf.c b/wii/libogc/libdb/uIP/uip_pbuf.c new file mode 100644 index 0000000000..bb7612488a --- /dev/null +++ b/wii/libogc/libdb/uIP/uip_pbuf.c @@ -0,0 +1,287 @@ +#include +#include + +#include "memb.h" +#include "memr.h" +#include "uip_pbuf.h" + +#if UIP_LOGGING == 1 +#include +#define UIP_LOG(m) uip_log(__FILE__,__LINE__,m) +#else +#define UIP_LOG(m) +#endif /* UIP_LOGGING == 1 */ + +#if UIP_ERRORING == 1 +#include +#define UIP_ERROR(m) uip_log(__FILE__,__LINE__,m) +#else +#define UIP_ERROR(m) +#endif /* UIP_ERRORING == 1 */ + +#if UIP_STATISTICS == 1 +struct uip_stats uip_stat; +#define UIP_STAT(s) s +#else +#define UIP_STAT(s) +#endif /* UIP_STATISTICS == 1 */ + +MEMB(uip_pool_pbufs,sizeof(struct uip_pbuf)+UIP_PBUF_POOL_BUFSIZE,UIP_PBUF_POOL_NUM); +MEMB(uip_rom_pbufs,sizeof(struct uip_pbuf),UIP_PBUF_ROM_NUM); + +void uip_pbuf_init() +{ + memb_init(&uip_pool_pbufs); + memb_init(&uip_rom_pbufs); +} + +struct uip_pbuf* uip_pbuf_alloc(uip_pbuf_layer layer,u16_t len,uip_pbuf_flag flag) +{ + u16_t offset; + s32_t rem_len; + struct uip_pbuf *p,*q,*r; + + offset = 0; + switch(layer) { + case UIP_PBUF_TRANSPORT: + offset += UIP_TRANSPORT_HLEN; + case UIP_PBUF_IP: + offset += UIP_IP_HLEN; + case UIP_PBUF_LINK: + offset += UIP_LL_HLEN; + break; + case UIP_PBUF_RAW: + break; + default: + UIP_ERROR("uip_pbuf_alloc: bad pbuf layer.\n"); + return NULL; + } + + switch(flag) { + case UIP_PBUF_POOL: + p = memb_alloc(&uip_pool_pbufs); + if(p==NULL) { + UIP_ERROR("uip_pbuf_alloc: couldn't allocate pbuf(p) from pool\n"); + return NULL; + } + + p->next = NULL; + p->payload = MEM_ALIGN((void*)((u8_t*)p+(sizeof(struct uip_pbuf)+offset))); + p->tot_len = len; + p->len = (len>(UIP_PBUF_POOL_BUFSIZE-offset)?(UIP_PBUF_POOL_BUFSIZE-offset):len); + p->flags = UIP_PBUF_FLAG_POOL; + p->ref = 1; + + r = p; + rem_len = len - p->len; + while(rem_len>0) { + q = memb_alloc(&uip_pool_pbufs); + if(q==NULL) { + UIP_ERROR("uip_pbuf_alloc: couldn't allocate pbuf(q) from pool\n"); + uip_pbuf_free(p); + return NULL; + } + + q->next = NULL; + r->next = q; + q->tot_len = rem_len; + q->len = (rem_len>UIP_PBUF_POOL_BUFSIZE?UIP_PBUF_POOL_BUFSIZE:rem_len); + q->payload = (void*)((u8_t*)q+sizeof(struct uip_pbuf)); + q->flags = UIP_PBUF_FLAG_POOL; + q->ref = 1; + + rem_len -= q->len; + r = q; + } + break; + case UIP_PBUF_RAM: + p = memr_malloc(MEM_ALIGN_SIZE(sizeof(struct uip_pbuf)+offset)+MEM_ALIGN_SIZE(len)); + if(p==NULL) { + UIP_ERROR("uip_pbuf_alloc: couldn't allocate pbuf from ram\n"); + return NULL; + } + p->payload = MEM_ALIGN((u8_t*)p+sizeof(struct uip_pbuf)+offset); + p->len = p->tot_len = len; + p->next = NULL; + p->flags = UIP_PBUF_FLAG_RAM; + break; + case UIP_PBUF_ROM: + case UIP_PBUF_REF: + p = memb_alloc(&uip_rom_pbufs); + if(p==NULL) { + UIP_ERROR("uip_pbuf_alloc: couldn't allocate pbuf from rom/ref\n"); + return NULL; + } + p->payload = NULL; + p->next = NULL; + p->len = p->tot_len = len; + p->flags = (flag==UIP_PBUF_ROM?UIP_PBUF_FLAG_ROM:UIP_PBUF_FLAG_REF); + break; + default: + UIP_ERROR("uip_pbuf_alloc: bad flag value.\n"); + return NULL; + } + + p->ref = 1; + return p; +} + +u8_t uip_pbuf_free(struct uip_pbuf *p) +{ + u8_t cnt; + struct uip_pbuf *q; + + if(p==NULL) return 0; + + cnt = 0; + while(p!=NULL) { + p->ref--; + if(p->ref==0) { + q = p->next; + if(p->flags==UIP_PBUF_FLAG_POOL) { + memb_free(&uip_pool_pbufs,p); + } else if(p->flags==UIP_PBUF_FLAG_ROM || p->flags==UIP_PBUF_FLAG_REF) { + memb_free(&uip_rom_pbufs,p); + } else { + memr_free(p); + } + cnt++; + p = q; + } else + p = NULL; + } + return cnt; +} + +void uip_pbuf_realloc(struct uip_pbuf *p,u16_t new_len) +{ + u16_t rem_len; + s16_t grow; + struct uip_pbuf *q; + + if(new_len>=p->tot_len) return; + + grow = new_len - p->tot_len; + rem_len = new_len; + q = p; + while(rem_len>q->len) { + rem_len -= q->len; + q->tot_len += grow; + q = q->next; + } + + if(q->flags==UIP_PBUF_FLAG_RAM && rem_len!=q->len) + memr_realloc(q,(u8_t*)q->payload-(u8_t*)q+rem_len); + + q->len = rem_len; + q->tot_len = q->len; + + if(q->next!=NULL) uip_pbuf_free(q->next); + q->next = NULL; +} + +u8_t uip_pbuf_header(struct uip_pbuf *p,s16_t hdr_size_inc) +{ + void *payload; + + if(hdr_size_inc==0 || p==NULL) return 0; + + + payload = p->payload; + if(p->flags==UIP_PBUF_FLAG_POOL || p->flags==UIP_PBUF_FLAG_RAM) { + p->payload = (u8_t*)p->payload-hdr_size_inc; + if((u8_t*)p->payload<(u8_t*)p+sizeof(struct uip_pbuf)) { + p->payload = payload; + return 1; + } + } else if(p->flags==UIP_PBUF_FLAG_ROM || p->flags==UIP_PBUF_FLAG_REF) { + if(hdr_size_inc<0 && hdr_size_inc-p->len<=0) p->payload = (u8_t*)p->payload-hdr_size_inc; + else return 1; + } + p->tot_len += hdr_size_inc; + p->len += hdr_size_inc; + + return 0; +} + +u8_t uip_pbuf_clen(struct uip_pbuf *p) +{ + u8_t len; + + len = 0; + while(p!=NULL) { + len++; + p = p->next; + } + return len; +} + +void uip_pbuf_ref(struct uip_pbuf *p) +{ + if(p!=NULL) { + ++(p->ref); + } +} + +void uip_pbuf_cat(struct uip_pbuf *h,struct uip_pbuf *t) +{ + struct uip_pbuf *p; + + if(h==NULL || t==NULL) return; + + for(p=h;p->next!=NULL;p=p->next) { + p->tot_len += t->tot_len; + } + p->tot_len += t->tot_len; + p->next = t; +} + +void uip_pbuf_queue(struct uip_pbuf *p,struct uip_pbuf *n) +{ + if(p==NULL || n==NULL || p==n) return; + + while(p->next!=NULL) p = p->next; + + p->next = n; + uip_pbuf_ref(n); +} + +struct uip_pbuf* uip_pbuf_dequeue(struct uip_pbuf *p) +{ + struct uip_pbuf *q; + u8_t tail_gone = 1; + + if(p==NULL) return NULL; + + while(p->tot_len!=p->len) p = p->next; + + q = p->next; + if(q!=NULL) { + p->next = NULL; + tail_gone = uip_pbuf_free(q); + } + return (tail_gone>0?NULL:q); +} + +void uip_pbuf_chain(struct uip_pbuf *h,struct uip_pbuf *t) +{ + uip_pbuf_cat(h,t); + uip_pbuf_ref(t); +} + +struct uip_pbuf* uip_pbuf_dechain(struct uip_pbuf *p) +{ + struct uip_pbuf *q; + u8_t tail_gone = 1; + + q = p->next; + if(q!=NULL) { + q->tot_len = p->tot_len - p->len; + p->next = NULL; + p->tot_len = p->len; + + tail_gone = uip_pbuf_free(q); + } + + return (tail_gone>0?NULL:q); +} diff --git a/wii/libogc/libdb/uIP/uip_pbuf.h b/wii/libogc/libdb/uIP/uip_pbuf.h new file mode 100644 index 0000000000..c3e55af3cf --- /dev/null +++ b/wii/libogc/libdb/uIP/uip_pbuf.h @@ -0,0 +1,49 @@ +#ifndef __UIP_PBUF_H__ +#define __UIP_PBUF_H__ + +#include "uip.h" + +/* Definitions for the pbuf flag field. These are NOT the flags that + * are passed to pbuf_alloc(). */ +#define UIP_PBUF_FLAG_RAM 0x00U /* Flags that pbuf data is stored in RAM */ +#define UIP_PBUF_FLAG_ROM 0x01U /* Flags that pbuf data is stored in ROM */ +#define UIP_PBUF_FLAG_POOL 0x02U /* Flags that the pbuf comes from the pbuf pool */ +#define UIP_PBUF_FLAG_REF 0x04U /* Flags thet the pbuf payload refers to RAM */ + +typedef enum { + UIP_PBUF_TRANSPORT, + UIP_PBUF_IP, + UIP_PBUF_LINK, + UIP_PBUF_RAW +} uip_pbuf_layer; + +typedef enum { + UIP_PBUF_POOL, + UIP_PBUF_RAM, + UIP_PBUF_ROM, + UIP_PBUF_REF +} uip_pbuf_flag; + +struct uip_pbuf { + struct uip_pbuf *next; + void *payload; + u16_t tot_len; + u16_t len; + u16_t flags; + u16_t ref; +}; + +void uip_pbuf_init(); +struct uip_pbuf* uip_pbuf_alloc(uip_pbuf_layer layer,u16_t len,uip_pbuf_flag flag); +u8_t uip_pbuf_free(struct uip_pbuf *p); +void uip_pbuf_realloc(struct uip_pbuf *p,u16_t new_len); +u8_t uip_pbuf_header(struct uip_pbuf *p,s16_t hdr_size_inc); +void uip_pbuf_cat(struct uip_pbuf *h,struct uip_pbuf *t); +u8_t uip_pbuf_clen(struct uip_pbuf *p); +void uip_pbuf_queue(struct uip_pbuf *p,struct uip_pbuf *n); +void uip_pbuf_ref(struct uip_pbuf *p); +void uip_pbuf_chain(struct uip_pbuf *h,struct uip_pbuf *t); +struct uip_pbuf* uip_pbuf_dequeue(struct uip_pbuf *p); +struct uip_pbuf* uip_pbuf_dechain(struct uip_pbuf *p); + +#endif diff --git a/wii/libogc/libdb/uIP/uip_tcp.c b/wii/libogc/libdb/uIP/uip_tcp.c new file mode 100644 index 0000000000..004e2af978 --- /dev/null +++ b/wii/libogc/libdb/uIP/uip_tcp.c @@ -0,0 +1,1478 @@ +#include +#include + +#include "memb.h" +#include "uip.h" +#include "uip_arch.h" +#include "uip_ip.h" +#include "uip_tcp.h" +#include "uip_pbuf.h" +#include "uip_netif.h" + +#if UIP_LOGGING == 1 +#include +#define UIP_LOG(m) uip_log(__FILE__,__LINE__,m) +#else +#define UIP_LOG(m) +#endif /* UIP_LOGGING == 1 */ + +#if UIP_ERRORING == 1 +#include +#define UIP_ERROR(m) uip_log(__FILE__,__LINE__,m) +#else +#define UIP_ERROR(m) +#endif /* UIP_ERRORING == 1 */ + +#if UIP_STATISTICS == 1 +struct uip_stats uip_stat; +#define UIP_STAT(s) s +#else +#define UIP_STAT(s) +#endif /* UIP_STATISTICS == 1 */ + +static u8_t uip_tcp_timer; +static u8_t uip_flags,uip_recv_flags; +static u16_t uip_tcplen; +static u32_t uip_seqno,uip_ackno; + +static struct uip_tcpseg uip_inseg; + +static struct uip_pbuf *uip_recv_data = NULL; +static struct uip_ip_hdr *uip_iphdr = NULL; +static struct uip_tcp_hdr *uip_tcphdr = NULL; + +u32_t uip_tcp_ticks; +struct uip_tcp_pcb *uip_tcp_tmp_pcb = NULL; +struct uip_tcp_pcb *uip_tcp_input_pcb = NULL; +struct uip_tcp_pcb *uip_tcp_active_pcbs = NULL; +struct uip_tcp_pcb *uip_tcp_tw_pcbs = NULL; + +union uip_tcp_listen_pcbs_t uip_tcp_listen_pcbs; + +const u8_t uip_tcp_backoff[13] = { 1, 2, 3, 4, 5, 6, 7, 7, 7, 7, 7, 7, 7}; + +MEMB(uip_listen_tcp_pcbs,sizeof(struct uip_tcp_pcb_listen),UIP_LISTEN_TCP_PCBS); +MEMB(uip_tcp_pcbs,sizeof(struct uip_tcp_pcb),UIP_TCP_PCBS); +MEMB(uip_tcp_segs,sizeof(struct uip_tcpseg),UIP_TCP_SEGS); + +static s8_t uip_tcp_nullaccept(void *arg,struct uip_tcp_pcb *pcb,s8_t err); +static s8_t uip_tcp_nullrecv(void *arg,struct uip_tcp_pcb *pcb,struct uip_pbuf *p,s8_t err); + +static void uip_tcp_parseopt(struct uip_tcp_pcb *pcb); +static void uip_tcpoutput_segments(struct uip_tcpseg *seg,struct uip_tcp_pcb *pcb); +static s8_t uip_tcpinput_listen(struct uip_tcp_pcb_listen *pcb); +static s8_t uip_tcpinput_timewait(struct uip_tcp_pcb *pcb); +static s8_t uip_tcpprocess(struct uip_tcp_pcb *pcb); +static void uip_tcpreceive(struct uip_tcp_pcb *pcb); +static u16_t uip_tcp_newport(); + +s8_t uip_tcp_sendctrl(struct uip_tcp_pcb *pcb,u8_t flags) +{ + return uip_tcpenqueue(pcb,NULL,0,flags,1,NULL,0); +} + +s8_t uip_tcp_write(struct uip_tcp_pcb *pcb,const void *arg,u16_t len,u8_t copy) +{ + if(pcb->state==UIP_ESTABLISHED || pcb->state==UIP_CLOSE_WAIT || + pcb->state==UIP_SYN_SENT || pcb->state==UIP_SYN_RCVD) { + if(len>0) { + return uip_tcpenqueue(pcb,(void*)arg,len,0,copy,NULL,0); + } + return UIP_ERR_OK; + } + return UIP_ERR_CONN; +} + +s8_t uip_tcpenqueue(struct uip_tcp_pcb *pcb,void *arg,u16_t len,u8_t flags,u8_t copy,u8_t *optdata,u8_t optlen) +{ + struct uip_pbuf *p; + struct uip_tcpseg *seg,*useg,*queue = NULL; + u32_t left,seqno; + u16_t seglen; + void *ptr; + u8_t queue_len; + + if(len>pcb->snd_buf) { + UIP_ERROR("uip_tcpenqueue: too much data (len>pcb->snd_buf).\n"); + return UIP_ERR_MEM; + } + + left = len; + ptr = arg; + + seqno = pcb->snd_lbb; + queue_len = pcb->snd_queuelen; + + if(queue_len>=UIP_TCP_SND_QUEUELEN) { + UIP_ERROR("uip_tcpenqueue: too long queue."); + goto memerr; + } + useg = seg = queue = NULL; + seglen = 0; + while(queue==NULL || left>0) { + seglen = left>pcb->mss?pcb->mss:len; + seg = memb_alloc(&uip_tcp_segs); + if(seg==NULL) { + UIP_ERROR("uip_tcpenqueue: could not allocate memory for tcp_seg."); + goto memerr; + } + + seg->next = NULL; + seg->p = NULL; + + if(queue==NULL) queue = seg; + else useg->next = seg; + + useg = seg; + + if(optdata!=NULL) { + if((seg->p=uip_pbuf_alloc(UIP_PBUF_TRANSPORT,optlen,UIP_PBUF_RAM))==NULL) { + UIP_ERROR("uip_tcpenqueue: could not allocate memory for pbuf opdata."); + goto memerr; + } + ++queue_len; + seg->dataptr = seg->p->payload; + } else if(copy) { + if((seg->p=uip_pbuf_alloc(UIP_PBUF_TRANSPORT,seglen,UIP_PBUF_RAM))==NULL) { + UIP_ERROR("uip_tcpenqueue: could not allocate memory for pbuf copy size."); + goto memerr; + } + + ++queue_len; + if(ptr!=NULL) UIP_MEMCPY(seg->p->payload,ptr,seglen); + + seg->dataptr = seg->p->payload; + } else { + if((p=uip_pbuf_alloc(UIP_PBUF_TRANSPORT,seglen,UIP_PBUF_ROM))==NULL) { + UIP_ERROR("uip_tcpenqueue: could not allocate memory for zero-copy pbuf."); + goto memerr; + } + + ++queue_len; + p->payload = ptr; + seg->dataptr = ptr; + if((seg->p=uip_pbuf_alloc(UIP_PBUF_TRANSPORT,0,UIP_PBUF_RAM))==NULL) { + UIP_LOG("uip_tcpenqueue: could not allocate memory for header pbuf."); + uip_pbuf_free(p); + goto memerr; + } + + ++queue_len; + uip_pbuf_cat(seg->p,p); + p = NULL; + } + + if(queue_len>UIP_TCP_SND_QUEUELEN) { + UIP_ERROR("uip_tcpenqueue: queue too long."); + goto memerr; + } + + seg->len = seglen; + if(uip_pbuf_header(seg->p,UIP_TCP_HLEN)) { + UIP_ERROR("uip_tcpenqueue: no room for TCP header in pbuf."); + goto memerr; + } + + seg->tcphdr = seg->p->payload; + seg->tcphdr->src = htons(pcb->local_port); + seg->tcphdr->dst = htons(pcb->remote_port); + seg->tcphdr->seqno = htonl(seqno); + seg->tcphdr->urgp = 0; + UIP_TCPH_FLAGS_SET(seg->tcphdr,flags); + if(optdata==NULL) UIP_TCPH_HDRLEN_SET(seg->tcphdr,5); + else { + UIP_TCPH_HDRLEN_SET(seg->tcphdr,(5+(optlen/4))); + UIP_MEMCPY(seg->dataptr,optdata,optlen); + } + left -= seglen; + seqno += seglen; + ptr = (void*)((u8_t*)ptr+seglen); + } + + if(pcb->unsent==NULL) useg = NULL; + else { + for(useg=pcb->unsent;useg->next!=NULL;useg=useg->next); + } + + if(useg!=NULL && + UIP_TCP_TCPLEN(useg)!=0 && + !(UIP_TCPH_FLAGS(useg->tcphdr)&(UIP_TCP_SYN|UIP_TCP_FIN)) && + !(flags&(UIP_TCP_SYN|UIP_TCP_FIN)) && + useg->len+queue->len<=pcb->mss) { + + uip_pbuf_header(queue->p,-UIP_TCP_HLEN); + uip_pbuf_cat(useg->p,queue->p); + + useg->len += queue->len; + useg->next = queue->next; + if(seg==queue) seg = NULL; + + memb_free(&uip_tcp_segs,queue); + } else { + if(useg==NULL) pcb->unsent = queue; + else useg->next = queue; + } + + if(flags&UIP_TCP_SYN || flags&UIP_TCP_FIN) len++; + + pcb->snd_lbb += len; + pcb->snd_buf -= len; + pcb->snd_queuelen = queue_len; + + if(seg!=NULL && seglen>0 && seg->tcphdr!=NULL) UIP_TCPH_SET_FLAG(seg->tcphdr,UIP_TCP_PSH); + + return UIP_ERR_OK; +memerr: + if(queue!=NULL) uip_tcpsegs_free(queue); + return UIP_ERR_MEM; +} + +void uip_tcpinput(struct uip_pbuf *p,struct uip_netif *inp) +{ + s8_t err; + u8_t hdr_len; + struct uip_tcp_pcb *pcb,*prev; + struct uip_tcp_pcb_listen *lpcb; + + uip_iphdr = p->payload; + uip_tcphdr = (struct uip_tcp_hdr*)((u8_t*)p->payload+UIP_IPH_HL(uip_iphdr)*4); + + if(uip_pbuf_header(p,-((s16_t)(UIP_IPH_HL(uip_iphdr)*4))) || p->tot_lendst,inp) || + ip_addr_ismulticast(&uip_iphdr->dst)) { + uip_pbuf_free(p); + return; + } + + if(uip_chksum_pseudo(p,&uip_iphdr->src,&uip_iphdr->dst,UIP_PROTO_TCP,p->tot_len)!=0) { + UIP_LOG("uip_tcpinput: packet discarded due to failing checksum."); + uip_pbuf_free(p); + return; + } + + hdr_len = UIP_TCPH_HDRLEN(uip_tcphdr); + uip_pbuf_header(p,-(hdr_len*4)); + + uip_tcphdr->src = ntohs(uip_tcphdr->src); + uip_tcphdr->dst = ntohs(uip_tcphdr->dst); + uip_seqno = uip_tcphdr->seqno = ntohl(uip_tcphdr->seqno); + uip_ackno = uip_tcphdr->ackno = ntohl(uip_tcphdr->ackno); + uip_tcphdr->wnd = ntohs(uip_tcphdr->wnd); + + uip_flags = UIP_TCPH_FLAGS(uip_tcphdr)&UIP_TCP_FLAGS; + uip_tcplen = p->tot_len+((uip_flags&UIP_TCP_FIN||uip_flags&UIP_TCP_SYN)?1:0); + + prev = NULL; + for(pcb=uip_tcp_active_pcbs;pcb!=NULL;pcb=pcb->next) { + if(pcb->state!=UIP_CLOSED && pcb->state!=UIP_TIME_WAIT && pcb->state!=UIP_LISTEN) { + if(pcb->remote_port==uip_tcphdr->src && + pcb->local_port==uip_tcphdr->dst && + ip_addr_cmp(&pcb->remote_ip,&uip_iphdr->src) && + ip_addr_cmp(&pcb->local_ip,&uip_iphdr->dst)) { + if(prev!=NULL) { + prev->next = pcb->next; + pcb->next = uip_tcp_active_pcbs; + uip_tcp_active_pcbs = pcb; + } + break; + } + prev = pcb; + } + } + + if(pcb==NULL) { + for(pcb=uip_tcp_tw_pcbs;pcb!=NULL;pcb=pcb->next) { + if(pcb->state==UIP_TIME_WAIT && + pcb->remote_port==uip_tcphdr->src && + pcb->local_port==uip_tcphdr->dst && + ip_addr_cmp(&pcb->remote_ip,&uip_iphdr->src) && + ip_addr_cmp(&pcb->local_ip,&uip_iphdr->dst)) { + uip_tcpinput_timewait(pcb); + return; + } + } + + prev = NULL; + for(lpcb=uip_tcp_listen_pcbs.listen_pcbs;lpcb!=NULL;lpcb=lpcb->next) { + if((ip_addr_isany(&lpcb->local_ip) || ip_addr_cmp(&lpcb->local_ip,&uip_iphdr->dst)) && + lpcb->local_port==uip_tcphdr->dst) { + if(prev!=NULL) { + ((struct uip_tcp_pcb_listen*)prev)->next = lpcb->next; + lpcb->next = uip_tcp_listen_pcbs.listen_pcbs; + uip_tcp_listen_pcbs.listen_pcbs = lpcb; + } + uip_tcpinput_listen(lpcb); + return; + } + prev = (struct uip_tcp_pcb*)lpcb; + } + } + + if(pcb!=NULL) { + uip_inseg.next = NULL; + uip_inseg.len = p->tot_len; + uip_inseg.dataptr = p->payload; + uip_inseg.p = p; + uip_inseg.tcphdr = uip_tcphdr; + + uip_recv_data = NULL; + uip_recv_flags = 0; + + uip_tcp_input_pcb = pcb; + err = uip_tcpprocess(pcb); + uip_tcp_input_pcb = NULL; + + if(err!=UIP_ERR_ABRT) { + if(uip_recv_flags&UIP_TF_RESET) { + if(pcb->errf) pcb->errf(pcb->cb_arg,UIP_ERR_RST); + uip_tcp_pcbremove(&uip_tcp_active_pcbs,pcb); + memb_free(&uip_tcp_pcbs,pcb); + } else if(uip_recv_flags&UIP_TF_CLOSED) { + uip_tcp_pcbremove(&uip_tcp_active_pcbs,pcb); + memb_free(&uip_tcp_pcbs,pcb); + } else { + err = UIP_ERR_OK; + + if(pcb->acked>0) { + if(pcb->sent) err = pcb->sent(pcb->cb_arg,pcb,pcb->acked); + } + + if(uip_recv_data!=NULL) { + if(pcb->recv) err = pcb->recv(pcb->cb_arg,pcb,uip_recv_data,UIP_ERR_OK); + } + + if(err==UIP_ERR_OK) uip_tcpoutput(pcb); + } + } + if(uip_inseg.p!=NULL) uip_pbuf_free(uip_inseg.p); + } else { + if(!(UIP_TCPH_FLAGS(uip_tcphdr)&UIP_TCP_RST)) + uip_tcp_rst(uip_ackno,uip_seqno+uip_tcplen,&uip_iphdr->dst,&uip_iphdr->src,uip_tcphdr->dst,uip_tcphdr->src); + + uip_pbuf_free(p); + } +} + +s8_t uip_tcpoutput(struct uip_tcp_pcb *pcb) +{ + u32_t wnd; + struct uip_pbuf *p; + struct uip_tcp_hdr *tcphdr; + struct uip_tcpseg *seg,*useg; + + if(uip_tcp_input_pcb==pcb) return 0; + + wnd = UIP_MIN(pcb->snd_wnd,pcb->cwnd); + seg = pcb->unsent; + useg = pcb->unacked; + if(useg!=NULL) { + for(;useg->next!=NULL;useg=useg->next); + } + + if(pcb->flags&UIP_TF_ACK_NOW && + (seg==NULL || ntohl(seg->tcphdr->seqno)-pcb->lastack+seg->len>wnd)) { + //printf("uip_tcpout: ACK - seqno = %u, ackno = %u\n",pcb->snd_nxt,pcb->rcv_nxt); + p = uip_pbuf_alloc(UIP_PBUF_IP,UIP_TCP_HLEN,UIP_PBUF_RAM); + if(p==NULL) { + UIP_ERROR("uip_tcpoutput: (ACK) could not allocate pbuf."); + return UIP_ERR_BUF; + } + pcb->flags &= ~(UIP_TF_ACK_DELAY|UIP_TF_ACK_NOW); + + tcphdr = p->payload; + tcphdr->src = htons(pcb->local_port); + tcphdr->dst = htons(pcb->remote_port); + tcphdr->seqno = htonl(pcb->snd_nxt); + tcphdr->ackno = htonl(pcb->rcv_nxt); + UIP_TCPH_FLAGS_SET(tcphdr,UIP_TCP_ACK); + tcphdr->wnd = htons(pcb->rcv_wnd); + tcphdr->urgp = 0; + UIP_TCPH_HDRLEN_SET(tcphdr,5); + + tcphdr->chksum = 0; + tcphdr->chksum = uip_chksum_pseudo(p,&pcb->local_ip,&pcb->remote_ip,UIP_PROTO_TCP,p->tot_len); + + uip_ipoutput(p,&pcb->local_ip,&pcb->remote_ip,pcb->ttl,pcb->tos,UIP_PROTO_TCP); + uip_pbuf_free(p); + + return UIP_ERR_OK; + } + + while(seg!=NULL && ntohl(seg->tcphdr->seqno)-pcb->lastack+seg->len<=wnd) { + pcb->unsent = seg->next; + if(pcb->state!=UIP_SYN_SENT) { + UIP_TCPH_SET_FLAG(seg->tcphdr,UIP_TCP_ACK); + pcb->flags &= ~(UIP_TF_ACK_DELAY|UIP_TF_ACK_NOW); + } + + uip_tcpoutput_segments(seg,pcb); + + pcb->snd_nxt = ntohl(seg->tcphdr->seqno)+UIP_TCP_TCPLEN(seg); + if(UIP_TCP_SEQ_LT(pcb->snd_max,pcb->snd_nxt)) pcb->snd_max = pcb->snd_nxt; + + if(UIP_TCP_TCPLEN(seg)>0) { + seg->next = NULL; + if(pcb->unacked==NULL) { + pcb->unacked = seg; + useg = seg; + } else { + if(UIP_TCP_SEQ_LT(ntohl(seg->tcphdr->seqno),ntohl(useg->tcphdr->seqno))) { + seg->next = pcb->unacked; + pcb->unacked = seg; + } else { + useg->next = seg; + useg = useg->next; + } + } + } else + uip_tcpseg_free(seg); + + seg = pcb->unsent; + } + return UIP_ERR_OK; +} + +void uip_tcp_tmr() +{ + uip_tcp_fasttmr(); + + if(++uip_tcp_timer&1) uip_tcp_slowtmr(); +} + +void uip_tcp_init() +{ + memb_init(&uip_tcp_pcbs); + memb_init(&uip_listen_tcp_pcbs); + memb_init(&uip_tcp_segs); + + uip_tcp_listen_pcbs.listen_pcbs = NULL; + uip_tcp_active_pcbs = NULL; + uip_tcp_tw_pcbs = NULL; + + uip_tcp_ticks = 0; + uip_tcp_timer = 0; +} + +void uip_tcp_accept(struct uip_tcp_pcb *pcb,s8_t (*accept)(void *,struct uip_tcp_pcb *,s8_t)) +{ + ((struct uip_tcp_pcb_listen*)pcb)->accept = accept; +} + +void uip_tcp_err(struct uip_tcp_pcb *pcb,void (*errf)(void *,s8_t)) +{ + pcb->errf = errf; +} + +void uip_tcp_recv(struct uip_tcp_pcb *pcb,s8_t (*recv)(void *,struct uip_tcp_pcb *,struct uip_pbuf *,s8_t)) +{ + pcb->recv = recv; +} + +void uip_tcp_sent(struct uip_tcp_pcb *pcb,s8_t (*sent)(void *,struct uip_tcp_pcb *,u16_t)) +{ + pcb->sent = sent; +} + +void uip_tcp_poll(struct uip_tcp_pcb *pcb,s8_t (*poll)(void *,struct uip_tcp_pcb *),u8_t interval) +{ + pcb->poll = poll; + pcb->pollinterval = interval; +} + +void uip_tcp_arg(struct uip_tcp_pcb *pcb,void *arg) +{ + pcb->cb_arg = arg; +} + +struct uip_tcp_pcb* uip_tcp_pcballoc(u8_t prio) +{ + u32_t iss; + struct uip_tcp_pcb *pcb = NULL; + + pcb = memb_alloc(&uip_tcp_pcbs); + if(pcb!=NULL) { + UIP_MEMSET(pcb,0,sizeof(struct uip_tcp_pcb)); + pcb->prio = UIP_TCP_PRIO_NORMAL; + pcb->snd_buf = UIP_TCP_SND_BUF; + pcb->snd_queuelen = 0; + pcb->rcv_wnd = UIP_TCP_WND; + pcb->tos = 0; + pcb->ttl = UIP_TCP_TTL; + pcb->mss = UIP_TCP_MSS; + pcb->rto = 3000/UIP_TCP_SLOW_INTERVAL; + pcb->sa = 0; + pcb->sv = 3000/UIP_TCP_SLOW_INTERVAL; + pcb->rtime = 0; + pcb->cwnd = 1; + iss = uip_tcpiss_next(); + pcb->snd_wl2 = iss; + pcb->snd_nxt = iss; + pcb->snd_max = iss; + pcb->lastack = iss; + pcb->snd_lbb = iss; + pcb->tmr = uip_tcp_ticks; + pcb->polltmr = 0; + + pcb->recv = uip_tcp_nullrecv; + + pcb->keepalive = UIP_TCP_KEEPDEFAULT; + pcb->keepcnt = 0; + } + return pcb; +} + +void uip_tcp_pcbremove(struct uip_tcp_pcb **pcblist,struct uip_tcp_pcb *pcb) +{ + UIP_TCP_RMV(pcblist,pcb); + + uip_tcp_pcbpurge(pcb); + if(pcb->state!=UIP_TIME_WAIT && + pcb->state!=UIP_LISTEN && + pcb->flags&UIP_TF_ACK_DELAY) { + pcb->flags |= UIP_TF_ACK_NOW; + uip_tcpoutput(pcb); + } + pcb->state = UIP_CLOSED; +} + +void uip_tcp_pcbpurge(struct uip_tcp_pcb *pcb) +{ + if(pcb->state!=UIP_CLOSED && + pcb->state!=UIP_TIME_WAIT && + pcb->state!=UIP_LISTEN) { + uip_tcpsegs_free(pcb->ooseq); + uip_tcpsegs_free(pcb->unsent); + uip_tcpsegs_free(pcb->unacked); + pcb->unsent = pcb->unacked = pcb->ooseq = NULL; + } +} + +struct uip_tcp_pcb* uip_tcp_new() +{ + return uip_tcp_pcballoc(UIP_TCP_PRIO_NORMAL); +} + +s8_t uip_tcp_bind(struct uip_tcp_pcb *pcb,struct uip_ip_addr *ipaddr,u16_t port) +{ + struct uip_tcp_pcb *cpcb; + + if(port==0) port = uip_tcp_newport(); + + for(cpcb=(struct uip_tcp_pcb*)uip_tcp_listen_pcbs.pcbs;cpcb!=NULL;cpcb=cpcb->next) { + if(cpcb->local_port==port) { + if(ip_addr_isany(&cpcb->local_ip) || + ip_addr_isany(ipaddr) || + ip_addr_cmp(&cpcb->local_ip,ipaddr)) return UIP_ERR_USE; + } + } + + for(cpcb=uip_tcp_active_pcbs;cpcb!=NULL;cpcb=cpcb->next) { + if(cpcb->local_port==port) { + if(ip_addr_isany(&cpcb->local_ip) || + ip_addr_isany(ipaddr) || + ip_addr_cmp(&cpcb->local_ip,ipaddr)) return UIP_ERR_USE; + } + } + + if(!ip_addr_isany(ipaddr)) pcb->local_ip = *ipaddr; + pcb->local_port = port; + + return UIP_ERR_OK; +} + +struct uip_tcp_pcb* uip_tcp_listen(struct uip_tcp_pcb *pcb) +{ + struct uip_tcp_pcb_listen *lpcb; + + if(pcb->state==UIP_LISTEN) return pcb; + + lpcb = memb_alloc(&uip_listen_tcp_pcbs); + if(lpcb==NULL) return NULL; + + lpcb->cb_arg = pcb->cb_arg; + lpcb->local_port = pcb->local_port; + lpcb->state = UIP_LISTEN; + lpcb->so_options = pcb->so_options; + lpcb->so_options |= UIP_SOF_ACCEPTCONN; + lpcb->ttl = pcb->ttl; + lpcb->tos = pcb->tos; + ip_addr_set(&lpcb->local_ip,&pcb->local_ip); + + memb_free(&uip_tcp_pcbs,pcb); + + lpcb->accept = uip_tcp_nullaccept; + + UIP_TCP_REG(&uip_tcp_listen_pcbs.listen_pcbs,lpcb); + return (struct uip_tcp_pcb*)lpcb; +} + +void uip_tcp_recved(struct uip_tcp_pcb *pcb,u16_t len) +{ + if((u32_t)pcb->rcv_wnd+len>UIP_TCP_WND) pcb->rcv_wnd = UIP_TCP_WND; + else pcb->rcv_wnd += len; + + if(!(pcb->flags&UIP_TF_ACK_DELAY) && !(pcb->flags&UIP_TF_ACK_NOW)) { + uip_tcp_ack(pcb); + } else if(pcb->flags&UIP_TF_ACK_DELAY && pcb->rcv_wnd>=UIP_TCP_WND/2) { + uip_tcp_acknow(pcb); + } +} + +s8_t uip_tcp_close(struct uip_tcp_pcb *pcb) +{ + s8_t err; + + switch(pcb->state) { + case UIP_CLOSED: + err = UIP_ERR_OK; + memb_free(&uip_tcp_pcbs,pcb); + pcb = NULL; + break; + case UIP_LISTEN: + err = UIP_ERR_OK; + uip_tcp_pcbremove((struct uip_tcp_pcb**)&uip_tcp_listen_pcbs.pcbs,pcb); + memb_free(&uip_listen_tcp_pcbs,pcb); + pcb = NULL; + break; + case UIP_SYN_SENT: + err = UIP_ERR_OK; + uip_tcp_pcbremove(&uip_tcp_active_pcbs,pcb); + memb_free(&uip_tcp_pcbs,pcb); + pcb = NULL; + break; + case UIP_SYN_RCVD: + case UIP_ESTABLISHED: + err = uip_tcp_sendctrl(pcb,UIP_TCP_FIN); + if(err==UIP_ERR_OK) pcb->state = UIP_FIN_WAIT_1; + break; + case UIP_CLOSE_WAIT: + err = uip_tcp_sendctrl(pcb,UIP_TCP_FIN); + if(err==UIP_ERR_OK) pcb->state = UIP_LAST_ACK; + break; + default: + err = UIP_ERR_OK; + pcb = NULL; + break; + } + if(pcb!=NULL && err==UIP_ERR_OK) uip_tcpoutput(pcb); + + return err; +} + +void uip_tcp_rst(u32_t seqno,u32_t ackno,struct uip_ip_addr *lipaddr,struct uip_ip_addr *ripaddr,u16_t lport,u16_t rport) +{ + struct uip_pbuf *p; + struct uip_tcp_hdr *tcphdr; + + p = uip_pbuf_alloc(UIP_PBUF_IP,UIP_TCP_HLEN,UIP_PBUF_RAM); + if(p==NULL) { + UIP_LOG("uip_tcp_rst: could not allocate memory for pbuf.\n"); + return; + } + + tcphdr = p->payload; + tcphdr->src = htons(lport); + tcphdr->dst = htons(rport); + tcphdr->seqno = htonl(seqno); + tcphdr->ackno = htonl(ackno); + UIP_TCPH_FLAGS_SET(tcphdr,UIP_TCP_RST|UIP_TCP_ACK); + tcphdr->wnd = htons(UIP_TCP_WND); + tcphdr->urgp = 0; + UIP_TCPH_HDRLEN_SET(tcphdr,5); + + tcphdr->chksum = 0; + tcphdr->chksum = uip_chksum_pseudo(p,lipaddr,ripaddr,UIP_PROTO_TCP,p->tot_len); + + uip_ipoutput(p,lipaddr,ripaddr,UIP_TCP_TTL,0,UIP_PROTO_TCP); + uip_pbuf_free(p); +} + +void uip_tcp_abort(struct uip_tcp_pcb *pcb) +{ + u32_t seqno,ackno; + u16_t remote_port,local_port; + struct uip_ip_addr remote_ip,local_ip; + void (*errf)(void *arg,s8_t err); + void *errf_arg; + + if(pcb->state==UIP_TIME_WAIT) { + memb_free(&uip_tcp_pcbs,pcb); + } else { + seqno = pcb->snd_nxt; + ackno = pcb->rcv_nxt; + + ip_addr_set(&local_ip,&pcb->local_ip); + ip_addr_set(&remote_ip,&pcb->remote_ip); + local_port = pcb->local_port; + remote_port = pcb->remote_port; + + errf = pcb->errf; + errf_arg = pcb->cb_arg; + + uip_tcp_pcbremove(&uip_tcp_active_pcbs,pcb); + + if(pcb->unacked!=NULL) + uip_tcpsegs_free(pcb->unacked); + if(pcb->unsent!=NULL) + uip_tcpsegs_free(pcb->unsent); + if(pcb->ooseq!=NULL) + uip_tcpsegs_free(pcb->ooseq); + + memb_free(&uip_tcp_pcbs,pcb); + if(errf) errf(errf_arg,UIP_ERR_ABRT); + + uip_tcp_rst(seqno,ackno,&local_ip,&remote_ip,local_port,remote_port); + } +} + +void uip_tcp_keepalive(struct uip_tcp_pcb *pcb) +{ + struct uip_pbuf *p; + struct uip_tcp_hdr *tcphdr; + + p = uip_pbuf_alloc(UIP_PBUF_IP,UIP_TCP_HLEN,UIP_PBUF_RAM); + if(p==NULL) return; + + tcphdr = p->payload; + tcphdr->src = htons(pcb->local_port); + tcphdr->dst = htons(pcb->remote_port); + tcphdr->seqno = htonl(pcb->snd_nxt-1); + tcphdr->ackno = htonl(pcb->rcv_nxt); + tcphdr->wnd = htons(pcb->rcv_wnd); + tcphdr->urgp = 0; + UIP_TCPH_HDRLEN_SET(tcphdr,5); + + tcphdr->chksum = 0; + tcphdr->chksum = uip_chksum_pseudo(p,&pcb->local_ip,&pcb->remote_ip,UIP_PROTO_TCP,p->tot_len); + + uip_ipoutput(p,&pcb->local_ip,&pcb->remote_ip,pcb->ttl,0,UIP_PROTO_TCP); + uip_pbuf_free(p); +} + +void uip_tcp_rexmit(struct uip_tcp_pcb *pcb) +{ + struct uip_tcpseg *seg; + + if(pcb->unacked==NULL) return; + + seg = pcb->unacked->next; + pcb->unacked->next = pcb->unsent; + pcb->unsent = pcb->unacked; + pcb->unacked = seg; + + pcb->snd_nxt = ntohl(pcb->unsent->tcphdr->seqno); + pcb->nrtx++; + pcb->rttest = 0; + + uip_tcpoutput(pcb); +} + +void uip_tcp_rexmit_rto(struct uip_tcp_pcb *pcb) +{ + struct uip_tcpseg *seg; + + if(pcb->unacked==NULL) return; + + for(seg=pcb->unacked;seg->next!=NULL;seg=seg->next); + + seg->next = pcb->unsent; + pcb->unsent = pcb->unacked; + pcb->unacked = NULL; + + pcb->snd_nxt = ntohl(pcb->unsent->tcphdr->seqno); + pcb->nrtx++; + + uip_tcpoutput(pcb); +} + +void uip_tcp_fasttmr() +{ + struct uip_tcp_pcb *pcb; + + for(pcb=uip_tcp_active_pcbs;pcb!=NULL;pcb=pcb->next) { + if(pcb->flags&UIP_TF_ACK_DELAY) { + uip_tcp_acknow(pcb); + pcb->flags &= ~(UIP_TF_ACK_DELAY|UIP_TF_ACK_NOW); + } + } +} + +void uip_tcp_slowtmr() +{ + struct uip_tcp_pcb *prev,*pcb,*pcb2; + u32 eff_wnd; + u8_t pcb_remove; + s8_t err; + + err = UIP_ERR_OK; + + uip_tcp_ticks++; + + prev = NULL; + pcb = uip_tcp_active_pcbs; + while(pcb!=NULL) { + pcb_remove = 0; + + if(pcb->state==UIP_SYN_SENT && pcb->nrtx==UIP_MAXSYNRTX) pcb_remove++; + else if(pcb->nrtx==UIP_MAXRTX) pcb_remove++; + else { + pcb->rtime++; + if(pcb->unacked!=NULL && pcb->rtime>=pcb->rto) { + if(pcb->state==UIP_SYN_SENT) pcb->rto = ((pcb->sa>>3)+pcb->sv)<nrtx]; + + eff_wnd = UIP_MIN(pcb->cwnd,pcb->snd_wnd); + pcb->ssthresh = eff_wnd>>1; + + if(pcb->ssthreshmss) pcb->ssthresh = pcb->mss*2; + pcb->cwnd = pcb->mss; + + uip_tcp_rexmit_rto(pcb); + } + } + + if(pcb->state==UIP_FIN_WAIT_2) { + if((u32_t)(uip_tcp_ticks-pcb->tmr)>UIP_TCP_FIN_WAIT_TIMEOUT/UIP_TCP_SLOW_INTERVAL) pcb_remove++; + } + + if(pcb->so_options&UIP_SOF_KEEPALIVE && + (pcb->state==UIP_ESTABLISHED || pcb->state==UIP_CLOSE_WAIT)) { + if((u32_t)(uip_tcp_ticks-pcb->tmr)>(pcb->keepalive+UIP_TCP_MAXIDLE)/UIP_TCP_SLOW_INTERVAL) uip_tcp_abort(pcb); + else if((u32_t)(uip_tcp_ticks-pcb->tmr)>(pcb->keepalive+pcb->keepcnt*UIP_TCP_KEEPINTVL)/UIP_TCP_SLOW_INTERVAL) { + uip_tcp_keepalive(pcb); + pcb->keepcnt++; + } + } + + if(pcb->ooseq!=NULL && (u32_t)uip_tcp_ticks-pcb->tmr>=pcb->rto*UIP_TCP_OOSEQ_TIMEOUT) { + uip_tcpsegs_free(pcb->ooseq); + pcb->ooseq = NULL; + } + if(pcb->state==UIP_SYN_RCVD) { + if((u32_t)(uip_tcp_ticks-pcb->tmr)>UIP_TCP_SYN_RCVD_TIMEOUT/UIP_TCP_SLOW_INTERVAL) pcb_remove++; + } + + if(pcb_remove) { + uip_tcp_pcbpurge(pcb); + + if(prev!=NULL) prev->next = pcb->next; + else uip_tcp_active_pcbs = pcb->next; + + if(pcb->errf) pcb->errf(pcb->cb_arg,UIP_ERR_ABRT); + + pcb2 = pcb->next; + memb_free(&uip_tcp_pcbs,pcb); + pcb = pcb2; + } else { + pcb->polltmr++; + if(pcb->polltmr>=pcb->pollinterval) { + pcb->polltmr = 0; + if(pcb->poll) err = pcb->poll(pcb->cb_arg,pcb); + + if(err==UIP_ERR_OK) uip_tcpoutput(pcb); + } + + prev = pcb; + pcb = pcb->next; + } + } + + prev = NULL; + pcb = uip_tcp_tw_pcbs; + while(pcb!=NULL) { + pcb_remove = 0; + + if((u32_t)(uip_tcp_ticks-pcb->tmr)>2*UIP_TCP_MSL/UIP_TCP_SLOW_INTERVAL) pcb_remove++; + + if(pcb_remove) { + uip_tcp_pcbpurge(pcb); + + if(prev!=NULL) prev->next = pcb->next; + else uip_tcp_tw_pcbs = pcb->next; + + pcb2 = pcb->next; + memb_free(&uip_tcp_pcbs,pcb); + pcb = pcb2; + } else { + prev = pcb; + pcb = pcb->next; + } + } +} + +u32_t uip_tcpiss_next() +{ + static u32_t iss = 6510; + iss += uip_tcp_ticks; + return iss; +} + +struct uip_tcpseg* uip_tcpseg_copy(struct uip_tcpseg *seg) +{ + struct uip_tcpseg *cseg; + + cseg = memb_alloc(&uip_tcp_segs); + if(cseg==NULL) return NULL; + + UIP_MEMCPY(cseg,seg,sizeof(struct uip_tcpseg)); + uip_pbuf_ref(cseg->p); + + return cseg; +} + +u8_t uip_tcpsegs_free(struct uip_tcpseg *seg) +{ + u8_t cnt = 0; + struct uip_tcpseg *next; + + while(seg!=NULL) { + next = seg->next; + cnt += uip_tcpseg_free(seg); + seg = next; + } + + return cnt; +} + +u8_t uip_tcpseg_free(struct uip_tcpseg *seg) +{ + u8_t cnt = 0; + + if(seg!=NULL) { + if(seg->p!=NULL) { + cnt = uip_pbuf_free(seg->p); + } + memb_free(&uip_tcp_segs,seg); + } + return cnt; +} + +#ifndef TCP_LOCAL_PORT_RANGE_START +#define TCP_LOCAL_PORT_RANGE_START 4096 +#define TCP_LOCAL_PORT_RANGE_END 0x7fff +#endif + +static u16_t uip_tcp_newport() +{ + struct uip_tcp_pcb *pcb; + static u16_t port = TCP_LOCAL_PORT_RANGE_START; + +again: + if(++port>=TCP_LOCAL_PORT_RANGE_END) port = TCP_LOCAL_PORT_RANGE_START; + + for(pcb=uip_tcp_active_pcbs;pcb!=NULL;pcb=pcb->next) { + if(pcb->local_port==port) goto again; + } + for(pcb=uip_tcp_tw_pcbs;pcb!=NULL;pcb=pcb->next) { + if(pcb->local_port==port) goto again; + } + for(pcb=(struct uip_tcp_pcb*)uip_tcp_listen_pcbs.pcbs;pcb!=NULL;pcb=pcb->next) { + if(pcb->local_port==port) goto again; + } + return port; +} + +static void uip_tcp_parseopt(struct uip_tcp_pcb *pcb) +{ + u8_t c; + u8_t *opts,opt; + u16_t mss; + + opts = (u8_t*)uip_tcphdr+UIP_TCP_HLEN; + if(UIP_TCPH_HDRLEN(uip_tcphdr)>0x05) { + for(c=0;c<((UIP_TCPH_HDRLEN(uip_tcphdr)-5)<<2);) { + opt = opts[c]; + if(opt==0x00) break; + else if(opt==0x01) c++; + else if(opt==0x02 && opts[c+1]==0x04) { + mss = (opts[c+2]<<8|opts[c+3]); + pcb->mss = mss>UIP_TCP_MSS?UIP_TCP_MSS:mss; + break; + } else { + if(opts[c+1]==0) break; + c += opts[c+1]; + } + } + } +} + +static void uip_tcpoutput_segments(struct uip_tcpseg *seg,struct uip_tcp_pcb *pcb) +{ + u16_t len; + struct uip_netif *netif; + + seg->tcphdr->ackno = htonl(pcb->rcv_nxt); + if(pcb->rcv_wndmss) seg->tcphdr->wnd = 0; + else seg->tcphdr->wnd = htons(pcb->rcv_wnd); + + if(ip_addr_isany(&pcb->local_ip)) { + netif = uip_iproute(&pcb->remote_ip); + if(netif==NULL) { + UIP_ERROR("uip_tcpoutput_segments: no route found."); + return; + } + ip_addr_set(&pcb->local_ip,&netif->ip_addr); + } + + pcb->rtime = 0; + if(pcb->rttest==0) { + pcb->rttest = uip_tcp_ticks; + pcb->rtseq = ntohl(seg->tcphdr->seqno); + } + + len = (u16_t)((u8_t*)seg->tcphdr-(u8_t*)seg->p->payload); + seg->p->len -= len; + seg->p->tot_len -= len; + seg->p->payload = seg->tcphdr; + + seg->tcphdr->chksum = 0; + seg->tcphdr->chksum = uip_chksum_pseudo(seg->p,&pcb->local_ip,&pcb->remote_ip,UIP_PROTO_TCP,seg->p->tot_len); + + uip_ipoutput(seg->p,&pcb->local_ip,&pcb->remote_ip,pcb->ttl,pcb->tos,UIP_PROTO_TCP); +} + +static s8_t uip_tcpinput_listen(struct uip_tcp_pcb_listen *pcb) +{ + u32_t optdata; + struct uip_tcp_pcb *npcb; + + if(uip_flags&UIP_TCP_ACK) { + UIP_LOG("uip_tcp_listen_input: ACK in LISTEN, sending reset.\n"); + uip_tcp_rst(uip_ackno+1,uip_seqno+uip_tcplen,&uip_iphdr->dst,&uip_iphdr->src,uip_tcphdr->dst,uip_tcphdr->src); + } else if(uip_flags&UIP_TCP_SYN) { + npcb = uip_tcp_pcballoc(pcb->prio); + if(!npcb) return UIP_ERR_MEM; + + ip_addr_set(&npcb->local_ip,&uip_iphdr->dst); + npcb->local_port = pcb->local_port; + ip_addr_set(&npcb->remote_ip,&uip_iphdr->src); + npcb->remote_port = uip_tcphdr->src; + npcb->state = UIP_SYN_RCVD; + npcb->rcv_nxt = uip_seqno+1; + npcb->snd_wnd = uip_tcphdr->wnd; + npcb->ssthresh = npcb->snd_wnd; + npcb->snd_wl1 = uip_seqno-1; + npcb->cb_arg = pcb->cb_arg; + npcb->accept = pcb->accept; + + npcb->so_options = pcb->so_options&(UIP_SOF_DEBUG|UIP_SOF_DONTROUTE|UIP_SOF_KEEPALIVE|UIP_SOF_OOBINLINE|UIP_SOF_LINGER); + + UIP_TCP_REG(&uip_tcp_active_pcbs,npcb); + + uip_tcp_parseopt(npcb); + + optdata = htonl((((u32_t)2<<24)|((u32_t)4<<16)|(((u32_t)npcb->mss/256)<<8)|((u32_t)npcb->mss&255))); + + uip_tcpenqueue(npcb,NULL,0,UIP_TCP_SYN|UIP_TCP_ACK,0,(u8_t*)&optdata,4); + return uip_tcpoutput(npcb); + } + return UIP_ERR_OK; +} + +static s8_t uip_tcpinput_timewait(struct uip_tcp_pcb *pcb) +{ + if(UIP_TCP_SEQ_GT(uip_seqno+uip_tcplen,pcb->rcv_nxt)) pcb->rcv_nxt = uip_seqno+uip_tcplen; + if(uip_tcplen>0) { + uip_tcp_acknow(pcb); + } + + return uip_tcpoutput(pcb); +} + +static s8_t uip_tcpprocess(struct uip_tcp_pcb *pcb) +{ + struct uip_tcpseg *rseg; + u8_t acceptable = 0; + s8_t err; + + err = 0; + if(uip_flags&UIP_TCP_RST) { + if(pcb->state==UIP_SYN_SENT) { + if(uip_ackno==pcb->snd_nxt) acceptable = 1; + } else { + if(UIP_TCP_SEQ_BETWEEN(uip_seqno,pcb->rcv_nxt,pcb->rcv_nxt+pcb->rcv_wnd)) acceptable = 1; + } + if(acceptable) { + uip_recv_flags = UIP_TF_RESET; + pcb->flags &= ~UIP_TF_ACK_DELAY; + return UIP_ERR_RST; + } else + return UIP_ERR_OK; + } + + pcb->tmr = uip_tcp_ticks; + pcb->keepcnt = 0; + + switch(pcb->state) { + case UIP_SYN_SENT: + if(uip_flags&UIP_TCP_ACK && uip_flags&UIP_TCP_SYN && + uip_ackno==ntohl(pcb->unacked->tcphdr->seqno)+1) { + pcb->snd_buf++; + pcb->rcv_nxt = uip_seqno+1; + pcb->lastack = uip_ackno; + pcb->snd_wnd = uip_tcphdr->wnd; + pcb->snd_wl1 = uip_seqno-1; + pcb->state = UIP_ESTABLISHED; + pcb->cwnd = pcb->mss; + pcb->snd_queuelen--; + + rseg = pcb->unacked; + pcb->unacked = rseg->next; + uip_tcpseg_free(rseg); + + uip_tcp_parseopt(pcb); + + if(pcb->connected!=NULL) err = pcb->connected(pcb->cb_arg,pcb,UIP_ERR_OK); + + uip_tcp_ack(pcb); + } else if(uip_flags&UIP_TCP_ACK) { + uip_tcp_rst(uip_ackno,uip_seqno+uip_tcplen,&uip_iphdr->dst,&uip_iphdr->src,uip_tcphdr->dst,uip_tcphdr->src); + } + break; + case UIP_SYN_RCVD: + if(uip_flags&UIP_TCP_ACK && !(uip_flags&UIP_TCP_RST)) { + if(UIP_TCP_SEQ_BETWEEN(uip_ackno,pcb->lastack+1,pcb->snd_nxt)) { + pcb->state = UIP_ESTABLISHED; + + if(pcb->accept!=NULL) err = pcb->accept(pcb->cb_arg,pcb,UIP_ERR_OK); + if(err!=UIP_ERR_OK) { + uip_tcp_abort(pcb); + return UIP_ERR_ABRT; + } + uip_tcpreceive(pcb); + pcb->cwnd = pcb->mss; + } else { + uip_tcp_rst(uip_ackno,uip_seqno+uip_tcplen,&uip_iphdr->dst,&uip_iphdr->src,uip_tcphdr->dst,uip_tcphdr->src); + } + } + break; + case UIP_CLOSE_WAIT: + case UIP_ESTABLISHED: + uip_tcpreceive(pcb); + if(uip_flags&UIP_TCP_FIN) { + uip_tcp_acknow(pcb); + pcb->state = UIP_CLOSE_WAIT; + } + break; + case UIP_FIN_WAIT_1: + uip_tcpreceive(pcb); + if(uip_flags&UIP_TCP_FIN) { + if(uip_flags&UIP_TCP_ACK && uip_ackno==pcb->snd_nxt) { + uip_tcp_acknow(pcb); + uip_tcp_pcbpurge(pcb); + UIP_TCP_RMV(&uip_tcp_active_pcbs,pcb); + pcb->state = UIP_TIME_WAIT; + UIP_TCP_REG(&uip_tcp_tw_pcbs,pcb); + } else { + uip_tcp_acknow(pcb); + pcb->state = UIP_CLOSING; + } + } else if(uip_flags&UIP_TCP_ACK && uip_ackno==pcb->snd_nxt) { + pcb->state = UIP_FIN_WAIT_2; + } + break; + case UIP_FIN_WAIT_2: + uip_tcpreceive(pcb); + if(uip_flags&UIP_TCP_FIN) { + uip_tcp_acknow(pcb); + uip_tcp_pcbpurge(pcb); + UIP_TCP_RMV(&uip_tcp_active_pcbs,pcb); + pcb->state = UIP_TIME_WAIT; + UIP_TCP_REG(&uip_tcp_tw_pcbs,pcb); + } + break; + case UIP_CLOSING: + uip_tcpreceive(pcb); + if(uip_flags&UIP_TCP_ACK && uip_ackno==pcb->snd_nxt) { + uip_tcp_acknow(pcb); + uip_tcp_pcbpurge(pcb); + UIP_TCP_RMV(&uip_tcp_active_pcbs,pcb); + pcb->state = UIP_TIME_WAIT; + UIP_TCP_REG(&uip_tcp_tw_pcbs,pcb); + } + break; + case UIP_LAST_ACK: + uip_tcpreceive(pcb); + if(uip_flags&UIP_TCP_ACK && uip_ackno==pcb->snd_nxt) { + pcb->state = UIP_CLOSED; + uip_recv_flags = UIP_TF_CLOSED; + } + break; + default: + break; + + } + return UIP_ERR_OK; +} + +static void uip_tcpreceive(struct uip_tcp_pcb *pcb) +{ + struct uip_tcpseg *next,*prev; + struct uip_tcpseg *cseg; + struct uip_pbuf *p; + s32_t off,m; + u32_t right_wnd_edge; + u16_t new_tot_len; + + if(uip_flags&UIP_TCP_ACK) { + right_wnd_edge = pcb->snd_wnd+pcb->snd_wl1; + if(UIP_TCP_SEQ_LT(pcb->snd_wl1,uip_seqno) || + (pcb->snd_wl1==uip_seqno && UIP_TCP_SEQ_LT(pcb->snd_wl2,uip_ackno)) || + (pcb->snd_wl2==uip_ackno && uip_tcphdr->wnd>pcb->snd_wnd)) { + pcb->snd_wnd = uip_tcphdr->wnd; + pcb->snd_wl1 = uip_seqno; + pcb->snd_wl2 = uip_ackno; + } + + if(pcb->lastack==uip_ackno) { + pcb->acked = 0; + if(pcb->snd_wl1+pcb->snd_wnd==right_wnd_edge) { + pcb->dupacks++; + if(pcb->dupacks>=3 && pcb->unacked!=NULL) { + if(!(uip_flags&UIP_TF_INFR)) { + UIP_LOG("uip_tcpreceive: dupacks, fast retransmit."); + uip_tcp_rexmit(pcb) ; + + if(pcb->cwnd>pcb->snd_wnd) pcb->ssthresh = pcb->snd_wnd/2; + else pcb->ssthresh = pcb->cwnd/2; + + pcb->cwnd = pcb->ssthresh+3*pcb->mss; + pcb->flags |= UIP_TF_INFR; + } else { + if((u16_t)(pcb->cwnd+pcb->mss)>pcb->cwnd) pcb->cwnd += pcb->mss; + } + } + } + } else if(UIP_TCP_SEQ_BETWEEN(uip_ackno,pcb->lastack+1,pcb->snd_max)) { + if(pcb->flags&UIP_TF_INFR) { + pcb->flags &= ~UIP_TF_INFR; + pcb->cwnd = pcb->ssthresh; + } + + pcb->nrtx = 0; + pcb->rto = (pcb->sa>>3)+pcb->sv; + pcb->acked = uip_ackno-pcb->lastack; + pcb->snd_buf += pcb->acked; + pcb->dupacks = 0; + pcb->lastack = uip_ackno; + + if(pcb->state>=UIP_ESTABLISHED) { + if(pcb->cwndssthresh) { + if((u16_t)(pcb->cwnd+pcb->mss)>pcb->cwnd) pcb->cwnd += pcb->mss; + + } else { + u16_t new_cwnd = (pcb->cwnd+pcb->mss*pcb->mss/pcb->cwnd); + if(new_cwnd>pcb->cwnd) pcb->cwnd = new_cwnd; + } + } + + while(pcb->unacked!=NULL && + UIP_TCP_SEQ_LEQ(ntohl(pcb->unacked->tcphdr->seqno)+UIP_TCP_TCPLEN(pcb->unacked),uip_ackno)) { + + next = pcb->unacked; + pcb->unacked = pcb->unacked->next; + pcb->snd_queuelen -= uip_pbuf_clen(next->p); + + uip_tcpseg_free(next); + } + pcb->polltmr = 0; + } + + while(pcb->unsent!=NULL && + UIP_TCP_SEQ_BETWEEN(uip_ackno,ntohl(pcb->unsent->tcphdr->seqno)+UIP_TCP_TCPLEN(pcb->unsent),pcb->snd_max)) { + + next = pcb->unsent; + pcb->unsent = pcb->unsent->next; + pcb->snd_queuelen -= uip_pbuf_clen(next->p); + + uip_tcpseg_free(next); + + if(pcb->unsent!=NULL) pcb->snd_nxt = htonl(pcb->unsent->tcphdr->seqno); + } + + if(pcb->rttest && UIP_TCP_SEQ_LT(pcb->rtseq,uip_ackno)) { + m = uip_tcp_ticks - pcb->rttest; + m = m - (pcb->sa>>3); + pcb->sa += m; + + if(m<0) m -= m; + + m = m - (pcb->sv>>2); + pcb->sv += m; + pcb->rto = (pcb->sa>>3)+pcb->sv; + + pcb->rttest = 0; + } + } + + if(uip_tcplen>0) { + if(UIP_TCP_SEQ_BETWEEN(pcb->rcv_nxt,uip_seqno+1,uip_seqno+uip_tcplen-1)) { + off = pcb->rcv_nxt - uip_seqno; + p = uip_inseg.p; + if(uip_inseg.p->lentot_len - off; + while(p->lenlen; + p->tot_len = new_tot_len; + p->len = 0; + p = p->next; + } + uip_pbuf_header(p,-off); + } else { + uip_pbuf_header(uip_inseg.p,-off); + } + + uip_inseg.dataptr = p->payload; + uip_inseg.len -= pcb->rcv_nxt - uip_seqno; + uip_inseg.tcphdr->seqno = uip_seqno = pcb->rcv_nxt; + } else { + if(UIP_TCP_SEQ_LT(uip_seqno,pcb->rcv_nxt)) { + UIP_LOG("uip_tcpreceive: duplicate seqno."); + uip_tcp_acknow(pcb); + } + } + + if(UIP_TCP_SEQ_BETWEEN(uip_seqno,pcb->rcv_nxt,pcb->rcv_nxt+pcb->rcv_wnd-1)) { + //printf("uip_tcpreceive: seqno = %u, rcv_nxt = %u, wnd = %u\n",uip_seqno,pcb->rcv_nxt,(pcb->rcv_nxt+pcb->rcv_wnd-1)); + if(pcb->rcv_nxt==uip_seqno) { + if(pcb->ooseq!=NULL && UIP_TCP_SEQ_LEQ(pcb->ooseq->tcphdr->seqno,uip_seqno+uip_inseg.len)) { + uip_inseg.len = pcb->ooseq->tcphdr->seqno - uip_seqno; + uip_pbuf_realloc(uip_inseg.p,uip_inseg.len); + } + + uip_tcplen = UIP_TCP_TCPLEN(&uip_inseg); + if(pcb->state!=UIP_CLOSE_WAIT) pcb->rcv_nxt += uip_tcplen; + //printf("uip_tcpreceive: uip_tcplen = %u, rcv_nxt = %u\n",uip_tcplen,pcb->rcv_nxt); + + if(pcb->rcv_wndrcv_wnd = 0; + else pcb->rcv_wnd -= uip_tcplen; + + if(uip_inseg.p->tot_len>0) { + uip_recv_data = uip_inseg.p; + uip_inseg.p = NULL; + } + + if(UIP_TCPH_FLAGS(uip_inseg.tcphdr)&UIP_TCP_FIN) { + UIP_LOG("uip_tcpreceive: received FIN.\n"); + uip_recv_flags = UIP_TF_GOT_FIN; + } + + while(pcb->ooseq!=NULL && pcb->ooseq->tcphdr->seqno==pcb->rcv_nxt) { + cseg = pcb->ooseq; + uip_seqno = pcb->ooseq->tcphdr->seqno; + + pcb->rcv_nxt += UIP_TCP_TCPLEN(cseg); + if(pcb->rcv_wndrcv_wnd = 0; + else pcb->rcv_wnd -= UIP_TCP_TCPLEN(cseg); + + if(cseg->p->tot_len>0) { + if(uip_recv_data) uip_pbuf_cat(uip_recv_data,cseg->p); + else uip_recv_data = cseg->p; + + cseg->p = NULL; + } + + if(UIP_TCPH_FLAGS(cseg->tcphdr)&UIP_TCP_FIN) { + UIP_LOG("uip_tcpreceive: dequeued FIN.\n"); + uip_recv_flags = UIP_TF_GOT_FIN; + } + + pcb->ooseq = cseg->next; + uip_tcpseg_free(cseg); + } + //printf("uip_tcpreceive: pcb->flags = %02x\n",pcb->flags); + uip_tcp_ack(pcb); + //printf("uip_tcpreceive: pcb->flags = %02x\n",pcb->flags); + } else { + UIP_LOG("uip_tcpreceive: packet out-of-sequence."); + uip_tcp_acknow(pcb); + if(pcb->ooseq==NULL) + uip_tcpseg_copy(&uip_inseg); + else { + prev = NULL; + for(next=pcb->ooseq;next!=NULL;next=next->next) { + if(uip_seqno==next->tcphdr->seqno) { + if(uip_inseg.len>next->len) { + cseg = uip_tcpseg_copy(&uip_inseg); + if(cseg!=NULL) { + cseg->next = next->next; + if(prev!=NULL) prev->next = cseg; + else pcb->ooseq = cseg; + } + break; + } else + break; + } else { + if(prev==NULL) { + if(UIP_TCP_SEQ_LT(uip_seqno,next->tcphdr->seqno)) { + if(UIP_TCP_SEQ_GT(uip_seqno+uip_inseg.len,next->tcphdr->seqno)) { + uip_inseg.len = next->tcphdr->seqno - uip_seqno; + uip_pbuf_realloc(uip_inseg.p,uip_inseg.len); + } + + cseg = uip_tcpseg_copy(&uip_inseg); + if(cseg!=NULL) { + cseg->next = next; + pcb->ooseq = cseg; + } + break; + } + } else if(UIP_TCP_SEQ_BETWEEN(uip_seqno,prev->tcphdr->seqno+1,next->tcphdr->seqno-1)) { + if(UIP_TCP_SEQ_GT(uip_seqno+uip_inseg.len,next->tcphdr->seqno)) { + uip_inseg.len = next->tcphdr->seqno - uip_seqno; + uip_pbuf_realloc(uip_inseg.p,uip_inseg.len); + } + + cseg = uip_tcpseg_copy(&uip_inseg); + if(cseg!=NULL) { + cseg->next = next; + prev->next = cseg; + if(UIP_TCP_SEQ_GT(prev->tcphdr->seqno+prev->len,uip_seqno)) { + prev->len = uip_seqno - prev->tcphdr->seqno; + uip_pbuf_realloc(prev->p,prev->len); + } + } + break; + } + + if(next->next==NULL && UIP_TCP_SEQ_GT(uip_seqno,next->tcphdr->seqno)) { + next->next = uip_tcpseg_copy(&uip_inseg); + if(next->next!=NULL) { + if(UIP_TCP_SEQ_GT(next->tcphdr->seqno+next->len,uip_seqno)) { + next->len = uip_seqno - next->tcphdr->seqno; + uip_pbuf_realloc(next->p,next->len); + } + } + } + } + prev = next; + } + } + } + } else { + if(!UIP_TCP_SEQ_BETWEEN(uip_seqno,pcb->rcv_nxt,pcb->rcv_nxt+pcb->rcv_wnd-1)) { + uip_tcp_acknow(pcb); + } + } + } else { + if(!UIP_TCP_SEQ_BETWEEN(uip_seqno,pcb->rcv_nxt,pcb->rcv_nxt+pcb->rcv_wnd-1)) { + uip_tcp_acknow(pcb); + } + } +} + +static s8_t uip_tcp_nullaccept(void *arg,struct uip_tcp_pcb *pcb,s8_t err) +{ + return UIP_ERR_ABRT; +} + +static s8_t uip_tcp_nullrecv(void *arg,struct uip_tcp_pcb *pcb,struct uip_pbuf *p,s8_t err) +{ + if(p!=NULL) uip_pbuf_free(p); + else if(err==UIP_ERR_OK) return uip_tcp_close(pcb); + + return UIP_ERR_OK; +} diff --git a/wii/libogc/libdb/uIP/uip_tcp.h b/wii/libogc/libdb/uIP/uip_tcp.h new file mode 100644 index 0000000000..9c058c9e1e --- /dev/null +++ b/wii/libogc/libdb/uIP/uip_tcp.h @@ -0,0 +1,256 @@ +#ifndef __UIP_TCP_H__ +#define __UIP_TCP_H__ + +#include "uip.h" +#include "uip_ip.h" +#include "uip_pbuf.h" + +#define UIP_TCP_PRIO_MIN 1 +#define UIP_TCP_PRIO_NORMAL 64 +#define UIP_TCP_PRIO_MAX 127 + +/* Keepalive values */ +#define UIP_TCP_KEEPDEFAULT 7200000 /* KEEPALIVE timer in miliseconds */ +#define UIP_TCP_KEEPINTVL 75000 /* Time between KEEPALIVE probes in miliseconds */ +#define UIP_TCP_KEEPCNT 9 /* Counter for KEEPALIVE probes */ +#define UIP_TCP_MAXIDLE (UIP_TCP_KEEPCNT*UIP_TCP_KEEPINTVL) /* Maximum KEEPALIVE probe time */ + +#define UIP_TCP_TMR_INTERVAL 250 +#define UIP_TCP_SLOW_INTERVAL (2*UIP_TCP_TMR_INTERVAL) + +#define UIP_TCP_OOSEQ_TIMEOUT 6 /* x RTO */ + +#define UIP_TCP_MSL 60000 /* The maximum segment lifetime in microseconds */ + +#define UIP_TCP_SEQ_LT(a,b) ((s32_t)((a)-(b)) < 0) +#define UIP_TCP_SEQ_LEQ(a,b) ((s32_t)((a)-(b)) <= 0) +#define UIP_TCP_SEQ_GT(a,b) ((s32_t)((a)-(b)) > 0) +#define UIP_TCP_SEQ_GEQ(a,b) ((s32_t)((a)-(b)) >= 0) + +#define UIP_TCP_SEQ_BETWEEN(a,b,c) (UIP_TCP_SEQ_GEQ(a,b) && UIP_TCP_SEQ_LEQ(a,c)) +#define UIP_TCP_FIN 0x01U +#define UIP_TCP_SYN 0x02U +#define UIP_TCP_RST 0x04U +#define UIP_TCP_PSH 0x08U +#define UIP_TCP_ACK 0x10U +#define UIP_TCP_URG 0x20U +#define UIP_TCP_ECE 0x40U +#define UIP_TCP_CWR 0x80U + +#define UIP_TCP_FLAGS 0x3fU + +/* Length of the TCP header, excluding options. */ +#define UIP_TCP_HLEN 20 + +#define UIP_TCP_FIN_WAIT_TIMEOUT 20000 /* milliseconds */ +#define UIP_TCP_SYN_RCVD_TIMEOUT 20000 /* milliseconds */ + +#define UIP_TCPH_OFFSET(phdr) (ntohs((phdr)->_hdrlen_rsvd_flags) >> 8) +#define UIP_TCPH_HDRLEN(phdr) (ntohs((phdr)->_hdrlen_rsvd_flags) >> 12) +#define UIP_TCPH_FLAGS(phdr) (ntohs((phdr)->_hdrlen_rsvd_flags) & UIP_TCP_FLAGS) + +#define UIP_TCPH_OFFSET_SET(phdr, offset) (phdr)->_hdrlen_rsvd_flags = htons(((offset) << 8)|UIP_TCPH_FLAGS(phdr)) +#define UIP_TCPH_HDRLEN_SET(phdr, len) (phdr)->_hdrlen_rsvd_flags = htons(((len)<<12)|UIP_TCPH_FLAGS(phdr)) +#define UIP_TCPH_FLAGS_SET(phdr, flags) (phdr)->_hdrlen_rsvd_flags = htons((ntohs((phdr)->_hdrlen_rsvd_flags)&~UIP_TCP_FLAGS)|(flags)) +#define UIP_TCPH_SET_FLAG(phdr, flags ) (phdr)->_hdrlen_rsvd_flags = htons(ntohs((phdr)->_hdrlen_rsvd_flags)|(flags)) +#define UIP_TCPH_UNSET_FLAG(phdr, flags) (phdr)->_hdrlen_rsvd_flags = htons(ntohs((phdr)->_hdrlen_rsvd_flags)|(UIP_TCPH_FLAGS(phdr)&~(flags)) ) + +#define UIP_TCP_TCPLEN(seg) ((seg)->len+((UIP_TCPH_FLAGS((seg)->tcphdr)&UIP_TCP_FIN || UIP_TCPH_FLAGS((seg)->tcphdr)&UIP_TCP_SYN)?1:0)) + +#define UIP_TCP_REG(pcbs,npcb) \ + do { \ + npcb->next = *pcbs; \ + *(pcbs) = npcb; \ + tcp_tmr_needed(); \ + } while(0) + +#define UIP_TCP_RMV(pcbs,npcb) \ + do { \ + if(*(pcbs)==npcb) { \ + *(pcbs) = (*pcbs)->next; \ + } else { \ + for(uip_tcp_tmp_pcb=*pcbs;uip_tcp_tmp_pcb!=NULL;uip_tcp_tmp_pcb=uip_tcp_tmp_pcb->next) { \ + if(uip_tcp_tmp_pcb->next!=NULL && uip_tcp_tmp_pcb->next==npcb) { \ + uip_tcp_tmp_pcb->next = npcb->next; \ + break; \ + } \ + } \ + } \ + } while(0) + +#define uip_tcp_sndbuf(pcb) (pcb)->snd_buf + +#define uip_tcp_acknow(pcb) \ + (pcb)->flags |= UIP_TF_ACK_NOW; \ + uip_tcpoutput((pcb)) + +#define uip_tcp_ack(pcb) \ + if((pcb)->flags&UIP_TF_ACK_DELAY) { \ + (pcb)->flags &= ~UIP_TF_ACK_DELAY; \ + (pcb)->flags |= UIP_TF_ACK_NOW; \ + uip_tcpoutput((pcb)); \ + } else { \ + (pcb)->flags |= UIP_TF_ACK_DELAY; \ + } + +/* The TCP Header */ +PACK_STRUCT_BEGIN +struct uip_tcp_hdr { + PACK_STRUCT_FIELD(u16_t src); + PACK_STRUCT_FIELD(u16_t dst); + PACK_STRUCT_FIELD(u32_t seqno); + PACK_STRUCT_FIELD(u32_t ackno); + PACK_STRUCT_FIELD(u16_t _hdrlen_rsvd_flags); + PACK_STRUCT_FIELD(u16_t wnd); + PACK_STRUCT_FIELD(u16_t chksum); + PACK_STRUCT_FIELD(u16_t urgp); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END + +enum uip_tcp_state { + UIP_CLOSED = 0, + UIP_LISTEN = 1, + UIP_SYN_SENT = 2, + UIP_SYN_RCVD = 3, + UIP_ESTABLISHED = 4, + UIP_FIN_WAIT_1 = 5, + UIP_FIN_WAIT_2 = 6, + UIP_CLOSE_WAIT = 7, + UIP_CLOSING = 8, + UIP_LAST_ACK = 9, + UIP_TIME_WAIT = 10 +}; + +struct uip_tcpseg { + struct uip_tcpseg *next; + struct uip_pbuf *p; + u8_t *dataptr; + u16_t len; + struct uip_tcp_hdr *tcphdr; +}; + +struct uip_tcp_pcb { + UIP_IP_PCB; + + struct uip_tcp_pcb *next; + enum uip_tcp_state state; + + u8_t prio; + void *cb_arg; + + u16_t local_port; + u16_t remote_port; + + u8_t flags; +#define UIP_TF_ACK_DELAY (u8_t)0x01U /* Delayed ACK. */ +#define UIP_TF_ACK_NOW (u8_t)0x02U /* Immediate ACK. */ +#define UIP_TF_INFR (u8_t)0x04U /* In fast recovery. */ +#define UIP_TF_RESET (u8_t)0x08U /* Connection was reset. */ +#define UIP_TF_CLOSED (u8_t)0x10U /* Connection was sucessfully closed. */ +#define UIP_TF_GOT_FIN (u8_t)0x20U /* Connection was closed by the remote end. */ +#define UIP_TF_NODELAY (u8_t)0x40U /* Disable Nagle algorithm */ + + u32_t rcv_nxt; + u16_t rcv_wnd; + + u32_t tmr; + u8_t polltmr,pollinterval; + + u16_t rtime; + u16_t mss; + + u32_t rttest; + u32_t rtseq; + s16_t sa,sv; + + u16_t rto; + u8_t nrtx; + + u32_t lastack; + u8_t dupacks; + + u16_t cwnd; + u16_t ssthresh; + + u32_t snd_nxt,snd_max,snd_wnd,snd_wl1,snd_wl2,snd_lbb; + + u16_t acked; + u16_t snd_buf; + u8_t snd_queuelen; + + struct uip_tcpseg *unsent; + struct uip_tcpseg *unacked; + struct uip_tcpseg *ooseq; + + s8_t (*accept)(void *arg,struct uip_tcp_pcb *newpcb,s8_t err); + s8_t (*connected)(void *arg,struct uip_tcp_pcb *newpcb,s8_t err); + s8_t (*poll)(void *arg,struct uip_tcp_pcb *pcb); + + s8_t (*sent)(void *arg,struct uip_tcp_pcb *pcb,u16_t space); + s8_t (*recv)(void *arg,struct uip_tcp_pcb *pcb,struct uip_pbuf *p,s8_t err); + + void (*errf)(void *arg,s8_t err); + + u32_t keepalive; + u8_t keepcnt; +}; + +struct uip_tcp_pcb_listen { + UIP_IP_PCB; + + struct uip_tcp_pcb_listen *next; + enum uip_tcp_state state; + + u8_t prio; + void *cb_arg; + + u16_t local_port; + + s8_t (*accept)(void *arg,struct uip_tcp_pcb *newpcb,s8_t err); +}; + +union uip_tcp_listen_pcbs_t { + struct uip_tcp_pcb_listen *listen_pcbs; + struct uip_tcp_pcb *pcbs; +}; + +extern struct uip_tcp_pcb *uip_tcp_tmp_pcb; +extern struct uip_tcp_pcb *uip_tcp_active_pcbs; +extern struct uip_tcp_pcb *uip_tcp_tw_pcbs; +extern union uip_tcp_listen_pcbs_t uip_tcp_listen_pcbs; + +void uip_tcp_tmr(); +void uip_tcp_slowtmr(); +void uip_tcp_fasttmr(); +void uip_tcp_init(); +void uip_tcp_rst(u32_t seqno,u32_t ackno,struct uip_ip_addr *lipaddr,struct uip_ip_addr *ripaddr,u16_t lport,u16_t rport); +void uip_tcp_abort(struct uip_tcp_pcb *pcb); +void uip_tcp_pcbremove(struct uip_tcp_pcb **pcblist,struct uip_tcp_pcb *pcb); +void uip_tcp_pcbpurge(struct uip_tcp_pcb *pcb); +void uip_tcp_rexmit(struct uip_tcp_pcb *pcb); +void uip_tcp_rexmit_rto(struct uip_tcp_pcb *pcb); +void uip_tcp_accept(struct uip_tcp_pcb *pcb,s8_t (*accept)(void *,struct uip_tcp_pcb *,s8_t)); +void uip_tcp_recved(struct uip_tcp_pcb *pcb,u16_t len); +void uip_tcp_err(struct uip_tcp_pcb *pcb,void (*errf)(void *,s8_t)); +void uip_tcp_keepalive(struct uip_tcp_pcb *pcb); +void uip_tcp_arg(struct uip_tcp_pcb *pcb,void *arg); +void uip_tcp_recv(struct uip_tcp_pcb *pcb,s8_t (*recv)(void *,struct uip_tcp_pcb *,struct uip_pbuf *,s8_t)); +void uip_tcp_sent(struct uip_tcp_pcb *pcb,s8_t (*sent)(void *,struct uip_tcp_pcb *,u16_t)); +void uip_tcp_poll(struct uip_tcp_pcb *pcb,s8_t (*poll)(void *,struct uip_tcp_pcb *),u8_t interval); +s8_t uip_tcp_close(struct uip_tcp_pcb *pcb); +s8_t uip_tcp_bind(struct uip_tcp_pcb *pcb,struct uip_ip_addr *ipaddr,u16_t port); +s8_t uip_tcp_write(struct uip_tcp_pcb *pcb,const void *arg,u16_t len,u8_t copy); +struct uip_tcp_pcb* uip_tcp_listen(struct uip_tcp_pcb *pcb); +struct uip_tcp_pcb* uip_tcp_new(); +struct uip_tcp_pcb* uip_tcp_pcballoc(u8_t prio); + +s8_t uip_tcp_sendctrl(struct uip_tcp_pcb *pcb,u8_t flags); +s8_t uip_tcpoutput(struct uip_tcp_pcb *pcb); +s8_t uip_tcpenqueue(struct uip_tcp_pcb *pcb,void *arg,u16_t len,u8_t flags,u8_t copy,u8_t *optdata,u8_t optlen); +u8_t uip_tcpseg_free(struct uip_tcpseg *seg); +u8_t uip_tcpsegs_free(struct uip_tcpseg *seg); +u32_t uip_tcpiss_next(); +void uip_tcpinput(struct uip_pbuf *p,struct uip_netif *inp); +struct uip_tcpseg* uip_tcpseg_copy(struct uip_tcpseg *seg); + +#endif diff --git a/wii/libogc/libdb/uIP/uipopt.h b/wii/libogc/libdb/uIP/uipopt.h new file mode 100644 index 0000000000..e21f967639 --- /dev/null +++ b/wii/libogc/libdb/uIP/uipopt.h @@ -0,0 +1,500 @@ +/** + * \defgroup uipopt Configuration options for uIP + * @{ + * + * uIP is configured using the per-project configuration file + * "uipopt.h". This file contains all compile-time options for uIP and + * should be tweaked to match each specific project. The uIP + * distribution contains a documented example "uipopt.h" that can be + * copied and modified for each project. + */ + +/** + * \file + * Configuration options for uIP. + * \author Adam Dunkels + * + * This file is used for tweaking various configuration options for + * uIP. You should make a copy of this file into one of your project's + * directories instead of editing this example "uipopt.h" file that + * comes with the uIP distribution. + */ + +/* + * Copyright (c) 2001-2003, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * + */ + +#ifndef __UIPOPT_H__ +#define __UIPOPT_H__ + +#include +#include +#include + +/*------------------------------------------------------------------------------*/ +/** + * \defgroup uipopttypedef uIP type definitions + * @{ + */ + +/** + * The 8-bit unsigned data type. + * + * This may have to be tweaked for your particular compiler. "unsigned + * char" works for most compilers. + */ +typedef u8 u8_t; + +/** + * The 8-bit signed data type. + * + * This may have to be tweaked for your particular compiler. "unsigned + * char" works for most compilers. + */ +typedef s8 s8_t; + +/** + * The 16-bit unsigned data type. + * + * This may have to be tweaked for your particular compiler. "unsigned + * short" works for most compilers. + */ +typedef u16 u16_t; + +/** + * The 16-bit signed data type. + * + * This may have to be tweaked for your particular compiler. "unsigned + * short" works for most compilers. + */ +typedef s16 s16_t; + +/** + * The 32-bit signed data type. + * + * This may have to be tweaked for your particular compiler. "unsigned + * short" works for most compilers. + */ +typedef s32 s32_t; + +/** + * The 32-bit unsigned data type. + * + * This may have to be tweaked for your particular compiler. "unsigned + * short" works for most compilers. + */ +typedef u32 u32_t; + +/** + * The statistics data type. + * + * This datatype determines how high the statistics counters are able + * to count. + */ +typedef u16 uip_stats_t; + +/** @} */ +/*------------------------------------------------------------------------------*/ +/** + * \defgroup uipoptip IP configuration options + * @{ + * + */ +/** + * The IP TTL (time to live) of IP packets sent by uIP. + * + * This should normally not be changed. + */ +#define UIP_TCP_TTL 255 + +#define UIP_TCP 1 + +/** + * Turn on support for IP packet reassembly. + * + * uIP supports reassembly of fragmented IP packets. This features + * requires an additonal amount of RAM to hold the reassembly buffer + * and the reassembly code size is approximately 700 bytes. The + * reassembly buffer is of the same size as the uip_buf buffer + * (configured by UIP_BUFSIZE). + * + * \note IP packet reassembly is not heavily tested. + * + * \hideinitializer + */ +#define UIP_IP_REASSEMBLY 0 + +#define UIP_IP_FRAG 0 + +/** + * The maximum time an IP fragment should wait in the reassembly + * buffer before it is dropped. + * + */ +#define UIP_REASS_MAXAGE 30 + +/** @} */ + +/*------------------------------------------------------------------------------*/ +/** + * \defgroup uipoptudp UDP configuration options + * @{ + * + * \note The UDP support in uIP is still not entirely complete; there + * is no support for sending or receiving broadcast or multicast + * packets, but it works well enough to support a number of vital + * applications such as DNS queries, though + */ + +/** + * Toggles wether UDP support should be compiled in or not. + * + * \hideinitializer + */ +#define UIP_UDP 0 + +/** + * Toggles if UDP checksums should be used or not. + * + * \note Support for UDP checksums is currently not included in uIP, + * so this option has no function. + * + * \hideinitializer + */ +#define UIP_UDP_CHECKSUMS 0 + +/** + * The maximum amount of concurrent UDP connections. + * + * \hideinitializer + */ +#define UIP_UDP_CONNS 10 + +/** + * The name of the function that should be called when UDP datagrams arrive. + * + * \hideinitializer + */ +//#define UIP_UDP_APPCALL ((void*0) + +/** @} */ +/*------------------------------------------------------------------------------*/ +/** + * \defgroup uipopttcp TCP configuration options + * @{ + */ + +/** + * Determines if support for opening connections from uIP should be + * compiled in. + * + * If the applications that are running on top of uIP for this project + * do not need to open outgoing TCP connections, this configration + * option can be turned off to reduce the code size of uIP. + * + * \hideinitializer + */ +#define UIP_ACTIVE_OPEN 1 + +/** + * The maximum number of simultaneously open TCP connections. + * + * Since the TCP connections are statically allocated, turning this + * configuration knob down results in less RAM used. Each TCP + * connection requires approximatly 30 bytes of memory. + * + * \hideinitializer + */ +#define UIP_TCP_PCBS 4 + +/** + * The maximum number of simultaneously listening TCP ports. + * + * Each listening TCP port requires 2 bytes of memory. + * + * \hideinitializer + */ +#define UIP_LISTEN_TCP_PCBS 2 + +/** + * The size of the advertised receiver's window. + * + * Should be set low (i.e., to the size of the uip_buf buffer) is the + * application is slow to process incoming data, or high (32768 bytes) + * if the application processes data quickly. + * + * \hideinitializer + */ +#define UIP_TCPIP_SOCKS 32 + +#define UIP_TCP_SEGS 32 + + +/** + * Determines if support for TCP urgent data notification should be + * compiled in. + * + * Urgent data (out-of-band data) is a rarely used TCP feature that + * very seldom would be required. + * + * \hideinitializer + */ +#define UIP_URGDATA 1 + +/** + * The initial retransmission timeout counted in timer pulses. + * + * This should not be changed. + */ +#define UIP_RTO 3 + +/** + * The maximum number of times a segment should be retransmitted + * before the connection should be aborted. + * + * This should not be changed. + */ +#define UIP_MAXRTX 12 + +/** + * The maximum number of times a SYN segment should be retransmitted + * before a connection request should be deemed to have been + * unsuccessful. + * + * This should not need to be changed. + */ +#define UIP_MAXSYNRTX 4 + +/** + * The TCP maximum segment size. + * + * This is should not be to set to more than UIP_BUFSIZE - UIP_LLH_LEN - 40. + */ +#define UIP_TCP_MSS (1460) + + +#define UIP_TCP_SND_BUF (4*UIP_TCP_MSS) + +#define UIP_TCP_SND_QUEUELEN (4*UIP_TCP_SND_BUF/UIP_TCP_MSS) + +#define UIP_TCP_WND (4*UIP_TCP_MSS) + +/** + * How long a connection should stay in the TIME_WAIT state. + * + * This configiration option has no real implication, and it should be + * left untouched. + */ +#define UIP_TIME_WAIT_TIMEOUT 120 + + +/** @} */ +/*------------------------------------------------------------------------------*/ +/** + * \defgroup uipoptarp ARP configuration options + * @{ + */ + +/** + * The size of the ARP table. + * + * This option should be set to a larger value if this uIP node will + * have many connections from the local network. + * + * \hideinitializer + */ +#define UIP_ARPTAB_SIZE 8 + +/** + * The maxium age of ARP table entries measured in 10ths of seconds. + * + * An UIP_ARP_MAXAGE of 120 corresponds to 20 minutes (BSD + * default). + */ +#define UIP_ARP_MAXAGE 120 + +/** @} */ + +/*------------------------------------------------------------------------------*/ + +/** + * \defgroup uipoptgeneral General configuration options + * @{ + */ + +/** + * The size of the uIP packet buffer. + * + * The uIP packet buffer should not be smaller than 60 bytes, and does + * not need to be larger than 1500 bytes. Lower size results in lower + * TCP throughput, larger size results in higher TCP throughput. + * + * \hideinitializer + */ +#define UIP_MEM_SIZE (28*1024) + +#define UIP_PBUF_POOL_NUM 16 +#define UIP_PBUF_POOL_BUFSIZE 1600 + +#define UIP_PBUF_ROM_NUM 128 + + +/** + * Determines if statistics support should be compiled in. + * + * The statistics is useful for debugging and to show the user. + * + * \hideinitializer + */ +#define UIP_STATISTICS 0 + +/** + * Determines if logging of certain events should be compiled in. + * + * This is useful mostly for debugging. The function uip_log() + * must be implemented to suit the architecture of the project, if + * logging is turned on. + * + * \hideinitializer + */ +#define UIP_LOGGING 0 +#define UIP_ERRORING 0 + +/** + * Print out a uIP log message. + * + * This function must be implemented by the module that uses uIP, and + * is called by uIP whenever a log message is generated. + */ +void uip_log(const char *filename,int line_nb,char *msg); + +/** + * The link level header length. + * + * This is the offset into the uip_buf where the IP header can be + * found. For Ethernet, this should be set to 14. For SLIP, this + * should be set to 0. + * + * \hideinitializer + */ +#define UIP_LL_HLEN 16 + +#define UIP_TCPIP_HLEN 40 +/** @} */ +/*------------------------------------------------------------------------------*/ +/** + * \defgroup uipoptcpu CPU architecture configuration + * @{ + * + * The CPU architecture configuration is where the endianess of the + * CPU on which uIP is to be run is specified. Most CPUs today are + * little endian, and the most notable exception are the Motorolas + * which are big endian. The BYTE_ORDER macro should be changed to + * reflect the CPU architecture on which uIP is to be run. + */ +#ifndef LITTLE_ENDIAN +#define LITTLE_ENDIAN 3412 +#endif /* LITTLE_ENDIAN */ +#ifndef BIG_ENDIAN +#define BIG_ENDIAN 1234 +#endif /* BIGE_ENDIAN */ + +/** + * The byte order of the CPU architecture on which uIP is to be run. + * + * This option can be either BIG_ENDIAN (Motorola byte order) or + * LITTLE_ENDIAN (Intel byte order). + * + * \hideinitializer + */ +#ifndef BYTE_ORDER +#define BYTE_ORDER BIG_ENDIAN +#endif /* BYTE_ORDER */ + +/** @} */ +/*------------------------------------------------------------------------------*/ + +/** + * \defgroup uipoptapp Appication specific configurations + * @{ + * + * An uIP application is implemented using a single application + * function that is called by uIP whenever a TCP/IP event occurs. The + * name of this function must be registered with uIP at compile time + * using the UIP_APPCALL definition. + * + * uIP applications can store the application state within the + * uip_conn structure by specifying the size of the application + * structure with the UIP_APPSTATE_SIZE macro. + * + * The file containing the definitions must be included in the + * uipopt.h file. + * + * The following example illustrates how this can look. + \code + +void httpd_appcall(void); +#define UIP_APPCALL httpd_appcall + +struct httpd_state { + u8_t state; + u16_t count; + char *dataptr; + char *script; +}; +#define UIP_APPSTATE_SIZE (sizeof(struct httpd_state)) + \endcode + */ + +/** + * \var #define UIP_APPCALL + * + * The name of the application function that uIP should call in + * response to TCP/IP events. + * + */ + +/** + * \var #define UIP_APPSTATE_SIZE + * + * The size of the application state that is to be stored in the + * uip_conn structure. + */ +/** @} */ + +/* Include the header file for the application program that should be + used. If you don't use the example web server, you should change + this. */ + +#define UIP_LIBC_MEMFUNCREPLACE 1 + +#endif /* __UIPOPT_H__ */ diff --git a/wii/libogc/libfat/bit_ops.h b/wii/libogc/libfat/bit_ops.h new file mode 100644 index 0000000000..762be0b340 --- /dev/null +++ b/wii/libogc/libfat/bit_ops.h @@ -0,0 +1,57 @@ +/* + bit_ops.h + Functions for dealing with conversion of data between types + + Copyright (c) 2006 Michael "Chishm" Chisholm + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef _BIT_OPS_H +#define _BIT_OPS_H + +#include + +/*----------------------------------------------------------------- +Functions to deal with little endian values stored in uint8_t arrays +-----------------------------------------------------------------*/ +static inline uint16_t u8array_to_u16 (const uint8_t* item, int offset) { + return ( item[offset] | (item[offset + 1] << 8)); +} + +static inline uint32_t u8array_to_u32 (const uint8_t* item, int offset) { + return ( item[offset] | (item[offset + 1] << 8) | (item[offset + 2] << 16) | (item[offset + 3] << 24)); +} + +static inline void u16_to_u8array (uint8_t* item, int offset, uint16_t value) { + item[offset] = (uint8_t) value; + item[offset + 1] = (uint8_t)(value >> 8); +} + +static inline void u32_to_u8array (uint8_t* item, int offset, uint32_t value) { + item[offset] = (uint8_t) value; + item[offset + 1] = (uint8_t)(value >> 8); + item[offset + 2] = (uint8_t)(value >> 16); + item[offset + 3] = (uint8_t)(value >> 24); +} + +#endif // _BIT_OPS_H diff --git a/wii/libogc/libfat/cache.c b/wii/libogc/libfat/cache.c new file mode 100644 index 0000000000..07576b9cbf --- /dev/null +++ b/wii/libogc/libfat/cache.c @@ -0,0 +1,323 @@ +/* + cache.c + The cache is not visible to the user. It should be flushed + when any file is closed or changes are made to the filesystem. + + This cache implements a least-used-page replacement policy. This will + distribute sectors evenly over the pages, so if less than the maximum + pages are used at once, they should all eventually remain in the cache. + This also has the benefit of throwing out old sectors, so as not to keep + too many stale pages around. + + Copyright (c) 2006 Michael "Chishm" Chisholm + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include +#include + +#include "common.h" +#include "cache.h" +#include "disc.h" + +#include "mem_allocate.h" +#include "bit_ops.h" +#include "file_allocation_table.h" + +#define CACHE_FREE UINT_MAX + +CACHE* _FAT_cache_constructor (unsigned int numberOfPages, unsigned int sectorsPerPage, const DISC_INTERFACE* discInterface, sec_t endOfPartition, unsigned int bytesPerSector) { + CACHE* cache; + unsigned int i; + CACHE_ENTRY* cacheEntries; + + if (numberOfPages < 2) { + numberOfPages = 2; + } + + if (sectorsPerPage < 8) { + sectorsPerPage = 8; + } + + cache = (CACHE*) _FAT_mem_allocate (sizeof(CACHE)); + if (cache == NULL) { + return NULL; + } + + cache->disc = discInterface; + cache->endOfPartition = endOfPartition; + cache->numberOfPages = numberOfPages; + cache->sectorsPerPage = sectorsPerPage; + cache->bytesPerSector = bytesPerSector; + + + cacheEntries = (CACHE_ENTRY*) _FAT_mem_allocate ( sizeof(CACHE_ENTRY) * numberOfPages); + if (cacheEntries == NULL) { + _FAT_mem_free (cache); + return NULL; + } + + for (i = 0; i < numberOfPages; i++) { + cacheEntries[i].sector = CACHE_FREE; + cacheEntries[i].count = 0; + cacheEntries[i].last_access = 0; + cacheEntries[i].dirty = false; + cacheEntries[i].cache = (uint8_t*) _FAT_mem_align ( sectorsPerPage * bytesPerSector ); + } + + cache->cacheEntries = cacheEntries; + + return cache; +} + +void _FAT_cache_destructor (CACHE* cache) { + unsigned int i; + // Clear out cache before destroying it + _FAT_cache_flush(cache); + + // Free memory in reverse allocation order + for (i = 0; i < cache->numberOfPages; i++) { + _FAT_mem_free (cache->cacheEntries[i].cache); + } + _FAT_mem_free (cache->cacheEntries); + _FAT_mem_free (cache); +} + + +static u32 accessCounter = 0; + +static u32 accessTime(){ + accessCounter++; + return accessCounter; +} + + +static CACHE_ENTRY* _FAT_cache_getPage(CACHE *cache,sec_t sector) +{ + unsigned int i; + CACHE_ENTRY* cacheEntries = cache->cacheEntries; + unsigned int numberOfPages = cache->numberOfPages; + unsigned int sectorsPerPage = cache->sectorsPerPage; + + bool foundFree = false; + unsigned int oldUsed = 0; + unsigned int oldAccess = UINT_MAX; + + for(i=0;i=cacheEntries[i].sector && sector<(cacheEntries[i].sector + cacheEntries[i].count)) { + cacheEntries[i].last_access = accessTime(); + return &(cacheEntries[i]); + } + + if(foundFree==false && (cacheEntries[i].sector==CACHE_FREE || cacheEntries[i].last_accessdisc,cacheEntries[oldUsed].sector,cacheEntries[oldUsed].count,cacheEntries[oldUsed].cache)) return NULL; + cacheEntries[oldUsed].dirty = false; + } + + sector = (sector/sectorsPerPage)*sectorsPerPage; // align base sector to page size + sec_t next_page = sector + sectorsPerPage; + if(next_page > cache->endOfPartition) next_page = cache->endOfPartition; + + if(!_FAT_disc_readSectors(cache->disc,sector,next_page-sector,cacheEntries[oldUsed].cache)) return NULL; + + cacheEntries[oldUsed].sector = sector; + cacheEntries[oldUsed].count = next_page-sector; + cacheEntries[oldUsed].last_access = accessTime(); + + return &(cacheEntries[oldUsed]); +} + +bool _FAT_cache_readSectors(CACHE *cache,sec_t sector,sec_t numSectors,void *buffer) +{ + sec_t sec; + sec_t secs_to_read; + CACHE_ENTRY *entry; + uint8_t *dest = (uint8_t *)buffer; + + while(numSectors>0) { + entry = _FAT_cache_getPage(cache,sector); + if(entry==NULL) return false; + + sec = sector - entry->sector; + secs_to_read = entry->count - sec; + if(secs_to_read>numSectors) secs_to_read = numSectors; + + memcpy(dest,entry->cache + (sec*cache->bytesPerSector),(secs_to_read*cache->bytesPerSector)); + + dest += (secs_to_read*cache->bytesPerSector); + sector += secs_to_read; + numSectors -= secs_to_read; + } + + return true; +} + +/* +Reads some data from a cache page, determined by the sector number +*/ +bool _FAT_cache_readPartialSector (CACHE* cache, void* buffer, sec_t sector, unsigned int offset, size_t size) +{ + sec_t sec; + CACHE_ENTRY *entry; + + if (offset + size > cache->bytesPerSector) return false; + + entry = _FAT_cache_getPage(cache,sector); + if(entry==NULL) return false; + + sec = sector - entry->sector; + memcpy(buffer,entry->cache + ((sec*cache->bytesPerSector) + offset),size); + + return true; +} + +bool _FAT_cache_readLittleEndianValue (CACHE* cache, uint32_t *value, sec_t sector, unsigned int offset, int num_bytes) { + uint8_t buf[4]; + if (!_FAT_cache_readPartialSector(cache, buf, sector, offset, num_bytes)) return false; + + switch(num_bytes) { + case 1: *value = buf[0]; break; + case 2: *value = u8array_to_u16(buf,0); break; + case 4: *value = u8array_to_u32(buf,0); break; + default: return false; + } + return true; +} + +/* +Writes some data to a cache page, making sure it is loaded into memory first. +*/ +bool _FAT_cache_writePartialSector (CACHE* cache, const void* buffer, sec_t sector, unsigned int offset, size_t size) +{ + sec_t sec; + CACHE_ENTRY *entry; + + if (offset + size > cache->bytesPerSector) return false; + + entry = _FAT_cache_getPage(cache,sector); + if(entry==NULL) return false; + + sec = sector - entry->sector; + memcpy(entry->cache + ((sec*cache->bytesPerSector) + offset),buffer,size); + + entry->dirty = true; + return true; +} + +bool _FAT_cache_writeLittleEndianValue (CACHE* cache, const uint32_t value, sec_t sector, unsigned int offset, int size) { + uint8_t buf[4] = {0, 0, 0, 0}; + + switch(size) { + case 1: buf[0] = value; break; + case 2: u16_to_u8array(buf, 0, value); break; + case 4: u32_to_u8array(buf, 0, value); break; + default: return false; + } + + return _FAT_cache_writePartialSector(cache, buf, sector, offset, size); +} + +/* +Writes some data to a cache page, zeroing out the page first +*/ +bool _FAT_cache_eraseWritePartialSector (CACHE* cache, const void* buffer, sec_t sector, unsigned int offset, size_t size) +{ + sec_t sec; + CACHE_ENTRY *entry; + + if (offset + size > cache->bytesPerSector) return false; + + entry = _FAT_cache_getPage(cache,sector); + if(entry==NULL) return false; + + sec = sector - entry->sector; + memset(entry->cache + (sec*cache->bytesPerSector),0,cache->bytesPerSector); + memcpy(entry->cache + ((sec*cache->bytesPerSector) + offset),buffer,size); + + entry->dirty = true; + return true; +} + + +bool _FAT_cache_writeSectors (CACHE* cache, sec_t sector, sec_t numSectors, const void* buffer) +{ + sec_t sec; + sec_t secs_to_write; + CACHE_ENTRY* entry; + const uint8_t *src = (const uint8_t *)buffer; + + while(numSectors>0) + { + entry = _FAT_cache_getPage(cache,sector); + if(entry==NULL) return false; + + sec = sector - entry->sector; + secs_to_write = entry->count - sec; + if(secs_to_write>numSectors) secs_to_write = numSectors; + + memcpy(entry->cache + (sec*cache->bytesPerSector),src,(secs_to_write*cache->bytesPerSector)); + + src += (secs_to_write*cache->bytesPerSector); + sector += secs_to_write; + numSectors -= secs_to_write; + + entry->dirty = true; + } + return true; +} + +/* +Flushes all dirty pages to disc, clearing the dirty flag. +*/ +bool _FAT_cache_flush (CACHE* cache) { + unsigned int i; + + for (i = 0; i < cache->numberOfPages; i++) { + if (cache->cacheEntries[i].dirty) { + if (!_FAT_disc_writeSectors (cache->disc, cache->cacheEntries[i].sector, cache->cacheEntries[i].count, cache->cacheEntries[i].cache)) { + return false; + } + } + cache->cacheEntries[i].dirty = false; + } + + return true; +} + +void _FAT_cache_invalidate (CACHE* cache) { + unsigned int i; + _FAT_cache_flush(cache); + for (i = 0; i < cache->numberOfPages; i++) { + cache->cacheEntries[i].sector = CACHE_FREE; + cache->cacheEntries[i].last_access = 0; + cache->cacheEntries[i].count = 0; + cache->cacheEntries[i].dirty = false; + } +} diff --git a/wii/libogc/libfat/cache.h b/wii/libogc/libfat/cache.h new file mode 100644 index 0000000000..07bb14c23e --- /dev/null +++ b/wii/libogc/libfat/cache.h @@ -0,0 +1,128 @@ +/* + cache.h + The cache is not visible to the user. It should be flushed + when any file is closed or changes are made to the filesystem. + + This cache implements a least-used-page replacement policy. This will + distribute sectors evenly over the pages, so if less than the maximum + pages are used at once, they should all eventually remain in the cache. + This also has the benefit of throwing out old sectors, so as not to keep + too many stale pages around. + + Copyright (c) 2006 Michael "Chishm" Chisholm + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef _CACHE_H +#define _CACHE_H + +#include "common.h" +#include "disc.h" + +typedef struct { + sec_t sector; + unsigned int count; + unsigned int last_access; + bool dirty; + uint8_t* cache; +} CACHE_ENTRY; + +typedef struct { + const DISC_INTERFACE* disc; + sec_t endOfPartition; + unsigned int numberOfPages; + unsigned int sectorsPerPage; + unsigned int bytesPerSector; + CACHE_ENTRY* cacheEntries; +} CACHE; + +/* +Read data from a sector in the cache +If the sector is not in the cache, it will be swapped in +offset is the position to start reading from +size is the amount of data to read +Precondition: offset + size <= BYTES_PER_READ +*/ +bool _FAT_cache_readPartialSector (CACHE* cache, void* buffer, sec_t sector, unsigned int offset, size_t size); + +bool _FAT_cache_readLittleEndianValue (CACHE* cache, uint32_t *value, sec_t sector, unsigned int offset, int num_bytes); + +/* +Write data to a sector in the cache +If the sector is not in the cache, it will be swapped in. +When the sector is swapped out, the data will be written to the disc +offset is the position to start writing to +size is the amount of data to write +Precondition: offset + size <= BYTES_PER_READ +*/ +bool _FAT_cache_writePartialSector (CACHE* cache, const void* buffer, sec_t sector, unsigned int offset, size_t size); + +bool _FAT_cache_writeLittleEndianValue (CACHE* cache, const uint32_t value, sec_t sector, unsigned int offset, int num_bytes); + +/* +Write data to a sector in the cache, zeroing the sector first +If the sector is not in the cache, it will be swapped in. +When the sector is swapped out, the data will be written to the disc +offset is the position to start writing to +size is the amount of data to write +Precondition: offset + size <= BYTES_PER_READ +*/ +bool _FAT_cache_eraseWritePartialSector (CACHE* cache, const void* buffer, sec_t sector, unsigned int offset, size_t size); + +/* +Read several sectors from the cache +*/ +bool _FAT_cache_readSectors (CACHE* cache, sec_t sector, sec_t numSectors, void* buffer); + +/* +Read a full sector from the cache +*/ +static inline bool _FAT_cache_readSector (CACHE* cache, void* buffer, sec_t sector) { + return _FAT_cache_readPartialSector (cache, buffer, sector, 0, cache->bytesPerSector); +} + +/* +Write a full sector to the cache +*/ +static inline bool _FAT_cache_writeSector (CACHE* cache, const void* buffer, sec_t sector) { + return _FAT_cache_writePartialSector (cache, buffer, sector, 0, cache->bytesPerSector); +} + +bool _FAT_cache_writeSectors (CACHE* cache, sec_t sector, sec_t numSectors, const void* buffer); + +/* +Write any dirty sectors back to disc and clear out the contents of the cache +*/ +bool _FAT_cache_flush (CACHE* cache); + +/* +Clear out the contents of the cache without writing any dirty sectors first +*/ +void _FAT_cache_invalidate (CACHE* cache); + +CACHE* _FAT_cache_constructor (unsigned int numberOfPages, unsigned int sectorsPerPage, const DISC_INTERFACE* discInterface, sec_t endOfPartition, unsigned int bytesPerSector); + +void _FAT_cache_destructor (CACHE* cache); + +#endif // _CACHE_H + diff --git a/wii/libogc/libfat/common.h b/wii/libogc/libfat/common.h new file mode 100644 index 0000000000..c5c5632555 --- /dev/null +++ b/wii/libogc/libfat/common.h @@ -0,0 +1,78 @@ +/* + common.h + Common definitions and included files for the FATlib + + Copyright (c) 2006 Michael "Chishm" Chisholm + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef _COMMON_H +#define _COMMON_H + +#include +#include +#include + +// When compiling for NDS, make sure NDS is defined +#ifndef NDS + #if defined ARM9 || defined ARM7 + #define NDS + #endif +#endif + +// Platform specific includes +#if defined(__gamecube__) || defined (__wii__) + #include + #include + #include +#elif defined(NDS) + #include + #include + #include +#elif defined(GBA) + #include + #include +#endif + +// Platform specific options +#if defined (__wii__) + #define DEFAULT_CACHE_PAGES 4 + #define DEFAULT_SECTORS_PAGE 64 + #define USE_LWP_LOCK + #define USE_RTC_TIME +#elif defined (__gamecube__) + #define DEFAULT_CACHE_PAGES 4 + #define DEFAULT_SECTORS_PAGE 64 + #define USE_LWP_LOCK + #define USE_RTC_TIME +#elif defined (NDS) + #define DEFAULT_CACHE_PAGES 16 + #define DEFAULT_SECTORS_PAGE 8 + #define USE_RTC_TIME +#elif defined (GBA) + #define DEFAULT_CACHE_PAGES 2 + #define DEFAULT_SECTORS_PAGE 8 + #define LIMIT_SECTORS 128 +#endif + +#endif // _COMMON_H diff --git a/wii/libogc/libfat/directory.c b/wii/libogc/libfat/directory.c new file mode 100644 index 0000000000..65906d844b --- /dev/null +++ b/wii/libogc/libfat/directory.c @@ -0,0 +1,1129 @@ +/* + directory.c + Reading, writing and manipulation of the directory structure on + a FAT partition + + Copyright (c) 2006 Michael "Chishm" Chisholm + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include +#include +#include +#include +#include +#include + +#include "directory.h" +#include "common.h" +#include "partition.h" +#include "file_allocation_table.h" +#include "bit_ops.h" +#include "filetime.h" + +// Directory entry codes +#define DIR_ENTRY_LAST 0x00 +#define DIR_ENTRY_FREE 0xE5 + +typedef unsigned short ucs2_t; + +// Long file name directory entry +enum LFN_offset { + LFN_offset_ordinal = 0x00, // Position within LFN + LFN_offset_char0 = 0x01, + LFN_offset_char1 = 0x03, + LFN_offset_char2 = 0x05, + LFN_offset_char3 = 0x07, + LFN_offset_char4 = 0x09, + LFN_offset_flag = 0x0B, // Should be equal to ATTRIB_LFN + LFN_offset_reserved1 = 0x0C, // Always 0x00 + LFN_offset_checkSum = 0x0D, // Checksum of short file name (alias) + LFN_offset_char5 = 0x0E, + LFN_offset_char6 = 0x10, + LFN_offset_char7 = 0x12, + LFN_offset_char8 = 0x14, + LFN_offset_char9 = 0x16, + LFN_offset_char10 = 0x18, + LFN_offset_reserved2 = 0x1A, // Always 0x0000 + LFN_offset_char11 = 0x1C, + LFN_offset_char12 = 0x1E +}; +static const int LFN_offset_table[13]={0x01,0x03,0x05,0x07,0x09,0x0E,0x10,0x12,0x14,0x16,0x18,0x1C,0x1E}; + +#define LFN_END 0x40 +#define LFN_DEL 0x80 + +static const char ILLEGAL_ALIAS_CHARACTERS[] = "\\/:;*?\"<>|&+,=[] "; +static const char ILLEGAL_LFN_CHARACTERS[] = "\\/:*?\"<>|"; + +/* +Returns number of UCS-2 characters needed to encode an LFN +Returns -1 if it is an invalid LFN +*/ +#define ABOVE_UCS_RANGE 0xF0 +static int _FAT_directory_lfnLength (const char* name) { + unsigned int i; + size_t nameLength; + int ucsLength; + const char* tempName = name; + + nameLength = strnlen(name, NAME_MAX); + // Make sure the name is short enough to be valid + if ( nameLength >= NAME_MAX) { + return -1; + } + // Make sure it doesn't contain any invalid characters + if (strpbrk (name, ILLEGAL_LFN_CHARACTERS) != NULL) { + return -1; + } + // Make sure the name doesn't contain any control codes or codes not representable in UCS-2 + for (i = 0; i < nameLength; i++) { + unsigned char ch = (unsigned char) name[i]; + if (ch < 0x20 || ch >= ABOVE_UCS_RANGE) { + return -1; + } + } + // Convert to UCS-2 and get the resulting length + ucsLength = mbsrtowcs(NULL, &tempName, MAX_LFN_LENGTH, NULL); + if (ucsLength < 0 || ucsLength >= MAX_LFN_LENGTH) { + return -1; + } + + // Otherwise it is valid + return ucsLength; +} + +/* +Convert a multibyte encoded string into a NUL-terminated UCS-2 string, storing at most len characters +return number of characters stored +*/ +static size_t _FAT_directory_mbstoucs2 (ucs2_t* dst, const char* src, size_t len) { + mbstate_t ps = {0}; + wchar_t tempChar; + int bytes; + size_t count = 0; + + while (count < len-1 && *src != '\0') { + bytes = mbrtowc (&tempChar, src, MB_CUR_MAX, &ps); + if (bytes > 0) { + *dst = (ucs2_t)tempChar; + src += bytes; + dst++; + count++; + } else if (bytes == 0) { + break; + } else { + return -1; + } + } + *dst = '\0'; + + return count; +} + +/* +Convert a UCS-2 string into a NUL-terminated multibyte string, storing at most len chars +return number of chars stored, or (size_t)-1 on error +*/ +static size_t _FAT_directory_ucs2tombs (char* dst, const ucs2_t* src, size_t len) { + mbstate_t ps = {0}; + size_t count = 0; + int bytes; + char buff[MB_CUR_MAX]; + int i; + + while (count < len - 1 && *src != '\0') { + bytes = wcrtomb (buff, *src, &ps); + if (bytes < 0) { + return -1; + } + if (count + bytes < len && bytes > 0) { + for (i = 0; i < bytes; i++) { + *dst++ = buff[i]; + } + src++; + count += bytes; + } else { + break; + } + } + *dst = L'\0'; + + return count; +} + +/* +Case-independent comparison of two multibyte encoded strings +*/ +static int _FAT_directory_mbsncasecmp (const char* s1, const char* s2, size_t len1) { + wchar_t wc1, wc2; + mbstate_t ps1 = {0}; + mbstate_t ps2 = {0}; + size_t b1 = 0; + size_t b2 = 0; + + if (len1 == 0) { + return 0; + } + + do { + s1 += b1; + s2 += b2; + b1 = mbrtowc(&wc1, s1, MB_CUR_MAX, &ps1); + b2 = mbrtowc(&wc2, s2, MB_CUR_MAX, &ps2); + if ((int)b1 < 0 || (int)b2 < 0) { + break; + } + len1 -= b1; + } while (len1 > 0 && towlower(wc1) == towlower(wc2) && wc1 != 0); + + return towlower(wc1) - towlower(wc2); +} + + +static bool _FAT_directory_entryGetAlias (const u8* entryData, char* destName) { + char c; + bool caseInfo; + int i = 0; + int j = 0; + + destName[0] = '\0'; + if (entryData[0] != DIR_ENTRY_FREE) { + if (entryData[0] == '.') { + destName[0] = '.'; + if (entryData[1] == '.') { + destName[1] = '.'; + destName[2] = '\0'; + } else { + destName[1] = '\0'; + } + } else { + // Copy the filename from the dirEntry to the string + caseInfo = entryData[DIR_ENTRY_caseInfo] & CASE_LOWER_BASE; + for (i = 0; (i < 8) && (entryData[DIR_ENTRY_name + i] != ' '); i++) { + c = entryData[DIR_ENTRY_name + i]; + destName[i] = (caseInfo ? tolower((unsigned char)c) : c); + } + // Copy the extension from the dirEntry to the string + if (entryData[DIR_ENTRY_extension] != ' ') { + destName[i++] = '.'; + caseInfo = entryData[DIR_ENTRY_caseInfo] & CASE_LOWER_EXT; + for ( j = 0; (j < 3) && (entryData[DIR_ENTRY_extension + j] != ' '); j++) { + c = entryData[DIR_ENTRY_extension + j]; + destName[i++] = (caseInfo ? tolower((unsigned char)c) : c); + } + } + destName[i] = '\0'; + } + } + + return (destName[0] != '\0'); +} + +uint32_t _FAT_directory_entryGetCluster (PARTITION* partition, const uint8_t* entryData) { + if (partition->filesysType == FS_FAT32) { + // Only use high 16 bits of start cluster when we are certain they are correctly defined + return u8array_to_u16(entryData,DIR_ENTRY_cluster) | (u8array_to_u16(entryData, DIR_ENTRY_clusterHigh) << 16); + } else { + return u8array_to_u16(entryData,DIR_ENTRY_cluster); + } +} + +static bool _FAT_directory_incrementDirEntryPosition (PARTITION* partition, DIR_ENTRY_POSITION* entryPosition, bool extendDirectory) { + DIR_ENTRY_POSITION position = *entryPosition; + uint32_t tempCluster; + + // Increment offset, wrapping at the end of a sector + ++ position.offset; + if (position.offset == partition->bytesPerSector / DIR_ENTRY_DATA_SIZE) { + position.offset = 0; + // Increment sector when wrapping + ++ position.sector; + // But wrap at the end of a cluster + if ((position.sector == partition->sectorsPerCluster) && (position.cluster != FAT16_ROOT_DIR_CLUSTER)) { + position.sector = 0; + // Move onto the next cluster, making sure there is another cluster to go to + tempCluster = _FAT_fat_nextCluster(partition, position.cluster); + if (tempCluster == CLUSTER_EOF) { + if (extendDirectory) { + tempCluster = _FAT_fat_linkFreeClusterCleared (partition, position.cluster); + if (!_FAT_fat_isValidCluster(partition, tempCluster)) { + return false; // This will only happen if the disc is full + } + } else { + return false; // Got to the end of the directory, not extending it + } + } + position.cluster = tempCluster; + } else if ((position.cluster == FAT16_ROOT_DIR_CLUSTER) && (position.sector == (partition->dataStart - partition->rootDirStart))) { + return false; // Got to end of root directory, can't extend it + } + } + *entryPosition = position; + return true; +} + +bool _FAT_directory_getNextEntry (PARTITION* partition, DIR_ENTRY* entry) { + DIR_ENTRY_POSITION entryStart; + DIR_ENTRY_POSITION entryEnd; + uint8_t entryData[0x20]; + ucs2_t lfn[MAX_LFN_LENGTH]; + bool notFound, found; + int lfnPos; + uint8_t lfnChkSum, chkSum; + bool lfnExists; + int i; + + lfnChkSum = 0; + + entryStart = entry->dataEnd; + + // Make sure we are using the correct root directory, in case of FAT32 + if (entryStart.cluster == FAT16_ROOT_DIR_CLUSTER) { + entryStart.cluster = partition->rootDirCluster; + } + + entryEnd = entryStart; + + lfnExists = false; + + found = false; + notFound = false; + + while (!found && !notFound) { + if (_FAT_directory_incrementDirEntryPosition (partition, &entryEnd, false) == false) { + notFound = true; + break; + } + + _FAT_cache_readPartialSector (partition->cache, entryData, + _FAT_fat_clusterToSector(partition, entryEnd.cluster) + entryEnd.sector, + entryEnd.offset * DIR_ENTRY_DATA_SIZE, DIR_ENTRY_DATA_SIZE); + + if (entryData[DIR_ENTRY_attributes] == ATTRIB_LFN) { + // It's an LFN + if (entryData[LFN_offset_ordinal] & LFN_DEL) { + lfnExists = false; + } else if (entryData[LFN_offset_ordinal] & LFN_END) { + // Last part of LFN, make sure it isn't deleted using previous if(Thanks MoonLight) + entryStart = entryEnd; // This is the start of a directory entry + lfnExists = true; + lfnPos = (entryData[LFN_offset_ordinal] & ~LFN_END) * 13; + if (lfnPos > MAX_LFN_LENGTH - 1) { + lfnPos = MAX_LFN_LENGTH - 1; + } + lfn[lfnPos] = '\0'; // Set end of lfn to null character + lfnChkSum = entryData[LFN_offset_checkSum]; + } + if (lfnChkSum != entryData[LFN_offset_checkSum]) { + lfnExists = false; + } + if (lfnExists) { + lfnPos = ((entryData[LFN_offset_ordinal] & ~LFN_END) - 1) * 13; + for (i = 0; i < 13; i++) { + if (lfnPos + i < MAX_LFN_LENGTH - 1) { + lfn[lfnPos + i] = entryData[LFN_offset_table[i]] | (entryData[LFN_offset_table[i]+1] << 8); + } + } + } + } else if (entryData[DIR_ENTRY_attributes] & ATTRIB_VOL) { + // This is a volume name, don't bother with it + } else if (entryData[0] == DIR_ENTRY_LAST) { + notFound = true; + } else if ((entryData[0] != DIR_ENTRY_FREE) && (entryData[0] > 0x20) && !(entryData[DIR_ENTRY_attributes] & ATTRIB_VOL)) { + if (lfnExists) { + // Calculate file checksum + chkSum = 0; + for (i=0; i < 11; i++) { + // NOTE: The operation is an unsigned char rotate right + chkSum = ((chkSum & 1) ? 0x80 : 0) + (chkSum >> 1) + entryData[i]; + } + if (chkSum != lfnChkSum) { + lfnExists = false; + entry->filename[0] = '\0'; + } + } + + if (lfnExists) { + if (_FAT_directory_ucs2tombs (entry->filename, lfn, NAME_MAX) == (size_t)-1) { + // Failed to convert the file name to UTF-8. Maybe the wrong locale is set? + return false; + } + } else { + entryStart = entryEnd; + _FAT_directory_entryGetAlias (entryData, entry->filename); + } + found = true; + } + } + + // If no file is found, return false + if (notFound) { + return false; + } else { + // Fill in the directory entry struct + entry->dataStart = entryStart; + entry->dataEnd = entryEnd; + memcpy (entry->entryData, entryData, DIR_ENTRY_DATA_SIZE); + return true; + } +} + +bool _FAT_directory_getFirstEntry (PARTITION* partition, DIR_ENTRY* entry, uint32_t dirCluster) { + entry->dataStart.cluster = dirCluster; + entry->dataStart.sector = 0; + entry->dataStart.offset = -1; // Start before the beginning of the directory + + entry->dataEnd = entry->dataStart; + + return _FAT_directory_getNextEntry (partition, entry); +} + +bool _FAT_directory_getRootEntry (PARTITION* partition, DIR_ENTRY* entry) { + entry->dataStart.cluster = 0; + entry->dataStart.sector = 0; + entry->dataStart.offset = 0; + + entry->dataEnd = entry->dataStart; + + memset (entry->filename, '\0', NAME_MAX); + entry->filename[0] = '.'; + + memset (entry->entryData, 0, DIR_ENTRY_DATA_SIZE); + memset (entry->entryData, ' ', 11); + entry->entryData[0] = '.'; + + entry->entryData[DIR_ENTRY_attributes] = ATTRIB_DIR; + + u16_to_u8array (entry->entryData, DIR_ENTRY_cluster, partition->rootDirCluster); + u16_to_u8array (entry->entryData, DIR_ENTRY_clusterHigh, partition->rootDirCluster >> 16); + + return true; +} + +bool _FAT_directory_getVolumeLabel (PARTITION* partition, char *label) { + DIR_ENTRY entry; + DIR_ENTRY_POSITION entryEnd; + uint8_t entryData[DIR_ENTRY_DATA_SIZE]; + int i; + bool end; + + _FAT_directory_getRootEntry(partition, &entry); + + entryEnd = entry.dataEnd; + + // Make sure we are using the correct root directory, in case of FAT32 + if (entryEnd.cluster == FAT16_ROOT_DIR_CLUSTER) { + entryEnd.cluster = partition->rootDirCluster; + } + + label[0]='\0'; + label[11]='\0'; + end = false; + //this entry should be among the first 3 entries in the root directory table, if not, then system can have trouble displaying the right volume label + while(!end) { + if(!_FAT_cache_readPartialSector (partition->cache, entryData, + _FAT_fat_clusterToSector(partition, entryEnd.cluster) + entryEnd.sector, + entryEnd.offset * DIR_ENTRY_DATA_SIZE, DIR_ENTRY_DATA_SIZE)) + { //error reading + return false; + } + + if (entryData[DIR_ENTRY_attributes] == ATTRIB_VOL && entryData[0] != DIR_ENTRY_FREE) { + for (i = 0; i < 11; i++) { + label[i] = entryData[DIR_ENTRY_name + i]; + } + return true; + } else if (entryData[0] == DIR_ENTRY_LAST) { + end = true; + } + + if (_FAT_directory_incrementDirEntryPosition (partition, &entryEnd, false) == false) { + end = true; + } + } + return false; +} + +bool _FAT_directory_entryFromPosition (PARTITION* partition, DIR_ENTRY* entry) { + DIR_ENTRY_POSITION entryStart = entry->dataStart; + DIR_ENTRY_POSITION entryEnd = entry->dataEnd; + bool entryStillValid; + bool finished; + ucs2_t lfn[MAX_LFN_LENGTH]; + int i; + int lfnPos; + uint8_t entryData[DIR_ENTRY_DATA_SIZE]; + + memset (entry->filename, '\0', NAME_MAX); + + // Create an empty directory entry to overwrite the old ones with + for ( entryStillValid = true, finished = false; + entryStillValid && !finished; + entryStillValid = _FAT_directory_incrementDirEntryPosition (partition, &entryStart, false)) + { + _FAT_cache_readPartialSector (partition->cache, entryData, + _FAT_fat_clusterToSector(partition, entryStart.cluster) + entryStart.sector, + entryStart.offset * DIR_ENTRY_DATA_SIZE, DIR_ENTRY_DATA_SIZE); + + if ((entryStart.cluster == entryEnd.cluster) + && (entryStart.sector == entryEnd.sector) + && (entryStart.offset == entryEnd.offset)) { + // Copy the entry data and stop, since this is the last section of the directory entry + memcpy (entry->entryData, entryData, DIR_ENTRY_DATA_SIZE); + finished = true; + } else { + // Copy the long file name data + lfnPos = ((entryData[LFN_offset_ordinal] & ~LFN_END) - 1) * 13; + for (i = 0; i < 13; i++) { + if (lfnPos + i < MAX_LFN_LENGTH - 1) { + lfn[lfnPos + i] = entryData[LFN_offset_table[i]] | (entryData[LFN_offset_table[i]+1] << 8); + } + } + } + } + + if (!entryStillValid) { + return false; + } + + entryStart = entry->dataStart; + if ((entryStart.cluster == entryEnd.cluster) + && (entryStart.sector == entryEnd.sector) + && (entryStart.offset == entryEnd.offset)) { + // Since the entry doesn't have a long file name, extract the short filename + if (!_FAT_directory_entryGetAlias (entry->entryData, entry->filename)) { + return false; + } + } else { + // Encode the long file name into a multibyte string + if (_FAT_directory_ucs2tombs (entry->filename, lfn, NAME_MAX) == (size_t)-1) { + return false; + } + } + + return true; +} + + + +bool _FAT_directory_entryFromPath (PARTITION* partition, DIR_ENTRY* entry, const char* path, const char* pathEnd) { + size_t dirnameLength; + const char* pathPosition; + const char* nextPathPosition; + uint32_t dirCluster; + bool foundFile; + char alias[MAX_ALIAS_LENGTH]; + bool found, notFound; + + pathPosition = path; + + found = false; + notFound = false; + + if (pathEnd == NULL) { + // Set pathEnd to the end of the path string + pathEnd = strchr (path, '\0'); + } + + if (pathPosition[0] == DIR_SEPARATOR) { + // Start at root directory + dirCluster = partition->rootDirCluster; + // Consume separator(s) + while (pathPosition[0] == DIR_SEPARATOR) { + pathPosition++; + } + // If the path is only specifying a directory in the form of "/" return it + if (pathPosition >= pathEnd) { + _FAT_directory_getRootEntry (partition, entry); + found = true; + } + } else { + // Start in current working directory + dirCluster = partition->cwdCluster; + } + + while (!found && !notFound) { + // Get the name of the next required subdirectory within the path + nextPathPosition = strchr (pathPosition, DIR_SEPARATOR); + if (nextPathPosition != NULL) { + dirnameLength = nextPathPosition - pathPosition; + } else { + dirnameLength = strlen(pathPosition); + } + + if (dirnameLength > NAME_MAX) { + // The path is too long to bother with + return false; + } + + // Check for "." or ".." when the dirCluster is root cluster + // These entries do not exist, so we must fake it + if ((dirCluster == partition->rootDirCluster) + && ((strncmp(".", pathPosition, dirnameLength) == 0) + || (strncmp("..", pathPosition, dirnameLength) == 0))) { + foundFile = true; + _FAT_directory_getRootEntry(partition, entry); + } else { + // Look for the directory within the path + foundFile = _FAT_directory_getFirstEntry (partition, entry, dirCluster); + + while (foundFile && !found && !notFound) { // It hasn't already found the file + // Check if the filename matches + if ((dirnameLength == strnlen(entry->filename, NAME_MAX)) + && (_FAT_directory_mbsncasecmp(pathPosition, entry->filename, dirnameLength) == 0)) { + found = true; + } + + // Check if the alias matches + _FAT_directory_entryGetAlias (entry->entryData, alias); + if ((dirnameLength == strnlen(alias, MAX_ALIAS_LENGTH)) + && (strncasecmp(pathPosition, alias, dirnameLength) == 0)) { + found = true; + } + + if (found && !(entry->entryData[DIR_ENTRY_attributes] & ATTRIB_DIR) && (nextPathPosition != NULL)) { + // Make sure that we aren't trying to follow a file instead of a directory in the path + found = false; + } + + if (!found) { + foundFile = _FAT_directory_getNextEntry (partition, entry); + } + } + } + + if (!foundFile) { + // Check that the search didn't get to the end of the directory + notFound = true; + found = false; + } else if ((nextPathPosition == NULL) || (nextPathPosition >= pathEnd)) { + // Check that we reached the end of the path + found = true; + } else if (entry->entryData[DIR_ENTRY_attributes] & ATTRIB_DIR) { + dirCluster = _FAT_directory_entryGetCluster (partition, entry->entryData); + if (dirCluster == CLUSTER_ROOT) + dirCluster = partition->rootDirCluster; + pathPosition = nextPathPosition; + // Consume separator(s) + while (pathPosition[0] == DIR_SEPARATOR) { + pathPosition++; + } + // The requested directory was found + if (pathPosition >= pathEnd) { + found = true; + } else { + found = false; + } + } + } + + if (found && !notFound) { + if (partition->filesysType == FS_FAT32 && (entry->entryData[DIR_ENTRY_attributes] & ATTRIB_DIR) && + _FAT_directory_entryGetCluster (partition, entry->entryData) == CLUSTER_ROOT) + { + // On FAT32 it should specify an actual cluster for the root entry, + // not cluster 0 as on FAT16 + _FAT_directory_getRootEntry (partition, entry); + } + return true; + } else { + return false; + } +} + +bool _FAT_directory_removeEntry (PARTITION* partition, DIR_ENTRY* entry) { + DIR_ENTRY_POSITION entryStart = entry->dataStart; + DIR_ENTRY_POSITION entryEnd = entry->dataEnd; + bool entryStillValid; + bool finished; + uint8_t entryData[DIR_ENTRY_DATA_SIZE]; + + // Create an empty directory entry to overwrite the old ones with + for ( entryStillValid = true, finished = false; + entryStillValid && !finished; + entryStillValid = _FAT_directory_incrementDirEntryPosition (partition, &entryStart, false)) + { + _FAT_cache_readPartialSector (partition->cache, entryData, _FAT_fat_clusterToSector(partition, entryStart.cluster) + entryStart.sector, entryStart.offset * DIR_ENTRY_DATA_SIZE, DIR_ENTRY_DATA_SIZE); + entryData[0] = DIR_ENTRY_FREE; + _FAT_cache_writePartialSector (partition->cache, entryData, _FAT_fat_clusterToSector(partition, entryStart.cluster) + entryStart.sector, entryStart.offset * DIR_ENTRY_DATA_SIZE, DIR_ENTRY_DATA_SIZE); + if ((entryStart.cluster == entryEnd.cluster) && (entryStart.sector == entryEnd.sector) && (entryStart.offset == entryEnd.offset)) { + finished = true; + } + } + + if (!entryStillValid) { + return false; + } + + return true; +} + +static bool _FAT_directory_findEntryGap (PARTITION* partition, DIR_ENTRY* entry, uint32_t dirCluster, size_t size) { + DIR_ENTRY_POSITION gapStart; + DIR_ENTRY_POSITION gapEnd; + uint8_t entryData[DIR_ENTRY_DATA_SIZE]; + size_t dirEntryRemain; + bool endOfDirectory, entryStillValid; + + // Scan Dir for free entry + gapEnd.offset = 0; + gapEnd.sector = 0; + gapEnd.cluster = dirCluster; + + gapStart = gapEnd; + + entryStillValid = true; + dirEntryRemain = size; + endOfDirectory = false; + + while (entryStillValid && !endOfDirectory && (dirEntryRemain > 0)) { + _FAT_cache_readPartialSector (partition->cache, entryData, + _FAT_fat_clusterToSector(partition, gapEnd.cluster) + gapEnd.sector, + gapEnd.offset * DIR_ENTRY_DATA_SIZE, DIR_ENTRY_DATA_SIZE); + if (entryData[0] == DIR_ENTRY_LAST) { + if (dirEntryRemain == size) { + gapStart = gapEnd; + } + -- dirEntryRemain; + endOfDirectory = true; + } else if (entryData[0] == DIR_ENTRY_FREE) { + if (dirEntryRemain == size) { + gapStart = gapEnd; + } + -- dirEntryRemain; + } else { + dirEntryRemain = size; + } + + if (!endOfDirectory && (dirEntryRemain > 0)) { + entryStillValid = _FAT_directory_incrementDirEntryPosition (partition, &gapEnd, true); + } + } + + // Make sure the scanning didn't fail + if (!entryStillValid) { + return false; + } + + // Save the start entry, since we know it is valid + entry->dataStart = gapStart; + + if (endOfDirectory) { + memset (entryData, DIR_ENTRY_LAST, DIR_ENTRY_DATA_SIZE); + dirEntryRemain += 1; // Increase by one to take account of End Of Directory Marker + while ((dirEntryRemain > 0) && entryStillValid) { + // Get the gapEnd before incrementing it, so the second to last one is saved + entry->dataEnd = gapEnd; + // Increment gapEnd, moving onto the next entry + entryStillValid = _FAT_directory_incrementDirEntryPosition (partition, &gapEnd, true); + -- dirEntryRemain; + // Fill the entry with blanks + _FAT_cache_writePartialSector (partition->cache, entryData, + _FAT_fat_clusterToSector(partition, gapEnd.cluster) + gapEnd.sector, + gapEnd.offset * DIR_ENTRY_DATA_SIZE, DIR_ENTRY_DATA_SIZE); + } + if (!entryStillValid) { + return false; + } + } else { + entry->dataEnd = gapEnd; + } + + return true; +} + +static bool _FAT_directory_entryExists (PARTITION* partition, const char* name, uint32_t dirCluster) { + DIR_ENTRY tempEntry; + bool foundFile; + char alias[MAX_ALIAS_LENGTH]; + size_t dirnameLength; + + dirnameLength = strnlen(name, NAME_MAX); + + if (dirnameLength >= NAME_MAX) { + return false; + } + + // Make sure the entry doesn't already exist + foundFile = _FAT_directory_getFirstEntry (partition, &tempEntry, dirCluster); + + while (foundFile) { // It hasn't already found the file + // Check if the filename matches + if ((dirnameLength == strnlen(tempEntry.filename, NAME_MAX)) + && (_FAT_directory_mbsncasecmp(name, tempEntry.filename, dirnameLength) == 0)) { + return true; + } + + // Check if the alias matches + _FAT_directory_entryGetAlias (tempEntry.entryData, alias); + if ((strncasecmp(name, alias, MAX_ALIAS_LENGTH) == 0)) { + return true; + } + foundFile = _FAT_directory_getNextEntry (partition, &tempEntry); + } + return false; +} + +/* +Creates an alias for a long file name. If the alias is not an exact match for the +filename, it returns the number of characters in the alias. If the two names match, +it returns 0. If there was an error, it returns -1. +*/ +static int _FAT_directory_createAlias (char* alias, const char* lfn) { + bool lossyConversion = false; // Set when the alias had to be modified to be valid + int lfnPos = 0; + int aliasPos = 0; + wchar_t lfnChar; + int oemChar; + mbstate_t ps = {0}; + int bytesUsed = 0; + const char* lfnExt; + int aliasExtLen; + + // Strip leading periods + while (lfn[lfnPos] == '.') { + lfnPos ++; + lossyConversion = true; + } + + // Primary portion of alias + while (aliasPos < 8 && lfn[lfnPos] != '.' && lfn[lfnPos] != '\0') { + bytesUsed = mbrtowc(&lfnChar, lfn + lfnPos, NAME_MAX - lfnPos, &ps); + if (bytesUsed < 0) { + return -1; + } + oemChar = wctob(towupper((wint_t)lfnChar)); + if (wctob((wint_t)lfnChar) != oemChar) { + // Case of letter was changed + lossyConversion = true; + } + if (oemChar == ' ') { + // Skip spaces in filename + lossyConversion = true; + lfnPos += bytesUsed; + continue; + } + if (oemChar == EOF) { + oemChar = '_'; // Replace unconvertable characters with underscores + lossyConversion = true; + } + if (strchr (ILLEGAL_ALIAS_CHARACTERS, oemChar) != NULL) { + // Invalid Alias character + oemChar = '_'; // Replace illegal characters with underscores + lossyConversion = true; + } + + alias[aliasPos] = (char)oemChar; + aliasPos++; + lfnPos += bytesUsed; + } + + if (lfn[lfnPos] != '.' && lfn[lfnPos] != '\0') { + // Name was more than 8 characters long + lossyConversion = true; + } + + // Alias extension + lfnExt = strrchr (lfn, '.'); + if (lfnExt != NULL && lfnExt != strchr (lfn, '.')) { + // More than one period in name + lossyConversion = true; + } + if (lfnExt != NULL && lfnExt[1] != '\0') { + lfnExt++; + alias[aliasPos] = '.'; + aliasPos++; + memset (&ps, 0, sizeof(ps)); + for (aliasExtLen = 0; aliasExtLen < MAX_ALIAS_EXT_LENGTH && *lfnExt != '\0'; aliasExtLen++) { + bytesUsed = mbrtowc(&lfnChar, lfnExt, NAME_MAX - lfnPos, &ps); + if (bytesUsed < 0) { + return -1; + } + oemChar = wctob(towupper((wint_t)lfnChar)); + if (wctob((wint_t)lfnChar) != oemChar) { + // Case of letter was changed + lossyConversion = true; + } + if (oemChar == ' ') { + // Skip spaces in alias + lossyConversion = true; + lfnExt += bytesUsed; + continue; + } + if (oemChar == EOF) { + oemChar = '_'; // Replace unconvertable characters with underscores + lossyConversion = true; + } + if (strchr (ILLEGAL_ALIAS_CHARACTERS, oemChar) != NULL) { + // Invalid Alias character + oemChar = '_'; // Replace illegal characters with underscores + lossyConversion = true; + } + + alias[aliasPos] = (char)oemChar; + aliasPos++; + lfnExt += bytesUsed; + } + if (*lfnExt != '\0') { + // Extension was more than 3 characters long + lossyConversion = true; + } + } + + alias[aliasPos] = '\0'; + if (lossyConversion) { + return aliasPos; + } else { + return 0; + } +} + +bool _FAT_directory_addEntry (PARTITION* partition, DIR_ENTRY* entry, uint32_t dirCluster) { + size_t entrySize; + uint8_t lfnEntry[DIR_ENTRY_DATA_SIZE]; + int i,j; // Must be signed for use when decrementing in for loop + char *tmpCharPtr; + DIR_ENTRY_POSITION curEntryPos; + bool entryStillValid; + uint8_t aliasCheckSum = 0; + char alias [MAX_ALIAS_LENGTH]; + int aliasLen; + int lfnLen; + + // Remove trailing spaces + for (i = strlen (entry->filename) - 1; (i >= 0) && (entry->filename[i] == ' '); --i) { + entry->filename[i] = '\0'; + } +#if 0 + // Remove leading spaces + for (i = 0; entry->filename[i] == ' '; ++i) ; + if (i > 0) { + memmove (entry->filename, entry->filename + i, strlen (entry->filename + i)); + } +#endif + + // Make sure the filename is not 0 length + if (strnlen (entry->filename, NAME_MAX) < 1) { + return false; + } + + // Make sure the filename is at least a valid LFN + lfnLen = _FAT_directory_lfnLength (entry->filename); + if (lfnLen < 0) { + return false; + } + + // Remove junk in filename + i = strlen (entry->filename); + memset (entry->filename + i, '\0', NAME_MAX - i); + + // Make sure the entry doesn't already exist + if (_FAT_directory_entryExists (partition, entry->filename, dirCluster)) { + return false; + } + + // Clear out alias, so we can generate a new one + memset (entry->entryData, ' ', 11); + + if ( strncmp(entry->filename, ".", NAME_MAX) == 0) { + // "." entry + entry->entryData[0] = '.'; + entrySize = 1; + } else if ( strncmp(entry->filename, "..", NAME_MAX) == 0) { + // ".." entry + entry->entryData[0] = '.'; + entry->entryData[1] = '.'; + entrySize = 1; + } else { + // Normal file name + aliasLen = _FAT_directory_createAlias (alias, entry->filename); + if (aliasLen < 0) { + return false; + } else if (aliasLen == 0) { + // It's a normal short filename + entrySize = 1; + } else { + // It's a long filename with an alias + entrySize = ((lfnLen + LFN_ENTRY_LENGTH - 1) / LFN_ENTRY_LENGTH) + 1; + + // Generate full alias for all cases except when the alias is simply an upper case version of the LFN + // and there isn't already a file with that name + if (strncasecmp (alias, entry->filename, MAX_ALIAS_LENGTH) != 0 || + _FAT_directory_entryExists (partition, alias, dirCluster)) + { + // expand primary part to 8 characters long by padding the end with underscores + i = 0; + j = MAX_ALIAS_PRI_LENGTH; + // Move extension to last 3 characters + while (alias[i] != '.' && alias[i] != '\0') i++; + if (i < j) { + memmove (alias + j, alias + i, aliasLen - i + 1); + // Pad primary component + memset (alias + i, '_', j - i); + } + // Generate numeric tail + for (i = 1; i <= MAX_NUMERIC_TAIL; i++) { + j = i; + tmpCharPtr = alias + MAX_ALIAS_PRI_LENGTH - 1; + while (j > 0) { + *tmpCharPtr = '0' + (j % 10); // ASCII numeric value + tmpCharPtr--; + j /= 10; + } + *tmpCharPtr = '~'; + if (!_FAT_directory_entryExists (partition, alias, dirCluster)) { + break; + } + } + if (i > MAX_NUMERIC_TAIL) { + // Couldn't get a valid alias + return false; + } + } + } + + // Copy alias or short file name into directory entry data + for (i = 0, j = 0; (j < 8) && (alias[i] != '.') && (alias[i] != '\0'); i++, j++) { + entry->entryData[j] = alias[i]; + } + while (j < 8) { + entry->entryData[j] = ' '; + ++ j; + } + if (alias[i] == '.') { + // Copy extension + ++ i; + while ((alias[i] != '\0') && (j < 11)) { + entry->entryData[j] = alias[i]; + ++ i; + ++ j; + } + } + while (j < 11) { + entry->entryData[j] = ' '; + ++ j; + } + + // Generate alias checksum + for (i=0; i < ALIAS_ENTRY_LENGTH; i++) { + // NOTE: The operation is an unsigned char rotate right + aliasCheckSum = ((aliasCheckSum & 1) ? 0x80 : 0) + (aliasCheckSum >> 1) + entry->entryData[i]; + } + } + + // Find or create space for the entry + if (_FAT_directory_findEntryGap (partition, entry, dirCluster, entrySize) == false) { + return false; + } + + // Write out directory entry + curEntryPos = entry->dataStart; + + { + // lfn is only pushed onto the stack here, reducing overall stack usage + ucs2_t lfn[MAX_LFN_LENGTH] = {0}; + _FAT_directory_mbstoucs2 (lfn, entry->filename, MAX_LFN_LENGTH); + + for (entryStillValid = true, i = entrySize; entryStillValid && i > 0; + entryStillValid = _FAT_directory_incrementDirEntryPosition (partition, &curEntryPos, false), -- i ) + { + if (i > 1) { + // Long filename entry + lfnEntry[LFN_offset_ordinal] = (i - 1) | ((size_t)i == entrySize ? LFN_END : 0); + for (j = 0; j < 13; j++) { + if (lfn [(i - 2) * 13 + j] == '\0') { + if ((j > 1) && (lfn [(i - 2) * 13 + (j-1)] == '\0')) { + u16_to_u8array (lfnEntry, LFN_offset_table[j], 0xffff); // Padding + } else { + u16_to_u8array (lfnEntry, LFN_offset_table[j], 0x0000); // Terminating null character + } + } else { + u16_to_u8array (lfnEntry, LFN_offset_table[j], lfn [(i - 2) * 13 + j]); + } + } + + lfnEntry[LFN_offset_checkSum] = aliasCheckSum; + lfnEntry[LFN_offset_flag] = ATTRIB_LFN; + lfnEntry[LFN_offset_reserved1] = 0; + u16_to_u8array (lfnEntry, LFN_offset_reserved2, 0); + _FAT_cache_writePartialSector (partition->cache, lfnEntry, _FAT_fat_clusterToSector(partition, curEntryPos.cluster) + curEntryPos.sector, curEntryPos.offset * DIR_ENTRY_DATA_SIZE, DIR_ENTRY_DATA_SIZE); + } else { + // Alias & file data + _FAT_cache_writePartialSector (partition->cache, entry->entryData, _FAT_fat_clusterToSector(partition, curEntryPos.cluster) + curEntryPos.sector, curEntryPos.offset * DIR_ENTRY_DATA_SIZE, DIR_ENTRY_DATA_SIZE); + } + } + } + + return true; +} + +bool _FAT_directory_chdir (PARTITION* partition, const char* path) { + DIR_ENTRY entry; + + if (!_FAT_directory_entryFromPath (partition, &entry, path, NULL)) { + return false; + } + + if (!(entry.entryData[DIR_ENTRY_attributes] & ATTRIB_DIR)) { + return false; + } + + partition->cwdCluster = _FAT_directory_entryGetCluster (partition, entry.entryData); + + return true; +} + +void _FAT_directory_entryStat (PARTITION* partition, DIR_ENTRY* entry, struct stat *st) { + // Fill in the stat struct + // Some of the values are faked for the sake of compatibility + st->st_dev = _FAT_disc_hostType(partition->disc); // The device is the 32bit ioType value + st->st_ino = (ino_t)(_FAT_directory_entryGetCluster(partition, entry->entryData)); // The file serial number is the start cluster + st->st_mode = (_FAT_directory_isDirectory(entry) ? S_IFDIR : S_IFREG) | + (S_IRUSR | S_IRGRP | S_IROTH) | + (_FAT_directory_isWritable (entry) ? (S_IWUSR | S_IWGRP | S_IWOTH) : 0); // Mode bits based on dirEntry ATTRIB byte + st->st_nlink = 1; // Always one hard link on a FAT file + st->st_uid = 1; // Faked for FAT + st->st_gid = 2; // Faked for FAT + st->st_rdev = st->st_dev; + st->st_size = u8array_to_u32 (entry->entryData, DIR_ENTRY_fileSize); // File size + st->st_atime = _FAT_filetime_to_time_t ( + 0, + u8array_to_u16 (entry->entryData, DIR_ENTRY_aDate) + ); + st->st_spare1 = 0; + st->st_mtime = _FAT_filetime_to_time_t ( + u8array_to_u16 (entry->entryData, DIR_ENTRY_mTime), + u8array_to_u16 (entry->entryData, DIR_ENTRY_mDate) + ); + st->st_spare2 = 0; + st->st_ctime = _FAT_filetime_to_time_t ( + u8array_to_u16 (entry->entryData, DIR_ENTRY_cTime), + u8array_to_u16 (entry->entryData, DIR_ENTRY_cDate) + ); + st->st_spare3 = 0; + st->st_blksize = partition->bytesPerSector; // Prefered file I/O block size + st->st_blocks = (st->st_size + partition->bytesPerSector - 1) / partition->bytesPerSector; // File size in blocks + st->st_spare4[0] = 0; + st->st_spare4[1] = 0; +} diff --git a/wii/libogc/libfat/directory.h b/wii/libogc/libfat/directory.h new file mode 100644 index 0000000000..9f7af8ed35 --- /dev/null +++ b/wii/libogc/libfat/directory.h @@ -0,0 +1,181 @@ +/* + directory.h + Reading, writing and manipulation of the directory structure on + a FAT partition + + Copyright (c) 2006 Michael "Chishm" Chisholm + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef _DIRECTORY_H +#define _DIRECTORY_H + +#include +#include + +#include "common.h" +#include "partition.h" + +#define DIR_ENTRY_DATA_SIZE 0x20 +#define MAX_LFN_LENGTH 256 +#define MAX_ALIAS_LENGTH 13 +#define LFN_ENTRY_LENGTH 13 +#define ALIAS_ENTRY_LENGTH 11 +#define MAX_ALIAS_EXT_LENGTH 3 +#define MAX_ALIAS_PRI_LENGTH 8 +#define MAX_NUMERIC_TAIL 999999 +#define FAT16_ROOT_DIR_CLUSTER 0 + +#define DIR_SEPARATOR '/' + +// File attributes +#define ATTRIB_ARCH 0x20 // Archive +#define ATTRIB_DIR 0x10 // Directory +#define ATTRIB_LFN 0x0F // Long file name +#define ATTRIB_VOL 0x08 // Volume +#define ATTRIB_SYS 0x04 // System +#define ATTRIB_HID 0x02 // Hidden +#define ATTRIB_RO 0x01 // Read only + +#define CASE_LOWER_EXT 0x10 // WinNT lowercase extension +#define CASE_LOWER_BASE 0x08 // WinNT lowercase basename + +typedef enum {FT_DIRECTORY, FT_FILE} FILE_TYPE; + +typedef struct { + uint32_t cluster; + sec_t sector; + int32_t offset; +} DIR_ENTRY_POSITION; + +typedef struct { + uint8_t entryData[DIR_ENTRY_DATA_SIZE]; + DIR_ENTRY_POSITION dataStart; // Points to the start of the LFN entries of a file, or the alias for no LFN + DIR_ENTRY_POSITION dataEnd; // Always points to the file/directory's alias entry + char filename[NAME_MAX]; +} DIR_ENTRY; + +// Directory entry offsets +enum DIR_ENTRY_offset { + DIR_ENTRY_name = 0x00, + DIR_ENTRY_extension = 0x08, + DIR_ENTRY_attributes = 0x0B, + DIR_ENTRY_caseInfo = 0x0C, + DIR_ENTRY_cTime_ms = 0x0D, + DIR_ENTRY_cTime = 0x0E, + DIR_ENTRY_cDate = 0x10, + DIR_ENTRY_aDate = 0x12, + DIR_ENTRY_clusterHigh = 0x14, + DIR_ENTRY_mTime = 0x16, + DIR_ENTRY_mDate = 0x18, + DIR_ENTRY_cluster = 0x1A, + DIR_ENTRY_fileSize = 0x1C +}; + +/* +Returns true if the file specified by entry is a directory +*/ +static inline bool _FAT_directory_isDirectory (DIR_ENTRY* entry) { + return ((entry->entryData[DIR_ENTRY_attributes] & ATTRIB_DIR) != 0); +} + +static inline bool _FAT_directory_isWritable (DIR_ENTRY* entry) { + return ((entry->entryData[DIR_ENTRY_attributes] & ATTRIB_RO) == 0); +} + +static inline bool _FAT_directory_isDot (DIR_ENTRY* entry) { + return ((entry->filename[0] == '.') && ((entry->filename[1] == '\0') || + ((entry->filename[1] == '.') && entry->filename[2] == '\0'))); +} + +/* +Reads the first directory entry from the directory starting at dirCluster +Places result in entry +entry will be destroyed even if no directory entry is found +Returns true on success, false on failure +*/ +bool _FAT_directory_getFirstEntry (PARTITION* partition, DIR_ENTRY* entry, uint32_t dirCluster); + +/* +Reads the next directory entry after the one already pointed to by entry +Places result in entry +entry will be destroyed even if no directory entry is found +Returns true on success, false on failure +*/ +bool _FAT_directory_getNextEntry (PARTITION* partition, DIR_ENTRY* entry); + +/* +Gets the directory entry corrsponding to the supplied path +entry will be destroyed even if no directory entry is found +pathEnd specifies the end of the path string, for cutting strings short if needed + specify NULL to use the full length of path + pathEnd is only a suggestion, and the path string will be searched up until the next PATH_SEPARATOR + after pathEND. +Returns true on success, false on failure +*/ +bool _FAT_directory_entryFromPath (PARTITION* partition, DIR_ENTRY* entry, const char* path, const char* pathEnd); + +/* +Changes the current directory to the one specified by path +Returns true on success, false on failure +*/ +bool _FAT_directory_chdir (PARTITION* partition, const char* path); + +/* +Removes the directory entry specified by entry +Assumes that entry is valid +Returns true on success, false on failure +*/ +bool _FAT_directory_removeEntry (PARTITION* partition, DIR_ENTRY* entry); + +/* +Add a directory entry to the directory specified by dirCluster +The fileData, dataStart and dataEnd elements of the DIR_ENTRY struct are +updated with the new directory entry position and alias. +Returns true on success, false on failure +*/ +bool _FAT_directory_addEntry (PARTITION* partition, DIR_ENTRY* entry, uint32_t dirCluster); + +/* +Get the start cluster of a file from it's entry data +*/ +uint32_t _FAT_directory_entryGetCluster (PARTITION* partition, const uint8_t* entryData); + +/* +Fill in the file name and entry data of DIR_ENTRY* entry. +Assumes that the entry's dataStart and dataEnd are correct +Returns true on success, false on failure +*/ +bool _FAT_directory_entryFromPosition (PARTITION* partition, DIR_ENTRY* entry); + +/* +Fill in a stat struct based on a file entry +*/ +void _FAT_directory_entryStat (PARTITION* partition, DIR_ENTRY* entry, struct stat *st); + +/* +Get volume label +*/ +bool _FAT_directory_getVolumeLabel (PARTITION* partition, char *label); + +#endif // _DIRECTORY_H diff --git a/wii/libogc/libfat/disc.c b/wii/libogc/libfat/disc.c new file mode 100644 index 0000000000..d27da2a099 --- /dev/null +++ b/wii/libogc/libfat/disc.c @@ -0,0 +1,112 @@ +/* + disc.c + Interface to the low level disc functions. Used by the higher level + file system code. + + Copyright (c) 2008 Michael "Chishm" Chisholm + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include "disc.h" + +/* +The list of interfaces consists of a series of name/interface pairs. +The interface is returned via a simple function. This allows for +platforms where the interface has to be "assembled" before it can +be used, like DLDI on the NDS. For cases where a simple struct +is available, wrapper functions are used. +The list is terminated by a NULL/NULL entry. +*/ + +/* ====================== Wii ====================== */ +#if defined (__wii__) +#include +#include +#include + +static const DISC_INTERFACE* get_io_wiisd (void) { + return &__io_wiisd; +} +static const DISC_INTERFACE* get_io_usbstorage (void) { + return &__io_usbstorage; +} + +static const DISC_INTERFACE* get_io_gcsda (void) { + return &__io_gcsda; +} + +static const DISC_INTERFACE* get_io_gcsdb (void) { + return &__io_gcsdb; +} + +const INTERFACE_ID _FAT_disc_interfaces[] = { + {"sd", get_io_wiisd}, + {"usb", get_io_usbstorage}, + {"carda", get_io_gcsda}, + {"cardb", get_io_gcsdb}, + {NULL, NULL} +}; + +/* ==================== Gamecube ==================== */ +#elif defined (__gamecube__) +#include + +static const DISC_INTERFACE* get_io_gcsda (void) { + return &__io_gcsda; +} +static const DISC_INTERFACE* get_io_gcsdb (void) { + return &__io_gcsdb; +} + +const INTERFACE_ID _FAT_disc_interfaces[] = { + {"carda", get_io_gcsda}, + {"cardb", get_io_gcsdb}, + {NULL, NULL} +}; + +/* ====================== NDS ====================== */ +#elif defined (NDS) +#include +#include + +static const DISC_INTERFACE* get_io_dsisd (void) { + return isDSiMode() ? &__io_dsisd : NULL; +} + +const INTERFACE_ID _FAT_disc_interfaces[] = { + {"sd", get_io_dsisd}, + {"fat", dldiGetInternal}, + {NULL, NULL} +}; + +/* ====================== GBA ====================== */ +#elif defined (GBA) +#include + +const INTERFACE_ID _FAT_disc_interfaces[] = { + {"fat", discGetInterface}, + {NULL, NULL} +}; + +#endif + diff --git a/wii/libogc/libfat/disc.h b/wii/libogc/libfat/disc.h new file mode 100644 index 0000000000..5c955f90ae --- /dev/null +++ b/wii/libogc/libfat/disc.h @@ -0,0 +1,110 @@ +/* + disc.h + Interface to the low level disc functions. Used by the higher level + file system code. + + Copyright (c) 2006 Michael "Chishm" Chisholm + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +#ifndef _DISC_H +#define _DISC_H + +#include "common.h" + +/* +A list of all default devices to try at startup, +terminated by a {NULL,NULL} entry. +*/ +typedef struct { + const char* name; + const DISC_INTERFACE* (*getInterface)(void); +} INTERFACE_ID; +extern const INTERFACE_ID _FAT_disc_interfaces[]; + +/* +Check if a disc is inserted +Return true if a disc is inserted and ready, false otherwise +*/ +static inline bool _FAT_disc_isInserted (const DISC_INTERFACE* disc) { + return disc->isInserted(); +} + +/* +Read numSectors sectors from a disc, starting at sector. +numSectors is between 1 and LIMIT_SECTORS if LIMIT_SECTORS is defined, +else it is at least 1 +sector is 0 or greater +buffer is a pointer to the memory to fill +*/ +static inline bool _FAT_disc_readSectors (const DISC_INTERFACE* disc, sec_t sector, sec_t numSectors, void* buffer) { + return disc->readSectors (sector, numSectors, buffer); +} + +/* +Write numSectors sectors to a disc, starting at sector. +numSectors is between 1 and LIMIT_SECTORS if LIMIT_SECTORS is defined, +else it is at least 1 +sector is 0 or greater +buffer is a pointer to the memory to read from +*/ +static inline bool _FAT_disc_writeSectors (const DISC_INTERFACE* disc, sec_t sector, sec_t numSectors, const void* buffer) { + return disc->writeSectors (sector, numSectors, buffer); +} + +/* +Reset the card back to a ready state +*/ +static inline bool _FAT_disc_clearStatus (const DISC_INTERFACE* disc) { + return disc->clearStatus(); +} + +/* +Initialise the disc to a state ready for data reading or writing +*/ +static inline bool _FAT_disc_startup (const DISC_INTERFACE* disc) { + return disc->startup(); +} + +/* +Put the disc in a state ready for power down. +Complete any pending writes and disable the disc if necessary +*/ +static inline bool _FAT_disc_shutdown (const DISC_INTERFACE* disc) { + return disc->shutdown(); +} + +/* +Return a 32 bit value unique to each type of interface +*/ +static inline uint32_t _FAT_disc_hostType (const DISC_INTERFACE* disc) { + return disc->ioType; +} + +/* +Return a 32 bit value that specifies the capabilities of the disc +*/ +static inline uint32_t _FAT_disc_features (const DISC_INTERFACE* disc) { + return disc->features; +} + +#endif // _DISC_H diff --git a/wii/libogc/libfat/fatdir.c b/wii/libogc/libfat/fatdir.c new file mode 100644 index 0000000000..1ef5aec6d5 --- /dev/null +++ b/wii/libogc/libfat/fatdir.c @@ -0,0 +1,615 @@ +/* + fatdir.c + + Functions used by the newlib disc stubs to interface with + this library + + Copyright (c) 2006 Michael "Chishm" Chisholm + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include +#include +#include +#include +#include + +#include "fatdir.h" + +#include "cache.h" +#include "file_allocation_table.h" +#include "partition.h" +#include "directory.h" +#include "bit_ops.h" +#include "filetime.h" +#include "lock.h" + + +int _FAT_stat_r (struct _reent *r, const char *path, struct stat *st) { + PARTITION* partition = NULL; + DIR_ENTRY dirEntry; + + // Get the partition this file is on + partition = _FAT_partition_getPartitionFromPath (path); + if (partition == NULL) { + r->_errno = ENODEV; + return -1; + } + + // Move the path pointer to the start of the actual path + if (strchr (path, ':') != NULL) { + path = strchr (path, ':') + 1; + } + if (strchr (path, ':') != NULL) { + r->_errno = EINVAL; + return -1; + } + + _FAT_lock(&partition->lock); + + // Search for the file on the disc + if (!_FAT_directory_entryFromPath (partition, &dirEntry, path, NULL)) { + _FAT_unlock(&partition->lock); + r->_errno = ENOENT; + return -1; + } + + // Fill in the stat struct + _FAT_directory_entryStat (partition, &dirEntry, st); + + _FAT_unlock(&partition->lock); + return 0; +} + +int _FAT_link_r (struct _reent *r, const char *existing, const char *newLink) { + r->_errno = ENOTSUP; + return -1; +} + +int _FAT_unlink_r (struct _reent *r, const char *path) { + PARTITION* partition = NULL; + DIR_ENTRY dirEntry; + DIR_ENTRY dirContents; + uint32_t cluster; + bool nextEntry; + bool errorOccured = false; + + // Get the partition this directory is on + partition = _FAT_partition_getPartitionFromPath (path); + if (partition == NULL) { + r->_errno = ENODEV; + return -1; + } + + // Make sure we aren't trying to write to a read-only disc + if (partition->readOnly) { + r->_errno = EROFS; + return -1; + } + + // Move the path pointer to the start of the actual path + if (strchr (path, ':') != NULL) { + path = strchr (path, ':') + 1; + } + if (strchr (path, ':') != NULL) { + r->_errno = EINVAL; + return -1; + } + + _FAT_lock(&partition->lock); + + // Search for the file on the disc + if (!_FAT_directory_entryFromPath (partition, &dirEntry, path, NULL)) { + _FAT_unlock(&partition->lock); + r->_errno = ENOENT; + return -1; + } + + cluster = _FAT_directory_entryGetCluster (partition, dirEntry.entryData); + + + // If this is a directory, make sure it is empty + if (_FAT_directory_isDirectory (&dirEntry)) { + nextEntry = _FAT_directory_getFirstEntry (partition, &dirContents, cluster); + + while (nextEntry) { + if (!_FAT_directory_isDot (&dirContents)) { + // The directory had something in it that isn't a reference to itself or it's parent + _FAT_unlock(&partition->lock); + r->_errno = ENOTEMPTY; + return -1; + } + nextEntry = _FAT_directory_getNextEntry (partition, &dirContents); + } + } + + if (_FAT_fat_isValidCluster(partition, cluster)) { + // Remove the cluster chain for this file + if (!_FAT_fat_clearLinks (partition, cluster)) { + r->_errno = EIO; + errorOccured = true; + } + } + + // Remove the directory entry for this file + if (!_FAT_directory_removeEntry (partition, &dirEntry)) { + r->_errno = EIO; + errorOccured = true; + } + + // Flush any sectors in the disc cache + if (!_FAT_cache_flush(partition->cache)) { + r->_errno = EIO; + errorOccured = true; + } + + _FAT_unlock(&partition->lock); + if (errorOccured) { + return -1; + } else { + return 0; + } +} + +int _FAT_chdir_r (struct _reent *r, const char *path) { + PARTITION* partition = NULL; + + // Get the partition this directory is on + partition = _FAT_partition_getPartitionFromPath (path); + if (partition == NULL) { + r->_errno = ENODEV; + return -1; + } + + // Move the path pointer to the start of the actual path + if (strchr (path, ':') != NULL) { + path = strchr (path, ':') + 1; + } + if (strchr (path, ':') != NULL) { + r->_errno = EINVAL; + return -1; + } + + _FAT_lock(&partition->lock); + + // Try changing directory + if (_FAT_directory_chdir (partition, path)) { + // Successful + _FAT_unlock(&partition->lock); + return 0; + } else { + // Failed + _FAT_unlock(&partition->lock); + r->_errno = ENOTDIR; + return -1; + } +} + +int _FAT_rename_r (struct _reent *r, const char *oldName, const char *newName) { + PARTITION* partition = NULL; + DIR_ENTRY oldDirEntry; + DIR_ENTRY newDirEntry; + const char *pathEnd; + uint32_t dirCluster; + + // Get the partition this directory is on + partition = _FAT_partition_getPartitionFromPath (oldName); + if (partition == NULL) { + r->_errno = ENODEV; + return -1; + } + + _FAT_lock(&partition->lock); + + // Make sure the same partition is used for the old and new names + if (partition != _FAT_partition_getPartitionFromPath (newName)) { + _FAT_unlock(&partition->lock); + r->_errno = EXDEV; + return -1; + } + + // Make sure we aren't trying to write to a read-only disc + if (partition->readOnly) { + _FAT_unlock(&partition->lock); + r->_errno = EROFS; + return -1; + } + + // Move the path pointer to the start of the actual path + if (strchr (oldName, ':') != NULL) { + oldName = strchr (oldName, ':') + 1; + } + if (strchr (oldName, ':') != NULL) { + _FAT_unlock(&partition->lock); + r->_errno = EINVAL; + return -1; + } + if (strchr (newName, ':') != NULL) { + newName = strchr (newName, ':') + 1; + } + if (strchr (newName, ':') != NULL) { + _FAT_unlock(&partition->lock); + r->_errno = EINVAL; + return -1; + } + + // Search for the file on the disc + if (!_FAT_directory_entryFromPath (partition, &oldDirEntry, oldName, NULL)) { + _FAT_unlock(&partition->lock); + r->_errno = ENOENT; + return -1; + } + + // Make sure there is no existing file / directory with the new name + if (_FAT_directory_entryFromPath (partition, &newDirEntry, newName, NULL)) { + _FAT_unlock(&partition->lock); + r->_errno = EEXIST; + return -1; + } + + // Create the new file entry + // Get the directory it has to go in + pathEnd = strrchr (newName, DIR_SEPARATOR); + if (pathEnd == NULL) { + // No path was specified + dirCluster = partition->cwdCluster; + pathEnd = newName; + } else { + // Path was specified -- get the right dirCluster + // Recycling newDirEntry, since it needs to be recreated anyway + if (!_FAT_directory_entryFromPath (partition, &newDirEntry, newName, pathEnd) || + !_FAT_directory_isDirectory(&newDirEntry)) { + _FAT_unlock(&partition->lock); + r->_errno = ENOTDIR; + return -1; + } + dirCluster = _FAT_directory_entryGetCluster (partition, newDirEntry.entryData); + // Move the pathEnd past the last DIR_SEPARATOR + pathEnd += 1; + } + + // Copy the entry data + memcpy (&newDirEntry, &oldDirEntry, sizeof(DIR_ENTRY)); + + // Set the new name + strncpy (newDirEntry.filename, pathEnd, NAME_MAX - 1); + + // Write the new entry + if (!_FAT_directory_addEntry (partition, &newDirEntry, dirCluster)) { + _FAT_unlock(&partition->lock); + r->_errno = ENOSPC; + return -1; + } + + // Remove the old entry + if (!_FAT_directory_removeEntry (partition, &oldDirEntry)) { + _FAT_unlock(&partition->lock); + r->_errno = EIO; + return -1; + } + + // Flush any sectors in the disc cache + if (!_FAT_cache_flush (partition->cache)) { + _FAT_unlock(&partition->lock); + r->_errno = EIO; + return -1; + } + + _FAT_unlock(&partition->lock); + return 0; +} + +int _FAT_mkdir_r (struct _reent *r, const char *path, int mode) { + PARTITION* partition = NULL; + bool fileExists; + DIR_ENTRY dirEntry; + const char* pathEnd; + uint32_t parentCluster, dirCluster; + uint8_t newEntryData[DIR_ENTRY_DATA_SIZE]; + + partition = _FAT_partition_getPartitionFromPath (path); + if (partition == NULL) { + r->_errno = ENODEV; + return -1; + } + + // Move the path pointer to the start of the actual path + if (strchr (path, ':') != NULL) { + path = strchr (path, ':') + 1; + } + if (strchr (path, ':') != NULL) { + r->_errno = EINVAL; + return -1; + } + + _FAT_lock(&partition->lock); + + // Search for the file/directory on the disc + fileExists = _FAT_directory_entryFromPath (partition, &dirEntry, path, NULL); + + // Make sure it doesn't exist + if (fileExists) { + _FAT_unlock(&partition->lock); + r->_errno = EEXIST; + return -1; + } + + if (partition->readOnly) { + // We can't write to a read-only partition + _FAT_unlock(&partition->lock); + r->_errno = EROFS; + return -1; + } + + // Get the directory it has to go in + pathEnd = strrchr (path, DIR_SEPARATOR); + if (pathEnd == NULL) { + // No path was specified + parentCluster = partition->cwdCluster; + pathEnd = path; + } else { + // Path was specified -- get the right parentCluster + // Recycling dirEntry, since it needs to be recreated anyway + if (!_FAT_directory_entryFromPath (partition, &dirEntry, path, pathEnd) || + !_FAT_directory_isDirectory(&dirEntry)) { + _FAT_unlock(&partition->lock); + r->_errno = ENOTDIR; + return -1; + } + parentCluster = _FAT_directory_entryGetCluster (partition, dirEntry.entryData); + // Move the pathEnd past the last DIR_SEPARATOR + pathEnd += 1; + } + // Create the entry data + strncpy (dirEntry.filename, pathEnd, NAME_MAX - 1); + memset (dirEntry.entryData, 0, DIR_ENTRY_DATA_SIZE); + + // Set the creation time and date + dirEntry.entryData[DIR_ENTRY_cTime_ms] = 0; + u16_to_u8array (dirEntry.entryData, DIR_ENTRY_cTime, _FAT_filetime_getTimeFromRTC()); + u16_to_u8array (dirEntry.entryData, DIR_ENTRY_cDate, _FAT_filetime_getDateFromRTC()); + u16_to_u8array (dirEntry.entryData, DIR_ENTRY_mTime, _FAT_filetime_getTimeFromRTC()); + u16_to_u8array (dirEntry.entryData, DIR_ENTRY_mDate, _FAT_filetime_getDateFromRTC()); + u16_to_u8array (dirEntry.entryData, DIR_ENTRY_aDate, _FAT_filetime_getDateFromRTC()); + + // Set the directory attribute + dirEntry.entryData[DIR_ENTRY_attributes] = ATTRIB_DIR; + + // Get a cluster for the new directory + dirCluster = _FAT_fat_linkFreeClusterCleared (partition, CLUSTER_FREE); + if (!_FAT_fat_isValidCluster(partition, dirCluster)) { + // No space left on disc for the cluster + _FAT_unlock(&partition->lock); + r->_errno = ENOSPC; + return -1; + } + u16_to_u8array (dirEntry.entryData, DIR_ENTRY_cluster, dirCluster); + u16_to_u8array (dirEntry.entryData, DIR_ENTRY_clusterHigh, dirCluster >> 16); + + // Write the new directory's entry to it's parent + if (!_FAT_directory_addEntry (partition, &dirEntry, parentCluster)) { + _FAT_unlock(&partition->lock); + r->_errno = ENOSPC; + return -1; + } + + // Create the dot entry within the directory + memset (newEntryData, 0, DIR_ENTRY_DATA_SIZE); + memset (newEntryData, ' ', 11); + newEntryData[DIR_ENTRY_name] = '.'; + newEntryData[DIR_ENTRY_attributes] = ATTRIB_DIR; + u16_to_u8array (newEntryData, DIR_ENTRY_cluster, dirCluster); + u16_to_u8array (newEntryData, DIR_ENTRY_clusterHigh, dirCluster >> 16); + + // Write it to the directory, erasing that sector in the process + _FAT_cache_eraseWritePartialSector ( partition->cache, newEntryData, + _FAT_fat_clusterToSector (partition, dirCluster), 0, DIR_ENTRY_DATA_SIZE); + + + // Create the double dot entry within the directory + + // if ParentDir == Rootdir then ".."" always link to Cluster 0 + if(parentCluster == partition->rootDirCluster) + parentCluster = FAT16_ROOT_DIR_CLUSTER; + + newEntryData[DIR_ENTRY_name + 1] = '.'; + u16_to_u8array (newEntryData, DIR_ENTRY_cluster, parentCluster); + u16_to_u8array (newEntryData, DIR_ENTRY_clusterHigh, parentCluster >> 16); + + // Write it to the directory + _FAT_cache_writePartialSector ( partition->cache, newEntryData, + _FAT_fat_clusterToSector (partition, dirCluster), DIR_ENTRY_DATA_SIZE, DIR_ENTRY_DATA_SIZE); + + // Flush any sectors in the disc cache + if (!_FAT_cache_flush(partition->cache)) { + _FAT_unlock(&partition->lock); + r->_errno = EIO; + return -1; + } + + _FAT_unlock(&partition->lock); + return 0; +} + +int _FAT_statvfs_r (struct _reent *r, const char *path, struct statvfs *buf) +{ + PARTITION* partition = NULL; + unsigned int freeClusterCount; + + // Get the partition of the requested path + partition = _FAT_partition_getPartitionFromPath (path); + if (partition == NULL) { + r->_errno = ENODEV; + return -1; + } + + _FAT_lock(&partition->lock); + + if(partition->filesysType == FS_FAT32) { + // Sync FSinfo block + _FAT_partition_readFSinfo(partition); + freeClusterCount = partition->fat.numberFreeCluster; + } else { + freeClusterCount = _FAT_fat_freeClusterCount (partition); + } + + // FAT clusters = POSIX blocks + buf->f_bsize = partition->bytesPerCluster; // File system block size. + buf->f_frsize = partition->bytesPerCluster; // Fundamental file system block size. + + buf->f_blocks = partition->fat.lastCluster - CLUSTER_FIRST + 1; // Total number of blocks on file system in units of f_frsize. + buf->f_bfree = freeClusterCount; // Total number of free blocks. + buf->f_bavail = freeClusterCount; // Number of free blocks available to non-privileged process. + + // Treat requests for info on inodes as clusters + buf->f_files = partition->fat.lastCluster - CLUSTER_FIRST + 1; // Total number of file serial numbers. + buf->f_ffree = freeClusterCount; // Total number of free file serial numbers. + buf->f_favail = freeClusterCount; // Number of file serial numbers available to non-privileged process. + + // File system ID. 32bit ioType value + buf->f_fsid = _FAT_disc_hostType(partition->disc); + + // Bit mask of f_flag values. + buf->f_flag = ST_NOSUID /* No support for ST_ISUID and ST_ISGID file mode bits */ + | (partition->readOnly ? ST_RDONLY /* Read only file system */ : 0 ) ; + // Maximum filename length. + buf->f_namemax = NAME_MAX; + + _FAT_unlock(&partition->lock); + return 0; +} + +DIR_ITER* _FAT_diropen_r(struct _reent *r, DIR_ITER *dirState, const char *path) { + DIR_ENTRY dirEntry; + DIR_STATE_STRUCT* state = (DIR_STATE_STRUCT*) (dirState->dirStruct); + bool fileExists; + + state->partition = _FAT_partition_getPartitionFromPath (path); + if (state->partition == NULL) { + r->_errno = ENODEV; + return NULL; + } + + // Move the path pointer to the start of the actual path + if (strchr (path, ':') != NULL) { + path = strchr (path, ':') + 1; + } + if (strchr (path, ':') != NULL) { + r->_errno = EINVAL; + return NULL; + } + + _FAT_lock(&state->partition->lock); + + // Get the start cluster of the directory + fileExists = _FAT_directory_entryFromPath (state->partition, &dirEntry, path, NULL); + + if (!fileExists) { + _FAT_unlock(&state->partition->lock); + r->_errno = ENOENT; + return NULL; + } + + // Make sure it is a directory + if (! _FAT_directory_isDirectory (&dirEntry)) { + _FAT_unlock(&state->partition->lock); + r->_errno = ENOTDIR; + return NULL; + } + + // Save the start cluster for use when resetting the directory data + state->startCluster = _FAT_directory_entryGetCluster (state->partition, dirEntry.entryData); + + // Get the first entry for use with a call to dirnext + state->validEntry = + _FAT_directory_getFirstEntry (state->partition, &(state->currentEntry), state->startCluster); + + // We are now using this entry + state->inUse = true; + _FAT_unlock(&state->partition->lock); + return (DIR_ITER*) state; +} + +int _FAT_dirreset_r (struct _reent *r, DIR_ITER *dirState) { + DIR_STATE_STRUCT* state = (DIR_STATE_STRUCT*) (dirState->dirStruct); + + _FAT_lock(&state->partition->lock); + + // Make sure we are still using this entry + if (!state->inUse) { + _FAT_unlock(&state->partition->lock); + r->_errno = EBADF; + return -1; + } + + // Get the first entry for use with a call to dirnext + state->validEntry = + _FAT_directory_getFirstEntry (state->partition, &(state->currentEntry), state->startCluster); + + _FAT_unlock(&state->partition->lock); + return 0; +} + +int _FAT_dirnext_r (struct _reent *r, DIR_ITER *dirState, char *filename, struct stat *filestat) { + DIR_STATE_STRUCT* state = (DIR_STATE_STRUCT*) (dirState->dirStruct); + + _FAT_lock(&state->partition->lock); + + // Make sure we are still using this entry + if (!state->inUse) { + _FAT_unlock(&state->partition->lock); + r->_errno = EBADF; + return -1; + } + + // Make sure there is another file to report on + if (! state->validEntry) { + _FAT_unlock(&state->partition->lock); + return -1; + } + + // Get the filename + strncpy (filename, state->currentEntry.filename, NAME_MAX); + // Get the stats, if requested + if (filestat != NULL) { + _FAT_directory_entryStat (state->partition, &(state->currentEntry), filestat); + } + + // Look for the next entry for use next time + state->validEntry = + _FAT_directory_getNextEntry (state->partition, &(state->currentEntry)); + + _FAT_unlock(&state->partition->lock); + return 0; +} + +int _FAT_dirclose_r (struct _reent *r, DIR_ITER *dirState) { + DIR_STATE_STRUCT* state = (DIR_STATE_STRUCT*) (dirState->dirStruct); + + // We are no longer using this entry + _FAT_lock(&state->partition->lock); + state->inUse = false; + _FAT_unlock(&state->partition->lock); + + return 0; +} diff --git a/wii/libogc/libfat/fatdir.h b/wii/libogc/libfat/fatdir.h new file mode 100644 index 0000000000..426dd30bcd --- /dev/null +++ b/wii/libogc/libfat/fatdir.h @@ -0,0 +1,73 @@ +/* + fatdir.h + + Functions used by the newlib disc stubs to interface with + this library + + Copyright (c) 2006 Michael "Chishm" Chisholm + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +#ifndef _FATDIR_H +#define _FATDIR_H + +#include +#include +#include +#include +#include "common.h" +#include "directory.h" + +typedef struct { + PARTITION* partition; + DIR_ENTRY currentEntry; + uint32_t startCluster; + bool inUse; + bool validEntry; +} DIR_STATE_STRUCT; + +extern int _FAT_stat_r (struct _reent *r, const char *path, struct stat *st); + +extern int _FAT_link_r (struct _reent *r, const char *existing, const char *newLink); + +extern int _FAT_unlink_r (struct _reent *r, const char *name); + +extern int _FAT_chdir_r (struct _reent *r, const char *name); + +extern int _FAT_rename_r (struct _reent *r, const char *oldName, const char *newName); + +extern int _FAT_mkdir_r (struct _reent *r, const char *path, int mode); + +extern int _FAT_statvfs_r (struct _reent *r, const char *path, struct statvfs *buf); + +/* +Directory iterator functions +*/ +extern DIR_ITER* _FAT_diropen_r(struct _reent *r, DIR_ITER *dirState, const char *path); +extern int _FAT_dirreset_r (struct _reent *r, DIR_ITER *dirState); +extern int _FAT_dirnext_r (struct _reent *r, DIR_ITER *dirState, char *filename, struct stat *filestat); +extern int _FAT_dirclose_r (struct _reent *r, DIR_ITER *dirState); + + +#endif // _FATDIR_H diff --git a/wii/libogc/libfat/fatfile.c b/wii/libogc/libfat/fatfile.c new file mode 100644 index 0000000000..06c2ca7c1e --- /dev/null +++ b/wii/libogc/libfat/fatfile.c @@ -0,0 +1,1213 @@ +/* + fatfile.c + + Functions used by the newlib disc stubs to interface with + this library + + Copyright (c) 2006 Michael "Chishm" Chisholm + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + 2009-10-23 oggzee: fixes for cluster aligned file size (write, truncate, seek) +*/ + + +#include "fatfile.h" + +#include +#include +#include +#include +#include + +#include "cache.h" +#include "file_allocation_table.h" +#include "bit_ops.h" +#include "filetime.h" +#include "lock.h" + +bool _FAT_findEntry(const char *path, DIR_ENTRY *dirEntry) { + PARTITION *partition = _FAT_partition_getPartitionFromPath(path); + + // Check Partition + if( !partition ) + return false; + + // Move the path pointer to the start of the actual path + if (strchr (path, ':') != NULL) { + path = strchr (path, ':') + 1; + } + if (strchr (path, ':') != NULL) { + return false; + } + + // Search for the file on the disc + return _FAT_directory_entryFromPath (partition, dirEntry, path, NULL); + +} + +int FAT_getAttr(const char *file) { + DIR_ENTRY dirEntry; + if (!_FAT_findEntry(file,&dirEntry)) return -1; + + return dirEntry.entryData[DIR_ENTRY_attributes]; +} + +int FAT_setAttr(const char *file, uint8_t attr) { + + // Defines... + DIR_ENTRY_POSITION entryEnd; + PARTITION *partition = NULL; + DIR_ENTRY dirEntry; + + // Get Partition + partition = _FAT_partition_getPartitionFromPath( file ); + + // Check Partition + if( !partition ) + return -1; + + // Move the path pointer to the start of the actual path + if (strchr (file, ':') != NULL) + file = strchr (file, ':') + 1; + if (strchr (file, ':') != NULL) + return -1; + + // Get DIR_ENTRY + if( !_FAT_directory_entryFromPath (partition, &dirEntry, file, NULL) ) + return -1; + + // Get Entry-End + entryEnd = dirEntry.dataEnd; + + // Lock Partition + _FAT_lock(&partition->lock); + + + // Write Data + _FAT_cache_writePartialSector ( + partition->cache // Cache to write + , &attr // Value to be written + , _FAT_fat_clusterToSector( partition , entryEnd.cluster ) + entryEnd.sector // cluster + , entryEnd.offset * DIR_ENTRY_DATA_SIZE + DIR_ENTRY_attributes // offset + , 1 // Size in bytes + ); + + // Flush any sectors in the disc cache + if ( !_FAT_cache_flush( partition->cache ) ) { + _FAT_unlock(&partition->lock); // Unlock Partition + return -1; + } + + // Unlock Partition + _FAT_unlock(&partition->lock); + + return 0; +} + + +int _FAT_open_r (struct _reent *r, void *fileStruct, const char *path, int flags, int mode) { + PARTITION* partition = NULL; + bool fileExists; + DIR_ENTRY dirEntry; + const char* pathEnd; + uint32_t dirCluster; + FILE_STRUCT* file = (FILE_STRUCT*) fileStruct; + partition = _FAT_partition_getPartitionFromPath (path); + + if (partition == NULL) { + r->_errno = ENODEV; + return -1; + } + + // Move the path pointer to the start of the actual path + if (strchr (path, ':') != NULL) { + path = strchr (path, ':') + 1; + } + if (strchr (path, ':') != NULL) { + r->_errno = EINVAL; + return -1; + } + + // Determine which mode the file is openned for + if ((flags & 0x03) == O_RDONLY) { + // Open the file for read-only access + file->read = true; + file->write = false; + file->append = false; + } else if ((flags & 0x03) == O_WRONLY) { + // Open file for write only access + file->read = false; + file->write = true; + file->append = false; + } else if ((flags & 0x03) == O_RDWR) { + // Open file for read/write access + file->read = true; + file->write = true; + file->append = false; + } else { + r->_errno = EACCES; + return -1; + } + + // Make sure we aren't trying to write to a read-only disc + if (file->write && partition->readOnly) { + r->_errno = EROFS; + return -1; + } + + // Search for the file on the disc + _FAT_lock(&partition->lock); + fileExists = _FAT_directory_entryFromPath (partition, &dirEntry, path, NULL); + + // The file shouldn't exist if we are trying to create it + if ((flags & O_CREAT) && (flags & O_EXCL) && fileExists) { + _FAT_unlock(&partition->lock); + r->_errno = EEXIST; + return -1; + } + + // It should not be a directory if we're openning a file, + if (fileExists && _FAT_directory_isDirectory(&dirEntry)) { + _FAT_unlock(&partition->lock); + r->_errno = EISDIR; + return -1; + } + + // We haven't modified the file yet + file->modified = false; + + // If the file doesn't exist, create it if we're allowed to + if (!fileExists) { + if (flags & O_CREAT) { + if (partition->readOnly) { + // We can't write to a read-only partition + _FAT_unlock(&partition->lock); + r->_errno = EROFS; + return -1; + } + // Create the file + // Get the directory it has to go in + pathEnd = strrchr (path, DIR_SEPARATOR); + if (pathEnd == NULL) { + // No path was specified + dirCluster = partition->cwdCluster; + pathEnd = path; + } else { + // Path was specified -- get the right dirCluster + // Recycling dirEntry, since it needs to be recreated anyway + if (!_FAT_directory_entryFromPath (partition, &dirEntry, path, pathEnd) || + !_FAT_directory_isDirectory(&dirEntry)) { + _FAT_unlock(&partition->lock); + r->_errno = ENOTDIR; + return -1; + } + dirCluster = _FAT_directory_entryGetCluster (partition, dirEntry.entryData); + // Move the pathEnd past the last DIR_SEPARATOR + pathEnd += 1; + } + // Create the entry data + strncpy (dirEntry.filename, pathEnd, NAME_MAX - 1); + memset (dirEntry.entryData, 0, DIR_ENTRY_DATA_SIZE); + + // Set the creation time and date + dirEntry.entryData[DIR_ENTRY_cTime_ms] = 0; + u16_to_u8array (dirEntry.entryData, DIR_ENTRY_cTime, _FAT_filetime_getTimeFromRTC()); + u16_to_u8array (dirEntry.entryData, DIR_ENTRY_cDate, _FAT_filetime_getDateFromRTC()); + + if (!_FAT_directory_addEntry (partition, &dirEntry, dirCluster)) { + _FAT_unlock(&partition->lock); + r->_errno = ENOSPC; + return -1; + } + + // File entry is modified + file->modified = true; + } else { + // file doesn't exist, and we aren't creating it + _FAT_unlock(&partition->lock); + r->_errno = ENOENT; + return -1; + } + } + + file->filesize = u8array_to_u32 (dirEntry.entryData, DIR_ENTRY_fileSize); + + /* Allow LARGEFILEs with undefined results + // Make sure that the file size can fit in the available space + if (!(flags & O_LARGEFILE) && (file->filesize >= (1<<31))) { + r->_errno = EFBIG; + return -1; + } + */ + + // Make sure we aren't trying to write to a read-only file + if (file->write && !_FAT_directory_isWritable(&dirEntry)) { + _FAT_unlock(&partition->lock); + r->_errno = EROFS; + return -1; + } + + // Associate this file with a particular partition + file->partition = partition; + + file->startCluster = _FAT_directory_entryGetCluster (partition, dirEntry.entryData); + + // Truncate the file if requested + if ((flags & O_TRUNC) && file->write && (file->startCluster != 0)) { + _FAT_fat_clearLinks (partition, file->startCluster); + file->startCluster = CLUSTER_FREE; + file->filesize = 0; + // File is modified since we just cut it all off + file->modified = true; + } + + // Remember the position of this file's directory entry + file->dirEntryStart = dirEntry.dataStart; // Points to the start of the LFN entries of a file, or the alias for no LFN + file->dirEntryEnd = dirEntry.dataEnd; + + // Reset read/write pointer + file->currentPosition = 0; + file->rwPosition.cluster = file->startCluster; + file->rwPosition.sector = 0; + file->rwPosition.byte = 0; + + if (flags & O_APPEND) { + file->append = true; + + // Set append pointer to the end of the file + file->appendPosition.cluster = _FAT_fat_lastCluster (partition, file->startCluster); + file->appendPosition.sector = (file->filesize % partition->bytesPerCluster) / partition->bytesPerSector; + file->appendPosition.byte = file->filesize % partition->bytesPerSector; + + // Check if the end of the file is on the end of a cluster + if ( (file->filesize > 0) && ((file->filesize % partition->bytesPerCluster)==0) ){ + // Set flag to allocate a new cluster + file->appendPosition.sector = partition->sectorsPerCluster; + file->appendPosition.byte = 0; + } + } else { + file->append = false; + // Use something sane for the append pointer, so the whole file struct contains known values + file->appendPosition = file->rwPosition; + } + + file->inUse = true; + + // Insert this file into the double-linked list of open files + partition->openFileCount += 1; + if (partition->firstOpenFile) { + file->nextOpenFile = partition->firstOpenFile; + partition->firstOpenFile->prevOpenFile = file; + } else { + file->nextOpenFile = NULL; + } + file->prevOpenFile = NULL; + partition->firstOpenFile = file; + + _FAT_unlock(&partition->lock); + + return (int) file; +} + +/* +Synchronizes the file data to disc. +Does no locking of its own -- lock the partition before calling. +Returns 0 on success, an error code on failure. +*/ +int _FAT_syncToDisc (FILE_STRUCT* file) { + uint8_t dirEntryData[DIR_ENTRY_DATA_SIZE]; + + if (!file || !file->inUse) { + return EBADF; + } + + if (file->write && file->modified) { + // Load the old entry + _FAT_cache_readPartialSector (file->partition->cache, dirEntryData, + _FAT_fat_clusterToSector(file->partition, file->dirEntryEnd.cluster) + file->dirEntryEnd.sector, + file->dirEntryEnd.offset * DIR_ENTRY_DATA_SIZE, DIR_ENTRY_DATA_SIZE); + + // Write new data to the directory entry + // File size + u32_to_u8array (dirEntryData, DIR_ENTRY_fileSize, file->filesize); + + // Start cluster + u16_to_u8array (dirEntryData, DIR_ENTRY_cluster, file->startCluster); + u16_to_u8array (dirEntryData, DIR_ENTRY_clusterHigh, file->startCluster >> 16); + + // Modification time and date + u16_to_u8array (dirEntryData, DIR_ENTRY_mTime, _FAT_filetime_getTimeFromRTC()); + u16_to_u8array (dirEntryData, DIR_ENTRY_mDate, _FAT_filetime_getDateFromRTC()); + + // Access date + u16_to_u8array (dirEntryData, DIR_ENTRY_aDate, _FAT_filetime_getDateFromRTC()); + + // Set archive attribute + dirEntryData[DIR_ENTRY_attributes] |= ATTRIB_ARCH; + + // Write the new entry + _FAT_cache_writePartialSector (file->partition->cache, dirEntryData, + _FAT_fat_clusterToSector(file->partition, file->dirEntryEnd.cluster) + file->dirEntryEnd.sector, + file->dirEntryEnd.offset * DIR_ENTRY_DATA_SIZE, DIR_ENTRY_DATA_SIZE); + + // Flush any sectors in the disc cache + if (!_FAT_cache_flush(file->partition->cache)) { + return EIO; + } + } + + file->modified = false; + + return 0; +} + + +int _FAT_close_r (struct _reent *r, void *fd) { + FILE_STRUCT* file = (FILE_STRUCT*) fd; + int ret = 0; + + if (!file->inUse) { + r->_errno = EBADF; + return -1; + } + + _FAT_lock(&file->partition->lock); + + if (file->write) { + ret = _FAT_syncToDisc (file); + if (ret != 0) { + r->_errno = ret; + ret = -1; + } + } + + file->inUse = false; + + // Remove this file from the double-linked list of open files + file->partition->openFileCount -= 1; + if (file->nextOpenFile) { + file->nextOpenFile->prevOpenFile = file->prevOpenFile; + } + if (file->prevOpenFile) { + file->prevOpenFile->nextOpenFile = file->nextOpenFile; + } else { + file->partition->firstOpenFile = file->nextOpenFile; + } + + _FAT_unlock(&file->partition->lock); + + return ret; +} + +ssize_t _FAT_read_r (struct _reent *r, void *fd, char *ptr, size_t len) { + FILE_STRUCT* file = (FILE_STRUCT*) fd; + PARTITION* partition; + CACHE* cache; + FILE_POSITION position; + uint32_t tempNextCluster; + unsigned int tempVar; + size_t remain; + bool flagNoError = true; + + // Short circuit cases where len is 0 (or less) + if (len <= 0) { + return 0; + } + + // Make sure we can actually read from the file + if ((file == NULL) || !file->inUse || !file->read) { + r->_errno = EBADF; + return -1; + } + + partition = file->partition; + _FAT_lock(&partition->lock); + + // Don't try to read if the read pointer is past the end of file + if (file->currentPosition >= file->filesize || file->startCluster == CLUSTER_FREE) { + r->_errno = EOVERFLOW; + _FAT_unlock(&partition->lock); + return 0; + } + + // Don't read past end of file + if (len + file->currentPosition > file->filesize) { + r->_errno = EOVERFLOW; + len = file->filesize - file->currentPosition; + } + + remain = len; + position = file->rwPosition; + cache = file->partition->cache; + + // Align to sector + tempVar = partition->bytesPerSector - position.byte; + if (tempVar > remain) { + tempVar = remain; + } + + if ((tempVar < partition->bytesPerSector) && flagNoError) + { + _FAT_cache_readPartialSector ( cache, ptr, _FAT_fat_clusterToSector (partition, position.cluster) + position.sector, + position.byte, tempVar); + + remain -= tempVar; + ptr += tempVar; + + position.byte += tempVar; + if (position.byte >= partition->bytesPerSector) { + position.byte = 0; + position.sector++; + } + } + + // align to cluster + // tempVar is number of sectors to read + if (remain > (partition->sectorsPerCluster - position.sector) * partition->bytesPerSector) { + tempVar = partition->sectorsPerCluster - position.sector; + } else { + tempVar = remain / partition->bytesPerSector; + } + + if ((tempVar > 0) && flagNoError) { + if (! _FAT_cache_readSectors (cache, _FAT_fat_clusterToSector (partition, position.cluster) + position.sector, + tempVar, ptr)) + { + flagNoError = false; + r->_errno = EIO; + } else { + ptr += tempVar * partition->bytesPerSector; + remain -= tempVar * partition->bytesPerSector; + position.sector += tempVar; + } + } + + // Move onto next cluster + // It should get to here without reading anything if a cluster is due to be allocated + if ((position.sector >= partition->sectorsPerCluster) && flagNoError) { + tempNextCluster = _FAT_fat_nextCluster(partition, position.cluster); + if ((remain == 0) && (tempNextCluster == CLUSTER_EOF)) { + position.sector = partition->sectorsPerCluster; + } else if (!_FAT_fat_isValidCluster(partition, tempNextCluster)) { + r->_errno = EIO; + flagNoError = false; + } else { + position.sector = 0; + position.cluster = tempNextCluster; + } + } + + // Read in whole clusters, contiguous blocks at a time + while ((remain >= partition->bytesPerCluster) && flagNoError) { + uint32_t chunkEnd; + uint32_t nextChunkStart = position.cluster; + size_t chunkSize = 0; + + do { + chunkEnd = nextChunkStart; + nextChunkStart = _FAT_fat_nextCluster (partition, chunkEnd); + chunkSize += partition->bytesPerCluster; + } while ((nextChunkStart == chunkEnd + 1) && +#ifdef LIMIT_SECTORS + (chunkSize + partition->bytesPerCluster <= LIMIT_SECTORS * partition->bytesPerSector) && +#endif + (chunkSize + partition->bytesPerCluster <= remain)); + + if (!_FAT_cache_readSectors (cache, _FAT_fat_clusterToSector (partition, position.cluster), + chunkSize / partition->bytesPerSector, ptr)) + { + flagNoError = false; + r->_errno = EIO; + break; + } + ptr += chunkSize; + remain -= chunkSize; + + // Advance to next cluster + if ((remain == 0) && (nextChunkStart == CLUSTER_EOF)) { + position.sector = partition->sectorsPerCluster; + position.cluster = chunkEnd; + } else if (!_FAT_fat_isValidCluster(partition, nextChunkStart)) { + r->_errno = EIO; + flagNoError = false; + } else { + position.sector = 0; + position.cluster = nextChunkStart; + } + } + + // Read remaining sectors + tempVar = remain / partition->bytesPerSector; // Number of sectors left + if ((tempVar > 0) && flagNoError) { + if (!_FAT_cache_readSectors (cache, _FAT_fat_clusterToSector (partition, position.cluster), + tempVar, ptr)) + { + flagNoError = false; + r->_errno = EIO; + } else { + ptr += tempVar * partition->bytesPerSector; + remain -= tempVar * partition->bytesPerSector; + position.sector += tempVar; + } + } + + // Last remaining sector + // Check if anything is left + if ((remain > 0) && flagNoError) { + _FAT_cache_readPartialSector ( cache, ptr, + _FAT_fat_clusterToSector (partition, position.cluster) + position.sector, 0, remain); + position.byte += remain; + remain = 0; + } + + // Length read is the wanted length minus the stuff not read + len = len - remain; + + // Update file information + file->rwPosition = position; + file->currentPosition += len; + + _FAT_unlock(&partition->lock); + return len; +} + +// if current position is on the cluster border and more data has to be written +// then get next cluster or allocate next cluster +// this solves the over-allocation problems when file size is aligned to cluster size +// return true on succes, false on error +static bool _FAT_check_position_for_next_cluster(struct _reent *r, + FILE_POSITION *position, PARTITION* partition, size_t remain, bool *flagNoError) +{ + uint32_t tempNextCluster; + // do nothing if no more data to write + if (remain == 0) return true; + if (flagNoError && *flagNoError == false) return false; + if (position->sector > partition->sectorsPerCluster) { + // invalid arguments - internal error + r->_errno = EINVAL; + goto err; + } + if (position->sector == partition->sectorsPerCluster) { + // need to advance to next cluster + tempNextCluster = _FAT_fat_nextCluster(partition, position->cluster); + if ((tempNextCluster == CLUSTER_EOF) || (tempNextCluster == CLUSTER_FREE)) { + // Ran out of clusters so get a new one + tempNextCluster = _FAT_fat_linkFreeCluster(partition, position->cluster); + } + if (!_FAT_fat_isValidCluster(partition, tempNextCluster)) { + // Couldn't get a cluster, so abort + r->_errno = ENOSPC; + goto err; + } + position->sector = 0; + position->cluster = tempNextCluster; + } + return true; +err: + if (flagNoError) *flagNoError = false; + return false; +} + +/* +Extend a file so that the size is the same as the rwPosition +*/ +static bool _FAT_file_extend_r (struct _reent *r, FILE_STRUCT* file) { + PARTITION* partition = file->partition; + CACHE* cache = file->partition->cache; + FILE_POSITION position; + uint8_t zeroBuffer [partition->bytesPerSector]; + memset(zeroBuffer, 0, partition->bytesPerSector); + uint32_t remain; + uint32_t tempNextCluster; + unsigned int sector; + + position.byte = file->filesize % partition->bytesPerSector; + position.sector = (file->filesize % partition->bytesPerCluster) / partition->bytesPerSector; + // It is assumed that there is always a startCluster + // This will be true when _FAT_file_extend_r is called from _FAT_write_r + position.cluster = _FAT_fat_lastCluster (partition, file->startCluster); + + remain = file->currentPosition - file->filesize; + + if ((remain > 0) && (file->filesize > 0) && (position.sector == 0) && (position.byte == 0)) { + // Get a new cluster on the edge of a cluster boundary + tempNextCluster = _FAT_fat_linkFreeCluster(partition, position.cluster); + if (!_FAT_fat_isValidCluster(partition, tempNextCluster)) { + // Couldn't get a cluster, so abort + r->_errno = ENOSPC; + return false; + } + position.cluster = tempNextCluster; + position.sector = 0; + } + + if (remain + position.byte < partition->bytesPerSector) { + // Only need to clear to the end of the sector + _FAT_cache_writePartialSector (cache, zeroBuffer, + _FAT_fat_clusterToSector (partition, position.cluster) + position.sector, position.byte, remain); + position.byte += remain; + } else { + if (position.byte > 0) { + _FAT_cache_writePartialSector (cache, zeroBuffer, + _FAT_fat_clusterToSector (partition, position.cluster) + position.sector, position.byte, + partition->bytesPerSector - position.byte); + remain -= (partition->bytesPerSector - position.byte); + position.byte = 0; + position.sector ++; + } + + while (remain >= partition->bytesPerSector) { + if (position.sector >= partition->sectorsPerCluster) { + position.sector = 0; + // Ran out of clusters so get a new one + tempNextCluster = _FAT_fat_linkFreeCluster(partition, position.cluster); + if (!_FAT_fat_isValidCluster(partition, tempNextCluster)) { + // Couldn't get a cluster, so abort + r->_errno = ENOSPC; + return false; + } + position.cluster = tempNextCluster; + } + + sector = _FAT_fat_clusterToSector (partition, position.cluster) + position.sector; + _FAT_cache_writeSectors (cache, sector, 1, zeroBuffer); + + remain -= partition->bytesPerSector; + position.sector ++; + } + + if (!_FAT_check_position_for_next_cluster(r, &position, partition, remain, NULL)) { + // error already marked + return false; + } + + if (remain > 0) { + _FAT_cache_writePartialSector (cache, zeroBuffer, + _FAT_fat_clusterToSector (partition, position.cluster) + position.sector, 0, remain); + position.byte = remain; + } + } + + file->rwPosition = position; + file->filesize = file->currentPosition; + return true; +} + +ssize_t _FAT_write_r (struct _reent *r, void *fd, const char *ptr, size_t len) { + FILE_STRUCT* file = (FILE_STRUCT*) fd; + PARTITION* partition; + CACHE* cache; + FILE_POSITION position; + uint32_t tempNextCluster; + unsigned int tempVar; + size_t remain; + bool flagNoError = true; + bool flagAppending = false; + + // Make sure we can actually write to the file + if ((file == NULL) || !file->inUse || !file->write) { + r->_errno = EBADF; + return -1; + } + + partition = file->partition; + cache = file->partition->cache; + _FAT_lock(&partition->lock); + + // Only write up to the maximum file size, taking into account wrap-around of ints + if (len + file->filesize > FILE_MAX_SIZE || len + file->filesize < file->filesize) { + len = FILE_MAX_SIZE - file->filesize; + } + + // Short circuit cases where len is 0 (or less) + if (len <= 0) { + _FAT_unlock(&partition->lock); + return 0; + } + + remain = len; + + // Get a new cluster for the start of the file if required + if (file->startCluster == CLUSTER_FREE) { + tempNextCluster = _FAT_fat_linkFreeCluster (partition, CLUSTER_FREE); + if (!_FAT_fat_isValidCluster(partition, tempNextCluster)) { + // Couldn't get a cluster, so abort immediately + _FAT_unlock(&partition->lock); + r->_errno = ENOSPC; + return -1; + } + file->startCluster = tempNextCluster; + + // Appending starts at the begining for a 0 byte file + file->appendPosition.cluster = file->startCluster; + file->appendPosition.sector = 0; + file->appendPosition.byte = 0; + + file->rwPosition.cluster = file->startCluster; + file->rwPosition.sector = 0; + file->rwPosition.byte = 0; + } + + if (file->append) { + position = file->appendPosition; + flagAppending = true; + } else { + // If the write pointer is past the end of the file, extend the file to that size + if (file->currentPosition > file->filesize) { + if (!_FAT_file_extend_r (r, file)) { + _FAT_unlock(&partition->lock); + return -1; + } + } + + // Write at current read pointer + position = file->rwPosition; + + // If it is writing past the current end of file, set appending flag + if (len + file->currentPosition > file->filesize) { + flagAppending = true; + } + } + + // Move onto next cluster if needed + _FAT_check_position_for_next_cluster(r, &position, partition, remain, &flagNoError); + + // Align to sector + tempVar = partition->bytesPerSector - position.byte; + if (tempVar > remain) { + tempVar = remain; + } + + if ((tempVar < partition->bytesPerSector) && flagNoError) { + // Write partial sector to disk + _FAT_cache_writePartialSector (cache, ptr, + _FAT_fat_clusterToSector (partition, position.cluster) + position.sector, position.byte, tempVar); + + remain -= tempVar; + ptr += tempVar; + position.byte += tempVar; + + + // Move onto next sector + if (position.byte >= partition->bytesPerSector) { + position.byte = 0; + position.sector ++; + } + } + + // Align to cluster + // tempVar is number of sectors to write + if (remain > (partition->sectorsPerCluster - position.sector) * partition->bytesPerSector) { + tempVar = partition->sectorsPerCluster - position.sector; + } else { + tempVar = remain / partition->bytesPerSector; + } + + if ((tempVar > 0 && tempVar < partition->sectorsPerCluster) && flagNoError) { + if (!_FAT_cache_writeSectors (cache, + _FAT_fat_clusterToSector (partition, position.cluster) + position.sector, tempVar, ptr)) + { + flagNoError = false; + r->_errno = EIO; + } else { + ptr += tempVar * partition->bytesPerSector; + remain -= tempVar * partition->bytesPerSector; + position.sector += tempVar; + } + } + + // Write whole clusters + while ((remain >= partition->bytesPerCluster) && flagNoError) { + // allocate next cluster + _FAT_check_position_for_next_cluster(r, &position, partition, remain, &flagNoError); + if (!flagNoError) break; + // set indexes to the current position + uint32_t chunkEnd = position.cluster; + uint32_t nextChunkStart = position.cluster; + size_t chunkSize = partition->bytesPerCluster; + FILE_POSITION next_position = position; + + // group consecutive clusters + while (flagNoError && +#ifdef LIMIT_SECTORS + (chunkSize + partition->bytesPerCluster <= LIMIT_SECTORS * partition->bytesPerSector) && +#endif + (chunkSize + partition->bytesPerCluster < remain)) + { + // pretend to use up all sectors in next_position + next_position.sector = partition->sectorsPerCluster; + // get or allocate next cluster + _FAT_check_position_for_next_cluster(r, &next_position, partition, + remain - chunkSize, &flagNoError); + if (!flagNoError) break; // exit loop on error + nextChunkStart = next_position.cluster; + if (nextChunkStart != chunkEnd + 1) break; // exit loop if not consecutive + chunkEnd = nextChunkStart; + chunkSize += partition->bytesPerCluster; + } + + if ( !_FAT_cache_writeSectors (cache, + _FAT_fat_clusterToSector(partition, position.cluster), chunkSize / partition->bytesPerSector, ptr)) + { + flagNoError = false; + r->_errno = EIO; + break; + } + ptr += chunkSize; + remain -= chunkSize; + + if ((chunkEnd != nextChunkStart) && _FAT_fat_isValidCluster(partition, nextChunkStart)) { + // new cluster is already allocated (because it was not consecutive) + position.cluster = nextChunkStart; + position.sector = 0; + } else { + // Allocate a new cluster when next writing the file + position.cluster = chunkEnd; + position.sector = partition->sectorsPerCluster; + } + } + + // allocate next cluster if needed + _FAT_check_position_for_next_cluster(r, &position, partition, remain, &flagNoError); + + // Write remaining sectors + tempVar = remain / partition->bytesPerSector; // Number of sectors left + if ((tempVar > 0) && flagNoError) { + if (!_FAT_cache_writeSectors (cache, _FAT_fat_clusterToSector (partition, position.cluster), tempVar, ptr)) + { + flagNoError = false; + r->_errno = EIO; + } else { + ptr += tempVar * partition->bytesPerSector; + remain -= tempVar * partition->bytesPerSector; + position.sector += tempVar; + } + } + + // Last remaining sector + if ((remain > 0) && flagNoError) { + if (flagAppending) { + _FAT_cache_eraseWritePartialSector ( cache, ptr, + _FAT_fat_clusterToSector (partition, position.cluster) + position.sector, 0, remain); + } else { + _FAT_cache_writePartialSector ( cache, ptr, + _FAT_fat_clusterToSector (partition, position.cluster) + position.sector, 0, remain); + } + position.byte += remain; + remain = 0; + } + + + // Amount written is the originally requested amount minus stuff remaining + len = len - remain; + + // Update file information + file->modified = true; + if (file->append) { + // Appending doesn't affect the read pointer + file->appendPosition = position; + file->filesize += len; + } else { + // Writing also shifts the read pointer + file->rwPosition = position; + file->currentPosition += len; + if (file->filesize < file->currentPosition) { + file->filesize = file->currentPosition; + } + } + _FAT_unlock(&partition->lock); + + return len; +} + + +off_t _FAT_seek_r (struct _reent *r, void *fd, off_t pos, int dir) { + FILE_STRUCT* file = (FILE_STRUCT*) fd; + PARTITION* partition; + uint32_t cluster, nextCluster; + int clusCount; + off_t newPosition; + uint32_t position; + + if ((file == NULL) || (file->inUse == false)) { + // invalid file + r->_errno = EBADF; + return -1; + } + + partition = file->partition; + _FAT_lock(&partition->lock); + + switch (dir) { + case SEEK_SET: + newPosition = pos; + break; + case SEEK_CUR: + newPosition = (off_t)file->currentPosition + pos; + break; + case SEEK_END: + newPosition = (off_t)file->filesize + pos; + break; + default: + _FAT_unlock(&partition->lock); + r->_errno = EINVAL; + return -1; + } + + if ((pos > 0) && (newPosition < 0)) { + _FAT_unlock(&partition->lock); + r->_errno = EOVERFLOW; + return -1; + } + + // newPosition can only be larger than the FILE_MAX_SIZE on platforms where + // off_t is larger than 32 bits. + if (newPosition < 0 || ((sizeof(newPosition) > 4) && newPosition > (off_t)FILE_MAX_SIZE)) { + _FAT_unlock(&partition->lock); + r->_errno = EINVAL; + return -1; + } + + position = (uint32_t)newPosition; + + // Only change the read/write position if it is within the bounds of the current filesize, + // or at the very edge of the file + if (position <= file->filesize && file->startCluster != CLUSTER_FREE) { + // Calculate where the correct cluster is + // how many clusters from start of file + clusCount = position / partition->bytesPerCluster; + cluster = file->startCluster; + if (position >= file->currentPosition) { + // start from current cluster + int currentCount = file->currentPosition / partition->bytesPerCluster; + if (file->rwPosition.sector == partition->sectorsPerCluster) { + currentCount--; + } + clusCount -= currentCount; + cluster = file->rwPosition.cluster; + } + // Calculate the sector and byte of the current position, + // and store them + file->rwPosition.sector = (position % partition->bytesPerCluster) / partition->bytesPerSector; + file->rwPosition.byte = position % partition->bytesPerSector; + + nextCluster = _FAT_fat_nextCluster (partition, cluster); + while ((clusCount > 0) && (nextCluster != CLUSTER_FREE) && (nextCluster != CLUSTER_EOF)) { + clusCount--; + cluster = nextCluster; + nextCluster = _FAT_fat_nextCluster (partition, cluster); + } + + // Check if ran out of clusters and it needs to allocate a new one + if (clusCount > 0) { + if ((clusCount == 1) && (file->filesize == position) && (file->rwPosition.sector == 0)) { + // Set flag to allocate a new cluster + file->rwPosition.sector = partition->sectorsPerCluster; + file->rwPosition.byte = 0; + } else { + _FAT_unlock(&partition->lock); + r->_errno = EINVAL; + return -1; + } + } + + file->rwPosition.cluster = cluster; + } + + // Save position + file->currentPosition = position; + + _FAT_unlock(&partition->lock); + return position; +} + + + +int _FAT_fstat_r (struct _reent *r, void *fd, struct stat *st) { + FILE_STRUCT* file = (FILE_STRUCT*) fd; + PARTITION* partition; + DIR_ENTRY fileEntry; + + if ((file == NULL) || (file->inUse == false)) { + // invalid file + r->_errno = EBADF; + return -1; + } + + partition = file->partition; + _FAT_lock(&partition->lock); + + // Get the file's entry data + fileEntry.dataStart = file->dirEntryStart; + fileEntry.dataEnd = file->dirEntryEnd; + + if (!_FAT_directory_entryFromPosition (partition, &fileEntry)) { + _FAT_unlock(&partition->lock); + r->_errno = EIO; + return -1; + } + + // Fill in the stat struct + _FAT_directory_entryStat (partition, &fileEntry, st); + + // Fix stats that have changed since the file was openned + st->st_ino = (ino_t)(file->startCluster); // The file serial number is the start cluster + st->st_size = file->filesize; // File size + + _FAT_unlock(&partition->lock); + return 0; +} + +int _FAT_ftruncate_r (struct _reent *r, void *fd, off_t len) { + FILE_STRUCT* file = (FILE_STRUCT*) fd; + PARTITION* partition; + int ret=0; + uint32_t newSize = (uint32_t)len; + + if (len < 0) { + // Trying to truncate to a negative size + r->_errno = EINVAL; + return -1; + } + + if ((sizeof(len) > 4) && len > (off_t)FILE_MAX_SIZE) { + // Trying to extend the file beyond what FAT supports + r->_errno = EFBIG; + return -1; + } + + if (!file || !file->inUse) { + // invalid file + r->_errno = EBADF; + return -1; + } + + if (!file->write) { + // Read-only file + r->_errno = EINVAL; + return -1; + } + + partition = file->partition; + _FAT_lock(&partition->lock); + + if (newSize > file->filesize) { + // Expanding the file + FILE_POSITION savedPosition; + uint32_t savedOffset; + // Get a new cluster for the start of the file if required + if (file->startCluster == CLUSTER_FREE) { + uint32_t tempNextCluster = _FAT_fat_linkFreeCluster (partition, CLUSTER_FREE); + if (!_FAT_fat_isValidCluster(partition, tempNextCluster)) { + // Couldn't get a cluster, so abort immediately + _FAT_unlock(&partition->lock); + r->_errno = ENOSPC; + return -1; + } + file->startCluster = tempNextCluster; + + file->rwPosition.cluster = file->startCluster; + file->rwPosition.sector = 0; + file->rwPosition.byte = 0; + } + // Save the read/write pointer + savedPosition = file->rwPosition; + savedOffset = file->currentPosition; + // Set the position to the new size + file->currentPosition = newSize; + // Extend the file to the new position + if (!_FAT_file_extend_r (r, file)) { + ret = -1; + } + // Set the append position to the new rwPointer + if (file->append) { + file->appendPosition = file->rwPosition; + } + // Restore the old rwPointer; + file->rwPosition = savedPosition; + file->currentPosition = savedOffset; + } else if (newSize < file->filesize){ + // Shrinking the file + if (len == 0) { + // Cutting the file down to nothing, clear all clusters used + _FAT_fat_clearLinks (partition, file->startCluster); + file->startCluster = CLUSTER_FREE; + + file->appendPosition.cluster = CLUSTER_FREE; + file->appendPosition.sector = 0; + file->appendPosition.byte = 0; + } else { + // Trimming the file down to the required size + unsigned int chainLength; + uint32_t lastCluster; + + // Drop the unneeded end of the cluster chain. + // If the end falls on a cluster boundary, drop that cluster too, + // then set a flag to allocate a cluster as needed + chainLength = ((newSize-1) / partition->bytesPerCluster) + 1; + lastCluster = _FAT_fat_trimChain (partition, file->startCluster, chainLength); + + if (file->append) { + file->appendPosition.byte = newSize % partition->bytesPerSector; + // Does the end of the file fall on the edge of a cluster? + if (newSize % partition->bytesPerCluster == 0) { + // Set a flag to allocate a new cluster + file->appendPosition.sector = partition->sectorsPerCluster; + } else { + file->appendPosition.sector = (newSize % partition->bytesPerCluster) / partition->bytesPerSector; + } + file->appendPosition.cluster = lastCluster; + } + } + } else { + // Truncating to same length, so don't do anything + } + + file->filesize = newSize; + file->modified = true; + + _FAT_unlock(&partition->lock); + return ret; +} + +int _FAT_fsync_r (struct _reent *r, void *fd) { + FILE_STRUCT* file = (FILE_STRUCT*) fd; + int ret = 0; + + if (!file->inUse) { + r->_errno = EBADF; + return -1; + } + + _FAT_lock(&file->partition->lock); + + ret = _FAT_syncToDisc (file); + if (ret != 0) { + r->_errno = ret; + ret = -1; + } + + _FAT_unlock(&file->partition->lock); + + return ret; +} diff --git a/wii/libogc/libfat/fatfile.h b/wii/libogc/libfat/fatfile.h new file mode 100644 index 0000000000..3d9836c061 --- /dev/null +++ b/wii/libogc/libfat/fatfile.h @@ -0,0 +1,105 @@ +/* + fatfile.h + + Functions used by the newlib disc stubs to interface with + this library + + Copyright (c) 2006 Michael "Chishm" Chisholm + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +#ifndef _FATFILE_H +#define _FATFILE_H + +#include +#include + +#include "common.h" +#include "partition.h" +#include "directory.h" + +#define FILE_MAX_SIZE ((uint32_t)0xFFFFFFFF) // 4GiB - 1B + +typedef struct { + u32 cluster; + sec_t sector; + s32 byte; +} FILE_POSITION; + +struct _FILE_STRUCT; + +struct _FILE_STRUCT { + uint32_t filesize; + uint32_t startCluster; + uint32_t currentPosition; + FILE_POSITION rwPosition; + FILE_POSITION appendPosition; + DIR_ENTRY_POSITION dirEntryStart; // Points to the start of the LFN entries of a file, or the alias for no LFN + DIR_ENTRY_POSITION dirEntryEnd; // Always points to the file's alias entry + PARTITION* partition; + struct _FILE_STRUCT* prevOpenFile; // The previous entry in a double-linked list of open files + struct _FILE_STRUCT* nextOpenFile; // The next entry in a double-linked list of open files + bool read; + bool write; + bool append; + bool inUse; + bool modified; +}; + +typedef struct _FILE_STRUCT FILE_STRUCT; + +int _FAT_open_r (struct _reent *r, void *fileStruct, const char *path, int flags, int mode); + +int _FAT_close_r (struct _reent *r, void *fd); + +ssize_t _FAT_write_r (struct _reent *r,void *fd, const char *ptr, size_t len); + +ssize_t _FAT_read_r (struct _reent *r, void *fd, char *ptr, size_t len); + +off_t _FAT_seek_r (struct _reent *r, void *fd, off_t pos, int dir); + +int _FAT_fstat_r (struct _reent *r, void *fd, struct stat *st); + +int _FAT_stat_r (struct _reent *r, const char *path, struct stat *st); + +int _FAT_link_r (struct _reent *r, const char *existing, const char *newLink); + +int _FAT_unlink_r (struct _reent *r, const char *name); + +int _FAT_chdir_r (struct _reent *r, const char *name); + +int _FAT_rename_r (struct _reent *r, const char *oldName, const char *newName); + +int _FAT_ftruncate_r (struct _reent *r, void *fd, off_t len); + +int _FAT_fsync_r (struct _reent *r, void *fd); + +/* +Synchronizes the file data to disc. +Does no locking of its own -- lock the partition before calling. +Returns 0 on success, an error code on failure. +*/ +extern int _FAT_syncToDisc (FILE_STRUCT* file); + +#endif // _FATFILE_H diff --git a/wii/libogc/libfat/file_allocation_table.c b/wii/libogc/libfat/file_allocation_table.c new file mode 100644 index 0000000000..72f8aa74aa --- /dev/null +++ b/wii/libogc/libfat/file_allocation_table.c @@ -0,0 +1,393 @@ +/* + file_allocation_table.c + Reading, writing and manipulation of the FAT structure on + a FAT partition + + Copyright (c) 2006 Michael "Chishm" Chisholm + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +#include "file_allocation_table.h" +#include "partition.h" +#include "mem_allocate.h" +#include + +/* +Gets the cluster linked from input cluster +*/ +uint32_t _FAT_fat_nextCluster(PARTITION* partition, uint32_t cluster) +{ + uint32_t nextCluster = CLUSTER_FREE; + sec_t sector; + int offset; + + if (cluster == CLUSTER_FREE) { + return CLUSTER_FREE; + } + + switch (partition->filesysType) + { + case FS_UNKNOWN: + return CLUSTER_ERROR; + break; + + case FS_FAT12: + { + u32 nextCluster_h; + sector = partition->fat.fatStart + (((cluster * 3) / 2) / partition->bytesPerSector); + offset = ((cluster * 3) / 2) % partition->bytesPerSector; + + + _FAT_cache_readLittleEndianValue (partition->cache, &nextCluster, sector, offset, sizeof(u8)); + + offset++; + + if (offset >= partition->bytesPerSector) { + offset = 0; + sector++; + } + nextCluster_h = 0; + + _FAT_cache_readLittleEndianValue (partition->cache, &nextCluster_h, sector, offset, sizeof(u8)); + nextCluster |= (nextCluster_h << 8); + + if (cluster & 0x01) { + nextCluster = nextCluster >> 4; + } else { + nextCluster &= 0x0FFF; + } + + if (nextCluster >= 0x0FF7) + { + nextCluster = CLUSTER_EOF; + } + + break; + } + case FS_FAT16: + sector = partition->fat.fatStart + ((cluster << 1) / partition->bytesPerSector); + offset = (cluster % (partition->bytesPerSector >> 1)) << 1; + + _FAT_cache_readLittleEndianValue (partition->cache, &nextCluster, sector, offset, sizeof(u16)); + + if (nextCluster >= 0xFFF7) { + nextCluster = CLUSTER_EOF; + } + break; + + case FS_FAT32: + sector = partition->fat.fatStart + ((cluster << 2) / partition->bytesPerSector); + offset = (cluster % (partition->bytesPerSector >> 2)) << 2; + + _FAT_cache_readLittleEndianValue (partition->cache, &nextCluster, sector, offset, sizeof(u32)); + + if (nextCluster >= 0x0FFFFFF7) { + nextCluster = CLUSTER_EOF; + } + break; + + default: + return CLUSTER_ERROR; + break; + } + + return nextCluster; +} + +/* +writes value into the correct offset within a partition's FAT, based +on the cluster number. +*/ +static bool _FAT_fat_writeFatEntry (PARTITION* partition, uint32_t cluster, uint32_t value) { + sec_t sector; + int offset; + uint32_t oldValue; + + if ((cluster < CLUSTER_FIRST) || (cluster > partition->fat.lastCluster /* This will catch CLUSTER_ERROR */)) + { + return false; + } + + switch (partition->filesysType) + { + case FS_UNKNOWN: + return false; + break; + + case FS_FAT12: + sector = partition->fat.fatStart + (((cluster * 3) / 2) / partition->bytesPerSector); + offset = ((cluster * 3) / 2) % partition->bytesPerSector; + + if (cluster & 0x01) { + + _FAT_cache_readLittleEndianValue (partition->cache, &oldValue, sector, offset, sizeof(u8)); + + value = (value << 4) | (oldValue & 0x0F); + + _FAT_cache_writeLittleEndianValue (partition->cache, value & 0xFF, sector, offset, sizeof(u8)); + + offset++; + if (offset >= partition->bytesPerSector) { + offset = 0; + sector++; + } + + _FAT_cache_writeLittleEndianValue (partition->cache, (value >> 8) & 0xFF, sector, offset, sizeof(u8)); + + } else { + + _FAT_cache_writeLittleEndianValue (partition->cache, value, sector, offset, sizeof(u8)); + + offset++; + if (offset >= partition->bytesPerSector) { + offset = 0; + sector++; + } + + _FAT_cache_readLittleEndianValue (partition->cache, &oldValue, sector, offset, sizeof(u8)); + + value = ((value >> 8) & 0x0F) | (oldValue & 0xF0); + + _FAT_cache_writeLittleEndianValue (partition->cache, value, sector, offset, sizeof(u8)); + } + + break; + + case FS_FAT16: + sector = partition->fat.fatStart + ((cluster << 1) / partition->bytesPerSector); + offset = (cluster % (partition->bytesPerSector >> 1)) << 1; + + _FAT_cache_writeLittleEndianValue (partition->cache, value, sector, offset, sizeof(u16)); + + break; + + case FS_FAT32: + sector = partition->fat.fatStart + ((cluster << 2) / partition->bytesPerSector); + offset = (cluster % (partition->bytesPerSector >> 2)) << 2; + + _FAT_cache_writeLittleEndianValue (partition->cache, value, sector, offset, sizeof(u32)); + + break; + + default: + return false; + break; + } + + return true; +} + +/*----------------------------------------------------------------- +gets the first available free cluster, sets it +to end of file, links the input cluster to it then returns the +cluster number +If an error occurs, return CLUSTER_ERROR +-----------------------------------------------------------------*/ +uint32_t _FAT_fat_linkFreeCluster(PARTITION* partition, uint32_t cluster) { + uint32_t firstFree; + uint32_t curLink; + uint32_t lastCluster; + bool loopedAroundFAT = false; + + lastCluster = partition->fat.lastCluster; + + if (cluster > lastCluster) { + return CLUSTER_ERROR; + } + + // Check if the cluster already has a link, and return it if so + curLink = _FAT_fat_nextCluster(partition, cluster); + if ((curLink >= CLUSTER_FIRST) && (curLink <= lastCluster)) { + return curLink; // Return the current link - don't allocate a new one + } + + // Get a free cluster + firstFree = partition->fat.firstFree; + // Start at first valid cluster + if (firstFree < CLUSTER_FIRST) { + firstFree = CLUSTER_FIRST; + } + + // Search until a free cluster is found + while (_FAT_fat_nextCluster(partition, firstFree) != CLUSTER_FREE) { + firstFree++; + if (firstFree > lastCluster) { + if (loopedAroundFAT) { + // If couldn't get a free cluster then return an error + partition->fat.firstFree = firstFree; + return CLUSTER_ERROR; + } else { + // Try looping back to the beginning of the FAT + // This was suggested by loopy + firstFree = CLUSTER_FIRST; + loopedAroundFAT = true; + } + } + } + partition->fat.firstFree = firstFree; + if(partition->fat.numberFreeCluster) + partition->fat.numberFreeCluster--; + partition->fat.numberLastAllocCluster = firstFree; + + if ((cluster >= CLUSTER_FIRST) && (cluster <= lastCluster)) + { + // Update the linked from FAT entry + _FAT_fat_writeFatEntry (partition, cluster, firstFree); + } + // Create the linked to FAT entry + _FAT_fat_writeFatEntry (partition, firstFree, CLUSTER_EOF); + + return firstFree; +} + +/*----------------------------------------------------------------- +gets the first available free cluster, sets it +to end of file, links the input cluster to it, clears the new +cluster to 0 valued bytes, then returns the cluster number +If an error occurs, return CLUSTER_ERROR +-----------------------------------------------------------------*/ +uint32_t _FAT_fat_linkFreeClusterCleared (PARTITION* partition, uint32_t cluster) { + uint32_t newCluster; + uint32_t i; + uint8_t *emptySector; + + // Link the cluster + newCluster = _FAT_fat_linkFreeCluster(partition, cluster); + + if (newCluster == CLUSTER_FREE || newCluster == CLUSTER_ERROR) { + return CLUSTER_ERROR; + } + + emptySector = (uint8_t*) _FAT_mem_allocate(partition->bytesPerSector); + + // Clear all the sectors within the cluster + memset (emptySector, 0, partition->bytesPerSector); + for (i = 0; i < partition->sectorsPerCluster; i++) { + _FAT_cache_writeSectors (partition->cache, + _FAT_fat_clusterToSector (partition, newCluster) + i, + 1, emptySector); + } + + _FAT_mem_free(emptySector); + + return newCluster; +} + + +/*----------------------------------------------------------------- +_FAT_fat_clearLinks +frees any cluster used by a file +-----------------------------------------------------------------*/ +bool _FAT_fat_clearLinks (PARTITION* partition, uint32_t cluster) { + uint32_t nextCluster; + + if ((cluster < CLUSTER_FIRST) || (cluster > partition->fat.lastCluster /* This will catch CLUSTER_ERROR */)) + return false; + + // If this clears up more space in the FAT before the current free pointer, move it backwards + if (cluster < partition->fat.firstFree) { + partition->fat.firstFree = cluster; + } + + while ((cluster != CLUSTER_EOF) && (cluster != CLUSTER_FREE) && (cluster != CLUSTER_ERROR)) { + // Store next cluster before erasing the link + nextCluster = _FAT_fat_nextCluster (partition, cluster); + + // Erase the link + _FAT_fat_writeFatEntry (partition, cluster, CLUSTER_FREE); + + if(partition->fat.numberFreeCluster < (partition->numberOfSectors/partition->sectorsPerCluster)) + partition->fat.numberFreeCluster++; + // Move onto next cluster + cluster = nextCluster; + } + + return true; +} + +/*----------------------------------------------------------------- +_FAT_fat_trimChain +Drop all clusters past the chainLength. +If chainLength is 0, all clusters are dropped. +If chainLength is 1, the first cluster is kept and the rest are +dropped, and so on. +Return the last cluster left in the chain. +-----------------------------------------------------------------*/ +uint32_t _FAT_fat_trimChain (PARTITION* partition, uint32_t startCluster, unsigned int chainLength) { + uint32_t nextCluster; + + if (chainLength == 0) { + // Drop the entire chain + _FAT_fat_clearLinks (partition, startCluster); + return CLUSTER_FREE; + } else { + // Find the last cluster in the chain, and the one after it + chainLength--; + nextCluster = _FAT_fat_nextCluster (partition, startCluster); + while ((chainLength > 0) && (nextCluster != CLUSTER_FREE) && (nextCluster != CLUSTER_EOF)) { + chainLength--; + startCluster = nextCluster; + nextCluster = _FAT_fat_nextCluster (partition, startCluster); + } + + // Drop all clusters after the last in the chain + if (nextCluster != CLUSTER_FREE && nextCluster != CLUSTER_EOF) { + _FAT_fat_clearLinks (partition, nextCluster); + } + + // Mark the last cluster in the chain as the end of the file + _FAT_fat_writeFatEntry (partition, startCluster, CLUSTER_EOF); + + return startCluster; + } +} + +/*----------------------------------------------------------------- +_FAT_fat_lastCluster +Trace the cluster links until the last one is found +-----------------------------------------------------------------*/ +uint32_t _FAT_fat_lastCluster (PARTITION* partition, uint32_t cluster) { + while ((_FAT_fat_nextCluster(partition, cluster) != CLUSTER_FREE) && (_FAT_fat_nextCluster(partition, cluster) != CLUSTER_EOF)) { + cluster = _FAT_fat_nextCluster(partition, cluster); + } + return cluster; +} + +/*----------------------------------------------------------------- +_FAT_fat_freeClusterCount +Return the number of free clusters available +-----------------------------------------------------------------*/ +unsigned int _FAT_fat_freeClusterCount (PARTITION* partition) { + unsigned int count = 0; + uint32_t curCluster; + + for (curCluster = CLUSTER_FIRST; curCluster <= partition->fat.lastCluster; curCluster++) { + if (_FAT_fat_nextCluster(partition, curCluster) == CLUSTER_FREE) { + count++; + } + } + + return count; +} + diff --git a/wii/libogc/libfat/file_allocation_table.h b/wii/libogc/libfat/file_allocation_table.h new file mode 100644 index 0000000000..d9c43614dd --- /dev/null +++ b/wii/libogc/libfat/file_allocation_table.h @@ -0,0 +1,70 @@ +/* + file_allocation_table.h + Reading, writing and manipulation of the FAT structure on + a FAT partition + + Copyright (c) 2006 Michael "Chishm" Chisholm + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef _FAT_H +#define _FAT_H + +#include "common.h" +#include "partition.h" + +#define CLUSTER_EOF_16 0xFFFF +#define CLUSTER_EOF 0x0FFFFFFF +#define CLUSTER_FREE 0x00000000 +#define CLUSTER_ROOT 0x00000000 +#define CLUSTER_FIRST 0x00000002 +#define CLUSTER_ERROR 0xFFFFFFFF + +#define CLUSTERS_PER_FAT12 4085 +#define CLUSTERS_PER_FAT16 65525 + + +uint32_t _FAT_fat_nextCluster(PARTITION* partition, uint32_t cluster); + +uint32_t _FAT_fat_linkFreeCluster(PARTITION* partition, uint32_t cluster); +uint32_t _FAT_fat_linkFreeClusterCleared (PARTITION* partition, uint32_t cluster); + +bool _FAT_fat_clearLinks (PARTITION* partition, uint32_t cluster); + +uint32_t _FAT_fat_trimChain (PARTITION* partition, uint32_t startCluster, unsigned int chainLength); + +uint32_t _FAT_fat_lastCluster (PARTITION* partition, uint32_t cluster); + +unsigned int _FAT_fat_freeClusterCount (PARTITION* partition); + +static inline sec_t _FAT_fat_clusterToSector (PARTITION* partition, uint32_t cluster) { + return (cluster >= CLUSTER_FIRST) ? + ((cluster - CLUSTER_FIRST) * (sec_t)partition->sectorsPerCluster) + partition->dataStart : + partition->rootDirStart; +} + +static inline bool _FAT_fat_isValidCluster (PARTITION* partition, uint32_t cluster) { + return (cluster >= CLUSTER_FIRST) && (cluster <= partition->fat.lastCluster /* This will catch CLUSTER_ERROR */); +} + +#endif // _FAT_H diff --git a/wii/libogc/libfat/filetime.c b/wii/libogc/libfat/filetime.c new file mode 100644 index 0000000000..d297bf6400 --- /dev/null +++ b/wii/libogc/libfat/filetime.c @@ -0,0 +1,107 @@ +/* + filetime.c + Conversion of file time and date values to various other types + + Copyright (c) 2006 Michael "Chishm" Chisholm + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +#include +#include "filetime.h" +#include "common.h" + +#define MAX_HOUR 23 +#define MAX_MINUTE 59 +#define MAX_SECOND 59 + +#define MAX_MONTH 11 +#define MIN_MONTH 0 +#define MAX_DAY 31 +#define MIN_DAY 1 + +uint16_t _FAT_filetime_getTimeFromRTC (void) { +#ifdef USE_RTC_TIME + struct tm timeParts; + time_t epochTime; + + if (time(&epochTime) == (time_t)-1) { + return 0; + } + localtime_r(&epochTime, &timeParts); + + // Check that the values are all in range. + // If they are not, return 0 (no timestamp) + if ((timeParts.tm_hour < 0) || (timeParts.tm_hour > MAX_HOUR)) return 0; + if ((timeParts.tm_min < 0) || (timeParts.tm_min > MAX_MINUTE)) return 0; + if ((timeParts.tm_sec < 0) || (timeParts.tm_sec > MAX_SECOND)) return 0; + + return ( + ((timeParts.tm_hour & 0x1F) << 11) | + ((timeParts.tm_min & 0x3F) << 5) | + ((timeParts.tm_sec >> 1) & 0x1F) + ); +#else + return 0; +#endif +} + + +uint16_t _FAT_filetime_getDateFromRTC (void) { +#ifdef USE_RTC_TIME + struct tm timeParts; + time_t epochTime; + + if (time(&epochTime) == (time_t)-1) { + return 0; + } + localtime_r(&epochTime, &timeParts); + + if ((timeParts.tm_mon < MIN_MONTH) || (timeParts.tm_mon > MAX_MONTH)) return 0; + if ((timeParts.tm_mday < MIN_DAY) || (timeParts.tm_mday > MAX_DAY)) return 0; + + return ( + (((timeParts.tm_year - 80) & 0x7F) <<9) | // Adjust for MS-FAT base year (1980 vs 1900 for tm_year) + (((timeParts.tm_mon + 1) & 0xF) << 5) | + (timeParts.tm_mday & 0x1F) + ); +#else + return 0; +#endif +} + +time_t _FAT_filetime_to_time_t (uint16_t t, uint16_t d) { + struct tm timeParts; + + timeParts.tm_hour = t >> 11; + timeParts.tm_min = (t >> 5) & 0x3F; + timeParts.tm_sec = (t & 0x1F) << 1; + + timeParts.tm_mday = d & 0x1F; + timeParts.tm_mon = ((d >> 5) & 0x0F) - 1; + timeParts.tm_year = (d >> 9) + 80; + + timeParts.tm_isdst = 0; + + return mktime(&timeParts); +} diff --git a/wii/libogc/libfat/filetime.h b/wii/libogc/libfat/filetime.h new file mode 100644 index 0000000000..3bfd8ed8af --- /dev/null +++ b/wii/libogc/libfat/filetime.h @@ -0,0 +1,41 @@ +/* + filetime.h + Conversion of file time and date values to various other types + + Copyright (c) 2006 Michael "Chishm" Chisholm + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef _FILETIME_H +#define _FILETIME_H + +#include "common.h" +#include + +uint16_t _FAT_filetime_getTimeFromRTC (void); +uint16_t _FAT_filetime_getDateFromRTC (void); + +time_t _FAT_filetime_to_time_t (uint16_t t, uint16_t d); + + +#endif // _FILETIME_H diff --git a/wii/libogc/libfat/libfat.c b/wii/libogc/libfat/libfat.c new file mode 100644 index 0000000000..4d323cae1a --- /dev/null +++ b/wii/libogc/libfat/libfat.c @@ -0,0 +1,255 @@ +/* + libfat.c + Simple functionality for startup, mounting and unmounting of FAT-based devices. + + Copyright (c) 2006 Michael "Chishm" Chisholm + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include +#include +#include +#include +#include + +#include "common.h" +#include "partition.h" +#include "fatfile.h" +#include "fatdir.h" +#include "lock.h" +#include "mem_allocate.h" +#include "disc.h" + +static const devoptab_t dotab_fat = { + "fat", + sizeof (FILE_STRUCT), + _FAT_open_r, + _FAT_close_r, + _FAT_write_r, + _FAT_read_r, + _FAT_seek_r, + _FAT_fstat_r, + _FAT_stat_r, + _FAT_link_r, + _FAT_unlink_r, + _FAT_chdir_r, + _FAT_rename_r, + _FAT_mkdir_r, + sizeof (DIR_STATE_STRUCT), + _FAT_diropen_r, + _FAT_dirreset_r, + _FAT_dirnext_r, + _FAT_dirclose_r, + _FAT_statvfs_r, + _FAT_ftruncate_r, + _FAT_fsync_r, + NULL, /* Device data */ + NULL, // chmod_r + NULL, // fchmod_r + NULL // rmdir_r +}; + +bool fatMount (const char* name, const DISC_INTERFACE* interface, sec_t startSector, uint32_t cacheSize, uint32_t SectorsPerPage) { + PARTITION* partition; + devoptab_t* devops; + char* nameCopy; + + if(!name || strlen(name) > 8 || !interface) + return false; + + if(!interface->startup()) + return false; + + if(!interface->isInserted()) + return false; + + char devname[10]; + strcpy(devname, name); + strcat(devname, ":"); + if(FindDevice(devname) >= 0) + return true; + + devops = _FAT_mem_allocate (sizeof(devoptab_t) + strlen(name) + 1); + if (!devops) { + return false; + } + // Use the space allocated at the end of the devoptab struct for storing the name + nameCopy = (char*)(devops+1); + + // Initialize the file system + partition = _FAT_partition_constructor (interface, cacheSize, SectorsPerPage, startSector); + if (!partition) { + _FAT_mem_free (devops); + return false; + } + + // Add an entry for this device to the devoptab table + memcpy (devops, &dotab_fat, sizeof(dotab_fat)); + strcpy (nameCopy, name); + devops->name = nameCopy; + devops->deviceData = partition; + + AddDevice (devops); + + return true; +} + +bool fatMountSimple (const char* name, const DISC_INTERFACE* interface) { + return fatMount (name, interface, 0, DEFAULT_CACHE_PAGES, DEFAULT_SECTORS_PAGE); +} + +void fatUnmount (const char* name) { + devoptab_t *devops; + PARTITION* partition; + + if(!name) + return; + + devops = (devoptab_t*)GetDeviceOpTab (name); + if (!devops) { + return; + } + + // Perform a quick check to make sure we're dealing with a libfat controlled device + if (devops->open_r != dotab_fat.open_r) { + return; + } + + if (RemoveDevice (name) == -1) { + return; + } + + partition = (PARTITION*)devops->deviceData; + _FAT_partition_destructor (partition); + _FAT_mem_free (devops); +} + +bool fatInit (uint32_t cacheSize, bool setAsDefaultDevice) { + int i; + int defaultDevice = -1; + const DISC_INTERFACE *disc; + + for (i = 0; + _FAT_disc_interfaces[i].name != NULL && _FAT_disc_interfaces[i].getInterface != NULL; + i++) + { + disc = _FAT_disc_interfaces[i].getInterface(); + if (!disc) { + continue; + } + if (fatMount (_FAT_disc_interfaces[i].name, disc, 0, cacheSize, DEFAULT_SECTORS_PAGE)) { + // The first device to successfully mount is set as the default + if (defaultDevice < 0) { + defaultDevice = i; + } + } + } + + if (defaultDevice < 0) { + // None of our devices mounted + return false; + } + + if (setAsDefaultDevice) { + char filePath[PATH_MAX]; + strcpy (filePath, _FAT_disc_interfaces[defaultDevice].name); + strcat (filePath, ":/"); +#ifdef ARGV_MAGIC + if ( __system_argv->argvMagic == ARGV_MAGIC && __system_argv->argc >= 1 && strrchr( __system_argv->argv[0], '/' )!=NULL ) { + // Check the app's path against each of our mounted devices, to see + // if we can support it. If so, change to that path. + for (i = 0; + _FAT_disc_interfaces[i].name != NULL && _FAT_disc_interfaces[i].getInterface != NULL; + i++) + { + if ( !strncasecmp( __system_argv->argv[0], _FAT_disc_interfaces[i].name, + strlen(_FAT_disc_interfaces[i].name))) + { + char *lastSlash; + strcpy(filePath, __system_argv->argv[0]); + lastSlash = strrchr( filePath, '/' ); + + if ( NULL != lastSlash) { + if ( *(lastSlash - 1) == ':') lastSlash++; + *lastSlash = 0; + } + } + } + } +#endif + chdir (filePath); + } + + return true; +} + +bool fatInitDefault (void) { + return fatInit (DEFAULT_CACHE_PAGES, true); +} + +void fatGetVolumeLabel (const char* name, char *label) { + devoptab_t *devops; + PARTITION* partition; + char *buf; + int namelen,i; + + if(!name || !label) + return; + + namelen = strlen(name); + buf=(char*)_FAT_mem_allocate(sizeof(char)*namelen+2); + strcpy(buf,name); + + if (name[namelen-1] == '/') { + buf[namelen-1]='\0'; + namelen--; + } + + if (name[namelen-1] != ':') { + buf[namelen]=':'; + buf[namelen+1]='\0'; + } + + devops = (devoptab_t*)GetDeviceOpTab(buf); + + for(i=0;buf[i]!='\0' && buf[i]!=':';i++); + if (!devops || strncasecmp(buf,devops->name,i)) { + _FAT_mem_free(buf); + return; + } + + _FAT_mem_free(buf); + + // Perform a quick check to make sure we're dealing with a libfat controlled device + if (devops->open_r != dotab_fat.open_r) { + return; + } + + partition = (PARTITION*)devops->deviceData; + + if(!_FAT_directory_getVolumeLabel(partition, label)) { + strncpy(label,partition->label,11); + label[11]='\0'; + } + if(!strncmp(label, "NO NAME", 7)) label[0]='\0'; +} diff --git a/wii/libogc/libfat/lock.c b/wii/libogc/libfat/lock.c new file mode 100644 index 0000000000..59c3444c51 --- /dev/null +++ b/wii/libogc/libfat/lock.c @@ -0,0 +1,29 @@ +#include "common.h" + +#ifndef USE_LWP_LOCK + +#ifndef mutex_t +typedef int mutex_t; +#endif + +void __attribute__ ((weak)) _FAT_lock_init(mutex_t *mutex) +{ + return; +} + +void __attribute__ ((weak)) _FAT_lock_deinit(mutex_t *mutex) +{ + return; +} + +void __attribute__ ((weak)) _FAT_lock(mutex_t *mutex) +{ + return; +} + +void __attribute__ ((weak)) _FAT_unlock(mutex_t *mutex) +{ + return; +} + +#endif // USE_LWP_LOCK diff --git a/wii/libogc/libfat/lock.h b/wii/libogc/libfat/lock.h new file mode 100644 index 0000000000..de5723a9cb --- /dev/null +++ b/wii/libogc/libfat/lock.h @@ -0,0 +1,72 @@ +/* + lock.h + + Copyright (c) 2008 Sven Peter + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*/ + +#ifndef _LOCK_H +#define _LOCK_H + +#include "common.h" + +#ifdef USE_LWP_LOCK + +static inline void _FAT_lock_init(mutex_t *mutex) +{ + LWP_MutexInit(mutex, false); +} + +static inline void _FAT_lock_deinit(mutex_t *mutex) +{ + LWP_MutexDestroy(*mutex); +} + +static inline void _FAT_lock(mutex_t *mutex) +{ + LWP_MutexLock(*mutex); +} + +static inline void _FAT_unlock(mutex_t *mutex) +{ + LWP_MutexUnlock(*mutex); +} + +#else + +// We still need a blank lock type +#ifndef mutex_t +typedef int mutex_t; +#endif + +void _FAT_lock_init(mutex_t *mutex); +void _FAT_lock_deinit(mutex_t *mutex); +void _FAT_lock(mutex_t *mutex); +void _FAT_unlock(mutex_t *mutex); + +#endif // USE_LWP_LOCK + + +#endif // _LOCK_H + diff --git a/wii/libogc/libfat/mem_allocate.h b/wii/libogc/libfat/mem_allocate.h new file mode 100644 index 0000000000..3308807ad0 --- /dev/null +++ b/wii/libogc/libfat/mem_allocate.h @@ -0,0 +1,52 @@ +/* + mem_allocate.h + Memory allocation and destruction calls + Replace these calls with custom allocators if + malloc is unavailable + + Copyright (c) 2006 Michael "Chishm" Chisholm + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef _MEM_ALLOCATE_H +#define _MEM_ALLOCATE_H + +#include + +static inline void* _FAT_mem_allocate (size_t size) { + return malloc (size); +} + +static inline void* _FAT_mem_align (size_t size) { +#ifdef __wii__ + return memalign (32, size); +#else + return malloc (size); +#endif +} + +static inline void _FAT_mem_free (void* mem) { + free (mem); +} + +#endif // _MEM_ALLOCATE_H diff --git a/wii/libogc/libfat/partition.c b/wii/libogc/libfat/partition.c new file mode 100644 index 0000000000..1584e0ed59 --- /dev/null +++ b/wii/libogc/libfat/partition.c @@ -0,0 +1,448 @@ +/* + partition.c + Functions for mounting and dismounting partitions + on various block devices. + + Copyright (c) 2006 Michael "Chishm" Chisholm + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include "partition.h" +#include "bit_ops.h" +#include "file_allocation_table.h" +#include "directory.h" +#include "mem_allocate.h" +#include "fatfile.h" + +#include +#include +#include + +/* +Data offsets +*/ + +// BIOS Parameter Block offsets +enum BPB { + BPB_jmpBoot = 0x00, + BPB_OEMName = 0x03, + // BIOS Parameter Block + BPB_bytesPerSector = 0x0B, + BPB_sectorsPerCluster = 0x0D, + BPB_reservedSectors = 0x0E, + BPB_numFATs = 0x10, + BPB_rootEntries = 0x11, + BPB_numSectorsSmall = 0x13, + BPB_mediaDesc = 0x15, + BPB_sectorsPerFAT = 0x16, + BPB_sectorsPerTrk = 0x18, + BPB_numHeads = 0x1A, + BPB_numHiddenSectors = 0x1C, + BPB_numSectors = 0x20, + // Ext BIOS Parameter Block for FAT16 + BPB_FAT16_driveNumber = 0x24, + BPB_FAT16_reserved1 = 0x25, + BPB_FAT16_extBootSig = 0x26, + BPB_FAT16_volumeID = 0x27, + BPB_FAT16_volumeLabel = 0x2B, + BPB_FAT16_fileSysType = 0x36, + // Bootcode + BPB_FAT16_bootCode = 0x3E, + // FAT32 extended block + BPB_FAT32_sectorsPerFAT32 = 0x24, + BPB_FAT32_extFlags = 0x28, + BPB_FAT32_fsVer = 0x2A, + BPB_FAT32_rootClus = 0x2C, + BPB_FAT32_fsInfo = 0x30, + BPB_FAT32_bkBootSec = 0x32, + // Ext BIOS Parameter Block for FAT32 + BPB_FAT32_driveNumber = 0x40, + BPB_FAT32_reserved1 = 0x41, + BPB_FAT32_extBootSig = 0x42, + BPB_FAT32_volumeID = 0x43, + BPB_FAT32_volumeLabel = 0x47, + BPB_FAT32_fileSysType = 0x52, + // Bootcode + BPB_FAT32_bootCode = 0x5A, + BPB_bootSig_55 = 0x1FE, + BPB_bootSig_AA = 0x1FF +}; + +// File system information block offsets +enum FSIB +{ + FSIB_SIG1 = 0x00, + FSIB_SIG2 = 0x1e4, + FSIB_numberOfFreeCluster = 0x1e8, + FSIB_numberLastAllocCluster = 0x1ec, + FSIB_bootSig_55 = 0x1FE, + FSIB_bootSig_AA = 0x1FF +}; + +static const char FAT_SIG[3] = {'F', 'A', 'T'}; +static const char FS_INFO_SIG1[4] = {'R', 'R', 'a', 'A'}; +static const char FS_INFO_SIG2[4] = {'r', 'r', 'A', 'a'}; + +sec_t FindFirstValidPartition_buf(const DISC_INTERFACE* disc, uint8_t *sectorBuffer) +{ + uint8_t part_table[16*4]; + uint8_t *ptr; + int i; + + // Read first sector of disc + if (!_FAT_disc_readSectors (disc, 0, 1, sectorBuffer)) { + return 0; + } + + memcpy(part_table,sectorBuffer+0x1BE,16*4); + ptr = part_table; + + for(i=0;i<4;i++,ptr+=16) { + sec_t part_lba = u8array_to_u32(ptr, 0x8); + + if (!memcmp(sectorBuffer + BPB_FAT16_fileSysType, FAT_SIG, sizeof(FAT_SIG)) || + !memcmp(sectorBuffer + BPB_FAT32_fileSysType, FAT_SIG, sizeof(FAT_SIG))) { + return part_lba; + } + + if(ptr[4]==0) continue; + + if(ptr[4]==0x0F) { + sec_t part_lba2=part_lba; + sec_t next_lba2=0; + int n; + + for(n=0;n<8;n++) // max 8 logic partitions + { + if(!_FAT_disc_readSectors (disc, part_lba+next_lba2, 1, sectorBuffer)) return 0; + + part_lba2 = part_lba + next_lba2 + u8array_to_u32(sectorBuffer, 0x1C6) ; + next_lba2 = u8array_to_u32(sectorBuffer, 0x1D6); + + if(!_FAT_disc_readSectors (disc, part_lba2, 1, sectorBuffer)) return 0; + + if (!memcmp(sectorBuffer + BPB_FAT16_fileSysType, FAT_SIG, sizeof(FAT_SIG)) || + !memcmp(sectorBuffer + BPB_FAT32_fileSysType, FAT_SIG, sizeof(FAT_SIG))) + { + return part_lba2; + } + + if(next_lba2==0) break; + } + } else { + if(!_FAT_disc_readSectors (disc, part_lba, 1, sectorBuffer)) return 0; + if (!memcmp(sectorBuffer + BPB_FAT16_fileSysType, FAT_SIG, sizeof(FAT_SIG)) || + !memcmp(sectorBuffer + BPB_FAT32_fileSysType, FAT_SIG, sizeof(FAT_SIG))) { + return part_lba; + } + } + } + return 0; +} + +sec_t FindFirstValidPartition(const DISC_INTERFACE* disc) +{ + uint8_t *sectorBuffer = (uint8_t*) _FAT_mem_align(MAX_SECTOR_SIZE); + if (!sectorBuffer) return 0; + sec_t ret = FindFirstValidPartition_buf(disc, sectorBuffer); + _FAT_mem_free(sectorBuffer); + return ret; +} + + +PARTITION* _FAT_partition_constructor_buf (const DISC_INTERFACE* disc, uint32_t cacheSize, uint32_t sectorsPerPage, sec_t startSector, uint8_t *sectorBuffer) +{ + PARTITION* partition; + + // Read first sector of disc + if (!_FAT_disc_readSectors (disc, startSector, 1, sectorBuffer)) { + return NULL; + } + + // Make sure it is a valid MBR or boot sector + if ( (sectorBuffer[BPB_bootSig_55] != 0x55) || (sectorBuffer[BPB_bootSig_AA] != 0xAA)) { + return NULL; + } + + if (startSector != 0) { + // We're told where to start the partition, so just accept it + } else if (!memcmp(sectorBuffer + BPB_FAT16_fileSysType, FAT_SIG, sizeof(FAT_SIG))) { + // Check if there is a FAT string, which indicates this is a boot sector + startSector = 0; + } else if (!memcmp(sectorBuffer + BPB_FAT32_fileSysType, FAT_SIG, sizeof(FAT_SIG))) { + // Check for FAT32 + startSector = 0; + } else { + startSector = FindFirstValidPartition_buf(disc, sectorBuffer); + if (!_FAT_disc_readSectors (disc, startSector, 1, sectorBuffer)) { + return NULL; + } + } + + // Now verify that this is indeed a FAT partition + if (memcmp(sectorBuffer + BPB_FAT16_fileSysType, FAT_SIG, sizeof(FAT_SIG)) && + memcmp(sectorBuffer + BPB_FAT32_fileSysType, FAT_SIG, sizeof(FAT_SIG))) + { + return NULL; + } + + partition = (PARTITION*) _FAT_mem_allocate (sizeof(PARTITION)); + if (partition == NULL) { + return NULL; + } + + // Init the partition lock + _FAT_lock_init(&partition->lock); + + if (!memcmp(sectorBuffer + BPB_FAT16_fileSysType, FAT_SIG, sizeof(FAT_SIG))) + strncpy(partition->label, (char*)(sectorBuffer + BPB_FAT16_volumeLabel), 11); + else + strncpy(partition->label, (char*)(sectorBuffer + BPB_FAT32_volumeLabel), 11); + partition->label[11] = '\0'; + + // Set partition's disc interface + partition->disc = disc; + + // Store required information about the file system + partition->fat.sectorsPerFat = u8array_to_u16(sectorBuffer, BPB_sectorsPerFAT); + if (partition->fat.sectorsPerFat == 0) { + partition->fat.sectorsPerFat = u8array_to_u32( sectorBuffer, BPB_FAT32_sectorsPerFAT32); + } + + partition->numberOfSectors = u8array_to_u16( sectorBuffer, BPB_numSectorsSmall); + if (partition->numberOfSectors == 0) { + partition->numberOfSectors = u8array_to_u32( sectorBuffer, BPB_numSectors); + } + + partition->bytesPerSector = u8array_to_u16(sectorBuffer, BPB_bytesPerSector); + if(partition->bytesPerSector < MIN_SECTOR_SIZE || partition->bytesPerSector > MAX_SECTOR_SIZE) { + // Unsupported sector size + _FAT_mem_free(partition); + return NULL; + } + + partition->sectorsPerCluster = sectorBuffer[BPB_sectorsPerCluster]; + partition->bytesPerCluster = partition->bytesPerSector * partition->sectorsPerCluster; + partition->fat.fatStart = startSector + u8array_to_u16(sectorBuffer, BPB_reservedSectors); + + partition->rootDirStart = partition->fat.fatStart + (sectorBuffer[BPB_numFATs] * partition->fat.sectorsPerFat); + partition->dataStart = partition->rootDirStart + + (( u8array_to_u16(sectorBuffer, BPB_rootEntries) * DIR_ENTRY_DATA_SIZE) / partition->bytesPerSector); + + partition->totalSize = ((uint64_t)partition->numberOfSectors - (partition->dataStart - startSector)) * (uint64_t)partition->bytesPerSector; + + //FS info sector + partition->fsInfoSector = startSector + (u8array_to_u16(sectorBuffer, BPB_FAT32_fsInfo) ? u8array_to_u16(sectorBuffer, BPB_FAT32_fsInfo) : 1); + + // Store info about FAT + uint32_t clusterCount = (partition->numberOfSectors - (uint32_t)(partition->dataStart - startSector)) / partition->sectorsPerCluster; + partition->fat.lastCluster = clusterCount + CLUSTER_FIRST - 1; + partition->fat.firstFree = CLUSTER_FIRST; + partition->fat.numberFreeCluster = 0; + partition->fat.numberLastAllocCluster = 0; + + if (clusterCount < CLUSTERS_PER_FAT12) { + partition->filesysType = FS_FAT12; // FAT12 volume + } else if (clusterCount < CLUSTERS_PER_FAT16) { + partition->filesysType = FS_FAT16; // FAT16 volume + } else { + partition->filesysType = FS_FAT32; // FAT32 volume + } + + if (partition->filesysType != FS_FAT32) { + partition->rootDirCluster = FAT16_ROOT_DIR_CLUSTER; + } else { + // Set up for the FAT32 way + partition->rootDirCluster = u8array_to_u32(sectorBuffer, BPB_FAT32_rootClus); + // Check if FAT mirroring is enabled + if (!(sectorBuffer[BPB_FAT32_extFlags] & 0x80)) { + // Use the active FAT + partition->fat.fatStart = partition->fat.fatStart + ( partition->fat.sectorsPerFat * (sectorBuffer[BPB_FAT32_extFlags] & 0x0F)); + } + } + + // Create a cache to use + partition->cache = _FAT_cache_constructor (cacheSize, sectorsPerPage, partition->disc, startSector+partition->numberOfSectors, partition->bytesPerSector); + + // Set current directory to the root + partition->cwdCluster = partition->rootDirCluster; + + // Check if this disc is writable, and set the readOnly property appropriately + partition->readOnly = !(_FAT_disc_features(disc) & FEATURE_MEDIUM_CANWRITE); + + // There are currently no open files on this partition + partition->openFileCount = 0; + partition->firstOpenFile = NULL; + + _FAT_partition_readFSinfo(partition); + + return partition; +} + +PARTITION* _FAT_partition_constructor (const DISC_INTERFACE* disc, uint32_t cacheSize, uint32_t sectorsPerPage, sec_t startSector) +{ + uint8_t *sectorBuffer = (uint8_t*) _FAT_mem_align(MAX_SECTOR_SIZE); + if (!sectorBuffer) return NULL; + PARTITION *ret = _FAT_partition_constructor_buf(disc, cacheSize, + sectorsPerPage, startSector, sectorBuffer); + _FAT_mem_free(sectorBuffer); + return ret; +} + + +void _FAT_partition_destructor (PARTITION* partition) { + FILE_STRUCT* nextFile; + + _FAT_lock(&partition->lock); + + // Synchronize open files + nextFile = partition->firstOpenFile; + while (nextFile) { + _FAT_syncToDisc (nextFile); + nextFile = nextFile->nextOpenFile; + } + + // Write out the fs info sector + _FAT_partition_writeFSinfo(partition); + + // Free memory used by the cache, writing it to disc at the same time + _FAT_cache_destructor (partition->cache); + + // Unlock the partition and destroy the lock + _FAT_unlock(&partition->lock); + _FAT_lock_deinit(&partition->lock); + + // Free memory used by the partition + _FAT_mem_free (partition); +} + +PARTITION* _FAT_partition_getPartitionFromPath (const char* path) { + const devoptab_t *devops; + + devops = GetDeviceOpTab (path); + + if (!devops) { + return NULL; + } + + return (PARTITION*)devops->deviceData; +} + +static void _FAT_updateFS_INFO(PARTITION * partition, uint8_t *sectorBuffer) { + partition->fat.numberFreeCluster = _FAT_fat_freeClusterCount(partition); + u32_to_u8array(sectorBuffer, FSIB_numberOfFreeCluster, partition->fat.numberFreeCluster); + u32_to_u8array(sectorBuffer, FSIB_numberLastAllocCluster, partition->fat.numberLastAllocCluster); + _FAT_disc_writeSectors (partition->disc, partition->fsInfoSector, 1, sectorBuffer); +} + +void _FAT_partition_createFSinfo(PARTITION * partition) +{ + if(partition->readOnly || partition->filesysType != FS_FAT32) + return; + + uint8_t *sectorBuffer = (uint8_t*) _FAT_mem_align(partition->bytesPerSector); + if (!sectorBuffer) return; + memset(sectorBuffer, 0, partition->bytesPerSector); + + int i; + for(i = 0; i < 4; ++i) + { + sectorBuffer[FSIB_SIG1+i] = FS_INFO_SIG1[i]; + sectorBuffer[FSIB_SIG2+i] = FS_INFO_SIG2[i]; + } + + sectorBuffer[FSIB_bootSig_55] = 0x55; + sectorBuffer[FSIB_bootSig_AA] = 0xAA; + + _FAT_updateFS_INFO(partition,sectorBuffer); + + _FAT_mem_free(sectorBuffer); +} + +void _FAT_partition_readFSinfo(PARTITION * partition) +{ + if(partition->filesysType != FS_FAT32) + return; + + uint8_t *sectorBuffer = (uint8_t*) _FAT_mem_align(partition->bytesPerSector); + if (!sectorBuffer) return; + memset(sectorBuffer, 0, partition->bytesPerSector); + // Read first sector of disc + if (!_FAT_disc_readSectors (partition->disc, partition->fsInfoSector, 1, sectorBuffer)) { + _FAT_mem_free(sectorBuffer); + return; + } + + if(memcmp(sectorBuffer+FSIB_SIG1, FS_INFO_SIG1, 4) != 0 || + memcmp(sectorBuffer+FSIB_SIG2, FS_INFO_SIG2, 4) != 0 || + u8array_to_u32(sectorBuffer, FSIB_numberOfFreeCluster) == 0) + { + //sector does not yet exist, create one! + _FAT_partition_createFSinfo(partition); + } else { + partition->fat.numberFreeCluster = u8array_to_u32(sectorBuffer, FSIB_numberOfFreeCluster); + if(partition->fat.numberFreeCluster == 0xffffffff) { + _FAT_updateFS_INFO(partition,sectorBuffer); + partition->fat.numberFreeCluster = u8array_to_u32(sectorBuffer, FSIB_numberOfFreeCluster); + } + partition->fat.numberLastAllocCluster = u8array_to_u32(sectorBuffer, FSIB_numberLastAllocCluster); + } + _FAT_mem_free(sectorBuffer); +} + +void _FAT_partition_writeFSinfo(PARTITION * partition) +{ + if(partition->filesysType != FS_FAT32) + return; + + uint8_t *sectorBuffer = (uint8_t*) _FAT_mem_align(partition->bytesPerSector); + if (!sectorBuffer) return; + memset(sectorBuffer, 0, partition->bytesPerSector); + // Read first sector of disc + if (!_FAT_disc_readSectors (partition->disc, partition->fsInfoSector, 1, sectorBuffer)) { + _FAT_mem_free(sectorBuffer); + return; + } + + if(memcmp(sectorBuffer+FSIB_SIG1, FS_INFO_SIG1, 4) || memcmp(sectorBuffer+FSIB_SIG2, FS_INFO_SIG2, 4)) { + _FAT_mem_free(sectorBuffer); + return; + } + + u32_to_u8array(sectorBuffer, FSIB_numberOfFreeCluster, partition->fat.numberFreeCluster); + u32_to_u8array(sectorBuffer, FSIB_numberLastAllocCluster, partition->fat.numberLastAllocCluster); + + // Write first sector of disc + _FAT_disc_writeSectors (partition->disc, partition->fsInfoSector, 1, sectorBuffer); + _FAT_mem_free(sectorBuffer); +} + +uint32_t* _FAT_getCwdClusterPtr(const char* name) { + PARTITION *partition = _FAT_partition_getPartitionFromPath(name); + + if (!partition) { + return NULL; + } + + return &partition->cwdCluster; +} diff --git a/wii/libogc/libfat/partition.h b/wii/libogc/libfat/partition.h new file mode 100644 index 0000000000..ec27a0ebed --- /dev/null +++ b/wii/libogc/libfat/partition.h @@ -0,0 +1,107 @@ +/* + partition.h + Functions for mounting and dismounting partitions + on various block devices. + + Copyright (c) 2006 Michael "Chishm" Chisholm + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef _PARTITION_H +#define _PARTITION_H + +#include "common.h" +#include "cache.h" +#include "lock.h" + +#define MIN_SECTOR_SIZE 512 +#define MAX_SECTOR_SIZE 4096 + +// Filesystem type +typedef enum {FS_UNKNOWN, FS_FAT12, FS_FAT16, FS_FAT32} FS_TYPE; + +typedef struct { + sec_t fatStart; + uint32_t sectorsPerFat; + uint32_t lastCluster; + uint32_t firstFree; + uint32_t numberFreeCluster; + uint32_t numberLastAllocCluster; +} FAT; + +typedef struct { + const DISC_INTERFACE* disc; + CACHE* cache; + // Info about the partition + FS_TYPE filesysType; + uint64_t totalSize; + sec_t rootDirStart; + uint32_t rootDirCluster; + uint32_t numberOfSectors; + sec_t dataStart; + uint32_t bytesPerSector; + uint32_t sectorsPerCluster; + uint32_t bytesPerCluster; + uint32_t fsInfoSector; + FAT fat; + // Values that may change after construction + uint32_t cwdCluster; // Current working directory cluster + int openFileCount; + struct _FILE_STRUCT* firstOpenFile; // The start of a linked list of files + mutex_t lock; // A lock for partition operations + bool readOnly; // If this is set, then do not try writing to the disc + char label[12]; // Volume label +} PARTITION; + +/* +Mount the supplied device and return a pointer to the struct necessary to use it +*/ +PARTITION* _FAT_partition_constructor (const DISC_INTERFACE* disc, uint32_t cacheSize, uint32_t SectorsPerPage, sec_t startSector); + +/* +Dismount the device and free all structures used. +Will also attempt to synchronise all open files to disc. +*/ +void _FAT_partition_destructor (PARTITION* partition); + +/* +Return the partition specified in a path, as taken from the devoptab. +*/ +PARTITION* _FAT_partition_getPartitionFromPath (const char* path); + +/* +Create the fs info sector. +*/ +void _FAT_partition_createFSinfo(PARTITION * partition); + +/* +Read the fs info sector data. +*/ +void _FAT_partition_readFSinfo(PARTITION * partition); + +/* +Write the fs info sector data. +*/ +void _FAT_partition_writeFSinfo(PARTITION * partition); + +#endif // _PARTITION_H diff --git a/wii/libogc/libogc/aram.c b/wii/libogc/libogc/aram.c new file mode 100644 index 0000000000..a306c4564b --- /dev/null +++ b/wii/libogc/libogc/aram.c @@ -0,0 +1,378 @@ +/*------------------------------------------------------------- + +aram.c -- ARAM subsystem + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + + +#include +#include +#include +#include "asm.h" +#include "processor.h" +#include "aram.h" +#include "irq.h" +#include "cache.h" + +// DSPCR bits +#define DSPCR_DSPRESET 0x0800 // Reset DSP +#define DSPCR_DSPDMA 0x0200 // ARAM dma in progress, if set +#define DSPCR_DSPINTMSK 0x0100 // * interrupt mask (RW) +#define DSPCR_DSPINT 0x0080 // * interrupt active (RWC) +#define DSPCR_ARINTMSK 0x0040 +#define DSPCR_ARINT 0x0020 +#define DSPCR_AIINTMSK 0x0010 +#define DSPCR_AIINT 0x0008 +#define DSPCR_HALT 0x0004 // halt DSP +#define DSPCR_PIINT 0x0002 // assert DSP PI interrupt +#define DSPCR_RES 0x0001 // reset DSP + +#define AR_ARAMEXPANSION 2 + +#define _SHIFTL(v, s, w) \ + ((u32) (((u32)(v) & ((0x01 << (w)) - 1)) << (s))) +#define _SHIFTR(v, s, w) \ + ((u32)(((u32)(v) >> (s)) & ((0x01 << (w)) - 1))) + +static vu16* const _dspReg = (u16*)0xCC005000; + +static ARCallback __ARDmaCallback = NULL; +static u32 __ARInit_Flag = 0; +static u32 __ARStackPointer = 0; +static u32 __ARFreeBlocks = 0; +static u32 *__ARBlockLen = NULL; + +static u32 __ARInternalSize = 0; +static u32 __ARExpansionSize = 0; +static u32 __ARSize = 0; + +static void __ARHandler(u32 irq,void *ctx); +static void __ARCheckSize(void); +static void __ARClearArea(u32 aramaddr,u32 len); + +ARCallback AR_RegisterCallback(ARCallback callback) +{ + u32 level; + ARCallback old; + + _CPU_ISR_Disable(level); + old = __ARDmaCallback; + __ARDmaCallback = callback; + _CPU_ISR_Restore(level); + return old; +} + +u32 AR_GetDMAStatus() +{ + u32 level,ret; + _CPU_ISR_Disable(level); + ret = ((_dspReg[5]&DSPCR_DSPDMA)==DSPCR_DSPDMA); + _CPU_ISR_Restore(level); + return ret; +} + +u32 AR_Init(u32 *stack_idx_array,u32 num_entries) +{ + u32 level; + u32 aram_base = 0x4000; + + if(__ARInit_Flag) return aram_base; + + _CPU_ISR_Disable(level); + + __ARDmaCallback = NULL; + + IRQ_Request(IRQ_DSP_ARAM,__ARHandler,NULL); + __UnmaskIrq(IRQMASK(IRQ_DSP_ARAM)); + + __ARStackPointer = aram_base; + __ARFreeBlocks = num_entries; + __ARBlockLen = stack_idx_array; + _dspReg[13] = (_dspReg[13]&~0xff)|(_dspReg[13]&0xff); + + __ARCheckSize(); + __ARInit_Flag = 1; + + _CPU_ISR_Restore(level); + return __ARStackPointer; +} + +void AR_StartDMA(u32 dir,u32 memaddr,u32 aramaddr,u32 len) +{ + u32 level; + + _CPU_ISR_Disable(level); + + // set main memory address + _dspReg[16] = (_dspReg[16]&~0x03ff)|_SHIFTR(memaddr,16,16); + _dspReg[17] = (_dspReg[17]&~0xffe0)|_SHIFTR(memaddr, 0,16); + + // set aram address + _dspReg[18] = (_dspReg[18]&~0x03ff)|_SHIFTR(aramaddr,16,16); + _dspReg[19] = (_dspReg[19]&~0xffe0)|_SHIFTR(aramaddr, 0,16); + + // set cntrl bits + _dspReg[20] = (_dspReg[20]&~0x8000)|_SHIFTL(dir,15,1); + _dspReg[20] = (_dspReg[20]&~0x03ff)|_SHIFTR(len,16,16); + _dspReg[21] = (_dspReg[21]&~0xffe0)|_SHIFTR(len, 0,16); + + _CPU_ISR_Restore(level); +} + +u32 AR_Alloc(u32 len) +{ + u32 level; + u32 curraddr; + + _CPU_ISR_Disable(level); + curraddr = __ARStackPointer; + __ARStackPointer += len; + *__ARBlockLen++ = len; + __ARFreeBlocks--; + _CPU_ISR_Restore(level); + + return curraddr; +} + +u32 AR_Free(u32 *len) +{ + u32 level; + + _CPU_ISR_Disable(level); + __ARBlockLen--; + if(len) *len = *__ARBlockLen; + __ARStackPointer -= *__ARBlockLen; + __ARFreeBlocks++; + _CPU_ISR_Restore(level); + + return __ARStackPointer; +} + +void AR_Clear(u32 flag) +{ + switch(flag) { + case AR_ARAMINTALL: + if(__ARInternalSize) + __ARClearArea(0,__ARInternalSize); + break; + case AR_ARAMINTUSER: + if(__ARInternalSize) + __ARClearArea(0x4000,__ARInternalSize-0x4000); + break; + case AR_ARAMEXPANSION: + if(__ARInternalSize && __ARExpansionSize) + __ARClearArea(__ARInternalSize,__ARExpansionSize); + break; + default: + break; + } +} + +BOOL AR_CheckInit() +{ + return __ARInit_Flag; +} + +void AR_Reset() +{ + __ARInit_Flag = 0; +} + +u32 AR_GetSize() +{ + return __ARSize; +} + +u32 AR_GetBaseAddress() +{ + return 0x4000; +} + +u32 AR_GetInternalSize() +{ + return __ARInternalSize; +} + +static __inline__ void __ARClearInterrupt() +{ + u16 cause; + + cause = _dspReg[5]&~(DSPCR_DSPINT|DSPCR_AIINT); + _dspReg[5] = (cause|DSPCR_ARINT); +} + +static __inline__ void __ARWaitDma() +{ + while(_dspReg[5]&DSPCR_DSPDMA); +} + +static void __ARReadDMA(u32 memaddr,u32 aramaddr,u32 len) +{ + // set main memory address + _dspReg[16] = (_dspReg[16]&~0x03ff)|_SHIFTR(memaddr,16,16); + _dspReg[17] = (_dspReg[17]&~0xffe0)|_SHIFTR(memaddr, 0,16); + + // set aram address + _dspReg[18] = (_dspReg[18]&~0x03ff)|_SHIFTR(aramaddr,16,16); + _dspReg[19] = (_dspReg[19]&~0xffe0)|_SHIFTR(aramaddr, 0,16); + + // set cntrl bits + _dspReg[20] = (_dspReg[20]&~0x8000)|0x8000; + _dspReg[20] = (_dspReg[20]&~0x03ff)|_SHIFTR(len,16,16); + _dspReg[21] = (_dspReg[21]&~0xffe0)|_SHIFTR(len, 0,16); + + __ARWaitDma(); + __ARClearInterrupt(); + +} + +static void __ARWriteDMA(u32 memaddr,u32 aramaddr,u32 len) +{ + // set main memory address + _dspReg[16] = (_dspReg[16]&~0x03ff)|_SHIFTR(memaddr,16,16); + _dspReg[17] = (_dspReg[17]&~0xffe0)|_SHIFTR(memaddr, 0,16); + + // set aram address + _dspReg[18] = (_dspReg[18]&~0x03ff)|_SHIFTR(aramaddr,16,16); + _dspReg[19] = (_dspReg[19]&~0xffe0)|_SHIFTR(aramaddr, 0,16); + + // set cntrl bits + _dspReg[20] = (_dspReg[20]&~0x8000); + _dspReg[20] = (_dspReg[20]&~0x03ff)|_SHIFTR(len,16,16); + _dspReg[21] = (_dspReg[21]&~0xffe0)|_SHIFTR(len, 0,16); + + __ARWaitDma(); + __ARClearInterrupt(); +} + +static void __ARClearArea(u32 aramaddr,u32 len) +{ + u32 currlen,curraddr,endaddr; + static u8 zero_buffer[2048] ATTRIBUTE_ALIGN(32); + + while(!(_dspReg[11]&0x0001)); + + memset(zero_buffer,0,2048); + DCFlushRange(zero_buffer,2048); + + curraddr = aramaddr; + endaddr = aramaddr+len; + + currlen = 2048; + while(curraddr + +extern u8 __Arena1Lo[]; +extern char *__argvArena1Lo; +void build_argv (struct __argv* argstruct ); + +void __CheckARGV() { + + if ( __system_argv->argvMagic != ARGV_MAGIC ) { + __system_argv->argc = 0; + __system_argv->argv = NULL; + return; + } + + u8 *dest = (u8 *)( ((int)__Arena1Lo + 3) & ~3); + + memmove(dest, __system_argv->commandLine, __system_argv->length); + __system_argv->commandLine = (char *)dest; + build_argv(__system_argv); + + __argvArena1Lo = (char *)__system_argv->endARGV; + +} diff --git a/wii/libogc/libogc/arqmgr.c b/wii/libogc/libogc/arqmgr.c new file mode 100644 index 0000000000..ed3a99936b --- /dev/null +++ b/wii/libogc/libogc/arqmgr.c @@ -0,0 +1,155 @@ +/*------------------------------------------------------------- + +arqmgr.c -- ARAM task request queue management + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + + +-------------------------------------------------------------*/ + + +#include + +#include "asm.h" +#include "processor.h" +#include "arqueue.h" +#include "arqmgr.h" + +#define ARQM_STACKENTRIES 16 +#define ARQM_ZEROBYTES 256 +#define ROUNDUP32(x) (((u32)(x)+0x1f)&~0x1f) + +typedef struct _arqm_info { + ARQRequest arqhandle; + ARQMCallback callback; + void *buffer; + u32 file_len; + u32 read_len; + u32 aram_start; + u32 curr_read_offset; + u32 curr_aram_offset; + volatile BOOL polled; +} ARQM_Info; + +static u32 __ARQMStackLocation; +static u32 __ARQMFreeBytes; +static u32 __ARQMStackPointer[ARQM_STACKENTRIES]; +static ARQM_Info __ARQMInfo[ARQM_STACKENTRIES]; +static u8 __ARQMZeroBuffer[ARQM_ZEROBYTES] ATTRIBUTE_ALIGN(32); + +static void __ARQMPollCallback(ARQRequest *req) +{ + u32 i; + ARQM_Info *ptr = NULL; + + for(i=0;iarqhandle) break; + } + if(i>=ARQM_STACKENTRIES) return; + + ptr->callback = NULL; + ptr->polled = TRUE; +} + +void ARQM_Init(u32 arambase,s32 len) +{ + u32 i; + + if(len<=0) return; + + __ARQMStackLocation = 0; + __ARQMStackPointer[0] = arambase; + __ARQMFreeBytes = len; + + for(i=0;i=rlen && __ARQMStackLocation<(ARQM_STACKENTRIES-1)) { + ptr = &__ARQMInfo[__ARQMStackLocation]; + + _CPU_ISR_Disable(level); + ptr->polled = FALSE; + ptr->aram_start = __ARQMStackPointer[__ARQMStackLocation++]; + __ARQMStackPointer[__ARQMStackLocation] = ptr->aram_start+rlen; + __ARQMFreeBytes -= rlen; + + ARQ_PostRequestAsync(&ptr->arqhandle,__ARQMStackLocation-1,ARQ_MRAMTOARAM,ARQ_PRIO_HI,ptr->aram_start,(u32)buffer,rlen,__ARQMPollCallback); + _CPU_ISR_Restore(level); + + while(ptr->polled==FALSE); + return (ptr->aram_start); + } + return 0; +} + +void ARQM_Pop() +{ + u32 level; + + _CPU_ISR_Disable(level); + + if(__ARQMStackLocation>1) { + __ARQMFreeBytes += (__ARQMStackPointer[__ARQMStackLocation]-__ARQMStackPointer[__ARQMStackLocation-1]); + __ARQMStackLocation--; + } + _CPU_ISR_Restore(level); +} + +u32 ARQM_GetZeroBuffer() +{ + return __ARQMStackPointer[0]; +} + +u32 ARQM_GetStackPointer() +{ + u32 level,tmp; + + _CPU_ISR_Disable(level) + tmp = __ARQMStackPointer[__ARQMStackLocation]; + _CPU_ISR_Restore(level); + + return tmp; +} + +u32 ARQM_GetFreeSize() +{ + u32 level,tmp; + + _CPU_ISR_Disable(level) + tmp = __ARQMFreeBytes; + _CPU_ISR_Restore(level); + + return tmp; +} diff --git a/wii/libogc/libogc/arqueue.c b/wii/libogc/libogc/arqueue.c new file mode 100644 index 0000000000..15b55e0644 --- /dev/null +++ b/wii/libogc/libogc/arqueue.c @@ -0,0 +1,257 @@ +/*------------------------------------------------------------- + +arqueue.c -- ARAM task request queue implementation + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + + +#include +#include +#include + +#include "asm.h" +#include "processor.h" +#include "arqueue.h" + +static u32 __ARQChunkSize; +static u32 __ARQInitFlag = 0; +static lwpq_t __ARQSyncQueue; + +static lwp_queue __ARQReqQueueLo; +static lwp_queue __ARQReqQueueHi; +static ARQRequest *__ARQReqPendingLo; +static ARQRequest *__ARQReqPendingHi; +static ARQCallback __ARQCallbackLo = NULL; +static ARQCallback __ARQCallbackHi = NULL; + +static __inline__ void __ARQPopTaskQueueHi() +{ + ARQRequest *req; + + req = (ARQRequest*)__lwp_queue_getI(&__ARQReqQueueHi); + if(!req) return; + + req->state = ARQ_TASK_RUNNING; + AR_StartDMA(req->dir,req->mram_addr,req->aram_addr,req->len); + __ARQCallbackHi = req->callback; + __ARQReqPendingHi = req; +} + +static void __ARQCallbackDummy(ARQRequest *req) +{ +} + +static void __ARQCallbackSync(ARQRequest *req) +{ + LWP_ThreadBroadcast(__ARQSyncQueue); +} + +static void __ARQServiceQueueLo() +{ + ARQRequest *req; + + if(!__ARQReqPendingLo) { + req = (ARQRequest*)__lwp_queue_getI(&__ARQReqQueueLo); + __ARQReqPendingLo = req; + } + + req = __ARQReqPendingLo; + if(req) { + req->state = ARQ_TASK_RUNNING; + if(req->len<=__ARQChunkSize) { + AR_StartDMA(req->dir,req->mram_addr,req->aram_addr,req->len); + __ARQCallbackLo = __ARQReqPendingLo->callback; + } else { + AR_StartDMA(req->dir,req->mram_addr,req->aram_addr,__ARQChunkSize); + __ARQReqPendingLo->len -= __ARQChunkSize; + __ARQReqPendingLo->aram_addr += __ARQChunkSize; + __ARQReqPendingLo->mram_addr += __ARQChunkSize; + } + } +} + +static void __ARInterruptServiceRoutine() +{ + if(__ARQCallbackHi) { + __ARQReqPendingHi->state = ARQ_TASK_FINISHED; + __ARQCallbackHi(__ARQReqPendingHi); + __ARQReqPendingHi = NULL; + __ARQCallbackHi = NULL; + } else if(__ARQCallbackLo) { + __ARQReqPendingLo->state = ARQ_TASK_FINISHED; + __ARQCallbackLo(__ARQReqPendingLo); + __ARQReqPendingLo = NULL; + __ARQCallbackLo = NULL; + } + __ARQPopTaskQueueHi(); + if(!__ARQReqPendingHi) __ARQServiceQueueLo(); +} + +void ARQ_Init() +{ + u32 level; + if(__ARQInitFlag) return; + + _CPU_ISR_Disable(level); + + __ARQReqPendingLo = NULL; + __ARQReqPendingHi = NULL; + __ARQCallbackLo = NULL; + __ARQCallbackHi = NULL; + + __ARQChunkSize = ARQ_DEF_CHUNK_SIZE; + + LWP_InitQueue(&__ARQSyncQueue); + + __lwp_queue_init_empty(&__ARQReqQueueLo); + __lwp_queue_init_empty(&__ARQReqQueueHi); + + AR_RegisterCallback(__ARInterruptServiceRoutine); + + __ARQInitFlag = 1; + _CPU_ISR_Restore(level); +} + +void ARQ_Reset() +{ + u32 level; + _CPU_ISR_Disable(level); + __ARQInitFlag = 0; + _CPU_ISR_Restore(level); +} + +void ARQ_SetChunkSize(u32 size) +{ + u32 level; + _CPU_ISR_Disable(level); + __ARQChunkSize = (size+31)&~31; + _CPU_ISR_Restore(level); +} + +u32 ARQ_GetChunkSize() +{ + return __ARQChunkSize; +} + +void ARQ_FlushQueue() +{ + u32 level; + + _CPU_ISR_Disable(level); + + __lwp_queue_init_empty(&__ARQReqQueueLo); + __lwp_queue_init_empty(&__ARQReqQueueHi); + if(!__ARQCallbackLo) __ARQReqPendingLo = NULL; + + _CPU_ISR_Restore(level); +} + +void ARQ_PostRequestAsync(ARQRequest *req,u32 owner,u32 dir,u32 prio,u32 aram_addr,u32 mram_addr,u32 len,ARQCallback cb) +{ + u32 level; + ARQRequest *p; + + req->state = ARQ_TASK_READY; + req->dir = dir; + req->owner = owner; + req->aram_addr = aram_addr; + req->mram_addr = mram_addr; + req->len = len; + req->prio = prio; + req->callback = (cb==NULL) ? __ARQCallbackDummy : cb; + + _CPU_ISR_Disable(level); + + if(prio==ARQ_PRIO_LO) __lwp_queue_appendI(&__ARQReqQueueLo,&req->node); + else __lwp_queue_appendI(&__ARQReqQueueHi,&req->node); + + if(!__ARQReqPendingLo && !__ARQReqPendingHi) { + p = (ARQRequest*)__lwp_queue_getI(&__ARQReqQueueHi); + if(p) { + p->state = ARQ_TASK_RUNNING; + AR_StartDMA(p->dir,p->mram_addr,p->aram_addr,p->len); + __ARQCallbackHi = p->callback; + __ARQReqPendingHi = p; + } + if(!__ARQReqPendingHi) __ARQServiceQueueLo(); + } + _CPU_ISR_Restore(level); +} + +void ARQ_PostRequest(ARQRequest *req,u32 owner,u32 dir,u32 prio,u32 aram_addr,u32 mram_addr,u32 len) +{ + u32 level; + + ARQ_PostRequestAsync(req,owner,dir,prio,aram_addr,mram_addr,len,__ARQCallbackSync); + + _CPU_ISR_Disable(level); + while(req->state!=ARQ_TASK_FINISHED) { + LWP_ThreadSleep(__ARQSyncQueue); + } + _CPU_ISR_Restore(level); +} + +void ARQ_RemoveRequest(ARQRequest *req) +{ + u32 level; + + _CPU_ISR_Disable(level); + __lwp_queue_extractI(&req->node); + if(__ARQReqPendingLo && __ARQReqPendingLo==req && __ARQCallbackLo==NULL) __ARQReqPendingLo = NULL; + _CPU_ISR_Restore(level); +} + +u32 ARQ_RemoveOwnerRequest(u32 owner) +{ + u32 level,cnt; + ARQRequest *req; + + _CPU_ISR_Disable(level); + + cnt = 0; + req = (ARQRequest*)__ARQReqQueueHi.first; + while(req!=(ARQRequest*)__lwp_queue_tail(&__ARQReqQueueHi)) { + if(req->owner==owner) { + __lwp_queue_extractI(&req->node); + cnt++; + } + req = (ARQRequest*)req->node.next; + } + + req = (ARQRequest*)__ARQReqQueueLo.first; + while(req!=(ARQRequest*)__lwp_queue_tail(&__ARQReqQueueLo)) { + if(req->owner==owner) { + __lwp_queue_extractI(&req->node); + cnt++; + } + req = (ARQRequest*)req->node.next; + } + if(__ARQReqPendingLo && __ARQReqPendingLo==req && __ARQCallbackLo==NULL) __ARQReqPendingLo = NULL; + _CPU_ISR_Restore(level); + + return cnt; +} + diff --git a/wii/libogc/libogc/audio.c b/wii/libogc/libogc/audio.c new file mode 100644 index 0000000000..037688660a --- /dev/null +++ b/wii/libogc/libogc/audio.c @@ -0,0 +1,386 @@ +/*------------------------------------------------------------- + +audio.c -- Audio subsystem + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + + +-------------------------------------------------------------*/ + + +#include +#include "asm.h" +#include "processor.h" +#include "irq.h" +#include "audio.h" +#include "lwp_watchdog.h" + +#define STACKSIZE 16384 + +// DSPCR bits +#define DSPCR_DSPRESET 0x0800 // Reset DSP +#define DSPCR_DSPDMA 0x0200 // ARAM dma in progress, if set +#define DSPCR_DSPINTMSK 0x0100 // * interrupt mask (RW) +#define DSPCR_DSPINT 0x0080 // * interrupt active (RWC) +#define DSPCR_ARINTMSK 0x0040 +#define DSPCR_ARINT 0x0020 +#define DSPCR_AIINTMSK 0x0010 +#define DSPCR_AIINT 0x0008 +#define DSPCR_HALT 0x0004 // halt DSP +#define DSPCR_PIINT 0x0002 // assert DSP PI interrupt +#define DSPCR_RES 0x0001 // reset DSP + +// Audio Interface Registers +#define AI_CONTROL 0 +#define AI_STREAM_VOL 1 +#define AI_SAMPLE_COUNT 2 +#define AI_INT_TIMING 3 + +#define AI_PSTAT 0x01 +#define AI_AISFR 0x02 +#define AI_AIINTMSK 0x04 +#define AI_AIINT 0x08 +#define AI_AIINTVLD 0x10 +#define AI_SCRESET 0x20 +#define AI_DMAFR 0x40 + +#define _SHIFTL(v, s, w) \ + ((u32) (((u32)(v) & ((0x01 << (w)) - 1)) << (s))) +#define _SHIFTR(v, s, w) \ + ((u32)(((u32)(v) >> (s)) & ((0x01 << (w)) - 1))) + +#if defined(HW_DOL) + static vu32* const _aiReg = (u32*)0xCC006C00; +#elif defined(HW_RVL) + static vu32* const _aiReg = (u32*)0xCD006C00; +#else + #error HW model not supported. +#endif + +static vu16* const _dspReg = (u16*)0xCC005000; + +static u32 __AIInitFlag = 0; +static u32 __AIActive = 0; +static u8 *__CallbackStack __attribute__((used)) = NULL; +static u8 *__OldStack __attribute__((used)) = NULL; + +static u64 bound_32KHz,bound_48KHz,min_wait,max_wait,buffer; + +#if defined(HW_DOL) +static AISCallback __AIS_Callback; +#endif +static AIDCallback __AID_Callback; + +static void __AICallbackStackSwitch(AIDCallback handler) +{ + __asm__ __volatile__("mflr %r0\n\t\ + stw %r0,4(%r1)\n\t\ + stwu %r1,-24(%r1)\n\t\ + stw %r31,20(%r1)\n\t\ + mr %r31,%r3\n\t\ + lis %r5,__OldStack@ha\n\t\ + addi %r5,%r5,__OldStack@l\n\t\ + stw %r1,0(%r5)\n\t\ + lis %r5,__CallbackStack@ha\n\t\ + addi %r5,%r5,__CallbackStack@l\n\t\ + lwz %r1,0(%r5)\n\t\ + subi %r1,%r1,8\n\t\ + mtlr %r31\n\t\ + blrl\n\t\ + lis %r5,__OldStack@ha\n\t\ + addi %r5,%r5,__OldStack@l\n\t\ + lwz %r1,0(%r5)\n\t\ + lwz %r0,28(%r1)\n\t\ + lwz %r31,20(%r1)\n\t\ + addi %r1,%r1,24\n\t\ + mtlr %r0\n" + ); +} + +#if defined(HW_DOL) +static void __AISHandler(u32 nIrq,void *pCtx) +{ + if(__AIS_Callback) + __AIS_Callback(_aiReg[AI_SAMPLE_COUNT]); + _aiReg[AI_CONTROL] |= AI_AIINT; +} +#endif + +static void __AIDHandler(u32 nIrq,void *pCtx) +{ + _dspReg[5] = (_dspReg[5]&~(DSPCR_DSPINT|DSPCR_ARINT))|DSPCR_AIINT; + if(__AID_Callback) { + if(!__AIActive) { + __AIActive = 1; + if(__CallbackStack) + __AICallbackStackSwitch(__AID_Callback); + else + __AID_Callback(); + __AIActive = 0; + } + } +} + +static void __AISRCINIT() +{ + int done = 0; + u32 sample_counter; + u64 time1, time2, tdiff; + u64 wait = 0; + + while (!done) { + _aiReg[AI_CONTROL] |= AI_SCRESET; + _aiReg[AI_CONTROL] &= ~AI_AISFR; + _aiReg[AI_CONTROL] |= AI_PSTAT; + +#ifdef HW_DOL + sample_counter = _aiReg[AI_SAMPLE_COUNT]; + while (sample_counter == _aiReg[AI_SAMPLE_COUNT]) {} +#else + sample_counter = _aiReg[AI_SAMPLE_COUNT] & 0x7fffffff; + while (sample_counter == (_aiReg[AI_SAMPLE_COUNT] & 0x7fffffff)) {} +#endif + + time1 = gettime(); + + _aiReg[AI_CONTROL] |= AI_AISFR; + _aiReg[AI_CONTROL] |= AI_PSTAT; + +#ifdef HW_DOL + sample_counter = _aiReg[AI_SAMPLE_COUNT]; + while (sample_counter == _aiReg[AI_SAMPLE_COUNT]) {} +#else + sample_counter = _aiReg[AI_SAMPLE_COUNT] & 0x7fffffff; + while (sample_counter == (_aiReg[AI_SAMPLE_COUNT] & 0x7fffffff)) {} +#endif + + time2 = gettime(); + tdiff = time2 - time1; + + _aiReg[AI_CONTROL] &= ~AI_AISFR; + _aiReg[AI_CONTROL] &= ~AI_PSTAT; + + if ((tdiff > (bound_32KHz - buffer)) && + (tdiff < (bound_32KHz + buffer))) { + if (tdiff < (bound_48KHz - buffer)) { + wait = max_wait; + done = 1; + } + } else { + wait = min_wait; + done = 1; + } + } + + while (diff_ticks(time2, gettime()) < wait) {} +} + +void AUDIO_Init(u8 *stack) +{ + u32 rate,level; + + if(!__AIInitFlag) { + bound_32KHz = nanosecs_to_ticks(31524); + bound_48KHz = nanosecs_to_ticks(42024); + min_wait = nanosecs_to_ticks(42000); + max_wait = nanosecs_to_ticks(63000); + buffer = nanosecs_to_ticks(3000); + + _aiReg[AI_CONTROL] &= ~(AI_AIINTVLD|AI_AIINTMSK|AI_PSTAT); + _aiReg[1] = 0; + _aiReg[3] = 0; + + _aiReg[AI_CONTROL] = (_aiReg[AI_CONTROL]&~AI_SCRESET)|AI_SCRESET; + + rate = (_SHIFTR(_aiReg[AI_CONTROL],6,1))^1; + if(rate==AI_SAMPLERATE_48KHZ) { + _aiReg[AI_CONTROL] &= ~AI_DMAFR; + _CPU_ISR_Disable(level); + __AISRCINIT(); + _aiReg[AI_CONTROL] |= AI_DMAFR; + _CPU_ISR_Restore(level); + } + + __AID_Callback = NULL; + + __OldStack = NULL; // davem - use it or lose it + // looks like 3.4 isn't picking up the use from the asm below + __CallbackStack = stack; + + IRQ_Request(IRQ_DSP_AI,__AIDHandler,NULL); + __UnmaskIrq(IRQMASK(IRQ_DSP_AI)); +#if defined(HW_DOL) + __AIS_Callback = NULL; + + IRQ_Request(IRQ_AI,__AISHandler,NULL); + __UnmaskIrq(IRQMASK(IRQ_AI)); +#endif + __AIInitFlag = 1; + } +} + +#if defined(HW_DOL) +void AUDIO_SetStreamVolLeft(u8 vol) +{ + _aiReg[1] = (_aiReg[1]&~0x000000ff)|(vol&0xff); +} + +u8 AUDIO_GetStreamVolLeft() +{ + return (u8)(_aiReg[1]&0xff); +} + +void AUDIO_SetStreamVolRight(u8 vol) +{ + _aiReg[1] = (_aiReg[1]&~0x0000ff00)|(_SHIFTL(vol,8,8)); +} + +u8 AUDIO_GetStreamVolRight() +{ + return (u8)(_SHIFTR(_aiReg[1],8,8)); +} + +void AUDIO_SetStreamSampleRate(u32 rate) +{ + _aiReg[AI_CONTROL] = (_aiReg[AI_CONTROL]&~AI_AISFR)|(_SHIFTL(rate,1,1)); +} + +u32 AUDIO_GetStreamSampleRate() +{ + return _SHIFTR(_aiReg[AI_CONTROL],1,1); +} + +void AUDIO_SetStreamTrigger(u32 cnt) +{ + _aiReg[3] = cnt; +} + +void AUDIO_ResetStreamSampleCnt() +{ + _aiReg[AI_CONTROL] = (_aiReg[AI_CONTROL]&~AI_SCRESET)|AI_SCRESET; +} + +void AUDIO_SetStreamPlayState(u32 state) +{ + u32 playstate,streamrate; + u32 volright,volleft,level; + + playstate = AUDIO_GetStreamPlayState(); + streamrate = AUDIO_GetStreamSampleRate(); + if(playstate!=state && state==AI_STREAM_START && streamrate==AI_SAMPLERATE_32KHZ ) { + volright = AUDIO_GetStreamVolRight(); + AUDIO_SetStreamVolRight(0); + volleft = AUDIO_GetStreamVolLeft(); + AUDIO_SetStreamVolLeft(0); + + _CPU_ISR_Disable(level); + __AISRCINIT(); + _aiReg[AI_CONTROL] = (_aiReg[AI_CONTROL]&~AI_SCRESET)|AI_SCRESET; + _aiReg[AI_CONTROL] = (_aiReg[AI_CONTROL]&~0x01)|0x01; + _CPU_ISR_Restore(level); + AUDIO_SetStreamVolRight(volright); + AUDIO_SetStreamVolLeft(volleft); + } else { + _aiReg[AI_CONTROL] = (_aiReg[AI_CONTROL]&~AI_PSTAT)|(state&AI_PSTAT); + } +} + +u32 AUDIO_GetStreamPlayState() +{ + return (_aiReg[AI_CONTROL]&AI_PSTAT); +} +#endif + +AIDCallback AUDIO_RegisterDMACallback(AIDCallback callback) +{ + u32 level; + AIDCallback old; + + _CPU_ISR_Disable(level); + old = __AID_Callback; + __AID_Callback = callback; + _CPU_ISR_Restore(level); + return old; +} + +void AUDIO_InitDMA(u32 startaddr,u32 len) +{ + u32 level; + + _CPU_ISR_Disable(level); + _dspReg[24] = (_dspReg[24]&~0x1fff)|(_SHIFTR(startaddr,16,13)); + _dspReg[25] = (_dspReg[25]&~0xffe0)|(startaddr&0xffff); + _dspReg[27] = (_dspReg[27]&~0x7fff)|(_SHIFTR(len,5,15)); + _CPU_ISR_Restore(level); +} + +u16 AUDIO_GetDMAEnableFlag() +{ + return (_SHIFTR(_dspReg[27],15,1)); +} + +void AUDIO_StartDMA() +{ + _dspReg[27] = (_dspReg[27]&~0x8000)|0x8000; +} + +void AUDIO_StopDMA() +{ + _dspReg[27] = (_dspReg[27]&~0x8000); +} + +u32 AUDIO_GetDMABytesLeft() +{ + return (_SHIFTL(_dspReg[29],5,15)); +} + +u32 AUDIO_GetDMAStartAddr() +{ + return (_SHIFTL((_dspReg[24]&0x1fff),16,13)|(_dspReg[25]&0xffe0)); +} + +u32 AUDIO_GetDMALength() +{ + return ((_dspReg[27]&0x7fff)<<5); +} + +void AUDIO_SetDSPSampleRate(u8 rate) +{ + u32 level; + + if(AUDIO_GetDSPSampleRate()!=rate) { + _aiReg[AI_CONTROL] &= ~AI_DMAFR; + if(rate==AI_SAMPLERATE_32KHZ) { + _CPU_ISR_Disable(level); + __AISRCINIT(); + _aiReg[AI_CONTROL] |= AI_DMAFR; + _CPU_ISR_Restore(level); + } + } +} + +u32 AUDIO_GetDSPSampleRate() +{ + return (_SHIFTR(_aiReg[AI_CONTROL],6,1))^1; //0^1(1) = 48Khz, 1^1(0) = 32Khz +} diff --git a/wii/libogc/libogc/cache.c b/wii/libogc/libogc/cache.c new file mode 100644 index 0000000000..e9b35ade13 --- /dev/null +++ b/wii/libogc/libogc/cache.c @@ -0,0 +1,177 @@ +/*------------------------------------------------------------- + +cache.c -- Cache interface + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + + +#include +#include +#include "cache.h" + +#define _SHIFTL(v, s, w) \ + ((u32) (((u32)(v) & ((0x01 << (w)) - 1)) << (s))) +#define _SHIFTR(v, s, w) \ + ((u32)(((u32)(v) >> (s)) & ((0x01 << (w)) - 1))) + +extern void __LCEnable(); +extern void L2GlobalInvalidate(); +extern void L2Enable(); + +void LCEnable() +{ + u32 level; + + _CPU_ISR_Disable(level); + __LCEnable(); + _CPU_ISR_Restore(level); +} + +u32 LCLoadData(void *dstAddr,void *srcAddr,u32 nCount) +{ + u32 cnt,blocks; + + if((s32)nCount<=0) return 0; + + cnt = (nCount+31)>>5; + blocks = (cnt+127)>>7; + while(cnt) { + if(cnt<0x80) { + LCLoadBlocks(dstAddr,srcAddr,cnt); + cnt = 0; + break; + } + LCLoadBlocks(dstAddr,srcAddr,0); + cnt -= 128; + dstAddr += 4096; + srcAddr += 4096; + } + return blocks; +} + +u32 LCStoreData(void *dstAddr,void *srcAddr,u32 nCount) +{ + u32 cnt,blocks; + + if((s32)nCount<=0) return 0; + + cnt = (nCount+31)>>5; + blocks = (cnt+127)>>7; + while(cnt) { + if(cnt<0x80) { + LCStoreBlocks(dstAddr,srcAddr,cnt); + cnt = 0; + break; + } + LCStoreBlocks(dstAddr,srcAddr,0); + cnt -= 128; + dstAddr += 4096; + srcAddr += 4096; + } + return blocks; +} + +u32 LCQueueLength() +{ + u32 hid2 = mfspr(920); + return _SHIFTR(hid2,4,4); +} + +u32 LCQueueWait(u32 len) +{ + len++; + while(_SHIFTR(mfspr(920),4,4)>=len); + return len; +} + +void LCFlushQueue() +{ + mtspr(922,0); + mtspr(923,1); + ppcsync(); +} + +void LCAlloc(void *addr,u32 bytes) +{ + u32 level; + u32 cnt = bytes>>5; + u32 hid2 = mfspr(920); + if(!(hid2&0x10000000)) { + _CPU_ISR_Disable(level); + __LCEnable(); + _CPU_ISR_Restore(level); + } + LCAllocTags(TRUE,addr,cnt); +} + +void LCAllocNoInvalidate(void *addr,u32 bytes) +{ + u32 level; + u32 cnt = bytes>>5; + u32 hid2 = mfspr(920); + if(!(hid2&0x10000000)) { + _CPU_ISR_Disable(level); + __LCEnable(); + _CPU_ISR_Restore(level); + } + LCAllocTags(FALSE,addr,cnt); +} +#ifdef HW_RVL +void L2Enhance() +{ + u32 level, hid4; + u32 *stub = (u32*)0x80001800; + _CPU_ISR_Disable(level); + hid4 = mfspr(HID4); + // make sure H4A is set before doing anything + if (hid4 & 0x80000000) { + // There's no easy way to flush only L2, so just flush everything + // L2GlobalInvalidate will take care of syncing + DCFlushRangeNoSync((void*)0x80000000, 0x01800000); + DCFlushRangeNoSync((void*)0x90000000, 0x04000000); + + // Invalidate L2 (this will disable it first) + L2GlobalInvalidate(); + // set bits: L2FM=01, BCO=1, L2MUM=1 + hid4 |= 0x24200000; + mtspr(HID4, hid4); + // Re-enable L2 + L2Enable(); + + // look for HBC stub (STUBHAXX) + if (stub[1]==0x53545542 && stub[2]==0x48415858) { + // look for a HID4 write + for (stub += 3; (u32)stub < 0x80003000; stub++) { + if ((stub[0] & 0xFC1FFFFF)==0x7C13FBA6) { + write32((u32)stub, 0x60000000); + break; + } + } + } + } + _CPU_ISR_Restore(level); +} +#endif diff --git a/wii/libogc/libogc/cache_asm.S b/wii/libogc/libogc/cache_asm.S new file mode 100644 index 0000000000..a6e39de916 --- /dev/null +++ b/wii/libogc/libogc/cache_asm.S @@ -0,0 +1,471 @@ +/*------------------------------------------------------------- + +cache_asm.S -- Cache interface + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + + +-------------------------------------------------------------*/ + + +#include + + .globl DCFlashInvalidate +DCFlashInvalidate: + mfspr r3,HID0 + ori r3,r3,0x0400 + mtspr HID0,r3 + isync + blr + + .globl DCEnable +DCEnable: + mfspr r3,HID0 + ori r3,r3,0x4000 + mtspr HID0,r3 + isync + blr + + .globl DCDisable +DCDisable: + mfspr r3,HID0 + rlwinm r3,r3,0,18,16 + mtspr HID0,r3 + isync + blr + + .globl DCFreeze +DCFreeze: + mfspr r3,HID0 + ori r3,r3,0x1000 + mtspr HID0,r3 + isync + blr + + .globl DCUnfreeze +DCUnfreeze: + mfspr r3,HID0 + rlwinm r3,r3,0,20,18 + mtspr HID0,r3 + isync + blr + + .globl DCTouchLoad +DCTouchLoad: + dcbt r0,r3 + blr + + .globl DCBlockZero +DCBlockZero: + dcbz r0,r3 + blr + + .globl DCBlockStore +DCBlockStore: + dcbst r0,r3 + blr + + .globl DCBlockFlush +DCBlockFlush: + dcbf r0,r3 + blr + + .globl DCBlockInvalidate +DCBlockInvalidate: + dcbi r0,r3 + blr + + .globl DCInvalidateRange +DCInvalidateRange: + cmplwi r4, 0 # zero or negative size? + blelr + clrlwi. r5, r3, 27 # check for lower bits set in address + beq 1f + addi r4, r4, 0x20 +1: + addi r4, r4, 0x1f + srwi r4, r4, 5 + mtctr r4 +2: + dcbi r0, r3 + addi r3, r3, 0x20 + bdnz 2b + blr + + .globl DCFlushRange +DCFlushRange: + cmplwi r4, 0 # zero or negative size? + blelr + clrlwi. r5, r3, 27 # check for lower bits set in address + beq 1f + addi r4, r4, 0x20 +1: + addi r4, r4, 0x1f + srwi r4, r4, 5 + mtctr r4 +2: + dcbf r0, r3 + addi r3, r3, 0x20 + bdnz 2b + sc + blr + + .globl DCStoreRange +DCStoreRange: + cmplwi r4, 0 # zero or negative size? + blelr + clrlwi. r5, r3, 27 # check for lower bits set in address + beq 1f + addi r4, r4, 0x20 +1: + addi r4, r4, 0x1f + srwi r4, r4, 5 + mtctr r4 +2: + dcbst r0, r3 + addi r3, r3, 0x20 + bdnz 2b + sc + blr + + .globl DCFlushRangeNoSync +DCFlushRangeNoSync: + cmplwi r4, 0 # zero or negative size? + blelr + clrlwi. r5, r3, 27 # check for lower bits set in address + beq 1f + addi r4, r4, 0x20 +1: + addi r4, r4, 0x1f + srwi r4, r4, 5 + mtctr r4 +2: + dcbf r0, r3 + addi r3, r3, 0x20 + bdnz 2b + blr + + .globl DCStoreRangeNoSync +DCStoreRangeNoSync: + cmplwi r4, 0 # zero or negative size? + blelr + clrlwi. r5, r3, 27 # check for lower bits set in address + beq 1f + addi r4, r4, 0x20 +1: + addi r4, r4, 0x1f + srwi r4, r4, 5 + mtctr r4 +2: + dcbst r0, r3 + addi r3, r3, 0x20 + bdnz 2b + blr + + .globl DCZeroRange +DCZeroRange: + cmplwi r4, 0 # zero or negative size? + blelr + clrlwi. r5, r3, 27 # check for lower bits set in address + beq 1f + addi r4, r4, 0x20 +1: + addi r4, r4, 0x1f + srwi r4, r4, 5 + mtctr r4 +2: + dcbz r0, r3 + addi r3, r3, 0x20 + bdnz 2b + blr + + .globl DCTouchRange +DCTouchRange: + cmplwi r4, 0 # zero or negative size? + blelr + clrlwi. r5, r3, 27 # check for lower bits set in address + beq 1f + addi r4, r4, 0x20 +1: + addi r4, r4, 0x1f + srwi r4, r4, 5 + mtctr r4 +2: + dcbt r0, r3 + addi r3, r3, 0x20 + bdnz 2b + blr + + .globl ICInvalidateRange +ICInvalidateRange: + cmplwi r4, 0 # zero or negative size? + blelr + clrlwi. r5, r3, 27 # check for lower bits set in address + beq 1f + addi r4, r4, 0x20 +1: + addi r4, r4, 0x1f + srwi r4, r4, 5 + mtctr r4 +2: + icbi r0, r3 + addi r3, r3, 0x20 + bdnz 2b + sync + isync + blr + + .globl ICFlashInvalidate +ICFlashInvalidate: + mfspr r3,HID0 + ori r3,r3,0x0800 + mtspr HID0,r3 + isync + blr + + .globl ICEnable +ICEnable: + mfspr r3,HID0 + ori r3,r3,0x8000 + mtspr HID0,r3 + isync + blr + + .globl ICDisable +ICDisable: + mfspr r3,HID0 + rlwinm r3,r3,0,17,15 + mtspr HID0,r3 + isync + blr + + .globl ICFreeze +ICFreeze: + mfspr r3,HID0 + ori r3,r3,0x2000 + mtspr HID0,r3 + isync + blr + + .globl ICUnfreeze +ICUnfreeze: + mfspr r3,HID0 + rlwinm r3,r3,0,19,17 + mtspr HID0,r3 + isync + blr + + .globl ICBlockInvalidate +ICBlockInvalidate: + icbi r0,r3 + blr + + .globl ICSync +ICSync: + isync + blr + + .globl L2Init +L2Init: + mflr r0 + stw r0,4(sp) + stwu sp,-16(sp) + stw r31,12(sp) + mfmsr r3 + mr r31,r3 + sync + li r3,48 + mtmsr r3 + sync + bl L2Disable + bl L2GlobalInvalidate + mr r3,r31 + mtmsr r3 + lwz r0,20(sp) + lwz r31,12(sp) + mtlr r0 + blr + + .globl L2Enable +L2Enable: + sync + mfspr r3,L2CR; + oris r0,r3,0x8000 + rlwinm r3,r0,0,11,9 + mtspr L2CR,r3 + sync + blr + + .globl L2Disable +L2Disable: + sync + mfspr r3,L2CR + clrlwi r3,r3,1 + mtspr L2CR,r3 + sync + blr + + .globl L2GlobalInvalidate +L2GlobalInvalidate: + mflr r0 + stw r0,4(sp) + stwu sp,-8(sp) + bl L2Disable + mfspr r3,L2CR + oris r3,r3,0x0020 + mtspr L2CR,r3 +1: mfspr r3,L2CR + clrlwi r0,r3,31 + cmplwi r0,0x0000 + bne 1b + mfspr r3,L2CR + rlwinm r3,r3,0,11,9 + mtspr L2CR,r3 +2: mfspr r3,L2CR + clrlwi r0,r3,31 + cmplwi r0,0x0000 + bne 2b + lwz r0,12(sp) + addi sp,sp,8 + mtlr r0 + blr + + .globl __LCEnable +__LCEnable: + mfmsr r5 + ori r5,r5,0x1000 + mtmsr r5 + lis r3,0x8000 + li r4,1024 + mtctr r4 +1: dcbt r0,r3 + dcbst r0,r3 + addi r3,r3,32 + bdnz 1b + mfspr r4,HID2 + oris r4,r4,0x100f + mtspr HID2,r4 + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + lis r3,0xe000 + ori r3,r3,0x0002 + mtspr DBAT3L,r3 + ori r3,r3,0x01fe + mtspr DBAT3U,r3 + isync + lis r3,0xe000 + li r6,512 + mtctr r6 + li r6,0 +2: dcbz_l r6,r3 + addi r3,r3,32 + bdnz 2b + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + blr + + .globl LCDisable +LCDisable: + lis r3,0xe000 + li r4,512 + mtctr r4 +1: dcbi r0,r3 + addi r3,r3,32 + bdnz 1b + mfspr r4,HID2 + rlwinm r4,r4,0,4,2 + mtspr HID2,r4 + blr + + .globl LCAllocOneTag +LCAllocOneTag: + cmpwi r3,0 + beq 1f + dcbi r0,r4 +1: dcbz_l r0,r4 + blr + + .globl LCAllocTags +LCAllocTags: + mflr r6 + cmplwi r5,0 + ble 2f + mtctr r5 + cmpwi r3,0 + beq 3f +1: dcbi r0,r4 + dcbz_l r0,r4 + addi r4,r4,32 + bdnz 1b + b 2f +3: dcbz_l r0,r4 + addi r4,r4,32 + bdnz 3b +2: mtlr r6 + blr + + .globl LCLoadBlocks +LCLoadBlocks: + extrwi r6,r5,5,25 + clrlwi r4,r4,4 + or r6,r6,r4 + mtspr DMAU,r6 + clrlslwi r6,r5,30,2 + or r6,r6,r3 + ori r6,r6,0x0012 + mtspr DMAL,r6 + blr + + .globl LCStoreBlocks +LCStoreBlocks: + extrwi r6,r5,5,25 + clrlwi r4,r4,4 + or r6,r6,r3 + mtspr DMAU,r6 + clrlslwi r6,r5,30,2 + or r6,r6,r4 + ori r6,r6,0x0002 + mtspr DMAL,r6 + blr + diff --git a/wii/libogc/libogc/card.c b/wii/libogc/libogc/card.c new file mode 100644 index 0000000000..6afaa6e2d7 --- /dev/null +++ b/wii/libogc/libogc/card.c @@ -0,0 +1,2977 @@ +/*------------------------------------------------------------- + +card.c -- Memory card subsystem + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + + +#include +#include +#include +#include +#include +#include +#include "asm.h" +#include "processor.h" +#include "system.h" +#include "ogcsys.h" +#include "cache.h" +#include "dsp.h" +#include "lwp.h" +#include "exi.h" +#include "card.h" + +#define CARD_SYSAREA 5 +#define CARD_SYSDIR 0x2000 +#define CARD_SYSDIR_BACK 0x4000 +#define CARD_SYSBAT 0x6000 +#define CARD_SYSBAT_BACK 0x8000 + +#define _SHIFTL(v, s, w) \ + ((u32) (((u32)(v) & ((0x01 << (w)) - 1)) << (s))) +#define _SHIFTR(v, s, w) \ + ((u32)(((u32)(v) >> (s)) & ((0x01 << (w)) - 1))) +#define _ROTL(v,s) \ + (((u32)v<>(0x20-s))) + +#define CARD_STATUS_UNLOCKED 0x40 + +struct card_header { + u32 serial[0x08]; + u16 device_id; + u16 size; + u16 encoding; + u8 padding[0x1d6]; + u16 chksum1; + u16 chksum2; +} ATTRIBUTE_PACKED; + +struct card_direntry { + u8 gamecode[4]; + u8 company[2]; + u8 pad_00; + u8 bannerfmt; + u8 filename[CARD_FILENAMELEN]; + u32 lastmodified; + u32 iconaddr; + u16 iconfmt; + u16 iconspeed; + u8 permission; + u8 copytimes; + u16 block; + u16 length; + u16 pad_01; + u32 commentaddr; +} ATTRIBUTE_PACKED; + +struct card_dat { // dir allocation table + struct card_direntry entries[CARD_MAXFILES]; +}; + +struct card_dircntrl { + u8 pad[58]; + u16 updated; + u16 chksum1; + u16 chksum2; +} ATTRIBUTE_PACKED; + +struct card_bat { + u16 chksum1; + u16 chksum2; + u16 updated; + u16 freeblocks; + u16 lastalloc; + u16 fat[0xffc]; +} ATTRIBUTE_PACKED; + +typedef struct _card_block { + u8 cmd[9]; + u32 cmd_len; + u32 cmd_mode; + u32 cmd_blck_cnt; + u32 cmd_sector_addr; + u32 cmd_retries; + u32 attached; + s32 result; + u32 cid; + u16 card_size; + u32 mount_step; + u32 format_step; + u32 sector_size; + u16 blocks; + u32 latency; + u32 cipher; + u32 key[3]; + u32 transfer_cnt; + u16 curr_fileblock; + card_file *curr_file; + struct card_dat *curr_dir; + struct card_bat *curr_fat; + void *workarea; + void *cmd_usr_buf; + lwpq_t wait_sync_queue; + syswd_t timeout_svc; + dsptask_t dsp_task; + + cardcallback card_ext_cb; + cardcallback card_tx_cb; + cardcallback card_exi_cb; + cardcallback card_api_cb; + cardcallback card_xfer_cb; + cardcallback card_erase_cb; + cardcallback card_unlock_cb; +} card_block; + +#if defined(HW_RVL) + +static u32 _cardunlockdata[0x160] ATTRIBUTE_ALIGN(32) = +{ + 0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000021,0x02ff0021, + 0x13061203,0x12041305,0x009200ff,0x0088ffff, + 0x0089ffff,0x008affff,0x008bffff,0x8f0002bf, + 0x008816fc,0xdcd116fd,0x000016fb,0x000102bf, + 0x008e25ff,0x0380ff00,0x02940027,0x02bf008e, + 0x1fdf24ff,0x02403fff,0x00980400,0x009a0010, + 0x00990000,0x8e0002bf,0x009402bf,0x864402bf, + 0x008816fc,0xdcd116fd,0x000316fb,0x00018f00, + 0x02bf008e,0x0380cdd1,0x02940048,0x27ff0380, + 0x00010295,0x005a0380,0x00020295,0x8000029f, + 0x00480021,0x8e0002bf,0x008e25ff,0x02bf008e, + 0x25ff02bf,0x008e25ff,0x02bf008e,0x00c5ffff, + 0x03403fff,0x1c9f02bf,0x008e00c7,0xffff02bf, + 0x008e00c6,0xffff02bf,0x008e00c0,0xffff02bf, + 0x008e20ff,0x03403fff,0x1f5f02bf,0x008e21ff, + 0x02bf008e,0x23ff1205,0x1206029f,0x80b50021, + 0x27fc03c0,0x8000029d,0x008802df,0x27fe03c0, + 0x8000029c,0x008e02df,0x2ece2ccf,0x00f8ffcd, + 0x00f9ffc9,0x00faffcb,0x26c902c0,0x0004029d, + 0x009c02df,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000 +}; + +#elif defined(HW_DOL) + +static u32 _cardunlockdata[0x160] ATTRIBUTE_ALIGN(32) = +{ + 0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000021,0x02ff0021, + 0x13061203,0x12041305,0x009200ff,0x0088ffff, + 0x0089ffff,0x008affff,0x008bffff,0x8f0002bf, + 0x008816fc,0xdcd116fd,0x000016fb,0x000102bf, + 0x008e25ff,0x0380ff00,0x02940027,0x02bf008e, + 0x1fdf24ff,0x02400fff,0x00980400,0x009a0010, + 0x00990000,0x8e0002bf,0x009402bf,0x864402bf, + 0x008816fc,0xdcd116fd,0x000316fb,0x00018f00, + 0x02bf008e,0x0380cdd1,0x02940048,0x27ff0380, + 0x00010295,0x005a0380,0x00020295,0x8000029f, + 0x00480021,0x8e0002bf,0x008e25ff,0x02bf008e, + 0x25ff02bf,0x008e25ff,0x02bf008e,0x00c5ffff, + 0x03400fff,0x1c9f02bf,0x008e00c7,0xffff02bf, + 0x008e00c6,0xffff02bf,0x008e00c0,0xffff02bf, + 0x008e20ff,0x03400fff,0x1f5f02bf,0x008e21ff, + 0x02bf008e,0x23ff1205,0x1206029f,0x80b50021, + 0x27fc03c0,0x8000029d,0x008802df,0x27fe03c0, + 0x8000029c,0x008e02df,0x2ece2ccf,0x00f8ffcd, + 0x00f9ffc9,0x00faffcb,0x26c902c0,0x0004029d, + 0x009c02df,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000 +}; +#endif + +static u32 card_sector_size[] = +{ + 0x0002000, + 0x0004000, + 0x0008000, + 0x0010000, + 0x0020000, + 0x0040000, + 0x0000000, + 0x0000000 +}; + +static u32 card_latency[] = +{ + 0x00000004, + 0x00000008, + 0x00000010, + 0x00000020, + 0x00000030, + 0x00000080, + 0x00000100, + 0x00000200 +}; + +static u32 card_inited = 0; +static u32 crand_next = 1; + +static u8 card_gamecode[4] = {0xff,0xff,0xff,0xff}; +static u8 card_company[2] = {0xff,0xff}; +static card_block cardmap[2]; + +static void __card_mountcallback(s32 chn,s32 result); +static void __erase_callback(s32 chn,s32 result); +static s32 __dounlock(s32 chn,u32 *key); +static s32 __card_readsegment(s32 chn,cardcallback callback); +static s32 __card_read(s32 chn,u32 address,u32 block_len,void *buffer,cardcallback callback); +static s32 __card_updatefat(s32 chn,struct card_bat *fatblock,cardcallback callback); +static s32 __card_updatedir(s32 chn,cardcallback callback); +static s32 __card_write(s32 chn,u32 address,u32 block_len,void *buffer,cardcallback callback); +static s32 __card_writepage(s32 chn,cardcallback callback); +static s32 __card_sectorerase(s32 chn,u32 sector,cardcallback callback); +static s32 __card_onreset(s32 final); + +static sys_resetinfo card_resetinfo = { + {}, + __card_onreset, + 127 +}; + +extern unsigned long gettick(); +extern long long gettime(); +extern syssram* __SYS_LockSram(); +extern syssramex* __SYS_LockSramEx(); +extern u32 __SYS_UnlockSram(u32 write); +extern u32 __SYS_UnlockSramEx(u32 write); + +static vu16* const _viReg = (u16*)0xCC002000; + +/* new api */ +static s32 __card_onreset(s32 final) +{ + if(final==FALSE) { + if(CARD_Unmount(CARD_SLOTA)==-1) return 0; + if(CARD_Unmount(CARD_SLOTB)==-1) return 0; + } + return 1; +} + +static void __card_checksum(u16 *buff,u32 len,u16 *cs1,u16 *cs2) +{ + u32 i; + *cs1 = 0; + *cs2 = 0; + len /= 2; + for (i = 0; i < len; ++i) { + *cs1 += buff[i]; + *cs2 += (buff[i] ^ 0xffff); + } + if (*cs1 == 0xffff) *cs1 = 0; + if (*cs2 == 0xffff) *cs2 = 0; +} + +static s32 __card_putcntrlblock(card_block *card,s32 result) +{ + u32 level; + + _CPU_ISR_Disable(level); + if(card->attached) card->result = result; + else if(card->result==CARD_ERROR_BUSY) card->result = result; + _CPU_ISR_Restore(level); + return result; +} + +static s32 __card_getcntrlblock(s32 chn,card_block **card) +{ + s32 ret; + u32 level; + card_block *rcard = NULL; + + if(chn=EXI_CHANNEL_2) return CARD_ERROR_FATAL_ERROR; + + _CPU_ISR_Disable(level); + rcard = &cardmap[chn]; + if(!rcard->attached) { + _CPU_ISR_Restore(level); + return CARD_ERROR_NOCARD; + } + + ret = CARD_ERROR_BUSY; + if(rcard->result!=CARD_ERROR_BUSY) { + rcard->result = CARD_ERROR_BUSY; + rcard->card_api_cb = NULL; + *card = rcard; + ret = CARD_ERROR_READY; + } + _CPU_ISR_Restore(level); + return ret; +} + +static __inline__ struct card_dat* __card_getdirblock(card_block *card) +{ + return card->curr_dir; +} + +static __inline__ struct card_bat* __card_getbatblock(card_block *card) +{ + return card->curr_fat; +} + +static s32 __card_sync(s32 chn) +{ + s32 ret; + u32 level; + card_block *card = &cardmap[chn]; + + _CPU_ISR_Disable(level); + while((ret=CARD_GetErrorCode(chn))==CARD_ERROR_BUSY) { + LWP_ThreadSleep(card->wait_sync_queue); + } + _CPU_ISR_Restore(level); + return ret; +} + +static void __card_synccallback(s32 chn,s32 result) +{ + u32 level; + card_block *card = &cardmap[chn]; + _CPU_ISR_Disable(level); + LWP_ThreadBroadcast(card->wait_sync_queue); + _CPU_ISR_Restore(level); +} + +static void __card_updateiconoffsets(struct card_direntry *entry,card_stat *stats) +{ + s32 i; + u8 bnrfmt,nicons; + u32 iconaddr,iconbase; + + iconaddr = entry->iconaddr; + if(iconaddr==-1) { + stats->banner_fmt = 0; + stats->icon_fmt = 0; + stats->icon_speed = 0; + iconaddr = 0; + } + + if(entry->bannerfmt&CARD_BANNER_MASK) { + if(!(entry->bannerfmt&0x10)) { + bnrfmt = (entry->bannerfmt&CARD_BANNER_MASK); + if(bnrfmt==CARD_BANNER_CI) { + stats->banner_fmt = bnrfmt; + stats->offset_banner = iconaddr; + stats->offset_banner_tlut = iconaddr+3072; + iconaddr += (3072+512); + } else if(bnrfmt==CARD_BANNER_RGB) { + stats->banner_fmt = bnrfmt; + stats->offset_banner = iconaddr; + stats->offset_banner_tlut = -1; + iconaddr += 6144; + } + } else { + stats->offset_banner = -1; + stats->offset_banner_tlut = -1; + } + } + + nicons = 0; + for(i=0;iiconfmt[i] = ((entry->iconfmt>>(i<<1))&CARD_ICON_MASK); + stats->iconspeed[i] = ((entry->iconspeed>>(i<<1))&CARD_SPEED_MASK); + if(stats->iconspeed[i]==0) stats->iconfmt[i] = 0; + if(stats->iconfmt[i]) nicons++; + } + + iconbase = iconaddr; + for(i=0;iiconfmt[i]) { + case 1: //CARD_ICON_CI with shared palette + stats->offset_icon[i] = iconaddr; + stats->offset_icon_tlut[i] = iconbase + (nicons*1024); + iconaddr += 1024; + break; + case 2: //CARD_ICON_RGB + stats->offset_icon[i] = iconaddr; + stats->offset_icon_tlut[i] = -1; + iconaddr += 3072; + break; + case 3: //CARD_ICON_CI with own palette + stats->offset_icon[i] = iconaddr; + stats->offset_icon_tlut[i] = iconaddr + 1024; + iconaddr += 1536; + break; + default: //CARD_ICON_NONE + stats->offset_icon[i] = -1; + stats->offset_icon_tlut[i] = -1; + break; + + + } + } +// stats->offset_data = iconaddr; +} + +static s32 __card_getstatusex(s32 chn,s32 fileno,struct card_direntry *entry) +{ + s32 ret; + card_block *card = NULL; + struct card_dat *dirblock = NULL; + + if(chn=EXI_CHANNEL_2) return CARD_ERROR_NOCARD; + if(fileno<0 || fileno>=CARD_MAXFILES) return CARD_ERROR_FATAL_ERROR; + if((ret=__card_getcntrlblock(chn,&card))<0) return ret; + + ret = CARD_ERROR_BROKEN; + dirblock = __card_getdirblock(card); + if(dirblock) { + ret = CARD_ERROR_READY; + memcpy(entry,&dirblock->entries[fileno],sizeof(struct card_direntry)); + } + return __card_putcntrlblock(card,ret); +} + +static s32 __card_setstatusexasync(s32 chn,s32 fileno,struct card_direntry *entry,cardcallback callback) +{ + s32 ret,i,bend; + card_block *card = NULL; + struct card_dat *dirblock = NULL; + struct card_direntry *entries = NULL; + + if(chn=EXI_CHANNEL_2) return CARD_ERROR_NOCARD; + if(fileno<0 || fileno>=CARD_MAXFILES) return CARD_ERROR_FATAL_ERROR; + if(entry->filename[0]==0xff || entry->filename[0]==0) return CARD_ERROR_FATAL_ERROR; + if((ret=__card_getcntrlblock(chn,&card))<0) return ret; + + ret = CARD_ERROR_BROKEN; + dirblock = __card_getdirblock(card); + if(dirblock) { + i = 0; bend = 0; + ret = CARD_ERROR_READY; + entries = dirblock->entries; + while(ifilename[i]==0) { + entry->filename[i] = 0; + bend = 1; + } + i++; + } + + if(memcmp(entries[fileno].filename,entry->filename,CARD_FILENAMELEN) + || memcmp(entries[fileno].gamecode,entry->gamecode,4) + || memcmp(entries[fileno].company,entry->company,2)) { + i = 0; + while(igamecode,4)==0 + && memcmp(entries[i].company,entry->company,2)==0 + && memcmp(entries[i].filename,entry->filename,CARD_FILENAMELEN)==0) { + return __card_putcntrlblock(card,CARD_ERROR_EXIST); + } + i++; + } + memcpy(entries[fileno].filename,entry->filename,CARD_FILENAMELEN); + memcpy(entries[fileno].gamecode,entry->gamecode,4); + memcpy(entries[fileno].company,entry->company,2); + } + + entries[fileno].lastmodified = entry->lastmodified; + entries[fileno].bannerfmt = entry->bannerfmt; + entries[fileno].iconaddr = entry->iconaddr; + entries[fileno].iconfmt = entry->iconfmt; + entries[fileno].iconspeed = entry->iconspeed; + entries[fileno].commentaddr = entry->commentaddr; + entries[fileno].permission = entry->permission; + entries[fileno].copytimes = entry->copytimes; + + if((ret=__card_updatedir(chn,callback))>=0) return ret; + } + return __card_putcntrlblock(card,ret); +} + +static s32 __card_getfilenum(card_block *card,const char *filename,const char *gamecode,const char *company,s32 *fileno) +{ + u32 i = 0; + struct card_direntry *entries = NULL; + struct card_dat *dirblock = NULL; + if(!card->attached) return CARD_ERROR_NOCARD; + dirblock = __card_getdirblock(card); + + entries = dirblock->entries; + for(i=0;i=CARD_MAXFILES) return CARD_ERROR_NOFILE; + return CARD_ERROR_READY; +} + +static s32 __card_seek(card_file *file,s32 len,s32 offset,card_block **rcard) +{ + s32 ret; + s32 i,entry_len; + card_block *card = NULL; + struct card_direntry *entry = NULL; + struct card_dat *dirblock = NULL; + struct card_bat *fatblock = NULL; + if(file->filenum<0 || file->filenum>=CARD_MAXFILES) return CARD_ERROR_FATAL_ERROR; + if((ret=__card_getcntrlblock(file->chn,&card))<0) return ret; + if(file->iblockiblock>=card->blocks) { + __card_putcntrlblock(card,CARD_ERROR_FATAL_ERROR); + return CARD_ERROR_FATAL_ERROR; + } + + dirblock = __card_getdirblock(card); + entry = &dirblock->entries[file->filenum]; + if(entry->gamecode[0]!=0xff) { + entry_len = entry->length*card->sector_size; + if(entry_lencurr_file = file; + file->len = len; + + if(offsetoffset) { + file->offset = 0; + file->iblock = entry->block; + if(file->iblockiblock>=card->blocks) { + __card_putcntrlblock(card,CARD_ERROR_BROKEN); + return CARD_ERROR_BROKEN; + } + } + + fatblock = __card_getbatblock(card); + for(i=file->iblock;iblocks && file->offset<(offset&~(card->sector_size-1));i=file->iblock) { + file->offset += card->sector_size; + file->iblock = fatblock->fat[i-CARD_SYSAREA]; + if(file->iblockiblock>=card->blocks) { + __card_putcntrlblock(card,CARD_ERROR_BROKEN); + return CARD_ERROR_BROKEN; + } + } + file->offset = offset; + *rcard = card; + } + return CARD_ERROR_READY; +} + +static u32 __card_checkdir(card_block *card,u32 *currdir) +{ + u32 dir,bad,bad_dir; + u16 chksum0,chksum1; + struct card_dircntrl *dircntrl[2]; + struct card_dat *dirblock[2]; + dir = 0; + bad = 0; + bad_dir = 0; + while(dir<2) { + dirblock[dir] = card->workarea+((dir+1)<<13); + dircntrl[dir] = (card->workarea+((dir+1)<<13))+8128; + __card_checksum((u16*)dirblock[dir],0x1ffc,&chksum0,&chksum1); + if(chksum0!=dircntrl[dir]->chksum1 || chksum1!=dircntrl[dir]->chksum2) { + card->curr_dir = NULL; + bad_dir = dir; + bad++; + } + dir++; + } + + dir = bad_dir; + if(!bad) { + if(dircntrl[0]->updatedupdated) dir = 0; + else dir = 1; + } + if(card->curr_dir==NULL) { + card->curr_dir = dirblock[dir]; + memcpy(dirblock[dir],dirblock[dir^1],8192); + } + else if(card->curr_dir==dirblock[0]) dir = 0; + else dir = 1; + + if(currdir) *currdir = dir; + return bad; +} + +static u32 __card_checkfat(card_block *card,u32 *currfat) +{ + u32 fat,bad,bad_fat; + u16 chksum0,chksum1; + struct card_bat *fatblock[2]; + fat = 0; + bad = 0; + bad_fat = 0; + while(fat<2) { + fatblock[fat] = card->workarea+((fat+3)<<13); + __card_checksum((u16*)(((u32)fatblock[fat])+4),0x1ffc,&chksum0,&chksum1); + if(chksum0!=fatblock[fat]->chksum1 || chksum1!=fatblock[fat]->chksum2) { + card->curr_fat = NULL; + bad_fat = fat; + bad++; + } else { + u16 curblock = CARD_SYSAREA; + u16 freeblocks = 0; + while(curblockblocks) { + if(!fatblock[fat]->fat[curblock-CARD_SYSAREA]) freeblocks++; + curblock++; + } + if(freeblocks!=fatblock[fat]->freeblocks) { + card->curr_fat = NULL; + bad_fat = fat; + bad++; + } + } + fat++; + } + + fat = bad_fat; + if(!bad) { + if(fatblock[0]->updatedupdated) fat = 0; + else fat = 1; + } + if(card->curr_fat==NULL) { + card->curr_fat = fatblock[fat]; + memcpy(fatblock[fat],fatblock[fat^1],8192); + } + else if(card->curr_fat==fatblock[0]) fat = 0; + else fat = 1; + + if(currfat) *currfat = fat; + return bad; +} + +static s32 __card_verify(card_block *card) +{ + u32 ret = 0; + + ret += __card_checkdir(card,NULL); + ret += __card_checkfat(card,NULL); + if(ret<=2) { + if(card->curr_dir && card->curr_fat) return CARD_ERROR_READY; + } + return CARD_ERROR_BROKEN; +} + +static u32 __card_iscard(u32 id) +{ + u32 ret; + u32 idx,tmp,secsize; + + if(id&~0xffff) return 0; + if(id&0x03) return 0; + + ret = 0; + tmp = id&0xfc; + if(tmp==EXI_MEMCARD59 || tmp==EXI_MEMCARD123 + || tmp==EXI_MEMCARD251 || tmp==EXI_MEMCARD507 + || tmp==EXI_MEMCARD1019 || tmp==EXI_MEMCARD2043) { + idx = _ROTL(id,23)&0x1c; + if((secsize=card_sector_size[idx>>2])==0) return 0; + tmp = ((tmp<<20)&0x1FFE0000)/secsize; + if(tmp>8) ret = 1; + } + return ret; +} + +static s32 __card_allocblock(s32 chn,u32 blocksneed,cardcallback callback) +{ + s32 ret; + u16 block,currblock = 0,prevblock = 0; + u32 i,count; + card_block *card = NULL; + struct card_bat *fatblock = NULL; + if(chn=EXI_CHANNEL_2) return CARD_ERROR_FATAL_ERROR; + card = &cardmap[chn]; + + if(!card->attached) return CARD_ERROR_NOCARD; + fatblock = __card_getbatblock(card); + + if(fatblock->freeblockslastalloc; + i = blocksneed; + while(1) { + if(i==0) { + // Done allocating blocks + fatblock->freeblocks -= blocksneed; + fatblock->lastalloc = currblock; + card->curr_fileblock = block; + ret = __card_updatefat(chn,fatblock,callback); + break; + } + + /* + Since testing free space has already been done, if all the blocks + the file takes up cannot be entered into the FAT, something is + wrong. + */ + count++; + if(count>=(card->blocks-CARD_SYSAREA)) return CARD_ERROR_BROKEN; + + currblock++; + if(currblock=card->blocks) currblock = CARD_SYSAREA; + if(fatblock->fat[currblock-CARD_SYSAREA]==0) { + if(block!=0xffff) + fatblock->fat[prevblock-CARD_SYSAREA] = currblock; + else + block = currblock; + + fatblock->fat[currblock-CARD_SYSAREA] = 0xffff; + prevblock = currblock; + i--; + } + } + return ret; +} + +static s32 __card_freeblock(s32 chn,u16 block,cardcallback callback) +{ + u16 next = 0xffff,prev = 0xffff; + card_block *card = NULL; + struct card_bat *fatblock = NULL; + if(chn=EXI_CHANNEL_2) return CARD_ERROR_NOCARD; + card = &cardmap[chn]; + + if(!card->attached) return CARD_ERROR_NOCARD; + + fatblock = __card_getbatblock(card); + next = fatblock->fat[block-CARD_SYSAREA]; + while(1) { + if(next==0xffff) break; + if(next=card->blocks) return CARD_ERROR_BROKEN; + + // Get the file's next block and clear the previous one from the fat + prev = next; + next = fatblock->fat[prev-CARD_SYSAREA]; + fatblock->fat[prev-CARD_SYSAREA] = 0; + fatblock->freeblocks++; + } + return __card_updatefat(chn,fatblock,callback); +} + +static s32 __card_unlockedhandler(s32 chn,s32 dev) +{ + s32 ret; + cardcallback cb = NULL; + card_block *card = NULL; + + if(chn=EXI_CHANNEL_2) return CARD_ERROR_NOCARD; + card = &cardmap[chn]; + + ret = CARD_ERROR_READY; + cb = card->card_unlock_cb; + if(cb) { + card->card_unlock_cb = NULL; + if(EXI_Probe(chn)==0) ret = CARD_ERROR_NOCARD; + cb(chn,ret); + } + return CARD_ERROR_UNLOCKED; +} + +static s32 __card_readstatus(s32 chn,u8 *pstatus) +{ + u8 val[2]; + u32 err; + s32 ret; + + if(chn=EXI_CHANNEL_2) return CARD_ERROR_NOCARD; + if(EXI_Select(chn,EXI_DEVICE_0,EXI_SPEED16MHZ)==0) return CARD_ERROR_NOCARD; + + err = 0; + val[0] = 0x83; val[1] = 0x00; + if(EXI_Imm(chn,val,2,EXI_WRITE,NULL)==0) err |= 0x01; + if(EXI_Sync(chn)==0) err |= 0x02; + if(EXI_Imm(chn,pstatus,1,EXI_READ,NULL)==0) err |= 0x04; + if(EXI_Sync(chn)==0) err |= 0x08; + if(EXI_Deselect(chn)==0) err |= 0x10; + + if(err) ret = CARD_ERROR_NOCARD; + else ret = CARD_ERROR_READY; + return ret; +} + +static s32 __card_clearstatus(s32 chn) +{ + u8 val; + u32 err; + s32 ret; + if(chn=EXI_CHANNEL_2) return CARD_ERROR_NOCARD; + if(EXI_Select(chn,EXI_DEVICE_0,EXI_SPEED16MHZ)==0) return CARD_ERROR_NOCARD; + + err = 0; + val = 0x89; + if(EXI_Imm(chn,&val,1,EXI_WRITE,NULL)==0) err |= 0x01; + if(EXI_Sync(chn)==0) err |= 0x02; + if(EXI_Deselect(chn)==0) err |= 0x04; + + if(err) ret = CARD_ERROR_NOCARD; + else ret = CARD_ERROR_READY; + + return ret; +} + +static s32 __card_enableinterrupt(s32 chn,u32 enable) +{ + u8 val[2]; + u32 err; + s32 ret; + + if(chn=EXI_CHANNEL_2) return CARD_ERROR_NOCARD; + if(EXI_Select(chn,EXI_DEVICE_0,EXI_SPEED16MHZ)==0) return CARD_ERROR_NOCARD; + + err = 0; + val[0] = 0x81; + if(enable) val[1] = 0x01; + else val[1] = 0x00; + if(EXI_Imm(chn,val,2,EXI_WRITE,NULL)==0) err |= 0x01; + if(EXI_Sync(chn)==0) err |= 0x02; + if(EXI_Deselect(chn)==0) err |= 0x04; + + if(err) ret = CARD_ERROR_BUSY; + else ret = CARD_ERROR_READY; + + return ret; +} + +static s32 __card_txhandler(s32 chn,s32 dev) +{ + u32 err; + s32 ret = CARD_ERROR_READY; + cardcallback cb = NULL; + card_block *card = NULL; + if(chn=EXI_CHANNEL_2) return 0; + card = &cardmap[chn]; + + err = 0; + if(EXI_Deselect(chn)==0) ret |= err; + if(EXI_Unlock(chn)==0) ret |= err; + + cb = card->card_tx_cb; + if(cb) { + card->card_tx_cb = NULL; + if(!err) { + if(EXI_Probe(chn)==0) ret = CARD_ERROR_NOCARD; + } else ret = CARD_ERROR_NOCARD; + cb(chn,ret); + } + return 1; +} + +static void __timeouthandler(syswd_t alarm,void *cbarg) +{ + u32 chn; + s32 ret = CARD_ERROR_READY; + cardcallback cb; + card_block *card = NULL; + chn = 0; + while(chntimeout_svc==alarm) break; + chn++; + } + if(chn=EXI_CHANNEL_2) return; + + + if(card->attached) { + EXI_RegisterEXICallback(chn,NULL); + cb = card->card_exi_cb; + if(cb) { + card->card_exi_cb = NULL; + ret = CARD_ERROR_IOERROR; + cb(chn,ret); + } + } +} + +static void __setuptimeout(card_block *card) +{ + struct timespec tb; + SYS_CancelAlarm(card->timeout_svc); + + if(card->cmd[0]==0xf1 || card->cmd[0]==0xf4) { + tb.tv_sec = 1*(card->sector_size/8192); + tb.tv_nsec = 0; + SYS_SetAlarm(card->timeout_svc,&tb,__timeouthandler,NULL); + } else if(card->cmd[0]==0xf2) { + tb.tv_sec = 0; + tb.tv_nsec = 100*TB_NSPERMS; + SYS_SetAlarm(card->timeout_svc,&tb,__timeouthandler,NULL); + } +} + +static s32 __retry(s32 chn) +{ + u32 len; + card_block *card = NULL; + + if(chn=EXI_CHANNEL_2) return CARD_ERROR_NOCARD; + card = &cardmap[chn]; + if(EXI_Select(chn,EXI_DEVICE_0,EXI_SPEED16MHZ)==0) { + EXI_Unlock(chn); + return CARD_ERROR_NOCARD; + } + + __setuptimeout(card); + + if(EXI_ImmEx(chn,card->cmd,card->cmd_len,EXI_WRITE)==0) { + EXI_Deselect(chn); + EXI_Unlock(chn); + return CARD_ERROR_NOCARD; + } + + if(card->cmd[0]==0x52) { + if(EXI_ImmEx(chn,card->workarea+CARD_READSIZE,card->latency,EXI_WRITE)==0) { + EXI_Deselect(chn); + EXI_Unlock(chn); + return CARD_ERROR_NOCARD; + } + } + + if(card->cmd_mode==-1) { + EXI_Deselect(chn); + EXI_Unlock(chn); + return CARD_ERROR_READY; + } + + len = 128; + if(card->cmd[0]==0x52) len = CARD_READSIZE; + if(EXI_Dma(chn,card->cmd_usr_buf,len,card->cmd_mode,__card_txhandler)==0) { + EXI_Deselect(chn); + EXI_Unlock(chn); + return CARD_ERROR_NOCARD; + } + return CARD_ERROR_READY; +} + +static void __card_defaultapicallback(s32 chn,s32 result) +{ + return; +} + +static s32 __card_exihandler(s32 chn,s32 dev) +{ + u8 status; + s32 ret = CARD_ERROR_READY; + card_block *card = NULL; + cardcallback cb; + if(chn=EXI_CHANNEL_2) return 1; + card = &cardmap[chn]; + + SYS_CancelAlarm(card->timeout_svc); + if(card->attached) { + if(EXI_Lock(chn,EXI_DEVICE_0,NULL)==1) { + if((ret=__card_readstatus(chn,&status))>=0 + && (ret=__card_clearstatus(chn))>=0) { + if(status&0x18) ret = CARD_ERROR_IOERROR; + else ret = CARD_ERROR_READY; + + if(ret==CARD_ERROR_IOERROR) { + if((--card->cmd_retries)>0) { + ret = __retry(chn); + if(ret<0) goto exit; + return 1; + } + } + } + EXI_Unlock(chn); + } else ret = CARD_ERROR_FATAL_ERROR; +exit: + cb = card->card_exi_cb; + if(cb) { + card->card_exi_cb = NULL; + cb(chn,ret); + } + } + return 1; +} + +static s32 __card_exthandler(s32 chn,s32 dev) +{ + cardcallback cb; + card_block *card = NULL; + if(chn=EXI_CHANNEL_2) return 0; + card = &cardmap[chn]; + + if(card->attached) { + if(card->card_tx_cb) { + printf("error: card->card_tx_cb!=NULL\n"); + } + card->attached = 0; + EXI_RegisterEXICallback(chn,NULL); + SYS_CancelAlarm(card->timeout_svc); + + cb = card->card_exi_cb; + if(cb) { + card->card_exi_cb = NULL; + cb(chn,CARD_ERROR_NOCARD); + } + + cb = card->card_ext_cb; + if(cb) { + card->card_ext_cb = NULL; + cb(chn,CARD_ERROR_NOCARD); + } + + } + return 1; +} + +static void __write_callback(s32 chn,s32 result) +{ + s32 ret; + cardcallback cb = NULL; + card_file *file = NULL; + struct card_bat *fatblock = NULL; + struct card_dat *dirblock = NULL; + struct card_direntry *entry = NULL; + card_block *card = &cardmap[chn]; + ret = result; + if(ret>=0) { + file = card->curr_file; + if(file->len>=0) { + file->len = (card->sector_size-file->len); + if(file->len<=0) { + dirblock = __card_getdirblock(card); + entry = &dirblock->entries[file->filenum]; + entry->lastmodified = time(NULL); + cb = card->card_api_cb; + card->card_api_cb = NULL; + if((ret=__card_updatedir(chn,cb))>=0) return; + } else { + fatblock = __card_getbatblock(card); + file->offset += card->sector_size; + file->iblock = fatblock->fat[file->iblock-CARD_SYSAREA]; + if(file->iblockiblock>=card->blocks) { + ret = CARD_ERROR_BROKEN; + goto exit; + } + if((ret=__card_sectorerase(chn,(file->iblock*card->sector_size),__erase_callback))>=0) return; + } + } else + ret = CARD_ERROR_CANCELED; + } + +exit: + cb = card->card_api_cb; + card->card_api_cb = NULL; + __card_putcntrlblock(card,ret); + if(cb) cb(chn,ret); +} + +static void __erase_callback(s32 chn,s32 result) +{ + s32 ret; + cardcallback cb = NULL; + card_file *file = NULL; + card_block *card = &cardmap[chn]; + ret = result; + if(ret>=0) { + file = card->curr_file; + if((ret=__card_write(chn,(file->iblock*card->sector_size),card->sector_size,card->cmd_usr_buf,__write_callback))>=0) return; + } + + cb = card->card_api_cb; + card->card_api_cb = NULL; + __card_putcntrlblock(card,ret); + if(cb) cb(chn,ret); +} + +static void __read_callback(s32 chn,s32 result) +{ + s32 ret; + s32 len; + cardcallback cb = NULL; + card_file *file = NULL; + card_block *card = 0; + struct card_bat *fatblock = NULL; + if(chn=EXI_CHANNEL_2) return; + card = &cardmap[chn]; + + ret = result; + file = card->curr_file; + if(ret>=0) { + if(file->len>=0) { + file->len = file->len-(((file->offset+card->sector_size)&~(card->sector_size-1))-file->offset); + if(file->len>0) { + fatblock = __card_getbatblock(card); + file->offset += (((file->offset+card->sector_size)&~(card->sector_size-1))-file->offset); + file->iblock = fatblock->fat[file->iblock-CARD_SYSAREA]; + if(file->iblockiblock>=card->blocks) { + ret = CARD_ERROR_BROKEN; + goto exit; + } + len = file->lensector_size?card->sector_size:file->len; + if(__card_read(chn,(file->iblock*card->sector_size),len,card->cmd_usr_buf,__read_callback)>=0) return; + + } + } else + ret = CARD_ERROR_CANCELED; + } + +exit: + cb = card->card_api_cb; + card->card_api_cb = NULL; + __card_putcntrlblock(card,ret); + if(cb) cb(chn,ret); +} + +static void __delete_callback(s32 chn,s32 result) +{ + s32 ret; + cardcallback cb = NULL; + card_block *card = &cardmap[chn]; + cb = card->card_api_cb; + card->card_api_cb = NULL; + + ret = result; + if(ret>=0 && (ret=__card_freeblock(chn,card->curr_fileblock,cb))>=0) return; + + __card_putcntrlblock(card,ret); + if(cb) cb(chn,ret); +} + +static void __format_callback(s32 chn,s32 result) +{ + s32 ret; + cardcallback cb = NULL; + card_block *card = &cardmap[chn]; + + ret = result; + if(ret>=0) { + if((++card->format_step)format_step*card->sector_size),__format_callback))>=0) return; + goto exit; + } + if(card->format_step<10) { + if((ret=__card_write(chn,((card->format_step-CARD_SYSAREA)*card->sector_size),8192,card->workarea+((card->format_step-CARD_SYSAREA)<<13),__format_callback))>=0) return; + goto exit; + } + + card->curr_dir = card->workarea+CARD_SYSDIR; + memcpy(card->curr_dir,card->workarea+CARD_SYSDIR_BACK,8192); + + card->curr_fat = card->workarea+CARD_SYSBAT; + memcpy(card->curr_fat,card->workarea+CARD_SYSBAT_BACK,8192); + } +exit: + cb = card->card_api_cb; + card->card_api_cb = NULL; + __card_putcntrlblock(card,ret); + if(cb) cb(chn,ret); +} + +static void __blockwritecallback(s32 chn,s32 result) +{ + s32 ret = CARD_ERROR_READY; + cardcallback cb = NULL; + card_block *card = &cardmap[chn]; + ret = result; + if(ret>=0) { + card->transfer_cnt += 128; + card->cmd_sector_addr += 128; + card->cmd_usr_buf += 128; + if((--card->cmd_blck_cnt)>0) { + if((ret=__card_writepage(chn,__blockwritecallback))>=CARD_ERROR_READY) return; + } + } + + if(!card->card_api_cb) __card_putcntrlblock(card,ret); + + cb = card->card_xfer_cb; + if(cb) { + card->card_xfer_cb = NULL; + cb(chn,ret); + } +} + +static void __blockreadcallback(s32 chn,s32 result) +{ + s32 ret = CARD_ERROR_READY; + cardcallback cb = NULL; + card_block *card = &cardmap[chn]; + ret = result; + if(ret>=0) { + card->transfer_cnt += CARD_READSIZE; + card->cmd_sector_addr += CARD_READSIZE; + card->cmd_usr_buf += CARD_READSIZE; + if((--card->cmd_blck_cnt)>0) { + if((ret=__card_readsegment(chn,__blockreadcallback))>=CARD_ERROR_READY) return; + } + } + + if(!card->card_api_cb) __card_putcntrlblock(card,ret); + cb = card->card_xfer_cb; + if(cb) { + card->card_xfer_cb = NULL; + cb(chn,ret); + } +} + +static void __unlocked_callback(s32 chn,s32 result) +{ + s32 ret; + card_block *card; + cardcallback cb; + if(chn=EXI_CHANNEL_2) return; + card = &cardmap[chn]; + + ret = result; + if(ret>=0) { + card->card_unlock_cb = __unlocked_callback; + if(EXI_Lock(chn,EXI_DEVICE_0,__card_unlockedhandler)==1) { + card->card_unlock_cb = NULL; + ret = __retry(chn); + } else + ret = 0; + } + if(ret<0) { + if(card->cmd[0]==0xf3 || card->cmd[0]>=0xf5) return; + else if(card->cmd[0]==0x52) { + cb = card->card_tx_cb; + if(cb) { + card->card_tx_cb = NULL; + cb(chn,ret); + } + } else if(card->cmd[0]>=0xf1) { + cb = card->card_exi_cb; + if(cb) { + card->card_exi_cb = NULL; + cb(chn,ret); + } + } + } +} + +static s32 __card_start(s32 chn,cardcallback tx_cb,cardcallback exi_cb) +{ + u32 level; + card_block *card = NULL; + if(chn=EXI_CHANNEL_2) return CARD_ERROR_NOCARD; + card = &cardmap[chn]; + + _CPU_ISR_Disable(level); + if(tx_cb) card->card_tx_cb = tx_cb; + if(exi_cb) card->card_exi_cb = exi_cb; + + card->card_unlock_cb = __unlocked_callback; + if(EXI_Lock(chn,EXI_DEVICE_0,__card_unlockedhandler)==0) { + _CPU_ISR_Restore(level); + return CARD_ERROR_BUSY; + } + card->card_unlock_cb = NULL; + + if(EXI_Select(chn,EXI_DEVICE_0,EXI_SPEED16MHZ)==0) { + EXI_Unlock(chn); + _CPU_ISR_Restore(level); + return CARD_ERROR_NOCARD; + } + + __setuptimeout(card); + _CPU_ISR_Restore(level); + + return CARD_ERROR_READY; +} + +static s32 __card_writepage(s32 chn,cardcallback callback) +{ + s32 ret; + card_block *card = NULL; + if(chn=EXI_CHANNEL_2) return CARD_ERROR_NOCARD; + card = &cardmap[chn]; + + card->cmd[0] = 0xf2; + card->cmd[1] = (card->cmd_sector_addr>>17)&0x3f; + card->cmd[2] = (card->cmd_sector_addr>>9)&0xff; + card->cmd[3] = (card->cmd_sector_addr>>7)&3; + card->cmd[4] = card->cmd_sector_addr&0x7f; + card->cmd_len = 5; + card->cmd_mode = EXI_WRITE; + card->cmd_retries = 3; + + ret = __card_start(chn,NULL,callback); + if(ret<0) return ret; + + if(EXI_ImmEx(chn,card->cmd,card->cmd_len,EXI_WRITE)==1 + && EXI_Dma(chn,card->cmd_usr_buf,128,card->cmd_mode,__card_txhandler)==1) return CARD_ERROR_READY; + + card->card_exi_cb = NULL; + EXI_Deselect(chn); + EXI_Unlock(chn); + return CARD_ERROR_NOCARD; +} + +static s32 __card_readsegment(s32 chn,cardcallback callback) +{ + u32 err; + s32 ret; + card_block *card = NULL; + if(chn=EXI_CHANNEL_2) return CARD_ERROR_NOCARD; + card = &cardmap[chn]; + + card->cmd[0] = 0x52; + card->cmd[1] = (card->cmd_sector_addr&0xFE0000)>>17; + card->cmd[2] = (card->cmd_sector_addr&0x01FE00)>>9; + card->cmd[3] = (card->cmd_sector_addr&0x000180)>>7; + card->cmd[4] = (card->cmd_sector_addr&0x00007F); + card->cmd_len = 5; + card->cmd_mode = EXI_READ; + card->cmd_retries = 0; + + ret = __card_start(chn,callback,NULL); + if(ret<0) return ret; + + err = 0; + if(EXI_ImmEx(chn,card->cmd,card->cmd_len,EXI_WRITE)==0) err |= 0x01; + if(EXI_ImmEx(chn,card->workarea+CARD_READSIZE,card->latency,EXI_WRITE)==0) err |= 0x02; + if(EXI_Dma(chn,card->cmd_usr_buf,CARD_READSIZE,card->cmd_mode,__card_txhandler)==0) err |= 0x04; + + if(err) { + card->card_tx_cb = NULL; + EXI_Deselect(chn); + EXI_Unlock(chn); + return CARD_ERROR_NOCARD; + } + return CARD_ERROR_READY; +} + +static void __card_fatwritecallback(s32 chn,s32 result) +{ + s32 ret; + cardcallback cb = NULL; + struct card_bat *fat1,*fat2; + card_block *card = &cardmap[chn]; + ret = result; + if(ret>=0) { + fat1 = (card->workarea+0x6000); + fat2 = (card->workarea+0x8000); + if(card->curr_fat==fat1) { + card->curr_fat = fat2; + memcpy(fat2,fat1,8192); + } else { + card->curr_fat = fat1; + memcpy(fat1,fat2,8192); + } + } + if(!card->card_api_cb) __card_putcntrlblock(card,ret); + cb = card->card_erase_cb; + if(cb) { + card->card_erase_cb = NULL; + cb(chn,ret); + } +} + +static void __card_dirwritecallback(s32 chn,s32 result) +{ + s32 ret; + cardcallback cb = NULL; + struct card_dat *dir1,*dir2; + card_block *card = &cardmap[chn]; + ret = result; + if(ret>=0) { + dir1 = (card->workarea+0x2000); + dir2 = (card->workarea+0x4000); + if(card->curr_dir==dir1) { + card->curr_dir = dir2; + memcpy(dir2,dir1,8192); + } else { + card->curr_dir = dir1; + memcpy(dir1,dir2,8192); + } + } + if(!card->card_api_cb) __card_putcntrlblock(card,ret); + cb = card->card_erase_cb; + if(cb) { + card->card_erase_cb = NULL; + cb(chn,ret); + } +} + +static s32 __card_write(s32 chn,u32 address,u32 block_len,void *buffer,cardcallback callback) +{ + s32 ret; + card_block *card = NULL; + if(chn= EXI_CHANNEL_2) return CARD_ERROR_FATAL_ERROR; + card = &cardmap[chn]; + + if(!card->attached) return CARD_ERROR_NOCARD; + + card->cmd_blck_cnt = block_len>>7; + card->cmd_sector_addr = address; + card->cmd_usr_buf = buffer; + card->card_xfer_cb = callback; + ret = __card_writepage(chn,__blockwritecallback); + + return ret; +} + +static s32 __card_read(s32 chn,u32 address,u32 block_len,void *buffer,cardcallback callback) +{ + s32 ret; + card_block *card = NULL; + if(chn=EXI_CHANNEL_2) return CARD_ERROR_NOCARD; + card = &cardmap[chn]; + + card->cmd_sector_addr = address; + card->cmd_blck_cnt = block_len>>9; + card->cmd_usr_buf = buffer; + card->card_xfer_cb = callback; + ret = __card_readsegment(chn,__blockreadcallback); + + return ret; +} + +static s32 __card_formatregion(s32 chn,u32 encode,cardcallback callback) +{ + s32 ret; + u16 tmp; + u32 cnt; + u64 time; + u64 rnd_val; + void *workarea,*memblock; + cardcallback cb = NULL; + card_block *card = NULL; + struct card_header *header; + struct card_bat *fatblock = NULL; + struct card_dircntrl *dircntrl = NULL; + syssram *sram; + syssramex *sramex; + if(chn=EXI_CHANNEL_2) return CARD_ERROR_NOCARD; + + if((ret=__card_getcntrlblock(chn,&card))<0) return ret; + + header = workarea = card->workarea; + memset(header,0xff,8192); + + tmp = _viReg[55]; + header->encoding = encode; + + sram = __SYS_LockSram(); + header->serial[5] = sram->counter_bias; + header->serial[6] = sram->lang; + __SYS_UnlockSram(0); + + cnt = 0; + rnd_val = time = gettime(); + sramex = __SYS_LockSramEx(); + while(cnt<12) { + rnd_val = (((rnd_val*(u64)0x0000000041c64e6d)+(u64)0x0000000000003039)>>16); + ((u8*)header->serial)[cnt] = (sramex->flash_id[chn][cnt]+(u32)rnd_val); + + rnd_val = (((rnd_val*(u64)0x0000000041c64e6d)+(u64)0x0000000000003039)>>16); + rnd_val &= (u64)0x0000000000007fff; + + cnt++; + } + __SYS_UnlockSramEx(0); + + *(u64*)&(header->serial[3]) = time; + header->serial[7] = tmp; + header->device_id = 0; + header->size = card->card_size; + __card_checksum((u16*)header,508,&header->chksum1,&header->chksum2); + + cnt = 0; + while(cnt<2) { + memblock = workarea+((cnt+1)<<13); + dircntrl = memblock+8128; + memset(memblock,0xff,8192); + __card_checksum(memblock,8188,&dircntrl->chksum1,&dircntrl->chksum2); + cnt++; + } + + cnt = 0; + while(cnt<2) { + memblock = workarea+((cnt+3)<<13); + fatblock = memblock; + memset(memblock,0,8192); + fatblock->updated = cnt; + fatblock->freeblocks = card->blocks-CARD_SYSAREA; + fatblock->lastalloc = 4; + __card_checksum(memblock+4,8188,&fatblock->chksum1,&fatblock->chksum2); + cnt++; + } + + cb = callback; + if(!cb) cb = __card_defaultapicallback; + card->card_api_cb = cb; + + DCStoreRange(card->workarea,0xA000); + + card->format_step = 0; + if((ret=__card_sectorerase(chn,(card->sector_size*card->format_step),__format_callback))>=0) return ret; + + __card_putcntrlblock(card,ret); + return ret; +} + +static s32 __card_sectorerase(s32 chn,u32 sector,cardcallback callback) +{ + s32 ret; + card_block *card = NULL; + if(chn= EXI_CHANNEL_2) return CARD_ERROR_FATAL_ERROR; + card = &cardmap[chn]; + + if(sector%card->sector_size) return CARD_ERROR_FATAL_ERROR; + + card->cmd[0] = 0xf1; + card->cmd[1] = (sector>>17)&0x7f; + card->cmd[2] = (sector>>9)&0xff; + card->cmd_len = 3; + card->cmd_mode = -1; + card->cmd_retries = 3; + + ret = __card_start(chn,NULL,callback); + if(ret<0) return ret; + + if(EXI_ImmEx(chn,card->cmd,card->cmd_len,EXI_WRITE)==0) { + card->card_exi_cb = NULL; + return CARD_ERROR_NOCARD; + } + + EXI_Deselect(chn); + EXI_Unlock(chn); + return ret; +} + +static void __card_faterasecallback(s32 chn,s32 result) +{ + s32 ret; + cardcallback cb = NULL; + struct card_bat *fatblock = NULL; + card_block *card = &cardmap[chn]; + ret = result; + if(ret>=0) { + fatblock = __card_getbatblock(card); + if((ret=__card_write(chn,(((u32)fatblock-(u32)card->workarea)>>13)*card->sector_size,8192,fatblock,__card_fatwritecallback))>=0) return; + } + if(!card->card_api_cb) __card_putcntrlblock(card,ret); + + cb = card->card_erase_cb; + if(cb) { + card->card_erase_cb = NULL; + cb(chn,ret); + } +} + +static void __card_direrasecallback(s32 chn,s32 result) +{ + s32 ret; + cardcallback cb = NULL; + struct card_dat *dirblock = NULL; + card_block *card = &cardmap[chn]; + ret = result; + if(ret>=0) { + dirblock = __card_getdirblock(card); + if((ret=__card_write(chn,(((u32)dirblock-(u32)card->workarea)>>13)*card->sector_size,8192,dirblock,__card_dirwritecallback))>=0) return; + } + if(!card->card_api_cb) __card_putcntrlblock(card,ret); + + cb = card->card_erase_cb; + if(cb) { + card->card_erase_cb = NULL; + cb(chn,ret); + } +} + +static void __card_createfatcallback(s32 chn,s32 result) +{ + s32 ret; + cardcallback cb = NULL; + card_file *file = NULL; + struct card_direntry *entry = NULL; + struct card_dat *dirblock = NULL; + card_block *card = &cardmap[chn]; + cb = card->card_api_cb; + card->card_api_cb = NULL; + + dirblock = __card_getdirblock(card); + + file = card->curr_file; + entry = &dirblock->entries[file->filenum]; + + memset(entry->gamecode,0,4); + memset(entry->company,0,2); + if(card_gamecode[0]!=0xff) memcpy(entry->gamecode,card_gamecode,4); + if(card_gamecode[0]!=0xff) memcpy(entry->company,card_company,2); + entry->block = card->curr_fileblock; + entry->permission = CARD_ATTRIB_PUBLIC; + entry->pad_00 = 0xff; + entry->copytimes = 0; + entry->iconaddr = -1; + entry->iconfmt = 0; + entry->iconspeed = 0; + entry->pad_01 = 0xffff; + entry->iconspeed = (entry->iconspeed&~CARD_SPEED_MASK)|CARD_SPEED_FAST; + entry->lastmodified = time(NULL); + + file->offset = 0; + file->iblock = card->curr_fileblock; + + if((ret=__card_updatedir(chn,cb))<0) { + __card_putcntrlblock(card,ret); + if(cb) cb(chn,ret); + } +} + +static s32 __card_updatefat(s32 chn,struct card_bat *fatblock,cardcallback callback) +{ + card_block *card = NULL; + if(chn=EXI_CHANNEL_2) return CARD_ERROR_FATAL_ERROR; + card = &cardmap[chn]; + + if(!card->attached) return CARD_ERROR_NOCARD; + + ++fatblock->updated; + __card_checksum((u16*)(((u32)fatblock)+4),0x1ffc,&fatblock->chksum1,&fatblock->chksum2); + DCStoreRange(fatblock,8192); + card->card_erase_cb = callback; + + return __card_sectorerase(chn,(((u32)fatblock-(u32)card->workarea)>>13)*card->sector_size,__card_faterasecallback); +} + +static s32 __card_updatedir(s32 chn,cardcallback callback) +{ + card_block *card = NULL; + void *dirblock = NULL; + struct card_dircntrl *dircntrl = NULL; + if(chn=EXI_CHANNEL_2) return CARD_ERROR_FATAL_ERROR; + card = &cardmap[chn]; + + if(!card->attached) return CARD_ERROR_NOCARD; + + dirblock = __card_getdirblock(card); + dircntrl = dirblock+8128; + ++dircntrl->updated; + __card_checksum((u16*)dirblock,0x1ffc,&dircntrl->chksum1,&dircntrl->chksum2); + DCStoreRange(dirblock,0x2000); + card->card_erase_cb = callback; + + return __card_sectorerase(chn,(((u32)dirblock-(u32)card->workarea)>>13)*card->sector_size,__card_direrasecallback); +} + +static void __card_dounmount(s32 chn,s32 result) +{ + u32 level; + card_block *card; + + if(chn=EXI_CHANNEL_2) return; + card = &cardmap[chn]; + + _CPU_ISR_Disable(level); + if(card->attached) { + card->attached = 0; + card->mount_step = 0; + card->result = result; + EXI_RegisterEXICallback(chn,NULL); + EXI_Detach(chn); + SYS_CancelAlarm(card->timeout_svc); + } + _CPU_ISR_Restore(level); +} + +static s32 __card_domount(s32 chn) +{ + u8 status,kval; + s32 ret = CARD_ERROR_READY; + u32 sum; + u32 id,idx,cnt; + card_block *card; + syssramex *sramex; + + if(chn=EXI_CHANNEL_2) return CARD_ERROR_NOCARD; + card = &cardmap[chn]; + if(card->mount_step==0) { + ret = 0; + id = 0; + if(EXI_GetID(chn,EXI_DEVICE_0,&id)==0) ret = CARD_ERROR_NOCARD; + else if(!__card_iscard(id)) ret = CARD_ERROR_WRONGDEVICE; + + if(ret<0) goto exit; + card->cid = id; + card->card_size = (id&0xfc); + if(card->card_size) { + idx = _ROTL(id,23)&0x1c; + card->sector_size = card_sector_size[idx>>2]; + card->blocks = ((card->card_size<<20)>>3)/card->sector_size; + + if(card->blocks>0x0008) { + idx = _ROTL(id,26)&0x1c; + card->latency = card_latency[idx>>2]; + + if((ret=__card_clearstatus(chn))<0) goto exit; + if((ret=__card_readstatus(chn,&status))<0) goto exit; + + if(EXI_Probe(chn)==0) { + ret = CARD_ERROR_NOCARD; + goto exit; + } + if(!(status&CARD_STATUS_UNLOCKED)) { + if((ret=__dounlock(chn,card->key))<0) goto exit; + + cnt = 0; + sum = 0; + sramex = __SYS_LockSramEx(); + while(cnt<12) { + kval = ((u8*)card->key)[cnt]; + sramex->flash_id[chn][cnt] = kval; + sum += kval; + cnt++; + } + sum = (sum^-1)&0xff; + sramex->flashID_chksum[chn] = (sum<<8)|sum; + __SYS_UnlockSramEx(1); + return ret; + } + card->mount_step = 1; + + cnt = 0; + sum = 0; + sramex = __SYS_LockSramEx(); + while(cnt<12) { + sum += sramex->flash_id[chn][cnt]; + cnt++; + } + cnt = sramex->flashID_chksum[chn]; + __SYS_UnlockSramEx(0); + + sum = (sum^-1)&0xff; + sum |= (sum<<8); + if(cnt!=sum) { + ret = CARD_ERROR_IOERROR; + goto exit; + } + } + } + } + if(card->mount_step==1) { + card->mount_step = 2; + if((ret=__card_enableinterrupt(chn,1))<0) goto exit; + EXI_RegisterEXICallback(chn,__card_exihandler); + EXI_Unlock(chn); + + DCInvalidateRange(card->workarea,0xA000); + } + + if((ret=__card_read(chn,(card->sector_size*(card->mount_step-2)),card->sector_size,card->workarea+((card->mount_step-2)<<13),__card_mountcallback))<0) goto exit; + return ret; + +exit: + EXI_Unlock(chn); + __card_dounmount(chn,ret); + + return ret; +} + +static void __card_mountcallback(s32 chn,s32 result) +{ + s32 ret; + cardcallback cb; + card_block *card = &cardmap[chn]; + + ret = result; + if(ret==CARD_ERROR_NOCARD || ret==CARD_ERROR_IOERROR) { + __card_dounmount(chn,ret); + __card_putcntrlblock(card,ret); + }else if(ret==CARD_ERROR_UNLOCKED) { + if((ret=__card_domount(chn))>=0) return; + } else { + if((++card->mount_step)<7) { + if((ret=__card_domount(chn))>=0) return; + } else { + ret = __card_verify(card); + __card_putcntrlblock(card,ret); + } + } + + cb = card->card_api_cb; + card->card_api_cb = NULL; + if(cb) cb(chn,ret); +} + +static __inline__ void __card_srand(u32 val) +{ + crand_next = val; +} + +static __inline__ u32 __card_rand() +{ + crand_next = (crand_next*0x41C64E6D)+12345; + return _SHIFTR(crand_next,16,15); +} + +static u32 __card_initval() +{ + u32 ticks = gettick(); + + __card_srand(ticks); + return ((0x7FEC8000|__card_rand())&~0x00000fff); +} + +static u32 __card_dummylen() +{ + u32 ticks = gettick(); + u32 val = 0,cnt = 0,shift = 1; + + __card_srand(ticks); + val = (__card_rand()&0x1f)+1; + + do { + ticks = gettick(); + val = ticks<16) shift = 1; + __card_srand(val); + val = (__card_rand()&0x1f)+1; + cnt++; + }while(val<4 && cnt<10); + if(val<4) val = 4; + + return val; + +} + +static u32 exnor_1st(u32 a,u32 b) +{ + u32 c,d,e,f,r1,r2,r3,r4; + + c = 0; + while(c>23); + e = (a>>15); + f = (a>>7); + r1 = (a^f); + r2 = (e^r1); + r3 = ~(d^r2); //eqv(d,r2) + e = (a>>1); + r4 = ((r3<<30)&0x40000000); + a = (e|r4); + c++; + }; + return a; +} + +static u32 exnor(u32 a,u32 b) +{ + u32 c,d,e,f,r1,r2,r3,r4; + + c = 0; + while(c>30)&0x02); + a = (e|r4); + c++; + }; + return a; +} + +static u32 bitrev(u32 val) +{ + u32 cnt,val1,ret,shift,shift1; + + cnt = 0; + ret = 0; + shift = 1; + shift1 = 0; + while(cnt<32) { + if(cnt<=15) { + val1 = val&(1<>31; + ret |= val1; + } else { + val1 = 1; + val1 = val&(1<>= shift; + ret |= val1; + shift += 2; + } + cnt++; + } + return ret; +} + +static s32 __card_readarrayunlock(s32 chn,u32 address,void *buffer,u32 len,u32 flag) +{ + s32 ret; + u32 err; + u8 regbuf[5]; + card_block *card = &cardmap[chn]; + if(EXI_Select(chn,EXI_DEVICE_0,EXI_SPEED16MHZ)==0) return CARD_ERROR_NOCARD; + + address &= 0xFFFFF000; + memset(regbuf,0,5); + + regbuf[0] = 0x52; + if(!flag) { + regbuf[1] = ((address&0x60000000)>>29)&0xff; + regbuf[2] = ((address&0x1FE00000)>>21)&0xff; + regbuf[3] = ((address&0x00180000)>>19)&0xff; + regbuf[4] = ((address&0x0007F000)>>12)&0xff; + } else { + regbuf[1] = (address>>24)&0xff; + regbuf[2] = ((address&0x00FF0000)>>16)&0xff; + } + + err = 0; + if(EXI_ImmEx(chn,regbuf,5,EXI_WRITE)==0) err |= 0x01; + if(EXI_ImmEx(chn,card->workarea+CARD_READSIZE,card->latency,EXI_WRITE)==0) err |= 0x02; + if(EXI_ImmEx(chn,buffer,len,EXI_READ)==0) err |= 0x04; + if(EXI_Deselect(chn)==0) err |= 0x08; + + if(err) ret = CARD_ERROR_NOCARD; + else ret = CARD_ERROR_READY; + + return ret; +} + +static void __dsp_initcallback(dsptask_t *task) +{ + u32 chn; + card_block *card = NULL; + chn = 0; + while(chndsp_task==task) break; + chn++; + } + if(chn>=EXI_CHANNEL_2) return; + + DSP_SendMailTo(0xFF000000); + while(DSP_CheckMailTo()); + DSP_SendMailTo((u32)card->workarea); + while(DSP_CheckMailTo()); +} + +static u8 tmp_buffer[64] ATTRIBUTE_ALIGN(32); +static void __dsp_donecallback(dsptask_t *task) +{ + + u8 status; + s32 ret; + u32 chn,len,key; + u32 workarea,val; + card_block *card = NULL; + chn = 0; + while(chndsp_task==task) break; + chn++; + } + if(chn>=EXI_CHANNEL_2) return; + + workarea = (u32)card->workarea; + workarea = ((workarea+47)&~0x1f); + key = ((u32*)workarea)[8]; + + val = (key^card->cipher)&~0xffff; + len = __card_dummylen(); + if(__card_readarrayunlock(chn,val,tmp_buffer,len,1)<0) { + EXI_Unlock(chn); + __card_mountcallback(chn,CARD_ERROR_NOCARD); + return; + } + + val = exnor(card->cipher,((len+card->latency+4)<<3)+1); + { + u32 a,b,c,r1,r2,r3; + a = (val<<23); + b = (val<<15); + c = (val<<7); + r1 = (val^c); + r2 = (b^r1); + r3 = ~(a^r2); //eqv(a,r2) + r1 = (val|(r3>>31)); + card->cipher = r1; + } + + val = ((key<<16)^card->cipher)&~0xffff; + len = __card_dummylen(); + if(__card_readarrayunlock(chn,val,tmp_buffer,len,1)<0) { + EXI_Unlock(chn); + __card_mountcallback(chn,CARD_ERROR_NOCARD); + return; + } + + ret = __card_readstatus(chn,&status); + if(EXI_Probe(chn)==0) { + EXI_Unlock(chn); + __card_mountcallback(chn,CARD_ERROR_NOCARD); + return; + } + if(!ret && !(status&CARD_STATUS_UNLOCKED)) { + EXI_Unlock(chn); + ret = CARD_ERROR_IOERROR; + } + __card_mountcallback(chn,ret); +} + +static s32 __dounlock(s32 chn,u32 *key) +{ + u32 array_addr,len,val; + u32 a,b,c,d,e; + card_block *card = &cardmap[chn]; + u32 *workarea = card->workarea; + u32 *cipher1 = (u32*)(((u32)card->workarea+47)&~31); + u32 *cipher2 = &cipher1[8]; + array_addr = __card_initval(); + len = __card_dummylen(); + + if(__card_readarrayunlock(chn,array_addr,tmp_buffer,len,0)<0) return CARD_ERROR_NOCARD; + + + val = exnor_1st(array_addr,(len<<3)+1); + { + u32 a,b,c,r1,r2,r3; + a = (val>>23); + b = (val>>15); + c = (val>>7); + r1 = (val^c); + r2 = (b^r1); + r3 = ~(a^r2); //eqv(a,r2) + r1 = (val|(r3<<31)); + card->cipher = r1; + } + card->cipher = bitrev(card->cipher); + + array_addr = 0; + len = __card_dummylen(); + if(__card_readarrayunlock(chn,array_addr,tmp_buffer,len+20,1)<0) return CARD_ERROR_NOCARD; + + a = ((u32*)tmp_buffer)[0]; + b = ((u32*)tmp_buffer)[1]; + c = ((u32*)tmp_buffer)[2]; + d = ((u32*)tmp_buffer)[3]; + e = ((u32*)tmp_buffer)[4]; + + a = a^card->cipher; + val = exnor(card->cipher,32); + { + u32 a,b,c,r1,r2,r3; + a = (val<<23); + b = (val<<15); + c = (val<<7); + r1 = (val^c); + r2 = (b^r1); + r3 = ~(a^r2); //eqv(a,r2) + r1 = (val|(r3>>31)); + card->cipher = r1; + } + + b = b^card->cipher; + val = exnor(card->cipher,32); + { + u32 a,b,c,r1,r2,r3; + a = (val<<23); + b = (val<<15); + c = (val<<7); + r1 = (val^c); + r2 = (b^r1); + r3 = ~(a^r2); //eqv(a,r2) + r1 = (val|(r3>>31)); + card->cipher = r1; + } + + c = c^card->cipher; + val = exnor(card->cipher,32); + { + u32 a,b,c,r1,r2,r3; + a = (val<<23); + b = (val<<15); + c = (val<<7); + r1 = (val^c); + r2 = (b^r1); + r3 = ~(a^r2); //eqv(a,r2) + r1 = (val|(r3>>31)); + card->cipher = r1; + } + + d = d^card->cipher; + val = exnor(card->cipher,32); + { + u32 a,b,c,r1,r2,r3; + a = (val<<23); + b = (val<<15); + c = (val<<7); + r1 = (val^c); + r2 = (b^r1); + r3 = ~(a^r2); //eqv(a,r2) + r1 = (val|(r3>>31)); + card->cipher = r1; + } + + e = e^card->cipher; + val = exnor(card->cipher,(len<<3)); + { + u32 a,b,c,r1,r2,r3; + a = (val<<23); + b = (val<<15); + c = (val<<7); + r1 = (val^c); + r2 = (b^r1); + r3 = ~(a^r2); //eqv(a,r2) + r1 = (val|(r3>>31)); + card->cipher = r1; + } + + val = exnor(card->cipher,33); + { + u32 a,b,c,r1,r2,r3; + a = (val<<23); + b = (val<<15); + c = (val<<7); + r1 = (val^c); + r2 = (b^r1); + r3 = ~(a^r2); //eqv(a,r2) + r1 = (val|(r3>>31)); + card->cipher = r1; + } + + cipher1[0] = d; + cipher1[1] = e; + workarea[0] = (u32)cipher1; + workarea[1] = 8; +#ifdef HW_RVL + workarea[2] = 0x10000000; // use MEM2 base +#else + workarea[2] = 0; // use ARAM base +#endif + workarea[3] = (u32)cipher2; + DCFlushRange(cipher1,8); + DCInvalidateRange(cipher2,4); + DCFlushRange(workarea,16); + + card->dsp_task.prio = 255; + card->dsp_task.iram_maddr = (u16*)MEM_VIRTUAL_TO_PHYSICAL(_cardunlockdata); + card->dsp_task.iram_len = 352; + card->dsp_task.iram_addr = 0x0000; + card->dsp_task.init_vec = 16; + card->dsp_task.res_cb = NULL; + card->dsp_task.req_cb = NULL; + card->dsp_task.init_cb = __dsp_initcallback; + card->dsp_task.done_cb = __dsp_donecallback; + DSP_AddTask(&card->dsp_task); + + key[0] = a; + key[1] = b; + key[2] = c; + + return CARD_ERROR_READY; +} + +s32 CARD_Init(const char *gamecode,const char *company) +{ + u32 i,level; + + if(card_inited) return CARD_ERROR_READY; + if(gamecode && strlen(gamecode)<=4) memcpy(card_gamecode,gamecode,4); + if(company && strlen(company)<=2) memcpy(card_company,company,2); + + _CPU_ISR_Disable(level); + DSP_Init(); + + memset(cardmap,0,sizeof(card_block)*2); + for(i=0;i<2;i++) { + cardmap[i].result = CARD_ERROR_NOCARD; + LWP_InitQueue(&cardmap[i].wait_sync_queue); + SYS_CreateAlarm(&cardmap[i].timeout_svc); + } + SYS_RegisterResetFunc(&card_resetinfo); + card_inited = 1; + _CPU_ISR_Restore(level); + return CARD_ERROR_READY; +} + +s32 CARD_Probe(s32 chn) +{ + return EXI_Probe(chn); +} + +s32 CARD_ProbeEx(s32 chn,s32 *mem_size,s32 *sect_size) +{ + s32 ret; + u32 level,card_id; + card_block *card = NULL; + if(chn=EXI_CHANNEL_2) return CARD_ERROR_FATAL_ERROR; + card = &cardmap[chn]; + + _CPU_ISR_Disable(level); + ret = EXI_ProbeEx(chn); + if(ret<=0) { + if(!ret) ret = CARD_ERROR_BUSY; + else ret = CARD_ERROR_NOCARD; + _CPU_ISR_Restore(level); + return ret; + } + + if(card->attached) { + if(card->mount_step<1) { + _CPU_ISR_Restore(level); + return CARD_ERROR_BUSY; + } + if(mem_size) *mem_size = card->card_size; + if(sect_size) *sect_size = card->sector_size; + + _CPU_ISR_Restore(level); + return CARD_ERROR_READY; + } + + if(EXI_GetState(chn)&EXI_FLAG_ATTACH) ret = CARD_ERROR_WRONGDEVICE; + else { + ret = CARD_ERROR_BUSY; + if(EXI_GetID(chn,EXI_DEVICE_0,&card_id)) { + if(!__card_iscard(card_id)) ret = CARD_ERROR_WRONGDEVICE; + else { + if(mem_size) *mem_size = card_id&0xFC; + if(sect_size) { + u32 idx = _ROTL(card_id,23)&0x1c; + *sect_size = card_sector_size[idx>>2]; + } + ret = CARD_ERROR_READY; + } + } + } + + _CPU_ISR_Restore(level); + return ret; +} + +s32 CARD_MountAsync(s32 chn,void *workarea,cardcallback detach_cb,cardcallback attach_cb) +{ + s32 ret = CARD_ERROR_READY; + u32 level; + cardcallback attachcb = NULL; + card_block *card = NULL; + if(!workarea) return CARD_ERROR_NOCARD; + if(chn=EXI_CHANNEL_2) return CARD_ERROR_FATAL_ERROR; + card = &cardmap[chn]; + + _CPU_ISR_Disable(level); + if(card->result==CARD_ERROR_BUSY) { + _CPU_ISR_Restore(level); + return CARD_ERROR_BUSY; + } + if(card->attached || !(EXI_GetState(chn)&EXI_FLAG_ATTACH)) { + card->result = CARD_ERROR_BUSY; + card->workarea = workarea; + card->card_ext_cb = detach_cb; + + attachcb = attach_cb; + if(!attachcb) attachcb = __card_defaultapicallback; + card->card_api_cb = attachcb; + card->card_exi_cb = NULL; + + if(!card->attached) { + if(EXI_Attach(chn,__card_exthandler)==0) { + card->result = CARD_ERROR_NOCARD; + _CPU_ISR_Restore(level); + return CARD_ERROR_NOCARD; + } + } + card->mount_step = 0; + card->attached = 1; + EXI_RegisterEXICallback(chn,NULL); + SYS_CancelAlarm(card->timeout_svc); + card->curr_dir = NULL; + card->curr_fat = NULL; + _CPU_ISR_Restore(level); + + card->card_unlock_cb = __card_mountcallback; + if(EXI_Lock(chn,EXI_DEVICE_0,__card_unlockedhandler)==0) return 0; + + card->card_unlock_cb = NULL; + __card_domount(chn); + return 1; + } + + ret = CARD_ERROR_WRONGDEVICE; + _CPU_ISR_Restore(level); + return ret; +} + +s32 CARD_Mount(s32 chn,void *workarea,cardcallback detach_cb) +{ + s32 ret; + if((ret=CARD_MountAsync(chn,workarea,detach_cb,__card_synccallback))>=0) { + ret = __card_sync(chn); + } + return ret; +} + +s32 CARD_Unmount(s32 chn) +{ + s32 ret; + card_block *card = NULL; + + if(chn=EXI_CHANNEL_2) return CARD_ERROR_NOCARD; + + if((ret=__card_getcntrlblock(chn,&card))<0) ret = CARD_ERROR_NOCARD; + + __card_dounmount(chn,ret); + return CARD_ERROR_READY; +} + +s32 CARD_ReadAsync(card_file *file,void *buffer,u32 len,u32 offset,cardcallback callback) +{ + s32 ret; + cardcallback cb = NULL; + card_block *card = NULL; + + if(len<=0 || (len&0x1ff) || (offset>0 && (offset&0x1ff))) return CARD_ERROR_FATAL_ERROR; + if((ret=__card_seek(file,len,offset,&card))<0) return ret; + + DCInvalidateRange(buffer,len); + + cb = callback; + if(!cb) cb = __card_defaultapicallback; + card->card_api_cb = cb; + + if(len>=(card->sector_size-(file->offset&(card->sector_size-1)))) len = (card->sector_size-(file->offset&(card->sector_size-1))); + + if((ret=__card_read(file->chn,(file->iblock*card->sector_size),len,buffer,__read_callback))<0) { + __card_putcntrlblock(card,ret); + return ret; + } + return 0; +} + +s32 CARD_Read(card_file *file,void *buffer,u32 len,u32 offset) +{ + s32 ret; + + if((ret=CARD_ReadAsync(file,buffer,len,offset,__card_synccallback))>=0) { + ret = __card_sync(file->chn); + } + return ret; +} + +s32 CARD_WriteAsync(card_file *file,void *buffer,u32 len,u32 offset,cardcallback callback) +{ + s32 ret; + cardcallback cb = NULL; + card_block *card = NULL; + + if((ret=__card_seek(file,len,offset,&card))<0) return ret; + if(len<0 || (len&(card->sector_size-1)) || (offset>0 && offset&(card->sector_size-1))) { + __card_putcntrlblock(card,CARD_ERROR_FATAL_ERROR); + return CARD_ERROR_FATAL_ERROR; + } + + DCStoreRange(buffer,len); + cb = callback; + if(!cb) cb = __card_defaultapicallback; + card->card_api_cb = cb; + + card->cmd_usr_buf = buffer; + if((ret=__card_sectorerase(file->chn,(file->iblock*card->sector_size),__erase_callback))>=0) return ret; + __card_putcntrlblock(card,ret); + return ret; +} + +s32 CARD_Write(card_file *file,void *buffer,u32 len,u32 offset) +{ + s32 ret; + + if((ret=CARD_WriteAsync(file,buffer,len,offset,__card_synccallback))>=0) { + ret = __card_sync(file->chn); + } + return ret; +} + +s32 CARD_CreateAsync(s32 chn,const char *filename,u32 size,card_file *file,cardcallback callback) +{ + u32 i,len; + s32 ret,filenum; + cardcallback cb = NULL; + card_block *card = NULL; + struct card_bat *fatblock = NULL; + struct card_dat *dirblock = NULL; + struct card_direntry *entry = NULL; + len = strlen(filename); + if(len>CARD_FILENAMELEN) return CARD_ERROR_NAMETOOLONG; + + if((ret=__card_getcntrlblock(chn,&card))<0) return ret; + if(size<=0 || size%card->sector_size) return CARD_ERROR_FATAL_ERROR; + + dirblock = __card_getdirblock(card); + + filenum = -1; + entry = dirblock->entries; + for(i=0;ifreeblocks*card->sector_size)card_api_cb = cb; + + entry[filenum].length = size/card->sector_size; + memset(entry[filenum].filename,0,CARD_FILENAMELEN); + memcpy(entry[filenum].filename,filename,len+1); + + card->curr_file = file; + file->chn = chn; + file->filenum = filenum; + if((ret=__card_allocblock(chn,(size/card->sector_size),__card_createfatcallback))<0) { + __card_putcntrlblock(card,ret); + return ret; + } + + return 0; +} + +s32 CARD_Create(s32 chn,const char *filename,u32 size,card_file *file) +{ + s32 ret; + + if((ret=CARD_CreateAsync(chn,filename,size,file,__card_synccallback))>=0) { + ret = __card_sync(chn); + } + return ret; +} + +s32 CARD_CreateEntryAsync(s32 chn,card_dir *direntry,card_file *file,cardcallback callback) +{ + u32 i,len; + s32 ret,filenum; + cardcallback cb = NULL; + card_block *card = NULL; + struct card_bat *fatblock = NULL; + struct card_dat *dirblock = NULL; + struct card_direntry *entry = NULL; + len = strlen((const char*)direntry->filename); + if(len>CARD_FILENAMELEN) return CARD_ERROR_NAMETOOLONG; + + if((ret=__card_getcntrlblock(chn,&card))<0) return ret; + if(direntry->filelen<=0 || direntry->filelen%card->sector_size) return CARD_ERROR_FATAL_ERROR; + + dirblock = __card_getdirblock(card); + + filenum = -1; + entry = dirblock->entries; + for(i=0;ifilename,len)==0) { + if((entry->gamecode[0]==0xff || entry->company[0]==0xff) + || ((entry->gamecode[0]!=0xff && memcmp(entry[i].gamecode,entry->gamecode,4)==0) + && (entry->company[0]!=0xff && memcmp(entry[i].company,entry->company,2)==0))) { + __card_putcntrlblock(card,CARD_ERROR_EXIST); + return CARD_ERROR_EXIST; + } + } + } + if(filenum==-1) { + __card_putcntrlblock(card,CARD_ERROR_NOENT); + return CARD_ERROR_NOENT; + } + + fatblock = __card_getbatblock(card); + if((fatblock->freeblocks*card->sector_size)filelen) { + __card_putcntrlblock(card,CARD_ERROR_INSSPACE); + return CARD_ERROR_INSSPACE; + } + + cb = callback; + if(!cb) cb = __card_defaultapicallback; + card->card_api_cb = cb; + + entry[filenum].length = direntry->filelen/card->sector_size; + memset(entry[filenum].filename,0,CARD_FILENAMELEN); + memcpy(entry[filenum].filename,direntry->filename,len+1); + + card->curr_file = file; + file->chn = chn; + file->filenum = filenum; + if((ret=__card_allocblock(chn,(direntry->filelen/card->sector_size),__card_createfatcallback))<0) { + __card_putcntrlblock(card,ret); + return ret; + } + + return 0; +} + +s32 CARD_CreateEntry(s32 chn,card_dir *direntry,card_file *file) +{ + s32 ret; + + if((ret=CARD_CreateEntryAsync(chn,direntry,file,__card_synccallback))>=0) { + ret = __card_sync(chn); + } + return ret; +} + +s32 CARD_Open(s32 chn,const char *filename,card_file *file) +{ + s32 ret,fileno; + struct card_dat *dirblock = NULL; + card_block *card = NULL; + + if(chn=EXI_CHANNEL_2) return CARD_ERROR_NOCARD; + + file->filenum = -1; + if((ret=__card_getcntrlblock(chn,&card))<0) return ret; + if((ret=__card_getfilenum(card,filename,(const char*)card_gamecode,(const char*)card_company,&fileno))<0) { + __card_putcntrlblock(card,ret); + return ret; + } + dirblock = __card_getdirblock(card); + if(dirblock->entries[fileno].block<5 || dirblock->entries[fileno].block>=card->blocks) { + __card_putcntrlblock(card,CARD_ERROR_BROKEN); + return CARD_ERROR_BROKEN; + } + file->chn = chn; + file->filenum = fileno; + file->offset = 0; + file->len = dirblock->entries[fileno].length*card->sector_size; + file->iblock = dirblock->entries[fileno].block; + + __card_putcntrlblock(card,CARD_ERROR_READY); + return CARD_ERROR_READY; +} + +s32 CARD_OpenEntry(s32 chn,card_dir *entry,card_file *file) +{ + s32 ret,fileno; + struct card_dat *dirblock = NULL; + card_block *card = NULL; + + if(chn=EXI_CHANNEL_2) return CARD_ERROR_NOCARD; + + file->filenum = -1; + if((ret=__card_getcntrlblock(chn,&card))<0) return ret; + if((ret=__card_getfilenum(card,(const char*)entry->filename,(const char*)entry->gamecode,(const char*)entry->company,&fileno))<0) { + __card_putcntrlblock(card,ret); + return ret; + } + + dirblock = __card_getdirblock(card); + if(dirblock->entries[fileno].block<5 || dirblock->entries[fileno].block>=card->blocks) { + __card_putcntrlblock(card,CARD_ERROR_BROKEN); + return CARD_ERROR_BROKEN; + } + + file->chn = chn; + file->filenum = entry->fileno; + file->offset = 0; + file->len = dirblock->entries[fileno].length*card->sector_size; + file->iblock = dirblock->entries[fileno].block; + + __card_putcntrlblock(card,CARD_ERROR_READY); + return CARD_ERROR_READY; +} + +s32 CARD_Close(card_file *file) +{ + s32 ret; + card_block *card = NULL; + + if(file->chnchn>=EXI_CHANNEL_2) return CARD_ERROR_NOCARD; + if(file->filenum<0 || file->filenum>=CARD_MAXFILES) return CARD_ERROR_NOFILE; + if((ret=__card_getcntrlblock(file->chn,&card))<0) return ret; + + file->chn = -1; + __card_putcntrlblock(card,CARD_ERROR_READY); + return CARD_ERROR_READY; +} + +s32 CARD_DeleteAsync(s32 chn,const char *filename,cardcallback callback) +{ + s32 ret,fileno; + cardcallback cb = NULL; + card_block *card = NULL; + struct card_dat *dirblock = NULL; + struct card_direntry *entry = NULL; + if((ret=__card_getcntrlblock(chn,&card))<0) return ret; + if((ret=__card_getfilenum(card,filename,(const char*)card_gamecode,(const char*)card_company,&fileno))<0) { + __card_putcntrlblock(card,ret); + return ret; + } + + dirblock = __card_getdirblock(card); + entry = &dirblock->entries[fileno]; + + card->curr_fileblock = entry->block; + memset(entry,-1,sizeof(struct card_direntry)); + + cb = callback; + if(!cb) cb = __card_defaultapicallback; + card->card_api_cb = cb; + + if((ret=__card_updatedir(chn,__delete_callback))>=0) return ret; + + __card_putcntrlblock(card,ret); + return ret; +} + +s32 CARD_Delete(s32 chn,const char *filename) +{ + s32 ret; + if((ret=CARD_DeleteAsync(chn,filename,__card_synccallback))>=0) { + ret = __card_sync(chn); + } + return ret; +} + +s32 CARD_DeleteEntryAsync(s32 chn,card_dir *dir_entry,cardcallback callback) +{ + s32 ret; + cardcallback cb = NULL; + card_block *card = NULL; + struct card_dat *dirblock = NULL; + struct card_direntry *entry = NULL; + if(chn=EXI_CHANNEL_2) return CARD_ERROR_NOCARD; + if((ret=__card_getcntrlblock(chn,&card))<0) return ret; + + dirblock = __card_getdirblock(card); + entry = &dirblock->entries[dir_entry->fileno]; + + card->curr_fileblock = entry->block; + memset(entry,-1,sizeof(struct card_direntry)); + + cb = callback; + if(!cb) cb = __card_defaultapicallback; + card->card_api_cb = cb; + + if((ret=__card_updatedir(chn,__delete_callback))>=0) return ret; + + __card_putcntrlblock(card,ret); + return ret; +} + +s32 CARD_DeleteEntry(s32 chn,card_dir *dir_entry) +{ + s32 ret; + if((ret=CARD_DeleteEntryAsync(chn,dir_entry,__card_synccallback))>=0) { + ret = __card_sync(chn); + } + return ret; +} + +s32 CARD_FormatAsync(s32 chn,cardcallback callback) +{ + u32 enc; + + enc = SYS_GetFontEncoding(); + return __card_formatregion(chn,enc,callback); +} + +s32 CARD_Format(s32 chn) +{ + s32 ret; + u32 enc; + + enc = SYS_GetFontEncoding(); + if((ret=__card_formatregion(chn,enc,__card_synccallback))>=0) { + ret = __card_sync(chn); + } + return ret; +} + +s32 CARD_GetErrorCode(s32 chn) +{ + card_block *card = NULL; + + if(chn=EXI_CHANNEL_2) return CARD_ERROR_NOCARD; + card = &cardmap[chn]; + return card->result; +} + +s32 __card_findnext(card_dir *dir) +{ + s32 ret; + struct card_dat *dirblock = NULL; + struct card_direntry *entries = NULL; + card_block *card = NULL; + + if(dir->chnchn>=EXI_CHANNEL_2) return CARD_ERROR_NOCARD; + if(dir->fileno>=CARD_MAXFILES) return CARD_ERROR_NOFILE; + if((ret=__card_getcntrlblock(dir->chn,&card))<0) return ret; + + if(!card->attached) return CARD_ERROR_NOCARD; + dirblock = __card_getdirblock(card); + + entries = dirblock->entries; + do { + //printf("%s\n", entries[dir->fileno].filename); + if(entries[dir->fileno].gamecode[0]!=0xff) { + if ((dir->showall || memcmp(entries[dir->fileno].gamecode,card_gamecode,4)==0) + && (dir->showall || memcmp(entries[dir->fileno].company,card_company,2)==0)) { + dir->filelen = entries[dir->fileno].length*card->sector_size; + memcpy(dir->filename, entries[dir->fileno].filename, CARD_FILENAMELEN); + memcpy(dir->gamecode, entries[dir->fileno].gamecode, 4); + memcpy(dir->company, entries[dir->fileno].company, 2); + + __card_putcntrlblock(card,CARD_ERROR_READY); + return CARD_ERROR_READY; + } + } + dir->fileno++; + } while (dir->fileno < CARD_MAXFILES); + __card_putcntrlblock(card,CARD_ERROR_NOFILE); + return CARD_ERROR_NOFILE; +} + +s32 CARD_FindFirst(s32 chn, card_dir *dir, bool showall) +{ + // initialise structure + dir->chn = chn; + dir->fileno = 0; + dir->filelen = 0; + dir->filename[0] = 0; + dir->gamecode[0] = 0; + dir->company[0] = 0; + dir->showall = showall; + return __card_findnext(dir); +} + +s32 CARD_FindNext(card_dir *dir) +{ + dir->fileno++; + + return __card_findnext(dir); +} + +s32 CARD_GetDirectory(s32 chn,card_dir *dir_entries,s32 *count,bool showall) +{ + s32 i,cnt; + s32 ret = CARD_ERROR_READY; + struct card_dat *dirblock = NULL; + struct card_direntry *entries = NULL; + card_block *card = NULL; + + if(chn=EXI_CHANNEL_2) return CARD_ERROR_NOCARD; + if((ret=__card_getcntrlblock(chn,&card))<0) return ret; + + if(!card->attached) return CARD_ERROR_NOCARD; + dirblock = __card_getdirblock(card); + + entries = dirblock->entries; + for(i=0,cnt=0;isector_size; + memcpy(dir_entries[cnt].gamecode,entries[i].gamecode,4); + memcpy(dir_entries[cnt].company,entries[i].company,2); + memcpy(dir_entries[cnt].filename,entries[i].filename,CARD_FILENAMELEN); + cnt++; + } + } + } + if(count) *count = cnt; + if(cnt==0) ret = CARD_ERROR_NOFILE; + __card_putcntrlblock(card,ret); + return ret; +} + +s32 CARD_GetSectorSize(s32 chn,u32 *sector_size) +{ + s32 ret; + card_block *card = NULL; + + if(chn=EXI_CHANNEL_2) return CARD_ERROR_NOCARD; + if((ret=__card_getcntrlblock(chn,&card))<0) return ret; + + *sector_size = card->sector_size; + ret = __card_putcntrlblock(card,CARD_ERROR_READY); + + return ret; +} + +s32 CARD_GetBlockCount(s32 chn,u32 *block_count) +{ + s32 ret; + card_block *card = NULL; + + if(chn=EXI_CHANNEL_2) return CARD_ERROR_NOCARD; + if((ret=__card_getcntrlblock(chn,&card))<0) return ret; + + *block_count = card->blocks; + ret = __card_putcntrlblock(card,CARD_ERROR_READY); + + return ret; +} + +s32 CARD_GetStatus(s32 chn,s32 fileno,card_stat *stats) +{ + s32 ret; + card_block *card = NULL; + struct card_dat *dirblock = NULL; + struct card_direntry *entry = NULL; + + if(chn=EXI_CHANNEL_2) return CARD_ERROR_NOCARD; + if(fileno<0 || fileno>=CARD_MAXFILES) return CARD_ERROR_FATAL_ERROR; + + if((ret=__card_getcntrlblock(chn,&card))<0) return ret; + + dirblock = __card_getdirblock(card); + if(dirblock) { + entry = &dirblock->entries[fileno]; + memcpy(stats->gamecode,entry->gamecode,4); + memcpy(stats->company,entry->company,2); + memcpy(stats->filename,entry->filename,CARD_FILENAMELEN); + stats->len = entry->length*card->sector_size; + stats->time = entry->lastmodified; + stats->banner_fmt = entry->bannerfmt; + stats->icon_addr = entry->iconaddr; + stats->icon_fmt = entry->iconfmt; + stats->icon_speed = entry->iconspeed; + stats->comment_addr = entry->commentaddr; + __card_updateiconoffsets(entry,stats); + } + + return __card_putcntrlblock(card,CARD_ERROR_READY); +} + +s32 CARD_SetStatusAsync(s32 chn,s32 fileno,card_stat *stats,cardcallback callback) +{ + s32 ret; + card_block *card = NULL; + struct card_dat *dirblock = NULL; + struct card_direntry *entry = NULL; + + if(chn=EXI_CHANNEL_2) return CARD_ERROR_NOCARD; + if(fileno<0 || fileno>=CARD_MAXFILES) return CARD_ERROR_FATAL_ERROR; + if(stats->icon_addr!=-1 && stats->icon_addr>CARD_READSIZE) return CARD_ERROR_FATAL_ERROR; + if(stats->comment_addr!=-1 && stats->comment_addr>8128) return CARD_ERROR_FATAL_ERROR; + if((ret=__card_getcntrlblock(chn,&card))<0) return ret; + + ret = CARD_ERROR_BROKEN; + dirblock = __card_getdirblock(card); + if(dirblock) { + entry = &dirblock->entries[fileno]; + entry->bannerfmt = stats->banner_fmt; + entry->iconaddr = stats->icon_addr; + entry->iconfmt = stats->icon_fmt; + entry->iconspeed = stats->icon_speed; + entry->commentaddr = stats->comment_addr; + __card_updateiconoffsets(entry,stats); + + if(entry->iconaddr==-1) entry->iconfmt = ((entry->iconfmt&~CARD_ICON_MASK)|CARD_ICON_CI); + + entry->lastmodified = time(NULL); + if((ret=__card_updatedir(chn,callback))>=0) return ret; + } + + return __card_putcntrlblock(card,ret); +} + +s32 CARD_SetStatus(s32 chn,s32 fileno,card_stat *stats) +{ + s32 ret; + + if((ret=CARD_SetStatusAsync(chn,fileno,stats,__card_synccallback))>=0) { + ret = __card_sync(chn); + } + return ret; +} + +s32 CARD_GetAttributes(s32 chn,s32 fileno,u8 *attr) +{ + s32 ret; + struct card_direntry entry; + + if((ret=__card_getstatusex(chn,fileno,&entry))==CARD_ERROR_READY) { + *attr = entry.permission; + } + return ret; +} + +s32 CARD_SetAttributesAsync(s32 chn,s32 fileno,u8 attr,cardcallback callback) +{ + s32 ret; + struct card_direntry entry; + + if((ret=__card_getstatusex(chn,fileno,&entry))>=0) { + entry.permission = attr; + ret = __card_setstatusexasync(chn,fileno,&entry,callback); + } + return ret; +} + +s32 CARD_SetAttributes(s32 chn,s32 fileno,u8 attr) +{ + s32 ret; + + if((ret=CARD_SetAttributesAsync(chn,fileno,attr,__card_synccallback))>=0) { + ret = __card_sync(chn); + } + return ret; +} + +s32 CARD_SetCompany(const char *company) +{ + u32 level,i; + + _CPU_ISR_Disable(level); + for(i=0;i<2;i++) card_company[i] = 0xff; + if(company && strlen(company)<=2) memcpy(card_company,company,2) ; + _CPU_ISR_Restore(level); + + return CARD_ERROR_READY; +} + +s32 CARD_SetGamecode(const char *gamecode) +{ + u32 level,i; + + _CPU_ISR_Disable(level); + for(i=0;i<4;i++) card_gamecode[i] = 0xff; + if(gamecode && strlen(gamecode)<=4) memcpy(card_gamecode,gamecode,4) ; + _CPU_ISR_Restore(level); + + return CARD_ERROR_READY; +} diff --git a/wii/libogc/libogc/cond.c b/wii/libogc/libogc/cond.c new file mode 100644 index 0000000000..9b893a83f8 --- /dev/null +++ b/wii/libogc/libogc/cond.c @@ -0,0 +1,199 @@ +/*------------------------------------------------------------- + +cond.c -- Thread subsystem V + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + + +#include +#include +#include "asm.h" +#include "mutex.h" +#include "lwp_threadq.h" +#include "lwp_objmgr.h" +#include "lwp_config.h" +#include "cond.h" + +#define LWP_OBJTYPE_COND 5 + +#define LWP_CHECK_COND(hndl) \ +{ \ + if(((hndl)==LWP_COND_NULL) || (LWP_OBJTYPE(hndl)!=LWP_OBJTYPE_COND)) \ + return NULL; \ +} + +typedef struct _cond_st { + lwp_obj object; + mutex_t lock; + lwp_thrqueue wait_queue; +} cond_st; + +lwp_objinfo _lwp_cond_objects; + +extern int clock_gettime(struct timespec *tp); +extern void timespec_subtract(const struct timespec *tp_start,const struct timespec *tp_end,struct timespec *result); + +void __lwp_cond_init() +{ + __lwp_objmgr_initinfo(&_lwp_cond_objects,LWP_MAX_CONDVARS,sizeof(cond_st)); +} + +static __inline__ cond_st* __lwp_cond_open(cond_t cond) +{ + LWP_CHECK_COND(cond); + return (cond_st*)__lwp_objmgr_get(&_lwp_cond_objects,LWP_OBJMASKID(cond)); +} + +static __inline__ void __lwp_cond_free(cond_st *cond) +{ + __lwp_objmgr_close(&_lwp_cond_objects,&cond->object); + __lwp_objmgr_free(&_lwp_cond_objects,&cond->object); +} + +static cond_st* __lwp_cond_allocate() +{ + cond_st *cond; + + __lwp_thread_dispatchdisable(); + cond = (cond_st*)__lwp_objmgr_allocate(&_lwp_cond_objects); + if(cond) { + __lwp_objmgr_open(&_lwp_cond_objects,&cond->object); + return cond; + } + __lwp_thread_dispatchenable(); + return NULL; +} + +static s32 __lwp_cond_waitsupp(cond_t cond,mutex_t mutex,u64 timeout,u8 timedout) +{ + u32 status,mstatus,level; + cond_st *thecond = __lwp_cond_open(cond); + + if(!thecond) return -1; + + if(thecond->lock!=LWP_MUTEX_NULL && thecond->lock!=mutex) { + __lwp_thread_dispatchenable(); + return EINVAL; + } + + + LWP_MutexUnlock(mutex); + if(!timedout) { + thecond->lock = mutex; + _CPU_ISR_Disable(level); + __lwp_threadqueue_csenter(&thecond->wait_queue); + _thr_executing->wait.ret_code = 0; + _thr_executing->wait.queue = &thecond->wait_queue; + _thr_executing->wait.id = cond; + _CPU_ISR_Restore(level); + __lwp_threadqueue_enqueue(&thecond->wait_queue,timeout); + __lwp_thread_dispatchenable(); + + status = _thr_executing->wait.ret_code; + if(status && status!=ETIMEDOUT) + return status; + } else { + __lwp_thread_dispatchenable(); + status = ETIMEDOUT; + } + + mstatus = LWP_MutexLock(mutex); + if(mstatus) + return EINVAL; + + return status; +} + +static s32 __lwp_cond_signalsupp(cond_t cond,u8 isbroadcast) +{ + lwp_cntrl *thethread; + cond_st *thecond = __lwp_cond_open(cond); + if(!thecond) return -1; + + do { + thethread = __lwp_threadqueue_dequeue(&thecond->wait_queue); + if(!thethread) thecond->lock = LWP_MUTEX_NULL; + } while(isbroadcast && thethread); + __lwp_thread_dispatchenable(); + return 0; +} + +s32 LWP_CondInit(cond_t *cond) +{ + cond_st *ret; + + if(!cond) return -1; + + ret = __lwp_cond_allocate(); + if(!ret) return ENOMEM; + + ret->lock = LWP_MUTEX_NULL; + __lwp_threadqueue_init(&ret->wait_queue,LWP_THREADQ_MODEFIFO,LWP_STATES_WAITING_FOR_CONDVAR,ETIMEDOUT); + + *cond = (cond_t)(LWP_OBJMASKTYPE(LWP_OBJTYPE_COND)|LWP_OBJMASKID(ret->object.id)); + __lwp_thread_dispatchenable(); + + return 0; +} + +s32 LWP_CondWait(cond_t cond,mutex_t mutex) +{ + return __lwp_cond_waitsupp(cond,mutex,LWP_THREADQ_NOTIMEOUT,FALSE); +} + +s32 LWP_CondSignal(cond_t cond) +{ + return __lwp_cond_signalsupp(cond,FALSE); +} + +s32 LWP_CondBroadcast(cond_t cond) +{ + return __lwp_cond_signalsupp(cond,TRUE); +} + +s32 LWP_CondTimedWait(cond_t cond,mutex_t mutex,const struct timespec *abstime) +{ + u64 timeout = LWP_THREADQ_NOTIMEOUT; + bool timedout = FALSE; + + if(abstime) timeout = __lwp_wd_calc_ticks(abstime); + return __lwp_cond_waitsupp(cond,mutex,timeout,timedout); +} + +s32 LWP_CondDestroy(cond_t cond) +{ + cond_st *ptr = __lwp_cond_open(cond); + if(!ptr) return -1; + + if(__lwp_threadqueue_first(&ptr->wait_queue)) { + __lwp_thread_dispatchenable(); + return EBUSY; + } + __lwp_thread_dispatchenable(); + + __lwp_cond_free(ptr); + return 0; +} diff --git a/wii/libogc/libogc/conf.c b/wii/libogc/libogc/conf.c new file mode 100644 index 0000000000..2492e45c8a --- /dev/null +++ b/wii/libogc/libogc/conf.c @@ -0,0 +1,479 @@ +/*------------------------------------------------------------- + +conf.c -- SYSCONF support + +Copyright (C) 2008 +Hector Martin (marcan) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + +#if defined(HW_RVL) + +#include +#include +#include +#include "ipc.h" +#include "asm.h" +#include "processor.h" +#include "conf.h" + + +static int __conf_inited = 0; +static u8 __conf_buffer[0x4000] ATTRIBUTE_ALIGN(32); +static char __conf_txt_buffer[0x101] ATTRIBUTE_ALIGN(32); + +static const char __conf_file[] ATTRIBUTE_ALIGN(32) = "/shared2/sys/SYSCONF"; +static const char __conf_txt_file[] ATTRIBUTE_ALIGN(32) = "/title/00000001/00000002/data/setting.txt"; + +void __CONF_DecryptTextBuffer(void) +{ + u32 key = 0x73B5DBFA; + int i; + + for(i=0; i<0x100; i++) { + __conf_txt_buffer[i] ^= key & 0xff; + key = (key<<1) | (key>>31); + } +} + +s32 CONF_Init(void) +{ + int fd; + int ret; + + if(__conf_inited) return 0; + + fd = IOS_Open(__conf_file,1); + if(fd < 0) return fd; + + memset(__conf_buffer,0,0x4000); + memset(__conf_txt_buffer,0,0x101); + + ret = IOS_Read(fd, __conf_buffer, 0x4000); + IOS_Close(fd); + if(ret != 0x4000) return CONF_EBADFILE; + + fd = IOS_Open(__conf_txt_file,1); + if(fd < 0) return fd; + + ret = IOS_Read(fd, __conf_txt_buffer, 0x100); + IOS_Close(fd); + if(ret != 0x100) return CONF_EBADFILE; + + if(memcmp(__conf_buffer, "SCv0", 4)) return CONF_EBADFILE; + + __CONF_DecryptTextBuffer(); + + __conf_inited = 1; + return 0; +} + +int __CONF_GetTxt(const char *name, char *buf, int length) +{ + char *line = __conf_txt_buffer; + char *delim, *end; + int slen; + int nlen = strlen(name); + + if(!__conf_inited) return CONF_ENOTINIT; + + while(line < (__conf_txt_buffer+0x100) ) { + delim = strchr(line, '='); + if(delim && ((delim - line) == nlen) && !memcmp(name, line, nlen)) { + delim++; + end = strchr(line, '\r'); + if (!end) end = strchr(line, '\n'); + if(end) { + slen = end - delim; + if(slen < length) { + memcpy(buf, delim, slen); + buf[slen] = 0; + return slen; + } else { + return CONF_ETOOBIG; + } + } + } + + // skip to line end + while(line < (__conf_txt_buffer+0x100) && *line++ != '\n'); + } + return CONF_ENOENT; +} + +u8 *__CONF_Find(const char *name) +{ + u16 count; + u16 *offset; + int nlen = strlen(name); + count = *((u16*)(&__conf_buffer[4])); + offset = (u16*)&__conf_buffer[6]; + + while(count--) { + if((nlen == ((__conf_buffer[*offset]&0x0F)+1)) && !memcmp(name, &__conf_buffer[*offset+1], nlen)) + return &__conf_buffer[*offset]; + offset++; + } + return NULL; +} + +s32 CONF_GetLength(const char *name) +{ + u8 *entry; + + if(!__conf_inited) return CONF_ENOTINIT; + + entry = __CONF_Find(name); + if(!entry) return CONF_ENOENT; + + switch(*entry>>5) { + case 1: + return *((u16*)&entry[strlen(name)+1]) + 1; + case 2: + return entry[strlen(name)+1] + 1; + case 3: + return 1; + case 4: + return 2; + case 5: + return 4; + case 7: + return 1; + default: + return CONF_ENOTIMPL; + } +} + +s32 CONF_GetType(const char *name) +{ + u8 *entry; + if(!__conf_inited) return CONF_ENOTINIT; + + entry = __CONF_Find(name); + if(!entry) return CONF_ENOENT; + + return *entry>>5; +} + +s32 CONF_Get(const char *name, void *buffer, u32 length) +{ + u8 *entry; + s32 len; + if(!__conf_inited) return CONF_ENOTINIT; + + entry = __CONF_Find(name); + if(!entry) return CONF_ENOENT; + + len = CONF_GetLength(name); + if(len<0) return len; + if(len>length) return CONF_ETOOBIG; + + switch(*entry>>5) { + case CONF_BIGARRAY: + memcpy(buffer, &entry[strlen(name)+3], len); + break; + case CONF_SMALLARRAY: + memcpy(buffer, &entry[strlen(name)+2], len); + break; + case CONF_BYTE: + case CONF_SHORT: + case CONF_LONG: + case CONF_BOOL: + memset(buffer, 0, length); + memcpy(buffer, &entry[strlen(name)+1], len); + break; + default: + return CONF_ENOTIMPL; + } + return len; +} + +s32 CONF_GetShutdownMode(void) +{ + u8 idleconf[2] = {0,0}; + int res; + + res = CONF_Get("IPL.IDL", idleconf, 2); + if(res<0) return res; + if(res!=2) return CONF_EBADVALUE; + return idleconf[0]; +} + +s32 CONF_GetIdleLedMode(void) +{ + int res; + u8 idleconf[2] = {0,0}; + res = CONF_Get("IPL.IDL", idleconf, 2); + if(res<0) return res; + if(res!=2) return CONF_EBADVALUE; + return idleconf[1]; +} + +s32 CONF_GetProgressiveScan(void) +{ + int res; + u8 val = 0; + res = CONF_Get("IPL.PGS", &val, 1); + if(res<0) return res; + if(res!=1) return CONF_EBADVALUE; + return val; +} + +s32 CONF_GetEuRGB60(void) +{ + int res; + u8 val = 0; + res = CONF_Get("IPL.E60", &val, 1); + if(res<0) return res; + if(res!=1) return CONF_EBADVALUE; + return val; +} + +s32 CONF_GetIRSensitivity(void) +{ + int res; + u32 val = 0; + res = CONF_Get("BT.SENS", &val, 4); + if(res<0) return res; + if(res!=4) return CONF_EBADVALUE; + return val; +} + +s32 CONF_GetSensorBarPosition(void) +{ + int res; + u8 val = 0; + res = CONF_Get("BT.BAR", &val, 1); + if(res<0) return res; + if(res!=1) return CONF_EBADVALUE; + return val; +} + +s32 CONF_GetPadSpeakerVolume(void) +{ + int res; + u8 val = 0; + res = CONF_Get("BT.SPKV", &val, 1); + if(res<0) return res; + if(res!=1) return CONF_EBADVALUE; + return val; +} + +s32 CONF_GetPadMotorMode(void) +{ + int res; + u8 val = 0; + res = CONF_Get("BT.MOT", &val, 1); + if(res<0) return res; + if(res!=1) return CONF_EBADVALUE; + return val; +} + +s32 CONF_GetSoundMode(void) +{ + int res; + u8 val = 0; + res = CONF_Get("IPL.SND", &val, 1); + if(res<0) return res; + if(res!=1) return CONF_EBADVALUE; + return val; +} + +s32 CONF_GetLanguage(void) +{ + int res; + u8 val = 0; + res = CONF_Get("IPL.LNG", &val, 1); + if(res<0) return res; + if(res!=1) return CONF_EBADVALUE; + return val; +} + +s32 CONF_GetCounterBias(u32 *bias) +{ + int res; + res = CONF_Get("IPL.CB", bias, 4); + if(res<0) return res; + if(res!=4) return CONF_EBADVALUE; + return CONF_ERR_OK; +} + +s32 CONF_GetScreenSaverMode(void) +{ + int res; + u8 val = 0; + res = CONF_Get("IPL.SSV", &val, 1); + if(res<0) return res; + if(res!=1) return CONF_EBADVALUE; + return val; +} + +s32 CONF_GetDisplayOffsetH(s8 *offset) +{ + int res; + res = CONF_Get("IPL.DH", offset, 1); + if(res<0) return res; + if(res!=1) return CONF_EBADVALUE; + return 0; +} + +s32 CONF_GetPadDevices(conf_pads *pads) +{ + int res; + + res = CONF_Get("BT.DINF", pads, sizeof(conf_pads)); + if(res < 0) return res; + if(res < sizeof(conf_pads)) return CONF_EBADVALUE; + return 0; +} + +s32 CONF_GetNickName(u8 *nickname) +{ + int i, res; + u16 buf[11]; + + res = CONF_Get("IPL.NIK", buf, 0x16); + if(res < 0) return res; + if((res != 0x16) || (!buf[0])) return CONF_EBADVALUE; + + for(i=0; i<10; i++) + nickname[i] = buf[i]; + nickname[10] = 0; + + return res; +} + +s32 CONF_GetAspectRatio(void) +{ + int res; + u8 val = 0; + + res = CONF_Get("IPL.AR", &val, 1); + if(res < 0) return res; + if(res!=1) return CONF_EBADVALUE; + return val; +} + +s32 CONF_GetEULA(void) +{ + int res; + u8 val = 0; + + res = CONF_Get("IPL.EULA", &val, 1); + if(res < 0) return res; + if(res!=1) return CONF_EBADVALUE; + return val; +} + +s32 CONF_GetParentalPassword(s8 *password) +{ + int res; + u8 buf[0x4A]; + + res = CONF_Get("IPL.PC", buf, 0x4A); + if(res < 0) return res; + if(res!=1) return CONF_EBADVALUE; + + memcpy(password, buf+3, 4); + password[4] = 0; + + return res; +} + +s32 CONF_GetParentalAnswer(s8 *answer) +{ + int res; + u8 buf[0x4A]; + + res = CONF_Get("IPL.PC", buf, 0x4A); + if(res < 0) return res; + if(res!=1) return CONF_EBADVALUE; + + memcpy(answer, buf+8, 32); + answer[32] = 0; + + return res; +} + +s32 CONF_GetWiiConnect24(void) +{ + int res; + u32 val = 0; + + res = CONF_Get("NET.WCFG", &val, 4); + if(res < 0) return res; + if(res!=4) return CONF_EBADVALUE; + return val; +} + +s32 CONF_GetRegion(void) +{ + int res; + char buf[3]; + + res = __CONF_GetTxt("GAME", buf, 3); + if(res < 0) return res; + if(!strcmp(buf, "JP")) return CONF_REGION_JP; + if(!strcmp(buf, "US")) return CONF_REGION_US; + if(!strcmp(buf, "EU")) return CONF_REGION_EU; + if(!strcmp(buf, "KR")) return CONF_REGION_KR; + if(!strcmp(buf, "CN")) return CONF_REGION_CN; + return CONF_EBADVALUE; +} + +s32 CONF_GetArea(void) +{ + int res; + char buf[4]; + + res = __CONF_GetTxt("AREA", buf, 4); + if(res < 0) return res; + if(!strcmp(buf, "JPN")) return CONF_AREA_JPN; + if(!strcmp(buf, "USA")) return CONF_AREA_USA; + if(!strcmp(buf, "EUR")) return CONF_AREA_EUR; + if(!strcmp(buf, "AUS")) return CONF_AREA_AUS; + if(!strcmp(buf, "BRA")) return CONF_AREA_BRA; + if(!strcmp(buf, "TWN")) return CONF_AREA_TWN; + if(!strcmp(buf, "ROC")) return CONF_AREA_ROC; + if(!strcmp(buf, "KOR")) return CONF_AREA_KOR; + if(!strcmp(buf, "HKG")) return CONF_AREA_HKG; + if(!strcmp(buf, "ASI")) return CONF_AREA_ASI; + if(!strcmp(buf, "LTN")) return CONF_AREA_LTN; + if(!strcmp(buf, "SAF")) return CONF_AREA_SAF; + if(!strcmp(buf, "CHN")) return CONF_AREA_CHN; + return CONF_EBADVALUE; +} + +s32 CONF_GetVideo(void) +{ + int res; + char buf[5]; + + res = __CONF_GetTxt("VIDEO", buf, 5); + if(res < 0) return res; + if(!strcmp(buf, "NTSC")) return CONF_VIDEO_NTSC; + if(!strcmp(buf, "PAL")) return CONF_VIDEO_PAL; + if(!strcmp(buf, "MPAL")) return CONF_VIDEO_MPAL; + return CONF_EBADVALUE; +} + +#endif diff --git a/wii/libogc/libogc/console.c b/wii/libogc/libogc/console.c new file mode 100644 index 0000000000..be43822a2e --- /dev/null +++ b/wii/libogc/libogc/console.c @@ -0,0 +1,644 @@ +#include +#include +#include +#include + +#include "asm.h" +#include "processor.h" +#include "color.h" +#include "cache.h" +#include "video.h" +#include "system.h" + +#include "console.h" +#include "consol.h" +#include "usbgecko.h" + +#include +#include + +//--------------------------------------------------------------------------------- +const devoptab_t dotab_stdout = { +//--------------------------------------------------------------------------------- + "stdout", // device name + 0, // size of file structure + NULL, // device open + NULL, // device close + __console_write, // device write + NULL, // device read + NULL, // device seek + NULL, // device fstat + NULL, // device stat + NULL, // device link + NULL, // device unlink + NULL, // device chdir + NULL, // device rename + NULL, // device mkdir + 0, // dirStateSize + NULL, // device diropen_r + NULL, // device dirreset_r + NULL, // device dirnext_r + NULL, // device dirclose_r + NULL, // device statvfs_r + NULL, // device ftrunctate_r + NULL, // device fsync_r + NULL, // deviceData; +}; + +//color table +static const unsigned int color_table[] = +{ + 0x00800080, // 30 normal black + 0x246A24BE, // 31 normal red + 0x4856484B, // 32 normal green + 0x6D416D8A, // 33 normal yellow + 0x0DBE0D75, // 34 normal blue + 0x32A932B4, // 35 normal magenta + 0x56955641, // 36 normal cyan + 0xC580C580, // 37 normal white + 0x7B807B80, // 30 bright black + 0x4C544CFF, // 31 bright red + 0x95299512, // 32 bright green + 0xE200E294, // 33 bright yellow + 0x1CFF1C6B, // 34 bright blue + 0x69D669ED, // 35 bright magenta + 0xB2ABB200, // 36 bright cyan + 0xFF80FF80, // 37 bright white +}; + +static u32 do_xfb_copy = FALSE; +static struct _console_data_s stdcon; +static struct _console_data_s *curr_con = NULL; +static void *_console_buffer = NULL; + +static s32 __gecko_status = -1; +static u32 __gecko_safe = 0; + +extern u8 console_font_8x16[]; + +void __console_vipostcb(u32 retraceCnt) +{ + u32 ycnt,xcnt, fb_stride; + u32 *fb,*ptr; + + do_xfb_copy = TRUE; + + ptr = curr_con->destbuffer; + fb = VIDEO_GetCurrentFramebuffer()+(curr_con->target_y*curr_con->tgt_stride) + curr_con->target_x*VI_DISPLAY_PIX_SZ; + fb_stride = curr_con->tgt_stride/4 - (curr_con->con_xres/VI_DISPLAY_PIX_SZ); + + for(ycnt=curr_con->con_yres;ycnt>0;ycnt--) + { + for(xcnt=curr_con->con_xres;xcnt>0;xcnt-=VI_DISPLAY_PIX_SZ) + { + *fb++ = *ptr++; + } + fb += fb_stride; + } + + do_xfb_copy = FALSE; +} + + +static void __console_drawc(int c) +{ + console_data_s *con; + int ay; + unsigned int *ptr; + unsigned char *pbits; + unsigned char bits; + unsigned int color; + unsigned int fgcolor, bgcolor; + unsigned int nextline; + + if(do_xfb_copy==TRUE) return; + if(!curr_con) return; + con = curr_con; + + ptr = (unsigned int*)(con->destbuffer + ( con->con_stride * con->cursor_row * FONT_YSIZE ) + ((con->cursor_col * FONT_XSIZE / 2) * 4)); + pbits = &con->font[c * FONT_YSIZE]; + nextline = con->con_stride/4 - 4; + fgcolor = con->foreground; + bgcolor = con->background; + + for (ay = 0; ay < FONT_YSIZE; ay++) + { + /* hard coded loop unrolling ! */ + /* this depends on FONT_XSIZE = 8*/ +#if FONT_XSIZE == 8 + bits = *pbits++; + + /* bits 1 & 2 */ + if ( bits & 0x80) + color = fgcolor & 0xFFFF00FF; + else + color = bgcolor & 0xFFFF00FF; + if (bits & 0x40) + color |= fgcolor & 0x0000FF00; + else + color |= bgcolor & 0x0000FF00; + *ptr++ = color; + + /* bits 3 & 4 */ + if ( bits & 0x20) + color = fgcolor & 0xFFFF00FF; + else + color = bgcolor & 0xFFFF00FF; + if (bits & 0x10) + color |= fgcolor & 0x0000FF00; + else + color |= bgcolor & 0x0000FF00; + *ptr++ = color; + + /* bits 5 & 6 */ + if ( bits & 0x08) + color = fgcolor & 0xFFFF00FF; + else + color = bgcolor & 0xFFFF00FF; + if (bits & 0x04) + color |= fgcolor & 0x0000FF00; + else + color |= bgcolor & 0x0000FF00; + *ptr++ = color; + + /* bits 7 & 8 */ + if ( bits & 0x02) + color = fgcolor & 0xFFFF00FF; + else + color = bgcolor & 0xFFFF00FF; + if (bits & 0x01) + color |= fgcolor & 0x0000FF00; + else + color |= bgcolor & 0x0000FF00; + *ptr++ = color; + + /* next line */ + ptr += nextline; +#endif + } +} +static void __console_clear_line( int line, int from, int to ) { + console_data_s *con; + unsigned int c; + unsigned int *p; + unsigned int x_pixels; + unsigned int px_per_col = FONT_XSIZE/2; + unsigned int line_height = FONT_YSIZE; + unsigned int line_width; + + if( !(con = curr_con) ) return; + // For some reason there are xres/2 pixels per screen width + x_pixels = con->con_xres / 2; + + line_width = (to - from)*px_per_col; + p = (unsigned int*)con->destbuffer; + + // Move pointer to the current line and column offset + p += line*(FONT_YSIZE*x_pixels) + from*px_per_col; + + // Clears 1 line of pixels at a time, line_height times + while( line_height-- ) { + c = line_width; + while( c-- ) + *p++ = con->background; + p -= line_width; + p += x_pixels; + } +} +static void __console_clear(void) +{ + console_data_s *con; + unsigned int c; + unsigned int *p; + + if( !(con = curr_con) ) return; + + c = (con->con_xres*con->con_yres)/2; + p = (unsigned int*)con->destbuffer; + + while(c--) + *p++ = con->background; + + con->cursor_row = 0; + con->cursor_col = 0; + con->saved_row = 0; + con->saved_col = 0; +} +static void __console_clear_from_cursor() { + console_data_s *con; + int cur_row; + + if( !(con = curr_con) ) return; + cur_row = con->cursor_row; + + __console_clear_line( cur_row, con->cursor_col, con->con_cols ); + + while( cur_row++ < con->con_rows ) + __console_clear_line( cur_row, 0, con->con_cols ); + +} +static void __console_clear_to_cursor() { + console_data_s *con; + int cur_row; + + if( !(con = curr_con) ) return; + cur_row = con->cursor_row; + + __console_clear_line( cur_row, 0, con->cursor_col ); + + while( cur_row-- ) + __console_clear_line( cur_row, 0, con->con_cols ); +} + +void __console_init(void *framebuffer,int xstart,int ystart,int xres,int yres,int stride) +{ + unsigned int level; + console_data_s *con = &stdcon; + + _CPU_ISR_Disable(level); + + con->destbuffer = framebuffer; + con->con_xres = xres; + con->con_yres = yres; + con->con_cols = xres / FONT_XSIZE; + con->con_rows = yres / FONT_YSIZE; + con->con_stride = con->tgt_stride = stride; + con->target_x = xstart; + con->target_y = ystart; + + con->font = console_font_8x16; + + con->foreground = COLOR_WHITE; + con->background = COLOR_BLACK; + + curr_con = con; + + __console_clear(); + + devoptab_list[STD_OUT] = &dotab_stdout; + devoptab_list[STD_ERR] = &dotab_stdout; + _CPU_ISR_Restore(level); + + setvbuf(stdout, NULL , _IONBF, 0); + setvbuf(stderr, NULL , _IONBF, 0); +} + +void __console_init_ex(void *conbuffer,int tgt_xstart,int tgt_ystart,int tgt_stride,int con_xres,int con_yres,int con_stride) +{ + unsigned int level; + console_data_s *con = &stdcon; + + _CPU_ISR_Disable(level); + + con->destbuffer = conbuffer; + con->target_x = tgt_xstart; + con->target_y = tgt_ystart; + con->con_xres = con_xres; + con->con_yres = con_yres; + con->tgt_stride = tgt_stride; + con->con_stride = con_stride; + con->con_cols = con_xres / FONT_XSIZE; + con->con_rows = con_yres / FONT_YSIZE; + con->cursor_row = 0; + con->cursor_col = 0; + con->saved_row = 0; + con->saved_col = 0; + + con->font = console_font_8x16; + + con->foreground = COLOR_WHITE; + con->background = COLOR_BLACK; + + curr_con = con; + + __console_clear(); + + devoptab_list[STD_OUT] = &dotab_stdout; + devoptab_list[STD_ERR] = &dotab_stdout; + + VIDEO_SetPostRetraceCallback(__console_vipostcb); + + _CPU_ISR_Restore(level); + + setvbuf(stdout, NULL , _IONBF, 0); + setvbuf(stderr, NULL , _IONBF, 0); +} + +static int __console_parse_escsequence(char *pchr) +{ + char chr; + console_data_s *con; + int i; + int parameters[3]; + int para; + + if(!curr_con) return -1; + con = curr_con; + + /* set default value */ + para = 0; + parameters[0] = 0; + parameters[1] = 0; + parameters[2] = 0; + + /* scan parameters */ + i = 0; + chr = *pchr; + while( (para < 3) && (chr >= '0') && (chr <= '9') ) + { + while( (chr >= '0') && (chr <= '9') ) + { + /* parse parameter */ + parameters[para] *= 10; + parameters[para] += chr - '0'; + pchr++; + i++; + chr = *pchr; + } + para++; + + if( *pchr == ';' ) + { + /* skip parameter delimiter */ + pchr++; + i++; + } + chr = *pchr; + } + + /* get final character */ + chr = *pchr++; + i++; + switch(chr) + { + ///////////////////////////////////////// + // Cursor directional movement + ///////////////////////////////////////// + case 'A': + { + curr_con->cursor_row -= parameters[0]; + if(curr_con->cursor_row < 0) curr_con->cursor_row = 0; + break; + } + case 'B': + { + curr_con->cursor_row += parameters[0]; + if(curr_con->cursor_row >= curr_con->con_rows) curr_con->cursor_row = curr_con->con_rows - 1; + break; + } + case 'C': + { + curr_con->cursor_col += parameters[0]; + if(curr_con->cursor_col >= curr_con->con_cols) curr_con->cursor_col = curr_con->con_cols - 1; + break; + } + case 'D': + { + curr_con->cursor_col -= parameters[0]; + if(curr_con->cursor_col < 0) curr_con->cursor_col = 0; + break; + } + ///////////////////////////////////////// + // Cursor position movement + ///////////////////////////////////////// + case 'H': + case 'f': + { + curr_con->cursor_col = parameters[1]; + curr_con->cursor_row = parameters[0]; + if(curr_con->cursor_row >= curr_con->con_rows) curr_con->cursor_row = curr_con->con_rows - 1; + if(curr_con->cursor_col >= curr_con->con_cols) curr_con->cursor_col = curr_con->con_cols - 1; + break; + } + ///////////////////////////////////////// + // Screen clear + ///////////////////////////////////////// + case 'J': + { + if( parameters[0] == 0 ) + __console_clear_from_cursor(); + if( parameters[0] == 1 ) + __console_clear_to_cursor(); + if( parameters[0] == 2 ) + __console_clear(); + + break; + } + ///////////////////////////////////////// + // Line clear + ///////////////////////////////////////// + case 'K': + { + if( parameters[0] == 0 ) + __console_clear_line( curr_con->cursor_row, curr_con->cursor_col, curr_con->con_cols ); + if( parameters[0] == 1 ) + __console_clear_line( curr_con->cursor_row, 0, curr_con->cursor_col ); + if( parameters[0] == 2 ) + __console_clear_line( curr_con->cursor_row, 0, curr_con->con_cols); + + break; + } + ///////////////////////////////////////// + // Save cursor position + ///////////////////////////////////////// + case 's': + { + con->saved_col = con->cursor_col; + con->saved_row = con->cursor_row; + break; + } + ///////////////////////////////////////// + // Load cursor position + ///////////////////////////////////////// + case 'u': + con->cursor_col = con->saved_col; + con->cursor_row = con->saved_row; + break; + ///////////////////////////////////////// + // SGR Select Graphic Rendition + ///////////////////////////////////////// + case 'm': + { + // handle 30-37,39 for foreground color changes + if( (parameters[0] >= 30) && (parameters[0] <= 39) ) + { + parameters[0] -= 30; + + //39 is the reset code + if(parameters[0] == 9){ + parameters[0] = 15; + } + else if(parameters[0] > 7){ + parameters[0] = 7; + } + + if(parameters[1] == 1) + { + // Intensity: Bold makes color bright + parameters[0] += 8; + } + con->foreground = color_table[parameters[0]]; + } + // handle 40-47 for background color changes + else if( (parameters[0] >= 40) && (parameters[0] <= 47) ) + { + parameters[0] -= 40; + + if(parameters[1] == 1) + { + // Intensity: Bold makes color bright + parameters[0] += 8; + } + con->background = color_table[parameters[0]]; + } + break; + } + } + + return(i); +} + +int __console_write(struct _reent *r,void *fd,const char *ptr,size_t len) +{ + size_t i = 0; + char *tmp = (char*)ptr; + console_data_s *con; + char chr; + + if(__gecko_status>=0) { + if(__gecko_safe) + usb_sendbuffer_safe(__gecko_status,ptr,len); + else + usb_sendbuffer(__gecko_status,ptr,len); + } + + if(!curr_con) return -1; + con = curr_con; + if(!tmp || len<=0) return -1; + + i = 0; + while(*tmp!='\0' && icursor_row++; + con->cursor_col = 0; + break; + case '\r': + con->cursor_col = 0; + break; + case '\b': + con->cursor_col--; + if(con->cursor_col < 0) + { + con->cursor_col = 0; + } + break; + case '\f': + con->cursor_row++; + break; + case '\t': + if(con->cursor_col%TAB_SIZE) con->cursor_col += (con->cursor_col%TAB_SIZE); + else con->cursor_col += TAB_SIZE; + break; + default: + __console_drawc(chr); + con->cursor_col++; + + if( con->cursor_col >= con->con_cols) + { + /* if right border reached wrap around */ + con->cursor_row++; + con->cursor_col = 0; + } + } + } + + if( con->cursor_row >= con->con_rows) + { + /* if bottom border reached scroll */ + memcpy(con->destbuffer, + con->destbuffer+con->con_stride*(FONT_YSIZE*FONT_YFACTOR+FONT_YGAP), + con->con_stride*con->con_yres-FONT_YSIZE); + + unsigned int cnt = (con->con_stride * (FONT_YSIZE * FONT_YFACTOR + FONT_YGAP))/4; + unsigned int *ptr = (unsigned int*)(con->destbuffer + con->con_stride * (con->con_yres - FONT_YSIZE)); + while(cnt--) + *ptr++ = con->background; + con->cursor_row--; + } + } + + return i; +} + +void CON_Init(void *framebuffer,int xstart,int ystart,int xres,int yres,int stride) +{ + __console_init(framebuffer,xstart,ystart,xres,yres,stride); +} + +s32 CON_InitEx(GXRModeObj *rmode, s32 conXOrigin,s32 conYOrigin,s32 conWidth,s32 conHeight) +{ + VIDEO_SetPostRetraceCallback(NULL); + if(_console_buffer) + free(_console_buffer); + + _console_buffer = malloc(conWidth*conHeight*VI_DISPLAY_PIX_SZ); + if(!_console_buffer) return -1; + + __console_init_ex(_console_buffer,conXOrigin,conYOrigin,rmode->fbWidth*VI_DISPLAY_PIX_SZ,conWidth,conHeight,conWidth*VI_DISPLAY_PIX_SZ); + + return 0; +} + +void CON_GetMetrics(int *cols, int *rows) +{ + if(curr_con) { + *cols = curr_con->con_cols; + *rows = curr_con->con_rows; + } +} + +void CON_GetPosition(int *col, int *row) +{ + if(curr_con) { + *col = curr_con->cursor_col; + *row = curr_con->cursor_row; + } +} + +void CON_EnableGecko(int channel,int safe) +{ + if(channel && (channel>1 || !usb_isgeckoalive(channel))) channel = -1; + + __gecko_status = channel; + __gecko_safe = safe; + + if(__gecko_status!=-1) { + devoptab_list[STD_OUT] = &dotab_stdout; + devoptab_list[STD_ERR] = &dotab_stdout; + + // line buffered output for threaded apps when only using the usbgecko + if(!curr_con) { + setvbuf(stdout, NULL, _IOLBF, 0); + setvbuf(stderr, NULL, _IOLBF, 0); + } + } +} + diff --git a/wii/libogc/libogc/console.h b/wii/libogc/libogc/console.h new file mode 100644 index 0000000000..df05b1e798 --- /dev/null +++ b/wii/libogc/libogc/console.h @@ -0,0 +1,30 @@ +#ifndef __CONSOLE_H__ +#define __CONSOLE_H__ + + +#define FONT_XSIZE 8 +#define FONT_YSIZE 16 +#define FONT_XFACTOR 1 +#define FONT_YFACTOR 1 +#define FONT_XGAP 0 +#define FONT_YGAP 0 +#define TAB_SIZE 4 + +typedef struct _console_data_s { + void *destbuffer; + unsigned char *font; + int con_xres,con_yres,con_stride; + int target_x,target_y, tgt_stride; + int cursor_row,cursor_col; + int saved_row,saved_col; + int con_rows, con_cols; + + unsigned int foreground,background; +} console_data_s; + +extern int __console_write(struct _reent *r,void *fd,const char *ptr,size_t len); +extern void __console_init(void *framebuffer,int xstart,int ystart,int xres,int yres,int stride); + +//extern const devoptab_t dotab_stdout; + +#endif diff --git a/wii/libogc/libogc/console_font_8x16.c b/wii/libogc/libogc/console_font_8x16.c new file mode 100644 index 0000000000..21ef8da057 --- /dev/null +++ b/wii/libogc/libogc/console_font_8x16.c @@ -0,0 +1,4613 @@ +unsigned char console_font_8x16[] = { + + /* 0 0x00 '^@' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 1 0x01 '^A' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0x81, /* 10000001 */ + 0xa5, /* 10100101 */ + 0x81, /* 10000001 */ + 0x81, /* 10000001 */ + 0xbd, /* 10111101 */ + 0x99, /* 10011001 */ + 0x81, /* 10000001 */ + 0x81, /* 10000001 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 2 0x02 '^B' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0xff, /* 11111111 */ + 0xdb, /* 11011011 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xc3, /* 11000011 */ + 0xe7, /* 11100111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 3 0x03 '^C' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x6c, /* 01101100 */ + 0xfe, /* 11111110 */ + 0xfe, /* 11111110 */ + 0xfe, /* 11111110 */ + 0xfe, /* 11111110 */ + 0x7c, /* 01111100 */ + 0x38, /* 00111000 */ + 0x10, /* 00010000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 4 0x04 '^D' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x10, /* 00010000 */ + 0x38, /* 00111000 */ + 0x7c, /* 01111100 */ + 0xfe, /* 11111110 */ + 0x7c, /* 01111100 */ + 0x38, /* 00111000 */ + 0x10, /* 00010000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 5 0x05 '^E' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x3c, /* 00111100 */ + 0xe7, /* 11100111 */ + 0xe7, /* 11100111 */ + 0xe7, /* 11100111 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 6 0x06 '^F' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x7e, /* 01111110 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 7 0x07 '^G' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 8 0x08 '^H' */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xe7, /* 11100111 */ + 0xc3, /* 11000011 */ + 0xc3, /* 11000011 */ + 0xe7, /* 11100111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + + /* 9 0x09 '^I' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x3c, /* 00111100 */ + 0x66, /* 01100110 */ + 0x42, /* 01000010 */ + 0x42, /* 01000010 */ + 0x66, /* 01100110 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 10 0x0a '^J' */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xc3, /* 11000011 */ + 0x99, /* 10011001 */ + 0xbd, /* 10111101 */ + 0xbd, /* 10111101 */ + 0x99, /* 10011001 */ + 0xc3, /* 11000011 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + + /* 11 0x0b '^K' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x1e, /* 00011110 */ + 0x0e, /* 00001110 */ + 0x1a, /* 00011010 */ + 0x32, /* 00110010 */ + 0x78, /* 01111000 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x78, /* 01111000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 12 0x0c '^L' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x3c, /* 00111100 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 13 0x0d '^M' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x3f, /* 00111111 */ + 0x33, /* 00110011 */ + 0x3f, /* 00111111 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x70, /* 01110000 */ + 0xf0, /* 11110000 */ + 0xe0, /* 11100000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 14 0x0e '^N' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7f, /* 01111111 */ + 0x63, /* 01100011 */ + 0x7f, /* 01111111 */ + 0x63, /* 01100011 */ + 0x63, /* 01100011 */ + 0x63, /* 01100011 */ + 0x63, /* 01100011 */ + 0x67, /* 01100111 */ + 0xe7, /* 11100111 */ + 0xe6, /* 11100110 */ + 0xc0, /* 11000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 15 0x0f '^O' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0xdb, /* 11011011 */ + 0x3c, /* 00111100 */ + 0xe7, /* 11100111 */ + 0x3c, /* 00111100 */ + 0xdb, /* 11011011 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 16 0x10 '^P' */ + 0x00, /* 00000000 */ + 0x80, /* 10000000 */ + 0xc0, /* 11000000 */ + 0xe0, /* 11100000 */ + 0xf0, /* 11110000 */ + 0xf8, /* 11111000 */ + 0xfe, /* 11111110 */ + 0xf8, /* 11111000 */ + 0xf0, /* 11110000 */ + 0xe0, /* 11100000 */ + 0xc0, /* 11000000 */ + 0x80, /* 10000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 17 0x11 '^Q' */ + 0x00, /* 00000000 */ + 0x02, /* 00000010 */ + 0x06, /* 00000110 */ + 0x0e, /* 00001110 */ + 0x1e, /* 00011110 */ + 0x3e, /* 00111110 */ + 0xfe, /* 11111110 */ + 0x3e, /* 00111110 */ + 0x1e, /* 00011110 */ + 0x0e, /* 00001110 */ + 0x06, /* 00000110 */ + 0x02, /* 00000010 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 18 0x12 '^R' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 19 0x13 '^S' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x00, /* 00000000 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 20 0x14 '^T' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7f, /* 01111111 */ + 0xdb, /* 11011011 */ + 0xdb, /* 11011011 */ + 0xdb, /* 11011011 */ + 0x7b, /* 01111011 */ + 0x1b, /* 00011011 */ + 0x1b, /* 00011011 */ + 0x1b, /* 00011011 */ + 0x1b, /* 00011011 */ + 0x1b, /* 00011011 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 21 0x15 '^U' */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0x60, /* 01100000 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x6c, /* 01101100 */ + 0x38, /* 00111000 */ + 0x0c, /* 00001100 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 22 0x16 '^V' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0xfe, /* 11111110 */ + 0xfe, /* 11111110 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 23 0x17 '^W' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 24 0x18 '^X' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 25 0x19 '^Y' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 26 0x1a '^Z' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x0c, /* 00001100 */ + 0xfe, /* 11111110 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 27 0x1b '^[' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0xfe, /* 11111110 */ + 0x60, /* 01100000 */ + 0x30, /* 00110000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 28 0x1c '^\' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 29 0x1d '^]' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x28, /* 00101000 */ + 0x6c, /* 01101100 */ + 0xfe, /* 11111110 */ + 0x6c, /* 01101100 */ + 0x28, /* 00101000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 30 0x1e '^^' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x10, /* 00010000 */ + 0x38, /* 00111000 */ + 0x38, /* 00111000 */ + 0x7c, /* 01111100 */ + 0x7c, /* 01111100 */ + 0xfe, /* 11111110 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 31 0x1f '^_' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0xfe, /* 11111110 */ + 0x7c, /* 01111100 */ + 0x7c, /* 01111100 */ + 0x38, /* 00111000 */ + 0x38, /* 00111000 */ + 0x10, /* 00010000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 32 0x20 ' ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 33 0x21 '!' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x3c, /* 00111100 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 34 0x22 '"' */ + 0x00, /* 00000000 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x24, /* 00100100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 35 0x23 '#' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0xfe, /* 11111110 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0xfe, /* 11111110 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 36 0x24 '$' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc2, /* 11000010 */ + 0xc0, /* 11000000 */ + 0x7c, /* 01111100 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0x86, /* 10000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 37 0x25 '%' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc2, /* 11000010 */ + 0xc6, /* 11000110 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0xc6, /* 11000110 */ + 0x86, /* 10000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 38 0x26 '&' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0x38, /* 00111000 */ + 0x76, /* 01110110 */ + 0xdc, /* 11011100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 39 0x27 ''' */ + 0x00, /* 00000000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 40 0x28 '(' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x0c, /* 00001100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 41 0x29 ')' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 42 0x2a '*' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x66, /* 01100110 */ + 0x3c, /* 00111100 */ + 0xff, /* 11111111 */ + 0x3c, /* 00111100 */ + 0x66, /* 01100110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 43 0x2b '+' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 44 0x2c ',' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 45 0x2d '-' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 46 0x2e '.' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 47 0x2f '/' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x02, /* 00000010 */ + 0x06, /* 00000110 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0xc0, /* 11000000 */ + 0x80, /* 10000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 48 0x30 '0' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xd6, /* 11010110 */ + 0xd6, /* 11010110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x6c, /* 01101100 */ + 0x38, /* 00111000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 49 0x31 '1' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x38, /* 00111000 */ + 0x78, /* 01111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 50 0x32 '2' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0x06, /* 00000110 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0xc0, /* 11000000 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 51 0x33 '3' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0x3c, /* 00111100 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 52 0x34 '4' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x0c, /* 00001100 */ + 0x1c, /* 00011100 */ + 0x3c, /* 00111100 */ + 0x6c, /* 01101100 */ + 0xcc, /* 11001100 */ + 0xfe, /* 11111110 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x1e, /* 00011110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 53 0x35 '5' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xfc, /* 11111100 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 54 0x36 '6' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x38, /* 00111000 */ + 0x60, /* 01100000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xfc, /* 11111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 55 0x37 '7' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0xc6, /* 11000110 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 56 0x38 '8' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 57 0x39 '9' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7e, /* 01111110 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0x0c, /* 00001100 */ + 0x78, /* 01111000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 58 0x3a ':' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 59 0x3b ';' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 60 0x3c '<' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x06, /* 00000110 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x0c, /* 00001100 */ + 0x06, /* 00000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 61 0x3d '=' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 62 0x3e '>' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x60, /* 01100000 */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x0c, /* 00001100 */ + 0x06, /* 00000110 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 63 0x3f '?' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 64 0x40 '@' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xde, /* 11011110 */ + 0xde, /* 11011110 */ + 0xde, /* 11011110 */ + 0xdc, /* 11011100 */ + 0xc0, /* 11000000 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 65 0x41 'A' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x10, /* 00010000 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 66 0x42 'B' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfc, /* 11111100 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x7c, /* 01111100 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0xfc, /* 11111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 67 0x43 'C' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x3c, /* 00111100 */ + 0x66, /* 01100110 */ + 0xc2, /* 11000010 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc2, /* 11000010 */ + 0x66, /* 01100110 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 68 0x44 'D' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xf8, /* 11111000 */ + 0x6c, /* 01101100 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x6c, /* 01101100 */ + 0xf8, /* 11111000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 69 0x45 'E' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0x66, /* 01100110 */ + 0x62, /* 01100010 */ + 0x68, /* 01101000 */ + 0x78, /* 01111000 */ + 0x68, /* 01101000 */ + 0x60, /* 01100000 */ + 0x62, /* 01100010 */ + 0x66, /* 01100110 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 70 0x46 'F' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0x66, /* 01100110 */ + 0x62, /* 01100010 */ + 0x68, /* 01101000 */ + 0x78, /* 01111000 */ + 0x68, /* 01101000 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0xf0, /* 11110000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 71 0x47 'G' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x3c, /* 00111100 */ + 0x66, /* 01100110 */ + 0xc2, /* 11000010 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xde, /* 11011110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x66, /* 01100110 */ + 0x3a, /* 00111010 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 72 0x48 'H' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 73 0x49 'I' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 74 0x4a 'J' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x1e, /* 00011110 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x78, /* 01111000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 75 0x4b 'K' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xe6, /* 11100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x6c, /* 01101100 */ + 0x78, /* 01111000 */ + 0x78, /* 01111000 */ + 0x6c, /* 01101100 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0xe6, /* 11100110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 76 0x4c 'L' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xf0, /* 11110000 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0x62, /* 01100010 */ + 0x66, /* 01100110 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 77 0x4d 'M' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0xee, /* 11101110 */ + 0xfe, /* 11111110 */ + 0xfe, /* 11111110 */ + 0xd6, /* 11010110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 78 0x4e 'N' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0xe6, /* 11100110 */ + 0xf6, /* 11110110 */ + 0xfe, /* 11111110 */ + 0xde, /* 11011110 */ + 0xce, /* 11001110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 79 0x4f 'O' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 80 0x50 'P' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfc, /* 11111100 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x7c, /* 01111100 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0xf0, /* 11110000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 81 0x51 'Q' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xd6, /* 11010110 */ + 0xde, /* 11011110 */ + 0x7c, /* 01111100 */ + 0x0c, /* 00001100 */ + 0x0e, /* 00001110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 82 0x52 'R' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfc, /* 11111100 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x7c, /* 01111100 */ + 0x6c, /* 01101100 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0xe6, /* 11100110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 83 0x53 'S' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x60, /* 01100000 */ + 0x38, /* 00111000 */ + 0x0c, /* 00001100 */ + 0x06, /* 00000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 84 0x54 'T' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0x7e, /* 01111110 */ + 0x5a, /* 01011010 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 85 0x55 'U' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 86 0x56 'V' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x6c, /* 01101100 */ + 0x38, /* 00111000 */ + 0x10, /* 00010000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 87 0x57 'W' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xd6, /* 11010110 */ + 0xd6, /* 11010110 */ + 0xd6, /* 11010110 */ + 0xfe, /* 11111110 */ + 0xee, /* 11101110 */ + 0x6c, /* 01101100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 88 0x58 'X' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x6c, /* 01101100 */ + 0x7c, /* 01111100 */ + 0x38, /* 00111000 */ + 0x38, /* 00111000 */ + 0x7c, /* 01111100 */ + 0x6c, /* 01101100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 89 0x59 'Y' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 90 0x5a 'Z' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0xc6, /* 11000110 */ + 0x86, /* 10000110 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0xc2, /* 11000010 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 91 0x5b '[' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x3c, /* 00111100 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 92 0x5c '\' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x80, /* 10000000 */ + 0xc0, /* 11000000 */ + 0xe0, /* 11100000 */ + 0x70, /* 01110000 */ + 0x38, /* 00111000 */ + 0x1c, /* 00011100 */ + 0x0e, /* 00001110 */ + 0x06, /* 00000110 */ + 0x02, /* 00000010 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 93 0x5d ']' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x3c, /* 00111100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 94 0x5e '^' */ + 0x10, /* 00010000 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 95 0x5f '_' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 96 0x60 '`' */ + 0x00, /* 00000000 */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x0c, /* 00001100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 97 0x61 'a' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x78, /* 01111000 */ + 0x0c, /* 00001100 */ + 0x7c, /* 01111100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 98 0x62 'b' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xe0, /* 11100000 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0x78, /* 01111000 */ + 0x6c, /* 01101100 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 99 0x63 'c' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 100 0x64 'd' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x1c, /* 00011100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x3c, /* 00111100 */ + 0x6c, /* 01101100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 101 0x65 'e' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 102 0x66 'f' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x1c, /* 00011100 */ + 0x36, /* 00110110 */ + 0x32, /* 00110010 */ + 0x30, /* 00110000 */ + 0x78, /* 01111000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x78, /* 01111000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 103 0x67 'g' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x76, /* 01110110 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x7c, /* 01111100 */ + 0x0c, /* 00001100 */ + 0xcc, /* 11001100 */ + 0x78, /* 01111000 */ + 0x00, /* 00000000 */ + + /* 104 0x68 'h' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xe0, /* 11100000 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0x6c, /* 01101100 */ + 0x76, /* 01110110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0xe6, /* 11100110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 105 0x69 'i' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x38, /* 00111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 106 0x6a 'j' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0x00, /* 00000000 */ + 0x0e, /* 00001110 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + + /* 107 0x6b 'k' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xe0, /* 11100000 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0x66, /* 01100110 */ + 0x6c, /* 01101100 */ + 0x78, /* 01111000 */ + 0x78, /* 01111000 */ + 0x6c, /* 01101100 */ + 0x66, /* 01100110 */ + 0xe6, /* 11100110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 108 0x6c 'l' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x38, /* 00111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 109 0x6d 'm' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xec, /* 11101100 */ + 0xfe, /* 11111110 */ + 0xd6, /* 11010110 */ + 0xd6, /* 11010110 */ + 0xd6, /* 11010110 */ + 0xd6, /* 11010110 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 110 0x6e 'n' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xdc, /* 11011100 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 111 0x6f 'o' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 112 0x70 'p' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xdc, /* 11011100 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x7c, /* 01111100 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0xf0, /* 11110000 */ + 0x00, /* 00000000 */ + + /* 113 0x71 'q' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x76, /* 01110110 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x7c, /* 01111100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x1e, /* 00011110 */ + 0x00, /* 00000000 */ + + /* 114 0x72 'r' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xdc, /* 11011100 */ + 0x76, /* 01110110 */ + 0x66, /* 01100110 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0xf0, /* 11110000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 115 0x73 's' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0x60, /* 01100000 */ + 0x38, /* 00111000 */ + 0x0c, /* 00001100 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 116 0x74 't' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x10, /* 00010000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0xfc, /* 11111100 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x36, /* 00110110 */ + 0x1c, /* 00011100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 117 0x75 'u' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 118 0x76 'v' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x6c, /* 01101100 */ + 0x38, /* 00111000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 119 0x77 'w' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xd6, /* 11010110 */ + 0xd6, /* 11010110 */ + 0xd6, /* 11010110 */ + 0xfe, /* 11111110 */ + 0x6c, /* 01101100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 120 0x78 'x' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0x6c, /* 01101100 */ + 0x38, /* 00111000 */ + 0x38, /* 00111000 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 121 0x79 'y' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7e, /* 01111110 */ + 0x06, /* 00000110 */ + 0x0c, /* 00001100 */ + 0xf8, /* 11111000 */ + 0x00, /* 00000000 */ + + /* 122 0x7a 'z' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0xcc, /* 11001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 123 0x7b '{' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x0e, /* 00001110 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x70, /* 01110000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x0e, /* 00001110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 124 0x7c '|' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 125 0x7d '}' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x70, /* 01110000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x0e, /* 00001110 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x70, /* 01110000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 126 0x7e '~' */ + 0x00, /* 00000000 */ + 0x76, /* 01110110 */ + 0xdc, /* 11011100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 127 0x7f '' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x10, /* 00010000 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 128 0x80 '' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x3c, /* 00111100 */ + 0x66, /* 01100110 */ + 0xc2, /* 11000010 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc2, /* 11000010 */ + 0x66, /* 01100110 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x70, /* 01110000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 129 0x81 '' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xcc, /* 11001100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 130 0x82 '' */ + 0x00, /* 00000000 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 131 0x83 '' */ + 0x00, /* 00000000 */ + 0x10, /* 00010000 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0x00, /* 00000000 */ + 0x78, /* 01111000 */ + 0x0c, /* 00001100 */ + 0x7c, /* 01111100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 132 0x84 '' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xcc, /* 11001100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x78, /* 01111000 */ + 0x0c, /* 00001100 */ + 0x7c, /* 01111100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 133 0x85 '' */ + 0x00, /* 00000000 */ + 0x60, /* 01100000 */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x78, /* 01111000 */ + 0x0c, /* 00001100 */ + 0x7c, /* 01111100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 134 0x86 '' */ + 0x00, /* 00000000 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0x38, /* 00111000 */ + 0x00, /* 00000000 */ + 0x78, /* 01111000 */ + 0x0c, /* 00001100 */ + 0x7c, /* 01111100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 135 0x87 '' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x18, /* 00011000 */ + 0x70, /* 01110000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 136 0x88 '' */ + 0x00, /* 00000000 */ + 0x10, /* 00010000 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 137 0x89 '' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 138 0x8a '' */ + 0x00, /* 00000000 */ + 0x60, /* 01100000 */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 139 0x8b '' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x66, /* 01100110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x38, /* 00111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 140 0x8c '' */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x66, /* 01100110 */ + 0x00, /* 00000000 */ + 0x38, /* 00111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 141 0x8d '' */ + 0x00, /* 00000000 */ + 0x60, /* 01100000 */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x38, /* 00111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 142 0x8e '' */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x10, /* 00010000 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 143 0x8f '' */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0x38, /* 00111000 */ + 0x10, /* 00010000 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 144 0x90 '' */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0x66, /* 01100110 */ + 0x62, /* 01100010 */ + 0x68, /* 01101000 */ + 0x78, /* 01111000 */ + 0x68, /* 01101000 */ + 0x62, /* 01100010 */ + 0x66, /* 01100110 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 145 0x91 '' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xec, /* 11101100 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x7e, /* 01111110 */ + 0xd8, /* 11011000 */ + 0xd8, /* 11011000 */ + 0x6e, /* 01101110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 146 0x92 '' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x3e, /* 00111110 */ + 0x6c, /* 01101100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xfe, /* 11111110 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xce, /* 11001110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 147 0x93 '' */ + 0x00, /* 00000000 */ + 0x10, /* 00010000 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 148 0x94 '' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 149 0x95 '' */ + 0x00, /* 00000000 */ + 0x60, /* 01100000 */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 150 0x96 '' */ + 0x00, /* 00000000 */ + 0x30, /* 00110000 */ + 0x78, /* 01111000 */ + 0xcc, /* 11001100 */ + 0x00, /* 00000000 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 151 0x97 '' */ + 0x00, /* 00000000 */ + 0x60, /* 01100000 */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 152 0x98 '' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7e, /* 01111110 */ + 0x06, /* 00000110 */ + 0x0c, /* 00001100 */ + 0x78, /* 01111000 */ + 0x00, /* 00000000 */ + + /* 153 0x99 '' */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 154 0x9a '' */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 155 0x9b '' */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 156 0x9c '' */ + 0x00, /* 00000000 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0x64, /* 01100100 */ + 0x60, /* 01100000 */ + 0xf0, /* 11110000 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0xe6, /* 11100110 */ + 0xfc, /* 11111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 157 0x9d '' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 158 0x9e '' */ + 0x00, /* 00000000 */ + 0xf8, /* 11111000 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xf8, /* 11111000 */ + 0xc4, /* 11000100 */ + 0xcc, /* 11001100 */ + 0xde, /* 11011110 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 159 0x9f '' */ + 0x00, /* 00000000 */ + 0x0e, /* 00001110 */ + 0x1b, /* 00011011 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0xd8, /* 11011000 */ + 0x70, /* 01110000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 160 0xa0 '' */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0x00, /* 00000000 */ + 0x78, /* 01111000 */ + 0x0c, /* 00001100 */ + 0x7c, /* 01111100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 161 0xa1 '' */ + 0x00, /* 00000000 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x00, /* 00000000 */ + 0x38, /* 00111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 162 0xa2 '' */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 163 0xa3 '' */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0x00, /* 00000000 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 164 0xa4 '' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x76, /* 01110110 */ + 0xdc, /* 11011100 */ + 0x00, /* 00000000 */ + 0xdc, /* 11011100 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 165 0xa5 '' */ + 0x76, /* 01110110 */ + 0xdc, /* 11011100 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0xe6, /* 11100110 */ + 0xf6, /* 11110110 */ + 0xfe, /* 11111110 */ + 0xde, /* 11011110 */ + 0xce, /* 11001110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 166 0xa6 '' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x3c, /* 00111100 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0x3e, /* 00111110 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 167 0xa7 '' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0x38, /* 00111000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 168 0xa8 '' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x00, /* 00000000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0xc0, /* 11000000 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 169 0xa9 '' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 170 0xaa '' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 171 0xab '' */ + 0x00, /* 00000000 */ + 0x60, /* 01100000 */ + 0xe0, /* 11100000 */ + 0x62, /* 01100010 */ + 0x66, /* 01100110 */ + 0x6c, /* 01101100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0xdc, /* 11011100 */ + 0x86, /* 10000110 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x3e, /* 00111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 172 0xac '' */ + 0x00, /* 00000000 */ + 0x60, /* 01100000 */ + 0xe0, /* 11100000 */ + 0x62, /* 01100010 */ + 0x66, /* 01100110 */ + 0x6c, /* 01101100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x66, /* 01100110 */ + 0xce, /* 11001110 */ + 0x9a, /* 10011010 */ + 0x3f, /* 00111111 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 173 0xad '' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x3c, /* 00111100 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 174 0xae '' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x36, /* 00110110 */ + 0x6c, /* 01101100 */ + 0xd8, /* 11011000 */ + 0x6c, /* 01101100 */ + 0x36, /* 00110110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 175 0xaf '' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xd8, /* 11011000 */ + 0x6c, /* 01101100 */ + 0x36, /* 00110110 */ + 0x6c, /* 01101100 */ + 0xd8, /* 11011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 176 0xb0 '' */ + 0x11, /* 00010001 */ + 0x44, /* 01000100 */ + 0x11, /* 00010001 */ + 0x44, /* 01000100 */ + 0x11, /* 00010001 */ + 0x44, /* 01000100 */ + 0x11, /* 00010001 */ + 0x44, /* 01000100 */ + 0x11, /* 00010001 */ + 0x44, /* 01000100 */ + 0x11, /* 00010001 */ + 0x44, /* 01000100 */ + 0x11, /* 00010001 */ + 0x44, /* 01000100 */ + 0x11, /* 00010001 */ + 0x44, /* 01000100 */ + + /* 177 0xb1 '' */ + 0x55, /* 01010101 */ + 0xaa, /* 10101010 */ + 0x55, /* 01010101 */ + 0xaa, /* 10101010 */ + 0x55, /* 01010101 */ + 0xaa, /* 10101010 */ + 0x55, /* 01010101 */ + 0xaa, /* 10101010 */ + 0x55, /* 01010101 */ + 0xaa, /* 10101010 */ + 0x55, /* 01010101 */ + 0xaa, /* 10101010 */ + 0x55, /* 01010101 */ + 0xaa, /* 10101010 */ + 0x55, /* 01010101 */ + 0xaa, /* 10101010 */ + + /* 178 0xb2 '' */ + 0xdd, /* 11011101 */ + 0x77, /* 01110111 */ + 0xdd, /* 11011101 */ + 0x77, /* 01110111 */ + 0xdd, /* 11011101 */ + 0x77, /* 01110111 */ + 0xdd, /* 11011101 */ + 0x77, /* 01110111 */ + 0xdd, /* 11011101 */ + 0x77, /* 01110111 */ + 0xdd, /* 11011101 */ + 0x77, /* 01110111 */ + 0xdd, /* 11011101 */ + 0x77, /* 01110111 */ + 0xdd, /* 11011101 */ + 0x77, /* 01110111 */ + + /* 179 0xb3 '' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 180 0xb4 '' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0xf8, /* 11111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 181 0xb5 '' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0xf8, /* 11111000 */ + 0x18, /* 00011000 */ + 0xf8, /* 11111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 182 0xb6 '' */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0xf6, /* 11110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* 183 0xb7 '' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* 184 0xb8 '' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xf8, /* 11111000 */ + 0x18, /* 00011000 */ + 0xf8, /* 11111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 185 0xb9 '' */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0xf6, /* 11110110 */ + 0x06, /* 00000110 */ + 0xf6, /* 11110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* 186 0xba '' */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* 187 0xbb '' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0x06, /* 00000110 */ + 0xf6, /* 11110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* 188 0xbc ' ' */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0xf6, /* 11110110 */ + 0x06, /* 00000110 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 189 0xbd ' ' */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 190 0xbe ' ' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0xf8, /* 11111000 */ + 0x18, /* 00011000 */ + 0xf8, /* 11111000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 191 0xbf ' ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xf8, /* 11111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 192 0xc0 ' ' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x1f, /* 00011111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 193 0xc1 ' ' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 194 0xc2 ' ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 195 0xc3 ' ' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x1f, /* 00011111 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 196 0xc4 ' ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 197 0xc5 ' ' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0xff, /* 11111111 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 198 0xc6 ' ' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x1f, /* 00011111 */ + 0x18, /* 00011000 */ + 0x1f, /* 00011111 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 199 0xc7 ' ' */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x37, /* 00110111 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* 200 0xc8 ' ' */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x37, /* 00110111 */ + 0x30, /* 00110000 */ + 0x3f, /* 00111111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 201 0xc9 ' ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x3f, /* 00111111 */ + 0x30, /* 00110000 */ + 0x37, /* 00110111 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* 202 0xca ' ' */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0xf7, /* 11110111 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 203 0xcb ' ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0xf7, /* 11110111 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* 204 0xcc ' ' */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x37, /* 00110111 */ + 0x30, /* 00110000 */ + 0x37, /* 00110111 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* 205 0xcd ' ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 206 0xce ' ' */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0xf7, /* 11110111 */ + 0x00, /* 00000000 */ + 0xf7, /* 11110111 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* 207 0xcf ' ' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 208 0xd0 ' ' */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 209 0xd1 ' ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 210 0xd2 ' ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* 211 0xd3 ' ' */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x3f, /* 00111111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 212 0xd4 ' ' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x1f, /* 00011111 */ + 0x18, /* 00011000 */ + 0x1f, /* 00011111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 213 0xd5 ' ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x1f, /* 00011111 */ + 0x18, /* 00011000 */ + 0x1f, /* 00011111 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 214 0xd6 ' ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x3f, /* 00111111 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* 215 0xd7 ' ' */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0xff, /* 11111111 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* 216 0xd8 ' ' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0xff, /* 11111111 */ + 0x18, /* 00011000 */ + 0xff, /* 11111111 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 217 0xd9 ' ' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0xf8, /* 11111000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 218 0xda ' ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x1f, /* 00011111 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 219 0xdb ' ' */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + + /* 220 0xdc ' ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + + /* 221 0xdd ' ' */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + + /* 222 0xde ' ' */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + + /* 223 0xdf ' ' */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 224 0xe0 ' ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x76, /* 01110110 */ + 0xdc, /* 11011100 */ + 0xd8, /* 11011000 */ + 0xd8, /* 11011000 */ + 0xd8, /* 11011000 */ + 0xdc, /* 11011100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 225 0xe1 ' ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x78, /* 01111000 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xd8, /* 11011000 */ + 0xcc, /* 11001100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xcc, /* 11001100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 226 0xe2 ' ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 227 0xe3 ' ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 228 0xe4 ' ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0xc6, /* 11000110 */ + 0x60, /* 01100000 */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 229 0xe5 ' ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0xd8, /* 11011000 */ + 0xd8, /* 11011000 */ + 0xd8, /* 11011000 */ + 0xd8, /* 11011000 */ + 0xd8, /* 11011000 */ + 0x70, /* 01110000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 230 0xe6 ' ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x7c, /* 01111100 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0xc0, /* 11000000 */ + 0x00, /* 00000000 */ + + /* 231 0xe7 ' ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x76, /* 01110110 */ + 0xdc, /* 11011100 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 232 0xe8 ' ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 233 0xe9 ' ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x6c, /* 01101100 */ + 0x38, /* 00111000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 234 0xea ' ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0xee, /* 11101110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 235 0xeb ' ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x1e, /* 00011110 */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x0c, /* 00001100 */ + 0x3e, /* 00111110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 236 0xec ' ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0xdb, /* 11011011 */ + 0xdb, /* 11011011 */ + 0xdb, /* 11011011 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 237 0xed ' ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x03, /* 00000011 */ + 0x06, /* 00000110 */ + 0x7e, /* 01111110 */ + 0xdb, /* 11011011 */ + 0xdb, /* 11011011 */ + 0xf3, /* 11110011 */ + 0x7e, /* 01111110 */ + 0x60, /* 01100000 */ + 0xc0, /* 11000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 238 0xee ' ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x1c, /* 00011100 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0x7c, /* 01111100 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0x30, /* 00110000 */ + 0x1c, /* 00011100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 239 0xef ' ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 240 0xf0 ' ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 241 0xf1 '' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 242 0xf2 ' ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x0c, /* 00001100 */ + 0x06, /* 00000110 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 243 0xf3 ' ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x0c, /* 00001100 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 244 0xf4 ' ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x0e, /* 00001110 */ + 0x1b, /* 00011011 */ + 0x1b, /* 00011011 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 245 0xf5 ' ' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0xd8, /* 11011000 */ + 0xd8, /* 11011000 */ + 0xd8, /* 11011000 */ + 0x70, /* 01110000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 246 0xf6 ' ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 247 0xf7 ' ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x76, /* 01110110 */ + 0xdc, /* 11011100 */ + 0x00, /* 00000000 */ + 0x76, /* 01110110 */ + 0xdc, /* 11011100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 248 0xf8 ' ' */ + 0x00, /* 00000000 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0x38, /* 00111000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 249 0xf9 ' ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 250 0xfa ' ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 251 0xfb ' ' */ + 0x00, /* 00000000 */ + 0x0f, /* 00001111 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0xec, /* 11101100 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0x3c, /* 00111100 */ + 0x1c, /* 00011100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 252 0xfc '' */ + 0x00, /* 00000000 */ + 0x6c, /* 01101100 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 253 0xfd '' */ + 0x00, /* 00000000 */ + 0x3c, /* 00111100 */ + 0x66, /* 01100110 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x32, /* 00110010 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 254 0xfe ' ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0x7e, /* 01111110 */ + 0x7e, /* 01111110 */ + 0x7e, /* 01111110 */ + 0x7e, /* 01111110 */ + 0x7e, /* 01111110 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 255 0xff '' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + +}; + + diff --git a/wii/libogc/libogc/decrementer.c b/wii/libogc/libogc/decrementer.c new file mode 100644 index 0000000000..eb1c962c33 --- /dev/null +++ b/wii/libogc/libogc/decrementer.c @@ -0,0 +1,47 @@ +/*------------------------------------------------------------- + +decrementer.c -- PPC decrementer exception support + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + + +-------------------------------------------------------------*/ + + +#include +#include +#include "asm.h" +#include "processor.h" +#include "lwp_threads.h" +#include "lwp_watchdog.h" +#include "context.h" + +void __decrementer_init() +{ +} + +void c_decrementer_handler(frame_context *ctx) +{ + __lwp_wd_tickle_ticks(); +} diff --git a/wii/libogc/libogc/decrementer_handler.S b/wii/libogc/libogc/decrementer_handler.S new file mode 100644 index 0000000000..6e824d94be --- /dev/null +++ b/wii/libogc/libogc/decrementer_handler.S @@ -0,0 +1,167 @@ +/*------------------------------------------------------------- + +decrementer_handler.S -- PPC decrementer exception support + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + + +-------------------------------------------------------------*/ + + +#include + +#define EXCEPTION_PROLOG \ + mfspr r0,912; \ + stw r0,GQR0_OFFSET(sp); \ + mfspr r0,913; \ + stw r0,GQR1_OFFSET(sp); \ + mfspr r0,914; \ + stw r0,GQR2_OFFSET(sp); \ + mfspr r0,915; \ + stw r0,GQR3_OFFSET(sp); \ + mfspr r0,916; \ + stw r0,GQR4_OFFSET(sp); \ + mfspr r0,917; \ + stw r0,GQR5_OFFSET(sp); \ + mfspr r0,918; \ + stw r0,GQR6_OFFSET(sp); \ + mfspr r0,919; \ + stw r0,GQR7_OFFSET(sp); \ + stw r6,GPR6_OFFSET(sp); \ + stw r7,GPR7_OFFSET(sp); \ + stw r8,GPR8_OFFSET(sp); \ + stw r9,GPR9_OFFSET(sp); \ + stw r10,GPR10_OFFSET(sp); \ + stw r11,GPR11_OFFSET(sp); \ + stw r12,GPR12_OFFSET(sp); \ + stw r13,GPR13_OFFSET(sp); \ + stw r14,GPR14_OFFSET(sp); \ + stw r15,GPR15_OFFSET(sp) + +#define EXCEPTION_EPILOG \ + lwz r4,GQR0_OFFSET(sp); \ + mtspr 912,r4; \ + lwz r4,GQR1_OFFSET(sp); \ + mtspr 913,r4; \ + lwz r4,GQR2_OFFSET(sp); \ + mtspr 914,r4; \ + lwz r4,GQR3_OFFSET(sp); \ + mtspr 915,r4; \ + lwz r4,GQR4_OFFSET(sp); \ + mtspr 916,r4; \ + lwz r4,GQR5_OFFSET(sp); \ + mtspr 917,r4; \ + lwz r4,GQR6_OFFSET(sp); \ + mtspr 918,r4; \ + lwz r4,GQR7_OFFSET(sp); \ + mtspr 919,r4; \ + lwz r15,GPR15_OFFSET(sp); \ + lwz r14,GPR14_OFFSET(sp); \ + lwz r13,GPR13_OFFSET(sp); \ + lwz r12,GPR12_OFFSET(sp); \ + lwz r11,GPR11_OFFSET(sp); \ + lwz r10,GPR10_OFFSET(sp); \ + lwz r9,GPR9_OFFSET(sp); \ + lwz r8,GPR8_OFFSET(sp); \ + lwz r7,GPR7_OFFSET(sp); \ + lwz r6,GPR6_OFFSET(sp); \ + lwz r5,GPR5_OFFSET(sp) + + .extern c_decrementer_handler + .globl dec_exceptionhandler +dec_exceptionhandler: + stwu sp,-EXCEPTION_FRAME_END(sp) //now we're able to adjust the stackpointer with it's cached address + + EXCEPTION_PROLOG + + mfmsr r3 + ori r3,r3,MSR_RI + mtmsr r3 + isync + + addi r14,sp,0 + lis r15,_thread_dispatch_disable_level@ha + + mfspr r3,SPRG0 + cmpwi r3,0 + bne nested + mfspr sp,SPRG1 + +nested: + addi r3,r3,1 + lwz r6,_thread_dispatch_disable_level@l(r15) + mtspr SPRG0,r3 + addi r6,r6,1 + stw r6,_thread_dispatch_disable_level@l(r15) + + addi r3,r14,0x08 + bl c_decrementer_handler + + mfspr r4,SPRG0 + lwz r3,_thread_dispatch_disable_level@l(r15) + addi r4,r4,-1 + addic. r3,r3,-1 + mtspr SPRG0,r4 + stw r3,_thread_dispatch_disable_level@l(r15) + addi sp,r14,0 + bne easy_exit + + lis r4,_context_switch_want@ha + lwz r5,_context_switch_want@l(r4) + cmpwi r5,0 + beq easy_exit + +switch: + bl __thread_dispatch + +easy_exit: + lwz r4,CR_OFFSET(sp) + mtcr r4 + lwz r4,LR_OFFSET(sp) + mtlr r4 + lwz r4,CTR_OFFSET(sp) + mtctr r4 + lwz r4,XER_OFFSET(sp) + mtxer r4 + + EXCEPTION_EPILOG + + mfmsr r4 + rlwinm r4,r4,0,31,29 + mtmsr r4 + isync + + lwz r0,GPR0_OFFSET(sp) + lwz toc,GPR2_OFFSET(sp) + + lwz r4,SRR0_OFFSET(sp) + mtsrr0 r4 + lwz r4,SRR1_OFFSET(sp) + rlwinm r4, r4, 0, 19, 17 + mtsrr1 r4 + + lwz r4,GPR4_OFFSET(sp) + lwz r3,GPR3_OFFSET(sp) + addi sp,sp,EXCEPTION_FRAME_END + rfi diff --git a/wii/libogc/libogc/depackrnc.S b/wii/libogc/libogc/depackrnc.S new file mode 100644 index 0000000000..18b70e3b65 --- /dev/null +++ b/wii/libogc/libogc/depackrnc.S @@ -0,0 +1,279 @@ +#include + +/**********************************/ +/* register map */ +/* */ +/* r0 = tmp */ +/* r3 = in = r2 */ +/* r4 = out = r4 */ +/* r5 = A = r5 */ +/* r6 = X = r6 */ +/* r7 = Y = r7 */ +/* r8 = carry flag = r3 */ +/* r10 = tmp = r8 */ +/* r11 = store data = r9 */ +/* r29 = copy in(r3) = r0 */ +/* r30 = copy out(r4) = r1 */ +/* */ +/**********************************/ + +#define LOAD \ + lbzu r5,1(r29); \ + slwi r5,r5,1; \ + insrwi r5,r8,1,31; \ + extrwi r8,r5,1,23; \ + clrlwi. r5,r5,24 + +#define GETBIT \ + slwi r5,r5,1; \ + extrwi r8,r5,1,23; \ + clrlwi. r5,r5,24 + +#define COPYRAW \ + lbzu r11,1(r29); \ + stbu r11,1(r30) + + //r3 is input, r4 is output + .globl depackrnc2 +depackrnc2: + mflr r0 + stw r0,4(sp) + stwu sp,-64(sp) + stw r3,8(sp) + stw r4,12(sp) + stw r29,48(sp) + mr r29,r3 + stw r30,52(sp) + mr r30,r4 + + li r8,1 + addi r30,r30,-1 + addi r29,r29,17 + + LOAD + GETBIT + b _xloop + +_fetch3: + LOAD + b _back3 +_fetch4: + LOAD + b _back4 +_fetch5: + LOAD + b _back5 +_fetch6: + LOAD + b _back6 +_fetch7: + LOAD + b _back7 + +_raw: + li r7,4 +_x4bits: + GETBIT + beq _fetch7 +_back7: + slwi r6,r6,1 //ROL(X) + insrwi r6,r8,1,31 + extrwi r8,r6,1,23 + clrlwi r6,r6,24 + + subic. r7,r7,1 + bne _x4bits + addi r7,r6,3 + + slwi r7,r7,1 //ROL(Y) + insrwi r7,r8,1,31 + extrwi r8,r7,1,23 + clrlwi r7,r7,24 +_rawlpb: + COPYRAW + COPYRAW + + subic. r7,r7,1 + bne _rawlpb + b _xloop + +_fetch0: + LOAD + rlwinm. r0,r8,0,31,31 + bne _smalls +_getlen: + GETBIT + beq _fetch3 +_back3: + slwi r7,r7,1 //ROL(Y) + insrwi r7,r8,1,31 + extrwi r8,r7,1,23 + clrlwi r7,r7,24 + + GETBIT + beq _fetch4 +_back4: + rlwinm. r0,r8,0,31,31 + beq _copy + + GETBIT + beq _fetch5 +_back5: + subic r7,r7,1 + slwi r7,r7,1 //ROL(Y) + insrwi r7,r8,1,31 + extrwi r8,r7,1,23 + clrlwi r7,r7,24 + + cmpwi r7,9 + beq _raw + +_copy: + GETBIT + beq _fetch6 +_back6: + rlwinm. r0,r8,0,31,31 + beq _bytedisp + + GETBIT + bne _skip0 + + LOAD +_skip0: + slwi r6,r6,1 //ROL(X) + insrwi r6,r8,1,31 + extrwi r8,r6,1,23 + clrlwi r6,r6,24 + + slwi r5,r5,1 //ROL(A) + insrwi r5,r8,1,31 + extrwi r8,r5,1,23 + clrlwi. r5,r5,24 + bne _skip1 + + LOAD +_skip1: + rlwinm. r0,r8,0,31,31 + bne _bigdisp + cmpwi r6,0 + bne _bytedisp + addic r6,r6,1 + +_another: + GETBIT + bne _dispx + + LOAD +_dispx: + slwi r6,r6,1 //ROL(X) + insrwi r6,r8,1,31 + extrwi r8,r6,1,23 + clrlwi r6,r6,24 + +_bytedisp: + lbzu r8,1(r29) + andi. r10,r30,0xff + sub r8,r10,r8 + srwi r10,r30,8 + sub r10,r10,r6 + slwi r10,r10,8 + add r8,r8,r10 + subic r8,r8,1 +_bytelp: + lbzu r11,1(r8) + stbu r11,1(r30) + + subic. r7,r7,1 + bne _bytelp + b _xloop + +_getbits: + LOAD + rlwinm. r0,r8,0,31,31 + bne _string +_xbyte: + COPYRAW +_xloop: + GETBIT + rlwinm. r0,r8,0,31,31 + bne _chkz + + COPYRAW + + GETBIT + rlwinm. r0,r8,0,31,31 + beq _xbyte + + li r8,1 +_chkz: + rlwinm. r0,r5,0,24,31 + beq _getbits + +_string: + li r6,0 + li r7,2 + GETBIT + beq _fetch0 + rlwinm. r0,r8,0,31,31 + beq _getlen +_smalls: + GETBIT + beq _fetch1 +_back1: + rlwinm. r0,r8,0,31,31 + beq _bytedisp + + addic r7,r7,1 + + GETBIT + beq _fetch2 +_back2: + rlwinm. r0,r8,0,31,31 + beq _copy + lbzu r7,1(r29) + cmpwi r7,0 + beq _overnout + addic r7,r7,8 + b _copy + +_bigdisp: + GETBIT + bne _skip2 + LOAD +_skip2: + slwi r6,r6,1 //ROL(X) + insrwi r6,r8,1,31 + extrwi r8,r6,1,23 + clrlwi r6,r6,24 + ori r6,r6,4 + + GETBIT + bne _skip3 + LOAD +_skip3: + rlwinm. r0,r8,0,31,31 + bne _bytedisp + b _another + +_fetch1: + LOAD + b _back1 +_fetch2: + LOAD + b _back2 +_overnout: + GETBIT + bne _check4end + LOAD +_check4end: + rlwinm. r0,r8,0,31,31 + bne _xloop + + lwz r29,48(sp) + lwz r30,52(sp) + lwz r4,12(sp) + lwz r3,8(sp) + lwz r0,68(sp) + addi sp,sp,64 + mtlr r0 + blr diff --git a/wii/libogc/libogc/depackrnc1.c b/wii/libogc/libogc/depackrnc1.c new file mode 100644 index 0000000000..e9bb782e5e --- /dev/null +++ b/wii/libogc/libogc/depackrnc1.c @@ -0,0 +1,309 @@ +#include + +#define RNC_SIGNATURE 0x524E4301 /* "RNC\001" */ + +typedef struct { + unsigned long bitbuf; /* holds between 16 and 32 bits */ + int bitcount; /* how many bits does bitbuf hold? */ +} bit_stream; + +typedef struct { + int num; /* number of nodes in the tree */ + struct { + unsigned long code; + int codelen; + int value; + } table[32]; +} huf_table; + +static long rnc_crc (void *data, long len); +static void read_huftable (huf_table *h, bit_stream *bs, unsigned char **p); +static unsigned long huf_read (huf_table *h, bit_stream *bs,unsigned char **p); + +static void bitread_init (bit_stream *bs, unsigned char **p); +static void bitread_fix (bit_stream *bs, unsigned char **p); +static unsigned long bit_peek (bit_stream *bs, unsigned long mask); +static void bit_advance (bit_stream *bs, int n, unsigned char **p); +static unsigned long bit_read (bit_stream *bs, unsigned long mask,int n, unsigned char **p); + +static unsigned long blong (unsigned char *p); +static unsigned long bword (unsigned char *p); +static unsigned long lword (unsigned char *p); + +static unsigned long mirror (unsigned long x, int n); + +s32 depackrnc1_ulen(void *packed) +{ + unsigned char *p = packed; + if (blong (p) != RNC_SIGNATURE) + return RNC_FILE_IS_NOT_RNC; + return blong (p+4); +} + +s32 depackrnc1(void *packed,void *unpacked) +{ + unsigned char *input = packed; + unsigned char *output = unpacked; + unsigned char *inputend, *outputend; + bit_stream bs; + huf_table raw, dist, len; + unsigned long ch_count; + unsigned long ret_len; + unsigned out_crc; + + if (blong(input) != RNC_SIGNATURE) + return RNC_FILE_IS_NOT_RNC; + ret_len = blong (input+4); + outputend = output + ret_len; + inputend = input + 18 + blong(input+8); + + input += 18; /* skip header */ + + /* + * Check the packed-data CRC. Also save the unpacked-data CRC + * for later. + */ + if (rnc_crc(input, inputend-input) != bword(input-4)) + return RNC_PACKED_CRC_ERROR; + out_crc = bword(input-6); + + bitread_init (&bs, &input); + bit_advance (&bs, 2, &input); /* discard first two bits */ + + /* + * Process chunks. + */ + while (output < outputend) { + read_huftable (&raw, &bs, &input); + read_huftable (&dist, &bs, &input); + read_huftable (&len, &bs, &input); + ch_count = bit_read (&bs, 0xFFFF, 16, &input); + + while (1) { + long length, posn; + + length = huf_read (&raw, &bs, &input); + if (length == -1) + return RNC_HUF_DECODE_ERROR; + if (length) { + while (length--) + *output++ = *input++; + bitread_fix (&bs, &input); + } + if (--ch_count <= 0) + break; + + posn = huf_read (&dist, &bs, &input); + if (posn == -1) + return RNC_HUF_DECODE_ERROR; + length = huf_read (&len, &bs, &input); + if (length == -1) + return RNC_HUF_DECODE_ERROR; + posn += 1; + length += 2; + while (length--) { + *output = output[-posn]; + output++; + } + } + } + if (outputend != output) + return RNC_FILE_SIZE_MISMATCH; + + if (rnc_crc(outputend-ret_len, ret_len) != out_crc) + return RNC_UNPACKED_CRC_ERROR; + + return ret_len; +} + +/* + * Read a Huffman table out of the bit stream and data stream given. + */ +static void read_huftable (huf_table *h, bit_stream *bs, unsigned char **p) { + int i, j, k, num; + int leaflen[32]; + int leafmax; + unsigned long codeb; /* big-endian form of code */ + + num = bit_read (bs, 0x1F, 5, p); + if (!num) + return; + + leafmax = 1; + for (i=0; itable[k].code = mirror (codeb, i); + h->table[k].codelen = i; + h->table[k].value = j; + codeb++; + k++; + } + codeb <<= 1; + } + + h->num = k; +} + +/* + * Read a value out of the bit stream using the given Huffman table. + */ +static unsigned long huf_read (huf_table *h, bit_stream *bs, + unsigned char **p) { + int i; + unsigned long val; + + for (i=0; inum; i++) { + unsigned long mask = (1 << h->table[i].codelen) - 1; + if (bit_peek(bs, mask) == h->table[i].code) + break; + } + if (i == h->num) + return -1; + bit_advance (bs, h->table[i].codelen, p); + + val = h->table[i].value; + + if (val >= 2) { + val = 1 << (val-1); + val |= bit_read (bs, val-1, h->table[i].value - 1, p); + } + return val; +} + +/* + * Initialises a bit stream with the first two bytes of the packed + * data. + */ +static void bitread_init (bit_stream *bs, unsigned char **p) { + bs->bitbuf = lword (*p); + bs->bitcount = 16; +} + +/* + * Fixes up a bit stream after literals have been read out of the + * data stream. + */ +static void bitread_fix (bit_stream *bs, unsigned char **p) { + bs->bitcount -= 16; + bs->bitbuf &= (1<bitcount)-1; /* remove the top 16 bits */ + bs->bitbuf |= (lword(*p)<bitcount);/* replace with what's at *p */ + bs->bitcount += 16; +} + +/* + * Returns some bits. + */ +static unsigned long bit_peek (bit_stream *bs, unsigned long mask) { + return bs->bitbuf & mask; +} + +/* + * Advances the bit stream. + */ +static void bit_advance (bit_stream *bs, int n, unsigned char **p) { + bs->bitbuf >>= n; + bs->bitcount -= n; + if (bs->bitcount < 16) { + (*p) += 2; + bs->bitbuf |= (lword(*p)<bitcount); + bs->bitcount += 16; + } +} + +/* + * Reads some bits in one go (ie the above two routines combined). + */ +static unsigned long bit_read (bit_stream *bs, unsigned long mask, + int n, unsigned char **p) { + unsigned long result = bit_peek (bs, mask); + bit_advance (bs, n, p); + return result; +} + +/* + * Return the big-endian longword at p. + */ +static unsigned long blong (unsigned char *p) { + unsigned long n; + n = p[0]; + n = (n << 8) + p[1]; + n = (n << 8) + p[2]; + n = (n << 8) + p[3]; + return n; +} + +/* + * Return the big-endian word at p. + */ +static unsigned long bword (unsigned char *p) { + unsigned long n; + n = p[0]; + n = (n << 8) + p[1]; + return n; +} + +/* + * Return the little-endian word at p. + */ +static unsigned long lword (unsigned char *p) { + unsigned long n; + n = p[1]; + n = (n << 8) + p[0]; + return n; +} + +/* + * Mirror the bottom n bits of x. + */ +static unsigned long mirror (unsigned long x, int n) { + unsigned long top = 1 << (n-1), bottom = 1; + while (top > bottom) { + unsigned long mask = top | bottom; + unsigned long masked = x & mask; + if (masked != 0 && masked != mask) + x ^= mask; + top >>= 1; + bottom <<= 1; + } + return x; +} + +/* + * Calculate a CRC, the RNC way. It re-computes its CRC table every + * time it's run, but who cares? ;-) + */ +static long rnc_crc (void *data, long len) { + unsigned short crctab[256]; + unsigned short val; + int i, j; + unsigned char *p = data; + + for (i=0; i<256; i++) { + val = i; + + for (j=0; j<8; j++) { + if (val & 1) + val = (val >> 1) ^ 0xA001; + else + val = (val >> 1); + } + crctab[i] = val; + } + + val = 0; + while (len--) { + val ^= *p++; + val = (val >> 8) ^ crctab[val & 0xFF]; + } + + return val; +} diff --git a/wii/libogc/libogc/dsp.c b/wii/libogc/libogc/dsp.c new file mode 100644 index 0000000000..01b16f8013 --- /dev/null +++ b/wii/libogc/libogc/dsp.c @@ -0,0 +1,459 @@ +/*------------------------------------------------------------- + +dsp.c -- DSP subsystem + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + + +-------------------------------------------------------------*/ + + +#include +#include +#include "asm.h" +#include "processor.h" +#include "irq.h" +#include "dsp.h" + +// DSPCR bits +#define DSPCR_DSPRESET 0x0800 // Reset DSP +#define DSPCR_DSPDMA 0x0200 // ARAM dma in progress, if set +#define DSPCR_DSPINTMSK 0x0100 // * interrupt mask (RW) +#define DSPCR_DSPINT 0x0080 // * interrupt active (RWC) +#define DSPCR_ARINTMSK 0x0040 +#define DSPCR_ARINT 0x0020 +#define DSPCR_AIINTMSK 0x0010 +#define DSPCR_AIINT 0x0008 +#define DSPCR_HALT 0x0004 // halt DSP +#define DSPCR_PIINT 0x0002 // assert DSP PI interrupt +#define DSPCR_RES 0x0001 // reset DSP + +#define _SHIFTL(v, s, w) \ + ((u32) (((u32)(v) & ((0x01 << (w)) - 1)) << (s))) +#define _SHIFTR(v, s, w) \ + ((u32)(((u32)(v) >> (s)) & ((0x01 << (w)) - 1))) + +static u32 __dsp_inited = FALSE; +static u32 __dsp_rudetask_pend = FALSE; +static DSPCallback __dsp_intcb = NULL; +static dsptask_t *__dsp_currtask,*__dsp_lasttask,*__dsp_firsttask,*__dsp_rudetask,*tmp_task; + +static vu16* const _dspReg = (u16*)0xCC005000; + +static void __dsp_inserttask(dsptask_t *task) +{ + dsptask_t *t; + + if(!__dsp_firsttask) { + __dsp_currtask = task; + __dsp_lasttask = task; + __dsp_firsttask = task; + task->next = NULL; + task->prev = NULL; + return; + } + + t = __dsp_firsttask; + while(t) { + if(task->prioprio) { + task->prev = t->prev; + t->prev = task; + task->next = t; + if(!task->prev) { + __dsp_firsttask = task; + break; + } else { + task->prev->next = task; + break; + } + } + t = t->next; + } + if(t) return; + + __dsp_lasttask->next = task; + task->next = NULL; + task->prev = __dsp_lasttask; + __dsp_lasttask = task; +} + +static void __dsp_removetask(dsptask_t *task) +{ + task->flags = DSPTASK_CLEARALL; + task->state = DSPTASK_DONE; + if(__dsp_firsttask==task) { + if(task->next) { + __dsp_firsttask = task->next; + __dsp_firsttask->prev = NULL; + return; + } + __dsp_currtask = NULL; + __dsp_lasttask = NULL; + __dsp_firsttask = NULL; + return; + } + if(__dsp_lasttask==task) { + __dsp_lasttask = task->prev; + __dsp_lasttask->next = NULL; + __dsp_currtask = __dsp_firsttask; + return; + } + __dsp_currtask = __dsp_currtask->next; +} + +static void __dsp_boottask(dsptask_t *task) +{ + u32 mail; + while(!DSP_CheckMailFrom()); + mail = DSP_ReadMailFrom(); + DSP_SendMailTo(0x80F3A001); + while(DSP_CheckMailTo()); + DSP_SendMailTo((u32)task->iram_maddr); + while(DSP_CheckMailTo()); + DSP_SendMailTo(0x80F3C002); + while(DSP_CheckMailTo()); + DSP_SendMailTo((task->iram_addr&0xffff)); + while(DSP_CheckMailTo()); + DSP_SendMailTo(0x80F3A002); + while(DSP_CheckMailTo()); + DSP_SendMailTo(task->iram_len); + while(DSP_CheckMailTo()); + DSP_SendMailTo(0x80F3B002); + while(DSP_CheckMailTo()); + DSP_SendMailTo(0); + while(DSP_CheckMailTo()); + DSP_SendMailTo(0x80F3D001); + while(DSP_CheckMailTo()); + DSP_SendMailTo(task->init_vec); + while(DSP_CheckMailTo()); +} + +static void __dsp_exectask(dsptask_t *exec,dsptask_t *hire) +{ + if(!exec) { + DSP_SendMailTo(0); + while(DSP_CheckMailTo()); + DSP_SendMailTo(0); + while(DSP_CheckMailTo()); + DSP_SendMailTo(0); + while(DSP_CheckMailTo()); + } else { + DSP_SendMailTo((u32)exec->dram_maddr); + while(DSP_CheckMailTo()); + DSP_SendMailTo(exec->dram_len); + while(DSP_CheckMailTo()); + DSP_SendMailTo(exec->dram_addr); + while(DSP_CheckMailTo()); + } + + DSP_SendMailTo((u32)hire->iram_maddr); + while(DSP_CheckMailTo()); + DSP_SendMailTo(hire->iram_len); + while(DSP_CheckMailTo()); + DSP_SendMailTo(hire->iram_addr); + while(DSP_CheckMailTo()); + if(hire->state==DSPTASK_INIT) { + DSP_SendMailTo(hire->init_vec); + while(DSP_CheckMailTo()); + DSP_SendMailTo(0); + while(DSP_CheckMailTo()); + DSP_SendMailTo(0); + while(DSP_CheckMailTo()); + DSP_SendMailTo(0); + while(DSP_CheckMailTo()); + return; + } + + DSP_SendMailTo(hire->resume_vec); + while(DSP_CheckMailTo()); + + DSP_SendMailTo((u32)hire->dram_maddr); + while(DSP_CheckMailTo()); + DSP_SendMailTo(hire->dram_len); + while(DSP_CheckMailTo()); + DSP_SendMailTo(hire->dram_addr); + while(DSP_CheckMailTo()); +} + +static void __dsp_def_taskcb() +{ + u32 mail; + while(!DSP_CheckMailFrom()); + + mail = DSP_ReadMailFrom(); + if(__dsp_currtask->flags&DSPTASK_CANCEL) { + if(mail==0xDCD10002) mail = 0xDCD10003; + } + + switch(mail) { + case 0xDCD10000: + __dsp_currtask->state = DSPTASK_RUN; + if(__dsp_currtask->init_cb) __dsp_currtask->init_cb(__dsp_currtask); + break; + case 0xDCD10001: + __dsp_currtask->state = DSPTASK_RUN; + if(__dsp_currtask->res_cb) __dsp_currtask->res_cb(__dsp_currtask); + break; + case 0xDCD10002: + if(__dsp_rudetask_pend==TRUE) { + if(__dsp_rudetask==__dsp_currtask) { + DSP_SendMailTo(0xCDD10003); + while(DSP_CheckMailTo()); + + __dsp_rudetask = NULL; + __dsp_rudetask_pend = FALSE; + if(__dsp_currtask->res_cb) __dsp_currtask->res_cb(__dsp_currtask); + } else { + DSP_SendMailTo(0xCDD10001); + while(DSP_CheckMailTo()); + + __dsp_exectask(__dsp_currtask,__dsp_rudetask); + __dsp_currtask->flags = DSPTASK_YIELD; + __dsp_currtask = __dsp_rudetask; + __dsp_rudetask = NULL; + __dsp_rudetask_pend = FALSE; + } + } else if(__dsp_currtask->next==NULL) { + if(__dsp_firsttask==__dsp_currtask) { + DSP_SendMailTo(0xCDD10003); + while(DSP_CheckMailTo()); + + if(__dsp_currtask->res_cb) __dsp_currtask->res_cb(__dsp_currtask); + } else { + DSP_SendMailTo(0xCDD10001); + while(DSP_CheckMailTo()); + + __dsp_exectask(__dsp_currtask,__dsp_firsttask); + __dsp_currtask->state = DSPTASK_YIELD; + __dsp_currtask = __dsp_firsttask; + } + } else { + DSP_SendMailTo(0xCDD10001); + while(DSP_CheckMailTo()); + + __dsp_exectask(__dsp_currtask,__dsp_currtask->next); + __dsp_currtask->state = DSPTASK_YIELD; + __dsp_currtask = __dsp_currtask->next; + } + break; + case 0xDCD10003: + if(__dsp_rudetask_pend==TRUE) { + if(__dsp_currtask->done_cb) __dsp_currtask->done_cb(__dsp_currtask); + DSP_SendMailTo(0xCDD10001); + while(DSP_CheckMailTo()); + + __dsp_exectask(NULL,__dsp_rudetask); + __dsp_removetask(__dsp_currtask); + + __dsp_currtask = __dsp_rudetask; + __dsp_rudetask_pend = FALSE; + __dsp_rudetask = NULL; + } else if(__dsp_currtask->next==NULL) { + if(__dsp_firsttask==__dsp_currtask) { + if(__dsp_currtask->done_cb) __dsp_currtask->done_cb(__dsp_currtask); + DSP_SendMailTo(0xCDD10002); + while(DSP_CheckMailTo()); + + __dsp_currtask->state = DSPTASK_DONE; + __dsp_removetask(__dsp_currtask); + } + } else { + if(__dsp_currtask->done_cb) __dsp_currtask->done_cb(__dsp_currtask); + + DSP_SendMailTo(0xCDD10001); + while(DSP_CheckMailTo()); + + __dsp_currtask->state = DSPTASK_DONE; + __dsp_exectask(NULL,__dsp_firsttask); + __dsp_currtask = __dsp_firsttask; + __dsp_removetask(__dsp_lasttask); + } + break; + case 0xDCD10004: + if(__dsp_currtask->req_cb) __dsp_currtask->req_cb(__dsp_currtask); + break; + } + +} + +static void __dsp_inthandler(u32 nIrq,void *pCtx) +{ + _dspReg[5] = (_dspReg[5]&~(DSPCR_AIINT|DSPCR_ARINT))|DSPCR_DSPINT; + if(__dsp_intcb) __dsp_intcb(); +} + +void DSP_Init() +{ + u32 level; + _CPU_ISR_Disable(level); + if(__dsp_inited==FALSE) { + __dsp_intcb= __dsp_def_taskcb; + + IRQ_Request(IRQ_DSP_DSP,__dsp_inthandler,NULL); + __UnmaskIrq(IRQMASK(IRQ_DSP_DSP)); + + _dspReg[5] = (_dspReg[5]&~(DSPCR_AIINT|DSPCR_ARINT|DSPCR_DSPINT))|DSPCR_DSPRESET; + _dspReg[5] = (_dspReg[5]&~(DSPCR_HALT|DSPCR_AIINT|DSPCR_ARINT|DSPCR_DSPINT)); + + __dsp_currtask = NULL; + __dsp_firsttask = NULL; + __dsp_lasttask = NULL; + tmp_task = NULL; + __dsp_inited = TRUE; + } + _CPU_ISR_Restore(level); +} + +DSPCallback DSP_RegisterCallback(DSPCallback usr_cb) +{ + u32 level; + DSPCallback ret; + _CPU_ISR_Disable(level); + ret = __dsp_intcb; + if(usr_cb) + __dsp_intcb = usr_cb; + else + __dsp_intcb = __dsp_def_taskcb; + _CPU_ISR_Restore(level); + + return ret; +} + +u32 DSP_CheckMailTo() +{ + return _SHIFTR(_dspReg[0],15,1); +} + +u32 DSP_CheckMailFrom() +{ + return _SHIFTR(_dspReg[2],15,1); +} + +u32 DSP_ReadMailFrom() +{ + return (_SHIFTL(_dspReg[2],16,16)|(_dspReg[3]&0xffff)); +} + +void DSP_SendMailTo(u32 mail) +{ + _dspReg[0] = _SHIFTR(mail,16,16); + _dspReg[1] = (mail&0xffff); +} + +u32 DSP_ReadCPUtoDSP() +{ + u32 cpu_dsp; + cpu_dsp = (_SHIFTL(_dspReg[0],16,16)|(_dspReg[1]&0xffff)); + return cpu_dsp; +} + +void DSP_AssertInt() +{ + u32 level; + _CPU_ISR_Disable(level); + _dspReg[5] = (_dspReg[5]&~(DSPCR_AIINT|DSPCR_ARINT|DSPCR_DSPINT))|DSPCR_PIINT; + _CPU_ISR_Restore(level); +} + +void DSP_Reset() +{ + u16 old; + u32 level; + + _CPU_ISR_Disable(level); + old = _dspReg[5]; + _dspReg[5] = (old&~(DSPCR_AIINT|DSPCR_ARINT|DSPCR_DSPINT))|(DSPCR_DSPRESET|DSPCR_RES); + _CPU_ISR_Restore(level); +} + +void DSP_Halt() +{ + u32 level,old; + + _CPU_ISR_Disable(level); + old = _dspReg[5]; + _dspReg[5] = (old&~(DSPCR_AIINT|DSPCR_ARINT|DSPCR_DSPINT))|DSPCR_HALT; + _CPU_ISR_Restore(level); +} + +void DSP_Unhalt() +{ + u32 level; + + _CPU_ISR_Disable(level); + _dspReg[5] = (_dspReg[5]&~(DSPCR_AIINT|DSPCR_ARINT|DSPCR_DSPINT|DSPCR_HALT)); + _CPU_ISR_Restore(level); +} + +u32 DSP_GetDMAStatus() +{ + return _dspReg[5]&DSPCR_DSPDMA; +} + +dsptask_t* DSP_AddTask(dsptask_t *task) +{ + u32 level; + _CPU_ISR_Disable(level); + __dsp_inserttask(task); + task->state = DSPTASK_INIT; + task->flags = DSPTASK_ATTACH; + _CPU_ISR_Restore(level); + + if(__dsp_firsttask==task) __dsp_boottask(task); + return task; +} + +void DSP_CancelTask(dsptask_t *task) +{ + u32 level; + + _CPU_ISR_Disable(level); + task->flags |= DSPTASK_CANCEL; + _CPU_ISR_Restore(level); +} + +dsptask_t* DSP_AssertTask(dsptask_t *task) +{ + u32 level; + dsptask_t *ret = NULL; + + _CPU_ISR_Disable(level); + if(task==__dsp_currtask) { + __dsp_rudetask = task; + __dsp_rudetask_pend = TRUE; + ret = task; + } else { + if(task->prio<__dsp_currtask->prio) { + __dsp_rudetask = task; + __dsp_rudetask_pend = TRUE; + if(__dsp_currtask->state==DSPTASK_RUN) + _dspReg[5] = ((_dspReg[5]&~(DSPCR_DSPINT|DSPCR_ARINT|DSPCR_AIINT))|DSPCR_PIINT); + + ret = task; + } + } + _CPU_ISR_Restore(level); + + return ret; +} diff --git a/wii/libogc/libogc/dvd.c b/wii/libogc/libogc/dvd.c new file mode 100644 index 0000000000..3156954609 --- /dev/null +++ b/wii/libogc/libogc/dvd.c @@ -0,0 +1,2432 @@ +/*------------------------------------------------------------- + +dvd.h -- DVD subsystem + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +Additionally following copyrights apply for the patching system: + * Copyright (C) 2005 The GameCube Linux Team + * Copyright (C) 2005 Albert Herranz + +Thanks alot guys for that incredible patch!! + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + + +-------------------------------------------------------------*/ +#include +#include +#include +#include +#include "asm.h" +#include "processor.h" +#include "cache.h" +#include "lwp.h" +#include "irq.h" +#include "ogcsys.h" +#include "system.h" +#include "dvd.h" + +#define DVD_BRK (1<<0) +#define DVD_DE_MSK (1<<1) +#define DVD_DE_INT (1<<2) +#define DVD_TC_MSK (1<<3) +#define DVD_TC_INT (1<<4) +#define DVD_BRK_MSK (1<<5) +#define DVD_BRK_INT (1<<6) + +#define DVD_CVR_INT (1<<2) +#define DVD_CVR_MSK (1<<1) +#define DVD_CVR_STATE (1<<0) + +#define DVD_DI_MODE (1<<2) +#define DVD_DI_DMA (1<<1) +#define DVD_DI_START (1<<0) + +#define DVD_DISKIDSIZE 0x20 +#define DVD_DRVINFSIZE 0x20 +#define DVD_MAXCOMMANDS 0x12 + +#define DVD_DVDINQUIRY 0x12000000 +#define DVD_FWSETOFFSET 0x32000000 +#define DVD_FWENABLEEXT 0x55000000 +#define DVD_READSECTOR 0xA8000000 +#define DVD_READDISKID 0xA8000040 +#define DVD_SEEKSECTOR 0xAB000000 +#define DVD_REQUESTERROR 0xE0000000 +#define DVD_AUDIOSTREAM 0xE1000000 +#define DVD_AUDIOSTATUS 0xE2000000 +#define DVD_STOPMOTOR 0xE3000000 +#define DVD_AUDIOCONFIG 0xE4000000 +#define DVD_FWSETSTATUS 0xEE000000 +#define DVD_FWWRITEMEM 0xFE010100 +#define DVD_FWREADMEM 0xFE010000 +#define DVD_FWCTRLMOTOR 0xFE110000 +#define DVD_FWFUNCCALL 0xFE120000 + +#define DVD_MODEL04 0x20020402 +#define DVD_MODEL06 0x20010608 +#define DVD_MODEL08 0x20020823 +#define DVD_MODEL08Q 0x20010831 + +#define DVD_FWIRQVECTOR 0x00804c + +#define DVD_DRIVERESET 0x00000001 +#define DVD_CHIPPRESENT 0x00000002 +#define DVD_INTEROPER 0x00000004 + +/* drive status, status */ +#define DVD_STATUS(s) ((u8)((s)>>24)) + +#define DVD_STATUS_READY 0x00 +#define DVD_STATUS_COVER_OPENED 0x01 +#define DVD_STATUS_DISK_CHANGE 0x02 +#define DVD_STATUS_NO_DISK 0x03 +#define DVD_STATUS_MOTOR_STOP 0x04 +#define DVD_STATUS_DISK_ID_NOT_READ 0x05 + +/* drive status, error */ +#define DVD_ERROR(s) ((u32)((s)&0x00ffffff)) + +#define DVD_ERROR_NO_ERROR 0x000000 +#define DVD_ERROR_MOTOR_STOPPED 0x020400 +#define DVD_ERROR_DISK_ID_NOT_READ 0x020401 +#define DVD_ERROR_MEDIUM_NOT_PRESENT 0x023a00 +#define DVD_ERROR_SEEK_INCOMPLETE 0x030200 +#define DVD_ERROR_UNRECOVERABLE_READ 0x031100 +#define DVD_ERROR_TRANSFER_PROTOCOL 0x040800 +#define DVD_ERROR_INVALID_COMMAND 0x052000 +#define DVD_ERROR_AUDIOBUFFER_NOTSET 0x052001 +#define DVD_ERROR_BLOCK_OUT_OF_RANGE 0x052100 +#define DVD_ERROR_INVALID_FIELD 0x052400 +#define DVD_ERROR_INVALID_AUDIO_CMD 0x052401 +#define DVD_ERROR_INVALID_CONF_PERIOD 0x052402 +#define DVD_ERROR_END_OF_USER_AREA 0x056300 +#define DVD_ERROR_MEDIUM_CHANGED 0x062800 +#define DVD_ERROR_MEDIUM_CHANGE_REQ 0x0B5A01 + +#define DVD_SPINMOTOR_MASK 0x0000ff00 + +#define cpu_to_le32(x) (((x>>24)&0x000000ff) | ((x>>8)&0x0000ff00) | ((x<<8)&0x00ff0000) | ((x<<24)&0xff000000)) +#define dvd_may_retry(s) (DVD_STATUS(s) == DVD_STATUS_READY || DVD_STATUS(s) == DVD_STATUS_DISK_ID_NOT_READ) + +#define _SHIFTL(v, s, w) \ + ((u32) (((u32)(v) & ((0x01 << (w)) - 1)) << (s))) +#define _SHIFTR(v, s, w) \ + ((u32)(((u32)(v) >> (s)) & ((0x01 << (w)) - 1))) + +typedef void (*dvdcallbacklow)(s32); +typedef void (*dvdstatecb)(dvdcmdblk *); + +typedef struct _dvdcmdl { + s32 cmd; + void *buf; + u32 len; + s64 offset; + dvdcallbacklow cb; +} dvdcmdl; + +typedef struct _dvdcmds { + void *buf; + u32 len; + s64 offset; +} dvdcmds; + +static u32 __dvd_initflag = 0; +static u32 __dvd_stopnextint = 0; +static vu32 __dvd_resetoccured = 0; +static u32 __dvd_waitcoverclose = 0; +static u32 __dvd_breaking = 0; +static vu32 __dvd_resetrequired = 0; +static u32 __dvd_canceling = 0; +static u32 __dvd_pauseflag = 0; +static u32 __dvd_pausingflag = 0; +static u64 __dvd_lastresetend = 0; +static u32 __dvd_ready = 0; +static u32 __dvd_resumefromhere = 0; +static u32 __dvd_fatalerror = 0; +static u32 __dvd_lasterror = 0; +static u32 __dvd_internalretries = 0; +static u32 __dvd_autofinishing = 0; +static u32 __dvd_autoinvalidation = 1; +static u32 __dvd_cancellasterror = 0; +static u32 __dvd_drivechecked = 0; +static u32 __dvd_drivestate = 0; +static u32 __dvd_extensionsenabled = TRUE; +static u32 __dvd_lastlen; +static u32 __dvd_nextcmdnum; +static u32 __dvd_workaround; +static u32 __dvd_workaroundseek; +static u32 __dvd_lastcmdwasread; +static u32 __dvd_currcmd; +static u32 __dvd_motorcntrl; +static lwpq_t __dvd_wait_queue; +static syswd_t __dvd_timeoutalarm; +static dvdcmdblk __dvd_block$15; +static dvdcmdblk __dvd_dummycmdblk; +static dvddiskid __dvd_tmpid0 ATTRIBUTE_ALIGN(32); +static dvddrvinfo __dvd_driveinfo ATTRIBUTE_ALIGN(32); +static dvdcallbacklow __dvd_callback = NULL; +static dvdcallbacklow __dvd_resetcovercb = NULL; +static dvdcallbacklow __dvd_finalunlockcb = NULL; +static dvdcallbacklow __dvd_finalreadmemcb = NULL; +static dvdcallbacklow __dvd_finalsudcb = NULL; +static dvdcallbacklow __dvd_finalstatuscb = NULL; +static dvdcallbacklow __dvd_finaladdoncb = NULL; +static dvdcallbacklow __dvd_finalpatchcb = NULL; +static dvdcallbacklow __dvd_finaloffsetcb = NULL; +static dvdcbcallback __dvd_cancelcallback = NULL; +static dvdcbcallback __dvd_mountusrcb = NULL; +static dvdstatecb __dvd_laststate = NULL; +static dvdcmdblk *__dvd_executing = NULL; +static void *__dvd_usrdata = NULL; +static dvddiskid *__dvd_diskID = (dvddiskid*)0x80000000; + +static lwp_queue __dvd_waitingqueue[4]; +static dvdcmdl __dvd_cmdlist[4]; +static dvdcmds __dvd_cmd_curr,__dvd_cmd_prev; + +static u32 __dvdpatchcode_size = 0; +static const u8 *__dvdpatchcode = NULL; + +static const u32 __dvd_patchcode04_size = 448; +static const u8 __dvd_patchcode04[] = +{ + 0xf7,0x10,0xff,0xf7,0xf4,0x74,0x25,0xd0,0x40,0xf7,0x20,0x4c,0x80,0xf4,0x74,0xd6, + 0x9c,0x08,0xf7,0x20,0xd6,0xfc,0xf4,0x74,0x28,0xae,0x08,0xf7,0x20,0xd2,0xfc,0x80, + 0x0c,0xc4,0xda,0xfc,0xfe,0xc8,0xda,0xfc,0xf5,0x00,0x01,0xe8,0x03,0xfc,0xc1,0x00, + 0xa0,0xf4,0x74,0x09,0xec,0x40,0x10,0xc8,0xda,0xfc,0xf5,0x00,0x02,0xe8,0x03,0xfc, + 0xbc,0x00,0xf4,0x74,0xf9,0xec,0x40,0x80,0x02,0xf0,0x20,0xc8,0x84,0x80,0xc0,0x9c, + 0x81,0xdc,0xb4,0x80,0xf5,0x30,0x00,0xf4,0x44,0xa1,0xd1,0x40,0xf8,0xaa,0x00,0x10, + 0xf4,0xd0,0x9c,0xd1,0x40,0xf0,0x01,0xdc,0xb4,0x80,0xf5,0x30,0x00,0xf7,0x48,0xaa, + 0x00,0xe9,0x07,0xf4,0xc4,0xa1,0xd1,0x40,0x10,0xfe,0xd8,0x32,0xe8,0x1d,0xf7,0x48, + 0xa8,0x00,0xe8,0x28,0xf7,0x48,0xab,0x00,0xe8,0x22,0xf7,0x48,0xe1,0x00,0xe8,0x1c, + 0xf7,0x48,0xee,0x00,0xe8,0x3d,0xd8,0x55,0xe8,0x31,0xfe,0x71,0x04,0xfd,0x22,0x00, + 0xf4,0x51,0xb0,0xd1,0x40,0xa0,0x40,0x04,0x40,0x06,0xea,0x33,0xf2,0xf9,0xf4,0xd2, + 0xb0,0xd1,0x40,0x71,0x04,0xfd,0x0a,0x00,0xf2,0x49,0xfd,0x05,0x00,0x51,0x04,0xf2, + 0x36,0xfe,0xf7,0x21,0xbc,0xff,0xf7,0x31,0xbc,0xff,0xfe,0xf5,0x30,0x01,0xfd,0x7e, + 0x00,0xea,0x0c,0xf5,0x30,0x01,0xc4,0xb0,0x81,0xf5,0x30,0x02,0xc4,0x94,0x81,0xdc, + 0xb4,0x80,0xf8,0xe0,0x00,0x10,0xa0,0xf5,0x10,0x01,0xf5,0x10,0x02,0xf5,0x10,0x03, + 0xfe,0xc8,0xda,0xfc,0xf7,0x00,0xfe,0xff,0xf7,0x31,0xd2,0xfc,0xea,0x0b,0xc8,0xda, + 0xfc,0xf7,0x00,0xfd,0xff,0xf7,0x31,0xd6,0xfc,0xc4,0xda,0xfc,0xcc,0x44,0xfc,0xf7, + 0x00,0xfe,0xff,0xc4,0x44,0xfc,0xf4,0x7d,0x28,0xae,0x08,0xe9,0x07,0xf4,0x75,0x60, + 0xd1,0x40,0xea,0x0c,0xf4,0x7d,0xd6,0x9c,0x08,0xe9,0x05,0xf4,0x75,0x94,0xd1,0x40, + 0xf2,0x7c,0xd0,0x04,0xcc,0x5b,0x80,0xd8,0x01,0xe9,0x02,0x7c,0x04,0x51,0x20,0x71, + 0x34,0xf4,0x7d,0xc1,0x85,0x08,0xe8,0x05,0xfe,0x80,0x01,0xea,0x02,0x80,0x00,0xa5, + 0xd8,0x00,0xe8,0x02,0x85,0x0c,0xc5,0xda,0xfc,0xf4,0x75,0xa0,0xd1,0x40,0x14,0xfe, + 0xf7,0x10,0xff,0xf7,0xf4,0xc9,0xa0,0xd1,0x40,0xd9,0x00,0xe8,0x22,0x21,0xf7,0x49, + 0x08,0x06,0xe9,0x05,0x85,0x02,0xf5,0x10,0x01,0xf4,0x79,0x00,0xf0,0x00,0xe9,0x05, + 0x80,0x00,0xf5,0x10,0x09,0xd9,0x06,0xe9,0x06,0x61,0x06,0xd5,0x06,0x41,0x06,0xf4, + 0xe0,0x9f,0xdc,0xc7,0xf4,0xe0,0xb5,0xcb,0xc7,0x00,0x00,0x00,0x74,0x0a,0x08,0x00, + 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}; + +static const u32 __dvd_patchcode06_size = 448; +static const u8 __dvd_patchcode06[] = +{ + 0xf7,0x10,0xff,0xf7,0xf4,0x74,0x25,0xd0,0x40,0xf7,0x20,0x4c,0x80,0xf4,0x74,0x42, + 0x9d,0x08,0xf7,0x20,0xd6,0xfc,0xf4,0x74,0x45,0xb1,0x08,0xf7,0x20,0xd2,0xfc,0x80, + 0x0c,0xc4,0xda,0xfc,0xfe,0xc8,0xda,0xfc,0xf5,0x00,0x01,0xe8,0x03,0xfc,0xc1,0x00, + 0xa0,0xf4,0x74,0x09,0xec,0x40,0x10,0xc8,0xda,0xfc,0xf5,0x00,0x02,0xe8,0x03,0xfc, + 0xbc,0x00,0xf4,0x74,0x02,0xed,0x40,0x80,0x02,0xf0,0x20,0xc8,0x78,0x80,0xc0,0x90, + 0x81,0xdc,0xa8,0x80,0xf5,0x30,0x00,0xf4,0x44,0xa1,0xd1,0x40,0xf8,0xaa,0x00,0x10, + 0xf4,0xd0,0x9c,0xd1,0x40,0xf0,0x01,0xdc,0xa8,0x80,0xf5,0x30,0x00,0xf7,0x48,0xaa, + 0x00,0xe9,0x07,0xf4,0xc4,0xa1,0xd1,0x40,0x10,0xfe,0xd8,0x32,0xe8,0x1d,0xf7,0x48, + 0xa8,0x00,0xe8,0x28,0xf7,0x48,0xab,0x00,0xe8,0x22,0xf7,0x48,0xe1,0x00,0xe8,0x1c, + 0xf7,0x48,0xee,0x00,0xe8,0x3d,0xd8,0x55,0xe8,0x31,0xfe,0x71,0x04,0xfd,0x22,0x00, + 0xf4,0x51,0xb0,0xd1,0x40,0xa0,0x40,0x04,0x40,0x06,0xea,0x33,0xf2,0xf9,0xf4,0xd2, + 0xb0,0xd1,0x40,0x71,0x04,0xfd,0x0a,0x00,0xf2,0x49,0xfd,0x05,0x00,0x51,0x04,0xf2, + 0x36,0xfe,0xf7,0x21,0xbc,0xff,0xf7,0x31,0xbc,0xff,0xfe,0xf5,0x30,0x01,0xfd,0x7e, + 0x00,0xea,0x0c,0xf5,0x30,0x01,0xc4,0xa4,0x81,0xf5,0x30,0x02,0xc4,0x88,0x81,0xdc, + 0xa8,0x80,0xf8,0xe0,0x00,0x10,0xa0,0xf5,0x10,0x01,0xf5,0x10,0x02,0xf5,0x10,0x03, + 0xfe,0xc8,0xda,0xfc,0xf7,0x00,0xfe,0xff,0xf7,0x31,0xd2,0xfc,0xea,0x0b,0xc8,0xda, + 0xfc,0xf7,0x00,0xfd,0xff,0xf7,0x31,0xd6,0xfc,0xc4,0xda,0xfc,0xcc,0x44,0xfc,0xf7, + 0x00,0xfe,0xff,0xc4,0x44,0xfc,0xf4,0x7d,0x45,0xb1,0x08,0xe9,0x07,0xf4,0x75,0x60, + 0xd1,0x40,0xea,0x0c,0xf4,0x7d,0x42,0x9d,0x08,0xe9,0x05,0xf4,0x75,0x94,0xd1,0x40, + 0xf2,0x7c,0xd0,0x04,0xcc,0x5b,0x80,0xd8,0x01,0xe9,0x02,0x7c,0x04,0x51,0x20,0x71, + 0x34,0xf4,0x7d,0xb9,0x85,0x08,0xe8,0x05,0xfe,0x80,0x01,0xea,0x02,0x80,0x00,0xa5, + 0xd8,0x00,0xe8,0x02,0x85,0x0c,0xc5,0xda,0xfc,0xf4,0x75,0xa0,0xd1,0x40,0x14,0xfe, + 0xf7,0x10,0xff,0xf7,0xf4,0xc9,0xa0,0xd1,0x40,0xd9,0x00,0xe8,0x22,0x21,0xf7,0x49, + 0x08,0x06,0xe9,0x05,0x85,0x02,0xf5,0x10,0x01,0xf4,0x79,0x00,0xf0,0x00,0xe9,0x05, + 0x80,0x00,0xf5,0x10,0x09,0xd9,0x06,0xe9,0x06,0x61,0x06,0xd5,0x06,0x41,0x06,0xf4, + 0xe0,0xbc,0xdf,0xc7,0xf4,0xe0,0x37,0xcc,0xc7,0x00,0x00,0x00,0x74,0x0a,0x08,0x00, + 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}; + +static const u32 __dvd_patchcode08_size = 448; +static const u8 __dvd_patchcode08[] = +{ + 0xf7,0x10,0xff,0xf7,0xf4,0x74,0x25,0xd0,0x40,0xf7,0x20,0x4c,0x80,0xf4,0x74,0x32, + 0x9d,0x08,0xf7,0x20,0xd6,0xfc,0xf4,0x74,0x75,0xae,0x08,0xf7,0x20,0xd2,0xfc,0x80, + 0x0c,0xc4,0xda,0xfc,0xfe,0xc8,0xda,0xfc,0xf5,0x00,0x01,0xe8,0x03,0xfc,0xc1,0x00, + 0xa0,0xf4,0x74,0x09,0xec,0x40,0x10,0xc8,0xda,0xfc,0xf5,0x00,0x02,0xe8,0x03,0xfc, + 0xbc,0x00,0xf4,0x74,0xf5,0xec,0x40,0x80,0x02,0xf0,0x20,0xc8,0x80,0x80,0xc0,0x98, + 0x81,0xdc,0xb0,0x80,0xf5,0x30,0x00,0xf4,0x44,0xa1,0xd1,0x40,0xf8,0xaa,0x00,0x10, + 0xf4,0xd0,0x9c,0xd1,0x40,0xf0,0x01,0xdc,0xb0,0x80,0xf5,0x30,0x00,0xf7,0x48,0xaa, + 0x00,0xe9,0x07,0xf4,0xc4,0xa1,0xd1,0x40,0x10,0xfe,0xd8,0x32,0xe8,0x1d,0xf7,0x48, + 0xa8,0x00,0xe8,0x28,0xf7,0x48,0xab,0x00,0xe8,0x22,0xf7,0x48,0xe1,0x00,0xe8,0x1c, + 0xf7,0x48,0xee,0x00,0xe8,0x3d,0xd8,0x55,0xe8,0x31,0xfe,0x71,0x04,0xfd,0x22,0x00, + 0xf4,0x51,0xb0,0xd1,0x40,0xa0,0x40,0x04,0x40,0x06,0xea,0x33,0xf2,0xf9,0xf4,0xd2, + 0xb0,0xd1,0x40,0x71,0x04,0xfd,0x0a,0x00,0xf2,0x49,0xfd,0x05,0x00,0x51,0x04,0xf2, + 0x36,0xfe,0xf7,0x21,0xbc,0xff,0xf7,0x31,0xbc,0xff,0xfe,0xf5,0x30,0x01,0xfd,0x7e, + 0x00,0xea,0x0c,0xf5,0x30,0x01,0xc4,0xac,0x81,0xf5,0x30,0x02,0xc4,0x90,0x81,0xdc, + 0xb0,0x80,0xf8,0xe0,0x00,0x10,0xa0,0xf5,0x10,0x01,0xf5,0x10,0x02,0xf5,0x10,0x03, + 0xfe,0xc8,0xda,0xfc,0xf7,0x00,0xfe,0xff,0xf7,0x31,0xd2,0xfc,0xea,0x0b,0xc8,0xda, + 0xfc,0xf7,0x00,0xfd,0xff,0xf7,0x31,0xd6,0xfc,0xc4,0xda,0xfc,0xcc,0x44,0xfc,0xf7, + 0x00,0xfe,0xff,0xc4,0x44,0xfc,0xf4,0x7d,0x75,0xae,0x08,0xe9,0x07,0xf4,0x75,0x60, + 0xd1,0x40,0xea,0x0c,0xf4,0x7d,0x32,0x9d,0x08,0xe9,0x05,0xf4,0x75,0x94,0xd1,0x40, + 0xf2,0x7c,0xd0,0x04,0xcc,0x5b,0x80,0xd8,0x01,0xe9,0x02,0x7c,0x04,0x51,0x20,0x71, + 0x34,0xf4,0x7d,0xc1,0x85,0x08,0xe8,0x05,0xfe,0x80,0x01,0xea,0x02,0x80,0x00,0xa5, + 0xd8,0x00,0xe8,0x02,0x85,0x0c,0xc5,0xda,0xfc,0xf4,0x75,0xa0,0xd1,0x40,0x14,0xfe, + 0xf7,0x10,0xff,0xf7,0xf4,0xc9,0xa0,0xd1,0x40,0xd9,0x00,0xe8,0x22,0x21,0xf7,0x49, + 0x08,0x06,0xe9,0x05,0x85,0x02,0xf5,0x10,0x01,0xf4,0x79,0x00,0xf0,0x00,0xe9,0x05, + 0x80,0x00,0xf5,0x10,0x09,0xd9,0x06,0xe9,0x06,0x61,0x06,0xd5,0x06,0x41,0x06,0xf4, + 0xe0,0xec,0xdc,0xc7,0xf4,0xe0,0x0e,0xcc,0xc7,0x00,0x00,0x00,0x74,0x0a,0x08,0x00, + 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}; + +static const u32 __dvd_patchcodeQ08_size = 448; +static const u8 __dvd_patchcodeQ08[] = +{ + 0xf7,0x10,0xff,0xf7,0xf4,0x74,0x25,0xd0,0x40,0xf7,0x20,0x4c,0x80,0xf4,0x74,0x39, + 0x9e,0x08,0xf7,0x20,0xd6,0xfc,0xf4,0x74,0x02,0xb3,0x08,0xf7,0x20,0xd2,0xfc,0x80, + 0x0c,0xc4,0xda,0xfc,0xfe,0xc8,0xda,0xfc,0xf5,0x00,0x01,0xe8,0x03,0xfc,0xc1,0x00, + 0xa0,0xf4,0x74,0x09,0xec,0x40,0x10,0xc8,0xda,0xfc,0xf5,0x00,0x02,0xe8,0x03,0xfc, + 0xbc,0x00,0xf4,0x74,0x02,0xed,0x40,0x80,0x02,0xf0,0x20,0xc8,0x78,0x80,0xc0,0x92, + 0x81,0xdc,0xaa,0x80,0xf5,0x30,0x00,0xf4,0x44,0xa1,0xd1,0x40,0xf8,0xaa,0x00,0x10, + 0xf4,0xd0,0x9c,0xd1,0x40,0xf0,0x01,0xdc,0xaa,0x80,0xf5,0x30,0x00,0xf7,0x48,0xaa, + 0x00,0xe9,0x07,0xf4,0xc4,0xa1,0xd1,0x40,0x10,0xfe,0xd8,0x32,0xe8,0x1d,0xf7,0x48, + 0xa8,0x00,0xe8,0x28,0xf7,0x48,0xab,0x00,0xe8,0x22,0xf7,0x48,0xe1,0x00,0xe8,0x1c, + 0xf7,0x48,0xee,0x00,0xe8,0x3d,0xd8,0x55,0xe8,0x31,0xfe,0x71,0x04,0xfd,0x22,0x00, + 0xf4,0x51,0xb0,0xd1,0x40,0xa0,0x40,0x04,0x40,0x06,0xea,0x33,0xf2,0xf9,0xf4,0xd2, + 0xb0,0xd1,0x40,0x71,0x04,0xfd,0x0a,0x00,0xf2,0x49,0xfd,0x05,0x00,0x51,0x04,0xf2, + 0x36,0xfe,0xf7,0x21,0xbc,0xff,0xf7,0x31,0xbc,0xff,0xfe,0xf5,0x30,0x01,0xfd,0x7e, + 0x00,0xea,0x0c,0xf5,0x30,0x01,0xc4,0xa6,0x81,0xf5,0x30,0x02,0xc4,0x8a,0x81,0xdc, + 0xaa,0x80,0xf8,0xe0,0x00,0x10,0xa0,0xf5,0x10,0x01,0xf5,0x10,0x02,0xf5,0x10,0x03, + 0xfe,0xc8,0xda,0xfc,0xf7,0x00,0xfe,0xff,0xf7,0x31,0xd2,0xfc,0xea,0x0b,0xc8,0xda, + 0xfc,0xf7,0x00,0xfd,0xff,0xf7,0x31,0xd6,0xfc,0xc4,0xda,0xfc,0xcc,0x44,0xfc,0xf7, + 0x00,0xfe,0xff,0xc4,0x44,0xfc,0xf4,0x7d,0x02,0xb3,0x08,0xe9,0x07,0xf4,0x75,0x60, + 0xd1,0x40,0xea,0x0c,0xf4,0x7d,0x39,0x9e,0x08,0xe9,0x05,0xf4,0x75,0x94,0xd1,0x40, + 0xf2,0x7c,0xd0,0x04,0xcc,0x5b,0x80,0xd8,0x01,0xe9,0x02,0x7c,0x04,0x51,0x20,0x71, + 0x34,0xf4,0x7d,0x7f,0x86,0x08,0xe8,0x05,0xfe,0x80,0x01,0xea,0x02,0x80,0x00,0xa5, + 0xd8,0x00,0xe8,0x02,0x85,0x0c,0xc5,0xda,0xfc,0xf4,0x75,0xa0,0xd1,0x40,0x14,0xfe, + 0xf7,0x10,0xff,0xf7,0xf4,0xc9,0xa0,0xd1,0x40,0xd9,0x00,0xe8,0x22,0x21,0xf7,0x49, + 0x08,0x06,0xe9,0x05,0x85,0x02,0xf5,0x10,0x01,0xf4,0x79,0x00,0xf0,0x00,0xe9,0x05, + 0x80,0x00,0xf5,0x10,0x09,0xd9,0x06,0xe9,0x06,0x61,0x06,0xd5,0x06,0x41,0x06,0xf4, + 0xe0,0x79,0xe1,0xc7,0xf4,0xe0,0xeb,0xcd,0xc7,0x00,0x00,0x00,0xa4,0x0a,0x08,0x00, + 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}; + +static vu32* const _piReg = (u32*)0xCC003000; + +#if defined(HW_RVL) + static vu32* const _diReg = (u32*)0xCD006000; +#elif defined(HW_DOL) + static vu32* const _diReg = (u32*)0xCC006000; +#endif + +static u8 __dvd_unlockcmd$221[12] = {0xff,0x01,'M','A','T','S','H','I','T','A',0x02,0x00}; +static u8 __dvd_unlockcmd$222[12] = {0xff,0x00,'D','V','D','-','G','A','M','E',0x03,0x00}; +static u32 __dvd_errortable[] = { + 0x00000000, 0x00023a00, 0x00062800, 0x00030200, + 0x00031100, 0x00052000, 0x00052001, 0x00052100, + 0x00052400, 0x00052401, 0x00052402, 0x000B5A01, + 0x00056300, 0x00020401, 0x00020400, 0x00040800, + 0x00100007, 0x00000000 +}; + +void __dvd_statecheckid(void); +void __dvd_stategettingerror(void); +void __dvd_statecoverclosed(void); +void __dvd_stateready(void); +void __dvd_statemotorstopped(void); +void __dvd_statetimeout(void); +void __dvd_stategotoretry(void); +void __dvd_stateerror(s32 result); +void __dvd_statecoverclosed_cmd(dvdcmdblk *block); +void __dvd_statebusy(dvdcmdblk *block); +void DVD_LowReset(u32 reset_mode); +s32 DVD_LowSeek(s64 offset,dvdcallbacklow cb); +s32 DVD_LowRead(void *buf,u32 len,s64 offset,dvdcallbacklow cb); +s32 DVD_LowReadId(dvddiskid *diskID,dvdcallbacklow cb); +s32 DVD_LowRequestError(dvdcallbacklow cb); +s32 DVD_LowStopMotor(dvdcallbacklow cb); +s32 DVD_LowInquiry(dvddrvinfo *info,dvdcallbacklow cb); +s32 DVD_LowWaitCoverClose(dvdcallbacklow cb); +s32 DVD_LowAudioStream(u32 subcmd,u32 len,s64 offset,dvdcallbacklow cb); +s32 DVD_LowAudioBufferConfig(s32 enable,u32 size,dvdcallbacklow cb); +s32 DVD_LowRequestAudioStatus(u32 subcmd,dvdcallbacklow cb); +s32 DVD_LowEnableExtensions(u8 enable,dvdcallbacklow cb); +s32 DVD_LowSpinMotor(u32 mode,dvdcallbacklow cb); +s32 DVD_LowSetStatus(u32 status,dvdcallbacklow cb); +s32 DVD_LowUnlockDrive(dvdcallbacklow cb); +s32 DVD_LowPatchDriveCode(dvdcallbacklow cb); +s32 DVD_LowSpinUpDrive(dvdcallbacklow cb); +s32 DVD_LowControlMotor(u32 mode,dvdcallbacklow cb); +s32 DVD_LowFuncCall(u32 address,dvdcallbacklow cb); +s32 DVD_LowReadmem(u32 address,void *buffer,dvdcallbacklow cb); +s32 DVD_LowSetGCMOffset(s64 offset,dvdcallbacklow cb); +s32 DVD_LowSetOffset(s64 offset,dvdcallbacklow cb); +s32 DVD_ReadAbsAsyncPrio(dvdcmdblk *block,void *buf,u32 len,s64 offset,dvdcbcallback cb,s32 prio); +s32 DVD_ReadDiskID(dvdcmdblk *block,dvddiskid *id,dvdcbcallback cb); +s32 __issuecommand(s32 prio,dvdcmdblk *block); + +extern void udelay(int us); +extern u32 diff_msec(unsigned long long start,unsigned long long end); +extern long long gettime(void); +extern void __MaskIrq(u32); +extern void __UnmaskIrq(u32); +extern syssramex* __SYS_LockSramEx(void); +extern u32 __SYS_UnlockSramEx(u32 write); + +static u8 err2num(u32 errorcode) +{ + u32 i; + + i=0; + while(i<18) { + if(errorcode==__dvd_errortable[i]) return i; + i++; + } + if(errorcode<0x00100000 || errorcode>0x00100008) return 29; + + return 17; +} + +static u8 convert(u32 errorcode) +{ + u8 err,err_num; + + if((errorcode-0x01230000)==0x4567) return 255; + else if((errorcode-0x01230000)==0x4568) return 254; + + err = _SHIFTR(errorcode,24,8); + err_num = err2num((errorcode&0x00ffffff)); + if(err>0x06) err = 0x06; + + return err_num+(err*30); +} + +static void __dvd_clearwaitingqueue() +{ + u32 i; + + for(i=0;i<4;i++) + __lwp_queue_init_empty(&__dvd_waitingqueue[i]); +} + +static s32 __dvd_checkwaitingqueue() +{ + u32 i; + u32 level; + + _CPU_ISR_Disable(level); + for(i=0;i<4;i++) { + if(!__lwp_queue_isempty(&__dvd_waitingqueue[i])) break; + } + _CPU_ISR_Restore(level); + return (i<4); +} + +static s32 __dvd_pushwaitingqueue(s32 prio,dvdcmdblk *block) +{ + u32 level; + _CPU_ISR_Disable(level); + __lwp_queue_appendI(&__dvd_waitingqueue[prio],&block->node); + _CPU_ISR_Restore(level); + return 1; +} + +static dvdcmdblk* __dvd_popwaitingqueueprio(s32 prio) +{ + u32 level; + dvdcmdblk *ret = NULL; + _CPU_ISR_Disable(level); + ret = (dvdcmdblk*)__lwp_queue_firstnodeI(&__dvd_waitingqueue[prio]); + _CPU_ISR_Restore(level); + return ret; +} + +static dvdcmdblk* __dvd_popwaitingqueue() +{ + u32 i,level; + dvdcmdblk *ret = NULL; + _CPU_ISR_Disable(level); + for(i=0;i<4;i++) { + if(!__lwp_queue_isempty(&__dvd_waitingqueue[i])) { + _CPU_ISR_Restore(level); + ret = __dvd_popwaitingqueueprio(i); + return ret; + } + } + _CPU_ISR_Restore(level); + return NULL; +} + +static void __dvd_timeouthandler(syswd_t alarm,void *cbarg) +{ + dvdcallbacklow cb; + + __MaskIrq(IRQMASK(IRQ_PI_DI)); + cb = __dvd_callback; + if(cb) cb(0x10); +} + +static void __dvd_storeerror(u32 errorcode) +{ + u8 err; + syssramex *ptr; + + err = convert(errorcode); + ptr = __SYS_LockSramEx(); + ptr->dvderr_code = err; + __SYS_UnlockSramEx(1); +} + +static u32 __dvd_categorizeerror(u32 errorcode) +{ + if((errorcode-0x20000)==0x0400) { + __dvd_lasterror = errorcode; + return 1; + } + + if(DVD_ERROR(errorcode)==DVD_ERROR_MEDIUM_CHANGED + || DVD_ERROR(errorcode)==DVD_ERROR_MEDIUM_NOT_PRESENT + || DVD_ERROR(errorcode)==DVD_ERROR_MEDIUM_CHANGE_REQ + || (DVD_ERROR(errorcode)-0x40000)==0x3100) return 0; + + __dvd_internalretries++; + if(__dvd_internalretries==2) { + if(__dvd_lasterror==DVD_ERROR(errorcode)) { + __dvd_lasterror = DVD_ERROR(errorcode); + return 1; + } + __dvd_lasterror = DVD_ERROR(errorcode); + return 2; + } + + __dvd_lasterror = DVD_ERROR(errorcode); + if(DVD_ERROR(errorcode)!=DVD_ERROR_UNRECOVERABLE_READ) { + if(__dvd_executing->cmd!=0x0005) return 3; + } + return 2; +} + +static void __SetupTimeoutAlarm(const struct timespec *tp) +{ + SYS_SetAlarm(__dvd_timeoutalarm,tp,__dvd_timeouthandler,NULL); +} + +static void __Read(void *buffer,u32 len,s64 offset,dvdcallbacklow cb) +{ + u32 val; + struct timespec tb; + __dvd_callback = cb; + __dvd_stopnextint = 0; + __dvd_lastcmdwasread = 1; + + _diReg[2] = DVD_READSECTOR; + _diReg[3] = (u32)(offset>>2); + _diReg[4] = len; + _diReg[5] = (u32)buffer; + _diReg[6] = len; + + __dvd_lastlen = len; + + _diReg[7] = (DVD_DI_DMA|DVD_DI_START); + val = _diReg[7]; + if(val>0x00a00000) { + tb.tv_sec = 20; + tb.tv_nsec = 0; + __SetupTimeoutAlarm(&tb); + } else { + tb.tv_sec = 10; + tb.tv_nsec = 0; + __SetupTimeoutAlarm(&tb); + } +} + +static void __DoRead(void *buffer,u32 len,s64 offset,dvdcallbacklow cb) +{ + __dvd_nextcmdnum = 0; + __dvd_cmdlist[0].cmd = -1; + __Read(buffer,len,offset,cb); +} + +static u32 __ProcessNextCmd() +{ + u32 cmd_num = __dvd_nextcmdnum; + if(__dvd_cmdlist[cmd_num].cmd==0x0001) { + __dvd_nextcmdnum++; + __Read(__dvd_cmdlist[cmd_num].buf,__dvd_cmdlist[cmd_num].len,__dvd_cmdlist[cmd_num].offset,__dvd_cmdlist[cmd_num].cb); + return 1; + } + + if(__dvd_cmdlist[cmd_num].cmd==0x0002) { + __dvd_nextcmdnum++; + DVD_LowSeek(__dvd_cmdlist[cmd_num].offset,__dvd_cmdlist[cmd_num].cb); + return 1; + } + return 0; +} + +static void __DVDLowWATypeSet(u32 workaround,u32 workaroundseek) +{ + u32 level; + + _CPU_ISR_Disable(level); + __dvd_workaround = workaround; + __dvd_workaroundseek = workaroundseek; + _CPU_ISR_Restore(level); +} + +static void __DVDInitWA() +{ + __dvd_nextcmdnum = 0; + __DVDLowWATypeSet(0,0); +} + +static s32 __dvd_checkcancel(u32 cancelpt) +{ + dvdcmdblk *block; + + if(__dvd_canceling) { + __dvd_resumefromhere = cancelpt; + __dvd_canceling = 0; + + block = __dvd_executing; + __dvd_executing = &__dvd_dummycmdblk; + + block->state = 10; + if(block->cb) block->cb(-3,block); + if(__dvd_cancelcallback) __dvd_cancelcallback(0,block); + + __dvd_stateready(); + return 1; + } + return 0; +} + +static void __dvd_stateretrycb(s32 result) +{ + if(result==0x0010) { + __dvd_executing->state = -1; + __dvd_statetimeout(); + return; + } + + if(result&0x0002) __dvd_stateerror(0x01234567); + if(result==0x0001) { + __dvd_statebusy(__dvd_executing); + return; + } +} + +static void __dvd_unrecoverederrorretrycb(s32 result) +{ + u32 val; + + if(result==0x0010) { + __dvd_executing->state = -1; + __dvd_statetimeout(); + return; + } + + __dvd_executing->state = -1; + if(result&0x0002) __dvd_stateerror(0x01234567); + else { + val = _diReg[8]; + __dvd_stateerror(val); + } +} + +static void __dvd_unrecoverederrorcb(s32 result) +{ + if(result==0x0010) { + __dvd_executing->state = -1; + __dvd_statetimeout(); + return; + } + if(result&0x0001) { + __dvd_stategotoretry(); + return; + } + if(!(result==0x0002)) DVD_LowRequestError(__dvd_unrecoverederrorretrycb); +} + +static void __dvd_stateerrorcb(s32 result) +{ + dvdcmdblk *block; + if(result==0x0010) { + __dvd_executing->state = -1; + __dvd_statetimeout(); + return; + } + + __dvd_fatalerror = 1; + block = __dvd_executing; + __dvd_executing = &__dvd_dummycmdblk; + if(block->cb) block->cb(-1,block); + if(__dvd_canceling) { + __dvd_canceling = 0; + if(__dvd_cancelcallback) __dvd_cancelcallback(0,block); + } + __dvd_stateready(); +} + +static void __dvd_stategettingerrorcb(s32 result) +{ + s32 ret; + u32 val,cnclpt; + if(result==0x0010) { + __dvd_executing->state = -1; + __dvd_statetimeout(); + return; + } + if(result&0x0002) { + __dvd_executing->state = -1; + __dvd_stateerror(0x01234567); + return; + } + if(result==0x0001) { + val = _diReg[8]; + ret = __dvd_categorizeerror(val); + if(ret==1) { + __dvd_executing->state = -1; + __dvd_stateerror(val); + return; + } else if(ret==2 || ret==3) cnclpt = 0; + else { + if(DVD_STATUS(val)==DVD_STATUS_COVER_OPENED) cnclpt = 4; + else if(DVD_STATUS(val)==DVD_STATUS_DISK_CHANGE) cnclpt = 6; + else if(DVD_STATUS(val)==DVD_STATUS_NO_DISK) cnclpt = 3; + else cnclpt = 5; + } + if(__dvd_checkcancel(cnclpt)) return; + + if(ret==2) { + if(dvd_may_retry(val)) { + // disable the extensions iff they're enabled and we were trying to read the disc ID + if(__dvd_executing->cmd==0x05) { + __dvd_lasterror = 0; + __dvd_extensionsenabled = FALSE; + DVD_LowSpinUpDrive(__dvd_stateretrycb); + return; + } + __dvd_statebusy(__dvd_executing); + } else { + __dvd_storeerror(val); + __dvd_stategotoretry(); + } + return; + } else if(ret==3) { + if(DVD_ERROR(val)==DVD_ERROR_UNRECOVERABLE_READ) { + DVD_LowSeek(__dvd_executing->offset,__dvd_unrecoverederrorcb); + return; + } else { + __dvd_laststate(__dvd_executing); + return; + } + } else if(DVD_STATUS(val)==DVD_STATUS_COVER_OPENED) { + __dvd_executing->state = 5; + __dvd_statemotorstopped(); + return; + } else if(DVD_STATUS(val)==DVD_STATUS_DISK_CHANGE) { + __dvd_executing->state = 3; + __dvd_statecoverclosed(); + return; + } else if(DVD_STATUS(val)==DVD_STATUS_NO_DISK) { + __dvd_executing->state = 4; + __dvd_statemotorstopped(); + return; + } + __dvd_executing->state = -1; + __dvd_stateerror(0x01234567); + return; + } +} + +static void __dvd_statebusycb(s32 result) +{ + u32 val; + dvdcmdblk *block; + if(result==0x0010) { + __dvd_executing->state = -1; + __dvd_statetimeout(); + return; + } + if(__dvd_currcmd==0x0003 || __dvd_currcmd==0x000f) { + if(result&0x0002) { + __dvd_executing->state = -1; + __dvd_stateerror(0x01234567); + return; + } + if(result==0x0001) { + __dvd_internalretries = 0; + if(__dvd_currcmd==0x000f) __dvd_resetrequired = 1; + if(__dvd_checkcancel(7)) return; + + __dvd_executing->state = 7; + __dvd_statemotorstopped(); + return; + } + } + if(result&0x0004) { + + } + if(__dvd_currcmd==0x0001 || __dvd_currcmd==0x0004 + || __dvd_currcmd==0x0005 || __dvd_currcmd==0x000e) { + __dvd_executing->txdsize += (__dvd_executing->currtxsize-_diReg[6]); + } + if(result&0x0008) { + __dvd_canceling = 0; + block = __dvd_executing; + __dvd_executing = &__dvd_dummycmdblk; + __dvd_executing->state = 10; + if(block->cb) block->cb(-3,block); + if(__dvd_cancelcallback) __dvd_cancelcallback(0,block); + __dvd_stateready(); + return; + } + if(result&0x0001) { + __dvd_internalretries = 0; + if(__dvd_checkcancel(0)) return; + + if(__dvd_currcmd==0x0001 || __dvd_currcmd==0x0004 + || __dvd_currcmd==0x0005 || __dvd_currcmd==0x000e) { + if(__dvd_executing->txdsize!=__dvd_executing->len) { + __dvd_statebusy(__dvd_executing); + return; + } + block = __dvd_executing; + __dvd_executing = &__dvd_dummycmdblk; + block->state = 0; + if(block->cb) block->cb(block->txdsize,block); + __dvd_stateready(); + return; + } + if(__dvd_currcmd==0x0009 || __dvd_currcmd==0x000a + || __dvd_currcmd==0x000b || __dvd_currcmd==0x000c) { + + val = _diReg[8]; + if(__dvd_currcmd==0x000a || __dvd_currcmd==0x000b) val <<= 2; + + block = __dvd_executing; + __dvd_executing = &__dvd_dummycmdblk; + block->state = 0; + if(block->cb) block->cb(val,block); + __dvd_stateready(); + return; + } + if(__dvd_currcmd==0x0006) { + if(!__dvd_executing->currtxsize) { + if(_diReg[8]&0x0001) { + block = __dvd_executing; + __dvd_executing = &__dvd_dummycmdblk; + block->state = 9; + if(block->cb) block->cb(-2,block); + __dvd_stateready(); + return; + } + __dvd_autofinishing = 0; + __dvd_executing->currtxsize = 1; + DVD_LowAudioStream(0,__dvd_executing->len,__dvd_executing->offset,__dvd_statebusycb); + return; + } + + block = __dvd_executing; + __dvd_executing = &__dvd_dummycmdblk; + block->state = 0; + if(block->cb) block->cb(0,block); + __dvd_stateready(); + return; + } + if(__dvd_currcmd==0x0010) { + if(__dvd_drivestate&DVD_CHIPPRESENT) { + block = __dvd_executing; + __dvd_executing = &__dvd_dummycmdblk; + block->state = 0; + if(block->cb) block->cb(DVD_DISKIDSIZE,block); + __dvd_stateready(); + return; + } + } + + block = __dvd_executing; + __dvd_executing = &__dvd_dummycmdblk; + block->state = 0; + if(block->cb) block->cb(0,block); + __dvd_stateready(); + return; + } + if(result==0x0002) { + if(__dvd_currcmd==0x000e) { + __dvd_executing->state = -1; + __dvd_stateerror(0x01234567); + return; + } + if((__dvd_currcmd==0x0001 || __dvd_currcmd==0x0004 + || __dvd_currcmd==0x0005 || __dvd_currcmd==0x000e) + && __dvd_executing->txdsize==__dvd_executing->len) { + if(__dvd_checkcancel(0)) return; + + block = __dvd_executing; + __dvd_executing = &__dvd_dummycmdblk; + block->state = 0; + if(block->cb) block->cb(block->txdsize,block); + __dvd_stateready(); + return; + } + } + __dvd_stategettingerror(); +} + +static void __dvd_mountsynccb(s32 result,dvdcmdblk *block) +{ + LWP_ThreadBroadcast(__dvd_wait_queue); +} + +static void __dvd_inquirysynccb(s32 result,dvdcmdblk *block) +{ + LWP_ThreadBroadcast(__dvd_wait_queue); +} + +static void __dvd_readsynccb(s32 result,dvdcmdblk *block) +{ + LWP_ThreadBroadcast(__dvd_wait_queue); +} + +static void __dvd_streamatendsynccb(s32 result,dvdcmdblk *block) +{ + LWP_ThreadBroadcast(__dvd_wait_queue); +} + +static void __dvd_seeksynccb(s32 result,dvdcmdblk *block) +{ + LWP_ThreadBroadcast(__dvd_wait_queue); +} + +static void __dvd_spinupdrivesynccb(s32 result,dvdcmdblk *block) +{ + LWP_ThreadBroadcast(__dvd_wait_queue); +} + +static void __dvd_motorcntrlsynccb(s32 result,dvdcmdblk *block) +{ + LWP_ThreadBroadcast(__dvd_wait_queue); +} + +static void __dvd_setgcmsynccb(s32 result,dvdcmdblk *block) +{ + LWP_ThreadBroadcast(__dvd_wait_queue); +} + +static void __dvd_statemotorstoppedcb(s32 result) +{ + _diReg[1] = 0; + __dvd_executing->state = 3; + __dvd_statecoverclosed(); +} + +static void __dvd_statecoverclosedcb(s32 result) +{ + if(result==0x0010) { + __dvd_executing->state = -1; + __dvd_statetimeout(); + return; + } + + if(!(result&0x0006)) { + __dvd_internalretries = 0; + __dvd_statecheckid(); + return; + } + + if(result==0x0002) __dvd_stategettingerror(); +} + +static void __dvd_statecheckid1cb(s32 result) +{ + __dvd_ready = 1; + if(memcmp(__dvd_diskID,&__dvd_tmpid0,DVD_DISKIDSIZE)) memcpy(__dvd_diskID,&__dvd_tmpid0,DVD_DISKIDSIZE); + LWP_ThreadBroadcast(__dvd_wait_queue); +} + +static void __dvd_stategotoretrycb(s32 result) +{ + if(result==0x0010) { + __dvd_executing->state = -1; + __dvd_statetimeout(); + return; + } + if(result&0x0002) { + __dvd_executing->state = -1; + __dvd_stateerror(0x01234567); + return; + } + if(result==0x0001) { + __dvd_internalretries = 0; + if(__dvd_currcmd==0x0004 || __dvd_currcmd==0x0005 + || __dvd_currcmd==0x000d || __dvd_currcmd==0x000f) { + __dvd_resetrequired = 1; + if(__dvd_checkcancel(2)) return; + + __dvd_executing->state = 11; + __dvd_statemotorstopped(); + } + } +} + +static void __dvd_getstatuscb(s32 result) +{ + u32 val,*pn_data; + dvdcallbacklow cb; + if(result==0x0010) { + __dvd_statetimeout(); + return; + } + if(result==0x0001) { + val = _diReg[8]; + + pn_data = __dvd_usrdata; + __dvd_usrdata = NULL; + if(pn_data) pn_data[0] = val; + + cb = __dvd_finalstatuscb; + __dvd_finalstatuscb = NULL; + if(cb) cb(result); + return; + } + __dvd_stategettingerror(); +} + +static void __dvd_readmemcb(s32 result) +{ + u32 val,*pn_data; + dvdcallbacklow cb; + if(result==0x0010) { + __dvd_statetimeout(); + return; + } + if(result==0x0001) { + val = _diReg[8]; + + pn_data = __dvd_usrdata; + __dvd_usrdata = NULL; + if(pn_data) pn_data[0] = val; + + cb = __dvd_finalreadmemcb; + __dvd_finalreadmemcb = NULL; + if(cb) cb(result); + return; + } + __dvd_stategettingerror(); +} + +static void __dvd_cntrldrivecb(s32 result) +{ + if(result==0x0010) { + __dvd_statetimeout(); + return; + } + if(result==0x0001) { + DVD_LowSpinMotor(__dvd_motorcntrl,__dvd_finalsudcb); + return; + } + __dvd_stategettingerror(); +} + +static void __dvd_setgcmoffsetcb(s32 result) +{ + s64 *pn_data,offset; + if(result==0x0010) { + __dvd_statetimeout(); + return; + } + if(result==0x0001) { + pn_data = (s64*)__dvd_usrdata; + __dvd_usrdata = NULL; + + offset = 0; + if(pn_data) offset = *pn_data; + DVD_LowSetOffset(offset,__dvd_finaloffsetcb); + return; + } + __dvd_stategettingerror(); +} + +static void __dvd_handlespinupcb(s32 result) +{ + static u32 step = 0; + if(result==0x0010) { + __dvd_statetimeout(); + return; + } + if(result==0x0001) { + if(step==0x0000) { + step++; + _diReg[1] = _diReg[1]; + DVD_LowEnableExtensions(__dvd_extensionsenabled,__dvd_handlespinupcb); + return; + } + if(step==0x0001) { + step++; + _diReg[1] = _diReg[1]; + DVD_LowSpinMotor((DVD_SPINMOTOR_ACCEPT|DVD_SPINMOTOR_UP),__dvd_handlespinupcb); + return; + } + if(step==0x0002) { + step = 0; + if(!__dvd_lasterror) { + _diReg[1] = _diReg[1]; + DVD_LowSetStatus((_SHIFTL((DVD_STATUS_DISK_ID_NOT_READ+1),16,8)|0x00000300),__dvd_finalsudcb); + return; + } + __dvd_finalsudcb(result); + return; + } + } + + step = 0; + __dvd_stategettingerror(); +} + +static void __dvd_fwpatchcb(s32 result) +{ + static u32 step = 0; + if(result==0x0010) { + __dvd_statetimeout(); + return; + } + if(result==0x0001) { + if(step==0x0000) { + step++; + _diReg[1] = _diReg[1]; + DVD_LowUnlockDrive(__dvd_fwpatchcb); + return; + } + if(step==0x0001) { + step = 0; + DVD_LowPatchDriveCode(__dvd_finalpatchcb); + return; + } + } + + step = 0; + __dvd_stategettingerror(); +} + +static void __dvd_checkaddonscb(s32 result) +{ + u32 txdsize; + dvdcallbacklow cb; + __dvd_drivechecked = 1; + txdsize = (DVD_DISKIDSIZE-_diReg[6]); + if(result&0x0001) { + // if the read was successful but was interrupted by a break we issue the read again. + if(txdsize!=DVD_DISKIDSIZE) { + _diReg[1] = _diReg[1]; + DCInvalidateRange(&__dvd_tmpid0,DVD_DISKIDSIZE); + DVD_LowReadId(&__dvd_tmpid0,__dvd_checkaddonscb); + return; + } + __dvd_drivestate |= DVD_CHIPPRESENT; + } + + cb = __dvd_finaladdoncb; + __dvd_finaladdoncb = NULL; + if(cb) cb(0x01); +} + +static void __dvd_checkaddons(dvdcallbacklow cb) +{ + __dvd_finaladdoncb = cb; + + // try to read disc ID. + _diReg[1] = _diReg[1]; + DCInvalidateRange(&__dvd_tmpid0,DVD_DISKIDSIZE); + DVD_LowReadId(&__dvd_tmpid0,__dvd_checkaddonscb); + return; +} + +static void __dvd_fwpatchmem(dvdcallbacklow cb) +{ + __dvd_finalpatchcb = cb; + + _diReg[1] = _diReg[1]; + DCInvalidateRange(&__dvd_driveinfo,DVD_DRVINFSIZE); + DVD_LowInquiry(&__dvd_driveinfo,__dvd_fwpatchcb); + return; +} + +static void __dvd_handlespinup() +{ + _diReg[1] = _diReg[1]; + DVD_LowUnlockDrive(__dvd_handlespinupcb); + return; +} + +static void __dvd_spinupdrivecb(s32 result) +{ + if(result==0x0010) { + __dvd_statetimeout(); + return; + } + if(result==0x0001) { + if(!__dvd_drivechecked) { + __dvd_checkaddons(__dvd_spinupdrivecb); + return; + } + if(!(__dvd_drivestate&DVD_CHIPPRESENT)) { + if(!(__dvd_drivestate&DVD_INTEROPER)) { + if(!(__dvd_drivestate&DVD_DRIVERESET)) { + DVD_Reset(DVD_RESETHARD); + udelay(1150*1000); + } + __dvd_fwpatchmem(__dvd_spinupdrivecb); + return; + } + __dvd_handlespinup(); + return; + } + + __dvd_finalsudcb(result); + return; + } + __dvd_stategettingerror(); +} + +static void __dvd_statecoverclosed_spinupcb(s32 result) +{ + DCInvalidateRange(&__dvd_tmpid0,DVD_DISKIDSIZE); + __dvd_laststate = __dvd_statecoverclosed_cmd; + __dvd_statecoverclosed_cmd(__dvd_executing); +} + +static void __DVDInterruptHandler(u32 nIrq,void *pCtx) +{ + s64 now; + u32 status,ir,irm,irmm,diff; + dvdcallbacklow cb; + + SYS_CancelAlarm(__dvd_timeoutalarm); + + irmm = 0; + if(__dvd_lastcmdwasread) { + __dvd_cmd_prev.buf = __dvd_cmd_curr.buf; + __dvd_cmd_prev.len = __dvd_cmd_curr.len; + __dvd_cmd_prev.offset = __dvd_cmd_curr.offset; + if(__dvd_stopnextint) irmm |= 0x0008; + } + __dvd_lastcmdwasread = 0; + __dvd_stopnextint = 0; + + status = _diReg[0]; + irm = (status&(DVD_DE_MSK|DVD_TC_MSK|DVD_BRK_MSK)); + ir = ((status&(DVD_DE_INT|DVD_TC_INT|DVD_BRK_INT))&(irm<<1)); + if(ir&DVD_BRK_INT) irmm |= 0x0008; + if(ir&DVD_TC_INT) irmm |= 0x0001; + if(ir&DVD_DE_INT) irmm |= 0x0002; + + if(irmm) __dvd_resetoccured = 0; + + _diReg[0] = (ir|irm); + + now = gettime(); + diff = diff_msec(__dvd_lastresetend,now); + if(__dvd_resetoccured && diff>200) { + status = _diReg[1]; + irm = status&DVD_CVR_MSK; + ir = (status&DVD_CVR_INT)&(irm<<1); + if(ir&0x0004) { + cb = __dvd_resetcovercb; + __dvd_resetcovercb = NULL; + if(cb) { + cb(0x0004); + } + } + _diReg[1] = _diReg[1]; + } else { + if(__dvd_waitcoverclose) { + status = _diReg[1]; + irm = status&DVD_CVR_MSK; + ir = (status&DVD_CVR_INT)&(irm<<1); + if(ir&DVD_CVR_INT) irmm |= 0x0004; + _diReg[1] = (ir|irm); + __dvd_waitcoverclose = 0; + } else + _diReg[1] = 0; + } + + if(irmm&0x0008) { + if(!__dvd_breaking) irmm &= ~0x0008; + } + + if(irmm&0x0001) { + if(__ProcessNextCmd()) return; + } else { + __dvd_cmdlist[0].cmd = -1; + __dvd_nextcmdnum = 0; + } + + cb = __dvd_callback; + __dvd_callback = NULL; + if(cb) cb(irmm); + + __dvd_breaking = 0; +} + +static void __dvd_patchdrivecb(s32 result) +{ + u32 cnt = 0; + static u32 cmd_buf[3]; + static u32 stage = 0; + static u32 nPos = 0; + static u32 drv_address = 0x0040d000; + const u32 chunk_size = 3*sizeof(u32); + + if(__dvdpatchcode==NULL || __dvdpatchcode_size<=0) return; + + while(stage!=0x0003) { + __dvd_callback = __dvd_patchdrivecb; + if(stage==0x0000) { + for(cnt=0;cnt=__dvdpatchcode_size) stage = 0x0002; + else stage = 0x0001; + + _diReg[1] = _diReg[1]; + _diReg[2] = DVD_FWWRITEMEM; + _diReg[3] = drv_address; + _diReg[4] = _SHIFTL(cnt,16,16); + _diReg[7] = (DVD_DI_DMA|DVD_DI_START); + + drv_address += cnt; + return; + } + + if(stage>=0x0001) { + if(stage>0x0001) stage = 0x0003; + else stage = 0; + + _diReg[1] = _diReg[1]; + _diReg[2] = cmd_buf[0]; + _diReg[3] = cmd_buf[1]; + _diReg[4] = cmd_buf[2]; + _diReg[7] = DVD_DI_START; + return; + } + } + __dvd_callback = NULL; + __dvdpatchcode = NULL; + __dvd_drivestate |= DVD_INTEROPER; + DVD_LowFuncCall(0x0040d000,__dvd_finalpatchcb); +} + + +static void __dvd_unlockdrivecb(s32 result) +{ + u32 i; + __dvd_callback = __dvd_finalunlockcb; + _diReg[1] = _diReg[1]; + for(i=0;i<3;i++) _diReg[2+i] = ((u32*)__dvd_unlockcmd$222)[i]; + _diReg[7] = DVD_DI_START; +} + +void __dvd_resetasync(dvdcbcallback cb) +{ + u32 level; + + _CPU_ISR_Disable(level); + __dvd_clearwaitingqueue(); + if(__dvd_canceling) __dvd_cancelcallback = cb; + else { + if(__dvd_executing) __dvd_executing->cb = NULL; + DVD_CancelAllAsync(cb); + } + _CPU_ISR_Restore(level); +} + +void __dvd_statebusy(dvdcmdblk *block) +{ + u32 len; + __dvd_laststate = __dvd_statebusy; + if(block->cmd>DVD_MAXCOMMANDS) return; + + switch(block->cmd) { + case 1: //Read(Sector) + case 4: + _diReg[1] = _diReg[1]; + len = block->len-block->txdsize; + if(len<0x80000) block->currtxsize = len; + else block->currtxsize = 0x80000; + DVD_LowRead(block->buf+block->txdsize,block->currtxsize,(block->offset+block->txdsize),__dvd_statebusycb); + return; + case 2: //Seek(Sector) + _diReg[1] = _diReg[1]; + DVD_LowSeek(block->offset,__dvd_statebusycb); + return; + case 3: + case 15: + DVD_LowStopMotor(__dvd_statebusycb); + return; + case 5: //ReadDiskID + _diReg[1] = _diReg[1]; + block->currtxsize = DVD_DISKIDSIZE; + DVD_LowReadId(block->buf,__dvd_statebusycb); + return; + case 6: + _diReg[1] = _diReg[1]; + if(__dvd_autofinishing) { + __dvd_executing->currtxsize = 0; + DVD_LowRequestAudioStatus(0,__dvd_statebusycb); + } else { + __dvd_executing->currtxsize = 1; + DVD_LowAudioStream(0,__dvd_executing->len,__dvd_executing->offset,__dvd_statebusycb); + } + return; + case 7: + _diReg[1] = _diReg[1]; + DVD_LowAudioStream(0x00010000,0,0,__dvd_statebusycb); + return; + case 8: + _diReg[1] = _diReg[1]; + __dvd_autofinishing = 1; + DVD_LowAudioStream(0,0,0,__dvd_statebusycb); + return; + case 9: + _diReg[1] = _diReg[1]; + DVD_LowRequestAudioStatus(0,__dvd_statebusycb); + return; + case 10: + _diReg[1] = _diReg[1]; + DVD_LowRequestAudioStatus(0x00010000,__dvd_statebusycb); + return; + case 11: + _diReg[1] = _diReg[1]; + DVD_LowRequestAudioStatus(0x00020000,__dvd_statebusycb); + return; + case 12: + _diReg[1] = _diReg[1]; + DVD_LowRequestAudioStatus(0x00030000,__dvd_statebusycb); + return; + case 13: + _diReg[1] = _diReg[1]; + DVD_LowAudioBufferConfig(__dvd_executing->offset,__dvd_executing->len,__dvd_statebusycb); + return; + case 14: //Inquiry + _diReg[1] = _diReg[1]; + block->currtxsize = 0x20; + DVD_LowInquiry(block->buf,__dvd_statebusycb); + return; + case 16: + __dvd_lasterror = 0; + __dvd_extensionsenabled = TRUE; + DVD_LowSpinUpDrive(__dvd_statebusycb); + return; + case 17: + _diReg[1] = _diReg[1]; + DVD_LowControlMotor(block->offset,__dvd_statebusycb); + return; + case 18: + _diReg[1] = _diReg[1]; + DVD_LowSetGCMOffset(block->offset,__dvd_statebusycb); + return; + default: + return; + } +} + +void __dvd_stateready() +{ + dvdcmdblk *block; + if(!__dvd_checkwaitingqueue()) { + __dvd_executing = NULL; + return; + } + + __dvd_executing = __dvd_popwaitingqueue(); + + if(__dvd_fatalerror) { + __dvd_executing->state = -1; + block = __dvd_executing; + __dvd_executing = &__dvd_dummycmdblk; + if(block->cb) block->cb(-1,block); + __dvd_stateready(); + return; + } + + __dvd_currcmd = __dvd_executing->cmd; + + if(__dvd_resumefromhere) { + if(__dvd_resumefromhere<=7) { + switch(__dvd_resumefromhere) { + case 1: + __dvd_executing->state = 6; + __dvd_statemotorstopped(); + break; + case 2: + __dvd_executing->state = 11; + __dvd_statemotorstopped(); + break; + case 3: + __dvd_executing->state = 4; + __dvd_statemotorstopped(); + break; + case 4: + __dvd_executing->state = 5; + __dvd_statemotorstopped(); + break; + case 5: + __dvd_executing->state = -1; + __dvd_stateerror(__dvd_cancellasterror); + break; + case 6: + __dvd_executing->state = 3; + __dvd_statecoverclosed(); + break; + case 7: + __dvd_executing->state = 7; + __dvd_statemotorstopped(); + break; + default: + break; + + } + } + __dvd_resumefromhere = 0; + return; + } + __dvd_executing->state = 1; + __dvd_statebusy(__dvd_executing); +} + +void __dvd_statecoverclosed() +{ + dvdcmdblk *blk; + if(__dvd_currcmd==0x0004 || __dvd_currcmd==0x0005 + || __dvd_currcmd==0x000d || __dvd_currcmd==0x000f + || __dvd_currcmd==0x0010) { + __dvd_clearwaitingqueue(); + blk = __dvd_executing; + __dvd_executing = &__dvd_dummycmdblk; + if(blk->cb) blk->cb(-4,blk); + __dvd_stateready(); + } else { + __dvd_extensionsenabled = TRUE; + DVD_LowSpinUpDrive(__dvd_statecoverclosed_spinupcb); + } +} + +void __dvd_statecoverclosed_cmd(dvdcmdblk *block) +{ + DVD_LowReadId(&__dvd_tmpid0,__dvd_statecoverclosedcb); +} + +void __dvd_statemotorstopped() +{ + DVD_LowWaitCoverClose(__dvd_statemotorstoppedcb); +} + +void __dvd_stateerror(s32 result) +{ + __dvd_storeerror(result); + DVD_LowStopMotor(__dvd_stateerrorcb); +} + +void __dvd_stategettingerror() +{ + DVD_LowRequestError(__dvd_stategettingerrorcb); +} + +void __dvd_statecheckid2(dvdcmdblk *block) +{ + +} + +void __dvd_statecheckid() +{ + dvdcmdblk *blk; + if(__dvd_currcmd==0x0003) { + if(memcmp(&__dvd_dummycmdblk,&__dvd_executing,sizeof(dvdcmdblk))) { + DVD_LowStopMotor(__dvd_statecheckid1cb); + return; + } + memcpy(__dvd_diskID,&__dvd_tmpid0,DVD_DISKIDSIZE); + + __dvd_executing->state = 1; + DCInvalidateRange(&__dvd_tmpid0,DVD_DISKIDSIZE); + __dvd_laststate = __dvd_statecheckid2; + __dvd_statecheckid2(__dvd_executing); + return; + } + if(__dvd_currcmd==0x0010) { + blk = __dvd_executing; + blk->state = 0; + __dvd_executing = &__dvd_dummycmdblk; + if(blk->cb) blk->cb(0,blk); + __dvd_stateready(); + return; + } + if(__dvd_currcmd!=0x0005 && memcmp(__dvd_diskID,&__dvd_tmpid0,DVD_DISKIDSIZE)) { + blk = __dvd_executing; + blk->state = -1; + __dvd_executing = &__dvd_dummycmdblk; + if(blk->cb) blk->cb(-1,blk); //terminate current operation + if(__dvd_mountusrcb) __dvd_mountusrcb(DVD_DISKIDSIZE,blk); //if we came across here, notify user callback of successful remount + __dvd_stateready(); + return; + } + __dvd_statebusy(__dvd_executing); +} + +void __dvd_statetimeout() +{ + __dvd_storeerror(0x01234568); + DVD_Reset(DVD_RESETSOFT); + __dvd_stateerrorcb(0); +} + +void __dvd_stategotoretry() +{ + DVD_LowStopMotor(__dvd_stategotoretrycb); +} + +s32 __issuecommand(s32 prio,dvdcmdblk *block) +{ + s32 ret; + u32 level; + if(__dvd_autoinvalidation && + (block->cmd==0x0001 || block->cmd==0x00004 + || block->cmd==0x0005 || block->cmd==0x000e)) DCInvalidateRange(block->buf,block->len); + + _CPU_ISR_Disable(level); + block->state = 0x0002; + ret = __dvd_pushwaitingqueue(prio,block); + if(!__dvd_executing) __dvd_stateready(); + _CPU_ISR_Restore(level); + return ret; +} + +s32 DVD_LowUnlockDrive(dvdcallbacklow cb) +{ + u32 i; + + __dvd_callback = __dvd_unlockdrivecb; + __dvd_finalunlockcb = cb; + __dvd_stopnextint = 0; + + for(i=0;i<3;i++) _diReg[2+i] = ((u32*)__dvd_unlockcmd$221)[i]; + _diReg[7] = DVD_DI_START; + + return 1; +} + +s32 DVD_LowPatchDriveCode(dvdcallbacklow cb) +{ + __dvd_finalpatchcb = cb; + __dvd_stopnextint = 0; + + if(__dvd_driveinfo.rel_date==DVD_MODEL04) { + __dvdpatchcode = __dvd_patchcode04; + __dvdpatchcode_size = __dvd_patchcode04_size; + } else if((__dvd_driveinfo.rel_date&0x0000ff00)==0x00000500) { // for wii: since i don't know the real date i have to mask & compare. + } else if(__dvd_driveinfo.rel_date==DVD_MODEL06) { + __dvdpatchcode = __dvd_patchcode06; + __dvdpatchcode_size = __dvd_patchcode06_size; + } else if(__dvd_driveinfo.rel_date==DVD_MODEL08) { + __dvdpatchcode = __dvd_patchcode08; + __dvdpatchcode_size = __dvd_patchcode08_size; + } else if(__dvd_driveinfo.rel_date==DVD_MODEL08Q) { + __dvdpatchcode = __dvd_patchcodeQ08; + __dvdpatchcode_size = __dvd_patchcodeQ08_size; + } else if((__dvd_driveinfo.rel_date&0x0000ff00)==0x00000900) { // for wii: since i don't know the real date i have to mask & compare. + } else { + __dvdpatchcode = NULL; + __dvdpatchcode_size = 0; + } + + __dvd_patchdrivecb(0); + return 1; +} + +s32 DVD_LowSetOffset(s64 offset,dvdcallbacklow cb) +{ + __dvd_stopnextint = 0; + __dvd_callback = cb; + + _diReg[2] = DVD_FWSETOFFSET; + _diReg[3] = (u32)(offset>>2); + _diReg[4] = 0; + _diReg[7] = DVD_DI_START; + + return 1; +} + +s32 DVD_LowSetGCMOffset(s64 offset,dvdcallbacklow cb) +{ + static s64 loc_offset = 0; + loc_offset = offset; + + __dvd_finaloffsetcb = cb; + __dvd_stopnextint = 0; + __dvd_usrdata = &loc_offset; + + DVD_LowUnlockDrive(__dvd_setgcmoffsetcb); + return 1; +} + +s32 DVD_LowReadmem(u32 address,void *buffer,dvdcallbacklow cb) +{ + __dvd_finalreadmemcb = cb; + __dvd_usrdata = buffer; + __dvd_callback = __dvd_readmemcb; + __dvd_stopnextint = 0; + + _diReg[2] = DVD_FWREADMEM; + _diReg[3] = address; + _diReg[4] = 0x00010000; + _diReg[7] = DVD_DI_START; + + return 1; +} + +s32 DVD_LowFuncCall(u32 address,dvdcallbacklow cb) +{ + __dvd_callback = cb; + __dvd_stopnextint = 0; + + _diReg[2] = DVD_FWFUNCCALL; + _diReg[3] = address; + _diReg[4] = 0x66756E63; + _diReg[7] = DVD_DI_START; + + return 1; +} + +s32 DVD_LowSpinMotor(u32 mode,dvdcallbacklow cb) +{ + __dvd_callback = cb; + __dvd_stopnextint = 0; + + _diReg[2] = DVD_FWCTRLMOTOR|(mode&0x0000ff00); + _diReg[3] = 0; + _diReg[4] = 0; + _diReg[7] = DVD_DI_START; + + return 1; +} + +s32 DVD_LowEnableExtensions(u8 enable,dvdcallbacklow cb) +{ + __dvd_callback = cb; + __dvd_stopnextint = 0; + + _diReg[2] = (DVD_FWENABLEEXT|_SHIFTL(enable,16,8)); + _diReg[3] = 0; + _diReg[4] = 0; + _diReg[7] = DVD_DI_START; + + return 1; +} + +s32 DVD_LowSetStatus(u32 status,dvdcallbacklow cb) +{ + __dvd_callback = cb; + __dvd_stopnextint = 0; + + _diReg[2] = (DVD_FWSETSTATUS|(status&0x00ffffff)); + _diReg[3] = 0; + _diReg[4] = 0; + _diReg[7] = DVD_DI_START; + + return 1; +} + +s32 DVD_LowGetStatus(u32 *status,dvdcallbacklow cb) +{ + __dvd_finalstatuscb = cb; + __dvd_usrdata = status; + + DVD_LowRequestError(__dvd_getstatuscb); + return 1; +} + +s32 DVD_LowControlMotor(u32 mode,dvdcallbacklow cb) +{ + __dvd_stopnextint = 0; + __dvd_motorcntrl = mode; + __dvd_finalsudcb = cb; + DVD_LowUnlockDrive(__dvd_cntrldrivecb); + + return 1; + +} + +s32 DVD_LowSpinUpDrive(dvdcallbacklow cb) +{ + __dvd_finalsudcb = cb; + __dvd_spinupdrivecb(1); + + return 1; +} + +s32 DVD_LowRead(void *buf,u32 len,s64 offset,dvdcallbacklow cb) +{ + _diReg[6] = len; + + __dvd_cmd_curr.buf = buf; + __dvd_cmd_curr.len = len; + __dvd_cmd_curr.offset = offset; + __DoRead(buf,len,offset,cb); + return 1; +} + +s32 DVD_LowSeek(s64 offset,dvdcallbacklow cb) +{ + struct timespec tb; + + __dvd_callback = cb; + __dvd_stopnextint = 0; + + _diReg[2] = DVD_SEEKSECTOR; + _diReg[3] = (u32)(offset>>2); + _diReg[7] = DVD_DI_START; + + tb.tv_sec = 10; + tb.tv_nsec = 0; + __SetupTimeoutAlarm(&tb); + + return 1; +} + +s32 DVD_LowReadId(dvddiskid *diskID,dvdcallbacklow cb) +{ + struct timespec tb; + + __dvd_callback = cb; + __dvd_stopnextint = 0; + + _diReg[2] = DVD_READDISKID; + _diReg[3] = 0; + _diReg[4] = DVD_DISKIDSIZE; + _diReg[5] = (u32)diskID; + _diReg[6] = DVD_DISKIDSIZE; + _diReg[7] = (DVD_DI_DMA|DVD_DI_START); + + tb.tv_sec = 10; + tb.tv_nsec = 0; + __SetupTimeoutAlarm(&tb); + + return 1; +} + +s32 DVD_LowRequestError(dvdcallbacklow cb) +{ + struct timespec tb; + + __dvd_callback = cb; + __dvd_stopnextint = 0; + + _diReg[2] = DVD_REQUESTERROR; + _diReg[7] = DVD_DI_START; + + tb.tv_sec = 10; + tb.tv_nsec = 0; + __SetupTimeoutAlarm(&tb); + + return 1; +} + +s32 DVD_LowStopMotor(dvdcallbacklow cb) +{ + struct timespec tb; + + __dvd_callback = cb; + __dvd_stopnextint = 0; + + _diReg[2] = DVD_STOPMOTOR; + _diReg[7] = DVD_DI_START; + + tb.tv_sec = 10; + tb.tv_nsec = 0; + __SetupTimeoutAlarm(&tb); + + return 1; +} + +s32 DVD_LowInquiry(dvddrvinfo *info,dvdcallbacklow cb) +{ + struct timespec tb; + + __dvd_callback = cb; + __dvd_stopnextint = 0; + + _diReg[2] = DVD_DVDINQUIRY; + _diReg[4] = 0x20; + _diReg[5] = (u32)info; + _diReg[6] = 0x20; + _diReg[7] = (DVD_DI_DMA|DVD_DI_START); + + tb.tv_sec = 10; + tb.tv_nsec = 0; + __SetupTimeoutAlarm(&tb); + + return 1; +} + +s32 DVD_LowWaitCoverClose(dvdcallbacklow cb) +{ + __dvd_callback = cb; + __dvd_waitcoverclose = 1; + __dvd_stopnextint = 0; + _diReg[1] = DVD_CVR_MSK; + return 1; +} + +void DVD_LowReset(u32 reset_mode) +{ + u32 val; + + _diReg[1] = DVD_CVR_MSK; + val = _piReg[9]; + _piReg[9] = ((val&~0x0004)|0x0001); + + udelay(12); + + if(reset_mode==DVD_RESETHARD) val |= 0x0004; + val |= 0x0001; + _piReg[9] = val; + + __dvd_resetoccured = 1; + __dvd_lastresetend = gettime(); + __dvd_drivestate |= DVD_DRIVERESET; +} + +s32 DVD_LowAudioStream(u32 subcmd,u32 len,s64 offset,dvdcallbacklow cb) +{ + struct timespec tb; + + __dvd_callback = cb; + __dvd_stopnextint = 0; + + _diReg[2] = DVD_AUDIOSTREAM|subcmd; + _diReg[3] = (u32)(offset>>2); + _diReg[4] = len; + _diReg[7] = DVD_DI_START; + + tb.tv_sec = 10; + tb.tv_nsec = 0; + __SetupTimeoutAlarm(&tb); + + return 1; +} + +s32 DVD_LowAudioBufferConfig(s32 enable,u32 size,dvdcallbacklow cb) +{ + u32 val; + struct timespec tb; + + __dvd_callback = cb; + __dvd_stopnextint = 0; + + val = 0; + if(enable) { + val |= 0x00010000; + if(!size) val |= 0x0000000a; + } + + _diReg[2] = DVD_AUDIOCONFIG|val; + _diReg[7] = DVD_DI_START; + + tb.tv_sec = 10; + tb.tv_nsec = 0; + __SetupTimeoutAlarm(&tb); + + return 1; +} + +s32 DVD_LowRequestAudioStatus(u32 subcmd,dvdcallbacklow cb) +{ + struct timespec tb; + + __dvd_callback = cb; + __dvd_stopnextint = 0; + + _diReg[2] = DVD_AUDIOSTATUS|subcmd; + _diReg[7] = DVD_DI_START; + + tb.tv_sec = 10; + tb.tv_nsec = 0; + __SetupTimeoutAlarm(&tb); + + return 1; +} + +//special, only used in bios replacement. therefor only there extern'd +s32 __DVDAudioBufferConfig(dvdcmdblk *block,u32 enable,u32 size,dvdcbcallback cb) +{ + if(!block) return 0; + + block->cmd = 0x000d; + block->offset = enable; + block->len = size; + block->cb = cb; + + return __issuecommand(2,block); +} + +s32 DVD_ReadDiskID(dvdcmdblk *block,dvddiskid *id,dvdcbcallback cb) +{ + if(!block || !id) return 0; + + block->cmd = 0x0005; + block->buf = id; + block->len = DVD_DISKIDSIZE; + block->offset = 0; + block->txdsize = 0; + block->cb = cb; + + return __issuecommand(2,block); +} + +s32 DVD_ReadAbsAsyncPrio(dvdcmdblk *block,void *buf,u32 len,s64 offset,dvdcbcallback cb,s32 prio) +{ + block->cmd = 0x0001; + block->buf = buf; + block->len = len; + block->offset = offset; + block->txdsize = 0; + block->cb = cb; + + return __issuecommand(prio,block); +} + +s32 DVD_ReadAbsAsyncForBS(dvdcmdblk *block,void *buf,u32 len,s64 offset,dvdcbcallback cb) +{ + block->cmd = 0x0004; + block->buf = buf; + block->len = len; + block->offset = offset; + block->txdsize = 0; + block->cb = cb; + + return __issuecommand(2,block); +} + +s32 DVD_SeekAbsAsyncPrio(dvdcmdblk *block,s64 offset,dvdcbcallback cb,s32 prio) +{ + block->cmd = 0x0002; + block->offset = offset; + block->cb = cb; + + return __issuecommand(prio,block); +} + +s32 DVD_InquiryAsync(dvdcmdblk *block,dvddrvinfo *info,dvdcbcallback cb) +{ + block->cmd = 0x000e; + block->buf = info; + block->len = 0x20; + block->txdsize = 0; + block->cb = cb; + return __issuecommand(2,block); +} + +s32 DVD_Inquiry(dvdcmdblk *block,dvddrvinfo *info) +{ + u32 level; + s32 state,ret; + ret = DVD_InquiryAsync(block,info,__dvd_inquirysynccb); + if(!ret) return -1; + + _CPU_ISR_Disable(level); + do { + state = block->state; + if(state==0) ret = block->txdsize; + else if(state==-1) ret = -1; + else if(state==10) ret = -3; + else LWP_ThreadSleep(__dvd_wait_queue); + } while(state!=0 && state!=-1 && state!=10); + _CPU_ISR_Restore(level); + return ret; +} + +s32 DVD_ReadPrio(dvdcmdblk *block,void *buf,u32 len,s64 offset,s32 prio) +{ + u32 level; + s32 state,ret; + if(offset>=0 && offset<8511160320LL) { + ret = DVD_ReadAbsAsyncPrio(block,buf,len,offset,__dvd_readsynccb,prio); + if(!ret) return -1; + + _CPU_ISR_Disable(level); + do { + state = block->state; + if(state==0) ret = block->txdsize; + else if(state==-1) ret = -1; + else if(state==10) ret = -3; + else LWP_ThreadSleep(__dvd_wait_queue); + } while(state!=0 && state!=-1 && state!=10); + _CPU_ISR_Restore(level); + return ret; + } + return -1; +} + +s32 DVD_SeekPrio(dvdcmdblk *block,s64 offset,s32 prio) +{ + u32 level; + s32 state,ret; + if(offset>0 && offset<8511160320LL) { + ret = DVD_SeekAbsAsyncPrio(block,offset,__dvd_seeksynccb,prio); + if(!ret) return -1; + + _CPU_ISR_Disable(level); + do { + state = block->state; + if(state==0) ret = 0; + else if(state==-1) ret = -1; + else if(state==10) ret = -3; + else LWP_ThreadSleep(__dvd_wait_queue); + } while(state!=0 && state!=-1 && state!=10); + _CPU_ISR_Restore(level); + + return ret; + } + return -1; +} + +s32 DVD_CancelAllAsync(dvdcbcallback cb) +{ + u32 level; + _CPU_ISR_Disable(level); + DVD_Pause(); + _CPU_ISR_Restore(level); + return 1; +} + +s32 DVD_StopStreamAtEndAsync(dvdcmdblk *block,dvdcbcallback cb) +{ + block->cmd = 0x08; + block->cb = cb; + return __issuecommand(1,block); +} + +s32 DVD_StopStreamAtEnd(dvdcmdblk *block) +{ + s32 ret,state; + u32 level; + ret = DVD_StopStreamAtEndAsync(block,__dvd_streamatendsynccb); + if(!ret) return -1; + + _CPU_ISR_Disable(level); + do { + state = block->state; + if(state==0 || state==-1) ret = -1; + else if(state==10) ret = block->txdsize; + else LWP_ThreadSleep(__dvd_wait_queue); + } while(state!=0 && state!=-1 && state!=10); + _CPU_ISR_Restore(level); + + return ret; +} + +s32 DVD_SpinUpDriveAsync(dvdcmdblk *block,dvdcbcallback cb) +{ + DVD_Reset(DVD_RESETNONE); + + block->cmd = 0x10; + block->cb = cb; + return __issuecommand(1,block); +} + +s32 DVD_SpinUpDrive(dvdcmdblk *block) +{ + s32 ret,state; + u32 level; + ret = DVD_SpinUpDriveAsync(block,__dvd_spinupdrivesynccb); + if(!ret) return -1; + + _CPU_ISR_Disable(level); + do { + state = block->state; + if(state==0 || state==-1) ret = -1; + else if(state==10) ret = block->txdsize; + else LWP_ThreadSleep(__dvd_wait_queue); + } while(state!=0 && state!=-1 && state!=10); + _CPU_ISR_Restore(level); + + return ret; +} + +s32 DVD_ControlDriveAsync(dvdcmdblk *block,u32 cmd,dvdcbcallback cb) +{ + block->cmd = 0x11; + block->cb = cb; + block->offset = cmd; + return __issuecommand(1,block); +} + +s32 DVD_ControlDrive(dvdcmdblk *block,u32 cmd) +{ + s32 ret,state; + u32 level; + ret = DVD_ControlDriveAsync(block,cmd,__dvd_motorcntrlsynccb); + + _CPU_ISR_Disable(level); + do { + state = block->state; + if(state==0 || state==-1) ret = -1; + else if(state==10) ret = block->txdsize; + else LWP_ThreadSleep(__dvd_wait_queue); + } while(state!=0 && state!=-1 && state!=10); + _CPU_ISR_Restore(level); + + return ret; +} + +s32 DVD_SetGCMOffsetAsync(dvdcmdblk *block,s64 offset,dvdcbcallback cb) +{ + block->cmd = 0x12; + block->cb = cb; + block->offset = offset; + return __issuecommand(1,block); +} + +s32 DVD_SetGCMOffset(dvdcmdblk *block,s64 offset) +{ + s32 ret,state; + u32 level; + ret = DVD_SetGCMOffsetAsync(block,offset,__dvd_setgcmsynccb); + + _CPU_ISR_Disable(level); + do { + state = block->state; + if(state==0 || state==-1) ret = -1; + else if(state==10) ret = block->txdsize; + else LWP_ThreadSleep(__dvd_wait_queue); + } while(state!=0 && state!=-1 && state!=10); + _CPU_ISR_Restore(level); + + return ret; +} + +s32 DVD_GetCmdBlockStatus(dvdcmdblk *block) +{ + u32 level; + s32 ret = -1; + + _CPU_ISR_Disable(level); + if(block) { + if((ret=block->state)==0x0003) ret = 1; + } + _CPU_ISR_Restore(level); + return ret; +} + +s32 DVD_GetDriveStatus() +{ + s32 ret; + u32 level; + + _CPU_ISR_Disable(level); + if(__dvd_fatalerror) ret = -1; + else { + if(__dvd_pausingflag) ret = 8; + else { + if(!__dvd_executing || __dvd_executing==&__dvd_dummycmdblk) ret = 0; + else ret = DVD_GetCmdBlockStatus(__dvd_executing); + } + } + _CPU_ISR_Restore(level); + return ret; +} + +void DVD_Pause() +{ + u32 level; + + _CPU_ISR_Disable(level); + __dvd_pauseflag = 1; + if(__dvd_executing==NULL) __dvd_pausingflag = 1; + _CPU_ISR_Restore(level); +} + +void DVD_Reset(u32 reset_mode) +{ + __dvd_drivestate &= ~(DVD_INTEROPER|DVD_CHIPPRESENT|DVD_DRIVERESET); + + if(reset_mode!=DVD_RESETNONE) + DVD_LowReset(reset_mode); + + _diReg[0] = (DVD_DE_MSK|DVD_TC_MSK|DVD_BRK_MSK); + _diReg[1] = _diReg[1]; + + __dvd_resetrequired = 0; + __dvd_internalretries = 0; +} + +void callback(s32 result,dvdcmdblk *block) +{ + if(result==0x00) { + DVD_ReadDiskID(block,&__dvd_tmpid0,callback); + return; + } + else if(result>=DVD_DISKIDSIZE) { + memcpy(__dvd_diskID,&__dvd_tmpid0,DVD_DISKIDSIZE); + } else if(result==-4) { + DVD_SpinUpDriveAsync(block,callback); + return; + } + if(__dvd_mountusrcb) __dvd_mountusrcb(result,block); +} + +s32 DVD_MountAsync(dvdcmdblk *block,dvdcbcallback cb) +{ + __dvd_mountusrcb = cb; + DVD_Reset(DVD_RESETHARD); + udelay(1150*1000); + return DVD_SpinUpDriveAsync(block,callback); +} + +s32 DVD_Mount() +{ + s32 ret = 0; + s32 state; + u32 level; + + ret = DVD_MountAsync(&__dvd_block$15,__dvd_mountsynccb); + if(!ret) return -1; + + _CPU_ISR_Disable(level); + do { + state = __dvd_block$15.state; + if(state==0) ret = 0; + else if(state==-1) ret = -1; + else if(state==10) ret = -3; + else LWP_ThreadSleep(__dvd_wait_queue); + } while(state!=0 && state!=-1 && state!=10); + __dvd_mountusrcb = NULL; //set to zero coz this is only used to sync for this function. + _CPU_ISR_Restore(level); + + return ret; +} + +dvddiskid* DVD_GetCurrentDiskID() +{ + return __dvd_diskID; +} + +dvddrvinfo* DVD_GetDriveInfo() +{ + return &__dvd_driveinfo; +} + +void DVD_Init() +{ + if(!__dvd_initflag) { + __dvd_initflag = 1; + __dvd_clearwaitingqueue(); + __DVDInitWA(); + + IRQ_Request(IRQ_PI_DI,__DVDInterruptHandler,NULL); + __UnmaskIrq(IRQMASK(IRQ_PI_DI)); + + SYS_CreateAlarm(&__dvd_timeoutalarm); + LWP_InitQueue(&__dvd_wait_queue); + } +} + +u32 DVD_SetAutoInvalidation(u32 auto_inv) +{ + u32 ret = __dvd_autoinvalidation; + __dvd_autoinvalidation= auto_inv; + return ret; +} + +static bool dvdio_Startup() +{ + DVD_Init(); + + if (mfpvr() == 0x00083214) // GameCube + { + DVD_Mount(); + } + else + { + DVD_Reset(DVD_RESETHARD); + DVD_ReadDiskID(&__dvd_block$15, &__dvd_tmpid0, callback); + } + return true; +} + +static bool dvdio_IsInserted() +{ + u32 status = 0; + DVD_LowGetStatus(&status, NULL); + + if(DVD_STATUS(status) == DVD_STATUS_READY) + return true; + + return false; +} + +static bool dvdio_ReadSectors(sec_t sector,sec_t numSectors,void *buffer) +{ + dvdcmdblk blk; + + if(DVD_ReadPrio(&blk, buffer, numSectors<<11, sector << 11, 2) <= 0) + return false; + + return true; +} + +static bool dvdio_WriteSectors(sec_t sector,sec_t numSectors,const void *buffer) +{ + return true; +} + +static bool dvdio_ClearStatus() +{ + return true; +} + +static bool dvdio_Shutdown() +{ + return true; +} + +const DISC_INTERFACE __io_gcdvd = { + DEVICE_TYPE_GAMECUBE_DVD, + FEATURE_MEDIUM_CANREAD | FEATURE_GAMECUBE_DVD, + (FN_MEDIUM_STARTUP)&dvdio_Startup, + (FN_MEDIUM_ISINSERTED)&dvdio_IsInserted, + (FN_MEDIUM_READSECTORS)&dvdio_ReadSectors, + (FN_MEDIUM_WRITESECTORS)&dvdio_WriteSectors, + (FN_MEDIUM_CLEARSTATUS)&dvdio_ClearStatus, + (FN_MEDIUM_SHUTDOWN)&dvdio_Shutdown +}; diff --git a/wii/libogc/libogc/es.c b/wii/libogc/libogc/es.c new file mode 100644 index 0000000000..2a9f1330ee --- /dev/null +++ b/wii/libogc/libogc/es.c @@ -0,0 +1,1091 @@ +/*------------------------------------------------------------- + +es.c -- ETicket services + +Copyright (C) 2008 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) +Hector Martin (marcan) +Andre Heider (dhewg) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + +#if defined(HW_RVL) + +#include +#include +#include +#include +#include +#include +#include +#include "ipc.h" +#include "asm.h" +#include "processor.h" +#include "mutex.h" +#include "es.h" + +#define IOCTL_ES_ADDTICKET 0x01 +#define IOCTL_ES_ADDTITLESTART 0x02 +#define IOCTL_ES_ADDCONTENTSTART 0x03 +#define IOCTL_ES_ADDCONTENTDATA 0x04 +#define IOCTL_ES_ADDCONTENTFINISH 0x05 +#define IOCTL_ES_ADDTITLEFINISH 0x06 +#define IOCTL_ES_GETDEVICEID 0x07 +#define IOCTL_ES_LAUNCH 0x08 +#define IOCTL_ES_OPENCONTENT 0x09 +#define IOCTL_ES_READCONTENT 0x0A +#define IOCTL_ES_CLOSECONTENT 0x0B +#define IOCTL_ES_GETOWNEDTITLECNT 0x0C +#define IOCTL_ES_GETOWNEDTITLES 0x0D +#define IOCTL_ES_GETTITLECNT 0x0E +#define IOCTL_ES_GETTITLES 0x0F +#define IOCTL_ES_GETTITLECONTENTSCNT 0x10 +#define IOCTL_ES_GETTITLECONTENTS 0x11 +#define IOCTL_ES_GETVIEWCNT 0x12 +#define IOCTL_ES_GETVIEWS 0x13 +#define IOCTL_ES_GETTMDVIEWCNT 0x14 +#define IOCTL_ES_GETTMDVIEWS 0x15 +//#define IOCTL_ES_GETCONSUMPTION 0x16 +#define IOCTL_ES_DELETETITLE 0x17 +#define IOCTL_ES_DELETETICKET 0x18 +//#define IOCTL_ES_DIGETTMDVIEWSIZE 0x19 +//#define IOCTL_ES_DIGETTMDVIEW 0x1A +//#define IOCTL_ES_DIGETTICKETVIEW 0x1B +#define IOCTL_ES_DIVERIFY 0x1C +#define IOCTL_ES_GETTITLEDIR 0x1D +#define IOCTL_ES_GETDEVICECERT 0x1E +#define IOCTL_ES_IMPORTBOOT 0x1F +#define IOCTL_ES_GETTITLEID 0x20 +#define IOCTL_ES_SETUID 0x21 +#define IOCTL_ES_DELETETITLECONTENT 0x22 +#define IOCTL_ES_SEEKCONTENT 0x23 +#define IOCTL_ES_OPENTITLECONTENT 0x24 +//#define IOCTL_ES_LAUNCHBC 0x25 +//#define IOCTL_ES_EXPORTTITLEINIT 0x26 +//#define IOCTL_ES_EXPORTCONTENTBEGIN 0x27 +//#define IOCTL_ES_EXPORTCONTENTDATA 0x28 +//#define IOCTL_ES_EXPORTCONTENTEND 0x29 +//#define IOCTL_ES_EXPORTTITLEDONE 0x2A +#define IOCTL_ES_ADDTMD 0x2B +#define IOCTL_ES_ENCRYPT 0x2C +#define IOCTL_ES_DECRYPT 0x2D +#define IOCTL_ES_GETBOOT2VERSION 0x2E +#define IOCTL_ES_ADDTITLECANCEL 0x2F +#define IOCTL_ES_SIGN 0x30 +//#define IOCTL_ES_VERIFYSIGN 0x31 +#define IOCTL_ES_GETSTOREDCONTENTCNT 0x32 +#define IOCTL_ES_GETSTOREDCONTENTS 0x33 +#define IOCTL_ES_GETSTOREDTMDSIZE 0x34 +#define IOCTL_ES_GETSTOREDTMD 0x35 +#define IOCTL_ES_GETSHAREDCONTENTCNT 0x36 +#define IOCTL_ES_GETSHAREDCONTENTS 0x37 + + +#define ES_HEAP_SIZE 0x800 + +#define ISALIGNED(x) ((((u32)x)&0x1F)==0) + +static char __es_fs[] ATTRIBUTE_ALIGN(32) = "/dev/es"; + +static s32 __es_fd = -1; +static s32 __es_hid = -1; + +static void __ES_InitFS(void); +static void __ES_DeinitFS(void); + +s32 __ES_Init(void) +{ + s32 ret = 0; + + if(__es_hid < 0 ) { + __es_hid = iosCreateHeap(ES_HEAP_SIZE); + if(__es_hid < 0) + return __es_hid; + } + + if (__es_fd < 0) { + ret = IOS_Open(__es_fs,0); + if(ret<0) + return ret; + __es_fd = ret; + } + + + __ES_InitFS(); + + return 0; +} + +s32 __ES_Close(void) +{ + s32 ret; + + if(__es_fd < 0) return 0; + + __ES_DeinitFS(); + + ret = IOS_Close(__es_fd); + + __es_fd = -1; + + if(ret<0) + return ret; + + return 0; +} + +// Used by ios.c after reloading IOS +s32 __ES_Reset(void) +{ + __es_fd = -1; + return 0; +} + +s32 ES_GetTitleID(u64 *titleID) +{ + s32 ret; + u64 title; + + if(__es_fd<0) return ES_ENOTINIT; + if(!titleID) return ES_EINVAL; + + ret = IOS_IoctlvFormat(__es_hid,__es_fd,IOCTL_ES_GETTITLEID,":q",&title); + if(ret<0) return ret; + + *titleID = title; + return ret; +} + +s32 ES_SetUID(u64 uid) +{ + if(__es_fd<0) return ES_ENOTINIT; + + return IOS_IoctlvFormat(__es_hid,__es_fd,IOCTL_ES_SETUID,"q:",uid); +} + +s32 ES_GetDataDir(u64 titleID,char *filepath) +{ + s32 ret; + + if(__es_fd<0) return ES_ENOTINIT; + if(!filepath) return ES_EINVAL; + if(!ISALIGNED(filepath)) return ES_EALIGN; + + ret = IOS_IoctlvFormat(__es_hid,__es_fd,IOCTL_ES_GETTITLEDIR,"q:d",titleID,filepath,30); + + return ret; +} + +s32 ES_LaunchTitle(u64 titleID, const tikview *view) +{ + + s32 res; + STACK_ALIGN(u64,title,1,32); + STACK_ALIGN(ioctlv,vectors,2,32); + + if(__es_fd<0) return ES_ENOTINIT; + if(!view) return ES_EINVAL; + if(!ISALIGNED(view)) return ES_EALIGN; + + *title = titleID; + vectors[0].data = (void*)title; + vectors[0].len = sizeof(u64); + vectors[1].data = (void*)view; + vectors[1].len = sizeof(tikview); + res = IOS_IoctlvReboot(__es_fd,IOCTL_ES_LAUNCH,2,0,vectors); + + return res; +} + +s32 ES_LaunchTitleBackground(u64 titleID, const tikview *view) +{ + + s32 res; + STACK_ALIGN(u64,title,1,32); + STACK_ALIGN(ioctlv,vectors,2,32); + + if(__es_fd<0) return ES_ENOTINIT; + if(!view) return ES_EINVAL; + if(!ISALIGNED(view)) return ES_EALIGN; + + *title = titleID; + vectors[0].data = (void*)title; + vectors[0].len = sizeof(u64); + vectors[1].data = (void*)view; + vectors[1].len = sizeof(tikview); + res = IOS_IoctlvRebootBackground(__es_fd,IOCTL_ES_LAUNCH,2,0,vectors); + + return res; +} + +s32 ES_GetNumTicketViews(u64 titleID, u32 *cnt) +{ + s32 ret; + u32 cntviews; + + if(__es_fd<0) return ES_ENOTINIT; + if(!cnt) return ES_EINVAL; + + ret = IOS_IoctlvFormat(__es_hid,__es_fd,IOCTL_ES_GETVIEWCNT,"q:i",titleID,&cntviews); + + if(ret<0) return ret; + *cnt = cntviews; + return ret; +} + +s32 ES_GetTicketViews(u64 titleID, tikview *views, u32 cnt) +{ + if(__es_fd<0) return ES_ENOTINIT; + if(cnt <= 0) return ES_EINVAL; + if(!views) return ES_EINVAL; + if(!ISALIGNED(views)) return ES_EALIGN; + + return IOS_IoctlvFormat(__es_hid,__es_fd,IOCTL_ES_GETVIEWS,"qi:d",titleID,cnt,views,sizeof(tikview)*cnt); +} + +s32 ES_GetNumOwnedTitles(u32 *cnt) +{ + s32 ret; + u32 cnttitles; + + if(__es_fd<0) return ES_ENOTINIT; + if(cnt == NULL) return ES_EINVAL; + + ret = IOS_IoctlvFormat(__es_hid,__es_fd,IOCTL_ES_GETOWNEDTITLECNT,":i",&cnttitles); + + if(ret<0) return ret; + *cnt = cnttitles; + return ret; +} + +s32 ES_GetOwnedTitles(u64 *titles, u32 cnt) +{ + if(__es_fd<0) return ES_ENOTINIT; + if(cnt <= 0) return ES_EINVAL; + if(!titles) return ES_EINVAL; + if(!ISALIGNED(titles)) return ES_EALIGN; + + return IOS_IoctlvFormat(__es_hid,__es_fd,IOCTL_ES_GETOWNEDTITLES,"i:d",cnt,titles,sizeof(u64)*cnt); +} + +s32 ES_GetNumTitles(u32 *cnt) +{ + s32 ret; + u32 cnttitles; + + if(__es_fd<0) return ES_ENOTINIT; + if(cnt == NULL) return ES_EINVAL; + + ret = IOS_IoctlvFormat(__es_hid,__es_fd,IOCTL_ES_GETTITLECNT,":i",&cnttitles); + + if(ret<0) return ret; + *cnt = cnttitles; + return ret; +} + +s32 ES_GetTitles(u64 *titles, u32 cnt) +{ + if(__es_fd<0) return ES_ENOTINIT; + if(cnt <= 0) return ES_EINVAL; + if(!titles) return ES_EINVAL; + if(!ISALIGNED(titles)) return ES_EALIGN; + + return IOS_IoctlvFormat(__es_hid,__es_fd,IOCTL_ES_GETTITLES,"i:d",cnt,titles,sizeof(u64)*cnt); +} + +s32 ES_GetNumStoredTMDContents(const signed_blob *stmd, u32 tmd_size, u32 *cnt) +{ + s32 ret; + u32 cntct; + + if(__es_fd<0) return ES_ENOTINIT; + if(!cnt) return ES_EINVAL; + if(!stmd || !IS_VALID_SIGNATURE(stmd)) return ES_EINVAL; + if(!ISALIGNED(stmd)) return ES_EALIGN; + + ret = IOS_IoctlvFormat(__es_hid,__es_fd,IOCTL_ES_GETSTOREDCONTENTCNT,"d:i",stmd,tmd_size,&cntct); + + if(ret<0) return ret; + *cnt = cntct; + return ret; +} + +s32 ES_GetStoredTMDContents(const signed_blob *stmd, u32 tmd_size, u32 *contents, u32 cnt) +{ + if(__es_fd<0) return ES_ENOTINIT; + if(cnt <= 0) return ES_EINVAL; + if(!contents) return ES_EINVAL; + if(!stmd || !IS_VALID_SIGNATURE(stmd)) return ES_EINVAL; + if(!ISALIGNED(stmd)) return ES_EALIGN; + if(!ISALIGNED(contents)) return ES_EALIGN; + if(tmd_size > MAX_SIGNED_TMD_SIZE) return ES_EINVAL; + + return IOS_IoctlvFormat(__es_hid,__es_fd,IOCTL_ES_GETSTOREDCONTENTS,"di:d",stmd,tmd_size,cnt,contents,sizeof(u32)*cnt); +} + +s32 ES_GetTitleContentsCount(u64 titleID, u32 *num) +{ + s32 ret; + u32 _num; + + if(__es_fd<0) return ES_ENOTINIT; + if(!num) return ES_EINVAL; + + ret = IOS_IoctlvFormat(__es_hid,__es_fd,IOCTL_ES_GETTITLECONTENTSCNT,"q:i",titleID,&_num); + + if(ret<0) return ret; + *num = _num; + return ret; +} + +s32 ES_GetTitleContents(u64 titleID, u8 *data, u32 size) +{ + if(__es_fd<0) return ES_ENOTINIT; + if(size <= 0) return ES_EINVAL; + if(!data) return ES_EINVAL; + if(!ISALIGNED(data)) return ES_EALIGN; + + return IOS_IoctlvFormat(__es_hid,__es_fd,IOCTL_ES_GETSTOREDTMD,"qi:d",titleID,size,data,size); +} + +s32 ES_GetTMDViewSize(u64 titleID, u32 *size) +{ + s32 ret; + u32 tmdsize; + + if(__es_fd<0) return ES_ENOTINIT; + if(!size) return ES_EINVAL; + + ret = IOS_IoctlvFormat(__es_hid,__es_fd,IOCTL_ES_GETTMDVIEWCNT,"q:i",titleID,&tmdsize); + + if(ret<0) return ret; + *size = tmdsize; + return ret; +} + +s32 ES_GetTMDView(u64 titleID, u8 *data, u32 size) +{ + if(__es_fd<0) return ES_ENOTINIT; + if(size <= 0) return ES_EINVAL; + if(!data) return ES_EINVAL; + if(!ISALIGNED(data)) return ES_EALIGN; + + return IOS_IoctlvFormat(__es_hid,__es_fd,IOCTL_ES_GETTMDVIEWS,"qi:d",titleID,size,data,size); +} + +s32 ES_GetStoredTMDSize(u64 titleID, u32 *size) +{ + s32 ret; + u32 tmdsize; + + if(__es_fd<0) return ES_ENOTINIT; + if(!size) return ES_EINVAL; + + ret = IOS_IoctlvFormat(__es_hid,__es_fd,IOCTL_ES_GETSTOREDTMDSIZE,"q:i",titleID,&tmdsize); + + if(ret<0) return ret; + *size = tmdsize; + return ret; +} + +s32 ES_GetStoredTMD(u64 titleID, signed_blob *stmd, u32 size) +{ + if(__es_fd<0) return ES_ENOTINIT; + if(size <= 0) return ES_EINVAL; + if(!stmd) return ES_EINVAL; + if(!ISALIGNED(stmd)) return ES_EALIGN; + if(size > MAX_SIGNED_TMD_SIZE) return ES_EINVAL; + + return IOS_IoctlvFormat(__es_hid,__es_fd,IOCTL_ES_GETSTOREDTMD,"qi:d",titleID,size,stmd,size); +} + +s32 ES_GetNumSharedContents(u32 *cnt) +{ + s32 ret; + u32 cntct; + + if(__es_fd<0) return ES_ENOTINIT; + if(!cnt) return ES_EINVAL; + + ret = IOS_IoctlvFormat(__es_hid,__es_fd,IOCTL_ES_GETSHAREDCONTENTCNT,":i",&cntct); + + if(ret<0) return ret; + *cnt = cntct; + return ret; +} + +s32 ES_GetSharedContents(sha1 *contents, u32 cnt) +{ + if(__es_fd<0) return ES_ENOTINIT; + if(cnt <= 0) return ES_EINVAL; + if(!contents) return ES_EINVAL; + if(!ISALIGNED(contents)) return ES_EALIGN; + + return IOS_IoctlvFormat(__es_hid,__es_fd,IOCTL_ES_GETSHAREDCONTENTS,"i:d",cnt,contents,sizeof(sha1)*cnt); +} + +signed_blob *ES_NextCert(const signed_blob *certs) +{ + cert_header *cert; + if(!SIGNATURE_SIZE(certs)) return NULL; + cert = SIGNATURE_PAYLOAD(certs); + if(!CERTIFICATE_SIZE(cert)) return NULL; + return (signed_blob*)(((u8*)cert) + CERTIFICATE_SIZE(cert)); +} + +s32 __ES_sanity_check_certlist(const signed_blob *certs, u32 certsize) +{ + int count = 0; + signed_blob *end; + + if(!certs || !certsize) return 0; + + end = (signed_blob*)(((u8*)certs) + certsize); + while(certs != end) { + certs = ES_NextCert(certs); + if(!certs) return 0; + count++; + } + return count; +} + +s32 ES_Identify(const signed_blob *certificates, u32 certificates_size, const signed_blob *stmd, u32 tmd_size, const signed_blob *sticket, u32 ticket_size, u32 *keyid) +{ + + tmd *p_tmd; + u8 *hashes; + s32 ret; + u32 *keyid_buf; + + if(__es_fd<0) return ES_ENOTINIT; + + if(ticket_size != STD_SIGNED_TIK_SIZE) return ES_EINVAL; + if(!stmd || !tmd_size || !IS_VALID_SIGNATURE(stmd)) return ES_EINVAL; + if(!sticket || !IS_VALID_SIGNATURE(sticket)) return ES_EINVAL; + if(!__ES_sanity_check_certlist(certificates, certificates_size)) return ES_EINVAL; + if(!ISALIGNED(certificates)) return ES_EALIGN; + if(!ISALIGNED(stmd)) return ES_EALIGN; + if(!ISALIGNED(sticket)) return ES_EALIGN; + if(tmd_size > MAX_SIGNED_TMD_SIZE) return ES_EINVAL; + + p_tmd = SIGNATURE_PAYLOAD(stmd); + + if(!(keyid_buf = iosAlloc(__es_hid, 4))) return ES_ENOMEM; + if(!(hashes = iosAlloc(__es_hid, p_tmd->num_contents*20))) { + iosFree(__es_hid, keyid_buf); + return ES_ENOMEM; + } + + ret = IOS_IoctlvFormat(__es_hid, __es_fd, IOCTL_ES_DIVERIFY, "dddd:id", certificates, certificates_size, 0, 0, sticket, ticket_size, stmd, tmd_size, keyid_buf, hashes, p_tmd->num_contents*20); + if(ret >= 0 && keyid) *keyid = *keyid_buf; + + iosFree(__es_hid, keyid_buf); + iosFree(__es_hid, hashes); + + if(ret >= 0) { + __ES_Close(); + __ES_Init(); + } + + return ret; +} + +s32 ES_AddTicket(const signed_blob *stik, u32 stik_size, const signed_blob *certificates, u32 certificates_size, const signed_blob *crl, u32 crl_size) +{ + s32 ret; + + if(__es_fd<0) return ES_ENOTINIT; + if(stik_size != STD_SIGNED_TIK_SIZE) return ES_EINVAL; + if(!stik || !IS_VALID_SIGNATURE(stik)) return ES_EINVAL; + if(crl_size && (!crl || !IS_VALID_SIGNATURE(crl))) return ES_EINVAL; + if(!__ES_sanity_check_certlist(certificates, certificates_size)) return ES_EINVAL; + if(!certificates || !ISALIGNED(certificates)) return ES_EALIGN; + if(!ISALIGNED(stik)) return ES_EALIGN; + if(!ISALIGNED(certificates)) return ES_EALIGN; + if(!ISALIGNED(crl)) return ES_EALIGN; + + if(!crl_size) crl=NULL; + + ret = IOS_IoctlvFormat(__es_hid, __es_fd, IOCTL_ES_ADDTICKET, "ddd:", stik, stik_size, certificates, certificates_size, crl, crl_size); + return ret; + +} + +s32 ES_DeleteTicket(const tikview *view) +{ + s32 ret; + + if(__es_fd<0) return ES_ENOTINIT; + if(!view) return ES_EINVAL; + if(!ISALIGNED(view)) return ES_EALIGN; + ret = IOS_IoctlvFormat(__es_hid, __es_fd, IOCTL_ES_DELETETICKET, "d:", view, sizeof(tikview)); + return ret; +} + +s32 ES_AddTitleTMD(const signed_blob *stmd, u32 stmd_size) +{ + s32 ret; + + if(__es_fd<0) return ES_ENOTINIT; + if(!stmd || !IS_VALID_SIGNATURE(stmd)) return ES_EINVAL; + if(stmd_size != SIGNED_TMD_SIZE(stmd)) return ES_EINVAL; + if(!ISALIGNED(stmd)) return ES_EALIGN; + + ret = IOS_IoctlvFormat(__es_hid, __es_fd, IOCTL_ES_ADDTMD, "d:", stmd, stmd_size); + return ret; + +} + +s32 ES_AddTitleStart(const signed_blob *stmd, u32 tmd_size, const signed_blob *certificates, u32 certificates_size, const signed_blob *crl, u32 crl_size) +{ + s32 ret; + + if(__es_fd<0) return ES_ENOTINIT; + if(!stmd || !IS_VALID_SIGNATURE(stmd)) return ES_EINVAL; + if(tmd_size != SIGNED_TMD_SIZE(stmd)) return ES_EINVAL; + if(crl_size && (!crl || !IS_VALID_SIGNATURE(crl))) return ES_EINVAL; + if(!__ES_sanity_check_certlist(certificates, certificates_size)) return ES_EINVAL; + if(!certificates || !ISALIGNED(certificates)) return ES_EALIGN; + if(!ISALIGNED(stmd)) return ES_EALIGN; + if(!ISALIGNED(certificates)) return ES_EALIGN; + if(!ISALIGNED(crl)) return ES_EALIGN; + + if(!crl_size) crl=NULL; + + ret = IOS_IoctlvFormat(__es_hid, __es_fd, IOCTL_ES_ADDTITLESTART, "dddi:", stmd, tmd_size, certificates, certificates_size, crl, crl_size, 1); + return ret; +} + +s32 ES_AddContentStart(u64 titleID, u32 cid) +{ + if(__es_fd<0) return ES_ENOTINIT; + return IOS_IoctlvFormat(__es_hid, __es_fd, IOCTL_ES_ADDCONTENTSTART, "qi:", titleID, cid); +} + +s32 ES_AddContentData(s32 cfd, u8 *data, u32 data_size) +{ + if(__es_fd<0) return ES_ENOTINIT; + if(cfd<0) return ES_EINVAL; + if(!data || !data_size) return ES_EINVAL; + if(!ISALIGNED(data)) return ES_EALIGN; + return IOS_IoctlvFormat(__es_hid, __es_fd, IOCTL_ES_ADDCONTENTDATA, "id:", cfd, data, data_size); +} + +s32 ES_AddContentFinish(u32 cid) +{ + if(__es_fd<0) return ES_ENOTINIT; + return IOS_IoctlvFormat(__es_hid, __es_fd, IOCTL_ES_ADDCONTENTFINISH, "i:", cid); +} + +s32 ES_AddTitleFinish(void) +{ + if(__es_fd<0) return ES_ENOTINIT; + return IOS_IoctlvFormat(__es_hid, __es_fd, IOCTL_ES_ADDTITLEFINISH, ""); +} + +s32 ES_AddTitleCancel(void) +{ + if(__es_fd<0) return ES_ENOTINIT; + return IOS_IoctlvFormat(__es_hid, __es_fd, IOCTL_ES_ADDTITLECANCEL, ""); +} + +s32 ES_ImportBoot(const signed_blob *tik, u32 tik_size,const signed_blob *tik_certs,u32 tik_certs_size,const signed_blob *tmd,u32 tmd_size,const signed_blob *tmd_certs,u32 tmd_certs_size,const u8 *content,u32 content_size) +{ + if(__es_fd<0) return ES_ENOTINIT; + if(!tik || !tik_size) return ES_EINVAL; + if(!tik_certs || !tik_certs_size) return ES_EINVAL; + if(!tmd || !tmd_size) return ES_EINVAL; + if(!tmd_certs || !tmd_certs_size) return ES_EINVAL; + if(!content || !content_size) return ES_EINVAL; + if(!ISALIGNED(tik)) return ES_EALIGN; + if(!ISALIGNED(tmd)) return ES_EALIGN; + if(!ISALIGNED(tik_certs)) return ES_EALIGN; + if(!ISALIGNED(tmd_certs)) return ES_EALIGN; + if(!ISALIGNED(content)) return ES_EALIGN; + + return IOS_IoctlvFormat(__es_hid, __es_fd, IOCTL_ES_IMPORTBOOT, "dddddd:", tik, tik_size, tik_certs, tik_certs_size, tmd, tmd_size, tmd_certs, tmd_certs_size, NULL, 0, content, content_size); +} + +s32 ES_OpenContent(u16 index) +{ + if(__es_fd<0) return ES_ENOTINIT; + return IOS_IoctlvFormat(__es_hid, __es_fd, IOCTL_ES_OPENCONTENT, "i:", index); +} + +s32 ES_OpenTitleContent(u64 titleID, tikview *views, u16 index) +{ + if(__es_fd<0) return ES_ENOTINIT; + if(!ISALIGNED(views)) return ES_EALIGN; + return IOS_IoctlvFormat(__es_hid, __es_fd, IOCTL_ES_OPENTITLECONTENT, "qdi:", titleID, views, sizeof(tikview), index); +} + +s32 ES_ReadContent(s32 cfd, u8 *data, u32 data_size) +{ + if(__es_fd<0) return ES_ENOTINIT; + if(cfd<0) return ES_EINVAL; + if(!data || !data_size) return ES_EINVAL; + if(!ISALIGNED(data)) return ES_EALIGN; + return IOS_IoctlvFormat(__es_hid, __es_fd, IOCTL_ES_READCONTENT, "i:d", cfd, data, data_size); +} + +s32 ES_SeekContent(s32 cfd, s32 where, s32 whence) +{ + if(__es_fd<0) return ES_ENOTINIT; + if(cfd<0) return ES_EINVAL; + return IOS_IoctlvFormat(__es_hid, __es_fd, IOCTL_ES_SEEKCONTENT, "iii:", cfd, where, whence); +} + +s32 ES_CloseContent(s32 cfd) +{ + if(__es_fd<0) return ES_ENOTINIT; + if(cfd<0) return ES_EINVAL; + return IOS_IoctlvFormat(__es_hid, __es_fd, IOCTL_ES_CLOSECONTENT, "i:", cfd); +} + +s32 ES_DeleteTitle(u64 titleID) +{ + if(__es_fd<0) return ES_ENOTINIT; + return IOS_IoctlvFormat(__es_hid, __es_fd, IOCTL_ES_DELETETITLE, "q:", titleID); +} + +s32 ES_DeleteTitleContent(u64 titleID) +{ + if(__es_fd<0) return ES_ENOTINIT; + return IOS_IoctlvFormat(__es_hid, __es_fd, IOCTL_ES_DELETETITLECONTENT, "q:", titleID); +} + +s32 ES_Encrypt(u32 keynum, u8 *iv, u8 *source, u32 size, u8 *dest) +{ + if(__es_fd<0) return ES_ENOTINIT; + if(!iv || !source || !size || !dest) return ES_EINVAL; + if(!ISALIGNED(source) || !ISALIGNED(iv) || !ISALIGNED(dest)) return ES_EALIGN; + return IOS_IoctlvFormat(__es_hid, __es_fd, IOCTL_ES_ENCRYPT, "idd:dd", keynum, iv, 0x10, source, size, iv, 0x10, dest, size); +} + +s32 ES_Decrypt(u32 keynum, u8 *iv, u8 *source, u32 size, u8 *dest) +{ + if(__es_fd<0) return ES_ENOTINIT; + if(!iv || !source || !size || !dest) return ES_EINVAL; + if(!ISALIGNED(source) || !ISALIGNED(iv) || !ISALIGNED(dest)) return ES_EALIGN; + return IOS_IoctlvFormat(__es_hid, __es_fd, IOCTL_ES_DECRYPT, "idd:dd", keynum, iv, 0x10, source, size, iv, 0x10, dest, size); +} + +s32 ES_Sign(u8 *source, u32 size, u8 *sig, u8 *certs) +{ + if(__es_fd<0) return ES_ENOTINIT; + if(!source || !size || !sig || !certs) return ES_EINVAL; + if(!ISALIGNED(source) || !ISALIGNED(sig) || !ISALIGNED(certs)) return ES_EALIGN; + return IOS_IoctlvFormat(__es_hid, __es_fd, IOCTL_ES_SIGN, "d:dd", source, size, sig, 0x3C, certs, 0x180); +} + +s32 ES_GetDeviceCert(u8 *outbuf) +{ + if(__es_fd<0) return ES_ENOTINIT; + if(!outbuf) return ES_EINVAL; + if(!ISALIGNED(outbuf)) return ES_EALIGN; + return IOS_IoctlvFormat(__es_hid, __es_fd, IOCTL_ES_GETDEVICECERT, ":d", outbuf, 0x180); +} + +s32 ES_GetDeviceID(u32 *device_id) +{ + s32 ret; + u32 _device_id = 0; + + if(__es_fd<0) return ES_ENOTINIT; + if(!device_id) return ES_EINVAL; + + ret = IOS_IoctlvFormat(__es_hid, __es_fd, IOCTL_ES_GETDEVICEID, ":i", &_device_id); + if (ret>=0) *device_id = _device_id; + + return ret; +} + +s32 ES_GetBoot2Version(u32 *version) +{ + s32 ret; + u32 _version = 0; + + if(__es_fd<0) return ES_ENOTINIT; + if(!version) return ES_EINVAL; + + ret = IOS_IoctlvFormat(__es_hid, __es_fd, IOCTL_ES_GETBOOT2VERSION, ":i", &_version); + if (ret>=0) *version = _version; + + return ret; +} + +// 64k buffer size for alignment +#define ES_READ_BUF_SIZE 65536 + +typedef struct { + s32 cfd; + u64 titleID; + tmd_content content; + void *iobuf; + mutex_t mutex; +} es_fd; + +// valid path formats: +// format example description +// es:%08x es:00000004 Content index for current title ID +// es:ID%08x es:ID00000033 Content ID for current title ID +// es:%016llx/%08x es:0000000100000002/00000004 Content index for some title ID (not fully implemented yet) +// es:%016llx/ID%08x es:0000000100000002/ID00000033 Content ID for some title ID (not fully implemented yet) +// leading zeroes may be omitted, 0x prefix allowed. All numbers in hex. + +static s32 _ES_decodepath (struct _reent *r, const char *path, u64 *titleID, tmd_content *content) +{ + u64 _tid = 0; + u32 tmd_size; + STACK_ALIGN(u8, _tmdbuf, MAX_SIGNED_TMD_SIZE, 32); + signed_blob *_stmd; + tmd *_tmd; + tmd_content *_contents; + tmd_content _content; + int is_cid; + u32 arg; + char *bad; + int i; + u64 mytid; + + // check the device + if(strncmp(path,"es:",3)) { + r->_errno = EINVAL; + return -1; + } + path += 3; + + // Get our Title ID + if(ES_GetTitleID(&mytid) < 0) { + r->_errno = EIO; + return -1; + } + + // Read in Title ID, if this is an absolute path + if(path[0] == '/') { + path++; + if(!path[0]) { + r->_errno = EINVAL; + return -1; + } + r->_errno = 0; + _tid = _strtoull_r(r, path, &bad, 16); + if(r->_errno) return -1; + if((bad == path) || (bad[0] != '/')) { + r->_errno = EINVAL; + return -1; + } + path = bad + 1; + } else { + _tid = mytid; + } + + // check if path is a content ID + if(!strncmp(path,"ID",2)) { + path += 2; + is_cid = 1; + } else { + is_cid = 0; + } + + // read in the argument (content ID or content index) + r->_errno = 0; + arg = _strtoul_r(r, path, &bad, 16); + if(r->_errno) return -1; + if((bad == path) || (bad[0] != 0)) { + r->_errno = EINVAL; + return -1; + } + + // now get the TMD and find the content entry + if(ES_GetStoredTMDSize(_tid, &tmd_size) < 0) { + r->_errno = ENOENT; + return -1; + } + + _stmd = (signed_blob*)_tmdbuf; + if(ES_GetStoredTMD(_tid, _stmd, tmd_size) < 0) { + r->_errno = EIO; + return -1; + } + if(!IS_VALID_SIGNATURE(_stmd)) { + r->_errno = EIO; + return -1; + } + _tmd = SIGNATURE_PAYLOAD(_stmd); + _contents = TMD_CONTENTS(_tmd); + + for(i=0;i<_tmd->num_contents;i++) { + if(is_cid) { + if(_contents[i].cid == arg) { + _content = _contents[i]; + break; + } + } else { + if(_contents[i].index == arg) { + _content = _contents[i]; + break; + } + } + } + if(i >= _tmd->num_contents) { + r->_errno = ENOENT; + return -1; + } + + if(titleID) { + if(_tid == mytid) *titleID = 0; + else *titleID = _tid; + } + if(content) *content = _content; + return 0; +} + +static int _ES_open_r (struct _reent *r, void *fileStruct, const char *path, int flags, int mode) { + es_fd *file = (es_fd *) fileStruct; + + // decode the path + if(_ES_decodepath(r, path, &file->titleID, &file->content) < 0) { + return -1; + } + + // writing not supported + if ((flags & 0x03) != O_RDONLY) { + r->_errno = EROFS; + return -1; + } + + // open the content + if(file->titleID == 0) + file->cfd = ES_OpenContent(file->content.index); + else + { + u32 cnt ATTRIBUTE_ALIGN(32); + ES_GetNumTicketViews(file->titleID, &cnt); + tikview *views = (tikview *)memalign( 32, sizeof(tikview)*cnt ); + if(views == NULL) + { + return -1; + } + ES_GetTicketViews(file->titleID, views, cnt); + file->cfd = ES_OpenTitleContent(file->titleID, views, file->content.index); + free(views); + } + + if(file->cfd<0) { + r->_errno = EIO; + return -1; + } + + file->iobuf = NULL; + + LWP_MutexInit(&file->mutex, false); + + return (int)file; +} + +static int _ES_close_r (struct _reent *r, void *fd) { + es_fd *file = (es_fd *) fd; + + LWP_MutexLock(file->mutex); + + if(ES_CloseContent(file->cfd) < 0) { + r->_errno = EBADF; + return -1; + } + file->cfd = -1; + + if(file->iobuf) _free_r(r,file->iobuf); + + LWP_MutexUnlock(file->mutex); + LWP_MutexDestroy(file->mutex); + return 0; +} + +static int _ES_read_r (struct _reent *r, void *fd, char *ptr, size_t len) { + es_fd *file = (es_fd *) fd; + int read = 0; + int res; + + + LWP_MutexLock(file->mutex); + if(file->cfd < 0) { + LWP_MutexUnlock(file->mutex); + r->_errno = EBADF; + return -1; + } + + // if aligned, just pass through the read + if(ISALIGNED(ptr)) + { + res = ES_ReadContent(file->cfd, (u8*)ptr, len); + if(res < 0) { + LWP_MutexUnlock(file->mutex); + // we don't really know what the error codes mean... + r->_errno = EIO; + return -1; + } + read = res; + // otherwise read in blocks to an aligned buffer + } else { + int chunk; + if(!file->iobuf) { + file->iobuf = _memalign_r(r, 32, ES_READ_BUF_SIZE); + if(!file->iobuf) { + r->_errno = ENOMEM; + return -1; + } + } + while(len) { + if(len > ES_READ_BUF_SIZE) chunk = ES_READ_BUF_SIZE; + else chunk = len; + res = ES_ReadContent(file->cfd, file->iobuf, chunk); + if(res < 0) { + LWP_MutexUnlock(file->mutex); + // we don't really know what the error codes mean... + r->_errno = EIO; + return -1; + } + len -= res; + read += res; + memcpy(ptr, file->iobuf, res); + ptr += res; + if(res < chunk) break; + } + } + + LWP_MutexUnlock(file->mutex); + return read; +} + +static off_t _ES_seek_r (struct _reent *r, void *fd, off_t where, int whence) { + es_fd *file = (es_fd *) fd; + s32 res; + + LWP_MutexLock(file->mutex); + if(file->cfd < 0) { + LWP_MutexUnlock(file->mutex); + r->_errno = EBADF; + return -1; + } + + res = ES_SeekContent(file->cfd, where, whence); + LWP_MutexUnlock(file->mutex); + + if(res < 0) { + r->_errno = EINVAL; + return -1; + } + return res; +} + +static void _ES_fillstat(u64 titleID, tmd_content *content, struct stat *st) { + memset(st, 0, sizeof(*st)); + // the inode is the content ID + // (pretend each Title ID is a different filesystem) + st->st_ino = content->cid; + // st_dev is only a short, so do the best we can and use the middle two letters + // of the title ID if it's not a system content, otherwise use the low 16 bits + if((titleID>>32) == 1) + st->st_dev = titleID & 0xFFFF; + else + st->st_dev = (titleID>>8) & 0xFFFF; + + // not necessarily true due to shared contents, but + // we're not going to implement shared content scan here and now + st->st_nlink = 1; + // instead, give the file group read permissions if it's a shared content + st->st_mode = S_IFREG | S_IRUSR; + if(content->type & 0x8000) + st->st_mode |= S_IRGRP; + + // use st_dev as a uid too, see above + st->st_uid = st->st_dev; + // no group + st->st_gid = 0; + // content size + st->st_size = content->size; + st->st_blocks = (st->st_size + 511) / 512; + // NAND fs cluster size (not like anyone cares, but...) + st->st_blksize = 16384; +} + +static int _ES_fstat_r (struct _reent *r, void *fd, struct stat *st) { + es_fd *file = (es_fd *) fd; + + LWP_MutexLock(file->mutex); + if(file->cfd < 0) { + LWP_MutexUnlock(file->mutex); + r->_errno = EBADF; + return -1; + } + + _ES_fillstat(file->titleID, &file->content, st); + LWP_MutexUnlock(file->mutex); + + return 0; +} + +static int _ES_stat_r (struct _reent *r, const char *path, struct stat *st) { + tmd_content content; + u64 titleID; + + if(_ES_decodepath(r, path, &titleID, &content) < 0) { + return -1; + } + _ES_fillstat(titleID, &content, st); + return 0; +} + +static const devoptab_t dotab_es = { + "es", + sizeof (es_fd), + _ES_open_r, + _ES_close_r, + NULL, + _ES_read_r, + _ES_seek_r, + _ES_fstat_r, + _ES_stat_r, + NULL, + NULL, + NULL, + NULL, + NULL, + 0, + NULL, + NULL, + NULL, + NULL, + NULL +}; + +static void __ES_InitFS(void) { + AddDevice(&dotab_es); +} + +static void __ES_DeinitFS(void) { + RemoveDevice("es:"); +} + +#endif /* defined(HW_RVL) */ diff --git a/wii/libogc/libogc/exception.c b/wii/libogc/libogc/exception.c new file mode 100644 index 0000000000..b901efa8d5 --- /dev/null +++ b/wii/libogc/libogc/exception.c @@ -0,0 +1,266 @@ +/*------------------------------------------------------------- + +exception.c -- PPC exception handling support + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + + +#include +#include +#include +#include +#include "asm.h" +#include "processor.h" +#include "cache.h" +#include "irq.h" +#include "context.h" + +#include "system.h" + +#include "gx.h" +#include "pad.h" +#include "consol.h" +#include "console.h" +#include "lwp_threads.h" +#include "ios.h" + +#include "ogc/video_types.h" + +#define CPU_STACK_TRACE_DEPTH 10 + +typedef struct _framerec { + struct _framerec *up; + void *lr; +} frame_rec, *frame_rec_t; + +static void *exception_xfb = (void*)0xC1700000; //we use a static address above ArenaHi. +static int reload_timer = -1; + +void __exception_sethandler(u32 nExcept, void (*pHndl)(frame_context*)); + +extern void udelay(int us); +extern void fpu_exceptionhandler(); +extern void irq_exceptionhandler(); +extern void dec_exceptionhandler(); +extern void default_exceptionhandler(); +extern void VIDEO_SetFramebuffer(void *); +extern void __reload(); + +extern s8 exceptionhandler_start[],exceptionhandler_end[],exceptionhandler_patch[]; +extern s8 systemcallhandler_start[],systemcallhandler_end[]; + +void (*_exceptionhandlertable[NUM_EXCEPTIONS])(frame_context*); + +static u32 exception_location[NUM_EXCEPTIONS] = { + 0x00000100, 0x00000200, 0x00000300, 0x00000400, + 0x00000500, 0x00000600, 0x00000700, 0x00000800, + 0x00000900, 0x00000C00, 0x00000D00, 0x00000F00, + 0x00001300, 0x00001400, 0x00001700 }; + +static const char *exception_name[NUM_EXCEPTIONS] = { + "System Reset", "Machine Check", "DSI", "ISI", + "Interrupt", "Alignment", "Program", "Floating Point", + "Decrementer", "System Call", "Trace", "Performance", + "IABR", "Reserved", "Thermal"}; + +void __exception_load(u32 nExc,void *data,u32 len,void *patch) +{ + void *pAddr = (void*)(0x80000000|exception_location[nExc]); + memcpy(pAddr,data,len); + if(patch) + *(u32*)((u32)pAddr+(patch-data)) |= nExc; + + DCFlushRangeNoSync(pAddr,len); + ICInvalidateRange(pAddr,len); + _sync(); +} + +void __systemcall_init() +{ + __exception_load(EX_SYS_CALL,systemcallhandler_start,(systemcallhandler_end-systemcallhandler_start),NULL); +} + +void __exception_init() +{ + s32 i; + // init all exceptions with the default handler & vector code + for(i=0;iup;p=p->up,i++) { + if(i%4) kprintf(" --> "); + else { + if(i>0) kprintf(" -->\n\t"); + else kprintf("\n\t"); + } + + switch(i) { + case 0: + if(pc) kprintf("%p",pc); + break; + case 1: + if(!l) l = (frame_rec_t)mfspr(8); + kprintf("%p",(void*)l); + break; + default: + kprintf("%p",(void*)(p->up->lr)); + break; + } + } +} + +void __exception_setreload(int t) +{ + reload_timer = t*50; +} + +static void waitForReload() +{ + u32 level; + + PAD_Init(); + + if(reload_timer > 0) + kprintf("\n\tReloading in %d seconds\n", reload_timer/50); + + while ( 1 ) + { + PAD_ScanPads(); + + int buttonsDown = PAD_ButtonsDown(0); + + if( (buttonsDown & PAD_TRIGGER_Z) || SYS_ResetButtonDown() || + reload_timer == 0 ) + { + kprintf("\n\tReload\n\n\n"); + _CPU_ISR_Disable(level); + __reload (); + } + + if ( buttonsDown & PAD_BUTTON_A ) + { + kprintf("\n\tReset\n\n\n"); +#if defined(HW_DOL) + SYS_ResetSystem(SYS_HOTRESET,0,FALSE); +#else + __reload (); +#endif + } + + udelay(20000); + if(reload_timer > 0) + reload_timer--; + } +} + +//just implement core for unrecoverable exceptions. +void c_default_exceptionhandler(frame_context *pCtx) +{ + GX_AbortFrame(); + VIDEO_SetFramebuffer(exception_xfb); + __console_init(exception_xfb,20,20,640,574,1280); + CON_EnableGecko(1, true); + + kprintf("\n\n\n\tException (%s) occurred!\n", exception_name[pCtx->EXCPT_Number]); + + kprintf("\tGPR00 %08X GPR08 %08X GPR16 %08X GPR24 %08X\n",pCtx->GPR[0], pCtx->GPR[8], pCtx->GPR[16], pCtx->GPR[24]); + kprintf("\tGPR01 %08X GPR09 %08X GPR17 %08X GPR25 %08X\n",pCtx->GPR[1], pCtx->GPR[9], pCtx->GPR[17], pCtx->GPR[25]); + kprintf("\tGPR02 %08X GPR10 %08X GPR18 %08X GPR26 %08X\n",pCtx->GPR[2], pCtx->GPR[10], pCtx->GPR[18], pCtx->GPR[26]); + kprintf("\tGPR03 %08X GPR11 %08X GPR19 %08X GPR27 %08X\n",pCtx->GPR[3], pCtx->GPR[11], pCtx->GPR[19], pCtx->GPR[27]); + kprintf("\tGPR04 %08X GPR12 %08X GPR20 %08X GPR28 %08X\n",pCtx->GPR[4], pCtx->GPR[12], pCtx->GPR[20], pCtx->GPR[28]); + kprintf("\tGPR05 %08X GPR13 %08X GPR21 %08X GPR29 %08X\n",pCtx->GPR[5], pCtx->GPR[13], pCtx->GPR[21], pCtx->GPR[29]); + kprintf("\tGPR06 %08X GPR14 %08X GPR22 %08X GPR30 %08X\n",pCtx->GPR[6], pCtx->GPR[14], pCtx->GPR[22], pCtx->GPR[30]); + kprintf("\tGPR07 %08X GPR15 %08X GPR23 %08X GPR31 %08X\n",pCtx->GPR[7], pCtx->GPR[15], pCtx->GPR[23], pCtx->GPR[31]); + kprintf("\tLR %08X SRR0 %08x SRR1 %08x MSR %08x\n", pCtx->LR, pCtx->SRR0, pCtx->SRR1,pCtx->MSR); + kprintf("\tDAR %08X DSISR %08X\n", mfspr(19), mfspr(18)); + + _cpu_print_stack((void*)pCtx->SRR0,(void*)pCtx->LR,(void*)pCtx->GPR[1]); + + if((pCtx->EXCPT_Number==EX_DSI) || (pCtx->EXCPT_Number==EX_FP)) { + u32 i; + u32 *pAdd = (u32*)pCtx->SRR0; + kprintf("\n\n\tCODE DUMP:\n"); + for (i=0; i<12; i+=4) + kprintf("\t%p: %08X %08X %08X %08X\n", + &(pAdd[i]),pAdd[i], pAdd[i+1], pAdd[i+2], pAdd[i+3]); + } + + waitForReload(); +} + diff --git a/wii/libogc/libogc/exception_handler.S b/wii/libogc/libogc/exception_handler.S new file mode 100644 index 0000000000..6ff209ad3d --- /dev/null +++ b/wii/libogc/libogc/exception_handler.S @@ -0,0 +1,243 @@ +/*------------------------------------------------------------- + +exception_handler.S -- PPC exception handling support + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + + +#include + +#define EXCEPTION_PROLOG \ + mfspr r0,912; \ + stw r0,GQR0_OFFSET(sp); \ + mfspr r0,913; \ + stw r0,GQR1_OFFSET(sp); \ + mfspr r0,914; \ + stw r0,GQR2_OFFSET(sp); \ + mfspr r0,915; \ + stw r0,GQR3_OFFSET(sp); \ + mfspr r0,916; \ + stw r0,GQR4_OFFSET(sp); \ + mfspr r0,917; \ + stw r0,GQR5_OFFSET(sp); \ + mfspr r0,918; \ + stw r0,GQR6_OFFSET(sp); \ + mfspr r0,919; \ + stw r0,GQR7_OFFSET(sp); \ + stw r6,GPR6_OFFSET(sp); \ + stw r7,GPR7_OFFSET(sp); \ + stw r8,GPR8_OFFSET(sp); \ + stw r9,GPR9_OFFSET(sp); \ + stw r10,GPR10_OFFSET(sp); \ + stw r11,GPR11_OFFSET(sp); \ + stw r12,GPR12_OFFSET(sp); \ + stw r13,GPR13_OFFSET(sp); \ + stw r14,GPR14_OFFSET(sp); \ + stw r15,GPR15_OFFSET(sp); + +#define EXCEPTION_EPILOG \ + lwz r4,GQR0_OFFSET(sp); \ + mtspr 912,r4; \ + lwz r4,GQR1_OFFSET(sp); \ + mtspr 913,r4; \ + lwz r4,GQR2_OFFSET(sp); \ + mtspr 914,r4; \ + lwz r4,GQR3_OFFSET(sp); \ + mtspr 915,r4; \ + lwz r4,GQR4_OFFSET(sp); \ + mtspr 916,r4; \ + lwz r4,GQR5_OFFSET(sp); \ + mtspr 917,r4; \ + lwz r4,GQR6_OFFSET(sp); \ + mtspr 918,r4; \ + lwz r4,GQR7_OFFSET(sp); \ + mtspr 919,r4; \ + lwz r15,GPR15_OFFSET(sp); \ + lwz r14,GPR14_OFFSET(sp); \ + lwz r13,GPR13_OFFSET(sp); \ + lwz r12,GPR12_OFFSET(sp); \ + lwz r11,GPR11_OFFSET(sp); \ + lwz r10,GPR10_OFFSET(sp); \ + lwz r9,GPR9_OFFSET(sp); \ + lwz r8,GPR8_OFFSET(sp); \ + lwz r7,GPR7_OFFSET(sp); \ + lwz r6,GPR6_OFFSET(sp); \ + lwz r5,GPR5_OFFSET(sp) + + + .globl exceptionhandler_start,exceptionhandler_end,exceptionhandler_patch +exceptionhandler_start: + mtspr SPRG3,r4 + clrlwi r4,sp,2 //make sp physical and move new value to r4 + stwu r4,-EXCEPTION_FRAME_END(r4) + stw r0,GPR0_OFFSET(r4) + stw sp,GPR1_OFFSET(r4) + stw toc,GPR2_OFFSET(r4) + stw r3,GPR3_OFFSET(r4) + mfspr r3,SPRG3 + stw r3,GPR4_OFFSET(r4) + stw r5,GPR5_OFFSET(r4) + mfcr r3 + stw r3,CR_OFFSET(r4) + mflr r3 + stw r3,LR_OFFSET(r4) + mfctr r3 + stw r3,CTR_OFFSET(r4) + mfxer r3 + stw r3,XER_OFFSET(r4) + mfmsr r3 + stw r3,MSR_OFFSET(r4) + mfdar r3 + stw r3,DAR_OFFSET(r4) + mfsrr0 r3 + stw r3,SRR0_OFFSET(r4) + mfsrr1 r3 + stw r3,SRR1_OFFSET(r4) + mr r5,r3 + nop + mfmsr r3 + ori r3,r3,MSR_IR|MSR_DR + mtsrr1 r3 + +exceptionhandler_patch: + li r3,0 + stw r3,EXCEPTION_NUMBER(r4) + + rlwinm. r5,r5,0,30,30 + lis r5,default_exceptionhandler@h + ori r5,r5,default_exceptionhandler@l + beq 1f + lis r5,_exceptionhandlertable@h + ori r5,r5,_exceptionhandlertable@l + clrlwi r5,r5,2 + clrlslwi r3,r3,24,2 + lwzx r5,r3,r5 +1: + mtsrr0 r5 + rfi +exceptionhandler_end: + nop + + .extern c_default_exceptionhandler + .globl default_exceptionhandler +default_exceptionhandler: + stwu sp,-EXCEPTION_FRAME_END(sp) //now we're able to adjust the stackpointer with it's cached address + + EXCEPTION_PROLOG + + stmw r16,GPR16_OFFSET(sp) + + addi r3,sp,0x08 + bl c_default_exceptionhandler + + lwz r4,CR_OFFSET(sp) + mtcr r4 + lwz r4,LR_OFFSET(sp) + mtlr r4 + lwz r4,CTR_OFFSET(sp) + mtctr r4 + lwz r4,XER_OFFSET(sp) + mtxer r4 + + EXCEPTION_EPILOG + + lmw r16,GPR16_OFFSET(sp) + + lwz toc,GPR2_OFFSET(sp) + lwz r0,GPR0_OFFSET(sp) + + lwz r4,SRR0_OFFSET(sp) + mtsrr0 r4 + lwz r4,SRR1_OFFSET(sp) + mtsrr1 r4 + + lwz r4,GPR4_OFFSET(sp) + lwz r3,GPR3_OFFSET(sp) + addi sp,sp,EXCEPTION_FRAME_END + rfi + + .extern _cpu_context_save_fp,_cpu_context_restore_fp + .globl fpu_exceptionhandler +fpu_exceptionhandler: + stwu sp,-EXCEPTION_FRAME_END(sp) //now we're able to adjust the stackpointer with it's cached address + + EXCEPTION_PROLOG + + mfmsr r4 + ori r4,r4,MSR_FP + mtmsr r4 + isync + + bl __thread_dispatch_fp + + lwz r4,CR_OFFSET(sp) + mtcr r4 + lwz r4,LR_OFFSET(sp) + mtlr r4 + lwz r4,CTR_OFFSET(sp) + mtctr r4 + lwz r4,XER_OFFSET(sp) + mtxer r4 + + EXCEPTION_EPILOG + + mfmsr r4 + rlwinm r4,r4,0,19,17 + mtmsr r4 + isync + + lwz toc,GPR2_OFFSET(sp) + lwz r0,GPR0_OFFSET(sp) + + lwz r4,SRR0_OFFSET(sp) + mtsrr0 r4 + lwz r4,SRR1_OFFSET(sp) + ori r4,r4,MSR_FP + mtsrr1 r4 + + lwz r4,GPR4_OFFSET(sp) + lwz r3,GPR3_OFFSET(sp) + addi sp,sp,EXCEPTION_FRAME_END + rfi + + .global systemcallhandler_start,systemcallhandler_end +systemcallhandler_start: + mtspr SPRG2,r9 + mtspr SPRG3,r10 + mfspr r9,HID0 + ori r10,r9,0x0008 + mtspr HID0,r10 + isync + sync + mtspr HID0,r9 + mfspr r9,SPRG2 + mfspr r10,SPRG3 + rfi +systemcallhandler_end: + nop + + + diff --git a/wii/libogc/libogc/exi.c b/wii/libogc/libogc/exi.c new file mode 100644 index 0000000000..961fd46592 --- /dev/null +++ b/wii/libogc/libogc/exi.c @@ -0,0 +1,866 @@ +/*------------------------------------------------------------- + +exi.c -- EXI subsystem + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + + +#include +#include +#include +#include "asm.h" +#include "irq.h" +#include "processor.h" +#include "spinlock.h" +#include "exi.h" + +#define EXI_LOCK_DEVS 32 + +#define EXI_MAX_CHANNELS 3 +#define EXI_MAX_DEVICES 3 + +#define EXI_DEVICE0 0x0080 +#define EXI_DEVICE1 0x0100 +#define EXI_DEVICE2 0x0200 + +#define EXI_EXI_IRQ 0x0002 +#define EXI_TC_IRQ 0x0008 +#define EXI_EXT_IRQ 0x0800 +#define EXI_EXT_BIT 0x1000 + +#define _SHIFTL(v, s, w) \ + ((u32) (((u32)(v) & ((0x01 << (w)) - 1)) << (s))) +#define _SHIFTR(v, s, w) \ + ((u32)(((u32)(v) >> (s)) & ((0x01 << (w)) - 1))) + + +struct _lck_dev { + lwp_node node; + u32 dev; + EXICallback unlockcb; +}; + +typedef struct _exibus_priv { + EXICallback CallbackEXI; + EXICallback CallbackTC; + EXICallback CallbackEXT; + + u32 imm_len; + void *imm_buff; + u32 lockeddev; + u32 flags; + u32 lck_cnt; + u32 exi_id; + u64 exi_idtime; + lwp_queue lckd_dev; + u32 lckd_dev_bits; +} exibus_priv; + +static lwp_queue _lckdev_queue; +static struct _lck_dev lckdevs[EXI_LOCK_DEVS]; +static exibus_priv eximap[EXI_MAX_CHANNELS]; +static u64 last_exi_idtime[EXI_MAX_CHANNELS]; + +static u32 exi_id_serport1 = 0; + +static u32 exi_uart_chan = EXI_CHANNEL_0; +static u32 exi_uart_dev = EXI_DEVICE_0; +static u32 exi_uart_barnacle_enabled = 0; +static u32 exi_uart_enabled = 0; + +static void __exi_irq_handler(u32,void *); +static void __tc_irq_handler(u32,void *); +static void __ext_irq_handler(u32,void *); + +#if defined(HW_DOL) + static vu32* const _exiReg = (u32*)0xCC006800; +#elif defined(HW_RVL) + static vu32* const _exiReg = (u32*)0xCD006800; +#else + #error HW model unknown. +#endif + +static __inline__ void __exi_clearirqs(s32 nChn,u32 nEXIIrq,u32 nTCIrq,u32 nEXTIrq) +{ + u32 d; + d = (_exiReg[nChn*5]&~(EXI_EXI_IRQ|EXI_TC_IRQ|EXI_EXT_IRQ)); + if(nEXIIrq) d |= EXI_EXI_IRQ; + if(nTCIrq) d |= EXI_TC_IRQ; + if(nEXTIrq) d |= EXI_EXT_IRQ; + _exiReg[nChn*5] = d; +} + +static __inline__ void __exi_setinterrupts(s32 nChn,exibus_priv *exi) +{ + exibus_priv *pexi = &eximap[EXI_CHANNEL_2]; + if(nChn==EXI_CHANNEL_0) { + __MaskIrq((IRQMASK(IRQ_EXI0_EXI)|IRQMASK(IRQ_EXI2_EXI))); + if(!(exi->flags&EXI_FLAG_LOCKED) && (exi->CallbackEXI || pexi->CallbackEXI)) + __UnmaskIrq((IRQMASK(IRQ_EXI0_EXI)|IRQMASK(IRQ_EXI2_EXI))); + } else if(nChn==EXI_CHANNEL_1) { + __MaskIrq(IRQMASK(IRQ_EXI1_EXI)); + if(!(exi->flags&EXI_FLAG_LOCKED) && exi->CallbackEXI) __UnmaskIrq(IRQMASK(IRQ_EXI1_EXI)); + } else if(nChn==EXI_CHANNEL_2) { //explicitly use of channel 2 only if debugger is attached. + __MaskIrq(IRQMASK(IRQ_EXI0_EXI)); + if(!(exi->flags&EXI_FLAG_LOCKED) && IRQ_GetHandler(IRQ_PI_DEBUG)) __UnmaskIrq(IRQMASK(IRQ_EXI2_EXI)); + } +} + +static void __exi_initmap(exibus_priv *exim) +{ + s32 i; + exibus_priv *m; + + __lwp_queue_initialize(&_lckdev_queue,lckdevs,EXI_LOCK_DEVS,sizeof(struct _lck_dev)); + + for(i=0;iCallbackEXI = NULL; + m->CallbackEXT = NULL; + m->CallbackTC = NULL; + m->imm_buff = NULL; + m->exi_id = 0; + m->exi_idtime = 0; + m->flags = 0; + m->imm_len = 0; + m->lck_cnt = 0; + m->lockeddev = 0; + m->lckd_dev_bits = 0; + __lwp_queue_init_empty(&m->lckd_dev); + } +} + +static s32 __exi_probe(s32 nChn) +{ + u64 time; + s32 ret = 1; + u32 level; + u32 val; + exibus_priv *exi = &eximap[nChn]; + _CPU_ISR_Disable(level); + val = _exiReg[nChn*5]; + if(!(exi->flags&EXI_FLAG_ATTACH)) { + if(val&EXI_EXT_IRQ) { + __exi_clearirqs(nChn,0,0,1); + exi->exi_idtime = 0; + last_exi_idtime[nChn] = 0; + } + if(_exiReg[nChn*5]&EXI_EXT_BIT) { + time = gettime(); + if(last_exi_idtime[nChn]==0) last_exi_idtime[nChn] = time; + if((val=diff_usec(last_exi_idtime[nChn],time)+10)<30) ret = 0; + else ret = 1; + _CPU_ISR_Restore(level); + return ret; + } else { + exi->exi_idtime = 0; + last_exi_idtime[nChn] = 0; + _CPU_ISR_Restore(level); + return 0; + } + } + + if(!(_exiReg[nChn*5]&EXI_EXT_BIT) || (_exiReg[nChn*5]&EXI_EXT_IRQ)) { + exi->exi_idtime = 0; + last_exi_idtime[nChn] = 0; + ret = 0; + } + _CPU_ISR_Restore(level); + return ret; +} + +static s32 __exi_attach(s32 nChn,EXICallback ext_cb) +{ + s32 ret; + u32 level; + exibus_priv *exi = &eximap[nChn]; + _CPU_ISR_Disable(level); + ret = 0; + if(!(exi->flags&EXI_FLAG_ATTACH)) { + if(__exi_probe(nChn)==1) { + __exi_clearirqs(nChn,1,0,0); + exi->CallbackEXT = ext_cb; + __UnmaskIrq(((IRQMASK(IRQ_EXI0_EXT))>>(nChn*3))); + exi->flags |= EXI_FLAG_ATTACH; + ret = 1; + } + } + _CPU_ISR_Restore(level); + return ret; +} + +s32 EXI_Lock(s32 nChn,s32 nDev,EXICallback unlockCB) +{ + u32 level; + struct _lck_dev *lckd; + exibus_priv *exi = &eximap[nChn]; + _CPU_ISR_Disable(level); + if(exi->flags&EXI_FLAG_LOCKED) { + if(unlockCB && !(exi->lckd_dev_bits&(1<lck_cnt++; + exi->lckd_dev_bits |= (1<dev = nDev; + lckd->unlockcb = unlockCB; + __lwp_queue_appendI(&exi->lckd_dev,&lckd->node); + } + } + _CPU_ISR_Restore(level); + return 0; + } + + exi->lockeddev = nDev; + exi->flags |= EXI_FLAG_LOCKED; + __exi_setinterrupts(nChn,exi); + + _CPU_ISR_Restore(level); + return 1; +} + +s32 EXI_Unlock(s32 nChn) +{ + u32 level,dev; + EXICallback cb; + struct _lck_dev *lckd; + exibus_priv *exi = &eximap[nChn]; + _CPU_ISR_Disable(level); + if(!(exi->flags&EXI_FLAG_LOCKED)) { + _CPU_ISR_Restore(level); + return 0; + } + + exi->flags &= ~EXI_FLAG_LOCKED; + __exi_setinterrupts(nChn,exi); + + if(!exi->lck_cnt) { + _CPU_ISR_Restore(level); + return 1; + } + + exi->lck_cnt--; + lckd = (struct _lck_dev*)__lwp_queue_getI(&exi->lckd_dev); + __lwp_queue_appendI(&_lckdev_queue,&lckd->node); + + cb = lckd->unlockcb; + dev = lckd->dev; + exi->lckd_dev_bits &= ~(1<flags&EXI_FLAG_SELECT) { + _CPU_ISR_Restore(level); + return 0; + } + + if(nChn!=EXI_CHANNEL_2) { + if(nDev==EXI_DEVICE_0 && !(exi->flags&EXI_FLAG_ATTACH)) { + if(__exi_probe(nChn)==0) { + _CPU_ISR_Restore(level); + return 0; + } + } + if(!(exi->flags&EXI_FLAG_LOCKED) || exi->lockeddev!=nDev) { + _CPU_ISR_Restore(level); + return 0; + } + } + + exi->flags |= EXI_FLAG_SELECT; + val = _exiReg[nChn*5]; + val = (val&0x405)|(0x80<flags&EXI_FLAG_ATTACH) { + if(nChn==EXI_CHANNEL_0) __MaskIrq(IRQMASK(IRQ_EXI0_EXT)); + else if(nChn==EXI_CHANNEL_1) __MaskIrq(IRQMASK(IRQ_EXI1_EXT)); + } + + _CPU_ISR_Restore(level); + return 1; +} + +s32 EXI_SelectSD(s32 nChn,s32 nDev,s32 nFrq) +{ + u32 val,id; + s32 ret; + u32 level; + exibus_priv *exi = &eximap[nChn]; + _CPU_ISR_Disable(level); + + if(exi->flags&EXI_FLAG_SELECT) { + _CPU_ISR_Restore(level); + return 0; + } + + if(nChn!=EXI_CHANNEL_2) { + if(nDev==EXI_DEVICE_0 && !(exi->flags&EXI_FLAG_ATTACH)) { + if((ret=__exi_probe(nChn))==1) { + if(!exi->exi_idtime) ret = EXI_GetID(nChn,EXI_DEVICE_0,&id); + } + if(ret==0) { + _CPU_ISR_Restore(level); + return 0; + } + } + if(!(exi->flags&EXI_FLAG_LOCKED) || exi->lockeddev!=nDev) { + _CPU_ISR_Restore(level); + return 0; + } + } + + exi->flags |= EXI_FLAG_SELECT; + val = _exiReg[nChn*5]; + val = (val&0x405)|(nFrq<<4); + _exiReg[nChn*5] = val; + + if(exi->flags&EXI_FLAG_ATTACH) { + if(nChn==EXI_CHANNEL_0) __MaskIrq(IRQMASK(IRQ_EXI0_EXT)); + else if(nChn==EXI_CHANNEL_1) __MaskIrq(IRQMASK(IRQ_EXI1_EXT)); + } + + _CPU_ISR_Restore(level); + return 1; +} + +s32 EXI_Deselect(s32 nChn) +{ + u32 val; + u32 level; + exibus_priv *exi = &eximap[nChn]; + _CPU_ISR_Disable(level); + + if(!(exi->flags&EXI_FLAG_SELECT)) { + _CPU_ISR_Restore(level); + return 0; + } + + exi->flags &= ~EXI_FLAG_SELECT; + val = _exiReg[nChn*5]; + _exiReg[nChn*5] = (val&0x405); + + if(exi->flags&EXI_FLAG_ATTACH) { + if(nChn==EXI_CHANNEL_0) __UnmaskIrq(IRQMASK(IRQ_EXI0_EXT)); + else if(nChn==EXI_CHANNEL_1) __UnmaskIrq(IRQMASK(IRQ_EXI1_EXT)); + } + + if(nChn!=EXI_CHANNEL_2 && val&EXI_DEVICE0) { + if(__exi_probe(nChn)==0) { + _CPU_ISR_Restore(level); + return 0; + } + } + _CPU_ISR_Restore(level); + return 1; +} + +s32 EXI_Sync(s32 nChn) +{ + u8 *buf; + s32 ret; + u32 level,i,cnt,val; + exibus_priv *exi = &eximap[nChn]; + while(_exiReg[nChn*5+3]&0x0001); + + _CPU_ISR_Disable(level); + + ret = 0; + if(exi->flags&EXI_FLAG_SELECT && exi->flags&(EXI_FLAG_DMA|EXI_FLAG_IMM)) { + if(exi->flags&EXI_FLAG_IMM) { + cnt = exi->imm_len; + buf = exi->imm_buff; + if(buf && cnt>0) { + val = _exiReg[nChn*5+4]; + for(i=0;i>((3-i)*8))&0xFF; + } + } + exi->flags &= ~(EXI_FLAG_DMA|EXI_FLAG_IMM); + ret = 1; + } + _CPU_ISR_Restore(level); + return ret; +} + +s32 EXI_Imm(s32 nChn,void *pData,u32 nLen,u32 nMode,EXICallback tc_cb) +{ + u32 level; + u32 value,i; + exibus_priv *exi = &eximap[nChn]; + _CPU_ISR_Disable(level); + + if(exi->flags&(EXI_FLAG_DMA|EXI_FLAG_IMM) || !(exi->flags&EXI_FLAG_SELECT)) { + _CPU_ISR_Restore(level); + return 0; + } + + exi->CallbackTC = tc_cb; + if(tc_cb) { + __exi_clearirqs(nChn,0,1,0); + __UnmaskIrq(IRQMASK((IRQ_EXI0_TC+(nChn*3)))); + } + exi->flags |= EXI_FLAG_IMM; + + exi->imm_buff = pData; + exi->imm_len = nLen; + if(nMode!=EXI_READ) { + for(i=0,value=0;iimm_len = 0; + + _exiReg[nChn*5+3] = (((nLen-1)&0x03)<<4)|((nMode&0x03)<<2)|0x01; + + _CPU_ISR_Restore(level); + return 1; +} + +s32 EXI_ImmEx(s32 nChn,void *pData,u32 nLen,u32 nMode) +{ + u8 *buf = pData; + u32 tc; + s32 ret = 0; + while(nLen) { + ret = 0; + tc = nLen; + if(tc>4) tc = 4; + + if(!EXI_Imm(nChn,buf,tc,nMode,NULL)) break; + if(!EXI_Sync(nChn)) break; + nLen -= tc; + buf += tc; + + ret = 1; + } + return ret; +} + +s32 EXI_Dma(s32 nChn,void *pData,u32 nLen,u32 nMode,EXICallback tc_cb) +{ + u32 level; + exibus_priv *exi = &eximap[nChn]; + _CPU_ISR_Disable(level); + + if(exi->flags&(EXI_FLAG_DMA|EXI_FLAG_IMM) || !(exi->flags&EXI_FLAG_SELECT)) { + _CPU_ISR_Restore(level); + return 0; + } + exi->CallbackTC = tc_cb; + if(tc_cb) { + __exi_clearirqs(nChn,0,1,0); + __UnmaskIrq((IRQMASK((IRQ_EXI0_TC+(nChn*3))))); + } + + exi->imm_buff = NULL; + exi->imm_len = 0; + exi->flags |= EXI_FLAG_DMA; + + _exiReg[nChn*5+1] = (u32)pData&0x03FFFFE0; + _exiReg[nChn*5+2] = nLen; + _exiReg[nChn*5+3] = ((nMode&0x03)<<2)|0x03; + + _CPU_ISR_Restore(level); + return 1; +} + +s32 EXI_GetState(s32 nChn) +{ + exibus_priv *exi = &eximap[nChn]; + return exi->flags; +} + +static s32 __unlocked_handler(s32 nChn,s32 nDev) +{ + u32 nId; + EXI_GetID(nChn,nDev,&nId); + return 1; +} + +s32 EXI_GetID(s32 nChn,s32 nDev,u32 *nId) +{ + u64 idtime = 0; + s32 ret,lck; + u32 reg,level; + exibus_priv *exi = &eximap[nChn]; + + if(nChnexi_idtime==last_exi_idtime[nChn]) { + *nId = exi->exi_id; + return 1; + } + if(__exi_attach(nChn,NULL)==0) return 0; + idtime = last_exi_idtime[nChn]; + } + lck = 0; + if(nChnexi_idtime = idtime; + exi->exi_id = *nId; + ret = 1; + } + _CPU_ISR_Restore(level); + } + return ret; +} + +s32 EXI_Attach(s32 nChn,EXICallback ext_cb) +{ + s32 ret; + u32 level; + exibus_priv *exi = &eximap[nChn]; + EXI_Probe(nChn); + + _CPU_ISR_Disable(level); + if(exi->exi_idtime) { + ret = __exi_attach(nChn,ext_cb); + } else + ret = 0; + _CPU_ISR_Restore(level); + return ret; +} + +s32 EXI_Detach(s32 nChn) +{ + u32 level; + s32 ret = 1; + exibus_priv *exi = &eximap[nChn]; + _CPU_ISR_Disable(level); + if(exi->flags&EXI_FLAG_ATTACH) { + if(exi->flags&EXI_FLAG_LOCKED && exi->lockeddev!=EXI_DEVICE_0) ret = 0; + else { + exi->flags &= ~EXI_FLAG_ATTACH; + __MaskIrq(((IRQMASK(IRQ_EXI0_EXI)|IRQMASK(IRQ_EXI0_TC)|IRQMASK(IRQ_EXI0_EXT))>>(nChn*3))); + } + } + _CPU_ISR_Restore(level); + return ret; +} + +EXICallback EXI_RegisterEXICallback(s32 nChn,EXICallback exi_cb) +{ + u32 level; + EXICallback old = NULL; + exibus_priv *exi = &eximap[nChn]; + _CPU_ISR_Disable(level); + old = exi->CallbackEXI; + exi->CallbackEXI = exi_cb; + if(nChn==EXI_CHANNEL_2) __exi_setinterrupts(EXI_CHANNEL_0,&eximap[EXI_CHANNEL_0]); + else __exi_setinterrupts(nChn,exi); + _CPU_ISR_Restore(level); + return old; +} + +s32 EXI_Probe(s32 nChn) +{ + s32 ret; + u32 id; + exibus_priv *exi = &eximap[nChn]; + if((ret=__exi_probe(nChn))==1) { + if(exi->exi_idtime==0) { + if(EXI_GetID(nChn,EXI_DEVICE_0,&id)==0) ret = 0; + } + } + return ret; +} + +s32 EXI_ProbeEx(s32 nChn) +{ + if(EXI_Probe(nChn)==1) return 1; + if(last_exi_idtime[nChn]==0) return -1; + return 0; +} + +void EXI_ProbeReset() +{ + last_exi_idtime[0] = 0; + last_exi_idtime[1] = 0; + + eximap[0].exi_idtime = 0; + eximap[1].exi_idtime = 0; + + __exi_probe(0); + __exi_probe(1); + EXI_GetID(EXI_CHANNEL_0,EXI_DEVICE_2,&exi_id_serport1); +} + +void __exi_init() +{ + __MaskIrq(IM_EXI); + + _exiReg[0] = 0; + _exiReg[5] = 0; + _exiReg[10] = 0; + + _exiReg[0] = 0x2000; + + __exi_initmap(eximap); + + IRQ_Request(IRQ_EXI0_EXI,__exi_irq_handler,NULL); + IRQ_Request(IRQ_EXI0_TC,__tc_irq_handler,NULL); + IRQ_Request(IRQ_EXI0_EXT,__ext_irq_handler,NULL); + IRQ_Request(IRQ_EXI1_EXI,__exi_irq_handler,NULL); + IRQ_Request(IRQ_EXI1_TC,__tc_irq_handler,NULL); + IRQ_Request(IRQ_EXI1_EXT,__ext_irq_handler,NULL); + IRQ_Request(IRQ_EXI2_EXI,__exi_irq_handler,NULL); + IRQ_Request(IRQ_EXI2_TC,__tc_irq_handler,NULL); + + EXI_ProbeReset(); +} + +void __exi_irq_handler(u32 nIrq,void *pCtx) +{ + u32 chan,dev; + exibus_priv *exi = NULL; + const u32 fact = 0x55555556; + + chan = ((fact*(nIrq-IRQ_EXI0_EXI))>>1)&0x0f; + dev = _SHIFTR((_exiReg[chan*5]&0x380),8,2); + + exi = &eximap[chan]; + __exi_clearirqs(chan,1,0,0); + + if(!exi->CallbackEXI) return; + exi->CallbackEXI(chan,dev); +} + +void __tc_irq_handler(u32 nIrq,void *pCtx) +{ + u32 cnt,len,d,chan,dev; + EXICallback tccb; + void *buf = NULL; + exibus_priv *exi = NULL; + const u32 fact = 0x55555556; + + chan = ((fact*(nIrq-IRQ_EXI0_TC))>>1)&0x0f; + dev = _SHIFTR((_exiReg[chan*5]&0x380),8,2); + + exi = &eximap[chan]; + __MaskIrq(IRQMASK(nIrq)); + __exi_clearirqs(chan,0,1,0); + + tccb = exi->CallbackTC; + if(!tccb) return; + + exi->CallbackTC = NULL; + if(exi->flags&(EXI_FLAG_DMA|EXI_FLAG_IMM)) { + if(exi->flags&EXI_FLAG_IMM) { + len = exi->imm_len; + buf = exi->imm_buff; + if(len>0 && buf) { + d = _exiReg[chan*5+4]; + if(d>0) { + for(cnt=0;cnt>((3-cnt)*8))&0xFF; + } + } + } + exi->flags &= ~(EXI_FLAG_DMA|EXI_FLAG_IMM); + } + tccb(chan,dev); +} + +void __ext_irq_handler(u32 nIrq,void *pCtx) +{ + + u32 chan,dev; + exibus_priv *exi = NULL; + const u32 fact = 0x55555556; + + chan = ((fact*(nIrq-IRQ_EXI0_EXT))>>1)&0x0f; + dev = _SHIFTR((_exiReg[chan*5]&0x380),8,2); + + exi = &eximap[chan]; + __MaskIrq(IRQMASK(nIrq)); + __exi_clearirqs(chan,0,0,1); + + exi->flags &= ~EXI_FLAG_ATTACH; + if(exi->CallbackEXT) exi->CallbackEXT(chan,dev); +} + + +/* EXI UART stuff */ +static s32 __probebarnacle(s32 chn,u32 dev,u32 *rev) +{ + u32 ret,reg; + + if(chn!=EXI_CHANNEL_2 && dev==EXI_DEVICE_0) { + if(EXI_Attach(chn,NULL)==0) return 0; + } + + ret = 0; + if(EXI_Lock(chn,dev,NULL)==1) { + if(EXI_Select(chn,dev,EXI_SPEED1MHZ)==1) { + reg = 0x20011300; + if(EXI_Imm(chn,®,sizeof(u32),EXI_WRITE,NULL)==0) ret |= 0x0001; + if(EXI_Sync(chn)==0) ret |= 0x0002; + if(EXI_Imm(chn,rev,sizeof(u32),EXI_READ,NULL)==0) ret |= 0x0004; + if(EXI_Sync(chn)==0) ret |= 0x0008; + if(EXI_Deselect(chn)==0) ret |= 0x0010; + + } + EXI_Unlock(chn); + } + + if(chn!=EXI_CHANNEL_2 && dev==EXI_DEVICE_0) EXI_Detach(chn); + + if(ret) return 0; + if((*rev+0x00010000)==0xffff) return 0; + + return 1; +} + +static s32 __queuelength() +{ + u32 reg; + u8 len = 0; + + if(EXI_Select(exi_uart_chan,exi_uart_dev,EXI_SPEED8MHZ)==0) return -1; + + reg = 0x20010000; + EXI_Imm(exi_uart_chan,®,sizeof(u32),EXI_WRITE,NULL); + EXI_Sync(exi_uart_chan); + EXI_Imm(exi_uart_chan,&len,sizeof(u8),EXI_READ,NULL); + EXI_Sync(exi_uart_chan); + + EXI_Deselect(exi_uart_chan); + + return (16-len); +} + +void __SYS_EnableBarnacle(s32 chn,u32 dev) +{ + u32 id,rev; + + if(EXI_GetID(chn,dev,&id)==0) return; + + if(id==0x01020000 || id==0x0004 || id==0x80000010 || id==0x80000008 + || id==0x80000004 || id==0xffff || id==0x80000020 || id==0x0020 + || id==0x0010 || id==0x0008 || id==0x01010000 || id==0x04040404 + || id==0x04021000 || id==0x03010000 || id==0x02020000 + || id==0x04020300 || id==0x04020200 || id==0x04130000 + || id==0x04120000 || id==0x04060000 || id==0x04220000) return; + + if(__probebarnacle(chn,dev,&rev)==0) return; + + + exi_uart_chan = chn; + exi_uart_dev = dev; + exi_uart_barnacle_enabled = 0xa5ff005a; + exi_uart_enabled = 0xa5ff005a; +} + +s32 InitializeUART() +{ + if((exi_uart_enabled+0x5a010000)==0x005a) return 0; + + exi_uart_chan = EXI_CHANNEL_0; + exi_uart_dev = EXI_DEVICE_1; + + exi_uart_enabled = 0xa5ff005a; + return 0; +} + +s32 WriteUARTN(void *buf,u32 len) +{ + u8 *ptr; + u32 reg; + s32 ret,qlen,cnt; + + if((exi_uart_enabled+0x5a010000)!=0x005a) return 2; + if(EXI_Lock(exi_uart_chan,exi_uart_dev,NULL)==0) return 0; + + ptr = buf; + while((ptr-(u8*)buf)=12 || qlen>=len) { + if(EXI_Select(exi_uart_chan,exi_uart_dev,EXI_SPEED8MHZ)==0) { + ret = 3; + break; + } + + reg = 0xa0010000; + EXI_Imm(exi_uart_chan,®,sizeof(u32),EXI_WRITE,NULL); + EXI_Sync(exi_uart_chan); + + while(qlen>0 && len>0) { + cnt = 4; + if(qlen>=0x0004) { + if(len<4) cnt = len; + if(qlen + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include +#include +#include +#include + +static int __gcsd_init = 0; + +static bool __gcsd_isInserted(int n) +{ + if(sdgecko_readStatus(n) == CARDIO_ERROR_NOCARD) + return false; + return true; +} + +static bool __gcsd_startup(int n) +{ + if(__gcsd_init == 1) + return __gcsd_isInserted(n); + sdgecko_initBufferPool(); + sdgecko_initIODefault(); + __gcsd_init = 1; + return __gcsd_isInserted(n); +} + + +static bool __gcsd_readSectors(int n, u32 sector, u32 numSectors, void *buffer) +{ + s32 ret; + + ret = sdgecko_readSectors(n,sector,numSectors,buffer); + if(ret == CARDIO_ERROR_READY) + return true; + + return false; +} + +static bool __gcsd_writeSectors(int n, u32 sector, u32 numSectors, const void *buffer) +{ + s32 ret; + + ret = sdgecko_writeSectors(n,sector,numSectors,buffer); + if(ret == CARDIO_ERROR_READY) + return true; + + return false; +} + +static bool __gcsd_clearStatus(int n) +{ + return true; // FIXME +} + +static bool __gcsd_shutdown(int n) +{ + sdgecko_doUnmount(n); + return true; +} + + +static bool __gcsda_startup(void) +{ + return __gcsd_startup(0); +} + +static bool __gcsda_isInserted(void) +{ + return __gcsd_isInserted(0); +} + +static bool __gcsda_readSectors(u32 sector, u32 numSectors, void *buffer) +{ + return __gcsd_readSectors(0, sector, numSectors, buffer); +} + +static bool __gcsda_writeSectors(u32 sector, u32 numSectors, void *buffer) +{ + return __gcsd_writeSectors(0, sector, numSectors, buffer); +} + +static bool __gcsda_clearStatus(void) +{ + return __gcsd_clearStatus(0); +} + +static bool __gcsda_shutdown(void) +{ + return __gcsd_shutdown(0); +} + + + +static bool __gcsdb_startup(void) +{ + return __gcsd_startup(1); +} + +static bool __gcsdb_isInserted(void) +{ + return __gcsd_isInserted(1); +} + +static bool __gcsdb_readSectors(u32 sector, u32 numSectors, void *buffer) +{ + return __gcsd_readSectors(1, sector, numSectors, buffer); +} + +static bool __gcsdb_writeSectors(u32 sector, u32 numSectors, void *buffer) +{ + return __gcsd_writeSectors(1, sector, numSectors, buffer); +} + +static bool __gcsdb_clearStatus(void) +{ + return __gcsd_clearStatus(1); +} + +static bool __gcsdb_shutdown(void) +{ + return __gcsd_shutdown(1); +} + +const DISC_INTERFACE __io_gcsda = { + DEVICE_TYPE_GC_SD, + FEATURE_MEDIUM_CANREAD | FEATURE_MEDIUM_CANWRITE | FEATURE_GAMECUBE_SLOTA, + (FN_MEDIUM_STARTUP)&__gcsda_startup, + (FN_MEDIUM_ISINSERTED)&__gcsda_isInserted, + (FN_MEDIUM_READSECTORS)&__gcsda_readSectors, + (FN_MEDIUM_WRITESECTORS)&__gcsda_writeSectors, + (FN_MEDIUM_CLEARSTATUS)&__gcsda_clearStatus, + (FN_MEDIUM_SHUTDOWN)&__gcsda_shutdown +} ; +const DISC_INTERFACE __io_gcsdb = { + DEVICE_TYPE_GC_SD, + FEATURE_MEDIUM_CANREAD | FEATURE_MEDIUM_CANWRITE | FEATURE_GAMECUBE_SLOTB, + (FN_MEDIUM_STARTUP)&__gcsdb_startup, + (FN_MEDIUM_ISINSERTED)&__gcsdb_isInserted, + (FN_MEDIUM_READSECTORS)&__gcsdb_readSectors, + (FN_MEDIUM_WRITESECTORS)&__gcsdb_writeSectors, + (FN_MEDIUM_CLEARSTATUS)&__gcsdb_clearStatus, + (FN_MEDIUM_SHUTDOWN)&__gcsdb_shutdown +} ; diff --git a/wii/libogc/libogc/gu.c b/wii/libogc/libogc/gu.c new file mode 100644 index 0000000000..8ee3e3052e --- /dev/null +++ b/wii/libogc/libogc/gu.c @@ -0,0 +1,916 @@ +#include +#include + +extern void __ps_guMtxRotAxisRadInternal(register Mtx mt,const register guVector *axis,register f32 sT,register f32 cT); + +void guFrustum(Mtx44 mt,f32 t,f32 b,f32 l,f32 r,f32 n,f32 f) +{ + f32 tmp; + + tmp = 1.0f/(r-l); + mt[0][0] = (2*n)*tmp; + mt[0][1] = 0.0f; + mt[0][2] = (r+l)*tmp; + mt[0][3] = 0.0f; + + tmp = 1.0f/(t-b); + mt[1][0] = 0.0f; + mt[1][1] = (2*n)*tmp; + mt[1][2] = (t+b)*tmp; + mt[1][3] = 0.0f; + + tmp = 1.0f/(f-n); + mt[2][0] = 0.0f; + mt[2][1] = 0.0f; + mt[2][2] = -(n)*tmp; + mt[2][3] = -(f*n)*tmp; + + mt[3][0] = 0.0f; + mt[3][1] = 0.0f; + mt[3][2] = -1.0f; + mt[3][3] = 0.0f; +} + +void guPerspective(Mtx44 mt,f32 fovy,f32 aspect,f32 n,f32 f) +{ + f32 cot,angle,tmp; + + angle = fovy*0.5f; + angle = DegToRad(angle); + + cot = 1.0f/tanf(angle); + + mt[0][0] = cot/aspect; + mt[0][1] = 0.0f; + mt[0][2] = 0.0f; + mt[0][3] = 0.0f; + + mt[1][0] = 0.0f; + mt[1][1] = cot; + mt[1][2] = 0.0f; + mt[1][3] = 0.0f; + + tmp = 1.0f/(f-n); + mt[2][0] = 0.0f; + mt[2][1] = 0.0f; + mt[2][2] = -(n)*tmp; + mt[2][3] = -(f*n)*tmp; + + mt[3][0] = 0.0f; + mt[3][1] = 0.0f; + mt[3][2] = -1.0f; + mt[3][3] = 0.0f; +} + +void guOrtho(Mtx44 mt,f32 t,f32 b,f32 l,f32 r,f32 n,f32 f) +{ + f32 tmp; + + tmp = 1.0f/(r-l); + mt[0][0] = 2.0f*tmp; + mt[0][1] = 0.0f; + mt[0][2] = 0.0f; + mt[0][3] = -(r+l)*tmp; + + tmp = 1.0f/(t-b); + mt[1][0] = 0.0f; + mt[1][1] = 2.0f*tmp; + mt[1][2] = 0.0f; + mt[1][3] = -(t+b)*tmp; + + tmp = 1.0f/(f-n); + mt[2][0] = 0.0f; + mt[2][1] = 0.0f; + mt[2][2] = -(1.0f)*tmp; + mt[2][3] = -(f)*tmp; + + mt[3][0] = 0.0f; + mt[3][1] = 0.0f; + mt[3][2] = 0.0f; + mt[3][3] = 1.0f; +} + +void guLightPerspective(Mtx mt,f32 fovY,f32 aspect,f32 scaleS,f32 scaleT,f32 transS,f32 transT) +{ + f32 angle; + f32 cot; + + angle = fovY*0.5f; + angle = DegToRad(angle); + + cot = 1.0f/tanf(angle); + + mt[0][0] = (cot / aspect) * scaleS; + mt[0][1] = 0.0f; + mt[0][2] = -transS; + mt[0][3] = 0.0f; + + mt[1][0] = 0.0f; + mt[1][1] = cot * scaleT; + mt[1][2] = -transT; + mt[1][3] = 0.0f; + + mt[2][0] = 0.0f; + mt[2][1] = 0.0f; + mt[2][2] = -1.0f; + mt[2][3] = 0.0f; +} + +void guLightOrtho(Mtx mt,f32 t,f32 b,f32 l,f32 r,f32 scaleS,f32 scaleT,f32 transS,f32 transT) +{ + f32 tmp; + + tmp = 1.0f / (r - l); + mt[0][0] = (2.0f * tmp * scaleS); + mt[0][1] = 0.0f; + mt[0][2] = 0.0f; + mt[0][3] = ((-(r + l) * tmp) * scaleS) + transS; + + tmp = 1.0f / (t - b); + mt[1][0] = 0.0f; + mt[1][1] = (2.0f * tmp) * scaleT; + mt[1][2] = 0.0f; + mt[1][3] = ((-(t + b) * tmp)* scaleT) + transT; + + mt[2][0] = 0.0f; + mt[2][1] = 0.0f; + mt[2][2] = 0.0f; + mt[2][3] = 1.0f; +} + +void guLightFrustum(Mtx mt,f32 t,f32 b,f32 l,f32 r,f32 n,f32 scaleS,f32 scaleT,f32 transS,f32 transT) +{ + f32 tmp; + + tmp = 1.0f / (r - l); + mt[0][0] = ((2*n) * tmp) * scaleS; + mt[0][1] = 0.0f; + mt[0][2] = (((r + l) * tmp) * scaleS) - transS; + mt[0][3] = 0.0f; + + tmp = 1.0f / (t - b); + mt[1][0] = 0.0f; + mt[1][1] = ((2*n) * tmp) * scaleT; + mt[1][2] = (((t + b) * tmp) * scaleT) - transT; + mt[1][3] = 0.0f; + + mt[2][0] = 0.0f; + mt[2][1] = 0.0f; + mt[2][2] = -1.0f; + mt[2][3] = 0.0f; +} + +void guLookAt(Mtx mt,guVector *camPos,guVector *camUp,guVector *target) +{ + guVector vLook,vRight,vUp; + + vLook.x = camPos->x - target->x; + vLook.y = camPos->y - target->y; + vLook.z = camPos->z - target->z; + guVecNormalize(&vLook); + + guVecCross(camUp,&vLook,&vRight); + guVecNormalize(&vRight); + + guVecCross(&vLook,&vRight,&vUp); + + mt[0][0] = vRight.x; + mt[0][1] = vRight.y; + mt[0][2] = vRight.z; + mt[0][3] = -( camPos->x * vRight.x + camPos->y * vRight.y + camPos->z * vRight.z ); + + mt[1][0] = vUp.x; + mt[1][1] = vUp.y; + mt[1][2] = vUp.z; + mt[1][3] = -( camPos->x * vUp.x + camPos->y * vUp.y + camPos->z * vUp.z ); + + mt[2][0] = vLook.x; + mt[2][1] = vLook.y; + mt[2][2] = vLook.z; + mt[2][3] = -( camPos->x * vLook.x + camPos->y * vLook.y + camPos->z * vLook.z ); +} + +void c_guMtxIdentity(Mtx mt) +{ + s32 i,j; + + for(i=0;i<3;i++) { + for(j=0;j<4;j++) { + if(i==j) mt[i][j] = 1.0; + else mt[i][j] = 0.0; + } + } +} + +void c_guMtxRotRad(Mtx mt,const char axis,f32 rad) +{ + f32 sinA,cosA; + + sinA = sinf(rad); + cosA = cosf(rad); + + c_guMtxRotTrig(mt,axis,sinA,cosA); +} + +#ifdef GEKKO +void ps_guMtxRotRad(register Mtx mt,const register char axis,register f32 rad) +{ + register f32 sinA = sinf(rad); + register f32 cosA = cosf(rad); + + ps_guMtxRotTrig(mt,axis,sinA,cosA); +} + +void ps_guMtxRotAxisRad(Mtx mt,guVector *axis,f32 rad) +{ + f32 sinT = sinf(rad); + f32 cosT = cosf(rad); + + __ps_guMtxRotAxisRadInternal(mt,axis,sinT,cosT); +} + +#endif + +void c_guMtxRotTrig(Mtx mt,const char axis,f32 sinA,f32 cosA) +{ + switch(axis) { + case 'x': + case 'X': + mt[0][0] = 1.0f; mt[0][1] = 0.0f; mt[0][2] = 0.0f; mt[0][3] = 0.0f; + mt[1][0] = 0.0f; mt[1][1] = cosA; mt[1][2] = -sinA; mt[1][3] = 0.0f; + mt[2][0] = 0.0f; mt[2][1] = sinA; mt[2][2] = cosA; mt[2][3] = 0.0f; + break; + case 'y': + case 'Y': + mt[0][0] = cosA; mt[0][1] = 0.0f; mt[0][2] = sinA; mt[0][3] = 0.0f; + mt[1][0] = 0.0f; mt[1][1] = 1.0f; mt[1][2] = 0.0f; mt[1][3] = 0.0f; + mt[2][0] = -sinA; mt[2][1] = 0.0f; mt[2][2] = cosA; mt[2][3] = 0.0f; + break; + case 'z': + case 'Z': + mt[0][0] = cosA; mt[0][1] = -sinA; mt[0][2] = 0.0f; mt[0][3] = 0.0f; + mt[1][0] = sinA; mt[1][1] = cosA; mt[1][2] = 0.0f; mt[1][3] = 0.0f; + mt[2][0] = 0.0f; mt[2][1] = 0.0f; mt[2][2] = 1.0f; mt[2][3] = 0.0f; + break; + default: + break; + } +} + +void c_guMtxRotAxisRad(Mtx mt,guVector *axis,f32 rad) +{ + f32 s,c; + f32 t; + f32 x,y,z; + f32 xSq,ySq,zSq; + + s = sinf(rad); + c = cosf(rad); + t = 1.0f-c; + + c_guVecNormalize(axis); + + x = axis->x; + y = axis->y; + z = axis->z; + + xSq = x*x; + ySq = y*y; + zSq = z*z; + + mt[0][0] = ( t * xSq ) + ( c ); + mt[0][1] = ( t * x * y ) - ( s * z ); + mt[0][2] = ( t * x * z ) + ( s * y ); + mt[0][3] = 0.0f; + + mt[1][0] = ( t * x * y ) + ( s * z ); + mt[1][1] = ( t * ySq ) + ( c ); + mt[1][2] = ( t * y * z ) - ( s * x ); + mt[1][3] = 0.0f; + + mt[2][0] = ( t * x * z ) - ( s * y ); + mt[2][1] = ( t * y * z ) + ( s * x ); + mt[2][2] = ( t * zSq ) + ( c ); + mt[2][3] = 0.0f; + +} + +void c_guMtxCopy(Mtx src,Mtx dst) +{ + if(src==dst) return; + + dst[0][0] = src[0][0]; dst[0][1] = src[0][1]; dst[0][2] = src[0][2]; dst[0][3] = src[0][3]; + dst[1][0] = src[1][0]; dst[1][1] = src[1][1]; dst[1][2] = src[1][2]; dst[1][3] = src[1][3]; + dst[2][0] = src[2][0]; dst[2][1] = src[2][1]; dst[2][2] = src[2][2]; dst[2][3] = src[2][3]; +} + +void c_guMtxConcat(Mtx a,Mtx b,Mtx ab) +{ + Mtx tmp; + MtxP m; + + if(ab==b || ab==a) + m = tmp; + else + m = ab; + + m[0][0] = a[0][0]*b[0][0] + a[0][1]*b[1][0] + a[0][2]*b[2][0]; + m[0][1] = a[0][0]*b[0][1] + a[0][1]*b[1][1] + a[0][2]*b[2][1]; + m[0][2] = a[0][0]*b[0][2] + a[0][1]*b[1][2] + a[0][2]*b[2][2]; + m[0][3] = a[0][0]*b[0][3] + a[0][1]*b[1][3] + a[0][2]*b[2][3] + a[0][3]; + + m[1][0] = a[1][0]*b[0][0] + a[1][1]*b[1][0] + a[1][2]*b[2][0]; + m[1][1] = a[1][0]*b[0][1] + a[1][1]*b[1][1] + a[1][2]*b[2][1]; + m[1][2] = a[1][0]*b[0][2] + a[1][1]*b[1][2] + a[1][2]*b[2][2]; + m[1][3] = a[1][0]*b[0][3] + a[1][1]*b[1][3] + a[1][2]*b[2][3] + a[1][3]; + + m[2][0] = a[2][0]*b[0][0] + a[2][1]*b[1][0] + a[2][2]*b[2][0]; + m[2][1] = a[2][0]*b[0][1] + a[2][1]*b[1][1] + a[2][2]*b[2][1]; + m[2][2] = a[2][0]*b[0][2] + a[2][1]*b[1][2] + a[2][2]*b[2][2]; + m[2][3] = a[2][0]*b[0][3] + a[2][1]*b[1][3] + a[2][2]*b[2][3] + a[2][3]; + + if(m==tmp) + c_guMtxCopy(tmp,ab); +} + +void c_guMtxScale(Mtx mt,f32 xS,f32 yS,f32 zS) +{ + mt[0][0] = xS; mt[0][1] = 0.0f; mt[0][2] = 0.0f; mt[0][3] = 0.0f; + mt[1][0] = 0.0f; mt[1][1] = yS; mt[1][2] = 0.0f; mt[1][3] = 0.0f; + mt[2][0] = 0.0f; mt[2][1] = 0.0f; mt[2][2] = zS; mt[2][3] = 0.0f; +} + +void c_guMtxScaleApply(Mtx src,Mtx dst,f32 xS,f32 yS,f32 zS) +{ + dst[0][0] = src[0][0] * xS; dst[0][1] = src[0][1] * xS; + dst[0][2] = src[0][2] * xS; dst[0][3] = src[0][3] * xS; + + dst[1][0] = src[1][0] * yS; dst[1][1] = src[1][1] * yS; + dst[1][2] = src[1][2] * yS; dst[1][3] = src[1][3] * yS; + + dst[2][0] = src[2][0] * zS; dst[2][1] = src[2][1] * zS; + dst[2][2] = src[2][2] * zS; dst[2][3] = src[2][3] * zS; +} + +void c_guMtxApplyScale(Mtx src,Mtx dst,f32 xS,f32 yS,f32 zS) +{ + dst[0][0] = src[0][0] * xS; dst[0][1] = src[0][1] * yS; + dst[0][2] = src[0][2] * zS; dst[0][3] = src[0][3]; + + dst[1][0] = src[1][0] * xS; dst[1][1] = src[1][1] * yS; + dst[1][2] = src[1][2] * zS; dst[1][3] = src[1][3]; + + dst[2][0] = src[2][0] * xS; dst[2][1] = src[2][1] * yS; + dst[2][2] = src[2][2] * zS; dst[2][3] = src[2][3]; +} + +void c_guMtxTrans(Mtx mt,f32 xT,f32 yT,f32 zT) +{ + mt[0][0] = 1.0f; mt[0][1] = 0.0f; mt[0][2] = 0.0f; mt[0][3] = xT; + mt[1][0] = 0.0f; mt[1][1] = 1.0f; mt[1][2] = 0.0f; mt[1][3] = yT; + mt[2][0] = 0.0f; mt[2][1] = 0.0f; mt[2][2] = 1.0f; mt[2][3] = zT; +} + +void c_guMtxTransApply(Mtx src,Mtx dst,f32 xT,f32 yT,f32 zT) +{ + if ( src != dst ) + { + dst[0][0] = src[0][0]; dst[0][1] = src[0][1]; dst[0][2] = src[0][2]; + dst[1][0] = src[1][0]; dst[1][1] = src[1][1]; dst[1][2] = src[1][2]; + dst[2][0] = src[2][0]; dst[2][1] = src[2][1]; dst[2][2] = src[2][2]; + } + + dst[0][3] = src[0][3] + xT; + dst[1][3] = src[1][3] + yT; + dst[2][3] = src[2][3] + zT; +} + +void c_guMtxApplyTrans(Mtx src,Mtx dst,f32 xT,f32 yT,f32 zT) +{ + if ( src != dst ) + { + dst[0][0] = src[0][0]; dst[0][1] = src[0][1]; dst[0][2] = src[0][2]; + dst[1][0] = src[1][0]; dst[1][1] = src[1][1]; dst[1][2] = src[1][2]; + dst[2][0] = src[2][0]; dst[2][1] = src[2][1]; dst[2][2] = src[2][2]; + } + + dst[0][3] = src[0][0]*xT + src[0][1]*yT + src[0][2]*zT + src[0][3]; + dst[1][3] = src[1][0]*xT + src[1][1]*yT + src[1][2]*zT + src[1][3]; + dst[2][3] = src[2][0]*xT + src[2][1]*yT + src[2][2]*zT + src[2][3]; +} + +u32 c_guMtxInverse(Mtx src,Mtx inv) +{ + Mtx mTmp; + MtxP m; + f32 det; + + if(src==inv) + m = mTmp; + else + m = inv; + + + // compute the determinant of the upper 3x3 submatrix + det = src[0][0]*src[1][1]*src[2][2] + src[0][1]*src[1][2]*src[2][0] + src[0][2]*src[1][0]*src[2][1] + - src[2][0]*src[1][1]*src[0][2] - src[1][0]*src[0][1]*src[2][2] - src[0][0]*src[2][1]*src[1][2]; + + + // check if matrix is singular + if(det==0.0f)return 0; + + + // compute the inverse of the upper submatrix: + + // find the transposed matrix of cofactors of the upper submatrix + // and multiply by (1/det) + + det = 1.0f / det; + + + m[0][0] = (src[1][1]*src[2][2] - src[2][1]*src[1][2]) * det; + m[0][1] = -(src[0][1]*src[2][2] - src[2][1]*src[0][2]) * det; + m[0][2] = (src[0][1]*src[1][2] - src[1][1]*src[0][2]) * det; + + m[1][0] = -(src[1][0]*src[2][2] - src[2][0]*src[1][2]) * det; + m[1][1] = (src[0][0]*src[2][2] - src[2][0]*src[0][2]) * det; + m[1][2] = -(src[0][0]*src[1][2] - src[1][0]*src[0][2]) * det; + + m[2][0] = (src[1][0]*src[2][1] - src[2][0]*src[1][1]) * det; + m[2][1] = -(src[0][0]*src[2][1] - src[2][0]*src[0][1]) * det; + m[2][2] = (src[0][0]*src[1][1] - src[1][0]*src[0][1]) * det; + + + // compute (invA)*(-C) + m[0][3] = -m[0][0]*src[0][3] - m[0][1]*src[1][3] - m[0][2]*src[2][3]; + m[1][3] = -m[1][0]*src[0][3] - m[1][1]*src[1][3] - m[1][2]*src[2][3]; + m[2][3] = -m[2][0]*src[0][3] - m[2][1]*src[1][3] - m[2][2]*src[2][3]; + + // copy back if needed + if( m == mTmp ) + c_guMtxCopy(mTmp,inv); + + return 1; +} + +void c_guMtxTranspose(Mtx src,Mtx xPose) +{ + Mtx mTmp; + MtxP m; + + if(src==xPose) + m = mTmp; + else + m = xPose; + + + m[0][0] = src[0][0]; m[0][1] = src[1][0]; m[0][2] = src[2][0]; m[0][3] = 0.0f; + m[1][0] = src[0][1]; m[1][1] = src[1][1]; m[1][2] = src[2][1]; m[1][3] = 0.0f; + m[2][0] = src[0][2]; m[2][1] = src[1][2]; m[2][2] = src[2][2]; m[2][3] = 0.0f; + + + // copy back if needed + if(m==mTmp) + c_guMtxCopy(mTmp,xPose); +} + +u32 c_guMtxInvXpose(Mtx src, Mtx xPose) +{ + Mtx mTmp; + MtxP m; + f32 det; + + if(src == xPose) + m = mTmp; + else + m = xPose; + + // Compute the determinant of the upper 3x3 submatrix + det = src[0][0]*src[1][1]*src[2][2] + src[0][1]*src[1][2]*src[2][0] + src[0][2]*src[1][0]*src[2][1] + - src[2][0]*src[1][1]*src[0][2] - src[1][0]*src[0][1]*src[2][2] - src[0][0]*src[2][1]*src[1][2]; + + // Check if matrix is singular + if(det == 0.0f) return 0; + + // Compute the inverse of the upper submatrix: + + // Find the transposed matrix of cofactors of the upper submatrix + // and multiply by (1/det) + + det = 1.0f / det; + + m[0][0] = (src[1][1]*src[2][2] - src[2][1]*src[1][2]) * det; + m[0][1] = -(src[1][0]*src[2][2] - src[2][0]*src[1][2]) * det; + m[0][2] = (src[1][0]*src[2][1] - src[2][0]*src[1][1]) * det; + + m[1][0] = -(src[0][1]*src[2][2] - src[2][1]*src[0][2]) * det; + m[1][1] = (src[0][0]*src[2][2] - src[2][0]*src[0][2]) * det; + m[1][2] = -(src[0][0]*src[2][1] - src[2][0]*src[0][1]) * det; + + m[2][0] = (src[0][1]*src[1][2] - src[1][1]*src[0][2]) * det; + m[2][1] = -(src[0][0]*src[1][2] - src[1][0]*src[0][2]) * det; + m[2][2] = (src[0][0]*src[1][1] - src[1][0]*src[0][1]) * det; + + + // The 4th columns should be zero + m[0][3] = 0.0F; + m[1][3] = 0.0F; + m[2][3] = 0.0F; + + // Copy back if needed + if(m == mTmp) + c_guMtxCopy(mTmp, xPose); + + return 1; +} + +void c_guMtxReflect(Mtx m,guVector *p,guVector *n) +{ + f32 vxy, vxz, vyz, pdotn; + + vxy = -2.0f * n->x * n->y; + vxz = -2.0f * n->x * n->z; + vyz = -2.0f * n->y * n->z; + pdotn = 2.0f * c_guVecDotProduct(p,n); + + m[0][0] = 1.0f - 2.0f * n->x * n->x; + m[0][1] = vxy; + m[0][2] = vxz; + m[0][3] = pdotn * n->x; + + m[1][0] = vxy; + m[1][1] = 1.0f - 2.0f * n->y * n->y; + m[1][2] = vyz; + m[1][3] = pdotn * n->y; + + m[2][0] = vxz; + m[2][1] = vyz; + m[2][2] = 1.0f - 2.0f * n->z * n->z; + m[2][3] = pdotn * n->z; +} + + +void c_guVecAdd(guVector *a,guVector *b,guVector *ab) +{ + ab->x = a->x + b->x; + ab->y = a->y + b->y; + ab->z = a->z + b->z; +} + +void c_guVecSub(guVector *a,guVector *b,guVector *ab) +{ + ab->x = a->x - b->x; + ab->y = a->y - b->y; + ab->z = a->z - b->z; +} + +void c_guVecScale(guVector *src,guVector *dst,f32 scale) +{ + dst->x = src->x * scale; + dst->y = src->y * scale; + dst->z = src->z * scale; +} + + +void c_guVecNormalize(guVector *v) +{ + f32 m; + + m = ((v->x)*(v->x)) + ((v->y)*(v->y)) + ((v->z)*(v->z)); + m = 1/sqrtf(m); + v->x *= m; + v->y *= m; + v->z *= m; +} + +void c_guVecCross(guVector *a,guVector *b,guVector *axb) +{ + guVector vTmp; + + vTmp.x = (a->y*b->z)-(a->z*b->y); + vTmp.y = (a->z*b->x)-(a->x*b->z); + vTmp.z = (a->x*b->y)-(a->y*b->x); + + axb->x = vTmp.x; + axb->y = vTmp.y; + axb->z = vTmp.z; +} + +void c_guVecMultiply(Mtx mt,guVector *src,guVector *dst) +{ + guVector tmp; + + tmp.x = mt[0][0]*src->x + mt[0][1]*src->y + mt[0][2]*src->z + mt[0][3]; + tmp.y = mt[1][0]*src->x + mt[1][1]*src->y + mt[1][2]*src->z + mt[1][3]; + tmp.z = mt[2][0]*src->x + mt[2][1]*src->y + mt[2][2]*src->z + mt[2][3]; + + dst->x = tmp.x; + dst->y = tmp.y; + dst->z = tmp.z; +} + +void c_guVecMultiplySR(Mtx mt,guVector *src,guVector *dst) +{ + guVector tmp; + + tmp.x = mt[0][0]*src->x + mt[0][1]*src->y + mt[0][2]*src->z; + tmp.y = mt[1][0]*src->x + mt[1][1]*src->y + mt[1][2]*src->z; + tmp.z = mt[2][0]*src->x + mt[2][1]*src->y + mt[2][2]*src->z; + + // copy back + dst->x = tmp.x; + dst->y = tmp.y; + dst->z = tmp.z; +} + +f32 c_guVecDotProduct(guVector *a,guVector *b) +{ + f32 dot; + + dot = (a->x * b->x) + (a->y * b->y) + (a->z * b->z); + + return dot; +} + +void c_guQuatAdd(guQuaternion *a,guQuaternion *b,guQuaternion *ab) +{ + ab->x = a->x + b->x; + ab->y = a->x + b->y; + ab->z = a->x + b->z; + ab->w = a->x + b->w; +} + +#ifdef GEKKO +void ps_guQuatAdd(register guQuaternion *a,register guQuaternion *b,register guQuaternion *ab) +{ + register f32 tmp0,tmp1; + + __asm__ __volatile__ ( + "psq_l %0,0(%2),0,0\n" // [ax][ay] + "psq_l %1,0(%3),0,0\n" // [bx][by] + "ps_add %1,%0,%1\n" // [ax+bx][ay+by] + "psq_st %1,0(%4),0,0\n" // X = [ax+bx], Y = [ay+by] + "psq_l %0,8(%2),0,0\n" // [az][aw] + "psq_l %1,8(%3),0,0\n" // [bz][bw] + "ps_add %1,%0,%1\n" // [az+bz][aw+bw] + "psq_st %1,8(%4),0,0" // Z = [az+bz], W = [aw+bw] + : "=&f"(tmp0),"=&f"(tmp1) + : "b"(a),"b"(b),"b"(ab) + : "memory" + ); +} +#endif + +void c_guQuatSub(guQuaternion *a,guQuaternion *b,guQuaternion *ab) +{ + ab->x = a->x - b->x; + ab->y = a->x - b->y; + ab->z = a->x - b->z; + ab->w = a->x - b->w; +} + +#ifdef GEKKO +void ps_guQuatSub(register guQuaternion *a,register guQuaternion *b,register guQuaternion *ab) +{ + register f32 tmp0,tmp1; + + __asm__ __volatile__ ( + "psq_l %0,0(%2),0,0\n" // [ax][ay] + "psq_l %1,0(%3),0,0\n" // [bx][by] + "ps_sub %1,%0,%1\n" // [ax-bx][ay-by] + "psq_st %1,0(%4),0,0\n" // X = [ax-bx], Y = [ay-by] + "psq_l %0,8(%2),0,0\n" // [az][aw] + "psq_l %1,8(%3),0,0\n" // [bz][bw] + "ps_sub %1,%0,%1\n" // [az-bz][aw-bw] + "psq_st %1,8(%4),0,0" // Z = [az-bz], W = [aw-bw] + : "=&f"(tmp0),"=&f"(tmp1) + : "b"(a),"b"(b),"b"(ab) + : "memory" + ); +} +#endif + +void c_guQuatMultiply(guQuaternion *a,guQuaternion *b,guQuaternion *ab) +{ + guQuaternion *r; + guQuaternion ab_tmp; + + if(a==ab || b==ab) r = &ab_tmp; + else r = ab; + + r->w = a->w*b->w - a->x*b->x - a->y*b->y - a->z*b->z; + r->x = a->w*b->x + a->x*b->w + a->y*b->z - a->z*b->y; + r->y = a->w*b->y + a->y*b->w + a->z*b->x - a->x*b->z; + r->z = a->w*b->z + a->z*b->w + a->x*b->y - a->y*b->x; + + if(r==&ab_tmp) *ab = ab_tmp; +} + +#ifdef GEKKO +void ps_guQuatMultiply(register guQuaternion *a,register guQuaternion *b,register guQuaternion *ab) +{ + register f32 aXY,aZW,bXY,bZW; + register f32 tmp0,tmp1,tmp2,tmp3,tmp4,tmp5,tmp6,tmp7; + + __asm__ __volatile__ ( + "psq_l %0,0(%12),0,0\n" // [px][py] + "psq_l %1,8(%12),0,0\n" // [pz][pw] + "psq_l %2,0(%13),0,0\n" // [qx][qy] + "ps_neg %4,%0\n" // [-px][-py] + "psq_l %3,8(%13),0,0\n" // [qz][qw] + "ps_neg %5,%1\n" // [-pz][-pw] + "ps_merge01 %6,%4,%0\n" // [-px][py] + "ps_muls0 %8,%1,%2\n" // [pz*qx][pw*qx] + "ps_muls0 %9,%4,%2\n" // [-px*qx][-py*qx] + "ps_merge01 %7,%5,%1\n" // [-pz][pw] + "ps_muls1 %11,%6,%2\n" // [-px*qy][py*qy] + "ps_madds0 %8,%6,%3,%8\n" // [-px*qz+pz*qx][py*qz+pw*qx] + "ps_muls1 %10,%7,%2\n" // [-pz*qy][pw*qy] + "ps_madds0 %9,%7,%3,%9\n" // [-pz*qz+-px*qx][pw*qz+-py*qx] + "ps_madds1 %11,%5,%3,%11\n" // [-pz*qw+-px*qy][-pw*qw+py*qy] + "ps_merge10 %8,%8,%8\n" // [py*qz+pw*qx][-px*qz+pz*qx] + "ps_madds1 %10,%0,%3,%10\n" // [px*qw+-pz*qy][py*qw+pw*qy] + "ps_merge10 %9,%9,%9\n" // [pw*qz+-py*qx][-pz*qz+-px*qx] + "ps_add %8,%8,%10\n" // [py*qz+pw*qx+px*qw+-pz*qy][-px*qz+pz*qx+py*qw+pw*qy] + "psq_st %8,0(%14),0,0\n" // X = [py*qz+pw*qx+px*qw+-pz*qy], Y = [-px*qz+pz*qx+py*qw+pw*qy] + "ps_sub %9,%9,%11\n" // [pw*qz+-py*qx--pz*qw+-px*qy][-pz*qz+-px*qx--pw*qw+py*qy] + "psq_st %9,8(%14),0,0" // Z = [pw*qz+-py*qx--pz*qw+-px*qy], W = [-pz*qz+-px*qx--pw*qw+py*qy] + : "=&f"(aXY),"=&f"(aZW),"=&f"(bXY),"=&f"(bZW),"=&f"(tmp0),"=&f"(tmp1),"=&f"(tmp2),"=&f"(tmp3),"=&f"(tmp4),"=&f"(tmp5),"=&f"(tmp6),"=&f"(tmp7) + : "b"(a),"b"(b),"b"(ab) + : "memory" + ); +} +#endif + +void c_guQuatNormalize(guQuaternion *a,guQuaternion *d) +{ + f32 dot,scale; + + dot = (a->x*a->x) + (a->y*a->y) + (a->z*a->z) + (a->w*a->w); + if(dot==0.0f) d->x = d->y = d->z = d->w = 0.0f; + else { + scale = 1.0f/sqrtf(dot); + d->x = a->x*scale; + d->y = a->y*scale; + d->z = a->z*scale; + d->w = a->w*scale; + } +} + +#ifdef GEKKO +void ps_guQuatNormalize(register guQuaternion *a,register guQuaternion *d) +{ + register f32 c_zero = 0.0f; + register f32 c_half = 0.5f; + register f32 c_three = 3.0f; + register f32 axy,azw,tmp0,tmp1,tmp2,tmp3; + + __asm__ __volatile__ ( + "psq_l %0,0(%6),0,0\n" // [ax][ay] + "ps_mul %2,%0,%0\n" // [ax*ax][ay*ay] + "psq_l %1,8(%6),0,0\n" // [az][aw] + "ps_madd %2,%1,%1,%2\n" // [az*az+ax*ax][aw*aw+ay*ay] + "ps_sum0 %2,%2,%2,%2\n" // [az*az+ax*ax+aw*aw+ay*ay][aw*aw+ay*ay] + "frsqrte %3,%2\n" // reciprocal sqrt estimated + //Newton-Raphson refinement 1 step: (E/2)*(3 - x*E*E) + "fmul %4,%3,%3\n" // E*E + "fmul %5,%3,%8\n" // E*0.5 = E/2 + "fnmsub %4,%4,%2,%9\n" // -(E*E*x - 3) = (3 - x*E*E) + "fmul %3,%4,%5\n" // (E/2)*(3 - x*E*E) + "ps_sel %3,%2,%3,%10\n" // NaN check: if(mag==0.0f) + "ps_muls0 %0,%0,%3\n" // [ax*rsqmag][ay*rsqmag] + "ps_muls0 %1,%1,%3\n" // [az*rsqmag][aw*rsqmag] + "psq_st %0,0(%7),0,0\n" // X = [az*rsqmag], Y = [aw*rsqmag] + "psq_st %1,8(%7),0,0\n" // Z = [az*rsqmag], W = [aw*rsqmag] + : "=&f"(axy),"=&f"(azw),"=&f"(tmp0),"=&f"(tmp1),"=&f"(tmp2),"=&f"(tmp3) + : "b"(a),"b"(d),"f"(c_half),"f"(c_three),"f"(c_zero) + : "memory" + ); +} +#endif + +void c_guQuatInverse(guQuaternion *a,guQuaternion *d) +{ + f32 mag,nrminv; + + mag = (a->x*a->x) + (a->y*a->y) + (a->z*a->z) + (a->w*a->w); + if(mag==0.0f) mag = 1.0f; + + nrminv = 1.0f/mag; + d->x = -a->x*nrminv; + d->y = -a->y*nrminv; + d->z = -a->z*nrminv; + d->w = a->w*nrminv; +} + +#ifdef GEKKO +void ps_guQuatInverse(register guQuaternion *a,register guQuaternion *d) +{ + register f32 c_one = 1.0f; + register f32 axy,azw,tmp0,tmp1,tmp2,tmp3,tmp4,tmp5; + + __asm__ __volatile__ ( + "psq_l %0,0(%8),0,0\n" // [ax][ay] + "ps_mul %2,%0,%0\n" // [ax*ax][ay*ay] + "ps_sub %3,%10,%10\n" // [1 - 1][1 - 1] + "psq_l %1,8(%8),0,0\n" // [az][aw] + "ps_madd %2,%1,%1,%2\n" // [az*az+ax*ax][aw*aw+ay*ay] + "ps_add %7,%0,%10\n" // [1 + 1][1 + 1] + "ps_sum0 %2,%2,%2,%2\n" // [az*az+ax*ax+aw*aw+ay*ay][aw*aw+ay*ay] + "fcmpu cr0,%2,%3\n" // [az*az+ax*ax+aw*aw+ay*ay] == 0.0f + "beq- 1f\n" + "fres %4,%2\n" // 1.0f/mag + "ps_neg %5,%2\n" // -mag + // Newton-Rapson refinement (x1) : E' = 2E-X*E*E + "ps_nmsub %6,%2,%4,%7\n" // + "ps_mul %4,%4,%6\n" // + "b 2f\n" + "1:\n" + "fmr %4,%10\n" + "2:\n" + "ps_neg %7,%4\n" + "ps_muls1 %5,%4,%1\n" + "ps_muls0 %0,%0,%7\n" + "psq_st %5,12(%9),1,0\n" + "ps_muls0 %6,%1,%7\n" + "psq_st %0,0(%9),0,0\n" + "psq_st %6,8(%9),1,0\n" + : "=&f"(axy),"=&f"(azw),"=&f"(tmp0),"=&f"(tmp1),"=&f"(tmp2),"=&f"(tmp3),"=&f"(tmp4),"=&f"(tmp5) + : "b"(a),"b"(d),"f"(c_one) + ); +} +#endif + +void c_guQuatMtx(guQuaternion *a,Mtx m) +{ + const f32 diag = guMtxRowCol(m,0,0) + guMtxRowCol(m,1,1) + guMtxRowCol(m,2,2) + 1; + + if(diag>0.0f) { + const f32 scale = sqrtf(diag)*2.0f; + + a->x = (guMtxRowCol(m,2,1) - guMtxRowCol(m,1,2))/scale; + a->y = (guMtxRowCol(m,0,2) - guMtxRowCol(m,2,0))/scale; + a->z = (guMtxRowCol(m,1,0) - guMtxRowCol(m,0,1))/scale; + a->w = 0.25f*scale; + } else { + if(guMtxRowCol(m,0,0)>guMtxRowCol(m,1,1) && guMtxRowCol(m,0,0)>guMtxRowCol(m,2,2)) { + const f32 scale = sqrtf(1.0f + guMtxRowCol(m,0,0) + guMtxRowCol(m,1,1) + guMtxRowCol(m,2,2))*2.0f; + + a->x = 0.25f*scale; + a->y = (guMtxRowCol(m,0,1) + guMtxRowCol(m,1,0))/scale; + a->z = (guMtxRowCol(m,2,0) + guMtxRowCol(m,0,2))/scale; + a->w = (guMtxRowCol(m,2,1) - guMtxRowCol(m,1,2))/scale; + } else if(guMtxRowCol(m,1,1)>guMtxRowCol(m,2,2)) { + const f32 scale = sqrtf(1.0f + guMtxRowCol(m,0,0) + guMtxRowCol(m,1,1) + guMtxRowCol(m,2,2))*2.0f; + + a->x = (guMtxRowCol(m,0,1) + guMtxRowCol(m,1,0))/scale; + a->y = 0.25f*scale; + a->z = (guMtxRowCol(m,1,2) + guMtxRowCol(m,2,1))/scale; + a->w = (guMtxRowCol(m,0,2) - guMtxRowCol(m,2,0))/scale; + } else { + const f32 scale = sqrtf(1.0f + guMtxRowCol(m,0,0) + guMtxRowCol(m,1,1) + guMtxRowCol(m,2,2))*2.0f; + + a->x = (guMtxRowCol(m,0,2) + guMtxRowCol(m,2,0))/scale; + a->y = (guMtxRowCol(m,1,2) + guMtxRowCol(m,2,1))/scale; + a->z = 0.25f*scale; + a->w = (guMtxRowCol(m,1,0) - guMtxRowCol(m,0,1))/scale; + } + } + c_guQuatNormalize(a,a); +} + +void c_guMtxQuat(Mtx m,guQuaternion *a) +{ + guMtxRowCol(m,0,0) = 1.0f - 2.0f*a->y*a->y - 2.0f*a->z*a->z; + guMtxRowCol(m,1,0) = 2.0f*a->x*a->y - 2.0f*a->z*a->w; + guMtxRowCol(m,2,0) = 2.0f*a->x*a->z + 2.0f*a->y*a->w; + + guMtxRowCol(m,0,1) = 2.0f*a->x*a->y + 2.0f*a->z*a->w; + guMtxRowCol(m,1,1) = 1.0f - 2.0f*a->x*a->x - 2.0f*a->z*a->z; + guMtxRowCol(m,2,1) = 2.0f*a->z*a->y - 2.0f*a->x*a->w; + + guMtxRowCol(m,0,2) = 2.0f*a->x*a->z - 2.0f*a->y*a->w; + guMtxRowCol(m,1,2) = 2.0f*a->z*a->y + 2.0f*a->x*a->w; + guMtxRowCol(m,2,2) = 1.0f - 2.0f*a->x*a->x - 2.0f*a->y*a->y; +} + +void guVecHalfAngle(guVector *a,guVector *b,guVector *half) +{ + guVector tmp1,tmp2,tmp3; + + tmp1.x = -a->x; + tmp1.y = -a->y; + tmp1.z = -a->z; + + tmp2.x = -b->x; + tmp2.y = -b->y; + tmp2.z = -b->z; + + guVecNormalize(&tmp1); + guVecNormalize(&tmp2); + + guVecAdd(&tmp1,&tmp2,&tmp3); + if(guVecDotProduct(&tmp3,&tmp3)>0.0f) guVecNormalize(&tmp3); + + *half = tmp3; +} diff --git a/wii/libogc/libogc/gu_psasm.S b/wii/libogc/libogc/gu_psasm.S new file mode 100644 index 0000000000..485499c29d --- /dev/null +++ b/wii/libogc/libogc/gu_psasm.S @@ -0,0 +1,723 @@ +#include + +#define A00_A01 fr0 +#define A02_A03 fr1 +#define A10_A11 fr2 +#define A12_A13 fr3 +#define A20_A21 fr4 +#define A22_A23 fr5 + +#define B00_B01 fr6 +#define B02_B03 fr7 +#define B10_B11 fr8 +#define B12_B13 fr9 +#define B20_B21 fr10 +#define B22_B23 fr11 + +#define D00_D01 fr12 +#define D02_D03 fr13 +#define D10_D11 fr14 +#define D12_D13 fr15 +#define D20_D21 fr2 +#define D22_D23 fr0 + +#define UNIT01 fr31 + +#define RET_REG fr1 +#define V1_XY fr2 +#define V1_Z fr3 +#define V2_XY fr4 +#define V2_Z fr5 +#define D1_XY fr6 +#define D1_Z fr7 +#define D2_XY fr8 +#define D2_Z fr9 +#define W1_XY fr10 +#define W1_Z fr11 +#define W2_XY fr12 +#define W2_Z fr13 + + .globl ps_guMtxConcat + //r3 = mtxA, r4 = mtxB, r5 = mtxAB +ps_guMtxConcat: + stwu r1,-64(r1) + psq_l A00_A01,0(r3),0,0 + stfd fr14,8(r1) + psq_l B00_B01,0(r4),0,0 + psq_l B02_B03,8(r4),0,0 + stfd fr15,16(r1) + stfd fr31,40(r1) + psq_l B10_B11,16(r4),0,0 + ps_muls0 D00_D01,B00_B01,A00_A01 + psq_l A10_A11,16(r3),0,0 + ps_muls0 D02_D03,B02_B03,A00_A01 + psq_l UNIT01,Unit01@sdarel(r13),0,0 + ps_muls0 D10_D11,B00_B01,A10_A11 + psq_l B12_B13,24(r4),0,0 + ps_muls0 D12_D13,B02_B03,A10_A11 + psq_l A02_A03,8(r3),0,0 + ps_madds1 D00_D01,B10_B11,A00_A01,D00_D01 + psq_l A12_A13,24(r3),0,0 + ps_madds1 D10_D11,B10_B11,A10_A11,D10_D11 + psq_l B20_B21,32(r4),0,0 + ps_madds1 D02_D03,B12_B13,A00_A01,D02_D03 + psq_l B22_B23,40(r4),0,0 + ps_madds1 D12_D13,B12_B13,A10_A11,D12_D13 + psq_l A20_A21,32(r3),0,0 + psq_l A22_A23,40(r3),0,0 + ps_madds0 D00_D01,B20_B21,A02_A03,D00_D01 + ps_madds0 D02_D03,B22_B23,A02_A03,D02_D03 + ps_madds0 D10_D11,B20_B21,A12_A13,D10_D11 + ps_madds0 D12_D13,B22_B23,A12_A13,D12_D13 + psq_st D00_D01,0(r5),0,0 + ps_muls0 D20_D21,B00_B01,A20_A21 + ps_madds1 D02_D03,UNIT01,A02_A03,D02_D03 + ps_muls0 D22_D23,B02_B03,A20_A21 + psq_st D10_D11,16(r5),0,0 + ps_madds1 D12_D13,UNIT01,A12_A13,D12_D13 + psq_st D02_D03,8(r5),0,0 + ps_madds1 D20_D21,B10_B11,A20_A21,D20_D21 + ps_madds1 D22_D23,B12_B13,A20_A21,D22_D23 + ps_madds0 D20_D21,B20_B21,A22_A23,D20_D21 + lfd fr14,8(r1) + psq_st D12_D13,24(r5),0,0 + ps_madds0 D22_D23,B22_B23,A22_A23,D22_D23 + psq_st D20_D21,32(r5),0,0 + ps_madds1 D22_D23,UNIT01,A22_A23,D22_D23 + lfd fr15,16(r1) + psq_st D22_D23,40(r5),0,0 + lfd fr31,40(r1) + addi r1,r1,64 + blr + + .globl ps_guMtxIdentity + //r3 == mtx +ps_guMtxIdentity: + lfs fr0,Unit01@sdarel(r13) + lfs fr1,Unit01+4@sdarel(r13) + psq_st fr0,8(r3),0,0 + ps_merge01 fr2,fr0,fr1 + psq_st fr0,24(r3),0,0 + ps_merge10 fr3,fr1,fr0 + psq_st fr0,32(r3),0,0 + psq_st fr2,16(r3),0,0 + psq_st fr3,0(r3),0,0 + psq_st fr3,40(r3),0,0 + blr + + .globl ps_guMtxCopy + //r3 = src, r4 = dst +ps_guMtxCopy: + psq_l fr0,0(r3),0,0 + psq_st fr0,0(r4),0,0 + psq_l fr1,8(r3),0,0 + psq_st fr1,8(r4),0,0 + psq_l fr2,16(r3),0,0 + psq_st fr2,16(r4),0,0 + psq_l fr3,24(r3),0,0 + psq_st fr3,24(r4),0,0 + psq_l fr4,32(r3),0,0 + psq_st fr4,32(r4),0,0 + psq_l fr5,40(r3),0,0 + psq_st fr5,40(r4),0,0 + blr + + .globl ps_guMtxTranspose + //r3 = src, r4 = xpose +ps_guMtxTranspose: + lfs fr0,Unit01@sdarel(r13) + psq_l fr1,0(r3),0,0 + stfs fr0,44(r4) + psq_l fr2,16(r3),0,0 + ps_merge00 fr5,fr1,fr2 + psq_l fr3,8(r3),1,0 + ps_merge11 fr6,fr1,fr2 + psq_l fr4,24(r3),1,0 + psq_st fr5,0(r4),0,0 + psq_l fr1,32(r3),0,0 + ps_merge00 fr7,fr3,fr4 + psq_st fr6,16(r4),0,0 + ps_merge00 fr5,fr1,fr0 + psq_st fr7,32(r4),0,0 + ps_merge10 fr6,fr1,fr0 + psq_st fr5,8(r4),0,0 + lfs fr3,40(r3) + psq_st fr6,24(r4),0,0 + stfs fr3,40(r4) + blr + + .globl ps_guMtxInverse + //r3 = src, r4 = inv +ps_guMtxInverse: + psq_l fr0,0(r3),1,0 + psq_l fr1,4(r3),0,0 + psq_l fr2,16(r3),1,0 + ps_merge10 fr6,fr1,fr0 + psq_l fr3,20(r3),0,0 + psq_l fr4,32(r3),1,0 + ps_merge10 fr7,fr3,fr2 + psq_l fr5,36(r3),0,0 + ps_mul fr11,fr3,fr6 + ps_mul fr13,fr5,fr7 + ps_merge10 fr8,fr5,fr4 + ps_msub fr11,fr1,fr7,fr11 + ps_mul fr12,fr1,fr8 + ps_msub fr13,fr3,fr8,fr13 + ps_mul fr10,fr3,fr4 + ps_msub fr12,fr5,fr6,fr12 + ps_mul fr9,fr0,fr5 + ps_mul fr8,fr1,fr2 + ps_sub fr6,fr6,fr6 + ps_msub fr10,fr2,fr5,fr10 + ps_mul fr7,fr0,fr13 + ps_msub fr9,fr1,fr4,fr9 + ps_madd fr7,fr2,fr12,fr7 + ps_msub fr8,fr0,fr3,fr8 + ps_madd fr7,fr4,fr11,fr7 + ps_cmpo0 cr0,fr7,fr6 + bne 0f + li r3,0 + blr + +0: fres fr0,fr7 + ps_add fr6,fr0,fr0 + ps_mul fr5,fr0,fr0 + ps_nmsub fr0,fr7,fr5,fr6 + lfs fr1,12(r3) + ps_muls0 fr13,fr13,fr0 + lfs fr2,28(r3) + ps_muls0 fr12,fr12,fr0 + lfs fr3,44(r3) + ps_muls0 fr11,fr11,fr0 + ps_merge00 fr5,fr13,fr12 + ps_muls0 fr10,fr10,fr0 + ps_merge11 fr4,fr13,fr12 + ps_muls0 fr9,fr9,fr0 + psq_st fr5,0(r4),0,0 + ps_mul fr6,fr13,fr1 + psq_st fr4,16(r4),0,0 + ps_muls0 fr8,fr8,fr0 + ps_madd fr6,fr12,fr2,fr6 + psq_st fr10,32(r4),1,0 + ps_nmadd fr6,fr11,fr3,fr6 + psq_st fr9,36(r4),1,0 + ps_mul fr7,fr10,fr1 + ps_merge00 fr5,fr11,fr6 + psq_st fr8,40(r4),1,0 + ps_merge11 fr4,fr11,fr6 + psq_st fr5,8(r4),0,0 + ps_madd fr7,fr9,fr2,fr7 + psq_st fr4,24(r4),0,0 + ps_nmadd fr7,fr8,fr3,fr7 + li r3,1 + psq_st fr7,44(r4),1,0 + blr + + .globl ps_guMtxInvXpose + //r3 = src, r4 = invx +ps_guMtxInvXpose: + psq_l fr0, 0(r3), 1, 0 + psq_l fr1, 4(r3), 0, 0 + psq_l fr2, 16(r3), 1, 0 + ps_merge10 fr6, fr1, fr0 + psq_l fr3, 20(r3), 0, 0 + psq_l fr4, 32(r3), 1, 0 + ps_merge10 fr7, fr3, fr2 + psq_l fr5, 36(r3), 0, 0 + ps_mul fr11, fr3, fr6 + ps_merge10 fr8, fr5, fr4 + ps_mul fr13, fr5, fr7 + ps_msub fr11, fr1, fr7, fr11 + ps_mul fr12, fr1, fr8 + ps_msub fr13, fr3, fr8, fr13 + ps_msub fr12, fr5, fr6, fr12 + ps_mul fr10, fr3, fr4 + ps_mul fr9, fr0, fr5 + ps_mul fr8, fr1, fr2 + ps_msub fr10, fr2, fr5, fr10 + ps_msub fr9, fr1, fr4, fr9 + ps_msub fr8, fr0, fr3, fr8 + ps_mul fr7, fr0, fr13 + ps_sub fr1, fr1, fr1 + ps_madd fr7, fr2, fr12, fr7 + ps_madd fr7, fr4, fr11, fr7 + ps_cmpo0 cr0, fr7, fr1 + bne 0f + addi r3, 0, 0 + blr + +0: fres fr0, fr7 + psq_st fr1, 12(r4), 1, 0 + ps_add fr6, fr0, fr0 + ps_mul fr5, fr0, fr0 + psq_st fr1, 28(r4), 1, 0 + ps_nmsub fr0, fr7, fr5, fr6 + psq_st fr1, 44(r4), 1, 0 + ps_muls0 fr13, fr13, fr0 + ps_muls0 fr12, fr12, fr0 + ps_muls0 fr11, fr11, fr0 + psq_st fr13, 0(r4), 0, 0 + psq_st fr12, 16(r4), 0, 0 + ps_muls0 fr10, fr10, fr0 + ps_muls0 fr9, fr9, fr0 + psq_st fr11, 32(r4), 0, 0 + psq_st fr10, 8(r4), 1, 0 + ps_muls0 fr8, fr8, fr0 + addi r3, 0, 1 + psq_st fr9, 24(r4), 1, 0 + psq_st fr8, 40(r4), 1, 0 + blr + + .globl ps_guMtxScale + //r3 = mtx,fr1 = xS,fr2 = yS,fr3 = zS +ps_guMtxScale: + lfs fr0,Unit01@sdarel(r13) + stfs fr1,0(r3) + psq_st fr0,4(r3),0,0 + psq_st fr0,12(r3),0,0 + stfs fr2,20(r3) + psq_st fr0,24(r3),0,0 + psq_st fr0,32(r3),0,0 + stfs fr3,40(r3) + stfs fr0,44(r3) + blr + + .globl ps_guMtxScaleApply + //r3 = src,r4 = dst,fr1 = xS,fr2 = yS,fr3 = zS +ps_guMtxScaleApply: + frsp fr1,fr1 + psq_l fr4,0(r3),0,0 + frsp fr2,fr2 + psq_l fr5,8(r3),0,0 + frsp fr3,fr3 + ps_muls0 fr4,fr4,fr1 + psq_l fr6,16(r3),0,0 + ps_muls0 fr5,fr5,fr1 + psq_l fr7,24(r3),0,0 + ps_muls0 fr6,fr6,fr2 + psq_l fr8,32(r3),0,0 + psq_st fr4,0(r4),0,0 + ps_muls0 fr7,fr7,fr2 + psq_l fr2,40(r3),0,0 + psq_st fr5,8(r4),0,0 + ps_muls0 fr8,fr8,fr3 + psq_st fr6,16(r4),0,0 + ps_muls0 fr2,fr2,fr3 + psq_st fr7,24(r4),0,0 + psq_st fr8,32(r4),0,0 + psq_st fr2,40(r4),0,0 + blr + + .globl ps_guMtxApplyScale + //r3 = src,r4 = dst,fr1 = xS,fr2 = yS,fr3 = zS +ps_guMtxApplyScale: + lfs fr6,Unit01+4@sdarel(r13) + frsp fr1,fr1 + psq_l fr4,0(r3),0,0 + frsp fr2,fr2 + psq_l fr5,8(r3),0,0 + frsp fr3,fr3 + ps_merge00 fr10,fr1,fr2 + ps_merge00 fr11,fr3,fr6 + ps_mul fr4,fr4,fr10 + psq_l fr6,16(r3),0,0 + ps_mul fr5,fr5,fr11 + psq_l fr7,24(r3),0,0 + ps_mul fr6,fr6,fr10 + psq_l fr8,32(r3),0,0 + psq_st fr4,0(r4),0,0 + ps_mul fr7,fr7,fr11 + psq_l fr2,40(r3),0,0 + psq_st fr5,8(r4),0,0 + ps_mul fr8,fr8,fr10 + psq_st fr6,16(r4),0,0 + ps_mul fr2,fr2,fr11 + psq_st fr7,24(r4),0,0 + psq_st fr8,32(r4),0,0 + psq_st fr2,40(r4),0,0 + blr + + .globl ps_guMtxTrans + //r3 = mtx,fr1 = xT,fr2 = yT,fr3 = zT +ps_guMtxTrans: + lfs fr4,Unit01@sdarel(r13) + lfs fr5,Unit01+4@sdarel(r13) + stfs fr4,16(r3) + stfs fr1,12(r3) + stfs fr2,28(r3) + psq_st fr4,4(r3),0,0 + psq_st fr4,32(r3),0,0 + stfs fr5,20(r3) + stfs fr4,24(r3) + stfs fr5,40(r3) + stfs fr3,44(r3) + stfs fr5,0(r3) + blr + + .globl ps_guMtxTransApply + //r3 = src,r4 = dst,fr1 = xT,fr2 = yT,fr3 = zT +ps_guMtxTransApply: + psq_l fr4,0(r3),0,0 + frsp fr1,fr1 + psq_l fr5,8(r3),0,0 + frsp fr2,fr2 + psq_l fr7,24(r3),0,0 + frsp fr3,fr3 + psq_l fr8,40(r3),0,0 + ps_sum1 fr5,fr1,fr5,fr5 + psq_l fr6,16(r3),0,0 + ps_sum1 fr7,fr2,fr7,fr7 + psq_l fr9,32(r3),0,0 + ps_sum1 fr8,fr3,fr8,fr8 + psq_st fr4,0(r4),0,0 + psq_st fr5,8(r4),0,0 + psq_st fr6,16(r4),0,0 + psq_st fr7,24(r4),0,0 + psq_st fr9,32(r4),0,0 + psq_st fr8,40(r4),0,0 + blr + + .globl ps_guMtxApplyTrans + //r3 = src,r4 = dst,fr1 = xT,fr2 = yT,fr3 = zT +ps_guMtxApplyTrans: + lfs fr6,Unit01+4@sdarel(r13) + psq_l fr4,0(r3),0,0 + frsp fr1,fr1 + psq_l fr5,8(r3),0,0 + frsp fr2,fr2 + ps_merge00 fr10,fr1,fr2 + psq_l fr7,24(r3),0,0 + frsp fr3,fr3 + ps_mul fr1,fr4,fr10 + ps_merge00 fr11,fr3,fr6 + psq_l fr8,40(r3),0,0 + ps_madd fr2,fr5,fr11,fr1 + psq_l fr6,16(r3),0,0 + ps_sum0 fr3,fr2,fr3,fr2 + psq_l fr9,32(r3),0,0 + ps_mul fr12,fr6,fr10 + psq_st fr4,0(r4),0,0 + ps_madd fr4,fr7,fr11,fr12 + psq_st fr5,8(r4),1,0 + ps_sum0 fr12,fr4,fr12,fr4 + psq_st fr3,12(r4),1,0 + ps_mul fr3,fr9,fr10 + psq_st fr6,16(r4),0,0 + ps_madd fr2,fr8,fr11,fr3 + psq_st fr7,24(r4),1,0 + ps_sum0 fr3,fr2,fr3,fr2 + psq_st fr12,28(r4),1,0 + psq_st fr9,32(r4),0,0 + psq_st fr8,40(r4),1,0 + psq_st fr3,44(r4),1,0 + blr + + .globl ps_guMtxRotTrig + //r3 = mt,r4 = axis,fr1 = sinA,fr2 = cosA +ps_guMtxRotTrig: + frsp fr1,fr1 + lfs fr3,Unit01@sdarel(r13) + frsp fr2,fr2 + lfs fr4,Unit01+4@sdarel(r13) + ori r4,r4,0x20 + ps_neg fr5,fr1 + cmplwi r4,'x' + beq 0f + cmplwi r4,'y' + beq 1f + cmplwi r4,'z' + beq 2f + b 3f +0: + psq_st fr4,0(r3),1,0 + psq_st fr3,4(r3),0,0 + ps_merge00 fr6,fr1,fr2 + psq_st fr3,12(r3),0,0 + ps_merge00 fr7,fr2,fr5 + psq_st fr3,28(r3),0,0 + psq_st fr3,44(r3),1,0 + psq_st fr6,36(r3),0,0 + psq_st fr7,20(r3),0,0 + b 3f +1: + ps_merge00 fr6,fr2,fr3 + ps_merge00 fr7,fr3,fr4 + psq_st fr3,24(r3),0,0 + psq_st fr6,0(r3),0,0 + ps_merge00 fr8,fr5,fr3 + ps_merge00 fr9,fr1,fr3 + psq_st fr6,40(r3),0,0 + psq_st fr7,16(r3),0,0 + psq_st fr9,8(r3),0,0 + psq_st fr8,32(r3),0,0 + b 3f +2: + psq_st fr3,8(r3),0,0 + ps_merge00 fr6,fr1,fr2 + ps_merge00 fr8,fr2,fr5 + psq_st fr3,24(r3),0,0 + psq_st fr3,32(r3),0,0 + ps_merge00 fr7,fr4,fr3 + psq_st fr6,16(r3),0,0 + psq_st fr8,0(r3),0,0 + psq_st fr7,40(r3),0,0 +3: + blr + + .globl __ps_guMtxRotAxisRadInternal + //r3 = mtx, r4 = vec, fr1 = sT, fr2 = cT +__ps_guMtxRotAxisRadInternal: + stwu r1,-64(r1) + frsp fr2,fr2 + psq_l fr3,0(r4),0,0 + frsp fr1,fr1 + stfd fr14,8(r1) + lfs fr11,NrmData+4@sdarel(r13) + lfs fr12,NrmData@sdarel(r13) + ps_mul fr5,fr3,fr3 + lfs fr4,8(r4) + fadds fr10,fr12,fr12 + ps_madd fr6,fr4,fr4,fr5 + fsubs fr14,fr12,fr12 + ps_sum0 fr7,fr6,fr4,fr5 + fsubs fr13,fr10,fr2 + frsqrte fr8,fr7 + fmuls fr5,fr8,fr8 + fmuls fr6,fr8,fr12 + fnmsubs fr5,fr5,fr7,fr11 + fmuls fr8,fr5,fr6 + ps_merge00 fr2,fr2,fr2 + ps_muls0 fr3,fr3,fr8 + ps_muls0 fr4,fr4,fr8 + ps_muls0 fr7,fr3,fr13 + ps_muls0 fr12,fr3,fr1 + ps_muls0 fr8,fr4,fr13 + ps_muls1 fr6,fr7,fr3 + ps_muls0 fr5,fr7,fr3 + ps_muls0 fr7,fr7,fr4 + fnmsubs fr9,fr4,fr1,fr6 + fmadds fr10,fr4,fr1,fr6 + ps_neg fr3,fr12 + ps_sum0 fr11,fr7,fr14,fr12 + ps_sum0 fr5,fr5,fr9,fr2 + ps_sum1 fr6,fr2,fr10,fr6 + ps_sum0 fr9,fr3,fr14,fr7 + psq_st fr11,8(r3),0,0 + ps_sum0 fr3,fr7,fr7,fr3 + psq_st fr5,0(r3),0,0 + ps_muls0 fr8,fr8,fr4 + psq_st fr6,16(r3),0,0 + ps_sum1 fr7,fr12,fr3,fr7 + psq_st fr9,24(r3),0,0 + ps_sum0 fr8,fr8,fr14,fr2 + psq_st fr7,32(r3),0,0 + psq_st fr8,40(r3),0,0 + lfd fr14,8(r1) + addi r1,r1,64 + blr + + .globl ps_guMtxReflect + //r3 = mtx,r4 = vec1,r5 = vec2 +ps_guMtxReflect: + lfs fr0,Unit01+4@sdarel(r13) + psq_l fr1,8(r5),1,0 + psq_l fr2,0(r5),0,0 + psq_l fr3,0(r4),0,0 + ps_nmadd fr5,fr1,fr0,fr1 + psq_l fr4,8(r4),1,0 + ps_nmadd fr6,fr2,fr0,fr2 + ps_muls0 fr7,fr2,fr5 + ps_mul fr8,fr6,fr3 + ps_muls0 fr9,fr2,fr6 + ps_sum0 fr8,fr8,fr8,fr8 + ps_muls1 fr10,fr2,fr6 + psq_st fr7,32(r3),0,0 + ps_sum0 fr2,fr2,fr2,fr0 + ps_nmadd fr8,fr5,fr4,fr8 + ps_sum1 fr10,fr0,fr10,fr10 + psq_st fr9,0(r3),0,0 + ps_muls0 fr11,fr2,fr8 + ps_merge00 fr12,fr5,fr8 + psq_st fr10,16(r3),0,0 + ps_merge00 fr13,fr7,fr11 + ps_muls0 fr12,fr12,fr1 + ps_merge11 fr11,fr7,fr11 + psq_st fr13,8(r3),0,0 + ps_sum0 fr12,fr12,fr12,fr0 + psq_st fr11,24(r3),0,0 + psq_st fr12,40(r3),0,0 + blr + + .globl ps_guVecAdd + //r3 = v1,r4 = v2,r5 = dst +ps_guVecAdd: + psq_l V1_XY,0(r3),0,0 + psq_l V2_XY,0(r4),0,0 + ps_add D1_XY,V1_XY,V2_XY + psq_st D1_XY,0(r5),0,0 + psq_l V1_Z,8(r3),1,0 + psq_l V2_Z,8(r4),1,0 + ps_add D1_Z,V1_Z,V2_Z + psq_st D1_Z,8(r5),1,0 + blr + + .globl ps_guVecSub + //r3 = v1,r4 = v2,r5 = dst +ps_guVecSub: + psq_l V1_XY,0(r3),0,0 + psq_l V2_XY,0(r4),0,0 + ps_sub D1_XY,V1_XY,V2_XY + psq_st D1_XY,0(r5),0,0 + psq_l V1_Z,8(r3),1,0 + psq_l V2_Z,8(r4),1,0 + ps_sub D1_Z,V1_Z,V2_Z + psq_st D1_Z,8(r5),1,0 + blr + + .globl ps_guVecScale + //r3 = src,r4 = dst,fr1 = S +ps_guVecScale: + psq_l fr2,0(r3),0,0 + psq_l fr3,8(r3),1,0 + ps_muls0 fr4,fr2,fr1 + psq_st fr4,0(r4),0,0 + ps_muls0 fr4,fr3,fr1 + psq_st fr4,8(r4),1,0 + blr + + .globl ps_guVecNormalize + //r3 = v +ps_guVecNormalize: + lfs fr0,NrmData@sdarel(r13) + lfs fr1,NrmData+4@sdarel(r13) + psq_l fr2,0(r3),0,0 + ps_mul fr4,fr2,fr2 + psq_l fr3,8(r3),1,0 + ps_madd fr5,fr3,fr3,fr4 + ps_sum0 fr6,fr5,fr3,fr4 + frsqrte fr7,fr6 + fmuls fr8,fr7,fr7 + fmuls fr9,fr7,fr0 + fnmsubs fr8,fr8,fr6,fr1 + fmuls fr7,fr8,fr9 + ps_muls0 fr2,fr2,fr7 + psq_st fr2,0(r3),0,0 + ps_muls0 fr3,fr3,fr7 + psq_st fr3,8(r3),1,0 + blr + + .globl ps_guVecCross + //r3 = v1,r4 = v2,r5 = v12 +ps_guVecCross: + psq_l fr1,0(r4),0,0 + lfs fr2,8(r3) + psq_l fr0,0(r3),0,0 + ps_merge10 fr6,fr1,fr1 + lfs fr3,8(r4) + ps_mul fr4,fr1,fr2 + ps_muls0 fr7,fr1,fr0 + ps_msub fr5,fr0,fr3,fr4 + ps_msub fr8,fr0,fr6,fr7 + ps_merge11 fr9,fr5,fr5 + ps_merge01 fr10,fr5,fr8 + psq_st fr9,0(r5),1,0 + ps_neg fr10,fr10 + psq_st fr10,4(r5),0,0 + blr + + .globl ps_guVecDotProduct + //r3 = vec1,r4 = vec2 +ps_guVecDotProduct: + psq_l fr2,4(r3),0,0 + psq_l fr3,4(r4),0,0 + ps_mul fr2,fr2,fr3 + psq_l fr5,0(r3),0,0 + psq_l fr4,0(r4),0,0 + ps_madd fr3,fr5,fr4,fr2 + ps_sum0 fr1,fr3,fr2,fr2 + blr + + .globl ps_guVecMultiply +ps_guVecMultiply: + psq_l fr0,0(r4),0,0 + psq_l fr2,0(r3),0,0 + psq_l fr1,8(r4),1,0 + ps_mul fr4,fr2,fr0 + psq_l fr3,8(r3),0,0 + ps_madd fr5,fr3,fr1,fr4 + psq_l fr8,16(r3),0,0 + ps_sum0 fr6,fr5,fr6,fr5 + psq_l fr9,24(r3),0,0 + ps_mul fr10,fr8,fr0 + psq_st fr6,0(r5),1,0 + ps_madd fr11,fr9,fr1,fr10 + psq_l fr2,32(r3),0,0 + ps_sum0 fr12,fr11,fr12,fr11 + psq_l fr3,40(r3),0,0 + ps_mul fr4,fr2,fr0 + psq_st fr12,4(r5),1,0 + ps_madd fr5,fr3,fr1,fr4 + ps_sum0 fr6,fr5,fr6,fr5 + psq_st fr6,8(r5),1,0 + blr + + .globl ps_guVecMultiplySR + // r3 = mt, r4 = src, r5 = dst +ps_guVecMultiplySR: + psq_l fr0,0(r3),0,0 // m[0][0], m[0][1] GQR0 = 0 + // fp6 - x y + psq_l fr6,0(r4),0,0 + psq_l fr2,16(r3),0,0 // m[1][0], m[1][1] + // fp8 = m00x m01y // next X + ps_mul fr8,fr0,fr6 + psq_l fr4,32(r3),0,0 // m[2][0], m[2][1] + // fp10 = m10x m11y // next Y + ps_mul fr10,fr2,fr6 + psq_l fr7,8(r4),1,0 // fp7 - z,1.0 + // fp12 = m20x m21y // next Z + ps_mul fr12,fr4,fr6 // YYY last FP6 usage + psq_l fr3,24(r3),0,0 // m[1][2], m[1][3] + ps_sum0 fr8,fr8,fr8,fr8 + psq_l fr5,40(r3),0,0 // m[2][2], m[2][3] + ps_sum0 fr10,fr10,fr10,fr10 + psq_l fr1,8(r3),0,0 // m[0][2], m[0][3] + ps_sum0 fr12,fr12,fr12,fr12 + ps_madd fr9,fr1,fr7,fr8 + psq_st fr9,0(r5),1,0 // store X + ps_madd fr11,fr3,fr7,fr10 + psq_st fr11,4(r5),1,0 // store Y + ps_madd fr13,fr5,fr7,fr12 + psq_st fr13,8(r5),1,0 // sore Z + blr + + .globl ps_quQuatScale + //r3 = q,r4 = r, fr1 = scale +ps_guQuatScale: + psq_l fr4,0(r3),0,0 + psq_l fr5,8(r3),0,0 + ps_muls0 fr4,fr4,fr1 + psq_st fr4,0(r4),0,0 + ps_muls0 fr5,fr5,fr1 + psq_st fr5,8(r4),0,0 + blr + + .globl ps_guQuatDotProduct + //r3 = p, r4 = q ; fr1 = res +ps_guQuatDotProduct: + psq_l fr2,0(r3),0,0 + psq_l fr4,0(r4),0,0 + ps_mul fr1,fr2,fr4 + psq_l fr3,8(r3),0,0 + psq_l fr5,8(r4),0,0 + ps_madd fr1,fr3,fr5,fr1 + ps_sum0 fr1,fr1,fr1,fr1 + blr + + .section .sdata + .balign 16 +Unit01: + .float 0.0, 1.0 +QuatEpsilon: + .float 0.00001 +NrmData: + .float 0.5, 3.0 diff --git a/wii/libogc/libogc/gx.c b/wii/libogc/libogc/gx.c new file mode 100644 index 0000000000..ff9b413e78 --- /dev/null +++ b/wii/libogc/libogc/gx.c @@ -0,0 +1,5099 @@ +#include +#include +#include +#include +#include "asm.h" +#include "processor.h" +#include "irq.h" +#include "lwp.h" +#include "system.h" +#include "video.h" +#include "video_types.h" +#include "lwp_watchdog.h" +#include "gx.h" +#include "gx_regdef.h" + +#define TEXCACHE_TESTING + + +#define GX_FINISH 2 + +#if defined(HW_DOL) + #define LARGE_NUMBER (-1048576.0f) +#elif defined(HW_RVL) + #define LARGE_NUMBER (-1.0e+18f) +#endif + +#define _SHIFTL(v, s, w) \ + ((u32) (((u32)(v) & ((0x01 << (w)) - 1)) << (s))) +#define _SHIFTR(v, s, w) \ + ((u32)(((u32)(v) >> (s)) & ((0x01 << (w)) - 1))) + +#define GX_LOAD_BP_REG(x) \ + do { \ + wgPipe->U8 = 0x61; \ + asm volatile ("" ::: "memory" ); \ + wgPipe->U32 = (u32)(x); \ + asm volatile ("" ::: "memory" ); \ + } while(0) + +#define GX_LOAD_CP_REG(x, y) \ + do { \ + wgPipe->U8 = 0x08; \ + asm volatile ("" ::: "memory" ); \ + wgPipe->U8 = (u8)(x); \ + asm volatile ("" ::: "memory" ); \ + wgPipe->U32 = (u32)(y); \ + asm volatile ("" ::: "memory" ); \ + } while(0) + +#define GX_LOAD_XF_REG(x, y) \ + do { \ + wgPipe->U8 = 0x10; \ + asm volatile ("" ::: "memory" ); \ + wgPipe->U32 = (u32)((x)&0xffff); \ + asm volatile ("" ::: "memory" ); \ + wgPipe->U32 = (u32)(y); \ + asm volatile ("" ::: "memory" ); \ + } while(0) + +#define GX_LOAD_XF_REGS(x, n) \ + do { \ + wgPipe->U8 = 0x10; \ + asm volatile ("" ::: "memory" ); \ + wgPipe->U32 = (u32)(((((n)&0xffff)-1)<<16)|((x)&0xffff)); \ + asm volatile ("" ::: "memory" ); \ + } while(0) + +#define XY(x, y) (((y) << 10) | (x)) + +#define GX_DEFAULT_BG {64,64,64,255} +#define BLACK {0,0,0,0} +#define WHITE {255,255,255,255} + +WGPipe* const wgPipe = (WGPipe*)0xCC008000; + +static GXFifoObj _gpfifo; +static GXFifoObj _cpufifo; +static GXFifoObj _gxfifoobj; +static GXFifoObj _gx_dl_fifoobj; +static GXFifoObj _gx_old_cpufifo; +static void *_gxcurrbp = NULL; +static lwp_t _gxcurrentlwp = LWP_THREAD_NULL; + +static u32 _gxcpufifoready = 0; +static u32 _gxgpfifoready = 0; +static u32 _cpgplinked = 0; +static u16 _gxgpstatus = 0; +static vu32 _gxoverflowsuspend = 0; +static vu32 _gxoverflowcount = 0; +static vu32 _gxfinished = 0; +static lwpq_t _gxwaitfinish; + +static GXBreakPtCallback breakPtCB = NULL; +static GXDrawDoneCallback drawDoneCB = NULL; +static GXDrawSyncCallback tokenCB = NULL; + +static GXTexRegionCallback regionCB = NULL; +static GXTlutRegionCallback tlut_regionCB = NULL; + +static vu32* const _piReg = (u32*)0xCC003000; +static vu16* const _cpReg = (u16*)0xCC000000; +static vu16* const _peReg = (u16*)0xCC001000; +static vu16* const _memReg = (u16*)0xCC004000; + +static u8 _gxtevcolid[9] = {0,1,0,1,0,1,7,5,6}; +static u8 _gxtexmode0ids[8] = {0x80,0x81,0x82,0x83,0xA0,0xA1,0xA2,0xA3}; +static u8 _gxtexmode1ids[8] = {0x84,0x85,0x86,0x87,0xA4,0xA5,0xA6,0xA7}; +static u8 _gxteximg0ids[8] = {0x88,0x89,0x8A,0x8B,0xA8,0xA9,0xAA,0xAB}; +static u8 _gxteximg1ids[8] = {0x8C,0x8D,0x8E,0x8F,0xAC,0xAD,0xAE,0xAF}; +static u8 _gxteximg2ids[8] = {0x90,0x91,0x92,0x93,0xB0,0xB1,0xB2,0xB3}; +static u8 _gxteximg3ids[8] = {0x94,0x95,0x96,0x97,0xB4,0xB5,0xB6,0xB7}; +static u8 _gxtextlutids[8] = {0x98,0x99,0x9A,0x9B,0xB8,0xB9,0xBA,0xBB}; + +#if defined(HW_RVL) +static u32 _gxtexregionaddrtable[48] = +{ + 0x00000000,0x00010000,0x00020000,0x00030000, + 0x00040000,0x00050000,0x00060000,0x00070000, + 0x00008000,0x00018000,0x00028000,0x00038000, + 0x00048000,0x00058000,0x00068000,0x00078000, + 0x00000000,0x00090000,0x00020000,0x000B0000, + 0x00040000,0x00098000,0x00060000,0x000B8000, + 0x00080000,0x00010000,0x000A0000,0x00030000, + 0x00088000,0x00050000,0x000A8000,0x00070000, + 0x00000000,0x00090000,0x00020000,0x000B0000, + 0x00040000,0x00090000,0x00060000,0x000B0000, + 0x00080000,0x00010000,0x000A0000,0x00030000, + 0x00080000,0x00050000,0x000A0000,0x00070000 +}; +#endif + + +extern u8 __gxregs[]; +static struct __gx_regdef *__gx = (struct __gx_regdef*)__gxregs; +static u8 _gx_saved_data[STRUCT_REGDEF_SIZE] ATTRIBUTE_ALIGN(32); + +static s32 __gx_onreset(s32 final); + +static sys_resetinfo __gx_resetinfo = { + {}, + __gx_onreset, + 127 +}; + +static __inline__ BOOL IsWriteGatherBufferEmpty() +{ + return !(mfwpar()&1); +} + +static __inline__ void DisableWriteGatherPipe() +{ + mthid2((mfhid2()&~0x40000000)); +} + +static __inline__ void EnableWriteGatherPipe() +{ + mtwpar(0x0C008000); + mthid2((mfhid2()|0x40000000)); +} + +static __inline__ void __GX_ResetWriteGatherPipe() +{ + while(mfwpar()&1); + mtwpar(0x0C008000); +} + +static __inline__ void __GX_FifoLink(u8 enable) +{ + __gx->cpCRreg = ((__gx->cpCRreg&~0x10)|(_SHIFTL(enable,4,1))); + _cpReg[1] = __gx->cpCRreg; +} + +static __inline__ void __GX_WriteFifoIntReset(u8 inthi,u8 intlo) +{ + __gx->cpCLreg = ((__gx->cpCLreg&~0x03)|(_SHIFTL(intlo,1,1))|(inthi&1)); + _cpReg[2] = __gx->cpCLreg; +} + +static __inline__ void __GX_WriteFifoIntEnable(u8 inthi, u8 intlo) +{ + __gx->cpCRreg = ((__gx->cpCRreg&~0x0C)|(_SHIFTL(intlo,3,1))|(_SHIFTL(inthi,2,1))); + _cpReg[1] = __gx->cpCRreg; +} + +static __inline__ void __GX_FifoReadEnable() +{ + __gx->cpCRreg = ((__gx->cpCRreg&~0x01)|1); + _cpReg[1] = __gx->cpCRreg; +} + +static __inline__ void __GX_FifoReadDisable() +{ + __gx->cpCRreg = ((__gx->cpCRreg&~0x01)|0); + _cpReg[1] = __gx->cpCRreg; +} + +static s32 __gx_onreset(s32 final) +{ + if(final==FALSE) { + GX_Flush(); + GX_AbortFrame(); + } + return 1; +} + +static u32 __GX_IsGPFifoReady() +{ + return _gxgpfifoready; +} + +static u32 __GX_CPGPLinkCheck() +{ + struct __gxfifo *gpfifo = (struct __gxfifo*)&_gpfifo; + struct __gxfifo *cpufifo = (struct __gxfifo*)&_cpufifo; + + if(!_gxcpufifoready || !_gxgpfifoready) return 0; + + if((cpufifo->buf_start==gpfifo->buf_start)&&(cpufifo->buf_end==gpfifo->buf_end)) return 1; + + return 0; +} + +static void __GX_InitRevBits() +{ + s32 i; + + i=0; + while(i<8) { + __gx->VAT0reg[i] = 0x40000000; + __gx->VAT1reg[i] = 0x80000000; + GX_LOAD_CP_REG((0x0080|i),__gx->VAT1reg[i]); + i++; + } + + GX_LOAD_XF_REG(0x1000,0x3f); + GX_LOAD_XF_REG(0x1012,0x01); + + GX_LOAD_BP_REG(0x5800000f); + +} + +static void __GX_WaitAbort(u32 delay) +{ + u64 start,end; + + start = gettime(); + while(1) { + end = gettime(); + if(diff_ticks(start,end)>=(u64)delay) break; + }; +} + +#ifdef HW_RVL +static u32 __GX_ReadMemCounterU32(u32 reg) +{ + u16 lcnt,ucnt,tmp; + + tmp = _memReg[reg]; + do { + ucnt = tmp; + lcnt = _memReg[reg+1]; + tmp = _memReg[reg]; + } while(tmp!=ucnt); + return (u32)((ucnt<<16)|lcnt); +} + +static void __GX_WaitAbortPixelEngine() +{ + u32 cnt,tmp; + + cnt = __GX_ReadMemCounterU32(39); + do { + tmp = cnt; + __GX_WaitAbort(8); + cnt = __GX_ReadMemCounterU32(39); + } while(cnt!=tmp); +} + +static void __GX_Abort() +{ + if(__gx->gxFifoInited && __GX_IsGPFifoReady()) + __GX_WaitAbortPixelEngine(); + + _piReg[6] = 1; + __GX_WaitAbort(50); + + _piReg[6] = 0; + __GX_WaitAbort(5); +} +#endif + +static void __GX_SaveFifo() +{ + s32 rdwt_dst; + u32 level,val; + struct __gxfifo *cpufifo = (struct __gxfifo*)&_cpufifo; + struct __gxfifo *gpfifo = (struct __gxfifo*)&_gpfifo; + + _CPU_ISR_Disable(level); + + if(_gxcpufifoready) { + val = _piReg[0x05]; + cpufifo->wt_ptr = (u32)MEM_PHYSICAL_TO_K0((val&0x1FFFFFE0)); + cpufifo->fifo_wrap = ((val&0x20000000)==0x20000000); + } + + if(_gxgpfifoready) { + gpfifo->rd_ptr = (u32)MEM_PHYSICAL_TO_K0(_SHIFTL(_cpReg[29],16,16)|(_cpReg[28]&0xffff)); + gpfifo->rdwt_dst = (_SHIFTL(_cpReg[25],16,16)|(_cpReg[24]&0xffff)); + } + + if(_cpgplinked) { + cpufifo->rd_ptr = gpfifo->rd_ptr; + cpufifo->rdwt_dst = gpfifo->rdwt_dst; + gpfifo->wt_ptr = cpufifo->wt_ptr; + } else if(_gxcpufifoready) { + rdwt_dst = (cpufifo->wt_ptr - cpufifo->rd_ptr); + if(rdwt_dst<0) cpufifo->rdwt_dst = (cpufifo->rdwt_dst + cpufifo->size); + else cpufifo->rdwt_dst = rdwt_dst; + } + + _CPU_ISR_Restore(level); +} + +static void __GX_CleanGPFifo() +{ + u32 level; + struct __gxfifo *gpfifo = (struct __gxfifo*)&_gpfifo; + struct __gxfifo *cpufifo = (struct __gxfifo*)&_cpufifo; + + if(!_gxgpfifoready) return; + + _CPU_ISR_Disable(level); + __GX_FifoReadDisable(); + __GX_WriteFifoIntEnable(FALSE,FALSE); + + gpfifo->rd_ptr = gpfifo->wt_ptr; + gpfifo->rdwt_dst = 0; + + /* setup rd<->wd dist */ + _cpReg[24] = _SHIFTL(gpfifo->rdwt_dst,0,16); + _cpReg[25] = _SHIFTR(gpfifo->rdwt_dst,16,16); + + /* setup wt ptr */ + _cpReg[26] = _SHIFTL(MEM_VIRTUAL_TO_PHYSICAL(gpfifo->wt_ptr),0,16); + _cpReg[27] = _SHIFTR(MEM_VIRTUAL_TO_PHYSICAL(gpfifo->wt_ptr),16,16); + + /* setup rd ptr */ + _cpReg[28] = _SHIFTL(MEM_VIRTUAL_TO_PHYSICAL(gpfifo->rd_ptr),0,16); + _cpReg[29] = _SHIFTR(MEM_VIRTUAL_TO_PHYSICAL(gpfifo->rd_ptr),16,16); + ppcsync(); + + if(_cpgplinked) { + cpufifo->rd_ptr = gpfifo->rd_ptr; + cpufifo->wt_ptr = gpfifo->wt_ptr; + cpufifo->rdwt_dst = gpfifo->rdwt_dst; + + _piReg[5] = (cpufifo->wt_ptr&0x1FFFFFE0); + __GX_WriteFifoIntEnable(TRUE,FALSE); + __GX_FifoLink(TRUE); + } + __gx->cpCRreg &= ~0x22; + _cpReg[1] = __gx->cpCRreg; + breakPtCB = NULL; + + __GX_WriteFifoIntReset(TRUE,TRUE); + __GX_FifoReadEnable(); + _CPU_ISR_Restore(level); +} + +static void __GXOverflowHandler() +{ + if(!_gxoverflowsuspend) { + _gxoverflowsuspend = 1; + _gxoverflowcount++; + __GX_WriteFifoIntEnable(GX_DISABLE,GX_ENABLE); + __GX_WriteFifoIntReset(GX_TRUE,GX_FALSE); + LWP_SuspendThread(_gxcurrentlwp); + } +} + +static void __GXUnderflowHandler() +{ + if(_gxoverflowsuspend) { + _gxoverflowsuspend = 0; + LWP_ResumeThread(_gxcurrentlwp); + __GX_WriteFifoIntReset(GX_TRUE,GX_TRUE); + __GX_WriteFifoIntEnable(GX_ENABLE,GX_DISABLE); + } +} + +static void __GXCPInterruptHandler(u32 irq,void *ctx) +{ + __gx->cpSRreg = _cpReg[0]; + + if((__gx->cpCRreg&0x08) && (__gx->cpSRreg&0x02)) + __GXUnderflowHandler(); + + if((__gx->cpCRreg&0x04) && (__gx->cpSRreg&0x01)) + __GXOverflowHandler(); + + if((__gx->cpCRreg&0x20) && (__gx->cpSRreg&0x10)) { + __gx->cpCRreg &= ~0x20; + _cpReg[1] = __gx->cpCRreg; + if(breakPtCB) + breakPtCB(); + } +} + +static void __GXTokenInterruptHandler(u32 irq,void *ctx) +{ + u16 token = _peReg[7]; + + if(tokenCB) + tokenCB(token); + + _peReg[5] = (_peReg[5]&~0x04)|0x04; +} + +static void __GXFinishInterruptHandler(u32 irq,void *ctx) +{ + _peReg[5] = (_peReg[5]&~0x08)|0x08; + _gxfinished = 1; + + if(drawDoneCB) + drawDoneCB(); + + LWP_ThreadBroadcast(_gxwaitfinish); +} + +static void __GX_PEInit() +{ + IRQ_Request(IRQ_PI_PETOKEN,__GXTokenInterruptHandler,NULL); + __UnmaskIrq(IRQMASK(IRQ_PI_PETOKEN)); + + IRQ_Request(IRQ_PI_PEFINISH,__GXFinishInterruptHandler,NULL); + __UnmaskIrq(IRQMASK(IRQ_PI_PEFINISH)); + + _peReg[5] = 0x0F; +} + +static void __GX_FifoInit() +{ + IRQ_Request(IRQ_PI_CP,__GXCPInterruptHandler,NULL); + __UnmaskIrq(IRQMASK(IRQ_PI_CP)); + + memset(&_cpufifo,0,sizeof(GXFifoObj)); + memset(&_gpfifo,0,sizeof(GXFifoObj)); + + _gxcpufifoready = 0; + _gxgpfifoready = 0; + _cpgplinked = 0; + _gxoverflowsuspend = 0; + _gxcurrentlwp = LWP_GetSelf(); +} + +static void __GX_SetTmemConfig(u8 nr) +{ + if(nr==0) { + // Set_TextureImage0-3, GXTexMapID=0-3 tmem_offset=00000000, cache_width=32 kb, cache_height=32 kb, image_type=cached + GX_LOAD_BP_REG(0x8c0d8000); + GX_LOAD_BP_REG(0x900dc000); + GX_LOAD_BP_REG(0x8d0d8400); + GX_LOAD_BP_REG(0x910dc400); + GX_LOAD_BP_REG(0x8e0d8800); + GX_LOAD_BP_REG(0x920dc800); + GX_LOAD_BP_REG(0x8f0d8c00); + GX_LOAD_BP_REG(0x930dcc00); + + // Set_TextureImage0-3, GXTexMapID=4-7 tmem_offset=00010000, cache_width=32 kb, cache_height=32 kb, image_type=cached + GX_LOAD_BP_REG(0xac0d9000); + GX_LOAD_BP_REG(0xb00dd000); + GX_LOAD_BP_REG(0xad0d9400); + GX_LOAD_BP_REG(0xb10dd400); + GX_LOAD_BP_REG(0xae0d9800); + GX_LOAD_BP_REG(0xb20dd800); + GX_LOAD_BP_REG(0xaf0d9c00); + GX_LOAD_BP_REG(0xb30ddc00); + + return; + } + + if(nr==1) { + // Set_TextureImage0-3, GXTexMapID=0-3 tmem_offset=00000000, cache_width=32 kb, cache_height=32 kb, image_type=cached + GX_LOAD_BP_REG(0x8c0d8000); + GX_LOAD_BP_REG(0x900dc000); + GX_LOAD_BP_REG(0x8d0d8800); + GX_LOAD_BP_REG(0x910dc800); + GX_LOAD_BP_REG(0x8e0d9000); + GX_LOAD_BP_REG(0x920dd000); + GX_LOAD_BP_REG(0x8f0d9800); + GX_LOAD_BP_REG(0x930dd800); + + // Set_TextureImage0-3, GXTexMapID=4-7 tmem_offset=00010000, cache_width=32 kb, cache_height=32 kb, image_type=cached + GX_LOAD_BP_REG(0xac0da000); + GX_LOAD_BP_REG(0xb00de000); + GX_LOAD_BP_REG(0xad0da800); + GX_LOAD_BP_REG(0xb10de800); + GX_LOAD_BP_REG(0xae0db000); + GX_LOAD_BP_REG(0xb20df000); + GX_LOAD_BP_REG(0xaf0db800); + GX_LOAD_BP_REG(0xb30df800); + + return; + } + + if(nr==2) { + // Set_TextureImage0-3, GXTexMapID=0-3 tmem_offset=00000000, cache_width=32 kb, cache_height=32 kb, image_type=cached + GX_LOAD_BP_REG(0x8c0d8000); + GX_LOAD_BP_REG(0x900dc000); + GX_LOAD_BP_REG(0x8d0d8800); + GX_LOAD_BP_REG(0x910dc800); + GX_LOAD_BP_REG(0x8e0d9000); + GX_LOAD_BP_REG(0x920dd000); + GX_LOAD_BP_REG(0x8f0d9800); + GX_LOAD_BP_REG(0x930dd800); + + // Set_TextureImage0-3, GXTexMapID=4-7 tmem_offset=00010000, cache_width=32 kb, cache_height=32 kb, image_type=cached + GX_LOAD_BP_REG(0xac0da000); + GX_LOAD_BP_REG(0xb00dc400); + GX_LOAD_BP_REG(0xad0da800); + GX_LOAD_BP_REG(0xb10dcc00); + GX_LOAD_BP_REG(0xae0db000); + GX_LOAD_BP_REG(0xb20dd400); + GX_LOAD_BP_REG(0xaf0db800); + GX_LOAD_BP_REG(0xb30ddc00); + + return; + } +} + +#if defined(HW_RVL) +static GXTexRegion* __GXDefTexRegionCallback(GXTexObj *obj,u8 mapid) +{ + u32 fmt,mipmap; + GXTexRegion *ret = NULL; + + fmt = GX_GetTexObjFmt(obj); + mipmap = GX_GetTexObjMipMap(obj); + if(fmt>=GX_TF_CI4 && fmt<=GX_TF_CI14) + return &__gx->texRegion[mapid]; + else if(fmt==GX_TF_CMPR) + ret = &__gx->texRegion[mapid]; + else + ret = &__gx->texRegion[mapid+8]; + + if(mipmap) ret = &__gx->texRegion[mapid+16]; + + return ret; +} +#else +static GXTexRegion* __GXDefTexRegionCallback(GXTexObj *obj,u8 mapid) +{ + u32 fmt; + u32 idx; + static u32 regionA = 0; + static u32 regionB = 0; + GXTexRegion *ret = NULL; + + fmt = GX_GetTexObjFmt(obj); + if(fmt==0x0008 || fmt==0x0009 || fmt==0x000a) { + idx = regionB++; + ret = &__gx->texRegion[(idx&3)+8]; + } else { + idx = regionA++; + ret = &__gx->texRegion[(idx&7)]; + } + return ret; +} +#endif + +static GXTlutRegion* __GXDefTlutRegionCallback(u32 tlut_name) +{ + return &__gx->tlutRegion[tlut_name]; +} + +static void __GX_InitGX() +{ + s32 i; + u32 flag; + GXRModeObj *rmode; + Mtx identity_matrix = + { + {1,0,0,0}, + {0,1,0,0}, + {0,0,1,0} + }; + + rmode = VIDEO_GetPreferredMode(NULL); + + GX_SetCopyClear((GXColor)BLACK,0xffffff); + GX_SetTexCoordGen(GX_TEXCOORD0,GX_TG_MTX2x4,GX_TG_TEX0,GX_IDENTITY); + GX_SetTexCoordGen(GX_TEXCOORD1,GX_TG_MTX2x4,GX_TG_TEX1,GX_IDENTITY); + GX_SetTexCoordGen(GX_TEXCOORD2,GX_TG_MTX2x4,GX_TG_TEX2,GX_IDENTITY); + GX_SetTexCoordGen(GX_TEXCOORD3,GX_TG_MTX2x4,GX_TG_TEX3,GX_IDENTITY); + GX_SetTexCoordGen(GX_TEXCOORD4,GX_TG_MTX2x4,GX_TG_TEX4,GX_IDENTITY); + GX_SetTexCoordGen(GX_TEXCOORD5,GX_TG_MTX2x4,GX_TG_TEX5,GX_IDENTITY); + GX_SetTexCoordGen(GX_TEXCOORD6,GX_TG_MTX2x4,GX_TG_TEX6,GX_IDENTITY); + GX_SetTexCoordGen(GX_TEXCOORD7,GX_TG_MTX2x4,GX_TG_TEX7,GX_IDENTITY); + GX_SetNumTexGens(1); + GX_ClearVtxDesc(); + GX_InvVtxCache(); + + GX_SetLineWidth(6,GX_TO_ZERO); + GX_SetPointSize(6,GX_TO_ZERO); + + GX_EnableTexOffsets(GX_TEXCOORD0,GX_DISABLE,GX_DISABLE); + GX_EnableTexOffsets(GX_TEXCOORD1,GX_DISABLE,GX_DISABLE); + GX_EnableTexOffsets(GX_TEXCOORD2,GX_DISABLE,GX_DISABLE); + GX_EnableTexOffsets(GX_TEXCOORD3,GX_DISABLE,GX_DISABLE); + GX_EnableTexOffsets(GX_TEXCOORD4,GX_DISABLE,GX_DISABLE); + GX_EnableTexOffsets(GX_TEXCOORD5,GX_DISABLE,GX_DISABLE); + GX_EnableTexOffsets(GX_TEXCOORD6,GX_DISABLE,GX_DISABLE); + GX_EnableTexOffsets(GX_TEXCOORD7,GX_DISABLE,GX_DISABLE); + + GX_LoadPosMtxImm(identity_matrix,GX_PNMTX0); + GX_LoadNrmMtxImm(identity_matrix,GX_PNMTX0); + GX_SetCurrentMtx(GX_PNMTX0); + GX_LoadTexMtxImm(identity_matrix,GX_IDENTITY,GX_MTX3x4); + GX_LoadTexMtxImm(identity_matrix,GX_DTTIDENTITY,GX_MTX3x4); + + GX_SetViewport(0,0,rmode->fbWidth,rmode->efbHeight,0,1); + GX_SetCoPlanar(GX_DISABLE); + GX_SetCullMode(GX_CULL_BACK); + GX_SetClipMode(GX_CLIP_ENABLE); + + GX_SetScissor(0,0,rmode->fbWidth,rmode->efbHeight); + GX_SetScissorBoxOffset(0,0); + + GX_SetNumChans(0); + + GX_SetChanCtrl(GX_COLOR0A0,GX_DISABLE,GX_SRC_REG,GX_SRC_VTX,GX_LIGHTNULL,GX_DF_NONE,GX_AF_NONE); + GX_SetChanAmbColor(GX_COLOR0A0,(GXColor)BLACK); + GX_SetChanMatColor(GX_COLOR0A0,(GXColor)WHITE); + + GX_SetChanCtrl(GX_COLOR1A1,GX_DISABLE,GX_SRC_REG,GX_SRC_VTX,GX_LIGHTNULL,GX_DF_NONE,GX_AF_NONE); + GX_SetChanAmbColor(GX_COLOR1A1,(GXColor)BLACK); + GX_SetChanMatColor(GX_COLOR1A1,(GXColor)WHITE); + + GX_InvalidateTexAll(); + GX_SetTexRegionCallback(__GXDefTexRegionCallback); + GX_SetTlutRegionCallback(__GXDefTlutRegionCallback); + + GX_SetTevOrder(GX_TEVSTAGE0,GX_TEXCOORD0,GX_TEXMAP0,GX_COLOR0A0); + GX_SetTevOrder(GX_TEVSTAGE1,GX_TEXCOORD1,GX_TEXMAP1,GX_COLOR0A0); + GX_SetTevOrder(GX_TEVSTAGE2,GX_TEXCOORD2,GX_TEXMAP2,GX_COLOR0A0); + GX_SetTevOrder(GX_TEVSTAGE3,GX_TEXCOORD3,GX_TEXMAP3,GX_COLOR0A0); + GX_SetTevOrder(GX_TEVSTAGE4,GX_TEXCOORD4,GX_TEXMAP4,GX_COLOR0A0); + GX_SetTevOrder(GX_TEVSTAGE5,GX_TEXCOORD5,GX_TEXMAP5,GX_COLOR0A0); + GX_SetTevOrder(GX_TEVSTAGE6,GX_TEXCOORD6,GX_TEXMAP6,GX_COLOR0A0); + GX_SetTevOrder(GX_TEVSTAGE7,GX_TEXCOORD7,GX_TEXMAP7,GX_COLOR0A0); + GX_SetTevOrder(GX_TEVSTAGE8,GX_TEXCOORDNULL,GX_TEXMAP_NULL,GX_COLORNULL); + GX_SetTevOrder(GX_TEVSTAGE9,GX_TEXCOORDNULL,GX_TEXMAP_NULL,GX_COLORNULL); + GX_SetTevOrder(GX_TEVSTAGE10,GX_TEXCOORDNULL,GX_TEXMAP_NULL,GX_COLORNULL); + GX_SetTevOrder(GX_TEVSTAGE11,GX_TEXCOORDNULL,GX_TEXMAP_NULL,GX_COLORNULL); + GX_SetTevOrder(GX_TEVSTAGE12,GX_TEXCOORDNULL,GX_TEXMAP_NULL,GX_COLORNULL); + GX_SetTevOrder(GX_TEVSTAGE13,GX_TEXCOORDNULL,GX_TEXMAP_NULL,GX_COLORNULL); + GX_SetTevOrder(GX_TEVSTAGE14,GX_TEXCOORDNULL,GX_TEXMAP_NULL,GX_COLORNULL); + GX_SetTevOrder(GX_TEVSTAGE15,GX_TEXCOORDNULL,GX_TEXMAP_NULL,GX_COLORNULL); + GX_SetNumTevStages(1); + GX_SetTevOp(GX_TEVSTAGE0,GX_REPLACE); + GX_SetAlphaCompare(GX_ALWAYS,0,GX_AOP_AND,GX_ALWAYS,0); + GX_SetZTexture(GX_ZT_DISABLE,GX_TF_Z8,0); + for(i=0;iviHeight==(rmode->xfbHeight<<1)) flag = 1; + GX_SetFieldMode(rmode->field_rendering,flag); + + GX_SetCopyClear((GXColor)GX_DEFAULT_BG,0x00ffffff); + GX_SetDispCopySrc(0,0,rmode->fbWidth,rmode->efbHeight); + GX_SetDispCopyDst(rmode->fbWidth,rmode->efbHeight); + GX_SetDispCopyYScale(1.0); + GX_SetCopyClamp(GX_CLAMP_TOP|GX_CLAMP_BOTTOM); + GX_SetCopyFilter(GX_FALSE,NULL,GX_FALSE,NULL); + GX_SetDispCopyGamma(GX_GM_1_0); + GX_SetDispCopyFrame2Field(GX_COPY_PROGRESSIVE); + GX_ClearBoundingBox(); + + GX_PokeColorUpdate(GX_TRUE); + GX_PokeAlphaUpdate(GX_TRUE); + GX_PokeDither(GX_FALSE); + GX_PokeBlendMode(GX_BM_NONE,GX_BL_ZERO,GX_BL_ONE,GX_LO_SET); + GX_PokeAlphaMode(GX_ALWAYS,0); + GX_PokeAlphaRead(GX_READ_FF); + GX_PokeDstAlpha(GX_DISABLE,0); + GX_PokeZMode(GX_TRUE,GX_ALWAYS,GX_TRUE); + + GX_SetGPMetric(GX_PERF0_NONE,GX_PERF1_NONE); + GX_ClearGPMetric(); +} + +static void __GX_FlushTextureState() +{ + GX_LOAD_BP_REG(__gx->tevIndMask); +} + +static void __GX_XfVtxSpecs() +{ + u32 xfvtxspecs = 0; + u32 nrms,texs,cols; + + cols = 0; + if(__gx->vcdLo&0x6000) cols++; + if(__gx->vcdLo&0x18000) cols++; + + nrms = 0; + if(__gx->vcdNrms==1) nrms = 1; + else if(__gx->vcdNrms==2) nrms = 2; + + texs = 0; + if(__gx->vcdHi&0x3) texs++; + if(__gx->vcdHi&0xc) texs++; + if(__gx->vcdHi&0x30) texs++; + if(__gx->vcdHi&0xc0) texs++; + if(__gx->vcdHi&0x300) texs++; + if(__gx->vcdHi&0xc00) texs++; + if(__gx->vcdHi&0x3000) texs++; + if(__gx->vcdHi&0xc000) texs++; + + xfvtxspecs = (_SHIFTL(texs,4,4))|(_SHIFTL(nrms,2,2))|(cols&0x3); + GX_LOAD_XF_REG(0x1008,xfvtxspecs); +} + +static void __GX_SetMatrixIndex(u32 mtx) +{ + if(mtx<5) { + GX_LOAD_CP_REG(0x30,__gx->mtxIdxLo); + GX_LOAD_XF_REG(0x1018,__gx->mtxIdxLo); + } else { + GX_LOAD_CP_REG(0x40,__gx->mtxIdxHi); + GX_LOAD_XF_REG(0x1019,__gx->mtxIdxHi); + } +} + +static void __GX_SendFlushPrim() +{ + u32 tmp,tmp2,cnt; + + tmp = (__gx->xfFlush*__gx->xfFlushExp); + + wgPipe->U8 = 0x98; + wgPipe->U16 = __gx->xfFlush; + + tmp2 = (tmp+3)/4; + if(tmp>0) { + cnt = tmp2/8; + while(cnt) { + wgPipe->U32 = 0; + wgPipe->U32 = 0; + wgPipe->U32 = 0; + wgPipe->U32 = 0; + wgPipe->U32 = 0; + wgPipe->U32 = 0; + wgPipe->U32 = 0; + wgPipe->U32 = 0; + cnt--; + } + tmp2 &= 0x0007; + if(tmp2) { + while(tmp2) { + wgPipe->U32 = 0; + tmp2--; + } + } + } + __gx->xfFlush = 1; +} + +static void __GX_SetVCD() +{ + GX_LOAD_CP_REG(0x50,__gx->vcdLo); + GX_LOAD_CP_REG(0x60,__gx->vcdHi); + __GX_XfVtxSpecs(); +} + +static void __GX_SetVAT() +{ + u8 setvtx = 0; + s32 i; + + for(i=0;i<8;i++) { + setvtx = (1<VATTable&setvtx) { + GX_LOAD_CP_REG((0x70+(i&7)),__gx->VAT0reg[i]); + GX_LOAD_CP_REG((0x80+(i&7)),__gx->VAT1reg[i]); + GX_LOAD_CP_REG((0x90+(i&7)),__gx->VAT2reg[i]); + } + } + __gx->VATTable = 0; +} + +static void __SetSURegs(u8 texmap,u8 texcoord) +{ + u32 reg; + u16 wd,ht; + u8 wrap_s,wrap_t; + + wd = __gx->texMapSize[texmap]&0x3ff; + ht = _SHIFTR(__gx->texMapSize[texmap],10,10); + wrap_s = __gx->texMapWrap[texmap]&3; + wrap_t = _SHIFTR(__gx->texMapWrap[texmap],2,2); + + reg = (texcoord&0x7); + __gx->suSsize[reg] = (__gx->suSsize[reg]&~0x0000ffff)|wd; + __gx->suTsize[reg] = (__gx->suTsize[reg]&~0x0000ffff)|ht; + __gx->suSsize[reg] = (__gx->suSsize[reg]&~0x00010000)|(_SHIFTL(wrap_s,16,1)); + __gx->suTsize[reg] = (__gx->suTsize[reg]&~0x00010000)|(_SHIFTL(wrap_t,16,1)); + + GX_LOAD_BP_REG(__gx->suSsize[reg]); + GX_LOAD_BP_REG(__gx->suTsize[reg]); +} + +static void __GX_SetSUTexRegs() +{ + u32 i; + u32 indtev,dirtev; + u8 texcoord,texmap; + u32 tevreg,tevm,texcm; + + dirtev = (_SHIFTR(__gx->genMode,10,4))+1; + indtev = _SHIFTR(__gx->genMode,16,3); + + //indirect texture order + for(i=0;itevRasOrder[2]&7; + texcoord = _SHIFTR(__gx->tevRasOrder[2],3,3); + break; + case GX_INDTEXSTAGE1: + texmap = _SHIFTR(__gx->tevRasOrder[2],6,3); + texcoord = _SHIFTR(__gx->tevRasOrder[2],9,3); + break; + case GX_INDTEXSTAGE2: + texmap = _SHIFTR(__gx->tevRasOrder[2],12,3); + texcoord = _SHIFTR(__gx->tevRasOrder[2],15,3); + break; + case GX_INDTEXSTAGE3: + texmap = _SHIFTR(__gx->tevRasOrder[2],18,3); + texcoord = _SHIFTR(__gx->tevRasOrder[2],21,3); + break; + default: + texmap = 0; + texcoord = 0; + break; + } + + texcm = _SHIFTL(1,texcoord,1); + if(!(__gx->texCoordManually&texcm)) + __SetSURegs(texmap,texcoord); + } + + //direct texture order + for(i=0;itevTexMap[i]&0xff); + + if(i&1) texcoord = _SHIFTR(__gx->tevRasOrder[tevreg],15,3); + else texcoord = _SHIFTR(__gx->tevRasOrder[tevreg],3,3); + + tevm = _SHIFTL(1,i,1); + texcm = _SHIFTL(1,texcoord,1); + if(texmap!=0xff && (__gx->tevTexCoordEnable&tevm) && !(__gx->texCoordManually&texcm)) { + __SetSURegs(texmap,texcoord); + } + } +} + +static void __GX_SetGenMode() +{ + GX_LOAD_BP_REG(__gx->genMode); + __gx->xfFlush = 0; +} + +static void __GX_UpdateBPMask() +{ +#if defined(HW_DOL) + u32 i; + u32 nbmp,nres; + u8 ntexmap; + + nbmp = _SHIFTR(__gx->genMode,16,3); + + nres = 0; + for(i=0;itevRasOrder[2]&7; + break; + case GX_INDTEXSTAGE1: + ntexmap = _SHIFTR(__gx->tevRasOrder[2],6,3); + break; + case GX_INDTEXSTAGE2: + ntexmap = _SHIFTR(__gx->tevRasOrder[2],12,3); + break; + case GX_INDTEXSTAGE3: + ntexmap = _SHIFTR(__gx->tevRasOrder[2],18,3); + break; + default: + ntexmap = 0; + break; + } + nres |= (1<tevIndMask&0xff)!=nres) { + __gx->tevIndMask = (__gx->tevIndMask&~0xff)|(nres&0xff); + GX_LOAD_BP_REG(__gx->tevIndMask); + } +#endif +} + +static void __GX_SetIndirectMask(u32 mask) +{ + __gx->tevIndMask = ((__gx->tevIndMask&~0xff)|(mask&0xff)); + GX_LOAD_BP_REG(__gx->tevIndMask); +} + +static void __GX_SetTexCoordGen() +{ + u32 i,mask; + u32 texcoord; + + if(__gx->dirtyState&0x02000000) GX_LOAD_XF_REG(0x103f,(__gx->genMode&0xf)); + + i = 0; + texcoord = 0x1040; + mask = _SHIFTR(__gx->dirtyState,16,8); + while(mask) { + if(mask&0x0001) { + GX_LOAD_XF_REG(texcoord,__gx->texCoordGen[i]); + GX_LOAD_XF_REG((texcoord+0x10),__gx->texCoordGen2[i]); + } + mask >>= 1; + texcoord++; + i++; + } +} + +static void __GX_SetChanColor() +{ + if(__gx->dirtyState&0x0100) + GX_LOAD_XF_REG(0x100a,__gx->chnAmbColor[0]); + if(__gx->dirtyState&0x0200) + GX_LOAD_XF_REG(0x100b,__gx->chnAmbColor[1]); + if(__gx->dirtyState&0x0400) + GX_LOAD_XF_REG(0x100c,__gx->chnMatColor[0]); + if(__gx->dirtyState&0x0800) + GX_LOAD_XF_REG(0x100d,__gx->chnMatColor[1]); +} + +static void __GX_SetChanCntrl() +{ + u32 i,chan,mask; + + if(__gx->dirtyState&0x01000000) GX_LOAD_XF_REG(0x1009,(_SHIFTR(__gx->genMode,4,3))); + + i = 0; + chan = 0x100e; + mask = _SHIFTR(__gx->dirtyState,12,4); + while(mask) { + if(mask&0x0001) GX_LOAD_XF_REG(chan,__gx->chnCntrl[i]); + + mask >>= 1; + chan++; + i++; + } +} + +static void __GX_SetDirtyState() +{ + if(__gx->dirtyState&0x0001) { + __GX_SetSUTexRegs(); + } + if(__gx->dirtyState&0x0002) { + __GX_UpdateBPMask(); + } + if(__gx->dirtyState&0x0004) { + __GX_SetGenMode(); + } + if(__gx->dirtyState&0x0008) { + __GX_SetVCD(); + } + if(__gx->dirtyState&0x0010) { + __GX_SetVAT(); + } + if(__gx->dirtyState&~0xff) { + if(__gx->dirtyState&0x0f00) { + __GX_SetChanColor(); + } + if(__gx->dirtyState&0x0100f000) { + __GX_SetChanCntrl(); + } + if(__gx->dirtyState&0x02ff0000) { + __GX_SetTexCoordGen(); + } + if(__gx->dirtyState&0x04000000) { + __GX_SetMatrixIndex(0); + __GX_SetMatrixIndex(5); + } + } + __gx->dirtyState = 0; +} + +static u32 __GX_GetNumXfbLines(u16 efbHeight,u32 yscale) +{ + u32 tmp,tmp1; + + tmp = (((efbHeight-1)<<8)/yscale)+1; + if(yscale>128 && yscale<256) { + while(yscale&0x01) yscale >>= 1; + tmp1 = yscale*(efbHeight/yscale); + if(!(efbHeight-tmp1)) tmp++; + } + if(tmp>1024) tmp = 1024; + + return tmp; +} + +GXFifoObj* GX_Init(void *base,u32 size) +{ + s32 i,re0,re1; +#if defined(HW_RVL) + u32 tmem; +#else + u32 tmem_even,tmem_odd; +#endif + u32 divis,res; + u32 divid = TB_BUS_CLOCK; + GXTexRegion *region = NULL; + GXTlutRegion *tregion = NULL; + + LWP_InitQueue(&_gxwaitfinish); + SYS_RegisterResetFunc(&__gx_resetinfo); + + memset(__gxregs,0,STRUCT_REGDEF_SIZE); + + __GX_FifoInit(); + GX_InitFifoBase(&_gxfifoobj,base,size); + GX_SetCPUFifo(&_gxfifoobj); + GX_SetGPFifo(&_gxfifoobj); + __GX_PEInit(); + EnableWriteGatherPipe(); + + __gx->gxFifoInited = 1; + + __gx->tevIndMask = 0xff; + __gx->tevIndMask = (__gx->tevIndMask&~0xff000000)|(_SHIFTL(0x0f,24,8)); + + i=0; + re0 = 0xc0; + re1 = 0xc1; + while(i<16) { + __gx->tevColorEnv[i] = (__gx->tevColorEnv[i]&~0xff000000)|(_SHIFTL(re0,24,8)); + __gx->tevAlphaEnv[i] = (__gx->tevAlphaEnv[i]&~0xff000000)|(_SHIFTL(re1,24,8)); + re0 += 2; re1 += 2; i++; + } + + __gx->texCoordManually = 0; + __gx->dirtyState = 0; + + __gx->saveDLctx = 1; + __gx->gxFifoUnlinked = 0; + + __gx->sciTLcorner = (__gx->sciTLcorner&~0xff000000)|(_SHIFTL(0x20,24,8)); + __gx->sciBRcorner = (__gx->sciBRcorner&~0xff000000)|(_SHIFTL(0x21,24,8)); + __gx->lpWidth = (__gx->lpWidth&~0xff000000)|(_SHIFTL(0x22,24,8)); + __gx->genMode = (__gx->genMode&~0xff000000)|(_SHIFTL(0x00,24,8)); + + i=0; + re0 = 0x30; + re1 = 0x31; + while(i<8) { + __gx->suSsize[i] = (__gx->suSsize[i]&~0xff000000)|(_SHIFTL(re0,24,8)); + __gx->suTsize[i] = (__gx->suTsize[i]&~0xff000000)|(_SHIFTL(re1,24,8)); + re0 += 2; re1 += 2; i++; + } + + __gx->peZMode = (__gx->peZMode&~0xff000000)|(_SHIFTL(0x40,24,8)); + __gx->peCMode0 = (__gx->peCMode0&~0xff000000)|(_SHIFTL(0x41,24,8)); + __gx->peCMode1 = (__gx->peCMode1&~0xff000000)|(_SHIFTL(0x42,24,8)); + __gx->peCntrl = (__gx->peCntrl&~0xff000000)|(_SHIFTL(0x43,24,8)); + + i=0; + re0 = 0x25; + while(i<11) { + __gx->tevRasOrder[i] = (__gx->tevRasOrder[i]&~0xff000000)|(_SHIFTL(re0,24,8)); + re0++; i++; + } + + divis = 500; + res = (u32)(divid/divis); + __GX_FlushTextureState(); + GX_LOAD_BP_REG(0x69000000|((_SHIFTR(res,11,24))|0x0400)); + + divis = 4224; + res = (u32)(res/divis); + __GX_FlushTextureState(); + GX_LOAD_BP_REG(0x46000000|(res|0x0200)); + + i=0; + re0 = 0xf6; + while(i<8) { + __gx->tevSwapModeTable[i] = (__gx->tevSwapModeTable[i]&~0xff000000)|(_SHIFTL(re0,24,8)); + re0++; i++; + } + + __gx->tevTexCoordEnable = 0; + __gx->perf0Mode = GX_PERF0_NONE; + __gx->perf1Mode = GX_PERF1_NONE; + __gx->cpPerfMode = 0; + + __GX_InitRevBits(); + + i=0; + while(i<16) { + __gx->tevTexMap[i] = 0xff; + i++; + } + +#if defined(HW_RVL) + i = 0; + while(i<8) { + region = &__gx->texRegion[i]; + GX_InitTexCacheRegion(region,GX_FALSE,_gxtexregionaddrtable[i+0],GX_TEXCACHE_32K,_gxtexregionaddrtable[i+8],GX_TEXCACHE_32K); + + region = &__gx->texRegion[i+8]; + GX_InitTexCacheRegion(region,GX_FALSE,_gxtexregionaddrtable[i+16],GX_TEXCACHE_32K,_gxtexregionaddrtable[i+24],GX_TEXCACHE_32K); + + region = &__gx->texRegion[i+16]; + GX_InitTexCacheRegion(region,GX_TRUE,_gxtexregionaddrtable[i+32],GX_TEXCACHE_32K,_gxtexregionaddrtable[i+40],GX_TEXCACHE_32K); + + i++; + } + + i=0; + while(i<16) { + tmem = 0x000C0000+(i<<13); + tregion = &__gx->tlutRegion[i]; + GX_InitTlutRegion(tregion,tmem,GX_TLUT_256); + i++; + } + + i=0; + while(i<4) { + tmem = 0x000E0000+(i<<15); + tregion = &__gx->tlutRegion[i+16]; + GX_InitTlutRegion(tregion,tmem,GX_TLUT_1K); + i++; + } +#else + for(i=0;i<8;i++) { + tmem_even = tmem_odd = (i<<15); + region = &__gx->texRegion[i]; + GX_InitTexCacheRegion(region,GX_FALSE,tmem_even,GX_TEXCACHE_32K,(tmem_odd+0x00080000),GX_TEXCACHE_32K); + } + for(i=0;i<4;i++) { + tmem_even = ((0x08+(i<<1))<<15); + tmem_odd = ((0x09+(i<<1))<<15); + region = &__gx->texRegion[i+8]; + GX_InitTexCacheRegion(region,GX_FALSE,tmem_even,GX_TEXCACHE_32K,tmem_odd,GX_TEXCACHE_32K); + } + for(i=0;i<16;i++) { + tmem_even = (i<<13)+0x000C0000; + tregion = &__gx->tlutRegion[i]; + GX_InitTlutRegion(tregion,tmem_even,GX_TLUT_256); + } + for(i=0;i<4;i++) { + tmem_even = (i<<15)+0x000E0000; + tregion = &__gx->tlutRegion[i+16]; + GX_InitTlutRegion(tregion,tmem_even,GX_TLUT_1K); + } +#endif + _cpReg[3] = 0; + GX_LOAD_CP_REG(0x20,0x00000000); + GX_LOAD_XF_REG(0x1006,0x0); + + GX_LOAD_BP_REG(0x23000000); + GX_LOAD_BP_REG(0x24000000); + GX_LOAD_BP_REG(0x67000000); + + __GX_SetIndirectMask(0); +#if defined(HW_RVL) + __GX_SetTmemConfig(2); +#else + __GX_SetTmemConfig(0); +#endif + __GX_InitGX(); + + return &_gxfifoobj; +} + +void GX_InitFifoBase(GXFifoObj *fifo,void *base,u32 size) +{ + struct __gxfifo *ptr = (struct __gxfifo*)fifo; + + if(!ptr || sizebuf_start = (u32)base; + ptr->buf_end = (u32)base + size - 4; + ptr->size = size; + ptr->rdwt_dst = 0; + + GX_InitFifoLimits(fifo,(size-GX_FIFO_HIWATERMARK),((size>>1)&0x7fffffe0)); + GX_InitFifoPtrs(fifo,base,base); +} + +void GX_InitFifoLimits(GXFifoObj *fifo,u32 hiwatermark,u32 lowatermark) +{ + struct __gxfifo *ptr = (struct __gxfifo*)fifo; + + ptr->hi_mark = hiwatermark; + ptr->lo_mark = lowatermark; +} + +void GX_InitFifoPtrs(GXFifoObj *fifo,void *rd_ptr,void *wt_ptr) +{ + u32 level; + s32 rdwt_dst; + struct __gxfifo *ptr = (struct __gxfifo*)fifo; + + _CPU_ISR_Disable(level); + rdwt_dst = wt_ptr-rd_ptr; + ptr->rd_ptr = (u32)rd_ptr; + ptr->wt_ptr = (u32)wt_ptr; + ptr->rdwt_dst = rdwt_dst; + if(rdwt_dst<0) { + rdwt_dst += ptr->size; + ptr->rd_ptr = rdwt_dst; + } + _CPU_ISR_Restore(level); +} + +void GX_GetFifoPtrs(GXFifoObj *fifo,void **rd_ptr,void **wt_ptr) +{ + struct __gxfifo *ptr = (struct __gxfifo*)fifo; + *rd_ptr = (void*)ptr->rd_ptr; + *wt_ptr = (void*)ptr->wt_ptr; +} + +void GX_SetCPUFifo(GXFifoObj *fifo) +{ + u32 level; + struct __gxfifo *ptr = (struct __gxfifo*)fifo; + struct __gxfifo *cpufifo = (struct __gxfifo*)&_cpufifo; + + _CPU_ISR_Disable(level); + if(!fifo) { + _gxcpufifoready = 0; + _cpgplinked = 0; + cpufifo->gpfifo_ready = 0; + cpufifo->cpufifo_ready = 0; + _CPU_ISR_Restore(level); + return; + } + + cpufifo->buf_start = ptr->buf_start; + cpufifo->buf_end = ptr->buf_end; + cpufifo->size = ptr->size; + cpufifo->hi_mark = ptr->hi_mark; + cpufifo->lo_mark = ptr->lo_mark; + cpufifo->rd_ptr = ptr->rd_ptr; + cpufifo->wt_ptr = ptr->wt_ptr; + cpufifo->rdwt_dst = ptr->rdwt_dst; + cpufifo->fifo_wrap = ptr->fifo_wrap; + cpufifo->gpfifo_ready = ptr->gpfifo_ready; + cpufifo->cpufifo_ready = 1; + + _gxcpufifoready = 1; + if(__GX_CPGPLinkCheck()) { + _cpgplinked = 1; + cpufifo->gpfifo_ready = 1; + + _piReg[3] = MEM_VIRTUAL_TO_PHYSICAL(cpufifo->buf_start); + _piReg[4] = MEM_VIRTUAL_TO_PHYSICAL(cpufifo->buf_end); + _piReg[5] = (cpufifo->wt_ptr&0x1FFFFFE0); + + __GX_WriteFifoIntReset(GX_TRUE,GX_TRUE); + __GX_WriteFifoIntEnable(GX_ENABLE,GX_DISABLE); + __GX_FifoLink(GX_TRUE); + + _CPU_ISR_Restore(level); + return; + } + + if(_cpgplinked) { + __GX_FifoLink(GX_FALSE); + _cpgplinked = 0; + } + + __GX_WriteFifoIntEnable(GX_DISABLE,GX_DISABLE); + + _piReg[3] = MEM_VIRTUAL_TO_PHYSICAL(cpufifo->buf_start); + _piReg[4] = MEM_VIRTUAL_TO_PHYSICAL(cpufifo->buf_end); + _piReg[5] = (cpufifo->wt_ptr&0x1FFFFFE0); + ppcsync(); + + _CPU_ISR_Restore(level); +} + +void GX_GetCPUFifo(GXFifoObj *fifo) +{ + struct __gxfifo* ptr = (struct __gxfifo*)fifo; + struct __gxfifo* cpufifo = (struct __gxfifo*)&_cpufifo; + + if(!_gxcpufifoready) return; + + GX_Flush(); + __GX_SaveFifo(); + + ptr->buf_start = cpufifo->buf_start; + ptr->buf_end = cpufifo->buf_end; + ptr->size = cpufifo->size; + ptr->rd_ptr = cpufifo->rd_ptr; + ptr->wt_ptr = cpufifo->wt_ptr; + ptr->rdwt_dst = cpufifo->rdwt_dst; + ptr->hi_mark = cpufifo->hi_mark; + ptr->lo_mark = cpufifo->lo_mark; + ptr->fifo_wrap = cpufifo->fifo_wrap; + ptr->cpufifo_ready = cpufifo->cpufifo_ready; + ptr->gpfifo_ready = cpufifo->gpfifo_ready; +} + +void GX_SetGPFifo(GXFifoObj *fifo) +{ + u32 level; + struct __gxfifo *ptr = (struct __gxfifo*)fifo; + struct __gxfifo *gpfifo = (struct __gxfifo*)&_gpfifo; + + _CPU_ISR_Disable(level); + __GX_FifoReadDisable(); + __GX_WriteFifoIntEnable(GX_DISABLE,GX_DISABLE); + + if(!fifo) { + _gxgpfifoready = 0; + _cpgplinked = 0; + gpfifo->cpufifo_ready = 0; + gpfifo->gpfifo_ready = 0; + __GX_FifoLink(GX_FALSE); + _CPU_ISR_Restore(level); + return; + } + + gpfifo->buf_start = ptr->buf_start; + gpfifo->buf_end = ptr->buf_end; + gpfifo->size = ptr->size; + gpfifo->hi_mark = ptr->hi_mark; + gpfifo->lo_mark = ptr->lo_mark; + gpfifo->rd_ptr = ptr->rd_ptr; + gpfifo->wt_ptr = ptr->wt_ptr; + gpfifo->rdwt_dst = ptr->rdwt_dst; + gpfifo->fifo_wrap = ptr->fifo_wrap; + gpfifo->cpufifo_ready = ptr->cpufifo_ready; + gpfifo->gpfifo_ready = 1; + _gxgpfifoready = 1; + + /* setup fifo base */ + _cpReg[16] = _SHIFTL(MEM_VIRTUAL_TO_PHYSICAL(gpfifo->buf_start),0,16); + _cpReg[17] = _SHIFTR(MEM_VIRTUAL_TO_PHYSICAL(gpfifo->buf_start),16,16); + + /* setup fifo end */ + _cpReg[18] = _SHIFTL(MEM_VIRTUAL_TO_PHYSICAL(gpfifo->buf_end),0,16); + _cpReg[19] = _SHIFTR(MEM_VIRTUAL_TO_PHYSICAL(gpfifo->buf_end),16,16); + + /* setup hiwater mark */ + _cpReg[20] = _SHIFTL(gpfifo->hi_mark,0,16); + _cpReg[21] = _SHIFTR(gpfifo->hi_mark,16,16); + + /* setup lowater mark */ + _cpReg[22] = _SHIFTL(gpfifo->lo_mark,0,16); + _cpReg[23] = _SHIFTR(gpfifo->lo_mark,16,16); + + /* setup rd<->wd dist */ + _cpReg[24] = _SHIFTL(gpfifo->rdwt_dst,0,16); + _cpReg[25] = _SHIFTR(gpfifo->rdwt_dst,16,16); + + /* setup wt ptr */ + _cpReg[26] = _SHIFTL(MEM_VIRTUAL_TO_PHYSICAL(gpfifo->wt_ptr),0,16); + _cpReg[27] = _SHIFTR(MEM_VIRTUAL_TO_PHYSICAL(gpfifo->wt_ptr),16,16); + + /* setup rd ptr */ + _cpReg[28] = _SHIFTL(MEM_VIRTUAL_TO_PHYSICAL(gpfifo->rd_ptr),0,16); + _cpReg[29] = _SHIFTR(MEM_VIRTUAL_TO_PHYSICAL(gpfifo->rd_ptr),16,16); + ppcsync(); + + if(__GX_CPGPLinkCheck()) { + _cpgplinked = 1; + gpfifo->cpufifo_ready = 1; + __GX_WriteFifoIntEnable(GX_ENABLE,GX_DISABLE); + __GX_FifoLink(GX_TRUE); + } else { + _cpgplinked = 0; + gpfifo->cpufifo_ready = 0; + __GX_WriteFifoIntEnable(GX_DISABLE,GX_DISABLE); + __GX_FifoLink(GX_FALSE); + } + + __GX_WriteFifoIntReset(GX_TRUE,GX_TRUE); + __GX_FifoReadEnable(); + _CPU_ISR_Restore(level); +} + +void GX_GetGPFifo(GXFifoObj *fifo) +{ + struct __gxfifo* ptr = (struct __gxfifo*)fifo; + struct __gxfifo* gpfifo = (struct __gxfifo*)&_gpfifo; + + if(!_gxgpfifoready) return; + + __GX_SaveFifo(); + + ptr->buf_start = gpfifo->buf_start; + ptr->buf_end = gpfifo->buf_end; + ptr->size = gpfifo->size; + ptr->rd_ptr = gpfifo->rd_ptr; + ptr->wt_ptr = gpfifo->wt_ptr; + ptr->rdwt_dst = gpfifo->rdwt_dst; + ptr->hi_mark = gpfifo->hi_mark; + ptr->lo_mark = gpfifo->lo_mark; + ptr->fifo_wrap = gpfifo->fifo_wrap; + ptr->gpfifo_ready = gpfifo->gpfifo_ready; + ptr->cpufifo_ready = gpfifo->cpufifo_ready; +} + +void* GX_GetFifoBase(GXFifoObj *fifo) +{ + return (void*)((struct __gxfifo*)fifo)->buf_start; +} + +u32 GX_GetFifoSize(GXFifoObj *fifo) +{ + return ((struct __gxfifo*)fifo)->size; +} + +u32 GX_GetFifoCount(GXFifoObj *fifo) +{ + return ((struct __gxfifo*)fifo)->rdwt_dst; +} + +u8 GX_GetFifoWrap(GXFifoObj *fifo) +{ + return ((struct __gxfifo*)fifo)->fifo_wrap; +} + +u32 GX_GetOverflowCount() +{ + return _gxoverflowcount; +} + +u32 GX_ResetOverflowCount() +{ + u32 ret = _gxoverflowcount; + _gxoverflowcount = 0; + return ret; +} + +lwp_t GX_GetCurrentGXThread() +{ + return _gxcurrentlwp; +} + +lwp_t GX_SetCurrentGXThread() +{ + u32 level; + + _CPU_ISR_Disable(level); + lwp_t ret = _gxcurrentlwp; + _gxcurrentlwp = LWP_GetSelf(); + _CPU_ISR_Restore(level); + + return ret; +} + +volatile void* GX_RedirectWriteGatherPipe(void *ptr) +{ + u32 level; + struct __gxfifo *cpufifo = (struct __gxfifo*)&_cpufifo; + + _CPU_ISR_Disable(level); + GX_Flush(); + while(!IsWriteGatherBufferEmpty()); + + mtwpar(0x0C008000); + if(_cpgplinked) { + __GX_FifoLink(GX_FALSE); + __GX_WriteFifoIntEnable(GX_DISABLE,GX_DISABLE); + } + cpufifo->wt_ptr = (u32)MEM_PHYSICAL_TO_K0(_piReg[5]&~0x04000000); + + _piReg[3] = 0; + _piReg[4] = 0x04000000; + _piReg[5] = (((u32)ptr&0x3FFFFFE0)&~0x04000000); + _sync(); + + _CPU_ISR_Restore(level); + + return (volatile void*)0x0C008000; +} + +void GX_RestoreWriteGatherPipe() +{ + u32 level; + struct __gxfifo *cpufifo = (struct __gxfifo*)&_cpufifo; + + _CPU_ISR_Disable(level); + + wgPipe->U32 = 0; + wgPipe->U32 = 0; + wgPipe->U32 = 0; + wgPipe->U32 = 0; + wgPipe->U32 = 0; + wgPipe->U32 = 0; + wgPipe->U32 = 0; + wgPipe->U32 = 0; + + ppcsync(); + while(!IsWriteGatherBufferEmpty()); + + mtwpar(0x0C008000); + _piReg[3] = MEM_VIRTUAL_TO_PHYSICAL(cpufifo->buf_start); + _piReg[4] = MEM_VIRTUAL_TO_PHYSICAL(cpufifo->buf_end); + _piReg[5] = (((u32)cpufifo->wt_ptr&0x3FFFFFE0)&~0x04000000); + if(_cpgplinked) { + __GX_WriteFifoIntReset(GX_TRUE,GX_TRUE); + __GX_WriteFifoIntEnable(GX_ENABLE,GX_DISABLE); + __GX_FifoLink(GX_TRUE); + } + _CPU_ISR_Restore(level); +} + +void GX_Flush() +{ + if(__gx->dirtyState) + __GX_SetDirtyState(); + + wgPipe->U32 = 0; + wgPipe->U32 = 0; + wgPipe->U32 = 0; + wgPipe->U32 = 0; + wgPipe->U32 = 0; + wgPipe->U32 = 0; + wgPipe->U32 = 0; + wgPipe->U32 = 0; + + ppcsync(); +} + +void GX_EnableBreakPt(void *break_pt) +{ + u32 level = 0; + _CPU_ISR_Disable(level); + __GX_FifoReadDisable(); + _cpReg[30] = _SHIFTL(MEM_VIRTUAL_TO_PHYSICAL(break_pt),0,16); + _cpReg[31] = _SHIFTR(MEM_VIRTUAL_TO_PHYSICAL(break_pt),16,16); + __gx->cpCRreg = (__gx->cpCRreg&~0x22)|0x22; + _cpReg[1] = __gx->cpCRreg; + _gxcurrbp = break_pt; + __GX_FifoReadEnable(); + _CPU_ISR_Restore(level); +} + +void GX_DisableBreakPt() +{ + u32 level = 0; + _CPU_ISR_Disable(level); + __gx->cpCRreg = (__gx->cpCRreg&~0x22); + _cpReg[1] = __gx->cpCRreg; + _gxcurrbp = NULL; + _CPU_ISR_Restore(level); +} + +#if defined(HW_DOL) +void GX_AbortFrame() +{ + _piReg[6] = 1; + __GX_WaitAbort(50); + _piReg[6] = 0; + __GX_WaitAbort(5); + + if(__GX_IsGPFifoReady()) + __GX_CleanGPFifo(); +} +#elif defined(HW_RVL) +void GX_AbortFrame() +{ + __GX_Abort(); + if(__GX_IsGPFifoReady()) { + __GX_CleanGPFifo(); + __GX_InitRevBits(); + + __gx->dirtyState = 0; + GX_Flush(); + } +} +#endif + +void GX_SetDrawSync(u16 token) +{ + u32 level = 0; + _CPU_ISR_Disable(level); + GX_LOAD_BP_REG(0x48000000 | token); + GX_LOAD_BP_REG(0x47000000 | token); + GX_Flush(); + _CPU_ISR_Restore(level); +} + +u16 GX_GetDrawSync() +{ + return _peReg[7]; +} + +void GX_SetDrawDone() +{ + u32 level; + _CPU_ISR_Disable(level); + GX_LOAD_BP_REG(0x45000002); // set draw done! + GX_Flush(); + _gxfinished = 0; + _CPU_ISR_Restore(level); +} + + +void GX_WaitDrawDone() +{ + u32 level; + _CPU_ISR_Disable(level); + while(!_gxfinished) + LWP_ThreadSleep(_gxwaitfinish); + _CPU_ISR_Restore(level); +} + +void GX_DrawDone() +{ + u32 level; + + _CPU_ISR_Disable(level); + GX_LOAD_BP_REG(0x45000002); // set draw done! + GX_Flush(); + + _gxfinished = 0; + _CPU_ISR_Flash(level); + + while(!_gxfinished) + LWP_ThreadSleep(_gxwaitfinish); + _CPU_ISR_Restore(level); +} + +GXDrawDoneCallback GX_SetDrawDoneCallback(GXDrawDoneCallback cb) +{ + u32 level; + + _CPU_ISR_Disable(level); + GXDrawDoneCallback ret = drawDoneCB; + drawDoneCB = cb; + _CPU_ISR_Restore(level); + return ret; +} + +GXDrawSyncCallback GX_SetDrawSyncCallback(GXDrawSyncCallback cb) +{ + u32 level; + + _CPU_ISR_Disable(level); + GXDrawSyncCallback ret = tokenCB; + tokenCB = cb; + _CPU_ISR_Restore(level); + return ret; +} + +GXBreakPtCallback GX_SetBreakPtCallback(GXBreakPtCallback cb) +{ + u32 level; + + _CPU_ISR_Disable(level); + GXBreakPtCallback ret = breakPtCB; + breakPtCB = cb; + _CPU_ISR_Restore(level); + return ret; +} + +void GX_PixModeSync() +{ + GX_LOAD_BP_REG(__gx->peCntrl); +} + +void GX_TexModeSync() +{ + GX_LOAD_BP_REG(0x63000000); +} + +void GX_SetMisc(u32 token,u32 value) +{ + u32 cnt; + + if(token==GX_MT_XF_FLUSH) { + __gx->xfFlushSafe = value; + cnt = cntlzw(__gx->xfFlushSafe); + __gx->xfFlushExp = _SHIFTR(cnt,5,16); + + __gx->xfFlush = 1; + if(!__gx->xfFlushSafe) return; + + __gx->dirtyState |= 0x0008; + } else if(token==GX_MT_DL_SAVE_CTX) { + __gx->saveDLctx = (value&0xff); + } + return; +} + +void GX_SetViewportJitter(f32 xOrig,f32 yOrig,f32 wd,f32 ht,f32 nearZ,f32 farZ,u32 field) +{ + f32 x0,y0,x1,y1,n,f,z; + static f32 Xfactor = 0.5; + static f32 Yfactor = 342.0; + static f32 Zfactor = 16777215.0; + + if(!field) yOrig -= Xfactor; + + x0 = wd*Xfactor; + y0 = (-ht)*Xfactor; + x1 = (xOrig+(wd*Xfactor))+Yfactor; + y1 = (yOrig+(ht*Xfactor))+Yfactor; + n = Zfactor*nearZ; + f = Zfactor*farZ; + z = f-n; + + GX_LOAD_XF_REGS(0x101a,6); + wgPipe->F32 = x0; + wgPipe->F32 = y0; + wgPipe->F32 = z; + wgPipe->F32 = x1; + wgPipe->F32 = y1; + wgPipe->F32 = f; +} + +void GX_SetViewport(f32 xOrig,f32 yOrig,f32 wd,f32 ht,f32 nearZ,f32 farZ) +{ + GX_SetViewportJitter(xOrig,yOrig,wd,ht,nearZ,farZ,1); +} + +void GX_LoadProjectionMtx(Mtx44 mt,u8 type) +{ + f32 tmp[7]; + + ((u32*)((void*)tmp))[6] = (u32)type; + tmp[0] = mt[0][0]; + tmp[2] = mt[1][1]; + tmp[4] = mt[2][2]; + tmp[5] = mt[2][3]; + + switch(type) { + case GX_PERSPECTIVE: + tmp[1] = mt[0][2]; + tmp[3] = mt[1][2]; + break; + case GX_ORTHOGRAPHIC: + tmp[1] = mt[0][3]; + tmp[3] = mt[1][3]; + break; + default: + tmp[1] = 0.0; + tmp[3] = 0.0; + break; + } + + GX_LOAD_XF_REGS(0x1020,7); + wgPipe->F32 = tmp[0]; + wgPipe->F32 = tmp[1]; + wgPipe->F32 = tmp[2]; + wgPipe->F32 = tmp[3]; + wgPipe->F32 = tmp[4]; + wgPipe->F32 = tmp[5]; + wgPipe->F32 = tmp[6]; +} + +static void __GetImageTileCount(u32 fmt,u16 wd,u16 ht,u32 *xtiles,u32 *ytiles,u32 *zplanes) +{ + u32 xshift,yshift,tile; + + switch(fmt) { + case GX_TF_I4: + case GX_TF_IA4: + case GX_CTF_R4: + case GX_CTF_RA4: + case GX_CTF_Z4: + xshift = 3; + yshift = 3; + break; + case GX_TF_Z8: + case GX_TF_I8: + case GX_CTF_A8: + case GX_CTF_R8: + case GX_CTF_G8: + case GX_CTF_B8: + case GX_CTF_Z8M: + case GX_CTF_Z8L: + xshift = 3; + yshift = 2; + break; + case GX_TF_IA8: + case GX_CTF_RA8: + case GX_CTF_RG8: + case GX_CTF_GB8: + case GX_TF_Z16: + case GX_TF_Z24X8: + case GX_CTF_Z16L: + case GX_TF_RGB565: + case GX_TF_RGB5A3: + case GX_TF_RGBA8: + xshift = 2; + yshift = 2; + break; + default: + xshift = 0; + yshift = 0; + break; + } + + if(!(wd&0xffff)) wd = 1; + if(!(ht&0xffff)) ht = 1; + + wd &= 0xffff; + tile = (wd+((1<>xshift; + *xtiles = tile; + + ht &= 0xffff; + tile = (ht+((1<>yshift; + *ytiles = tile; + + *zplanes = 1; + if(fmt==GX_TF_RGBA8 || fmt==GX_TF_Z24X8) *zplanes = 2; +} + +void GX_SetCopyClear(GXColor color,u32 zvalue) +{ + u32 val; + + val = (_SHIFTL(color.a,8,8))|(color.r&0xff); + GX_LOAD_BP_REG(0x4f000000|val); + + val = (_SHIFTL(color.g,8,8))|(color.b&0xff); + GX_LOAD_BP_REG(0x50000000|val); + + val = zvalue&0x00ffffff; + GX_LOAD_BP_REG(0x51000000|val); +} + +void GX_SetCopyClamp(u8 clamp) +{ + __gx->dispCopyCntrl = (__gx->dispCopyCntrl&~1)|(clamp&1); + __gx->dispCopyCntrl = (__gx->dispCopyCntrl&~2)|(clamp&2); +} + +void GX_SetDispCopyGamma(u8 gamma) +{ + __gx->dispCopyCntrl = (__gx->dispCopyCntrl&~0x180)|(_SHIFTL(gamma,7,2)); +} + +void GX_SetCopyFilter(u8 aa,u8 sample_pattern[12][2],u8 vf,u8 vfilter[7]) +{ + u32 reg01=0,reg02=0,reg03=0,reg04=0,reg53=0,reg54=0; + + if(aa) { + reg01 = sample_pattern[0][0]&0xf; + reg01 = (reg01&~0xf0)|(_SHIFTL(sample_pattern[0][1],4,4)); + reg01 = (reg01&~0xf00)|(_SHIFTL(sample_pattern[1][0],8,4)); + reg01 = (reg01&~0xf000)|(_SHIFTL(sample_pattern[1][1],12,4)); + reg01 = (reg01&~0xf0000)|(_SHIFTL(sample_pattern[2][0],16,4)); + reg01 = (reg01&~0xf00000)|(_SHIFTL(sample_pattern[2][1],20,4)); + reg01 = (reg01&~0xff000000)|(_SHIFTL(0x01,24,8)); + + reg02 = sample_pattern[3][0]&0xf; + reg02 = (reg02&~0xf0)|(_SHIFTL(sample_pattern[3][1],4,4)); + reg02 = (reg02&~0xf00)|(_SHIFTL(sample_pattern[4][0],8,4)); + reg02 = (reg02&~0xf000)|(_SHIFTL(sample_pattern[4][1],12,4)); + reg02 = (reg02&~0xf0000)|(_SHIFTL(sample_pattern[5][0],16,4)); + reg02 = (reg02&~0xf00000)|(_SHIFTL(sample_pattern[5][1],20,4)); + reg02 = (reg02&~0xff000000)|(_SHIFTL(0x02,24,8)); + + reg03 = sample_pattern[6][0]&0xf; + reg03 = (reg03&~0xf0)|(_SHIFTL(sample_pattern[6][1],4,4)); + reg03 = (reg03&~0xf00)|(_SHIFTL(sample_pattern[7][0],8,4)); + reg03 = (reg03&~0xf000)|(_SHIFTL(sample_pattern[7][1],12,4)); + reg03 = (reg03&~0xf0000)|(_SHIFTL(sample_pattern[8][0],16,4)); + reg03 = (reg03&~0xf00000)|(_SHIFTL(sample_pattern[8][1],20,4)); + reg03 = (reg03&~0xff000000)|(_SHIFTL(0x03,24,8)); + + reg04 = sample_pattern[9][0]&0xf; + reg04 = (reg04&~0xf0)|(_SHIFTL(sample_pattern[9][1],4,4)); + reg04 = (reg04&~0xf00)|(_SHIFTL(sample_pattern[10][0],8,4)); + reg04 = (reg04&~0xf000)|(_SHIFTL(sample_pattern[10][1],12,4)); + reg04 = (reg04&~0xf0000)|(_SHIFTL(sample_pattern[11][0],16,4)); + reg04 = (reg04&~0xf00000)|(_SHIFTL(sample_pattern[11][1],20,4)); + reg04 = (reg04&~0xff000000)|(_SHIFTL(0x04,24,8)); + } else { + reg01 = 0x01666666; + reg02 = 0x02666666; + reg03 = 0x03666666; + reg04 = 0x04666666; + } + GX_LOAD_BP_REG(reg01); + GX_LOAD_BP_REG(reg02); + GX_LOAD_BP_REG(reg03); + GX_LOAD_BP_REG(reg04); + + reg53 = 0x53595000; + reg54 = 0x54000015; + if(vf) { + reg53 = 0x53000000|(vfilter[0]&0x3f); + reg53 = (reg53&~0xfc0)|(_SHIFTL(vfilter[1],6,6)); + reg53 = (reg53&~0x3f000)|(_SHIFTL(vfilter[2],12,6)); + reg53 = (reg53&~0xfc0000)|(_SHIFTL(vfilter[3],18,6)); + + reg54 = 0x54000000|(vfilter[4]&0x3f); + reg54 = (reg54&~0xfc0)|(_SHIFTL(vfilter[5],6,6)); + reg54 = (reg54&~0x3f000)|(_SHIFTL(vfilter[6],12,6)); + } + GX_LOAD_BP_REG(reg53); + GX_LOAD_BP_REG(reg54); +} + +void GX_SetDispCopyFrame2Field(u8 mode) +{ + __gx->dispCopyCntrl = (__gx->dispCopyCntrl&~0x3000)|(_SHIFTL(mode,12,2)); +} + +u32 GX_SetDispCopyYScale(f32 yscale) +{ + u32 ht,yScale = 0; + + yScale = ((u32)(256.0f/yscale))&0x1ff; + GX_LOAD_BP_REG(0x4e000000|yScale); + + __gx->dispCopyCntrl = (__gx->dispCopyCntrl&~0x400)|(_SHIFTL(((256-yScale)>0),10,1)); + ht = _SHIFTR(__gx->dispCopyWH,12,10)+1; + return __GX_GetNumXfbLines(ht,yScale); +} + +void GX_SetDispCopyDst(u16 wd,u16 ht) +{ + __gx->dispCopyDst = (__gx->dispCopyDst&~0x3ff)|(_SHIFTR(wd,4,10)); + __gx->dispCopyDst = (__gx->dispCopyDst&~0xff000000)|(_SHIFTL(0x4d,24,8)); +} + +void GX_SetDispCopySrc(u16 left,u16 top,u16 wd,u16 ht) +{ + __gx->dispCopyTL = (__gx->dispCopyTL&~0x00ffffff)|XY(left,top); + __gx->dispCopyTL = (__gx->dispCopyTL&~0xff000000)|(_SHIFTL(0x49,24,8)); + __gx->dispCopyWH = (__gx->dispCopyWH&~0x00ffffff)|XY((wd-1),(ht-1)); + __gx->dispCopyWH = (__gx->dispCopyWH&~0xff000000)|(_SHIFTL(0x4a,24,8)); +} + +void GX_CopyDisp(void *dest,u8 clear) +{ + u8 clflag; + u32 val; + + if(clear) { + val= (__gx->peZMode&~0xf)|0xf; + GX_LOAD_BP_REG(val); + val = (__gx->peCMode0&~0x3); + GX_LOAD_BP_REG(val); + } + + clflag = 0; + if(clear || (__gx->peCntrl&0x7)==0x0003) { + if(__gx->peCntrl&0x40) { + clflag = 1; + val = (__gx->peCntrl&~0x40); + GX_LOAD_BP_REG(val); + } + } + + GX_LOAD_BP_REG(__gx->dispCopyTL); // set source top + GX_LOAD_BP_REG(__gx->dispCopyWH); + + GX_LOAD_BP_REG(__gx->dispCopyDst); + + val = 0x4b000000|(_SHIFTR(MEM_VIRTUAL_TO_PHYSICAL(dest),5,24)); + GX_LOAD_BP_REG(val); + + __gx->dispCopyCntrl = (__gx->dispCopyCntrl&~0x800)|(_SHIFTL(clear,11,1)); + __gx->dispCopyCntrl = (__gx->dispCopyCntrl&~0x4000)|0x4000; + __gx->dispCopyCntrl = (__gx->dispCopyCntrl&~0xff000000)|(_SHIFTL(0x52,24,8)); + + GX_LOAD_BP_REG(__gx->dispCopyCntrl); + + if(clear) { + GX_LOAD_BP_REG(__gx->peZMode); + GX_LOAD_BP_REG(__gx->peCMode0); + } + if(clflag) GX_LOAD_BP_REG(__gx->peCntrl); +} + +void GX_CopyTex(void *dest,u8 clear) +{ + u8 clflag; + u32 val; + + if(clear) { + val = (__gx->peZMode&~0xf)|0xf; + GX_LOAD_BP_REG(val); + val = (__gx->peCMode0&~0x3); + GX_LOAD_BP_REG(val); + } + + clflag = 0; + val = __gx->peCntrl; + if(__gx->texCopyZTex && (val&0x7)!=0x0003) { + clflag = 1; + val = (val&~0x7)|0x0003; + } + if(clear || (val&0x7)==0x0003) { + if(val&0x40) { + clflag = 1; + val = (val&~0x40); + } + } + if(clflag) GX_LOAD_BP_REG(val); + + val = 0x4b000000|(_SHIFTR(MEM_VIRTUAL_TO_PHYSICAL(dest),5,24)); + + GX_LOAD_BP_REG(__gx->texCopyTL); + GX_LOAD_BP_REG(__gx->texCopyWH); + GX_LOAD_BP_REG(__gx->texCopyDst); + GX_LOAD_BP_REG(val); + + __gx->texCopyCntrl = (__gx->texCopyCntrl&~0x800)|(_SHIFTL(clear,11,1)); + __gx->texCopyCntrl = (__gx->texCopyCntrl&~0x4000); + __gx->texCopyCntrl = (__gx->texCopyCntrl&~0xff000000)|(_SHIFTL(0x52,24,8)); + GX_LOAD_BP_REG(__gx->texCopyCntrl); + + if(clear) { + GX_LOAD_BP_REG(__gx->peZMode); + GX_LOAD_BP_REG(__gx->peCMode0); + } + if(clflag) GX_LOAD_BP_REG(__gx->peCntrl); +} + +void GX_SetTexCopySrc(u16 left,u16 top,u16 wd,u16 ht) +{ + __gx->texCopyTL = (__gx->texCopyTL&~0x00ffffff)|XY(left,top); + __gx->texCopyTL = (__gx->texCopyTL&~0xff000000)|(_SHIFTL(0x49,24,8)); + __gx->texCopyWH = (__gx->texCopyWH&~0x00ffffff)|XY((wd-1),(ht-1)); + __gx->texCopyWH = (__gx->texCopyWH&~0xff000000)|(_SHIFTL(0x4a,24,8)); +} + +void GX_SetTexCopyDst(u16 wd,u16 ht,u32 fmt,u8 mipmap) +{ + u8 lfmt = fmt&0xf; + u32 xtiles,ytiles,zplanes; + + __GetImageTileCount(fmt,wd,ht,&xtiles,&ytiles,&zplanes); + __gx->texCopyDst = (__gx->texCopyDst&~0x3ff)|((xtiles*zplanes)&0x3ff); + + if(fmt==GX_TF_Z16) lfmt = 11; + if(fmt==GX_CTF_YUVA8 || (fmt>=GX_TF_I4 && fmttexCopyCntrl = (__gx->texCopyCntrl&~0x18000)|0x18000; + else __gx->texCopyCntrl = (__gx->texCopyCntrl&~0x18000)|0x10000; + + __gx->texCopyCntrl = (__gx->texCopyCntrl&~0x8)|(lfmt&0x8); + __gx->texCopyCntrl = (__gx->texCopyCntrl&~0x200)|(_SHIFTL(mipmap,9,1)); + __gx->texCopyCntrl = (__gx->texCopyCntrl&~0x70)|(_SHIFTL(lfmt,4,3)); + + __gx->texCopyDst = (__gx->texCopyDst&~0xff000000)|(_SHIFTL(0x4d,24,8)); + + __gx->texCopyZTex = ((fmt&_GX_TF_ZTF)==_GX_TF_ZTF); +} + +void GX_ClearBoundingBox() +{ + GX_LOAD_BP_REG(0x550003ff); + GX_LOAD_BP_REG(0x560003ff); +} + +void GX_BeginDispList(void *list,u32 size) +{ + struct __gxfifo *fifo; + + if(__gx->dirtyState) + __GX_SetDirtyState(); + + if(__gx->saveDLctx) + memcpy(_gx_saved_data,__gxregs,STRUCT_REGDEF_SIZE); + + fifo = (struct __gxfifo*)&_gx_dl_fifoobj; + fifo->buf_start = (u32)list; + fifo->buf_end = (u32)list + size - 4; + fifo->size = size; + + fifo->rd_ptr = (u32)list; + fifo->wt_ptr = (u32)list; + fifo->rdwt_dst = 0; + + __gx->gxFifoUnlinked = 1; + + GX_GetCPUFifo(&_gx_old_cpufifo); + GX_SetCPUFifo(&_gx_dl_fifoobj); + __GX_ResetWriteGatherPipe(); +} + +u32 GX_EndDispList() +{ + u32 level; + u8 wrap = 0; + + GX_GetCPUFifo(&_gx_dl_fifoobj); + GX_SetCPUFifo(&_gx_old_cpufifo); + + if(__gx->saveDLctx) { + _CPU_ISR_Disable(level); + memcpy(__gxregs,_gx_saved_data,STRUCT_REGDEF_SIZE); + _CPU_ISR_Restore(level); + } + + __gx->gxFifoUnlinked = 0; + + wrap = GX_GetFifoWrap(&_gx_dl_fifoobj); + if(wrap) return 0; + + return GX_GetFifoCount(&_gx_dl_fifoobj); +} + +void GX_CallDispList(void *list,u32 nbytes) +{ + if(__gx->dirtyState) + __GX_SetDirtyState(); + + if(!__gx->vcdClear) + __GX_SendFlushPrim(); + + wgPipe->U8 = 0x40; //call displaylist + wgPipe->U32 = MEM_VIRTUAL_TO_PHYSICAL(list); + wgPipe->U32 = nbytes; +} + +void GX_SetChanCtrl(s32 channel,u8 enable,u8 ambsrc,u8 matsrc,u8 litmask,u8 diff_fn,u8 attn_fn) +{ + u32 reg,difffn = (attn_fn==GX_AF_SPEC)?GX_DF_NONE:diff_fn; + u32 val = (matsrc&1)|(_SHIFTL(enable,1,1))|(_SHIFTL(litmask,2,4))|(_SHIFTL(ambsrc,6,1))|(_SHIFTL(difffn,7,2))|(_SHIFTL(((GX_AF_NONE-attn_fn)>0),9,1))|(_SHIFTL((attn_fn>0),10,1))|(_SHIFTL((_SHIFTR(litmask,4,4)),11,4)); + + reg = (channel&0x03); + __gx->chnCntrl[reg] = val; + __gx->dirtyState |= (0x1000<chnCntrl[2] = val; + __gx->dirtyState |= 0x5000; + } else { + __gx->chnCntrl[3] = val; + __gx->dirtyState |= 0xa000; + } +} + +void GX_SetChanAmbColor(s32 channel,GXColor color) +{ + u32 reg,val = (_SHIFTL(color.r,24,8))|(_SHIFTL(color.g,16,8))|(_SHIFTL(color.b,8,8))|0x00; + switch(channel) { + case GX_COLOR0: + reg = 0; + val |= (__gx->chnAmbColor[0]&0xff); + break; + case GX_COLOR1: + reg = 1; + val |= (__gx->chnAmbColor[1]&0xff); + break; + case GX_ALPHA0: + reg = 0; + val = ((__gx->chnAmbColor[0]&~0xff)|(color.a&0xff)); + break; + case GX_ALPHA1: + reg = 1; + val = ((__gx->chnAmbColor[1]&~0xff)|(color.a&0xff)); + break; + case GX_COLOR0A0: + reg = 0; + val |= (color.a&0xFF); + break; + case GX_COLOR1A1: + reg = 1; + val |= (color.a&0xFF); + break; + default: + return; + } + + __gx->chnAmbColor[reg] = val; + __gx->dirtyState |= (0x0100<chnMatColor[0]&0xff); + break; + case GX_COLOR1: + reg = 1; + val |= (__gx->chnMatColor[1]&0xff); + break; + case GX_ALPHA0: + reg = 0; + val = ((__gx->chnMatColor[0]&~0xff)|(color.a&0xff)); + break; + case GX_ALPHA1: + reg = 1; + val = ((__gx->chnMatColor[1]&~0xff)|(color.a&0xff)); + break; + case GX_COLOR0A0: + reg = 0; + val |= (color.a&0xFF); + break; + case GX_COLOR1A1: + reg = 1; + val |= (color.a&0xFF); + break; + default: + return; + } + + __gx->chnMatColor[reg] = val; + __gx->dirtyState |= (0x0400<=GX_VA_POS && attr<=GX_LIGHTARRAY) { + idx = attr-GX_VA_POS; + GX_LOAD_CP_REG((0xA0+idx),(u32)MEM_VIRTUAL_TO_PHYSICAL(ptr)); + GX_LOAD_CP_REG((0xB0+idx),(u32)stride); + } +} + +static __inline__ void __SETVCDATTR(u8 attr,u8 type) +{ + switch(attr) { + case GX_VA_PTNMTXIDX: + __gx->vcdLo = (__gx->vcdLo&~0x1)|(type&0x1); + break; + case GX_VA_TEX0MTXIDX: + __gx->vcdLo = (__gx->vcdLo&~0x2)|(_SHIFTL(type,1,1)); + break; + case GX_VA_TEX1MTXIDX: + __gx->vcdLo = (__gx->vcdLo&~0x4)|(_SHIFTL(type,2,1)); + break; + case GX_VA_TEX2MTXIDX: + __gx->vcdLo = (__gx->vcdLo&~0x8)|(_SHIFTL(type,3,1)); + break; + case GX_VA_TEX3MTXIDX: + __gx->vcdLo = (__gx->vcdLo&~0x10)|(_SHIFTL(type,4,1)); + break; + case GX_VA_TEX4MTXIDX: + __gx->vcdLo = (__gx->vcdLo&~0x20)|(_SHIFTL(type,5,1)); + break; + case GX_VA_TEX5MTXIDX: + __gx->vcdLo = (__gx->vcdLo&~0x40)|(_SHIFTL(type,6,1)); + break; + case GX_VA_TEX6MTXIDX: + __gx->vcdLo = (__gx->vcdLo&~0x80)|(_SHIFTL(type,7,1)); + break; + case GX_VA_TEX7MTXIDX: + __gx->vcdLo = (__gx->vcdLo&~0x100)|(_SHIFTL(type,8,1)); + break; + case GX_VA_POS: + __gx->vcdLo = (__gx->vcdLo&~0x600)|(_SHIFTL(type,9,2)); + break; + case GX_VA_NRM: + __gx->vcdLo = (__gx->vcdLo&~0x1800)|(_SHIFTL(type,11,2)); + __gx->vcdNrms = 1; + break; + case GX_VA_NBT: + __gx->vcdLo = (__gx->vcdLo&~0x1800)|(_SHIFTL(type,11,2)); + __gx->vcdNrms = 2; + break; + case GX_VA_CLR0: + __gx->vcdLo = (__gx->vcdLo&~0x6000)|(_SHIFTL(type,13,2)); + break; + case GX_VA_CLR1: + __gx->vcdLo = (__gx->vcdLo&~0x18000)|(_SHIFTL(type,15,2)); + break; + case GX_VA_TEX0: + __gx->vcdHi = (__gx->vcdHi&~0x3)|(type&0x3); + break; + case GX_VA_TEX1: + __gx->vcdHi = (__gx->vcdHi&~0xc)|(_SHIFTL(type,2,2)); + break; + case GX_VA_TEX2: + __gx->vcdHi = (__gx->vcdHi&~0x30)|(_SHIFTL(type,4,2)); + break; + case GX_VA_TEX3: + __gx->vcdHi = (__gx->vcdHi&~0xc0)|(_SHIFTL(type,6,2)); + break; + case GX_VA_TEX4: + __gx->vcdHi = (__gx->vcdHi&~0x300)|(_SHIFTL(type,8,2)); + break; + case GX_VA_TEX5: + __gx->vcdHi = (__gx->vcdHi&~0xc00)|(_SHIFTL(type,10,2)); + break; + case GX_VA_TEX6: + __gx->vcdHi = (__gx->vcdHi&~0x3000)|(_SHIFTL(type,12,2)); + break; + case GX_VA_TEX7: + __gx->vcdHi = (__gx->vcdHi&~0xc000)|(_SHIFTL(type,14,2)); + break; + } +} + +void GX_SetVtxDesc(u8 attr,u8 type) +{ + __SETVCDATTR(attr,type); + __gx->dirtyState |= 0x0008; +} + +void GX_SetVtxDescv(GXVtxDesc *attr_list) +{ + u32 i; + + if(!attr_list) return; + + for(i=0;idirtyState |= 0x0008; +} + +void GX_GetVtxDescv(GXVtxDesc *attr_list) +{ + u32 count; + + // Clear everything first + for(count=0;countvcdLo&0x1) { + attr_list[count].attr = GX_VA_PTNMTXIDX; + attr_list[count].type = __gx->vcdLo&0x1; + count++; + } + + if(__gx->vcdLo&0x2) { + attr_list[count].attr = GX_VA_TEX0MTXIDX; + attr_list[count].type = _SHIFTR(__gx->vcdLo&0x2,1,1); + count++; + } + + if(__gx->vcdLo&0x4) { + attr_list[count].attr = GX_VA_TEX1MTXIDX; + attr_list[count].type = _SHIFTR(__gx->vcdLo&0x4,2,1); + count++; + } + + if(__gx->vcdLo&0x8) { + attr_list[count].attr = GX_VA_TEX2MTXIDX; + attr_list[count].type = _SHIFTR(__gx->vcdLo&0x8,3,1); + count++; + } + + if(__gx->vcdLo&0x10) { + attr_list[count].attr = GX_VA_TEX3MTXIDX; + attr_list[count].type = _SHIFTR(__gx->vcdLo&0x10,4,1); + count++; + } + + if(__gx->vcdLo&0x20) { + attr_list[count].attr = GX_VA_TEX4MTXIDX; + attr_list[count].type = _SHIFTR(__gx->vcdLo&0x20,5,1); + count++; + } + + if(__gx->vcdLo&0x40) { + attr_list[count].attr = GX_VA_TEX5MTXIDX; + attr_list[count].type = _SHIFTR(__gx->vcdLo&0x40,6,1); + count++; + } + + if(__gx->vcdLo&0x80) { + attr_list[count].attr = GX_VA_TEX6MTXIDX; + attr_list[count].type = _SHIFTR(__gx->vcdLo&0x80,7,1); + count++; + } + + if(__gx->vcdLo&0x100) { + attr_list[count].attr = GX_VA_TEX7MTXIDX; + attr_list[count].type = _SHIFTR(__gx->vcdLo&0x100,8,1); + count++; + } + + if(__gx->vcdLo&0x600) { + attr_list[count].attr = GX_VA_POS; + attr_list[count].type = _SHIFTR(__gx->vcdLo&0x600,9,2); + count++; + } + + if(__gx->vcdLo&0x1800) { + if(__gx->vcdNrms==1) { + attr_list[count].attr = GX_VA_NRM; + attr_list[count].type = _SHIFTR(__gx->vcdLo&0x1800,11,2); + count++; + } else if(__gx->vcdNrms==2){ + attr_list[count].attr = GX_VA_NBT; + attr_list[count].type = _SHIFTR(__gx->vcdLo&0x1800,11,2); + count++; + } + } + + if(__gx->vcdLo&0x6000) { + attr_list[count].attr = GX_VA_CLR0; + attr_list[count].type = _SHIFTR(__gx->vcdLo&0x6000,13,2); + count++; + } + + if(__gx->vcdLo&0x18000) { + attr_list[count].attr = GX_VA_CLR1; + attr_list[count].type = _SHIFTR(__gx->vcdLo&0x18000,15,2); + count++; + } + + if(__gx->vcdHi&0x3) { + attr_list[count].attr = GX_VA_TEX0; + attr_list[count].type = __gx->vcdHi&0x3; + count++; + } + + if(__gx->vcdHi&0xc) { + attr_list[count].attr = GX_VA_TEX1; + attr_list[count].type = _SHIFTR(__gx->vcdHi&0xc,2,2); + count++; + } + + if(__gx->vcdHi&0x30) { + attr_list[count].attr = GX_VA_TEX2; + attr_list[count].type = _SHIFTR(__gx->vcdHi&0x30,4,2); + count++; + } + + if(__gx->vcdHi&0xc0) { + attr_list[count].attr = GX_VA_TEX3; + attr_list[count].type = _SHIFTR(__gx->vcdHi&0xc0,6,2); + count++; + } + + if(__gx->vcdHi&0x300) { + attr_list[count].attr = GX_VA_TEX4; + attr_list[count].type = _SHIFTR(__gx->vcdHi&0x300,8,2); + count++; + } + + if(__gx->vcdHi&0xc00) { + attr_list[count].attr = GX_VA_TEX5; + attr_list[count].type = _SHIFTR(__gx->vcdHi&0xc00,10,2); + count++; + } + + if(__gx->vcdHi&0x3000) { + attr_list[count].attr = GX_VA_TEX6; + attr_list[count].type = _SHIFTR(__gx->vcdHi&0x3000,12,2); + count++; + } + + if(__gx->vcdHi&0xc000) { + attr_list[count].attr = GX_VA_TEX7; + attr_list[count].type = _SHIFTR(__gx->vcdHi&0xc000,14,2); + count++; + } +} + +static __inline__ void __SETVCDFMT(u8 vtxfmt,u32 vtxattr,u32 comptype,u32 compsize,u32 frac) +{ + u8 vat = (vtxfmt&7); + + if(vtxattr==GX_VA_POS && (comptype==GX_POS_XY || comptype==GX_POS_XYZ) + && (compsize>=GX_U8 && compsize<=GX_F32)) { + __gx->VAT0reg[vat] = (__gx->VAT0reg[vat]&~0x1)|(comptype&1); + __gx->VAT0reg[vat] = (__gx->VAT0reg[vat]&~0xe)|(_SHIFTL(compsize,1,3)); + __gx->VAT0reg[vat] = (__gx->VAT0reg[vat]&~0x1f0)|(_SHIFTL(frac,4,5)); + if(frac) + __gx->VAT0reg[vat] = (__gx->VAT0reg[vat]&~0x40000000)|0x40000000; + } else if(vtxattr==GX_VA_NRM && comptype==GX_NRM_XYZ + && (compsize==GX_S8 || compsize==GX_S16 || compsize==GX_F32)) { + __gx->VAT0reg[vat] = (__gx->VAT0reg[vat]&~0x200); + __gx->VAT0reg[vat] = (__gx->VAT0reg[vat]&~0x1C00)|(_SHIFTL(compsize,10,3)); + __gx->VAT0reg[vat] = (__gx->VAT0reg[vat]&~0x80000000); + } else if(vtxattr==GX_VA_NBT && (comptype==GX_NRM_NBT || comptype==GX_NRM_NBT3) + && (compsize==GX_S8 || compsize==GX_S16 || compsize==GX_F32)) { + __gx->VAT0reg[vat] = (__gx->VAT0reg[vat]&~0x200)|0x200; + __gx->VAT0reg[vat] = (__gx->VAT0reg[vat]&~0x1C00)|(_SHIFTL(compsize,10,3)); + if(comptype==GX_NRM_NBT3) + __gx->VAT0reg[vat] = (__gx->VAT0reg[vat]&~0x80000000)|0x80000000; + } else if(vtxattr==GX_VA_CLR0 && (comptype==GX_CLR_RGB || comptype==GX_CLR_RGBA) + && (compsize>=GX_RGB565 && compsize<=GX_RGBA8)) { + __gx->VAT0reg[vat] = (__gx->VAT0reg[vat]&~0x2000)|(_SHIFTL(comptype,13,1)); + __gx->VAT0reg[vat] = (__gx->VAT0reg[vat]&~0x1C000)|(_SHIFTL(compsize,14,3)); + } else if(vtxattr==GX_VA_CLR1 && (comptype==GX_CLR_RGB || comptype==GX_CLR_RGBA) + && (compsize>=GX_RGB565 && compsize<=GX_RGBA8)) { + __gx->VAT0reg[vat] = (__gx->VAT0reg[vat]&~0x20000)|(_SHIFTL(comptype,17,1)); + __gx->VAT0reg[vat] = (__gx->VAT0reg[vat]&~0x1C0000)|(_SHIFTL(compsize,18,3)); + } else if(vtxattr==GX_VA_TEX0 && (comptype==GX_TEX_S || comptype==GX_TEX_ST) + && (compsize>=GX_U8 && compsize<=GX_F32)) { + __gx->VAT0reg[vat] = (__gx->VAT0reg[vat]&~0x200000)|(_SHIFTL(comptype,21,1)); + __gx->VAT0reg[vat] = (__gx->VAT0reg[vat]&~0x1C00000)|(_SHIFTL(compsize,22,3)); + __gx->VAT0reg[vat] = (__gx->VAT0reg[vat]&~0x3E000000)|(_SHIFTL(frac,25,5)); + if(frac) + __gx->VAT0reg[vat] = (__gx->VAT0reg[vat]&~0x40000000)|0x40000000; + } else if(vtxattr==GX_VA_TEX1 && (comptype==GX_TEX_S || comptype==GX_TEX_ST) + && (compsize>=GX_U8 && compsize<=GX_F32)) { + __gx->VAT1reg[vat] = (__gx->VAT1reg[vat]&~0x1)|(comptype&1); + __gx->VAT1reg[vat] = (__gx->VAT1reg[vat]&~0xe)|(_SHIFTL(compsize,1,3)); + __gx->VAT1reg[vat] = (__gx->VAT1reg[vat]&~0x1F0)|(_SHIFTL(frac,4,5)); + if(frac) + __gx->VAT0reg[vat] = (__gx->VAT0reg[vat]&~0x40000000)|0x40000000; + } else if(vtxattr==GX_VA_TEX2 && (comptype==GX_TEX_S || comptype==GX_TEX_ST) + && (compsize>=GX_U8 && compsize<=GX_F32)) { + __gx->VAT1reg[vat] = (__gx->VAT1reg[vat]&~0x200)|(_SHIFTL(comptype,9,1)); + __gx->VAT1reg[vat] = (__gx->VAT1reg[vat]&~0x1C00)|(_SHIFTL(compsize,10,3)); + __gx->VAT1reg[vat] = (__gx->VAT1reg[vat]&~0x3E000)|(_SHIFTL(frac,13,5)); + if(frac) + __gx->VAT0reg[vat] = (__gx->VAT0reg[vat]&~0x40000000)|0x40000000; + } else if(vtxattr==GX_VA_TEX3 && (comptype==GX_TEX_S || comptype==GX_TEX_ST) + && (compsize>=GX_U8 && compsize<=GX_F32)) { + __gx->VAT1reg[vat] = (__gx->VAT1reg[vat]&~0x40000)|(_SHIFTL(comptype,18,1)); + __gx->VAT1reg[vat] = (__gx->VAT1reg[vat]&~0x380000)|(_SHIFTL(compsize,19,3)); + __gx->VAT1reg[vat] = (__gx->VAT1reg[vat]&~0x7C00000)|(_SHIFTL(frac,22,5)); + if(frac) + __gx->VAT0reg[vat] = (__gx->VAT0reg[vat]&~0x40000000)|0x40000000; + } else if(vtxattr==GX_VA_TEX4 && (comptype==GX_TEX_S || comptype==GX_TEX_ST) + && (compsize>=GX_U8 && compsize<=GX_F32)) { + __gx->VAT1reg[vat] = (__gx->VAT1reg[vat]&~0x8000000)|(_SHIFTL(comptype,27,1)); + __gx->VAT1reg[vat] = (__gx->VAT1reg[vat]&~0x70000000)|(_SHIFTL(compsize,28,3)); + __gx->VAT2reg[vat] = (__gx->VAT2reg[vat]&~0x1f)|(frac&0x1f); + if(frac) + __gx->VAT0reg[vat] = (__gx->VAT0reg[vat]&~0x40000000)|0x40000000; + } else if(vtxattr==GX_VA_TEX5 && (comptype==GX_TEX_S || comptype==GX_TEX_ST) + && (compsize>=GX_U8 && compsize<=GX_F32)) { + __gx->VAT2reg[vat] = (__gx->VAT2reg[vat]&~0x20)|(_SHIFTL(comptype,5,1)); + __gx->VAT2reg[vat] = (__gx->VAT2reg[vat]&~0x1C0)|(_SHIFTL(compsize,6,3)); + __gx->VAT2reg[vat] = (__gx->VAT2reg[vat]&~0x3E00)|(_SHIFTL(frac,9,5)); + if(frac) + __gx->VAT0reg[vat] = (__gx->VAT0reg[vat]&~0x40000000)|0x40000000; + } else if(vtxattr==GX_VA_TEX6 && (comptype==GX_TEX_S || comptype==GX_TEX_ST) + && (compsize>=GX_U8 && compsize<=GX_F32)) { + __gx->VAT2reg[vat] = (__gx->VAT2reg[vat]&~0x4000)|(_SHIFTL(comptype,14,1)); + __gx->VAT2reg[vat] = (__gx->VAT2reg[vat]&~0x38000)|(_SHIFTL(compsize,15,3)); + __gx->VAT2reg[vat] = (__gx->VAT2reg[vat]&~0x7C0000)|(_SHIFTL(frac,18,5)); + if(frac) + __gx->VAT0reg[vat] = (__gx->VAT0reg[vat]&~0x40000000)|0x40000000; + } else if(vtxattr==GX_VA_TEX7 && (comptype==GX_TEX_S || comptype==GX_TEX_ST) + && (compsize>=GX_U8 && compsize<=GX_F32)) { + __gx->VAT2reg[vat] = (__gx->VAT2reg[vat]&~0x800000)|(_SHIFTL(comptype,23,1)); + __gx->VAT2reg[vat] = (__gx->VAT2reg[vat]&~0x7000000)|(_SHIFTL(compsize,24,3)); + __gx->VAT2reg[vat] = (__gx->VAT2reg[vat]&~0xF8000000)|(_SHIFTL(frac,27,5)); + if(frac) + __gx->VAT0reg[vat] = (__gx->VAT0reg[vat]&~0x40000000)|0x40000000; + } +} + +void GX_SetVtxAttrFmt(u8 vtxfmt,u32 vtxattr,u32 comptype,u32 compsize,u32 frac) +{ + __SETVCDFMT(vtxfmt,vtxattr,comptype,compsize,frac); + __gx->VATTable |= (1<dirtyState |= 0x0010; +} + +void GX_SetVtxAttrFmtv(u8 vtxfmt,GXVtxAttrFmt *attr_list) +{ + u32 i; + + for(i=0;iVATTable |= (1<dirtyState |= 0x0010; +} + +void GX_Begin(u8 primitve,u8 vtxfmt,u16 vtxcnt) +{ + u8 reg = primitve|(vtxfmt&7); + + if(__gx->dirtyState) + __GX_SetDirtyState(); + + wgPipe->U8 = reg; + wgPipe->U16 = vtxcnt; +} + +void GX_SetTexCoordGen(u16 texcoord,u32 tgen_typ,u32 tgen_src,u32 mtxsrc) +{ + GX_SetTexCoordGen2(texcoord,tgen_typ,tgen_src,mtxsrc,GX_FALSE,GX_DTTIDENTITY); +} + +void GX_SetTexCoordGen2(u16 texcoord,u32 tgen_typ,u32 tgen_src,u32 mtxsrc,u32 normalize,u32 postmtx) +{ + u32 txc; + u32 texcoords; + u8 vtxrow,stq; + + if(texcoord>=GX_MAXCOORD) return; + + stq = 0; + switch(tgen_src) { + case GX_TG_POS: + vtxrow = 0; + stq = 1; + break; + case GX_TG_NRM: + vtxrow = 1; + stq = 1; + break; + case GX_TG_BINRM: + vtxrow = 3; + stq = 1; + break; + case GX_TG_TANGENT: + vtxrow = 4; + stq = 1; + break; + case GX_TG_COLOR0: + vtxrow = 2; + break; + case GX_TG_COLOR1: + vtxrow = 2; + break; + case GX_TG_TEX0: + vtxrow = 5; + break; + case GX_TG_TEX1: + vtxrow = 6; + break; + case GX_TG_TEX2: + vtxrow = 7; + break; + case GX_TG_TEX3: + vtxrow = 8; + break; + case GX_TG_TEX4: + vtxrow = 9; + break; + case GX_TG_TEX5: + vtxrow = 10; + break; + case GX_TG_TEX6: + vtxrow = 11; + break; + case GX_TG_TEX7: + vtxrow = 12; + break; + default: + vtxrow = 5; + break; + } + + texcoords = 0; + txc = (texcoord&7); + if((tgen_typ==GX_TG_MTX3x4 || tgen_typ==GX_TG_MTX2x4)) + { + if(tgen_typ==GX_TG_MTX3x4) texcoords = 0x02; + + texcoords |= (_SHIFTL(stq,2,1)); + texcoords |= (_SHIFTL(vtxrow,7,5)); + } else if((tgen_typ>=GX_TG_BUMP0 && tgen_typ<=GX_TG_BUMP7)) + { + tgen_src -= GX_TG_TEXCOORD0; + tgen_typ -= GX_TG_BUMP0; + + texcoords = 0x10; + texcoords |= (_SHIFTL(stq,2,1)); + texcoords |= (_SHIFTL(vtxrow,7,5)); + texcoords |= (_SHIFTL(tgen_src,12,3)); + texcoords |= (_SHIFTL(tgen_typ,15,3)); + } else if(tgen_typ==GX_TG_SRTG) { + if(tgen_src==GX_TG_COLOR0) texcoords = 0x20; + else if(tgen_src==GX_TG_COLOR1) texcoords = 0x30; + texcoords |= (_SHIFTL(stq,2,1)); + texcoords |= (_SHIFTL(2,7,5)); + } + + postmtx -= GX_DTTMTX0; + __gx->texCoordGen[txc] = texcoords; + __gx->texCoordGen2[txc] = ((_SHIFTL(normalize,8,1))|(postmtx&0x3f)); + + switch(texcoord) { + case GX_TEXCOORD0: + __gx->mtxIdxLo = (__gx->mtxIdxLo&~0xfc0)|(_SHIFTL(mtxsrc,6,6)); + break; + case GX_TEXCOORD1: + __gx->mtxIdxLo = (__gx->mtxIdxLo&~0x3f000)|(_SHIFTL(mtxsrc,12,6)); + break; + case GX_TEXCOORD2: + __gx->mtxIdxLo = (__gx->mtxIdxLo&~0xfc0000)|(_SHIFTL(mtxsrc,18,6)); + break; + case GX_TEXCOORD3: + __gx->mtxIdxLo = (__gx->mtxIdxLo&~0x3f000000)|(_SHIFTL(mtxsrc,24,6)); + break; + case GX_TEXCOORD4: + __gx->mtxIdxHi = (__gx->mtxIdxHi&~0x3f)|(mtxsrc&0x3f); + break; + case GX_TEXCOORD5: + __gx->mtxIdxHi = (__gx->mtxIdxHi&~0xfc0)|(_SHIFTL(mtxsrc,6,6)); + break; + case GX_TEXCOORD6: + __gx->mtxIdxHi = (__gx->mtxIdxHi&~0x3f000)|(_SHIFTL(mtxsrc,12,6)); + break; + case GX_TEXCOORD7: + __gx->mtxIdxHi = (__gx->mtxIdxHi&~0xfc0000)|(_SHIFTL(mtxsrc,18,6)); + break; + } + __gx->dirtyState |= (0x04000000|(0x00010000<U8 = 0x20; + wgPipe->U32 = ((_SHIFTL(mtxidx,16,16))|0xb000|(_SHIFTL(pnidx,2,8))); +} + +void GX_LoadNrmMtxImm(Mtx mt,u32 pnidx) +{ + GX_LOAD_XF_REGS((0x0400|(pnidx*3)),9); + WriteMtxPS3x3from4x3(mt,(void*)wgPipe); +} + +void GX_LoadNrmMtxImm3x3(Mtx33 mt,u32 pnidx) +{ + GX_LOAD_XF_REGS((0x0400|(pnidx*3)),9); + WriteMtxPS3x3(mt,(void*)wgPipe); +} + +void GX_LoadNrmMtxIdx3x3(u16 mtxidx,u32 pnidx) +{ + wgPipe->U8 = 0x28; + wgPipe->U32 = ((_SHIFTL(mtxidx,16,16))|0x8000|(0x0400|(pnidx*3))); +} + +void GX_LoadTexMtxImm(Mtx mt,u32 texidx,u8 type) +{ + u32 addr = 0; + u32 rows = (type==GX_MTX2x4)?2:3; + + if(texidxU8 = 0x30; + wgPipe->U32 = ((_SHIFTL(mtxidx,16,16))|(_SHIFTL(size,12,4))|addr); +} + +void GX_SetCurrentMtx(u32 mtx) +{ + __gx->mtxIdxLo = (__gx->mtxIdxLo&~0x3f)|(mtx&0x3f); + __gx->dirtyState |= 0x04000000; +} + +void GX_SetNumTexGens(u32 nr) +{ + __gx->genMode = (__gx->genMode&~0xf)|(nr&0xf); + __gx->dirtyState |= 0x02000004; +} + +void GX_InvVtxCache() +{ + wgPipe->U8 = 0x48; // vertex cache weg +} + +void GX_SetZMode(u8 enable,u8 func,u8 update_enable) +{ + __gx->peZMode = (__gx->peZMode&~0x1)|(enable&1); + __gx->peZMode = (__gx->peZMode&~0xe)|(_SHIFTL(func,1,3)); + __gx->peZMode = (__gx->peZMode&~0x10)|(_SHIFTL(update_enable,4,1)); + GX_LOAD_BP_REG(__gx->peZMode); +} + +u32 GX_GetTexObjFmt(GXTexObj *obj) +{ + return ((struct __gx_texobj*)obj)->tex_fmt; +} + +u32 GX_GetTexObjMipMap(GXTexObj *obj) +{ + return (((struct __gx_texobj*)obj)->tex_flag&0x01); +} +void* GX_GetTexObjData(GXTexObj *obj) +{ + return (void*)(_SHIFTL(((struct __gx_texobj*)obj)->tex_maddr & 0x00ffffff,5,24)); +} + +u8 GX_GetTexObjWrapS(GXTexObj* obj) +{ + return ((struct __gx_texobj*)obj)->tex_filt & 0x03; +} + +u8 GX_GetTexObjWrapT(GXTexObj* obj) +{ + return _SHIFTR(((struct __gx_texobj*)obj)->tex_filt & 0x0c, 2, 2); +} + +u16 GX_GetTexObjHeight(GXTexObj* obj) +{ + return _SHIFTR(((struct __gx_texobj*)obj)->tex_size & 0xffc00, 10, 10) + 1; +} + +u16 GX_GetTexObjWidth(GXTexObj* obj) +{ + return (((struct __gx_texobj*)obj)->tex_size & 0x3ff) + 1; +} + + +void GX_GetTexObjAll(GXTexObj* obj, void** image_ptr, u16* width, u16* height, + u8* format, u8* wrap_s, u8* wrap_t, u8* mipmap) +{ + struct __gx_texobj *ptr = (struct __gx_texobj*)obj; + *image_ptr = (void*)(_SHIFTL(ptr->tex_maddr & 0x00ffffff,5,24)); + *width = (ptr->tex_size & 0x3ff) + 1; + *height = _SHIFTR(ptr->tex_size & 0xffc00, 10, 10) + 1; + *format = ptr->tex_fmt; + *wrap_s = ptr->tex_filt & 0x03; + *wrap_t = _SHIFTR(ptr->tex_filt & 0x0c, 2, 2); + *mipmap = ptr->tex_flag & 0x01; +} +u32 GX_GetTexBufferSize(u16 wd,u16 ht,u32 fmt,u8 mipmap,u8 maxlod) +{ + u32 xshift,yshift,xtiles,ytiles,bitsize,size; + + switch(fmt) { + case GX_TF_I4: + case GX_TF_CMPR: + case GX_CTF_R4: + case GX_CTF_RA4: + case GX_CTF_Z4: + xshift = 3; + yshift = 3; + break; + case GX_TF_Z8: + case GX_TF_I8: + case GX_TF_IA4: + case GX_CTF_A8: + case GX_CTF_R8: + case GX_CTF_G8: + case GX_CTF_B8: + case GX_CTF_RG8: + case GX_CTF_GB8: + case GX_CTF_Z8M: + case GX_CTF_Z8L: + xshift = 3; + yshift = 2; + break; + case GX_TF_IA8: + case GX_TF_Z16: + case GX_TF_Z24X8: + case GX_TF_RGB565: + case GX_TF_RGB5A3: + case GX_TF_RGBA8: + case GX_CTF_Z16L: + case GX_CTF_RA8: + xshift = 2; + yshift = 2; + break; + default: + xshift = 2; + yshift = 2; + break; + } + + bitsize = 32; + if(fmt==GX_TF_RGBA8 || fmt==GX_TF_Z24X8) bitsize = 64; + + size = 0; + if(mipmap) { + u32 cnt = (maxlod&0xff); + while(cnt) { + u32 w = wd&0xffff; + u32 h = ht&0xffff; + xtiles = ((w+(1<>xshift; + ytiles = ((h+(1<>yshift; + if(cnt==0) return size; + + size += ((xtiles*ytiles)*bitsize); + if(w==0x0001 && h==0x0001) return size; + if(wd>0x0001) wd = (w>>1); + else wd = 0x0001; + if(ht>0x0001) ht = (h>>1); + else ht = 0x0001; + + --cnt; + } + return size; + } + + wd &= 0xffff; + xtiles = (wd+((1<>xshift; + + ht &= 0xffff; + ytiles = (ht+((1<>yshift; + + size = ((xtiles*ytiles)*bitsize); + + return size; +} + +void GX_InitTexCacheRegion(GXTexRegion *region,u8 is32bmipmap,u32 tmem_even,u8 size_even,u32 tmem_odd,u8 size_odd) +{ + u32 sze = 0; + struct __gx_texregion *ptr = (struct __gx_texregion*)region; + + switch(size_even) { + case GX_TEXCACHE_32K: + sze = 3; + break; + case GX_TEXCACHE_128K: + sze = 4; + break; + case GX_TEXCACHE_512K: + sze = 5; + break; + default: + sze = 3; + break; + } + ptr->tmem_even = 0; + ptr->tmem_even = (ptr->tmem_even&~0x7fff)|(_SHIFTR(tmem_even,5,15)); + ptr->tmem_even = (ptr->tmem_even&~0x38000)|(_SHIFTL(sze,15,3)); + ptr->tmem_even = (ptr->tmem_even&~0x1C0000)|(_SHIFTL(sze,18,3)); + + switch(size_odd) { + case GX_TEXCACHE_32K: + sze = 3; + break; + case GX_TEXCACHE_128K: + sze = 4; + break; + case GX_TEXCACHE_512K: + sze = 5; + break; + default: + sze = 3; + break; + } + ptr->tmem_odd = 0; + ptr->tmem_odd = (ptr->tmem_odd&~0x7fff)|(_SHIFTR(tmem_odd,5,15)); + ptr->tmem_odd = (ptr->tmem_odd&~0x38000)|(_SHIFTL(sze,15,3)); + ptr->tmem_odd = (ptr->tmem_odd&~0x1C0000)|(_SHIFTL(sze,18,3)); + + ptr->ismipmap = is32bmipmap; + ptr->iscached = 1; +} + +void GX_InitTexPreloadRegion(GXTexRegion *region,u32 tmem_even,u32 size_even,u32 tmem_odd,u32 size_odd) +{ + struct __gx_texregion *ptr = (struct __gx_texregion*)region; + + ptr->tmem_even = 0; + ptr->tmem_even = (ptr->tmem_even&~0x7FFF)|(_SHIFTR(tmem_even,5,15)); + ptr->tmem_even = (ptr->tmem_even&~0x200000)|0x200000; + + ptr->tmem_odd = 0; + ptr->tmem_odd = (ptr->tmem_odd&~0x7FFF)|(_SHIFTR(tmem_odd,5,15)); + + ptr->size_even = _SHIFTR(size_even,5,16); + ptr->size_odd = _SHIFTR(size_odd,5,16); + + ptr->ismipmap = 0; + ptr->iscached = 0; +} + +void GX_InitTlutRegion(GXTlutRegion *region,u32 tmem_addr,u8 tlut_sz) +{ + struct __gx_tlutregion *ptr = (struct __gx_tlutregion*)region; + + tmem_addr -= 0x80000; + + ptr->tmem_addr_conf = 0; + ptr->tmem_addr_conf = (ptr->tmem_addr_conf&~0x3ff)|(_SHIFTR(tmem_addr,9,10)); + ptr->tmem_addr_conf = (ptr->tmem_addr_conf&~0x1FFC00)|(_SHIFTL(tlut_sz,10,10)); + ptr->tmem_addr_conf = (ptr->tmem_addr_conf&~0xff000000)|(_SHIFTL(0x65,24,8)); +} + +void GX_InitTexObj(GXTexObj *obj,void *img_ptr,u16 wd,u16 ht,u8 fmt,u8 wrap_s,u8 wrap_t,u8 mipmap) +{ + u32 nwd,nht; + u32 xshift,yshift; + struct __gx_texobj *ptr = (struct __gx_texobj*)obj; + + if(!obj) return; + + memset(obj,0,sizeof(GXTexObj)); + + ptr->tex_filt = (ptr->tex_filt&~0x03)|(wrap_s&3); + ptr->tex_filt = (ptr->tex_filt&~0x0c)|(_SHIFTL(wrap_t,2,2)); + ptr->tex_filt = (ptr->tex_filt&~0x10)|0x10; + + if(mipmap) { + ptr->tex_flag |= 0x01; + if(fmt==GX_TF_CI4 || fmt==GX_TF_CI8 || fmt==GX_TF_CI14) + ptr->tex_filt = (ptr->tex_filt&~0xe0)|0x00a0; + else + ptr->tex_filt = (ptr->tex_filt&~0xe0)|0x00c0; + } else + ptr->tex_filt= (ptr->tex_filt&~0xE0)|0x0080; + + ptr->tex_fmt = fmt; + ptr->tex_size = (ptr->tex_size&~0x3ff)|((wd-1)&0x3ff); + ptr->tex_size = (ptr->tex_size&~0xFFC00)|(_SHIFTL((ht-1),10,10)); + ptr->tex_size = (ptr->tex_size&~0xF00000)|(_SHIFTL(fmt,20,4)); + ptr->tex_maddr = (ptr->tex_maddr&~0x00ffffff)|(_SHIFTR(MEM_VIRTUAL_TO_PHYSICAL(img_ptr),5,24)); + + switch(fmt) { + case GX_TF_I4: + case GX_TF_CI4: + xshift = 3; + yshift = 3; + ptr->tex_tile_type = 1; + break; + case GX_TF_I8: + case GX_TF_IA4: + case GX_TF_CI8: + xshift = 3; + yshift = 2; + ptr->tex_tile_type = 2; + break; + case GX_TF_IA8: + case GX_TF_RGB565: + case GX_TF_RGB5A3: + case GX_TF_RGBA8: + xshift = 2; + yshift = 2; + ptr->tex_tile_type = 2; + break; + case GX_TF_CI14: + xshift = 2; + yshift = 2; + ptr->tex_tile_type = 3; + break; + case GX_TF_CMPR: + xshift = 3; + yshift = 3; + ptr->tex_tile_type = 0; + break; + default: + xshift = 2; + yshift = 2; + ptr->tex_tile_type = 2; + break; + } + + nwd = ((wd+(1<>xshift; + nht = ((ht+(1<>yshift; + ptr->tex_tile_cnt = (nwd*nht)&0x7fff; + + ptr->tex_flag |= 0x0002; +} + +void GX_InitTexObjCI(GXTexObj *obj,void *img_ptr,u16 wd,u16 ht,u8 fmt,u8 wrap_s,u8 wrap_t,u8 mipmap,u32 tlut_name) +{ + struct __gx_texobj *ptr = (struct __gx_texobj*)obj; + + GX_InitTexObj(obj,img_ptr,wd,ht,fmt,wrap_s,wrap_t,mipmap); + ptr->tex_flag &= ~0x02; + ptr->tex_tlut = tlut_name; +} + +void GX_InitTexObjLOD(GXTexObj *obj,u8 minfilt,u8 magfilt,f32 minlod,f32 maxlod,f32 lodbias,u8 biasclamp,u8 edgelod,u8 maxaniso) +{ + struct __gx_texobj *ptr = (struct __gx_texobj*)obj; + static u8 GX2HWFiltConv[] = {0x00,0x04,0x01,0x05,0x02,0x06,0x00,0x00}; + //static u8 HW2GXFiltConv[] = {0x00,0x02,0x04,0x00,0x01,0x03,0x05,0x00}; + + if(lodbias<-4.0f) lodbias = -4.0f; + else if(lodbias==4.0f) lodbias = 3.99f; + + ptr->tex_filt = (ptr->tex_filt&~0x1fe00)|(_SHIFTL(((u32)(32.0f*lodbias)),9,8)); + ptr->tex_filt = (ptr->tex_filt&~0x10)|(_SHIFTL((magfilt==GX_LINEAR?1:0),4,1)); + ptr->tex_filt = (ptr->tex_filt&~0xe0)|(_SHIFTL(GX2HWFiltConv[minfilt],5,3)); + ptr->tex_filt = (ptr->tex_filt&~0x100)|(_SHIFTL(!(edgelod&0xff),8,1)); + ptr->tex_filt = (ptr->tex_filt&~0x180000)|(_SHIFTL(maxaniso,19,2)); + ptr->tex_filt = (ptr->tex_filt&~0x200000)|(_SHIFTL(biasclamp,21,1)); + + if(minlod<0.0f) minlod = 0.0f; + else if(minlod>10.0f) minlod = 10.0f; + + if(maxlod<0.0f) maxlod = 0.0f; + else if(maxlod>10.0f) maxlod = 10.0f; + + ptr->tex_lod = (ptr->tex_lod&~0xff)|(((u32)(16.0f*minlod))&0xff); + ptr->tex_lod = (ptr->tex_lod&~0xff00)|(_SHIFTL(((u32)(16.0f*maxlod)),8,8)); +} + +void GX_InitTexObjData(GXTexObj *obj,void *img_ptr) +{ + struct __gx_texobj *ptr = (struct __gx_texobj*)obj; + ptr->tex_maddr = (ptr->tex_maddr&~0x00ffffff)|(_SHIFTR(MEM_VIRTUAL_TO_PHYSICAL(img_ptr),5,24)); +} + +void GX_InitTexObjTlut(GXTexObj *obj,u32 tlut_name) +{ + ((struct __gx_texobj*)obj)->tex_tlut = tlut_name; +} + +void GX_InitTexObjWrapMode(GXTexObj *obj,u8 wrap_s,u8 wrap_t) +{ + struct __gx_texobj *ptr = (struct __gx_texobj*)obj; + + ptr->tex_filt = (ptr->tex_filt&~0x03)|(wrap_s&3); + ptr->tex_filt = (ptr->tex_filt&~0x0c)|(_SHIFTL(wrap_t,2,2)); +} + +void GX_InitTexObjFilterMode(GXTexObj *obj,u8 minfilt,u8 magfilt) +{ + struct __gx_texobj *ptr = (struct __gx_texobj*)obj; + static u8 GX2HWFiltConv[] = {0x00,0x04,0x01,0x05,0x02,0x06,0x00,0x00}; + + ptr->tex_filt = (ptr->tex_filt&~0x10)|(_SHIFTL((magfilt==GX_LINEAR?1:0),4,1)); + ptr->tex_filt = (ptr->tex_filt&~0xe0)|(_SHIFTL(GX2HWFiltConv[minfilt],5,3)); +} + +void GX_InitTexObjMinLOD(GXTexObj *obj,f32 minlod) +{ + struct __gx_texobj *ptr = (struct __gx_texobj*)obj; + + if(minlod<0.0f) minlod = 0.0f; + else if(minlod>10.0f) minlod = 10.0f; + + ptr->tex_lod = (ptr->tex_lod&~0xff)|(((u32)(16.0f*minlod))&0xff); +} + +void GX_InitTexObjMaxLOD(GXTexObj *obj,f32 maxlod) +{ + struct __gx_texobj *ptr = (struct __gx_texobj*)obj; + + if(maxlod<0.0f) maxlod = 0.0f; + else if(maxlod>10.0f) maxlod = 10.0f; + + ptr->tex_lod = (ptr->tex_lod&~0xff00)|(_SHIFTL(((u32)(16.0f*maxlod)),8,8)); +} + +void GX_InitTexObjLODBias(GXTexObj *obj,f32 lodbias) +{ + struct __gx_texobj *ptr = (struct __gx_texobj*)obj; + + if(lodbias<-4.0f) lodbias = -4.0f; + else if(lodbias==4.0f) lodbias = 3.99f; + + ptr->tex_filt = (ptr->tex_filt&~0x1fe00)|(_SHIFTL(((u32)(32.0f*lodbias)),9,8)); +} + +void GX_InitTexObjBiasClamp(GXTexObj *obj,u8 biasclamp) +{ + struct __gx_texobj *ptr = (struct __gx_texobj*)obj; + ptr->tex_filt = (ptr->tex_filt&~0x200000)|(_SHIFTL(biasclamp,21,1)); +} + +void GX_InitTexObjEdgeLOD(GXTexObj *obj,u8 edgelod) +{ + struct __gx_texobj *ptr = (struct __gx_texobj*)obj; + ptr->tex_filt = (ptr->tex_filt&~0x100)|(_SHIFTL(!(edgelod&0xff),8,1)); +} + +void GX_InitTexObjMaxAniso(GXTexObj *obj,u8 maxaniso) +{ + struct __gx_texobj *ptr = (struct __gx_texobj*)obj; + ptr->tex_filt = (ptr->tex_filt&~0x180000)|(_SHIFTL(maxaniso,19,2)); +} + +void GX_InitTexObjUserData(GXTexObj *obj,void *userdata) +{ + struct __gx_texobj *ptr = (struct __gx_texobj*)obj; + ptr->usr_data = (u32)userdata; +} + +void* GX_GetTexObjUserData(GXTexObj *obj) +{ + struct __gx_texobj *ptr = (struct __gx_texobj*)obj; + return (void*)ptr->usr_data; +} + +void GX_InitTlutObj(GXTlutObj *obj,void *lut,u8 fmt,u16 entries) +{ + struct __gx_tlutobj *ptr = (struct __gx_tlutobj*)obj; + + memset(obj,0,sizeof(GXTlutObj)); + + ptr->tlut_fmt = _SHIFTL(fmt,10,2); + ptr->tlut_maddr = (ptr->tlut_maddr&~0x00ffffff)|(_SHIFTR(MEM_VIRTUAL_TO_PHYSICAL(lut),5,24)); + ptr->tlut_maddr = (ptr->tlut_maddr&~0xff000000)|(_SHIFTL(0x64,24,8)); + ptr->tlut_nentries = entries; +} + +void GX_LoadTexObj(GXTexObj *obj,u8 mapid) +{ + GXTexRegion *region = NULL; + + if(regionCB) + region = regionCB(obj,mapid); + + GX_LoadTexObjPreloaded(obj,region,mapid); +} + +void GX_LoadTexObjPreloaded(GXTexObj *obj,GXTexRegion *region,u8 mapid) +{ + u8 type; + struct __gx_tlutregion *tlut = NULL; + struct __gx_texobj *ptr = (struct __gx_texobj*)obj; + struct __gx_texregion *reg = (struct __gx_texregion*)region; + + ptr->tex_filt = (ptr->tex_filt&~0xff000000)|(_SHIFTL(_gxtexmode0ids[mapid],24,8)); + ptr->tex_lod = (ptr->tex_lod&~0xff000000)|(_SHIFTL(_gxtexmode1ids[mapid],24,8)); + ptr->tex_size = (ptr->tex_size&~0xff000000)|(_SHIFTL(_gxteximg0ids[mapid],24,8)); + ptr->tex_maddr = (ptr->tex_maddr&~0xff000000)|(_SHIFTL(_gxteximg3ids[mapid],24,8)); + + reg->tmem_even = (reg->tmem_even&~0xff000000)|(_SHIFTL(_gxteximg1ids[mapid],24,8)); + reg->tmem_odd = (reg->tmem_odd&~0xff000000)|(_SHIFTL(_gxteximg2ids[mapid],24,8)); + + GX_LOAD_BP_REG(ptr->tex_filt); + GX_LOAD_BP_REG(ptr->tex_lod); + GX_LOAD_BP_REG(ptr->tex_size); + + GX_LOAD_BP_REG(reg->tmem_even); + GX_LOAD_BP_REG(reg->tmem_odd); + + GX_LOAD_BP_REG(ptr->tex_maddr); + + type = ptr->tex_flag; + if(!(type&0x02)) { + if(tlut_regionCB) + tlut = (struct __gx_tlutregion*)tlut_regionCB(ptr->tex_tlut); + tlut->tmem_addr_base = (tlut->tmem_addr_base&~0xff000000)|(_SHIFTL(_gxtextlutids[mapid],24,8)); + GX_LOAD_BP_REG(tlut->tmem_addr_base); + } + + __gx->texMapSize[mapid] = ptr->tex_size; + __gx->texMapWrap[mapid] = ptr->tex_filt; + + __gx->dirtyState |= 0x0001; +} + +void GX_PreloadEntireTexture(GXTexObj *obj,GXTexRegion *region) +{ + u32 i,fmt; + s32 wd,ht; + u16 cnt = 0; + u32 regA = 0; + u32 regB = 0; + u32 regC = 0; + u32 regD = 0; + struct __gx_texobj *ptr = (struct __gx_texobj*)obj; + struct __gx_texregion *reg = (struct __gx_texregion*)region; + + regA = (regA&~0xff000000)|(_SHIFTL(0x60,24,8)); + regA = (regA&~0x00ffffff)|(ptr->tex_maddr&~0xff000000); + + regB = (regB&~0xff000000)|(_SHIFTL(0x61,24,8)); + regB = (regB&~0x00007fff)|(reg->tmem_even&0x00007fff); + + regC = (regC&~0xff000000)|(_SHIFTL(0x62,24,8)); + regC = (regC&~0x00007fff)|(reg->tmem_odd&0x00007fff); + + regD = (regD&~0xff000000)|(_SHIFTL(0x63,24,8)); + regD = (regD&~0x00007fff)|(ptr->tex_tile_cnt&0x00007fff); + regD = (regD&~0x00018000)|(_SHIFTL(ptr->tex_tile_type,15,2)); + + fmt = _SHIFTR(ptr->tex_size,20,4); + + __GX_FlushTextureState(); + GX_LOAD_BP_REG(regA); + GX_LOAD_BP_REG(regB); + GX_LOAD_BP_REG(regC); + GX_LOAD_BP_REG(regD); + + if(ptr->tex_flag&0x01) { + wd = (ptr->tex_size&0x3ff)+1; + ht = _SHIFTR(ptr->tex_size,10,10)+1; + if(wd>ht) + cnt = (31 - (cntlzw(wd))); + else + cnt = (31 - (cntlzw(ht))); + } + + if(cnt>0) { + u32 tmem_even,tmem_odd,maddr; + u32 tile_cnt = ptr->tex_tile_cnt; + + tmem_even = (reg->tmem_even&0xffff); + tmem_odd = (reg->tmem_odd&0xffff); + maddr = (ptr->tex_maddr&~0xff000000); + + i = 0; + while(cnt) { + u32 w,h; + u32 te,to; + u32 xshift,yshift; + + if(fmt==GX_TF_RGBA8) { + tmem_even += tile_cnt; + tmem_odd += tile_cnt; + maddr += (tile_cnt<<1); + } else { + maddr += tile_cnt; + if(i&1) tmem_odd += tile_cnt; + else tmem_even += tile_cnt; + } + + te = tmem_even; + to = tmem_odd; + if(i&1) { + te = tmem_odd; + to = tmem_even; + } + + w = wd>>(i+1); + h = wd>>(i+1); + switch(ptr->tex_fmt) { + case GX_TF_I4: + case GX_TF_IA4: + case GX_TF_CI4: + case GX_TF_CMPR: + xshift = 3; + yshift = 3; + break; + case GX_TF_I8: + case GX_TF_CI8: + xshift = 3; + yshift = 2; + break; + case GX_TF_IA8: + case GX_TF_RGB5A3: + case GX_TF_RGB565: + case GX_TF_CI14: + xshift = 2; + yshift = 2; + break; + default: + xshift = 0; + yshift = 0; + break; + } + + if(!w) w = 1; + if(!h) h = 1; + + regA = ((regA&~0x00ffffff)|(maddr&0x00ffffff)); + GX_LOAD_BP_REG(regA); + + regB = ((regB&~0x00007fff)|(te&0x00007fff)); + GX_LOAD_BP_REG(regB); + + regC = ((regC&~0x00007fff)|(to&0x00007fff)); + GX_LOAD_BP_REG(regC); + + tile_cnt = (((w+(1<>xshift)*(((h+(1<>yshift); + regD = ((regD&~0x00007fff)|(tile_cnt&0x00007fff)); + GX_LOAD_BP_REG(regD); + + ++i; + --cnt; + } + } + __GX_FlushTextureState(); +} + +void GX_InvalidateTexAll() +{ + __GX_FlushTextureState(); + GX_LOAD_BP_REG(0x66001000); + GX_LOAD_BP_REG(0x66001100); + __GX_FlushTextureState(); +} + +void GX_InvalidateTexRegion(GXTexRegion *region) +{ + u8 ismipmap; + s32 cw_e,ch_e,cw_o,ch_o; + u32 size,tmp,regvalA = 0,regvalB = 0; + struct __gx_texregion *ptr = (struct __gx_texregion*)region; + + cw_e = (_SHIFTR(ptr->tmem_even,15,3))-1; + ch_e = (_SHIFTR(ptr->tmem_even,18,3))-1; + + cw_o = (_SHIFTR(ptr->tmem_odd,15,3))-1; + ch_o = (_SHIFTR(ptr->tmem_odd,18,3))-1; + + if(cw_e<0) cw_e = 0; + if(ch_e<0) ch_e = 0; + if(cw_o<0) cw_o = 0; + if(ch_o<0) ch_o = 0; + + ismipmap = ptr->ismipmap; + + tmp = size = cw_e+ch_e; + if(ismipmap) size = (tmp+cw_o+ch_o)-2; + regvalA = _SHIFTR((ptr->tmem_even&0x7fff),6,9)|(_SHIFTL(size,9,4))|(_SHIFTL(0x66,24,8)); + + if(cw_o!=0) { + size = cw_o+ch_o; + if(ismipmap) size += (tmp-2); + regvalB = _SHIFTR((ptr->tmem_odd&0x7fff),6,9)|(_SHIFTL(size,9,4))|(_SHIFTL(0x66,24,8)); + } + __GX_FlushTextureState(); + GX_LOAD_BP_REG(regvalA); + if(cw_o!=0) GX_LOAD_BP_REG(regvalB); + __GX_FlushTextureState(); +} + +void GX_LoadTlut(GXTlutObj *obj,u32 tlut_name) +{ + struct __gx_tlutregion *region = NULL; + struct __gx_tlutobj *ptr = (struct __gx_tlutobj*)obj; + + if(tlut_regionCB) + region = (struct __gx_tlutregion*)tlut_regionCB(tlut_name); + + __GX_FlushTextureState(); + GX_LOAD_BP_REG(ptr->tlut_maddr); + GX_LOAD_BP_REG(region->tmem_addr_conf); + __GX_FlushTextureState(); + + region->tmem_addr_base = (ptr->tlut_fmt&~0x3ff)|(region->tmem_addr_conf&0x3ff); + region->tlut_maddr = ptr->tlut_maddr; + region->tlut_nentries = ptr->tlut_nentries; +} + +void GX_SetTexCoordScaleManually(u8 texcoord,u8 enable,u16 ss,u16 ts) +{ + u32 reg; + + __gx->texCoordManually = (__gx->texCoordManually&~(_SHIFTL(1,texcoord,1)))|(_SHIFTL(enable,texcoord,1)); + if(!enable) return; + + reg = (texcoord&0x7); + __gx->suSsize[reg] = (__gx->suSsize[reg]&~0xffff)|((ss-1)&0xffff); + __gx->suTsize[reg] = (__gx->suTsize[reg]&~0xffff)|((ts-1)&0xffff); + + GX_LOAD_BP_REG(__gx->suSsize[reg]); + GX_LOAD_BP_REG(__gx->suTsize[reg]); +} + +void GX_SetTexCoordCylWrap(u8 texcoord,u8 s_enable,u8 t_enable) +{ + u32 reg; + + reg = (texcoord&0x7); + __gx->suSsize[reg] = (__gx->suSsize[reg]&~0x20000)|(_SHIFTL(s_enable,17,1)); + __gx->suTsize[reg] = (__gx->suTsize[reg]&~0x20000)|(_SHIFTL(t_enable,17,1)); + + if(!(__gx->texCoordManually&(_SHIFTL(1,texcoord,1)))) return; + + GX_LOAD_BP_REG(__gx->suSsize[reg]); + GX_LOAD_BP_REG(__gx->suTsize[reg]); +} + +void GX_SetTexCoordBias(u8 texcoord,u8 s_enable,u8 t_enable) +{ + u32 reg; + + reg = (texcoord&0x7); + __gx->suSsize[reg] = (__gx->suSsize[reg]&~0x10000)|(_SHIFTL(s_enable,16,1)); + __gx->suTsize[reg] = (__gx->suTsize[reg]&~0x10000)|(_SHIFTL(t_enable,16,1)); + + if(!(__gx->texCoordManually&(_SHIFTL(1,texcoord,1)))) return; + + GX_LOAD_BP_REG(__gx->suSsize[reg]); + GX_LOAD_BP_REG(__gx->suTsize[reg]); +} + +GXTexRegionCallback GX_SetTexRegionCallback(GXTexRegionCallback cb) +{ + u32 level; + GXTexRegionCallback ret; + + _CPU_ISR_Disable(level); + ret = regionCB; + regionCB = cb; + _CPU_ISR_Restore(level); + + return ret; +} + +GXTlutRegionCallback GX_SetTlutRegionCallback(GXTlutRegionCallback cb) +{ + u32 level; + GXTlutRegionCallback ret; + + _CPU_ISR_Disable(level); + ret = tlut_regionCB; + tlut_regionCB = cb; + _CPU_ISR_Restore(level); + + return ret; +} + +void GX_SetBlendMode(u8 type,u8 src_fact,u8 dst_fact,u8 op) +{ + __gx->peCMode0 = (__gx->peCMode0&~0x1); + if(type==GX_BM_BLEND || type==GX_BM_SUBTRACT) __gx->peCMode0 |= 0x1; + + __gx->peCMode0 = (__gx->peCMode0&~0x800); + if(type==GX_BM_SUBTRACT) __gx->peCMode0 |= 0x800; + + __gx->peCMode0 = (__gx->peCMode0&~0x2); + if(type==GX_BM_LOGIC) __gx->peCMode0 |= 0x2; + + __gx->peCMode0 = (__gx->peCMode0&~0xF000)|(_SHIFTL(op,12,4)); + __gx->peCMode0 = (__gx->peCMode0&~0xE0)|(_SHIFTL(dst_fact,5,3)); + __gx->peCMode0 = (__gx->peCMode0&~0x700)|(_SHIFTL(src_fact,8,3)); + + GX_LOAD_BP_REG(__gx->peCMode0); +} + +void GX_ClearVtxDesc() +{ + __gx->vcdNrms = 0; + __gx->vcdClear = ((__gx->vcdClear&~0x0600)|0x0200); + __gx->vcdLo = __gx->vcdHi = 0; + __gx->dirtyState |= 0x0008; +} + +void GX_SetLineWidth(u8 width,u8 fmt) +{ + __gx->lpWidth = (__gx->lpWidth&~0xff)|(width&0xff); + __gx->lpWidth = (__gx->lpWidth&~0x70000)|(_SHIFTL(fmt,16,3)); + GX_LOAD_BP_REG(__gx->lpWidth); +} + +void GX_SetPointSize(u8 width,u8 fmt) +{ + __gx->lpWidth = (__gx->lpWidth&~0xFF00)|(_SHIFTL(width,8,8)); + __gx->lpWidth = (__gx->lpWidth&~0x380000)|(_SHIFTL(fmt,19,3)); + GX_LOAD_BP_REG(__gx->lpWidth); +} + +void GX_SetTevColor(u8 tev_regid,GXColor color) +{ + u32 reg; + + reg = (_SHIFTL((0xe0+(tev_regid<<1)),24,8)|(_SHIFTL(color.a,12,8))|(color.r&0xff)); + GX_LOAD_BP_REG(reg); + + reg = (_SHIFTL((0xe1+(tev_regid<<1)),24,8)|(_SHIFTL(color.g,12,8))|(color.b&0xff)); + GX_LOAD_BP_REG(reg); + + //this two calls should obviously flush the Write Gather Pipe. + GX_LOAD_BP_REG(reg); + GX_LOAD_BP_REG(reg); +} + +void GX_SetTevColorS10(u8 tev_regid,GXColorS10 color) +{ + u32 reg; + + reg = (_SHIFTL((0xe0+(tev_regid<<1)),24,8)|(_SHIFTL(color.a,12,11))|(color.r&0x7ff)); + GX_LOAD_BP_REG(reg); + + reg = (_SHIFTL((0xe1+(tev_regid<<1)),24,8)|(_SHIFTL(color.g,12,11))|(color.b&0x7ff)); + GX_LOAD_BP_REG(reg); + + //this two calls should obviously flush the Write Gather Pipe. + GX_LOAD_BP_REG(reg); + GX_LOAD_BP_REG(reg); +} + +void GX_SetTevKColor(u8 tev_kregid,GXColor color) +{ + u32 reg; + + reg = (_SHIFTL((0xe0+(tev_kregid<<1)),24,8)|(_SHIFTL(1,23,1))|(_SHIFTL(color.a,12,8))|(color.r&0xff)); + GX_LOAD_BP_REG(reg); + + reg = (_SHIFTL((0xe1+(tev_kregid<<1)),24,8)|(_SHIFTL(1,23,1))|(_SHIFTL(color.g,12,8))|(color.b&0xff)); + GX_LOAD_BP_REG(reg); + + //this two calls should obviously flush the Write Gather Pipe. + GX_LOAD_BP_REG(reg); + GX_LOAD_BP_REG(reg); +} + +void GX_SetTevKColorS10(u8 tev_kregid,GXColorS10 color) +{ + u32 reg; + + reg = (_SHIFTL((0xe0+(tev_kregid<<1)),24,8)|(_SHIFTL(1,23,1))|(_SHIFTL(color.a,12,11))|(color.r&0x7ff)); + GX_LOAD_BP_REG(reg); + + reg = (_SHIFTL((0xe1+(tev_kregid<<1)),24,8)|(_SHIFTL(1,23,1))|(_SHIFTL(color.g,12,11))|(color.b&0x7ff)); + GX_LOAD_BP_REG(reg); + + //this two calls should obviously flush the Write Gather Pipe. + GX_LOAD_BP_REG(reg); + GX_LOAD_BP_REG(reg); +} + +void GX_SetTevOp(u8 tevstage,u8 mode) +{ + u8 defcolor = GX_CC_RASC; + u8 defalpha = GX_CA_RASA; + + if(tevstage!=GX_TEVSTAGE0) { + defcolor = GX_CC_CPREV; + defalpha = GX_CA_APREV; + } + + switch(mode) { + case GX_MODULATE: + GX_SetTevColorIn(tevstage,GX_CC_ZERO,GX_CC_TEXC,defcolor,GX_CC_ZERO); + GX_SetTevAlphaIn(tevstage,GX_CA_ZERO,GX_CA_TEXA,defalpha,GX_CA_ZERO); + break; + case GX_DECAL: + GX_SetTevColorIn(tevstage,defcolor,GX_CC_TEXC,GX_CC_TEXA,GX_CC_ZERO); + GX_SetTevAlphaIn(tevstage,GX_CA_ZERO,GX_CA_ZERO,GX_CA_ZERO,defalpha); + break; + case GX_BLEND: + GX_SetTevColorIn(tevstage,defcolor,GX_CC_ONE,GX_CC_TEXC,GX_CC_ZERO); + GX_SetTevAlphaIn(tevstage,GX_CA_ZERO,GX_CA_TEXA,defalpha,GX_CA_RASA); + break; + case GX_REPLACE: + GX_SetTevColorIn(tevstage,GX_CC_ZERO,GX_CC_ZERO,GX_CC_ZERO,GX_CC_TEXC); + GX_SetTevAlphaIn(tevstage,GX_CA_ZERO,GX_CA_ZERO,GX_CA_ZERO,GX_CA_TEXA); + break; + case GX_PASSCLR: + GX_SetTevColorIn(tevstage,GX_CC_ZERO,GX_CC_ZERO,GX_CC_ZERO,defcolor); + GX_SetTevAlphaIn(tevstage,GX_CC_A2,GX_CC_A2,GX_CC_A2,defalpha); + break; + } + GX_SetTevColorOp(tevstage,GX_TEV_ADD,GX_TB_ZERO,GX_CS_SCALE_1,GX_TRUE,GX_TEVPREV); + GX_SetTevAlphaOp(tevstage,GX_TEV_ADD,GX_TB_ZERO,GX_CS_SCALE_1,GX_TRUE,GX_TEVPREV); +} + +void GX_SetTevColorIn(u8 tevstage,u8 a,u8 b,u8 c,u8 d) +{ + u32 reg = (tevstage&0xf); + __gx->tevColorEnv[reg] = (__gx->tevColorEnv[reg]&~0xF000)|(_SHIFTL(a,12,4)); + __gx->tevColorEnv[reg] = (__gx->tevColorEnv[reg]&~0xF00)|(_SHIFTL(b,8,4)); + __gx->tevColorEnv[reg] = (__gx->tevColorEnv[reg]&~0xF0)|(_SHIFTL(c,4,4)); + __gx->tevColorEnv[reg] = (__gx->tevColorEnv[reg]&~0xf)|(d&0xf); + + GX_LOAD_BP_REG(__gx->tevColorEnv[reg]); +} + +void GX_SetTevAlphaIn(u8 tevstage,u8 a,u8 b,u8 c,u8 d) +{ + u32 reg = (tevstage&0xf); + __gx->tevAlphaEnv[reg] = (__gx->tevAlphaEnv[reg]&~0xE000)|(_SHIFTL(a,13,3)); + __gx->tevAlphaEnv[reg] = (__gx->tevAlphaEnv[reg]&~0x1C00)|(_SHIFTL(b,10,3)); + __gx->tevAlphaEnv[reg] = (__gx->tevAlphaEnv[reg]&~0x380)|(_SHIFTL(c,7,3)); + __gx->tevAlphaEnv[reg] = (__gx->tevAlphaEnv[reg]&~0x70)|(_SHIFTL(d,4,3)); + + GX_LOAD_BP_REG(__gx->tevAlphaEnv[reg]); +} + +void GX_SetTevColorOp(u8 tevstage,u8 tevop,u8 tevbias,u8 tevscale,u8 clamp,u8 tevregid) +{ + /* set tev op add/sub*/ + u32 reg = (tevstage&0xf); + __gx->tevColorEnv[reg] = (__gx->tevColorEnv[reg]&~0x40000)|(_SHIFTL(tevop,18,1)); + if(tevop<=GX_TEV_SUB) { + __gx->tevColorEnv[reg] = (__gx->tevColorEnv[reg]&~0x300000)|(_SHIFTL(tevscale,20,2)); + __gx->tevColorEnv[reg] = (__gx->tevColorEnv[reg]&~0x30000)|(_SHIFTL(tevbias,16,2)); + } else { + __gx->tevColorEnv[reg] = (__gx->tevColorEnv[reg]&~0x300000)|((_SHIFTL(tevop,19,4))&0x300000); + __gx->tevColorEnv[reg] = (__gx->tevColorEnv[reg]&~0x30000)|0x30000; + } + __gx->tevColorEnv[reg] = (__gx->tevColorEnv[reg]&~0x80000)|(_SHIFTL(clamp,19,1)); + __gx->tevColorEnv[reg] = (__gx->tevColorEnv[reg]&~0xC00000)|(_SHIFTL(tevregid,22,2)); + + GX_LOAD_BP_REG(__gx->tevColorEnv[reg]); +} + +void GX_SetTevAlphaOp(u8 tevstage,u8 tevop,u8 tevbias,u8 tevscale,u8 clamp,u8 tevregid) +{ + /* set tev op add/sub*/ + u32 reg = (tevstage&0xf); + __gx->tevAlphaEnv[reg] = (__gx->tevAlphaEnv[reg]&~0x40000)|(_SHIFTL(tevop,18,1)); + if(tevop<=GX_TEV_SUB) { + __gx->tevAlphaEnv[reg] = (__gx->tevAlphaEnv[reg]&~0x300000)|(_SHIFTL(tevscale,20,2)); + __gx->tevAlphaEnv[reg] = (__gx->tevAlphaEnv[reg]&~0x30000)|(_SHIFTL(tevbias,16,2)); + } else { + __gx->tevAlphaEnv[reg] = (__gx->tevAlphaEnv[reg]&~0x300000)|((_SHIFTL(tevop,19,4))&0x300000); + __gx->tevAlphaEnv[reg] = (__gx->tevAlphaEnv[reg]&~0x30000)|0x30000; + } + __gx->tevAlphaEnv[reg] = (__gx->tevAlphaEnv[reg]&~0x80000)|(_SHIFTL(clamp,19,1)); + __gx->tevAlphaEnv[reg] = (__gx->tevAlphaEnv[reg]&~0xC00000)|(_SHIFTL(tevregid,22,2)); + + GX_LOAD_BP_REG(__gx->tevAlphaEnv[reg]); +} + +void GX_SetCullMode(u8 mode) +{ + static u8 cm2hw[] = { 0, 2, 1, 3 }; + + __gx->genMode = (__gx->genMode&~0xC000)|(_SHIFTL(cm2hw[mode],14,2)); + __gx->dirtyState |= 0x0004; +} + +void GX_SetCoPlanar(u8 enable) +{ + __gx->genMode = (__gx->genMode&~0x80000)|(_SHIFTL(enable,19,1)); + GX_LOAD_BP_REG(0xFE080000); + GX_LOAD_BP_REG(__gx->genMode); +} + +void GX_EnableTexOffsets(u8 coord,u8 line_enable,u8 point_enable) +{ + u32 reg = (coord&0x7); + __gx->suSsize[reg] = (__gx->suSsize[reg]&~0x40000)|(_SHIFTL(line_enable,18,1)); + __gx->suSsize[reg] = (__gx->suSsize[reg]&~0x80000)|(_SHIFTL(point_enable,19,1)); + GX_LOAD_BP_REG(__gx->suSsize[reg]); +} + +void GX_SetClipMode(u8 mode) +{ + GX_LOAD_XF_REG(0x1005,(mode&1)); +} + +void GX_SetScissor(u32 xOrigin,u32 yOrigin,u32 wd,u32 ht) +{ + u32 xo = xOrigin+0x156; + u32 yo = yOrigin+0x156; + u32 nwd = xo+(wd-1); + u32 nht = yo+(ht-1); + + __gx->sciTLcorner = (__gx->sciTLcorner&~0x7ff)|(yo&0x7ff); + __gx->sciTLcorner = (__gx->sciTLcorner&~0x7FF000)|(_SHIFTL(xo,12,11)); + + __gx->sciBRcorner = (__gx->sciBRcorner&~0x7ff)|(nht&0xfff); + __gx->sciBRcorner = (__gx->sciBRcorner&~0x7FF000)|(_SHIFTL(nwd,12,11)); + + GX_LOAD_BP_REG(__gx->sciTLcorner); + GX_LOAD_BP_REG(__gx->sciBRcorner); +} + +void GX_SetScissorBoxOffset(s32 xoffset,s32 yoffset) +{ + s32 xoff = _SHIFTR((xoffset+0x156),1,24); + s32 yoff = _SHIFTR((yoffset+0x156),1,24); + + GX_LOAD_BP_REG((0x59000000|(_SHIFTL(yoff,10,10))|(xoff&0x3ff))); +} + +void GX_SetNumChans(u8 num) +{ + __gx->genMode = (__gx->genMode&~0x70)|(_SHIFTL(num,4,3)); + __gx->dirtyState |= 0x01000004; +} + +void GX_SetTevOrder(u8 tevstage,u8 texcoord,u32 texmap,u8 color) +{ + u8 colid; + u32 texm,texc,tmp; + u32 reg = 3+(_SHIFTR(tevstage,1,3)); + + __gx->tevTexMap[(tevstage&0xf)] = texmap; + + texm = (texmap&~0x100); + if(texm>=GX_MAX_TEXMAP) texm = 0; + if(texcoord>=GX_MAXCOORD) { + texc = 0; + __gx->tevTexCoordEnable &= ~(_SHIFTL(1,tevstage,1)); + } else { + texc = texcoord; + __gx->tevTexCoordEnable |= (_SHIFTL(1,tevstage,1)); + } + + if(tevstage&1) { + __gx->tevRasOrder[reg] = (__gx->tevRasOrder[reg]&~0x7000)|(_SHIFTL(texm,12,3)); + __gx->tevRasOrder[reg] = (__gx->tevRasOrder[reg]&~0x38000)|(_SHIFTL(texc,15,3)); + + colid = GX_ALPHA_BUMP; + if(color!=GX_COLORNULL) colid = _gxtevcolid[color]; + __gx->tevRasOrder[reg] = (__gx->tevRasOrder[reg]&~0x380000)|(_SHIFTL(colid,19,3)); + + tmp = 1; + if(texmap==GX_TEXMAP_NULL || texmap&0x100) tmp = 0; + __gx->tevRasOrder[reg] = (__gx->tevRasOrder[reg]&~0x40000)|(_SHIFTL(tmp,18,1)); + } else { + __gx->tevRasOrder[reg] = (__gx->tevRasOrder[reg]&~0x7)|(texm&0x7); + __gx->tevRasOrder[reg] = (__gx->tevRasOrder[reg]&~0x38)|(_SHIFTL(texc,3,3)); + + colid = GX_ALPHA_BUMP; + if(color!=GX_COLORNULL) colid = _gxtevcolid[color]; + __gx->tevRasOrder[reg] = (__gx->tevRasOrder[reg]&~0x380)|(_SHIFTL(colid,7,3)); + + tmp = 1; + if(texmap==GX_TEXMAP_NULL || texmap&0x100) tmp = 0; + __gx->tevRasOrder[reg] = (__gx->tevRasOrder[reg]&~0x40)|(_SHIFTL(tmp,6,1)); + } + GX_LOAD_BP_REG(__gx->tevRasOrder[reg]); + __gx->dirtyState |= 0x0001; +} + +void GX_SetNumTevStages(u8 num) +{ + __gx->genMode = (__gx->genMode&~0x3C00)|(_SHIFTL((num-1),10,4)); + __gx->dirtyState |= 0x0004; +} + +void GX_SetAlphaCompare(u8 comp0,u8 ref0,u8 aop,u8 comp1,u8 ref1) +{ + u32 val = 0; + val = (_SHIFTL(aop,22,2))|(_SHIFTL(comp1,19,3))|(_SHIFTL(comp0,16,3))|(_SHIFTL(ref1,8,8))|(ref0&0xff); + GX_LOAD_BP_REG(0xf3000000|val); +} + +void GX_SetTevKColorSel(u8 tevstage,u8 sel) +{ + u32 reg = (_SHIFTR(tevstage,1,3)); + + if(tevstage&1) + __gx->tevSwapModeTable[reg] = (__gx->tevSwapModeTable[reg]&~0x7C000)|(_SHIFTL(sel,14,5)); + else + __gx->tevSwapModeTable[reg] = (__gx->tevSwapModeTable[reg]&~0x1F0)|(_SHIFTL(sel,4,5)); + GX_LOAD_BP_REG(__gx->tevSwapModeTable[reg]); +} + +void GX_SetTevKAlphaSel(u8 tevstage,u8 sel) +{ + u32 reg = (_SHIFTR(tevstage,1,3)); + + if(tevstage&1) + __gx->tevSwapModeTable[reg] = (__gx->tevSwapModeTable[reg]&~0xF80000)|(_SHIFTL(sel,19,5)); + else + __gx->tevSwapModeTable[reg] = (__gx->tevSwapModeTable[reg]&~0x3E00)|(_SHIFTL(sel,9,5)); + GX_LOAD_BP_REG(__gx->tevSwapModeTable[reg]); +} + +void GX_SetTevSwapMode(u8 tevstage,u8 ras_sel,u8 tex_sel) +{ + u32 reg = (tevstage&0xf); + __gx->tevAlphaEnv[reg] = (__gx->tevAlphaEnv[reg]&~0x3)|(ras_sel&0x3); + __gx->tevAlphaEnv[reg] = (__gx->tevAlphaEnv[reg]&~0xC)|(_SHIFTL(tex_sel,2,2)); + GX_LOAD_BP_REG(__gx->tevAlphaEnv[reg]); +} + +void GX_SetTevSwapModeTable(u8 swapid,u8 r,u8 g,u8 b,u8 a) +{ + u32 regA = 0+(_SHIFTL(swapid,1,3)); + u32 regB = 1+(_SHIFTL(swapid,1,3)); + + __gx->tevSwapModeTable[regA] = (__gx->tevSwapModeTable[regA]&~0x3)|(r&0x3); + __gx->tevSwapModeTable[regA] = (__gx->tevSwapModeTable[regA]&~0xC)|(_SHIFTL(g,2,2)); + GX_LOAD_BP_REG(__gx->tevSwapModeTable[regA]); + + __gx->tevSwapModeTable[regB] = (__gx->tevSwapModeTable[regB]&~0x3)|(b&0x3); + __gx->tevSwapModeTable[regB] = (__gx->tevSwapModeTable[regB]&~0xC)|(_SHIFTL(a,2,2)); + GX_LOAD_BP_REG(__gx->tevSwapModeTable[regB]); +} + +void GX_SetTevIndirect(u8 tevstage,u8 indtexid,u8 format,u8 bias,u8 mtxid,u8 wrap_s,u8 wrap_t,u8 addprev,u8 utclod,u8 a) +{ + u32 val = (0x10000000|(_SHIFTL(tevstage,24,4)))|(indtexid&3)|(_SHIFTL(format,2,2))|(_SHIFTL(bias,4,3))|(_SHIFTL(a,7,2))|(_SHIFTL(mtxid,9,4))|(_SHIFTL(wrap_s,13,3))|(_SHIFTL(wrap_t,16,3))|(_SHIFTL(utclod,19,1))|(_SHIFTL(addprev,20,1)); + GX_LOAD_BP_REG(val); +} + +void GX_SetTevDirect(u8 tevstage) +{ + GX_SetTevIndirect(tevstage,GX_INDTEXSTAGE0,GX_ITF_8,GX_ITB_NONE,GX_ITM_OFF,GX_ITW_OFF,GX_ITW_OFF,GX_FALSE,GX_FALSE,GX_ITBA_OFF); +} + +void GX_SetNumIndStages(u8 nstages) +{ + __gx->genMode = (__gx->genMode&~0x70000)|(_SHIFTL(nstages,16,3)); + __gx->dirtyState |= 0x0006; +} + +void GX_SetIndTexMatrix(u8 indtexmtx,f32 offset_mtx[2][3],s8 scale_exp) +{ + u32 ma,mb; + u32 val,s,idx; + + if(indtexmtx>0x00 && indtexmtx<0x04) indtexmtx -= 0x01; + else if(indtexmtx>0x04 && indtexmtx<0x08) indtexmtx -= 0x05; + else if(indtexmtx>0x08 && indtexmtx<0x0C) indtexmtx -= 0x09; + else indtexmtx = 0x00; + + s = (scale_exp+17); + idx = ((indtexmtx<<2)-indtexmtx); + + ma = (u32)(offset_mtx[0][0]*1024.0F); + mb = (u32)(offset_mtx[1][0]*1024.0F); + val = (_SHIFTL((0x06+idx),24,8)|_SHIFTL(s,22,2)|_SHIFTL(mb,11,11)|_SHIFTL(ma,0,11)); + GX_LOAD_BP_REG(val); + + ma = (u32)(offset_mtx[0][1]*1024.0F); + mb = (u32)(offset_mtx[1][1]*1024.0F); + val = (_SHIFTL((0x07+idx),24,8)|_SHIFTL((s>>2),22,2)|_SHIFTL(mb,11,11)|_SHIFTL(ma,0,11)); + GX_LOAD_BP_REG(val); + + ma = (u32)(offset_mtx[0][2]*1024.0F); + mb = (u32)(offset_mtx[1][2]*1024.0F); + val = (_SHIFTL((0x08+idx),24,8)|_SHIFTL((s>>4),22,2)|_SHIFTL(mb,11,11)|_SHIFTL(ma,0,11)); + GX_LOAD_BP_REG(val); +} + +void GX_SetTevIndBumpST(u8 tevstage,u8 indstage,u8 mtx_sel) +{ + u8 sel_s,sel_t; + + switch(mtx_sel) { + case GX_ITM_0: + sel_s = GX_ITM_S0; + sel_t = GX_ITM_T0; + break; + case GX_ITM_1: + sel_s = GX_ITM_S1; + sel_t = GX_ITM_T1; + break; + case GX_ITM_2: + sel_s = GX_ITM_S2; + sel_t = GX_ITM_T2; + break; + default: + sel_s = GX_ITM_OFF; + sel_t = GX_ITM_OFF; + break; + } + + GX_SetTevIndirect((tevstage+0),indstage,GX_ITF_8,GX_ITB_ST,sel_s,GX_ITW_0,GX_ITW_0,GX_FALSE,GX_FALSE,GX_ITBA_OFF); + GX_SetTevIndirect((tevstage+1),indstage,GX_ITF_8,GX_ITB_ST,sel_t,GX_ITW_0,GX_ITW_0,GX_TRUE,GX_FALSE,GX_ITBA_OFF); + GX_SetTevIndirect((tevstage+2),indstage,GX_ITF_8,GX_ITB_NONE,GX_ITM_OFF,GX_ITW_OFF,GX_ITW_OFF,GX_TRUE,GX_FALSE,GX_ITBA_OFF); +} + +void GX_SetTevIndBumpXYZ(u8 tevstage,u8 indstage,u8 mtx_sel) +{ + GX_SetTevIndirect(tevstage,indstage,GX_ITF_8,GX_ITB_STU,mtx_sel,GX_ITW_OFF,GX_ITW_OFF,GX_FALSE,GX_FALSE,GX_ITBA_OFF); +} + +void GX_SetTevIndRepeat(u8 tevstage) +{ + GX_SetTevIndirect(tevstage,GX_INDTEXSTAGE0,GX_ITF_8,GX_ITB_NONE,GX_ITM_OFF,GX_ITW_0,GX_ITW_0,GX_TRUE,GX_FALSE,GX_ITBA_OFF); +} + +void GX_SetIndTexCoordScale(u8 indtexid,u8 scale_s,u8 scale_t) +{ + switch(indtexid) { + case GX_INDTEXSTAGE0: + __gx->tevRasOrder[0] = (__gx->tevRasOrder[0]&~0x0f)|(scale_s&0x0f); + __gx->tevRasOrder[0] = (__gx->tevRasOrder[0]&~0xF0)|(_SHIFTL(scale_t,4,4)); + GX_LOAD_BP_REG(__gx->tevRasOrder[0]); + break; + case GX_INDTEXSTAGE1: + __gx->tevRasOrder[0] = (__gx->tevRasOrder[0]&~0xF00)|(_SHIFTL(scale_s,8,4)); + __gx->tevRasOrder[0] = (__gx->tevRasOrder[0]&~0xF000)|(_SHIFTL(scale_t,12,4)); + GX_LOAD_BP_REG(__gx->tevRasOrder[0]); + break; + case GX_INDTEXSTAGE2: + __gx->tevRasOrder[1] = (__gx->tevRasOrder[1]&~0x0f)|(scale_s&0x0f); + __gx->tevRasOrder[1] = (__gx->tevRasOrder[1]&~0xF0)|(_SHIFTL(scale_t,4,4)); + GX_LOAD_BP_REG(__gx->tevRasOrder[1]); + break; + case GX_INDTEXSTAGE3: + __gx->tevRasOrder[1] = (__gx->tevRasOrder[1]&~0xF00)|(_SHIFTL(scale_s,8,4)); + __gx->tevRasOrder[1] = (__gx->tevRasOrder[1]&~0xF000)|(_SHIFTL(scale_t,12,4)); + GX_LOAD_BP_REG(__gx->tevRasOrder[1]); + break; + } +} + +void GX_SetTevIndTile(u8 tevstage,u8 indtexid,u16 tilesize_x,u16 tilesize_y,u16 tilespacing_x,u16 tilespacing_y,u8 indtexfmt,u8 indtexmtx,u8 bias_sel,u8 alpha_sel) +{ + s32 wrap_s,wrap_t; + f32 offset_mtx[2][3]; + f64 fdspace_x,fdspace_y; + u32 fbuf_x[2] = { 0x43300000,tilespacing_x }; + u32 fbuf_y[2] = { 0x43300000,tilespacing_y }; + + wrap_s = GX_ITW_OFF; + if(tilesize_x==0x0010) wrap_s = GX_ITW_16; + else if(tilesize_x==0x0020) wrap_s = GX_ITW_32; + else if(tilesize_x==0x0040) wrap_s = GX_ITW_64; + else if(tilesize_x==0x0080) wrap_s = GX_ITW_128; + else if(tilesize_x==0x0100) wrap_s = GX_ITW_256; + + wrap_t = GX_ITW_OFF; + if(tilesize_y==0x0010) wrap_t = GX_ITW_16; + else if(tilesize_y==0x0020) wrap_t = GX_ITW_32; + else if(tilesize_y==0x0040) wrap_t = GX_ITW_64; + else if(tilesize_y==0x0080) wrap_t = GX_ITW_128; + else if(tilesize_y==0x0100) wrap_t = GX_ITW_256; + + fdspace_x = *(f64*)((void*)fbuf_x); + fdspace_y = *(f64*)((void*)fbuf_y); + + offset_mtx[0][0] = (f32)((fdspace_x - 4503599627370496.0F)*0.00097656250F); + offset_mtx[0][1] = 0.0F; + offset_mtx[0][2] = 0.0F; + offset_mtx[1][0] = 0.0F; + offset_mtx[1][1] = (f32)((fdspace_y - 4503599627370496.0F)*0.00097656250F); + offset_mtx[1][2] = 0.0F; + + GX_SetIndTexMatrix(indtexmtx,offset_mtx,10); + GX_SetTevIndirect(tevstage,indtexid,indtexfmt,bias_sel,indtexmtx,wrap_s,wrap_t,GX_FALSE,GX_TRUE,alpha_sel); +} + +void GX_SetFog(u8 type,f32 startz,f32 endz,f32 nearz,f32 farz,GXColor col) +{ + f32 A, B, B_mant, C, A_f; + u32 b_expn, b_m, a_hex, c_hex,val,proj = 0; + union ieee32 { f32 f; u32 i; } v; + + proj = _SHIFTR(type,3,1); + + // Calculate constants a, b, and c (TEV HW requirements). + if(proj) { // Orthographic Fog Type + if((farz==nearz) || (endz==startz)) { + // take care of the odd-ball case. + A_f = 0.0f; + C = 0.0f; + } else { + A = 1.0f/(endz-startz); + A_f = (farz-nearz) * A; + C = (startz-nearz) * A; + } + + b_expn = 0; + b_m = 0; + } else { // Perspective Fog Type + // Calculate constants a, b, and c (TEV HW requirements). + if((farz==nearz) || (endz==startz)) { + // take care of the odd-ball case. + A = 0.0f; + B = 0.5f; + C = 0.0f; + } else { + A = (farz*nearz)/((farz-nearz)*(endz-startz)); + B = farz/(farz-nearz); + C = startz/(endz-startz); + } + + B_mant = B; + b_expn = 1; + while(B_mant>1.0f) { + B_mant /= 2.0f; + b_expn++; + } + + while((B_mant>0.0f) && (B_mant<0.5f)) { + B_mant *= 2.0f; + b_expn--; + } + + A_f = A/(1<<(b_expn)); + b_m = (u32)(B_mant * 8388638.0f); + } + v.f = A_f; + a_hex = v.i; + + v.f = C; + c_hex = v.i; + + val = 0xee000000|(_SHIFTR(a_hex,12,20)); + GX_LOAD_BP_REG(val); + + val = 0xef000000|(b_m&0x00ffffff); + GX_LOAD_BP_REG(val); + + val = 0xf0000000|(b_expn&0x1f); + GX_LOAD_BP_REG(val); + + val = 0xf1000000|(_SHIFTL(type,21,3))|(_SHIFTL(proj,20,1))|(_SHIFTR(c_hex,12,20)); + GX_LOAD_BP_REG(val); + + val = 0xf2000000|(_SHIFTL(col.r,16,8))|(_SHIFTL(col.g,8,8))|(col.b&0xff); + GX_LOAD_BP_REG(val); +} + +void GX_InitFogAdjTable(GXFogAdjTbl *table,u16 width,f32 projmtx[4][4]) +{ + u32 i,val7; + f32 val0,val1,val2,val4,val5,val6; + + if(projmtx[3][3]==0.0f) { + val0 = projmtx[2][3]/(projmtx[2][2] - 1.0f); + val1 = val0/projmtx[0][0]; + } else { + val1 = 1.0f/projmtx[0][0]; + val0 = val1*1.7320499f; + } + + val2 = val0*val0; + val4 = 2.0f/(f32)width; + for(i=0;i<10;i++) { + val5 = (i+1)*32.0f; + val5 *= val4; + val5 *= val1; + val5 *= val5; + val5 /= val2; + val6 = sqrtf(val5 + 1.0f); + val7 = (u32)(val6*256.0f); + table->r[i] = (val7&0x0fff); + } +} + +void GX_SetFogRangeAdj(u8 enable,u16 center,GXFogAdjTbl *table) +{ + u32 val; + + if(enable) { + val = 0xe9000000|(_SHIFTL(table->r[1],12,12))|(table->r[0]&0x0fff); + GX_LOAD_BP_REG(val); + + val = 0xea000000|(_SHIFTL(table->r[3],12,12))|(table->r[2]&0x0fff); + GX_LOAD_BP_REG(val); + + val = 0xeb000000|(_SHIFTL(table->r[5],12,12))|(table->r[4]&0x0fff); + GX_LOAD_BP_REG(val); + + val = 0xec000000|(_SHIFTL(table->r[7],12,12))|(table->r[6]&0x0fff); + GX_LOAD_BP_REG(val); + + val = 0xed000000|(_SHIFTL(table->r[9],12,12))|(table->r[8]&0x0fff); + GX_LOAD_BP_REG(val); + } + val = 0xe8000000|(_SHIFTL(enable,10,1))|((center + 342)&0x03ff); + GX_LOAD_BP_REG(val); +} + +void GX_SetFogColor(GXColor color) +{ + GX_LOAD_BP_REG(0xf2000000|(_SHIFTL(color.r,16,8)|_SHIFTL(color.g,8,8)|(color.b&0xff))); +} + +void GX_SetColorUpdate(u8 enable) +{ + __gx->peCMode0 = (__gx->peCMode0&~0x8)|(_SHIFTL(enable,3,1)); + GX_LOAD_BP_REG(__gx->peCMode0); +} + +void GX_SetAlphaUpdate(u8 enable) +{ + __gx->peCMode0 = (__gx->peCMode0&~0x10)|(_SHIFTL(enable,4,1)); + GX_LOAD_BP_REG(__gx->peCMode0); +} + +void GX_SetZCompLoc(u8 before_tex) +{ + __gx->peCntrl = (__gx->peCntrl&~0x40)|(_SHIFTL(before_tex,6,1)); + GX_LOAD_BP_REG(__gx->peCntrl); +} + +void GX_SetPixelFmt(u8 pix_fmt,u8 z_fmt) +{ + u8 ms_en = 0; + u32 realfmt[8] = {0,1,2,3,4,4,4,5}; + + __gx->peCntrl = (__gx->peCntrl&~0x7)|(realfmt[pix_fmt]&0x7); + __gx->peCntrl = (__gx->peCntrl&~0x38)|(_SHIFTL(z_fmt,3,3)); + GX_LOAD_BP_REG(__gx->peCntrl); + __gx->dirtyState |= 0x0004; + + if(pix_fmt==GX_PF_RGB565_Z16) ms_en = 1; + __gx->genMode = (__gx->genMode&~0x200)|(_SHIFTL(ms_en,9,1)); + + if(realfmt[pix_fmt]==GX_PF_Y8) { + pix_fmt -= GX_PF_Y8; + __gx->peCMode1 = (__gx->peCMode1&~0xC00)|(_SHIFTL(pix_fmt,10,2)); + GX_LOAD_BP_REG(__gx->peCMode1); + } +} + +void GX_SetDither(u8 dither) +{ + __gx->peCMode0 = (__gx->peCMode0&~0x4)|(_SHIFTL(dither,2,1)); + GX_LOAD_BP_REG(__gx->peCMode0); +} + +void GX_SetDstAlpha(u8 enable,u8 a) +{ + __gx->peCMode1 = (__gx->peCMode1&~0xff)|(a&0xff); + __gx->peCMode1 = (__gx->peCMode1&~0x100)|(_SHIFTL(enable,8,1)); + GX_LOAD_BP_REG(__gx->peCMode1); +} + +void GX_SetFieldMask(u8 even_mask,u8 odd_mask) +{ + u32 val = 0; + + val = (_SHIFTL(even_mask,1,1))|(odd_mask&1); + GX_LOAD_BP_REG(0x44000000|val); +} + +void GX_SetFieldMode(u8 field_mode,u8 half_aspect_ratio) +{ + __gx->lpWidth = (__gx->lpWidth&~0x400000)|(_SHIFTL(half_aspect_ratio,22,1)); + GX_LOAD_BP_REG(__gx->lpWidth); + + __GX_FlushTextureState(); + GX_LOAD_BP_REG(0x68000000|(field_mode&1)); + __GX_FlushTextureState(); +} + +void GX_PokeAlphaMode(u8 func,u8 threshold) +{ + _peReg[3] = (_SHIFTL(func,8,8))|(threshold&0xFF); +} + +void GX_PokeAlphaRead(u8 mode) +{ + _peReg[4] = (mode&~0x4)|0x4; +} + +void GX_PokeDstAlpha(u8 enable,u8 a) +{ + _peReg[2] = (_SHIFTL(enable,8,1))|(a&0xff); +} + +void GX_PokeAlphaUpdate(u8 update_enable) +{ + _peReg[1] = (_peReg[1]&~0x10)|(_SHIFTL(update_enable,4,1)); +} + +void GX_PokeColorUpdate(u8 update_enable) +{ + _peReg[1] = (_peReg[1]&~0x8)|(_SHIFTL(update_enable,3,1)); +} + +void GX_PokeDither(u8 dither) +{ + _peReg[1] = (_peReg[1]&~0x4)|(_SHIFTL(dither,2,1)); +} + +void GX_PokeBlendMode(u8 type,u8 src_fact,u8 dst_fact,u8 op) +{ + u32 regval = _peReg[1]; + + regval = (regval&~0x1); + if(type==GX_BM_BLEND || type==GX_BM_SUBTRACT) regval |= 0x1; + + regval = (regval&~0x800); + if(type==GX_BM_SUBTRACT) regval |= 0x800; + + regval = (regval&~0x2); + if(type==GX_BM_LOGIC) regval |= 0x2; + + regval = (regval&~0xF000)|(_SHIFTL(op,12,4)); + regval = (regval&~0xE0)|(_SHIFTL(dst_fact,5,3)); + regval = (regval&~0x700)|(_SHIFTL(src_fact,8,3)); + + regval |= 0x41000000; + _peReg[1] = (u16)regval; +} + +void GX_PokeARGB(u16 x,u16 y,GXColor color) +{ + u32 regval; + + regval = 0xc8000000|(_SHIFTL(x,2,10)); + regval = (regval&~0x3FF000)|(_SHIFTL(y,12,10)); + *(u32*)regval = _SHIFTL(color.a,24,8)|_SHIFTL(color.r,16,8)|_SHIFTL(color.g,8,8)|(color.b&0xff); +} + +void GX_PeekARGB(u16 x,u16 y,GXColor *color) +{ + u32 regval,val; + + regval = 0xc8000000|(_SHIFTL(x,2,10)); + regval = (regval&~0x3FF000)|(_SHIFTL(y,12,10)); + val = *(u32*)regval; + color->a = _SHIFTR(val,24,8); + color->r = _SHIFTR(val,16,8); + color->g = _SHIFTR(val,8,8); + color->b = val&0xff; +} + +void GX_PokeZ(u16 x,u16 y,u32 z) +{ + u32 regval; + + regval = 0xc8000000|(_SHIFTL(x,2,10)); + regval = (regval&~0x3FF000)|(_SHIFTL(y,12,10)); + regval = (regval&~0xC00000)|0x400000; + *(u32*)regval = z; +} + +void GX_PeekZ(u16 x,u16 y,u32 *z) +{ + u32 regval; + + regval = 0xc8000000|(_SHIFTL(x,2,10)); + regval = (regval&~0x3FF000)|(_SHIFTL(y,12,10)); + regval = (regval&~0xC00000)|0x400000; + *z = *(u32*)regval; +} + +void GX_PokeZMode(u8 comp_enable,u8 func,u8 update_enable) +{ + u16 regval; + regval = comp_enable&0x1; + regval = (regval&~0xE)|(_SHIFTL(func,1,3)); + regval = (regval&0x10)|(_SHIFTL(update_enable,4,1)); + _peReg[0] = regval; +} + +void GX_SetIndTexOrder(u8 indtexstage,u8 texcoord,u8 texmap) +{ + switch(indtexstage) { + case GX_INDTEXSTAGE0: + __gx->tevRasOrder[2] = (__gx->tevRasOrder[2]&~0x7)|(texmap&0x7); + __gx->tevRasOrder[2] = (__gx->tevRasOrder[2]&~0x38)|(_SHIFTL(texcoord,3,3)); + break; + case GX_INDTEXSTAGE1: + __gx->tevRasOrder[2] = (__gx->tevRasOrder[2]&~0x1C0)|(_SHIFTL(texmap,6,3)); + __gx->tevRasOrder[2] = (__gx->tevRasOrder[2]&~0xE00)|(_SHIFTL(texcoord,9,3)); + break; + case GX_INDTEXSTAGE2: + __gx->tevRasOrder[2] = (__gx->tevRasOrder[2]&~0x7000)|(_SHIFTL(texmap,12,3)); + __gx->tevRasOrder[2] = (__gx->tevRasOrder[2]&~0x38000)|(_SHIFTL(texcoord,15,3)); + break; + case GX_INDTEXSTAGE3: + __gx->tevRasOrder[2] = (__gx->tevRasOrder[2]&~0x1C0000)|(_SHIFTL(texmap,18,3)); + __gx->tevRasOrder[2] = (__gx->tevRasOrder[2]&~0xE00000)|(_SHIFTL(texcoord,21,3)); + break; + } + GX_LOAD_BP_REG(__gx->tevRasOrder[2]); + __gx->dirtyState |= 0x0003; +} + +void GX_InitLightPos(GXLightObj *lit_obj,f32 x,f32 y,f32 z) +{ + struct __gx_litobj *lit = (struct __gx_litobj*)lit_obj; + + lit->px = x; + lit->py = y; + lit->pz = z; +} + +void GX_InitLightColor(GXLightObj *lit_obj,GXColor col) +{ + struct __gx_litobj *lit = (struct __gx_litobj*)lit_obj; + lit->col = ((_SHIFTL(col.r,24,8))|(_SHIFTL(col.g,16,8))|(_SHIFTL(col.b,8,8))|(col.a&0xff)); +} + +void GX_LoadLightObj(GXLightObj *lit_obj,u8 lit_id) +{ + u32 id; + u16 reg; + struct __gx_litobj *lit = (struct __gx_litobj*)lit_obj; + + switch(lit_id) { + case GX_LIGHT0: + id = 0; + break; + case GX_LIGHT1: + id = 1; + break; + case GX_LIGHT2: + id = 2; + break; + case GX_LIGHT3: + id = 3; + break; + case GX_LIGHT4: + id = 4; + break; + case GX_LIGHT5: + id = 5; + break; + case GX_LIGHT6: + id = 6; + break; + case GX_LIGHT7: + id = 7; + break; + default: + id = 0; + break; + } + + reg = 0x600|(_SHIFTL(id,4,8)); + GX_LOAD_XF_REGS(reg,16); + wgPipe->U32 = 0; + wgPipe->U32 = 0; + wgPipe->U32 = 0; + wgPipe->U32 = lit->col; + wgPipe->F32 = lit->a0; + wgPipe->F32 = lit->a1; + wgPipe->F32 = lit->a2; + wgPipe->F32 = lit->k0; + wgPipe->F32 = lit->k1; + wgPipe->F32 = lit->k2; + wgPipe->F32 = lit->px; + wgPipe->F32 = lit->py; + wgPipe->F32 = lit->pz; + wgPipe->F32 = lit->nx; + wgPipe->F32 = lit->ny; + wgPipe->F32 = lit->nz; +} + +void GX_LoadLightObjIdx(u32 litobjidx,u8 litid) +{ + u32 reg; + u32 idx = 0; + + switch(litid) { + case GX_LIGHT0: + idx = 0; + break; + case GX_LIGHT1: + idx = 1; + break; + case GX_LIGHT2: + idx = 2; + break; + case GX_LIGHT3: + idx = 3; + break; + case GX_LIGHT4: + idx = 4; + break; + case GX_LIGHT5: + idx = 5; + break; + case GX_LIGHT6: + idx = 6; + break; + case GX_LIGHT7: + idx = 7; + break; + default: + idx = 0; + break; + + } + + reg = 0xf600|(_SHIFTL(idx,4,8)); + reg = (reg&~0xffff0000)|(_SHIFTL(litobjidx,16,16)); + + wgPipe->U8 = 0x38; + wgPipe->U32 = reg; +} + +void GX_InitLightDir(GXLightObj *lit_obj,f32 nx,f32 ny,f32 nz) +{ + struct __gx_litobj *lit = (struct __gx_litobj*)lit_obj; + + lit->nx = -(nx); + lit->ny = -(ny); + lit->nz = -(nz); +} + +void GX_InitLightDistAttn(GXLightObj *lit_obj,f32 ref_dist,f32 ref_brite,u8 dist_fn) +{ + f32 k0,k1,k2; + struct __gx_litobj *lit = (struct __gx_litobj*)lit_obj; + + if(ref_dist<0.0f || + ref_brite<0.0f || ref_brite>=1.0f) dist_fn = GX_DA_OFF; + + switch(dist_fn) { + case GX_DA_GENTLE: + k0 = 1.0f; + k1 = (1.0f-ref_brite)/(ref_brite*ref_dist); + k2 = 0.0f; + break; + case GX_DA_MEDIUM: + k0 = 1.0f; + k1 = 0.5f*(1.0f-ref_brite)/(ref_brite*ref_dist); + k2 = 0.5f*(1.0f-ref_brite)/(ref_brite*ref_dist*ref_dist); + break; + case GX_DA_STEEP: + k0 = 1.0f; + k1 = 0.0f; + k2 = (1.0f-ref_brite)/(ref_brite*ref_dist*ref_dist); + break; + case GX_DA_OFF: + default: + k0 = 1.0f; + k1 = 0.0f; + k2 = 0.0f; + break; + } + + lit->k0 = k0; + lit->k1 = k1; + lit->k2 = k2; +} + +void GX_InitLightAttn(GXLightObj *lit_obj,f32 a0,f32 a1,f32 a2,f32 k0,f32 k1,f32 k2) +{ + struct __gx_litobj *lit = (struct __gx_litobj*)lit_obj; + + lit->a0 = a0; + lit->a1 = a1; + lit->a2 = a2; + lit->k0 = k0; + lit->k1 = k1; + lit->k2 = k2; +} + +void GX_InitLightAttnA(GXLightObj *lit_obj,f32 a0,f32 a1,f32 a2) +{ + struct __gx_litobj *lit = (struct __gx_litobj*)lit_obj; + + lit->a0 = a0; + lit->a1 = a1; + lit->a2 = a2; +} + +void GX_InitLightAttnK(GXLightObj *lit_obj,f32 k0,f32 k1,f32 k2) +{ + struct __gx_litobj *lit = (struct __gx_litobj*)lit_obj; + + lit->k0 = k0; + lit->k1 = k1; + lit->k2 = k2; +} + +void GX_InitSpecularDirHA(GXLightObj *lit_obj,f32 nx,f32 ny,f32 nz,f32 hx,f32 hy,f32 hz) +{ + f32 px, py, pz; + struct __gx_litobj *lit = (struct __gx_litobj*)lit_obj; + + px = (nx * LARGE_NUMBER); + py = (ny * LARGE_NUMBER); + pz = (nz * LARGE_NUMBER); + + lit->px = px; + lit->py = py; + lit->pz = pz; + lit->nx = hx; + lit->ny = hy; + lit->nz = hz; +} + +void GX_InitSpecularDir(GXLightObj *lit_obj,f32 nx,f32 ny,f32 nz) +{ + f32 px, py, pz; + f32 hx, hy, hz, mag; + struct __gx_litobj *lit = (struct __gx_litobj*)lit_obj; + + // Compute half-angle vector + hx = -nx; + hy = -ny; + hz = (-nz + 1.0f); + mag = ((hx * hx) + (hy * hy) + (hz * hz)); + if(mag!=0.0f) mag = 1.0f / sqrtf(mag); + + hx *= mag; + hy *= mag; + hz *= mag; + + px = (nx * LARGE_NUMBER); + py = (ny * LARGE_NUMBER); + pz = (nz * LARGE_NUMBER); + + lit->px = px; + lit->py = py; + lit->pz = pz; + lit->nx = hx; + lit->ny = hy; + lit->nz = hz; +} + +void GX_InitLightSpot(GXLightObj *lit_obj,f32 cut_off,u8 spotfn) +{ + f32 r,d,cr,a0,a1,a2; + struct __gx_litobj *lit = (struct __gx_litobj*)lit_obj; + + if(cut_off<0.0f || cut_off>90.0f) spotfn = GX_SP_OFF; + + r = (cut_off*M_PI)/180.0f; + cr = cosf(r); + + switch(spotfn) { + case GX_SP_FLAT: + a0 = -1000.0f*cr; + a1 = 1000.0f; + a2 = 0.0f; + break; + case GX_SP_COS: + a0 = -cr/(1.0f-cr); + a1 = 1.0f/(1.0f-cr); + a2 = 0.0f; + break; + case GX_SP_COS2: + a0 = 0.0f; + a1 = -cr/(1.0f-cr); + a2 = 1.0f/(1.0f-cr); + break; + case GX_SP_SHARP: + d = (1.0f-cr)*(1.0f-cr); + a0 = cr*(cr-2.0f); + a1 = 2.0f/d; + a2 = -1.0/d; + break; + case GX_SP_RING1: + d = (1.0f-cr)*(1.0f-cr); + a0 = -4.0f*cr/d; + a1 = 4.0f*(1.0f+cr)/d; + a2 = -4.0f/d; + break; + case GX_SP_RING2: + d = (1.0f-cr)*(1.0f-cr); + a0 = 1.0f-2.0f*cr*cr/d; + a1 = 4.0f*cr/d; + a2 = -2.0f/d; + break; + case GX_SP_OFF: + default: + a0 = 1.0f; + a1 = 0.0f; + a2 = 0.0f; + break; + } + + lit->a0 = a0; + lit->a1 = a1; + lit->a2 = a2; +} + +void GX_SetGPMetric(u32 perf0,u32 perf1) +{ + // check last setted perf0 counters + if(__gx->perf0Mode>=GX_PERF0_TRIANGLES && __gx->perf0Modeperf0Mode>=GX_PERF0_QUAD_0CVG && __gx->perf0Modeperf0Mode>=GX_PERF0_VERTICES && __gx->perf0Mode<=GX_PERF0_CLOCKS) + GX_LOAD_XF_REG(0x1006,0); + + // check last setted perf1 counters + if(__gx->perf1Mode>=GX_PERF1_VC_ELEMQ_FULL && __gx->perf1ModecpPerfMode = (__gx->cpPerfMode&~0xf0); + GX_LOAD_CP_REG(0x20,__gx->cpPerfMode); + } else if(__gx->perf1Mode>=GX_PERF1_FIFO_REQ && __gx->perf1Modeperf1Mode>=GX_PERF1_TEXELS && __gx->perf1Mode<=GX_PERF1_CLOCKS) { + GX_LOAD_BP_REG(0x67000000); + } + + __gx->perf0Mode = perf0; + switch(__gx->perf0Mode) { + case GX_PERF0_CLOCKS: + GX_LOAD_XF_REG(0x1006,0x00000273); + break; + case GX_PERF0_VERTICES: + GX_LOAD_XF_REG(0x1006,0x0000014a); + break; + case GX_PERF0_CLIP_VTX: + GX_LOAD_XF_REG(0x1006,0x0000016b); + break; + case GX_PERF0_CLIP_CLKS: + GX_LOAD_XF_REG(0x1006,0x00000084); + break; + case GX_PERF0_XF_WAIT_IN: + GX_LOAD_XF_REG(0x1006,0x000000c6); + break; + case GX_PERF0_XF_WAIT_OUT: + GX_LOAD_XF_REG(0x1006,0x00000210); + break; + case GX_PERF0_XF_XFRM_CLKS: + GX_LOAD_XF_REG(0x1006,0x00000252); + break; + case GX_PERF0_XF_LIT_CLKS: + GX_LOAD_XF_REG(0x1006,0x00000231); + break; + case GX_PERF0_XF_BOT_CLKS: + GX_LOAD_XF_REG(0x1006,0x000001ad); + break; + case GX_PERF0_XF_REGLD_CLKS: + GX_LOAD_XF_REG(0x1006,0x000001ce); + break; + case GX_PERF0_XF_REGRD_CLKS: + GX_LOAD_XF_REG(0x1006,0x00000021); + break; + case GX_PERF0_CLIP_RATIO: + GX_LOAD_XF_REG(0x1006,0x00000153); + break; + case GX_PERF0_TRIANGLES: + GX_LOAD_BP_REG(0x2300AE7F); + break; + case GX_PERF0_TRIANGLES_CULLED: + GX_LOAD_BP_REG(0x23008E7F); + break; + case GX_PERF0_TRIANGLES_PASSED: + GX_LOAD_BP_REG(0x23009E7F); + break; + case GX_PERF0_TRIANGLES_SCISSORED: + GX_LOAD_BP_REG(0x23001E7F); + break; + case GX_PERF0_TRIANGLES_0TEX: + GX_LOAD_BP_REG(0x2300AC3F); + break; + case GX_PERF0_TRIANGLES_1TEX: + GX_LOAD_BP_REG(0x2300AC7F); + break; + case GX_PERF0_TRIANGLES_2TEX: + GX_LOAD_BP_REG(0x2300ACBF); + break; + case GX_PERF0_TRIANGLES_3TEX: + GX_LOAD_BP_REG(0x2300ACFF); + break; + case GX_PERF0_TRIANGLES_4TEX: + GX_LOAD_BP_REG(0x2300AD3F); + break; + case GX_PERF0_TRIANGLES_5TEX: + GX_LOAD_BP_REG(0x2300AD7F); + break; + case GX_PERF0_TRIANGLES_6TEX: + GX_LOAD_BP_REG(0x2300ADBF); + break; + case GX_PERF0_TRIANGLES_7TEX: + GX_LOAD_BP_REG(0x2300ADFF); + break; + case GX_PERF0_TRIANGLES_8TEX: + GX_LOAD_BP_REG(0x2300AE3F); + break; + case GX_PERF0_TRIANGLES_0CLR: + GX_LOAD_BP_REG(0x2300A27F); + break; + case GX_PERF0_TRIANGLES_1CLR: + GX_LOAD_BP_REG(0x2300A67F); + break; + case GX_PERF0_TRIANGLES_2CLR: + GX_LOAD_BP_REG(0x2300AA7F); + break; + case GX_PERF0_QUAD_0CVG: + GX_LOAD_BP_REG(0x2402C0C6); + break; + case GX_PERF0_QUAD_NON0CVG: + GX_LOAD_BP_REG(0x2402C16B); + break; + case GX_PERF0_QUAD_1CVG: + GX_LOAD_BP_REG(0x2402C0E7); + break; + case GX_PERF0_QUAD_2CVG: + GX_LOAD_BP_REG(0x2402C108); + break; + case GX_PERF0_QUAD_3CVG: + GX_LOAD_BP_REG(0x2402C129); + break; + case GX_PERF0_QUAD_4CVG: + GX_LOAD_BP_REG(0x2402C14A); + break; + case GX_PERF0_AVG_QUAD_CNT: + GX_LOAD_BP_REG(0x2402C1AD); + break; + case GX_PERF0_NONE: + break; + } + + __gx->perf1Mode = perf1; + switch(__gx->perf1Mode) { + case GX_PERF1_CLOCKS: + GX_LOAD_BP_REG(0x67000042); + break; + case GX_PERF1_TEXELS: + GX_LOAD_BP_REG(0x67000084); + break; + case GX_PERF1_TX_IDLE: + GX_LOAD_BP_REG(0x67000063); + break; + case GX_PERF1_TX_REGS: + GX_LOAD_BP_REG(0x67000129); + break; + case GX_PERF1_TX_MEMSTALL: + GX_LOAD_BP_REG(0x67000252); + break; + case GX_PERF1_TC_CHECK1_2: + GX_LOAD_BP_REG(0x67000021); + break; + case GX_PERF1_TC_CHECK3_4: + GX_LOAD_BP_REG(0x6700014b); + break; + case GX_PERF1_TC_CHECK5_6: + GX_LOAD_BP_REG(0x6700018d); + break; + case GX_PERF1_TC_CHECK7_8: + GX_LOAD_BP_REG(0x670001cf); + break; + case GX_PERF1_TC_MISS: + GX_LOAD_BP_REG(0x67000211); + break; + case GX_PERF1_VC_ELEMQ_FULL: + __gx->cpPerfMode = (__gx->cpPerfMode&~0xf0)|0x20; + GX_LOAD_CP_REG(0x20,__gx->cpPerfMode); + break; + case GX_PERF1_VC_MISSQ_FULL: + __gx->cpPerfMode = (__gx->cpPerfMode&~0xf0)|0x30; + GX_LOAD_CP_REG(0x20,__gx->cpPerfMode); + break; + case GX_PERF1_VC_MEMREQ_FULL: + __gx->cpPerfMode = (__gx->cpPerfMode&~0xf0)|0x40; + GX_LOAD_CP_REG(0x20,__gx->cpPerfMode); + break; + case GX_PERF1_VC_STATUS7: + __gx->cpPerfMode = (__gx->cpPerfMode&~0xf0)|0x50; + GX_LOAD_CP_REG(0x20,__gx->cpPerfMode); + break; + case GX_PERF1_VC_MISSREP_FULL: + __gx->cpPerfMode = (__gx->cpPerfMode&~0xf0)|0x60; + GX_LOAD_CP_REG(0x20,__gx->cpPerfMode); + break; + case GX_PERF1_VC_STREAMBUF_LOW: + __gx->cpPerfMode = (__gx->cpPerfMode&~0xf0)|0x70; + GX_LOAD_CP_REG(0x20,__gx->cpPerfMode); + break; + case GX_PERF1_VC_ALL_STALLS: + __gx->cpPerfMode = (__gx->cpPerfMode&~0xf0)|0x90; + GX_LOAD_CP_REG(0x20,__gx->cpPerfMode); + break; + case GX_PERF1_VERTICES: + __gx->cpPerfMode = (__gx->cpPerfMode&~0xf0)|0x80; + GX_LOAD_CP_REG(0x20,__gx->cpPerfMode); + break; + case GX_PERF1_FIFO_REQ: + _cpReg[3] = 2; + break; + case GX_PERF1_CALL_REQ: + _cpReg[3] = 3; + break; + case GX_PERF1_VC_MISS_REQ: + _cpReg[3] = 4; + break; + case GX_PERF1_CP_ALL_REQ: + _cpReg[3] = 5; + break; + case GX_PERF1_NONE: + break; + } + +} + +void GX_ClearGPMetric() +{ + _cpReg[2] = 4; +} + +void GX_InitXfRasMetric() +{ + GX_LOAD_BP_REG(0x2402C022); + GX_LOAD_XF_REG(0x1006,0x31000); +} + +void GX_ReadXfRasMetric(u32 *xfwaitin,u32 *xfwaitout,u32 *rasbusy,u32 *clks) +{ + *rasbusy = _SHIFTL(_cpReg[33],16,16)|(_cpReg[32]&0xffff); + *clks = _SHIFTL(_cpReg[35],16,16)|(_cpReg[34]&0xffff); + *xfwaitin = _SHIFTL(_cpReg[37],16,16)|(_cpReg[36]&0xffff); + *xfwaitout = _SHIFTL(_cpReg[39],16,16)|(_cpReg[38]&0xffff); +} + +u32 GX_ReadClksPerVtx() +{ + GX_DrawDone(); + _cpReg[49] = 0x1007; + _cpReg[48] = 0x1007; + return (_cpReg[50]<<8); +} + +void GX_ClearVCacheMetric() +{ + GX_LOAD_CP_REG(0,0); +} + +void GX_ReadVCacheMetric(u32 *check,u32 *miss,u32 *stall) +{ + *check = _SHIFTL(_cpReg[41],16,16)|(_cpReg[40]&0xffff); + *miss = _SHIFTL(_cpReg[43],16,16)|(_cpReg[42]&0xffff); + *stall = _SHIFTL(_cpReg[45],16,16)|(_cpReg[44]&0xffff); +} + +void GX_SetVCacheMetric(u32 attr) +{ +} + +void GX_GetGPStatus(u8 *overhi,u8 *underlow,u8 *readIdle,u8 *cmdIdle,u8 *brkpt) +{ + _gxgpstatus = _cpReg[0]; + *overhi = !!(_gxgpstatus&1); + *underlow = !!(_gxgpstatus&2); + *readIdle = !!(_gxgpstatus&4); + *cmdIdle = !!(_gxgpstatus&8); + *brkpt = !!(_gxgpstatus&16); +} + +void GX_ReadGPMetric(u32 *cnt0,u32 *cnt1) +{ + u32 tmp,reg1,reg2; + + reg1 = (_SHIFTL(_cpReg[33],16,16))|(_cpReg[32]&0xffff); + reg2 = (_SHIFTL(_cpReg[35],16,16))|(_cpReg[34]&0xffff); + //reg3 = (_SHIFTL(_cpReg[37],16,16))|(_cpReg[36]&0xffff); + //reg4 = (_SHIFTL(_cpReg[39],16,16))|(_cpReg[38]&0xffff); + + *cnt0 = 0; + if(__gx->perf0Mode==GX_PERF0_CLIP_RATIO) { + tmp = reg2*1000; + *cnt0 = tmp/reg1; + } else if(__gx->perf0Mode>=GX_PERF0_VERTICES && __gx->perf0ModefbWidth = rmin->fbWidth-(hor<<1); + rmout->efbHeight = rmin->efbHeight-((rmin->efbHeight*(ver<<1))/rmin->xfbHeight); + if(rmin->xfbMode==VI_XFBMODE_SF && !(rmin->viTVMode&VI_PROGRESSIVE)) rmout->xfbHeight = rmin->xfbHeight-ver; + else rmout->xfbHeight = rmin->xfbHeight-(ver<<1); + + rmout->viWidth = rmin->viWidth-(hor<<1); + if(rmin->viTVMode&VI_PROGRESSIVE) rmout->viHeight = rmin->viHeight-(ver<<2); + else rmout->viHeight = rmin->viHeight-(ver<<1); + + rmout->viXOrigin += hor; + rmout->viYOrigin += ver; +} + +f32 GX_GetYScaleFactor(u16 efbHeight,u16 xfbHeight) +{ + u32 yScale,xfblines,cnt; + f32 yscale; + + yscale = (f32)efbHeight/(f32)xfbHeight; + yScale = (u32)((f32)256.0/yscale)&0x1ff; + + cnt = xfbHeight; + xfblines = __GX_GetNumXfbLines(efbHeight,yScale); + while(xfblines>=xfbHeight) { + yscale = (f32)(cnt--)/(f32)efbHeight; + yScale = (u32)((f32)256.0/yscale)&0x1ff; + xfblines = __GX_GetNumXfbLines(efbHeight,yScale); + } + + while(xfblines + +#define STRUCT_REGDEF_SIZE 1440 + +struct __gx_regdef +{ + u16 cpSRreg; + u16 cpCRreg; + u16 cpCLreg; + u16 xfFlush; + u16 xfFlushExp; + u16 xfFlushSafe; + u32 gxFifoInited; + u32 vcdClear; + u32 VATTable; + u32 mtxIdxLo; + u32 mtxIdxHi; + u32 texCoordManually; + u32 vcdLo; + u32 vcdHi; + u32 vcdNrms; + u32 dirtyState; + u32 perf0Mode; + u32 perf1Mode; + u32 cpPerfMode; + u32 VAT0reg[8]; + u32 VAT1reg[8]; + u32 VAT2reg[8]; + u32 texMapSize[8]; + u32 texMapWrap[8]; + u32 sciTLcorner; + u32 sciBRcorner; + u32 lpWidth; + u32 genMode; + u32 suSsize[8]; + u32 suTsize[8]; + u32 tevTexMap[16]; + u32 tevColorEnv[16]; + u32 tevAlphaEnv[16]; + u32 tevSwapModeTable[8]; + u32 tevRasOrder[11]; + u32 tevTexCoordEnable; + u32 tevIndMask; + u32 texCoordGen[8]; + u32 texCoordGen2[8]; + u32 dispCopyCntrl; + u32 dispCopyDst; + u32 dispCopyTL; + u32 dispCopyWH; + u32 texCopyCntrl; + u32 texCopyDst; + u32 texCopyTL; + u32 texCopyWH; + u32 peZMode; + u32 peCMode0; + u32 peCMode1; + u32 peCntrl; + u32 chnAmbColor[2]; + u32 chnMatColor[2]; + u32 chnCntrl[4]; + GXTexRegion texRegion[24]; + GXTlutRegion tlutRegion[20]; + u8 saveDLctx; + u8 gxFifoUnlinked; + u8 texCopyZTex; + u8 _pad; +} __attribute__((packed)); + +struct __gxfifo { + vu32 buf_start; + vu32 buf_end; + vu32 size; + vu32 hi_mark; + vu32 lo_mark; + vu32 rd_ptr; + vu32 wt_ptr; + vu32 rdwt_dst; + vu8 fifo_wrap; + vu8 cpufifo_ready; + vu8 gpfifo_ready; + u8 _pad[93]; +} __attribute__((packed)); + +struct __gx_litobj +{ + u32 _pad[3]; + u32 col; + f32 a0; + f32 a1; + f32 a2; + f32 k0; + f32 k1; + f32 k2; + f32 px; + f32 py; + f32 pz; + f32 nx; + f32 ny; + f32 nz; +} __attribute__((packed)); + +struct __gx_texobj +{ + u32 tex_filt; + u32 tex_lod; + u32 tex_size; + u32 tex_maddr; + u32 usr_data; + u32 tex_fmt; + u32 tex_tlut; + u16 tex_tile_cnt; + u8 tex_tile_type; + u8 tex_flag; +} __attribute__((packed)); + +struct __gx_tlutobj +{ + u32 tlut_fmt; + u32 tlut_maddr; + u16 tlut_nentries; + u8 _pad[2]; +} __attribute__((packed)); + +struct __gx_texregion +{ + u32 tmem_even; + u32 tmem_odd; + u16 size_even; + u16 size_odd; + u8 ismipmap; + u8 iscached; + u8 _pad[2]; +} __attribute__((packed)); + +struct __gx_tlutregion +{ + u32 tmem_addr_conf; + u32 tmem_addr_base; + u32 tlut_maddr; + u16 tlut_nentries; + u8 _pad[2]; +} __attribute__((packed)); + +#endif diff --git a/wii/libogc/libogc/ios.c b/wii/libogc/libogc/ios.c new file mode 100644 index 0000000000..05f043651d --- /dev/null +++ b/wii/libogc/libogc/ios.c @@ -0,0 +1,379 @@ +/*------------------------------------------------------------- + +ios.c -- IOS control + +Copyright (C) 2008 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) +Hector Martin (marcan) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + +#if defined(HW_RVL) + +#include +#include +#include "asm.h" +#include "processor.h" +#include "cache.h" +#include "ipc.h" +#include "stm.h" +#include "es.h" +#include "ios.h" +#include "irq.h" + +#define IOS_HEAP_SIZE 0x1000 +#define MAX_IPC_RETRIES 400 + +//#define DEBUG_IOS + +#define IOS_MAX_VERSION 61 +#define IOS_MIN_VERSION 28 + +static s32 __ios_hid = -1; +extern void udelay(int us); + +s32 __IOS_InitHeap(void) +{ + if(__ios_hid <0 ) { + __ios_hid = iosCreateHeap(IOS_HEAP_SIZE); + if(__ios_hid < 0) return __ios_hid; + } + return 0; +} + +// These two functions deal with the "internal" IOS subsystems that are used by default by libogc +// Other stuff should be inited by the user and deinited by the exit callbacks. The user is also responsible +// for deiniting other stuff before an IOS reload and reiniting them after. +s32 __IOS_InitializeSubsystems(void) +{ + s32 res; + s32 ret = 0; +#ifdef DEBUG_IOS + printf("IOS Subsystem Init\n"); +#endif + res = __ES_Init(); + if(res < 0) { + ret = res; +#ifdef DEBUG_IOS + printf("ES Init failed: %d\n",ret); +#endif + } + res = __STM_Init(); + if(res < 0) { + ret = res; +#ifdef DEBUG_IOS + printf("STM Init failed: %d\n",ret); +#endif + } +#ifdef DEBUG_IOS + printf("IOS Subsystem Init Done: %d\n",ret); +#endif + return ret; +} + +s32 __IOS_ShutdownSubsystems(void) +{ + s32 res; + s32 ret = 0; +#ifdef DEBUG_IOS + printf("IOS Subsystem Close\n"); +#endif + res = __STM_Close(); + if(res < 0) ret = res; + res = __ES_Close(); + if(res < 0) ret = res; +#ifdef DEBUG_IOS + printf("IOS Subsystem Close Done: %d\n",ret); +#endif + return ret; +} + +s32 IOS_GetPreferredVersion() +{ + int ver = IOS_EBADVERSION; + s32 res; + u32 count; + u64 *titles; + u32 tmd_size; + u32 i; + u32 a,b; + + res = __IOS_InitHeap(); + if(res<0) return res; + + res = ES_GetNumTitles(&count); + if(res < 0) { +#ifdef DEBUG_IOS + printf(" GetNumTitles failed: %d\n",res); +#endif + return res; + } +#ifdef DEBUG_IOS + printf(" %d titles on card:\n",count); +#endif + titles = iosAlloc(__ios_hid, sizeof(u64)*count); + if(!titles) { + printf(" iosAlloc titles failed\n"); + return -1; + } + res = ES_GetTitles(titles, count); + if(res < 0) { +#ifdef DEBUG_IOS + printf(" GetTitles failed: %d\n",res); +#endif + iosFree(__ios_hid, titles); + return res; + } + + u32 *tmdbuffer = memalign(32, MAX_SIGNED_TMD_SIZE); + + if(!tmdbuffer) + { + iosFree(__ios_hid, titles); + return -1; + } + + for(i=0; i>32; + b = titles[i]&0xFFFFFFFF; + if(a != 1) continue; + if(b < IOS_MIN_VERSION) continue; + if(b > IOS_MAX_VERSION) continue; + + if (ES_GetStoredTMDSize(titles[i], &tmd_size) < 0) + continue; + + if (tmd_size < 0 || tmd_size > 4096) + continue; + + if(ES_GetStoredTMD(titles[i], (signed_blob *)tmdbuffer, tmd_size) < 0) + continue; + + if (!tmdbuffer[1] && !tmdbuffer[2]) + continue; + + if((((s32)b) > ((s32)ver) && ver != 58) || b == 58) ver = b; + } +#ifdef DEBUG_IOS + printf(" Preferred verson: %d\n",ver); +#endif + iosFree(__ios_hid, titles); + free(tmdbuffer); + return ver; +} + +s32 IOS_GetVersion() +{ + u32 vercode; + u16 version; + DCInvalidateRange((void*)0x80003140,8); + vercode = *((u32*)0x80003140); + version = vercode >> 16; + if(version == 0) return IOS_EBADVERSION; + if(version > 0xff) return IOS_EBADVERSION; + return version; +} + +s32 IOS_GetRevision() +{ + u32 vercode; + u16 rev; + DCInvalidateRange((void*)0x80003140,8); + vercode = *((u32*)0x80003140); + rev = vercode & 0xFFFF; + if(vercode == 0 || rev == 0) return IOS_EBADVERSION; + return rev; +} + +s32 IOS_GetRevisionMajor() +{ + s32 rev; + rev = IOS_GetRevision(); + if(rev < 0) return rev; + return (rev>>8)&0xFF; +} + +s32 IOS_GetRevisionMinor() +{ + s32 rev; + rev = IOS_GetRevision(); + if(rev < 0) return rev; + return rev&0xFF; +} + +s32 __IOS_LaunchNewIOS(int version) +{ + u32 numviews; + s32 res; + u64 titleID = 0x100000000LL; + raw_irq_handler_t irq_handler; + u32 counter; + + STACK_ALIGN(tikview,views,4,32); +#ifdef DEBUG_IOS + s32 oldversion; +#endif + s32 newversion; + + if(version < 3 || version > 0xFF) { + return IOS_EBADVERSION; + } + +#ifdef DEBUG_IOS + oldversion = IOS_GetVersion(); + if(oldversion>0) printf("Current IOS Version: IOS%d\n",oldversion); +#endif + + titleID |= version; +#ifdef DEBUG_IOS + printf("Launching IOS TitleID: %016llx\n",titleID); +#endif + + res = ES_GetNumTicketViews(titleID, &numviews); + if(res < 0) { +#ifdef DEBUG_IOS + printf(" GetNumTicketViews failed: %d\n",res); +#endif + return res; + } + if(numviews > 4) { + printf(" GetNumTicketViews too many views: %lu\n",numviews); + return IOS_ETOOMANYVIEWS; + } + res = ES_GetTicketViews(titleID, views, numviews); + if(res < 0) { +#ifdef DEBUG_IOS + printf(" GetTicketViews failed: %d\n",res); +#endif + return res; + } + + write32(0x80003140, 0); + + res = ES_LaunchTitleBackground(titleID, &views[0]); + if(res < 0) { +#ifdef DEBUG_IOS + printf(" LaunchTitleBackground failed: %d\n",res); +#endif + return res; + } + + __ES_Reset(); + + // Mask IPC IRQ while we're busy reloading + __MaskIrq(IRQ_PI_ACR); + irq_handler = IRQ_Free(IRQ_PI_ACR); + +#ifdef DEBUG_IOS + printf("Waiting for IOS ...\n"); +#endif + while ((read32(0x80003140) >> 16) == 0) + udelay(1000); + +#ifdef DEBUG_IOS + u32 v = read32(0x80003140); + printf("IOS loaded: IOS%d v%d.%d\n", v >> 16, (v >> 8) & 0xff, v & 0xff); +#endif + +#ifdef DEBUG_IOS + printf("Waiting for IPC ...\n"); +#endif + for (counter = 0; !(read32(0x0d000004) & 2); counter++) { + udelay(1000); + + if (counter >= MAX_IPC_RETRIES) + break; + } + +#ifdef DEBUG_IOS + printf("IPC started (%u)\n", counter); +#endif + + IRQ_Request(IRQ_PI_ACR, irq_handler, NULL); + __UnmaskIrq(IRQ_PI_ACR); + + __IPC_Reinitialize(); + + newversion = IOS_GetVersion(); + + if(newversion != version) { +#ifdef DEBUG_IOS + printf(" Version mismatch!\n"); +#endif + return IOS_EMISMATCH; + } + + return version; +} + +s32 __attribute__((weak)) __IOS_LoadStartupIOS() +{ + return 0; +} + +s32 IOS_ReloadIOS(int version) +{ + int ret = 0; + int res; + +#ifdef DEBUG_IOS + printf("Reloading to IOS%d\n",version); +#endif + + res = __IOS_ShutdownSubsystems(); + if(res < 0) { +#ifdef DEBUG_IOS + printf("__IOS_ShutdownSubsystems failed: %d\n", res); +#endif + ret = res; + } + + res = __ES_Init(); + if(res < 0) { +#ifdef DEBUG_IOS + printf("__ES_Init failed: %d\n", res); +#endif + ret = res; + } else { + res = __IOS_LaunchNewIOS(version); + if(res < 0) { +#ifdef DEBUG_IOS + printf("__IOS_LaunchNewIOS failed: %d\n", res); +#endif + ret = res; + __ES_Close(); + } + } + + res = __IOS_InitializeSubsystems(); + if(res < 0) { +#ifdef DEBUG_IOS + printf("__IOS_InitializeSubsystems failed: %d\n", res); +#endif + ret = res; + } + + return ret; +} + +#endif /* defined(HW_RVL) */ diff --git a/wii/libogc/libogc/ipc.c b/wii/libogc/libogc/ipc.c new file mode 100644 index 0000000000..10fed37bce --- /dev/null +++ b/wii/libogc/libogc/ipc.c @@ -0,0 +1,1286 @@ +/*------------------------------------------------------------- + +ipc.c -- Interprocess Communication with Starlet + +Copyright (C) 2008 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) +Hector Martin (marcan) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + +#if defined(HW_RVL) + +#include +#include +#include +#include +#include +#include +#include +#include +#include "asm.h" +#include "processor.h" +#include "lwp.h" +#include "irq.h" +#include "ipc.h" +#include "cache.h" +#include "system.h" +#include "lwp_heap.h" +#include "lwp_wkspace.h" + +#define IPC_HEAP_SIZE 4096 +#define IPC_REQUESTSIZE 64 +#define IPC_NUMHEAPS 16 + +#define IOS_MAXFMT_PARAMS 32 + +#define IOS_OPEN 0x01 +#define IOS_CLOSE 0x02 +#define IOS_READ 0x03 +#define IOS_WRITE 0x04 +#define IOS_SEEK 0x05 +#define IOS_IOCTL 0x06 +#define IOS_IOCTLV 0x07 + +#define RELNCH_RELAUNCH 1 +#define RELNCH_BACKGROUND 2 + +struct _ipcreq +{ //ipc struct size: 32 + u32 cmd; //0 + s32 result; //4 + union { //8 + s32 fd; + u32 req_cmd; + }; + union { + struct { + char *filepath; + u32 mode; + } open; + struct { + void *data; + u32 len; + } read, write; + struct { + s32 where; + s32 whence; + } seek; + struct { + u32 ioctl; + void *buffer_in; + u32 len_in; + void *buffer_io; + u32 len_io; + } ioctl; + struct { + u32 ioctl; + u32 argcin; + u32 argcio; + struct _ioctlv *argv; + } ioctlv; + u32 args[5]; + }; + + ipccallback cb; //32 + void *usrdata; //36 + u32 relnch; //40 + lwpq_t syncqueue; //44 + u32 magic; //48 - used to avoid spurious responses, like from zelda. + u8 pad1[12]; //52 - 60 +} ATTRIBUTE_PACKED; + +struct _ipcreqres +{ + u32 cnt_sent; + u32 cnt_queue; + u32 req_send_no; + u32 req_queue_no; + struct _ipcreq *reqs[16]; +}; + +struct _ipcheap +{ + void *membase; + u32 size; + heap_cntrl heap; +}; + +struct _ioctlvfmt_bufent +{ + void *ipc_buf; + void *io_buf; + s32 copy_len; +}; + +struct _ioctlvfmt_cbdata +{ + ipccallback user_cb; + void *user_data; + s32 num_bufs; + u32 hId; + struct _ioctlvfmt_bufent *bufs; +}; + +static u32 IPC_REQ_MAGIC; + +static s32 _ipc_hid = -1; +static s32 _ipc_mailboxack = 1; +static u32 _ipc_relnchFl = 0; +static u32 _ipc_initialized = 0; +static u32 _ipc_clntinitialized = 0; +static u64 _ipc_spuriousresponsecnt = 0; +static struct _ipcreq *_ipc_relnchRpc = NULL; + +static void *_ipc_bufferlo = NULL; +static void *_ipc_bufferhi = NULL; +static void *_ipc_currbufferlo = NULL; +static void *_ipc_currbufferhi = NULL; + +static u32 _ipc_seed = 0xffffffff; + +static struct _ipcreqres _ipc_responses; + +static struct _ipcheap _ipc_heaps[IPC_NUMHEAPS] = +{ + {NULL, 0, {}} // all other elements should be inited to zero, says C standard, so this should do +}; + +static vu32* const _ipcReg = (u32*)0xCD000000; + +extern void __MaskIrq(u32 nMask); +extern void __UnmaskIrq(u32 nMask); +extern void* __SYS_GetIPCBufferLo(void); +extern void* __SYS_GetIPCBufferHi(void); + +extern u32 gettick(); + +static __inline__ u32 IPC_ReadReg(u32 reg) +{ + return _ipcReg[reg]; +} + +static __inline__ void IPC_WriteReg(u32 reg,u32 val) +{ + _ipcReg[reg] = val; +} + +static __inline__ void ACR_WriteReg(u32 reg,u32 val) +{ + _ipcReg[reg>>2] = val; +} + +static __inline__ void* __ipc_allocreq() +{ + return iosAlloc(_ipc_hid,IPC_REQUESTSIZE); +} + +static __inline__ void __ipc_freereq(void *ptr) +{ + iosFree(_ipc_hid,ptr); +} + +static __inline__ void __ipc_srand(u32 seed) +{ + _ipc_seed = seed; +} + +static __inline__ u32 __ipc_rand() +{ + _ipc_seed = (214013*_ipc_seed) + 2531011; + return _ipc_seed; +} + +static s32 __ioctlvfmtCB(s32 result,void *userdata) +{ + ipccallback user_cb; + void *user_data; + struct _ioctlvfmt_cbdata *cbdata; + struct _ioctlvfmt_bufent *pbuf; + + cbdata = (struct _ioctlvfmt_cbdata*)userdata; + + // deal with data buffers + if(cbdata->bufs) { + pbuf = cbdata->bufs; + while(cbdata->num_bufs--) { + if(pbuf->ipc_buf) { + // copy data if needed + if(pbuf->io_buf && pbuf->copy_len) + memcpy(pbuf->io_buf, pbuf->ipc_buf, pbuf->copy_len); + // then free the buffer + iosFree(cbdata->hId, pbuf->ipc_buf); + } + pbuf++; + } + } + + user_cb = cbdata->user_cb; + user_data = cbdata->user_data; + + // free buffer list + __lwp_wkspace_free(cbdata->bufs); + + // free callback data + __lwp_wkspace_free(cbdata); + + // call the user callback + if(user_cb) + return user_cb(result, user_data); + + return result; +} + +static s32 __ipc_queuerequest(struct _ipcreq *req) +{ + u32 cnt; + u32 level; + _CPU_ISR_Disable(level); + + cnt = (_ipc_responses.cnt_queue - _ipc_responses.cnt_sent); + if(cnt>=16) { + _CPU_ISR_Restore(level); + return IPC_EQUEUEFULL; + } + + _ipc_responses.reqs[_ipc_responses.req_queue_no] = req; + _ipc_responses.req_queue_no = ((_ipc_responses.req_queue_no+1)&0x0f); + _ipc_responses.cnt_queue++; + + _CPU_ISR_Restore(level); + return IPC_OK; +} + +static s32 __ipc_syncqueuerequest(struct _ipcreq *req) +{ + u32 cnt = (_ipc_responses.cnt_queue - _ipc_responses.cnt_sent); + if(cnt>=16) { + return IPC_EQUEUEFULL; + } + + _ipc_responses.reqs[_ipc_responses.req_queue_no] = req; + _ipc_responses.req_queue_no = ((_ipc_responses.req_queue_no+1)&0x0f); + _ipc_responses.cnt_queue++; + + return IPC_OK; +} + +static void __ipc_sendrequest() +{ + u32 ipc_send; + struct _ipcreq *req; + u32 cnt = (_ipc_responses.cnt_queue - _ipc_responses.cnt_sent); + if(cnt>0) { + req = _ipc_responses.reqs[_ipc_responses.req_send_no]; + if(req!=NULL) { + req->magic = IPC_REQ_MAGIC; + if(req->relnch&RELNCH_RELAUNCH) { + _ipc_relnchFl = 1; + _ipc_relnchRpc = req; + if(!(req->relnch&RELNCH_BACKGROUND)) + _ipc_mailboxack--; + } + DCFlushRange(req,sizeof(struct _ipcreq)); + + IPC_WriteReg(0,MEM_VIRTUAL_TO_PHYSICAL(req)); + _ipc_responses.req_send_no = ((_ipc_responses.req_send_no+1)&0x0f); + _ipc_responses.cnt_sent++; + _ipc_mailboxack--; + + ipc_send = ((IPC_ReadReg(1)&0x30)|0x01); + IPC_WriteReg(1,ipc_send); + } + } +} + +static void __ipc_replyhandler() +{ + u32 ipc_ack,cnt; + ioctlv *v = NULL; + struct _ipcreq *req = (struct _ipcreq*)IPC_ReadReg(2); + if(req==NULL) return; + + ipc_ack = ((IPC_ReadReg(1)&0x30)|0x04); + IPC_WriteReg(1,ipc_ack); + ACR_WriteReg(48,0x40000000); + + req = MEM_PHYSICAL_TO_K0(req); + DCInvalidateRange(req,32); + + if(req->magic==IPC_REQ_MAGIC) { + if(req->req_cmd==IOS_READ) { + if(req->read.data!=NULL) { + req->read.data = MEM_PHYSICAL_TO_K0(req->read.data); + if(req->result>0) DCInvalidateRange(req->read.data,req->result); + } + } else if(req->req_cmd==IOS_IOCTL) { + if(req->ioctl.buffer_io!=NULL) { + req->ioctl.buffer_io = MEM_PHYSICAL_TO_K0(req->ioctl.buffer_io); + DCInvalidateRange(req->ioctl.buffer_io,req->ioctl.len_io); + } + DCInvalidateRange(req->ioctl.buffer_in,req->ioctl.len_in); + } else if(req->req_cmd==IOS_IOCTLV) { + if(req->ioctlv.argv!=NULL) { + req->ioctlv.argv = MEM_PHYSICAL_TO_K0(req->ioctlv.argv); + DCInvalidateRange(req->ioctlv.argv,((req->ioctlv.argcin+req->ioctlv.argcio)*sizeof(struct _ioctlv))); + } + + cnt = 0; + v = (ioctlv*)req->ioctlv.argv; + while(cnt<(req->ioctlv.argcin+req->ioctlv.argcio)) { + if(v[cnt].data!=NULL) { + v[cnt].data = MEM_PHYSICAL_TO_K0(v[cnt].data); + DCInvalidateRange(v[cnt].data,v[cnt].len); + } + cnt++; + } + if(_ipc_relnchFl && _ipc_relnchRpc==req) { + _ipc_relnchFl = 0; + if(_ipc_mailboxack<1) _ipc_mailboxack++; + } + + } + + if(req->cb!=NULL) { + req->cb(req->result,req->usrdata); + __ipc_freereq(req); + } else + LWP_ThreadSignal(req->syncqueue); + } else { + // NOTE: we really want to find out if this ever happens + // and take steps to prevent it beforehand (because it will + // clobber memory, among other things). I suggest leaving this in + // even in non-DEBUG mode. Maybe even cause a system halt. + // It is the responsibility of the loader to clear these things, + // but we want to find out if they happen so loaders can be fixed. + _ipc_spuriousresponsecnt++; + } + ipc_ack = ((IPC_ReadReg(1)&0x30)|0x08); + IPC_WriteReg(1,ipc_ack); +} + +static void __ipc_ackhandler() +{ + u32 ipc_ack; + ipc_ack = ((IPC_ReadReg(1)&0x30)|0x02); + IPC_WriteReg(1,ipc_ack); + ACR_WriteReg(48,0x40000000); + + if(_ipc_mailboxack<1) _ipc_mailboxack++; + if(_ipc_mailboxack>0) { + if(_ipc_relnchFl){ + _ipc_relnchRpc->result = 0; + _ipc_relnchFl = 0; + + LWP_ThreadSignal(_ipc_relnchRpc->syncqueue); + + ipc_ack = ((IPC_ReadReg(1)&0x30)|0x08); + IPC_WriteReg(1,ipc_ack); + } + __ipc_sendrequest(); + } + +} + +static void __ipc_interrupthandler(u32 irq,void *ctx) +{ + u32 ipc_int = IPC_ReadReg(1); + if((ipc_int&0x0014)==0x0014) __ipc_replyhandler(); + + ipc_int = IPC_ReadReg(1); + if((ipc_int&0x0022)==0x0022) __ipc_ackhandler(); +} + +static s32 __ios_ioctlvformat_parse(const char *format,va_list args,struct _ioctlvfmt_cbdata *cbdata,s32 *cnt_in,s32 *cnt_io,struct _ioctlv **argv,s32 hId) +{ + s32 ret,i; + void *pdata; + void *iodata; + char type,*ps; + s32 len,maxbufs = 0; + ioctlv *argp = NULL; + struct _ioctlvfmt_bufent *bufp; + + if(hId == IPC_HEAP) hId = _ipc_hid; + if(hId < 0) return IPC_EINVAL; + + maxbufs = strnlen(format,IOS_MAXFMT_PARAMS); + if(maxbufs>=IOS_MAXFMT_PARAMS) return IPC_EINVAL; + + cbdata->hId = hId; + cbdata->bufs = __lwp_wkspace_allocate((sizeof(struct _ioctlvfmt_bufent)*(maxbufs+1))); + if(cbdata->bufs==NULL) return IPC_ENOMEM; + + argp = iosAlloc(hId,(sizeof(struct _ioctlv)*(maxbufs+1))); + if(argp==NULL) { + __lwp_wkspace_free(cbdata->bufs); + return IPC_ENOMEM; + } + + *argv = argp; + bufp = cbdata->bufs; + memset(argp,0,(sizeof(struct _ioctlv)*(maxbufs+1))); + memset(bufp,0,(sizeof(struct _ioctlvfmt_bufent)*(maxbufs+1))); + + cbdata->num_bufs = 1; + bufp->ipc_buf = argp; + bufp++; + + *cnt_in = 0; + *cnt_io = 0; + + ret = IPC_OK; + while(*format) { + type = tolower((int)*format); + switch(type) { + case 'b': + pdata = iosAlloc(hId,sizeof(u8)); + if(pdata==NULL) { + ret = IPC_ENOMEM; + goto free_and_error; + } + *(u8*)pdata = va_arg(args,u32); + argp->data = pdata; + argp->len = sizeof(u8); + bufp->ipc_buf = pdata; + cbdata->num_bufs++; + (*cnt_in)++; + argp++; + bufp++; + break; + case 'h': + pdata = iosAlloc(hId,sizeof(u16)); + if(pdata==NULL) { + ret = IPC_ENOMEM; + goto free_and_error; + } + *(u16*)pdata = va_arg(args,u32); + argp->data = pdata; + argp->len = sizeof(u16); + bufp->ipc_buf = pdata; + cbdata->num_bufs++; + (*cnt_in)++; + argp++; + bufp++; + break; + case 'i': + pdata = iosAlloc(hId,sizeof(u32)); + if(pdata==NULL) { + ret = IPC_ENOMEM; + goto free_and_error; + } + *(u32*)pdata = va_arg(args,u32); + argp->data = pdata; + argp->len = sizeof(u32); + bufp->ipc_buf = pdata; + cbdata->num_bufs++; + (*cnt_in)++; + argp++; + bufp++; + break; + case 'q': + pdata = iosAlloc(hId,sizeof(u64)); + if(pdata==NULL) { + ret = IPC_ENOMEM; + goto free_and_error; + } + *(u64*)pdata = va_arg(args,u64); + argp->data = pdata; + argp->len = sizeof(u64); + bufp->ipc_buf = pdata; + cbdata->num_bufs++; + (*cnt_in)++; + argp++; + bufp++; + break; + case 'd': + argp->data = va_arg(args, void*); + argp->len = va_arg(args, u32); + (*cnt_in)++; + argp++; + break; + case 's': + ps = va_arg(args, char*); + len = strnlen(ps,256); + if(len>=256) { + ret = IPC_EINVAL; + goto free_and_error; + } + + pdata = iosAlloc(hId,(len+1)); + if(pdata==NULL) { + ret = IPC_ENOMEM; + goto free_and_error; + } + memcpy(pdata,ps,(len+1)); + argp->data = pdata; + argp->len = (len+1); + bufp->ipc_buf = pdata; + cbdata->num_bufs++; + (*cnt_in)++; + argp++; + bufp++; + break; + case ':': + format++; + goto parse_io_params; + default: + ret = IPC_EINVAL; + goto free_and_error; + } + format++; + } + +parse_io_params: + while(*format) { + type = tolower((int)*format); + switch(type) { + case 'b': + pdata = iosAlloc(hId,sizeof(u8)); + if(pdata==NULL) { + ret = IPC_ENOMEM; + goto free_and_error; + } + iodata = va_arg(args,u8*); + *(u8*)pdata = *(u8*)iodata; + argp->data = pdata; + argp->len = sizeof(u8); + bufp->ipc_buf = pdata; + bufp->io_buf = iodata; + bufp->copy_len = sizeof(u8); + cbdata->num_bufs++; + (*cnt_io)++; + argp++; + bufp++; + break; + case 'h': + pdata = iosAlloc(hId,sizeof(u16)); + if(pdata==NULL) { + ret = IPC_ENOMEM; + goto free_and_error; + } + iodata = va_arg(args,u16*); + *(u16*)pdata = *(u16*)iodata; + argp->data = pdata; + argp->len = sizeof(u16); + bufp->ipc_buf = pdata; + bufp->io_buf = iodata; + bufp->copy_len = sizeof(u16); + cbdata->num_bufs++; + (*cnt_io)++; + argp++; + bufp++; + break; + case 'i': + pdata = iosAlloc(hId,sizeof(u32)); + if(pdata==NULL) { + ret = IPC_ENOMEM; + goto free_and_error; + } + iodata = va_arg(args,u32*); + *(u32*)pdata = *(u32*)iodata; + argp->data = pdata; + argp->len = sizeof(u32); + bufp->ipc_buf = pdata; + bufp->io_buf = iodata; + bufp->copy_len = sizeof(u32); + cbdata->num_bufs++; + (*cnt_io)++; + argp++; + bufp++; + break; + case 'q': + pdata = iosAlloc(hId,sizeof(u64)); + if(pdata==NULL) { + ret = IPC_ENOMEM; + goto free_and_error; + } + iodata = va_arg(args,u64*); + *(u64*)pdata = *(u64*)iodata; + argp->data = pdata; + argp->len = sizeof(u64); + bufp->ipc_buf = pdata; + bufp->io_buf = iodata; + bufp->copy_len = sizeof(u64); + cbdata->num_bufs++; + (*cnt_io)++; + argp++; + bufp++; + break; + case 'd': + argp->data = va_arg(args, void*); + argp->len = va_arg(args, u32); + (*cnt_io)++; + argp++; + break; + default: + ret = IPC_EINVAL; + goto free_and_error; + } + format++; + } + return IPC_OK; + +free_and_error: + for(i=0;inum_bufs;i++) { + if(cbdata->bufs[i].ipc_buf!=NULL) iosFree(hId,cbdata->bufs[i].ipc_buf); + } + __lwp_wkspace_free(cbdata->bufs); + return ret; +} + +static s32 __ipc_asyncrequest(struct _ipcreq *req) +{ + s32 ret; + u32 level; + + ret = __ipc_queuerequest(req); + if(ret) __ipc_freereq(req); + else { + _CPU_ISR_Disable(level); + if(_ipc_mailboxack>0) __ipc_sendrequest(); + _CPU_ISR_Restore(level); + } + return ret; +} + +static s32 __ipc_syncrequest(struct _ipcreq *req) +{ + s32 ret; + u32 level; + + LWP_InitQueue(&req->syncqueue); + + _CPU_ISR_Disable(level); + ret = __ipc_syncqueuerequest(req); + if(ret==0) { + if(_ipc_mailboxack>0) __ipc_sendrequest(); + LWP_ThreadSleep(req->syncqueue); + ret = req->result; + } + _CPU_ISR_Restore(level); + + LWP_CloseQueue(req->syncqueue); + return ret; +} + +s32 iosCreateHeap(s32 size) +{ + s32 i,ret; + s32 free; + u32 level; + u32 ipclo,ipchi; + _CPU_ISR_Disable(level); + + i=0; + while(i=IPC_NUMHEAPS) { + _CPU_ISR_Restore(level); + return IPC_ENOHEAP; + } + + ipclo = (((u32)IPC_GetBufferLo()+0x1f)&~0x1f); + ipchi = (u32)IPC_GetBufferHi(); + free = (ipchi - (ipclo + size)); + if(free<0) return IPC_ENOMEM; + + _ipc_heaps[i].membase = (void*)ipclo; + _ipc_heaps[i].size = size; + + ret = __lwp_heap_init(&_ipc_heaps[i].heap,(void*)ipclo,size,PPC_CACHE_ALIGNMENT); + if(ret<=0) return IPC_ENOMEM; + + IPC_SetBufferLo((void*)(ipclo+size)); + _CPU_ISR_Restore(level); + return i; +} + +void* iosAlloc(s32 hid,s32 size) +{ + if(hid<0 || hid>=IPC_NUMHEAPS || size<=0) return NULL; + return __lwp_heap_allocate(&_ipc_heaps[hid].heap,size); +} + +void iosFree(s32 hid,void *ptr) +{ + if(hid<0 || hid>=IPC_NUMHEAPS || ptr==NULL) return; + __lwp_heap_free(&_ipc_heaps[hid].heap,ptr); +} + +void* IPC_GetBufferLo() +{ + return _ipc_currbufferlo; +} + +void* IPC_GetBufferHi() +{ + return _ipc_currbufferhi; +} + +void IPC_SetBufferLo(void *bufferlo) +{ + if(_ipc_bufferlo<=bufferlo) _ipc_currbufferlo = bufferlo; +} + +void IPC_SetBufferHi(void *bufferhi) +{ + if(bufferhi<=_ipc_bufferhi) _ipc_currbufferhi = bufferhi; +} + +void __IPC_Init(void) +{ + if(!_ipc_initialized) { + _ipc_bufferlo = _ipc_currbufferlo = __SYS_GetIPCBufferLo(); + _ipc_bufferhi = _ipc_currbufferhi = __SYS_GetIPCBufferHi(); + _ipc_initialized = 1; + } +} + +u32 __IPC_ClntInit(void) +{ + if(!_ipc_clntinitialized) { + _ipc_clntinitialized = 1; + + // generate a random request magic + __ipc_srand(gettick()); + IPC_REQ_MAGIC = __ipc_rand(); + + __IPC_Init(); + + _ipc_hid = iosCreateHeap(IPC_HEAP_SIZE); + IRQ_Request(IRQ_PI_ACR,__ipc_interrupthandler,NULL); + __UnmaskIrq(IM_PI_ACR); + IPC_WriteReg(1,56); + } + return IPC_OK; +} + +void __IPC_Reinitialize(void) +{ + u32 level; + + _CPU_ISR_Disable(level); + + IPC_WriteReg(1,56); + + _ipc_mailboxack = 1; + _ipc_relnchFl = 0; + _ipc_relnchRpc = NULL; + + _ipc_responses.req_queue_no = 0; + _ipc_responses.cnt_queue = 0; + _ipc_responses.req_send_no = 0; + _ipc_responses.cnt_sent = 0; + + _CPU_ISR_Restore(level); +} + +s32 IOS_Open(const char *filepath,u32 mode) +{ + s32 ret; + struct _ipcreq *req; + + if(filepath==NULL) return IPC_EINVAL; + + req = __ipc_allocreq(); + if(req==NULL) return IPC_ENOMEM; + + req->cmd = IOS_OPEN; + req->cb = NULL; + req->relnch = 0; + + DCFlushRange((void*)filepath,strnlen(filepath,IPC_MAXPATH_LEN) + 1); + + req->open.filepath = (char*)MEM_VIRTUAL_TO_PHYSICAL(filepath); + req->open.mode = mode; + + ret = __ipc_syncrequest(req); + + if(req!=NULL) __ipc_freereq(req); + return ret; +} + +s32 IOS_OpenAsync(const char *filepath,u32 mode,ipccallback ipc_cb,void *usrdata) +{ + struct _ipcreq *req; + + req = __ipc_allocreq(); + if(req==NULL) return IPC_ENOMEM; + + req->cmd = IOS_OPEN; + req->cb = ipc_cb; + req->usrdata = usrdata; + req->relnch = 0; + + DCFlushRange((void*)filepath,strnlen(filepath,IPC_MAXPATH_LEN) + 1); + + req->open.filepath = (char*)MEM_VIRTUAL_TO_PHYSICAL(filepath); + req->open.mode = mode; + + return __ipc_asyncrequest(req); +} + +s32 IOS_Close(s32 fd) +{ + s32 ret; + struct _ipcreq *req; + + req = __ipc_allocreq(); + if(req==NULL) return IPC_ENOMEM; + + req->cmd = IOS_CLOSE; + req->fd = fd; + req->cb = NULL; + req->relnch = 0; + + ret = __ipc_syncrequest(req); + + if(req!=NULL) __ipc_freereq(req); + return ret; +} + +s32 IOS_CloseAsync(s32 fd,ipccallback ipc_cb,void *usrdata) +{ + struct _ipcreq *req; + + req = __ipc_allocreq(); + if(req==NULL) return IPC_ENOMEM; + + req->cmd = IOS_CLOSE; + req->fd = fd; + req->cb = ipc_cb; + req->usrdata = usrdata; + req->relnch = 0; + + return __ipc_asyncrequest(req); +} + +s32 IOS_Read(s32 fd,void *buf,s32 len) +{ + s32 ret; + struct _ipcreq *req; + + req = __ipc_allocreq(); + if(req==NULL) return IPC_ENOMEM; + + req->cmd = IOS_READ; + req->fd = fd; + req->cb = NULL; + req->relnch = 0; + + DCInvalidateRange(buf,len); + req->read.data = (void*)MEM_VIRTUAL_TO_PHYSICAL(buf); + req->read.len = len; + + ret = __ipc_syncrequest(req); + + if(req!=NULL) __ipc_freereq(req); + return ret; +} + +s32 IOS_ReadAsync(s32 fd,void *buf,s32 len,ipccallback ipc_cb,void *usrdata) +{ + struct _ipcreq *req; + + req = __ipc_allocreq(); + if(req==NULL) return IPC_ENOMEM; + + req->cmd = IOS_READ; + req->fd = fd; + req->cb = ipc_cb; + req->usrdata = usrdata; + req->relnch = 0; + + DCInvalidateRange(buf,len); + req->read.data = (void*)MEM_VIRTUAL_TO_PHYSICAL(buf); + req->read.len = len; + + return __ipc_asyncrequest(req); +} + +s32 IOS_Write(s32 fd,const void *buf,s32 len) +{ + s32 ret; + struct _ipcreq *req; + + req = __ipc_allocreq(); + if(req==NULL) return IPC_ENOMEM; + + req->cmd = IOS_WRITE; + req->fd = fd; + req->cb = NULL; + req->relnch = 0; + + DCFlushRange((void*)buf,len); + req->write.data = (void*)MEM_VIRTUAL_TO_PHYSICAL(buf); + req->write.len = len; + + ret = __ipc_syncrequest(req); + + if(req!=NULL) __ipc_freereq(req); + return ret; +} + +s32 IOS_WriteAsync(s32 fd,const void *buf,s32 len,ipccallback ipc_cb,void *usrdata) +{ + struct _ipcreq *req; + + req = __ipc_allocreq(); + if(req==NULL) return IPC_ENOMEM; + + req->cmd = IOS_WRITE; + req->fd = fd; + req->cb = ipc_cb; + req->usrdata = usrdata; + req->relnch = 0; + + DCFlushRange((void*)buf,len); + req->write.data = (void*)MEM_VIRTUAL_TO_PHYSICAL(buf); + req->write.len = len; + + return __ipc_asyncrequest(req); +} + +s32 IOS_Seek(s32 fd,s32 where,s32 whence) +{ + s32 ret; + struct _ipcreq *req; + + req = __ipc_allocreq(); + if(req==NULL) return IPC_ENOMEM; + + req->cmd = IOS_SEEK; + req->fd = fd; + req->cb = NULL; + req->relnch = 0; + + req->seek.where = where; + req->seek.whence = whence; + + ret = __ipc_syncrequest(req); + + if(req!=NULL) __ipc_freereq(req); + return ret; +} + +s32 IOS_SeekAsync(s32 fd,s32 where,s32 whence,ipccallback ipc_cb,void *usrdata) +{ + struct _ipcreq *req; + + req = __ipc_allocreq(); + if(req==NULL) return IPC_ENOMEM; + + req->cmd = IOS_SEEK; + req->fd = fd; + req->cb = ipc_cb; + req->usrdata = usrdata; + req->relnch = 0; + + req->seek.where = where; + req->seek.whence = whence; + + return __ipc_asyncrequest(req); +} + +s32 IOS_Ioctl(s32 fd,s32 ioctl,void *buffer_in,s32 len_in,void *buffer_io,s32 len_io) +{ + s32 ret; + struct _ipcreq *req; + + req = __ipc_allocreq(); + if(req==NULL) return IPC_ENOMEM; + + req->cmd = IOS_IOCTL; + req->fd = fd; + req->cb = NULL; + req->relnch = 0; + + req->ioctl.ioctl = ioctl; + req->ioctl.buffer_in = (void*)MEM_VIRTUAL_TO_PHYSICAL(buffer_in); + req->ioctl.len_in = len_in; + req->ioctl.buffer_io = (void*)MEM_VIRTUAL_TO_PHYSICAL(buffer_io); + req->ioctl.len_io = len_io; + + DCFlushRange(buffer_in,len_in); + DCFlushRange(buffer_io,len_io); + + ret = __ipc_syncrequest(req); + + if(req!=NULL) __ipc_freereq(req); + return ret; +} + +s32 IOS_IoctlAsync(s32 fd,s32 ioctl,void *buffer_in,s32 len_in,void *buffer_io,s32 len_io,ipccallback ipc_cb,void *usrdata) +{ + struct _ipcreq *req; + + req = __ipc_allocreq(); + if(req==NULL) return IPC_ENOMEM; + + req->cmd = IOS_IOCTL; + req->fd = fd; + req->cb = ipc_cb; + req->usrdata = usrdata; + req->relnch = 0; + + req->ioctl.ioctl = ioctl; + req->ioctl.buffer_in = (void*)MEM_VIRTUAL_TO_PHYSICAL(buffer_in); + req->ioctl.len_in = len_in; + req->ioctl.buffer_io = (void*)MEM_VIRTUAL_TO_PHYSICAL(buffer_io); + req->ioctl.len_io = len_io; + + DCFlushRange(buffer_in,len_in); + DCFlushRange(buffer_io,len_io); + + return __ipc_asyncrequest(req); +} + +s32 IOS_Ioctlv(s32 fd,s32 ioctl,s32 cnt_in,s32 cnt_io,ioctlv *argv) +{ + s32 i,ret; + struct _ipcreq *req; + + req = __ipc_allocreq(); + if(req==NULL) return IPC_ENOMEM; + + req->cmd = IOS_IOCTLV; + req->fd = fd; + req->cb = NULL; + req->relnch = 0; + + req->ioctlv.ioctl = ioctl; + req->ioctlv.argcin = cnt_in; + req->ioctlv.argcio = cnt_io; + req->ioctlv.argv = (struct _ioctlv*)MEM_VIRTUAL_TO_PHYSICAL(argv); + + i = 0; + while(i0) { + DCFlushRange(argv[i].data,argv[i].len); + argv[i].data = (void*)MEM_VIRTUAL_TO_PHYSICAL(argv[i].data); + } + i++; + } + + i = 0; + while(i0) { + DCFlushRange(argv[cnt_in+i].data,argv[cnt_in+i].len); + argv[cnt_in+i].data = (void*)MEM_VIRTUAL_TO_PHYSICAL(argv[cnt_in+i].data); + } + i++; + } + DCFlushRange(argv,((cnt_in+cnt_io)<<3)); + + ret = __ipc_syncrequest(req); + + if(req!=NULL) __ipc_freereq(req); + return ret; +} + + +s32 IOS_IoctlvAsync(s32 fd,s32 ioctl,s32 cnt_in,s32 cnt_io,ioctlv *argv,ipccallback ipc_cb,void *usrdata) +{ + s32 i; + struct _ipcreq *req; + + req = __ipc_allocreq(); + if(req==NULL) return IPC_ENOMEM; + + req->cmd = IOS_IOCTLV; + req->fd = fd; + req->cb = ipc_cb; + req->usrdata = usrdata; + req->relnch = 0; + + req->ioctlv.ioctl = ioctl; + req->ioctlv.argcin = cnt_in; + req->ioctlv.argcio = cnt_io; + req->ioctlv.argv = (struct _ioctlv*)MEM_VIRTUAL_TO_PHYSICAL(argv); + + i = 0; + while(i0) { + DCFlushRange(argv[i].data,argv[i].len); + argv[i].data = (void*)MEM_VIRTUAL_TO_PHYSICAL(argv[i].data); + } + i++; + } + + i = 0; + while(i0) { + DCFlushRange(argv[cnt_in+i].data,argv[cnt_in+i].len); + argv[cnt_in+i].data = (void*)MEM_VIRTUAL_TO_PHYSICAL(argv[cnt_in+i].data); + } + i++; + } + DCFlushRange(argv,((cnt_in+cnt_io)<<3)); + + return __ipc_asyncrequest(req); +} + +s32 IOS_IoctlvFormat(s32 hId,s32 fd,s32 ioctl,const char *format,...) +{ + s32 ret; + va_list args; + s32 cnt_in,cnt_io; + struct _ioctlv *argv; + struct _ioctlvfmt_cbdata *cbdata; + + cbdata = __lwp_wkspace_allocate(sizeof(struct _ioctlvfmt_cbdata)); + if(cbdata==NULL) return IPC_ENOMEM; + + memset(cbdata,0,sizeof(struct _ioctlvfmt_cbdata)); + + va_start(args,format); + ret = __ios_ioctlvformat_parse(format,args,cbdata,&cnt_in,&cnt_io,&argv,hId); + va_end(args); + if(ret<0) { + __lwp_wkspace_free(cbdata); + return ret; + } + + ret = IOS_Ioctlv(fd,ioctl,cnt_in,cnt_io,argv); + __ioctlvfmtCB(ret,cbdata); + + return ret; +} + +s32 IOS_IoctlvFormatAsync(s32 hId,s32 fd,s32 ioctl,ipccallback usr_cb,void *usr_data,const char *format,...) +{ + s32 ret; + va_list args; + s32 cnt_in,cnt_io; + struct _ioctlv *argv; + struct _ioctlvfmt_cbdata *cbdata; + + cbdata = __lwp_wkspace_allocate(sizeof(struct _ioctlvfmt_cbdata)); + if(cbdata==NULL) return IPC_ENOMEM; + + memset(cbdata,0,sizeof(struct _ioctlvfmt_cbdata)); + + va_start(args,format); + ret = __ios_ioctlvformat_parse(format,args,cbdata,&cnt_in,&cnt_io,&argv,hId); + va_end(args); + if(ret<0) { + __lwp_wkspace_free(cbdata); + return ret; + } + + cbdata->user_cb = usr_cb; + cbdata->user_data = usr_data; + return IOS_IoctlvAsync(fd,ioctl,cnt_in,cnt_io,argv,__ioctlvfmtCB,cbdata); +} + +s32 IOS_IoctlvReboot(s32 fd,s32 ioctl,s32 cnt_in,s32 cnt_io,ioctlv *argv) +{ + s32 i,ret; + struct _ipcreq *req; + + req = __ipc_allocreq(); + if(req==NULL) return IPC_ENOMEM; + + req->cmd = IOS_IOCTLV; + req->fd = fd; + req->cb = NULL; + req->relnch = RELNCH_RELAUNCH; + + req->ioctlv.ioctl = ioctl; + req->ioctlv.argcin = cnt_in; + req->ioctlv.argcio = cnt_io; + req->ioctlv.argv = (struct _ioctlv*)MEM_VIRTUAL_TO_PHYSICAL(argv); + + i = 0; + while(i0) { + DCFlushRange(argv[i].data,argv[i].len); + argv[i].data = (void*)MEM_VIRTUAL_TO_PHYSICAL(argv[i].data); + } + i++; + } + + i = 0; + while(i0) { + DCFlushRange(argv[cnt_in+i].data,argv[cnt_in+i].len); + argv[cnt_in+i].data = (void*)MEM_VIRTUAL_TO_PHYSICAL(argv[cnt_in+i].data); + } + i++; + } + DCFlushRange(argv,((cnt_in+cnt_io)<<3)); + + ret = __ipc_syncrequest(req); + + if(req!=NULL) __ipc_freereq(req); + return ret; +} + +s32 IOS_IoctlvRebootBackground(s32 fd,s32 ioctl,s32 cnt_in,s32 cnt_io,ioctlv *argv) +{ + s32 i,ret; + struct _ipcreq *req; + + req = __ipc_allocreq(); + if(req==NULL) return IPC_ENOMEM; + + req->cmd = IOS_IOCTLV; + req->result = 0; + req->fd = fd; + req->cb = NULL; + req->relnch = RELNCH_BACKGROUND|RELNCH_RELAUNCH; + + req->ioctlv.ioctl = ioctl; + req->ioctlv.argcin = cnt_in; + req->ioctlv.argcio = cnt_io; + req->ioctlv.argv = (struct _ioctlv*)MEM_VIRTUAL_TO_PHYSICAL(argv); + + i = 0; + while(i0) { + DCFlushRange(argv[i].data,argv[i].len); + argv[i].data = (void*)MEM_VIRTUAL_TO_PHYSICAL(argv[i].data); + } + i++; + } + + i = 0; + while(i0) { + DCFlushRange(argv[cnt_in+i].data,argv[cnt_in+i].len); + argv[cnt_in+i].data = (void*)MEM_VIRTUAL_TO_PHYSICAL(argv[cnt_in+i].data); + } + i++; + } + DCFlushRange(argv,((cnt_in+cnt_io)<<3)); + + ret = __ipc_syncrequest(req); + + if(req!=NULL) __ipc_freereq(req); + return ret; +} + +#endif diff --git a/wii/libogc/libogc/irq.c b/wii/libogc/libogc/irq.c new file mode 100644 index 0000000000..0e59f51e2b --- /dev/null +++ b/wii/libogc/libogc/irq.c @@ -0,0 +1,421 @@ +/*------------------------------------------------------------- + +irq.h -- Interrupt subsystem + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + + +#include +#include +#include "asm.h" +#include "cache.h" +#include "context.h" +#include "processor.h" +#include "lwp_threads.h" +#include "irq.h" +#include "console.h" + +#define CPU_STACK_ALIGNMENT 8 +#define CPU_MINIMUM_STACK_FRAME_SIZE 16 + +#define _SHIFTL(v, s, w) \ + ((u32) (((u32)(v) & ((0x01 << (w)) - 1)) << (s))) +#define _SHIFTR(v, s, w) \ + ((u32)(((u32)(v) >> (s)) & ((0x01 << (w)) - 1))) + +struct irq_handler_s { + raw_irq_handler_t pHndl; + void *pCtx; +}; + +static u64 spuriousIrq = 0; +static u32 prevIrqMask = 0; +static u32 currIrqMask = 0; +static struct irq_handler_s g_IRQHandler[32]; + +static vu32* const _piReg = (u32*)0xCC003000; +static vu16* const _memReg = (u16*)0xCC004000; +static vu16* const _dspReg = (u16*)0xCC005000; + +#if defined(HW_DOL) +static vu32* const _exiReg = (u32*)0xCC006800; +static vu32* const _aiReg = (u32*)0xCC006C00; +#elif defined(HW_RVL) +static vu32* const _exiReg = (u32*)0xCD006800; +static vu32* const _aiReg = (u32*)0xCD006C00; +#endif + +static u32 const _irqPrio[] = {IM_PI_ERROR,IM_PI_DEBUG,IM_MEM,IM_PI_RSW, + IM_PI_VI,(IM_PI_PETOKEN|IM_PI_PEFINISH), + IM_PI_HSP, + (IM_DSP_ARAM|IM_DSP_DSP|IM_AI|IM_EXI|IM_PI_SI|IM_PI_DI), + IM_DSP_AI,IM_PI_CP, +#if defined(HW_RVL) + IM_PI_ACR, +#endif + 0xffffffff}; + +extern void __exception_load(u32,void *,u32,void *); + +extern s8 irqhandler_start[],irqhandler_end[]; +extern u8 __intrstack_addr[],__intrstack_end[]; + +void c_irqdispatcher(frame_context *ctx) +{ + u32 i,icause,intmask,irq = 0; + u32 cause,mask; + + cause = _piReg[0]&~0x10000; + mask = _piReg[1]; + + if(!cause || !(cause&mask)) { + spuriousIrq++; + return; + } + + intmask = 0; + if(cause&0x00000080) { //Memory Interface + icause = _memReg[15]; + if(icause&0x00000001) { + intmask |= IRQMASK(IRQ_MEM0); + } + if(icause&0x00000002) { + intmask |= IRQMASK(IRQ_MEM1); + } + if(icause&0x00000004) { + intmask |= IRQMASK(IRQ_MEM2); + } + if(icause&0x00000008) { + intmask |= IRQMASK(IRQ_MEM3); + } + if(icause&0x00000010) { + intmask |= IRQMASK(IRQ_MEMADDRESS); + } + } + if(cause&0x00000040) { //DSP + icause = _dspReg[5]; + if(icause&0x00000008){ + intmask |= IRQMASK(IRQ_DSP_AI); + } + if(icause&0x00000020){ + intmask |= IRQMASK(IRQ_DSP_ARAM); + } + if(icause&0x00000080){ + intmask |= IRQMASK(IRQ_DSP_DSP); + } + } + if(cause&0x00000020) { //Streaming + icause = _aiReg[0]; + if(icause&0x00000008) { + intmask |= IRQMASK(IRQ_AI); + } + } + if(cause&0x00000010) { //EXI + //EXI 0 + icause = _exiReg[0]; + if(icause&0x00000002) { + intmask |= IRQMASK(IRQ_EXI0_EXI); + } + if(icause&0x00000008) { + intmask |= IRQMASK(IRQ_EXI0_TC); + } + if(icause&0x00000800) { + intmask |= IRQMASK(IRQ_EXI0_EXT); + } + //EXI 1 + icause = _exiReg[5]; + if(icause&0x00000002) { + intmask |= IRQMASK(IRQ_EXI1_EXI); + } + if(icause&0x00000008) { + intmask |= IRQMASK(IRQ_EXI1_TC); + } + if(icause&0x00000800) { + intmask |= IRQMASK(IRQ_EXI1_EXT); + } + //EXI 2 + icause = _exiReg[10]; + if(icause&0x00000002) { + intmask |= IRQMASK(IRQ_EXI2_EXI); + } + if(icause&0x00000008) { + intmask |= IRQMASK(IRQ_EXI2_TC); + } + } + if(cause&0x00002000) { //High Speed Port + intmask |= IRQMASK(IRQ_PI_HSP); + } + if(cause&0x00001000) { //External Debugger + intmask |= IRQMASK(IRQ_PI_DEBUG); + } + if(cause&0x00000400) { //Frame Ready (PE_FINISH) + intmask |= IRQMASK(IRQ_PI_PEFINISH); + } + if(cause&0x00000200) { //Token Assertion (PE_TOKEN) + intmask |= IRQMASK(IRQ_PI_PETOKEN); + } + if(cause&0x00000100) { //Video Interface + intmask |= IRQMASK(IRQ_PI_VI); + } + if(cause&0x00000008) { //Serial + intmask |= IRQMASK(IRQ_PI_SI); + } + if(cause&0x00000004) { //DVD + intmask |= IRQMASK(IRQ_PI_DI); + } + if(cause&0x00000002) { //Reset Switch + intmask |= IRQMASK(IRQ_PI_RSW); + } + if(cause&0x00000800) { //Command FIFO + intmask |= IRQMASK(IRQ_PI_CP); + } + if(cause&0x00000001) { //GP Runtime Error + intmask |= IRQMASK(IRQ_PI_ERROR); + } +#if defined(HW_RVL) + if(cause&0x00004000) { + intmask |= IRQMASK(IRQ_PI_ACR); + } +#endif + mask = intmask&~(prevIrqMask|currIrqMask); + if(mask) { + i=0; + irq = 0; + while(i<(sizeof(_irqPrio)/sizeof(u32))) { + if((irq=(mask&_irqPrio[i]))) { + irq = cntlzw(irq); + break; + } + i++; + } + + if(g_IRQHandler[irq].pHndl) g_IRQHandler[irq].pHndl(irq,g_IRQHandler[irq].pCtx); + } +} + +static u32 __SetInterrupts(u32 iMask,u32 nMask) +{ + u32 imask; + u32 irq = cntlzw(iMask); + + if(irq<=IRQ_MEMADDRESS) + { + imask = 0; + if(!(nMask&IM_MEM0)) imask |= 0x0001; + if(!(nMask&IM_MEM1)) imask |= 0x0002; + if(!(nMask&IM_MEM2)) imask |= 0x0004; + if(!(nMask&IM_MEM3)) imask |= 0x0008; + if(!(nMask&IM_MEMADDRESS)) imask |= 0x0010; + _memReg[14] = (u16)imask; + return (iMask&~IM_MEM); + } + + if(irq>=IRQ_DSP_AI && irq<=IRQ_DSP_DSP) { + imask = _dspReg[5]&~0x1f8; + if(!(nMask&IM_DSP_AI)) imask |= 0x0010; + if(!(nMask&IM_DSP_ARAM)) imask |= 0x0040; + if(!(nMask&IM_DSP_DSP)) imask |= 0x0100; + _dspReg[5] = (u16)imask; + return (iMask&~IM_DSP); + } + + if(irq==IRQ_AI) { + imask = _aiReg[0]&~0x2c; + if(!(nMask&IM_AI)) imask |= 0x0004; + _aiReg[0] = imask; + return (iMask&~IM_AI); + } + if(irq>=IRQ_EXI0_EXI && irq<=IRQ_EXI0_EXT) { + imask = _exiReg[0]&~0x2c0f; + if(!(nMask&IM_EXI0_EXI)) imask |= 0x0001; + if(!(nMask&IM_EXI0_TC)) imask |= 0x0004; + if(!(nMask&IM_EXI0_EXT)) imask |= 0x0400; + _exiReg[0] = imask; + return (iMask&~IM_EXI0); + } + + if(irq>=IRQ_EXI1_EXI && irq<=IRQ_EXI1_EXT) { + imask = _exiReg[5]&~0x0c0f; + if(!(nMask&IM_EXI1_EXI)) imask |= 0x0001; + if(!(nMask&IM_EXI1_TC)) imask |= 0x0004; + if(!(nMask&IM_EXI1_EXT)) imask |= 0x0400; + _exiReg[5] = imask; + return (iMask&~IM_EXI1); + } + + if(irq>=IRQ_EXI2_EXI && irq<=IRQ_EXI2_TC) { + imask = _exiReg[10]&~0x000f; + if(!(nMask&IM_EXI2_EXI)) imask |= 0x0001; + if(!(nMask&IM_EXI2_TC)) imask |= 0x0004; + _exiReg[10] = imask; + return (iMask&~IM_EXI2); + } + +#if defined(HW_DOL) + if(irq>=IRQ_PI_CP && irq<=IRQ_PI_HSP) { +#elif defined(HW_RVL) + if(irq>=IRQ_PI_CP && irq<=IRQ_PI_ACR) { +#endif + imask = 0xf0; + if(!(nMask&IM_PI_ERROR)) { + imask |= 0x00000001; + } + if(!(nMask&IM_PI_RSW)) { + imask |= 0x00000002; + } + if(!(nMask&IM_PI_DI)) { + imask |= 0x00000004; + } + if(!(nMask&IM_PI_SI)) { + imask |= 0x00000008; + } + if(!(nMask&IM_PI_VI)) { + imask |= 0x00000100; + } + if(!(nMask&IM_PI_PETOKEN)) { + imask |= 0x00000200; + } + if(!(nMask&IM_PI_PEFINISH)) { + imask |= 0x00000400; + } + if(!(nMask&IM_PI_CP)) { + imask |= 0x00000800; + } + if(!(nMask&IM_PI_DEBUG)) { + imask |= 0x00001000; + } + if(!(nMask&IM_PI_HSP)) { + imask |= 0x00002000; + } +#if defined(HW_RVL) + if(!(nMask&IM_PI_ACR)) { + imask |= 0x00004000; + } +#endif + _piReg[1] = imask; + return (iMask&~IM_PI); + } + return 0; +} + +void __UnmaskIrq(u32 nMask) +{ + u32 level; + u32 mask; + + _CPU_ISR_Disable(level); + mask = (nMask&(prevIrqMask|currIrqMask)); + nMask = (prevIrqMask&~nMask); + prevIrqMask = nMask; + while((mask=__SetInterrupts(mask,(nMask|currIrqMask)))!=0); + _CPU_ISR_Restore(level); +} + +void __MaskIrq(u32 nMask) +{ + u32 level; + u32 mask; + + _CPU_ISR_Disable(level); + mask = (nMask&~(prevIrqMask|currIrqMask)); + nMask = (nMask|prevIrqMask); + prevIrqMask = nMask; + while((mask=__SetInterrupts(mask,(nMask|currIrqMask)))!=0); + _CPU_ISR_Restore(level); +} + +void __irq_init() +{ + register u32 intrStack = (u32)__intrstack_addr; + register u32 intrStack_end = (u32)__intrstack_end; + register u32 irqNestingLevel = 0; + + memset(g_IRQHandler,0,32*sizeof(struct irq_handler_s)); + + *((u32*)intrStack_end) = 0xDEADBEEF; + intrStack = intrStack - CPU_MINIMUM_STACK_FRAME_SIZE; + intrStack &= ~(CPU_STACK_ALIGNMENT-1); + *((u32*)intrStack) = 0; + + mtspr(272,irqNestingLevel); + mtspr(273,intrStack); + + prevIrqMask = 0; + currIrqMask = 0; + _piReg[1] = 0xf0; + + __MaskIrq(-32); + + _piReg[0] = 0x01; + __UnmaskIrq(IM_PI_ERROR); +} + +raw_irq_handler_t IRQ_Request(u32 nIrq,raw_irq_handler_t pHndl,void *pCtx) +{ + u32 level; + + _CPU_ISR_Disable(level); + raw_irq_handler_t old = g_IRQHandler[nIrq].pHndl; + g_IRQHandler[nIrq].pHndl = pHndl; + g_IRQHandler[nIrq].pCtx = pCtx; + _CPU_ISR_Restore(level); + return old; +} + +raw_irq_handler_t IRQ_GetHandler(u32 nIrq) +{ + u32 level; + raw_irq_handler_t ret; + + _CPU_ISR_Disable(level); + ret = g_IRQHandler[nIrq].pHndl; + _CPU_ISR_Restore(level); + return ret; +} + +raw_irq_handler_t IRQ_Free(u32 nIrq) +{ + u32 level; + + _CPU_ISR_Disable(level); + raw_irq_handler_t old = g_IRQHandler[nIrq].pHndl; + g_IRQHandler[nIrq].pHndl = NULL; + g_IRQHandler[nIrq].pCtx = NULL; + _CPU_ISR_Restore(level); + return old; +} + +u32 IRQ_Disable() +{ + u32 level; + _CPU_ISR_Disable(level); + return level; +} + +void IRQ_Restore(u32 level) +{ + _CPU_ISR_Restore(level); +} diff --git a/wii/libogc/libogc/irq_handler.S b/wii/libogc/libogc/irq_handler.S new file mode 100644 index 0000000000..da37e43d81 --- /dev/null +++ b/wii/libogc/libogc/irq_handler.S @@ -0,0 +1,166 @@ +/*------------------------------------------------------------- + +irq_handler.S -- Interrupt subsystem + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + + +#include + +#define EXCEPTION_PROLOG \ + mfspr r0,912; \ + stw r0,GQR0_OFFSET(sp); \ + mfspr r0,913; \ + stw r0,GQR1_OFFSET(sp); \ + mfspr r0,914; \ + stw r0,GQR2_OFFSET(sp); \ + mfspr r0,915; \ + stw r0,GQR3_OFFSET(sp); \ + mfspr r0,916; \ + stw r0,GQR4_OFFSET(sp); \ + mfspr r0,917; \ + stw r0,GQR5_OFFSET(sp); \ + mfspr r0,918; \ + stw r0,GQR6_OFFSET(sp); \ + mfspr r0,919; \ + stw r0,GQR7_OFFSET(sp); \ + stw r6,GPR6_OFFSET(sp); \ + stw r7,GPR7_OFFSET(sp); \ + stw r8,GPR8_OFFSET(sp); \ + stw r9,GPR9_OFFSET(sp); \ + stw r10,GPR10_OFFSET(sp); \ + stw r11,GPR11_OFFSET(sp); \ + stw r12,GPR12_OFFSET(sp); \ + stw r13,GPR13_OFFSET(sp); \ + stw r14,GPR14_OFFSET(sp); \ + stw r15,GPR15_OFFSET(sp) + +#define EXCEPTION_EPILOG \ + lwz r4,GQR0_OFFSET(sp); \ + mtspr 912,r4; \ + lwz r4,GQR1_OFFSET(sp); \ + mtspr 913,r4; \ + lwz r4,GQR2_OFFSET(sp); \ + mtspr 914,r4; \ + lwz r4,GQR3_OFFSET(sp); \ + mtspr 915,r4; \ + lwz r4,GQR4_OFFSET(sp); \ + mtspr 916,r4; \ + lwz r4,GQR5_OFFSET(sp); \ + mtspr 917,r4; \ + lwz r4,GQR6_OFFSET(sp); \ + mtspr 918,r4; \ + lwz r4,GQR7_OFFSET(sp); \ + mtspr 919,r4; \ + lwz r15,GPR15_OFFSET(sp); \ + lwz r14,GPR14_OFFSET(sp); \ + lwz r13,GPR13_OFFSET(sp); \ + lwz r12,GPR12_OFFSET(sp); \ + lwz r11,GPR11_OFFSET(sp); \ + lwz r10,GPR10_OFFSET(sp); \ + lwz r9,GPR9_OFFSET(sp); \ + lwz r8,GPR8_OFFSET(sp); \ + lwz r7,GPR7_OFFSET(sp); \ + lwz r6,GPR6_OFFSET(sp); \ + lwz r5,GPR5_OFFSET(sp) + + .extern c_irqdispatcher + .globl irq_exceptionhandler +irq_exceptionhandler: + stwu sp,-EXCEPTION_FRAME_END(sp) //now we're able to adjust the stackpointer with it's cached address + + EXCEPTION_PROLOG + + mfmsr r3 + ori r3,r3,MSR_RI + mtmsr r3 + isync + + addi r14,sp,0 + lis r15,_thread_dispatch_disable_level@ha + + mfspr r3,SPRG0 + cmpwi r3,0 + bne nested + mfspr sp,SPRG1 + +nested: + addi r3,r3,1 + lwz r6,_thread_dispatch_disable_level@l(r15) + mtspr SPRG0,r3 + addi r6,r6,1 + stw r6,_thread_dispatch_disable_level@l(r15) + + addi r3,r14,0x08 + bl c_irqdispatcher + + mfspr r4,SPRG0 + lwz r3,_thread_dispatch_disable_level@l(r15) + addi r4,r4,-1 + addic. r3,r3,-1 + mtspr SPRG0,r4 + stw r3,_thread_dispatch_disable_level@l(r15) + addi sp,r14,0 + bne easy_exit + + lis r4,_context_switch_want@ha + lwz r5,_context_switch_want@l(r4) + cmpwi r5,0 + beq easy_exit + +switch: + bl __thread_dispatch + +easy_exit: + lwz r4,CR_OFFSET(sp) + mtcr r4 + lwz r4,LR_OFFSET(sp) + mtlr r4 + lwz r4,CTR_OFFSET(sp) + mtctr r4 + lwz r4,XER_OFFSET(sp) + mtxer r4 + + EXCEPTION_EPILOG + + mfmsr r4 + rlwinm r4,r4,0,31,29 + mtmsr r4 + isync + + lwz r0,GPR0_OFFSET(sp) + lwz toc,GPR2_OFFSET(sp) + + lwz r4,SRR0_OFFSET(sp) + mtsrr0 r4 + lwz r4,SRR1_OFFSET(sp) + rlwinm r4, r4, 0, 19, 17 + mtsrr1 r4 + + lwz r4,GPR4_OFFSET(sp) + lwz r3,GPR3_OFFSET(sp) + addi sp,sp,EXCEPTION_FRAME_END + rfi diff --git a/wii/libogc/libogc/isfs.c b/wii/libogc/libogc/isfs.c new file mode 100644 index 0000000000..d7e768f7bf --- /dev/null +++ b/wii/libogc/libogc/isfs.c @@ -0,0 +1,844 @@ +/*------------------------------------------------------------- + +es.c -- ETicket services + +Copyright (C) 2008 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) +Hector Martin (marcan) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + +#if defined(HW_RVL) + +#include +#include +#include +#include +#include +#include +#include + +#include "isfs.h" + +#define ISFS_STRUCTSIZE (sizeof(struct isfs_cb)) +#define ISFS_HEAPSIZE (ISFS_STRUCTSIZE<<4) + +#define ISFS_FUNCNULL 0 +#define ISFS_FUNCGETSTAT 1 +#define ISFS_FUNCREADDIR 2 +#define ISFS_FUNCGETATTR 3 +#define ISFS_FUNCGETUSAGE 4 + +#define ISFS_IOCTL_FORMAT 1 +#define ISFS_IOCTL_GETSTATS 2 +#define ISFS_IOCTL_CREATEDIR 3 +#define ISFS_IOCTL_READDIR 4 +#define ISFS_IOCTL_SETATTR 5 +#define ISFS_IOCTL_GETATTR 6 +#define ISFS_IOCTL_DELETE 7 +#define ISFS_IOCTL_RENAME 8 +#define ISFS_IOCTL_CREATEFILE 9 +#define ISFS_IOCTL_SETFILEVERCTRL 10 +#define ISFS_IOCTL_GETFILESTATS 11 +#define ISFS_IOCTL_GETUSAGE 12 +#define ISFS_IOCTL_SHUTDOWN 13 + +struct isfs_cb +{ + char filepath[ISFS_MAXPATH]; + union { + struct { + char filepathOld[ISFS_MAXPATH]; + char filepathNew[ISFS_MAXPATH]; + } fsrename; + struct { + u32 owner_id; + u16 group_id; + char filepath[ISFS_MAXPATH]; + u8 ownerperm; + u8 groupperm; + u8 otherperm; + u8 attributes; + u8 pad0[2]; + } fsattr; + struct { + ioctlv vector[4]; + u32 no_entries; + } fsreaddir; + struct { + ioctlv vector[4]; + u32 usage1; + u8 pad0[28]; + u32 usage2; + } fsusage; + struct { + u32 a; + u32 b; + u32 c; + u32 d; + u32 e; + u32 f; + u32 g; + } fsstats; + }; + + isfscallback cb; + void *usrdata; + u32 functype; + void *funcargv[8]; +}; + + +static s32 hId = -1; +static s32 _fs_fd = -1; +static char _dev_fs[] ATTRIBUTE_ALIGN(32) = "/dev/fs"; + +static s32 __isfsGetStatsCB(s32 result,void *usrdata) +{ + struct isfs_cb *param = (struct isfs_cb*)usrdata; + if(result==0) memcpy(param->funcargv[0],¶m->fsstats,sizeof(param->fsstats)); + return result; +} + +static s32 __isfsGetAttrCB(s32 result,void *usrdata) +{ + struct isfs_cb *param = (struct isfs_cb*)usrdata; + if(result==0) { + *(u32*)(param->funcargv[0]) = param->fsattr.owner_id; + *(u16*)(param->funcargv[1]) = param->fsattr.group_id; + *(u8*)(param->funcargv[2]) = param->fsattr.attributes; + *(u8*)(param->funcargv[3]) = param->fsattr.ownerperm; + *(u8*)(param->funcargv[4]) = param->fsattr.groupperm; + *(u8*)(param->funcargv[5]) = param->fsattr.otherperm; + } + return result; +} + +static s32 __isfsGetUsageCB(s32 result,void *usrdata) +{ + struct isfs_cb *param = (struct isfs_cb*)usrdata; + if(result==0) { + *(u32*)(param->funcargv[0]) = param->fsusage.usage1; + *(u32*)(param->funcargv[1]) = param->fsusage.usage2; + } + return result; + +} +static s32 __isfsReadDirCB(s32 result,void *usrdata) +{ + struct isfs_cb *param = (struct isfs_cb*)usrdata; + if(result==0) *(u32*)(param->funcargv[0]) = param->fsreaddir.no_entries; + return result; +} + +static s32 __isfsFunctionCB(s32 result,void *usrdata) +{ + struct isfs_cb *param = (struct isfs_cb*)usrdata; + + if(result>=0) { + if(param->functype==ISFS_FUNCGETSTAT) __isfsGetStatsCB(result,usrdata); + else if(param->functype==ISFS_FUNCREADDIR) __isfsReadDirCB(result,usrdata); + else if(param->functype==ISFS_FUNCGETATTR) __isfsGetAttrCB(result,usrdata); + else if(param->functype==ISFS_FUNCGETUSAGE) __isfsGetUsageCB(result,usrdata); + } + if(param->cb!=NULL) param->cb(result,param->usrdata); + + iosFree(hId,param); + return result; +} + +s32 ISFS_Initialize() +{ + s32 ret = IPC_OK; + + if(_fs_fd<0) { + _fs_fd = IOS_Open(_dev_fs,0); + if(_fs_fd<0) return _fs_fd; + } + + if(hId<0) { + hId = iosCreateHeap(ISFS_HEAPSIZE); + if(hId<0) return IPC_ENOMEM; + } + return ret; +} + +s32 ISFS_Deinitialize() +{ + if(_fs_fd<0) return ISFS_EINVAL; + + IOS_Close(_fs_fd); + _fs_fd = -1; + + return 0; +} + +s32 ISFS_ReadDir(const char *filepath,char *name_list,u32 *num) +{ + s32 ret; + s32 len,cnt; + s32 ilen,olen; + struct isfs_cb *param; + + if(_fs_fd<0 || filepath==NULL || num==NULL) return ISFS_EINVAL; + if(name_list!=NULL && ((u32)name_list%32)!=0) return ISFS_EINVAL; + + len = strnlen(filepath,ISFS_MAXPATH); + if(len>=ISFS_MAXPATH) return ISFS_EINVAL; + + param = (struct isfs_cb*)iosAlloc(hId,ISFS_STRUCTSIZE); + if(param==NULL) return ISFS_ENOMEM; + + memcpy(param->filepath,filepath,(len+1)); + + param->fsreaddir.vector[0].data = param->filepath; + param->fsreaddir.vector[0].len = ISFS_MAXPATH; + param->fsreaddir.vector[1].data = ¶m->fsreaddir.no_entries; + param->fsreaddir.vector[1].len = sizeof(u32); + + if(name_list!=NULL) { + ilen = olen = 2; + cnt = *num; + param->fsreaddir.no_entries = cnt; + param->fsreaddir.vector[2].data = name_list; + param->fsreaddir.vector[2].len = (cnt*13); + param->fsreaddir.vector[3].data = ¶m->fsreaddir.no_entries; + param->fsreaddir.vector[3].len = sizeof(u32); + } else + ilen = olen = 1; + + ret = IOS_Ioctlv(_fs_fd,ISFS_IOCTL_READDIR,ilen,olen,param->fsreaddir.vector); + if(ret==0) *num = param->fsreaddir.no_entries; + + if(param!=NULL) iosFree(hId,param); + return ret; +} + +s32 ISFS_ReadDirAsync(const char *filepath,char *name_list,u32 *num,isfscallback cb,void *usrdata) +{ + s32 len,cnt; + s32 ilen,olen; + struct isfs_cb *param; + + if(_fs_fd<0 || filepath==NULL || num==NULL) return ISFS_EINVAL; + if(name_list!=NULL && ((u32)name_list%32)!=0) return ISFS_EINVAL; + + len = strnlen(filepath,ISFS_MAXPATH); + if(len>=ISFS_MAXPATH) return ISFS_EINVAL; + + param = (struct isfs_cb*)iosAlloc(hId,ISFS_STRUCTSIZE); + if(param==NULL) return ISFS_ENOMEM; + + param->cb = cb; + param->usrdata = usrdata; + param->funcargv[0] = num; + param->functype = ISFS_FUNCREADDIR; + memcpy(param->filepath,filepath,(len+1)); + + param->fsreaddir.vector[0].data = param->filepath; + param->fsreaddir.vector[0].len = ISFS_MAXPATH; + param->fsreaddir.vector[1].data = ¶m->fsreaddir.no_entries; + param->fsreaddir.vector[1].len = sizeof(u32); + + if(name_list!=NULL) { + ilen = olen = 2; + cnt = *num; + param->fsreaddir.no_entries = cnt; + param->fsreaddir.vector[2].data = name_list; + param->fsreaddir.vector[2].len = (cnt*13); + param->fsreaddir.vector[3].data = ¶m->fsreaddir.no_entries; + param->fsreaddir.vector[3].len = sizeof(u32); + } else + ilen = olen = 1; + + return IOS_IoctlvAsync(_fs_fd,ISFS_IOCTL_READDIR,ilen,olen,param->fsreaddir.vector,__isfsFunctionCB,param); +} + +s32 ISFS_CreateDir(const char *filepath,u8 attributes,u8 owner_perm,u8 group_perm,u8 other_perm) +{ + s32 ret; + s32 len; + struct isfs_cb *param; + + if(_fs_fd<0 || filepath==NULL) return ISFS_EINVAL; + + len = strnlen(filepath,ISFS_MAXPATH); + if(len>=ISFS_MAXPATH) return ISFS_EINVAL; + + param = (struct isfs_cb*)iosAlloc(hId,ISFS_STRUCTSIZE); + if(param==NULL) return ISFS_ENOMEM; + + memcpy(param->fsattr.filepath ,filepath,(len+1)); + + param->fsattr.attributes = attributes; + param->fsattr.ownerperm = owner_perm; + param->fsattr.groupperm = group_perm; + param->fsattr.otherperm = other_perm; + ret = IOS_Ioctl(_fs_fd,ISFS_IOCTL_CREATEDIR,¶m->fsattr,sizeof(param->fsattr),NULL,0); + + if(param!=NULL) iosFree(hId,param); + return ret; +} + +s32 ISFS_CreateDirAsync(const char *filepath,u8 attributes,u8 owner_perm,u8 group_perm,u8 other_perm,isfscallback cb,void *usrdata) +{ + s32 len; + struct isfs_cb *param; + + if(_fs_fd<0 || filepath==NULL) return ISFS_EINVAL; + + len = strnlen(filepath,ISFS_MAXPATH); + if(len>=ISFS_MAXPATH) return ISFS_EINVAL; + + param = (struct isfs_cb*)iosAlloc(hId,ISFS_STRUCTSIZE); + if(param==NULL) return ISFS_ENOMEM; + + param->cb = cb; + param->usrdata = usrdata; + param->functype = ISFS_FUNCNULL; + memcpy(param->fsattr.filepath,filepath,(len+1)); + + param->fsattr.attributes = attributes; + param->fsattr.ownerperm = owner_perm; + param->fsattr.groupperm = group_perm; + param->fsattr.otherperm = other_perm; + return IOS_IoctlAsync(_fs_fd,ISFS_IOCTL_CREATEDIR,¶m->fsattr,sizeof(param->fsattr),NULL,0,__isfsFunctionCB,param); +} + +s32 ISFS_Open(const char *filepath,u8 mode) +{ + s32 ret; + s32 len; + struct isfs_cb *param; + + if(_fs_fd<0 || filepath==NULL) return ISFS_EINVAL; + + len = strnlen(filepath,ISFS_MAXPATH); + if(len>=ISFS_MAXPATH) return ISFS_EINVAL; + + param = (struct isfs_cb*)iosAlloc(hId,ISFS_STRUCTSIZE); + if(param==NULL) return ISFS_ENOMEM; + + memcpy(param->filepath,filepath,(len+1)); + ret = IOS_Open(param->filepath,mode); + + if(param!=NULL) iosFree(hId,param); + return ret; +} + +s32 ISFS_OpenAsync(const char *filepath,u8 mode,isfscallback cb,void *usrdata) +{ + s32 len; + struct isfs_cb *param; + + if(_fs_fd<0 || filepath==NULL) return ISFS_EINVAL; + + len = strnlen(filepath,ISFS_MAXPATH); + if(len>=ISFS_MAXPATH) return ISFS_EINVAL; + + param = (struct isfs_cb*)iosAlloc(hId,ISFS_STRUCTSIZE); + if(param==NULL) return ISFS_ENOMEM; + + param->cb = cb; + param->usrdata = usrdata; + param->functype = ISFS_FUNCNULL; + memcpy(param->filepath,filepath,(len+1)); + return IOS_OpenAsync(param->filepath,mode,__isfsFunctionCB,param); +} + +s32 ISFS_Format() +{ + if(_fs_fd<0) return ISFS_EINVAL; + + return IOS_Ioctl(_fs_fd,ISFS_IOCTL_FORMAT,NULL,0,NULL,0); +} + +s32 ISFS_FormatAsync(isfscallback cb,void *usrdata) +{ + struct isfs_cb *param; + + if(_fs_fd<0) return ISFS_EINVAL; + + param = (struct isfs_cb*)iosAlloc(hId,ISFS_STRUCTSIZE); + if(param==NULL) return ISFS_ENOMEM; + + param->cb = cb; + param->usrdata = usrdata; + param->functype = ISFS_FUNCNULL; + return IOS_IoctlAsync(_fs_fd,ISFS_IOCTL_FORMAT,NULL,0,NULL,0,__isfsFunctionCB,param); +} + +s32 ISFS_GetStats(void *stats) +{ + s32 ret = ISFS_OK; + struct isfs_cb *param; + + if(_fs_fd<0 || stats==NULL) return ISFS_EINVAL; + + param = (struct isfs_cb*)iosAlloc(hId,ISFS_STRUCTSIZE); + if(param==NULL) return ISFS_ENOMEM; + + ret = IOS_Ioctl(_fs_fd,ISFS_IOCTL_GETSTATS,NULL,0,¶m->fsstats,sizeof(param->fsstats)); + if(ret==IPC_OK) memcpy(stats,¶m->fsstats,sizeof(param->fsstats)); + + if(param!=NULL) iosFree(hId,param); + return ret; +} + +s32 ISFS_GetStatsAsync(void *stats,isfscallback cb,void *usrdata) +{ + struct isfs_cb *param; + + if(_fs_fd<0 || stats==NULL) return ISFS_EINVAL; + + param = (struct isfs_cb*)iosAlloc(hId,ISFS_STRUCTSIZE); + if(param==NULL) return ISFS_ENOMEM; + + param->cb = cb; + param->usrdata = usrdata; + param->functype = ISFS_FUNCGETSTAT; + param->funcargv[0] = stats; + return IOS_IoctlAsync(_fs_fd,ISFS_IOCTL_GETSTATS,NULL,0,¶m->fsstats,sizeof(param->fsstats),__isfsFunctionCB,param); +} + +s32 ISFS_Write(s32 fd,const void *buffer,u32 length) +{ + if(length<=0 || buffer==NULL) return ISFS_EINVAL; + + return IOS_Write(fd,buffer,length); +} + +s32 ISFS_WriteAsync(s32 fd,const void *buffer,u32 length,isfscallback cb,void *usrdata) +{ + struct isfs_cb *param; + + if(length<=0 || buffer==NULL) return ISFS_EINVAL; + + param = (struct isfs_cb*)iosAlloc(hId,ISFS_STRUCTSIZE); + if(param==NULL) return ISFS_ENOMEM; + + param->cb = cb; + param->usrdata = usrdata; + param->functype = ISFS_FUNCNULL; + return IOS_WriteAsync(fd,buffer,length,__isfsFunctionCB,param); +} + +s32 ISFS_Read(s32 fd,void *buffer,u32 length) +{ + if(length<=0 || buffer==NULL || ((u32)buffer%32)!=0) return ISFS_EINVAL; + + return IOS_Read(fd,buffer,length); +} + +s32 ISFS_ReadAsync(s32 fd,void *buffer,u32 length,isfscallback cb,void *usrdata) +{ + struct isfs_cb *param; + + if(length<=0 || buffer==NULL || ((u32)buffer%32)!=0) return ISFS_EINVAL; + + param = (struct isfs_cb*)iosAlloc(hId,ISFS_STRUCTSIZE); + if(param==NULL) return ISFS_ENOMEM; + + param->cb = cb; + param->usrdata = usrdata; + param->functype = ISFS_FUNCNULL; + return IOS_ReadAsync(fd,buffer,length,__isfsFunctionCB,param); +} + +s32 ISFS_Seek(s32 fd,s32 where,s32 whence) +{ + return IOS_Seek(fd,where,whence); +} + +s32 ISFS_SeekAsync(s32 fd,s32 where,s32 whence,isfscallback cb,void *usrdata) +{ + struct isfs_cb *param; + + param = (struct isfs_cb*)iosAlloc(hId,ISFS_STRUCTSIZE); + if(param==NULL) return ISFS_ENOMEM; + + param->cb = cb; + param->usrdata = usrdata; + param->functype = ISFS_FUNCNULL; + return IOS_SeekAsync(fd,where,whence,__isfsFunctionCB,param); +} + +s32 ISFS_CreateFile(const char *filepath,u8 attributes,u8 owner_perm,u8 group_perm,u8 other_perm) +{ + s32 ret; + s32 len; + struct isfs_cb *param; + + if(_fs_fd<0 || filepath==NULL) return ISFS_EINVAL; + + len = strnlen(filepath,ISFS_MAXPATH); + if(len>=ISFS_MAXPATH) return ISFS_EINVAL; + + param = (struct isfs_cb*)iosAlloc(hId,ISFS_STRUCTSIZE); + if(param==NULL) return ISFS_ENOMEM; + + memcpy(param->fsattr.filepath,filepath,(len+1)); + + param->fsattr.attributes = attributes; + param->fsattr.ownerperm = owner_perm; + param->fsattr.groupperm = group_perm; + param->fsattr.otherperm = other_perm; + ret = IOS_Ioctl(_fs_fd,ISFS_IOCTL_CREATEFILE,¶m->fsattr,sizeof(param->fsattr),NULL,0); + + if(param!=NULL) iosFree(hId,param); + return ret; +} + +s32 ISFS_CreateFileAsync(const char *filepath,u8 attributes,u8 owner_perm,u8 group_perm,u8 other_perm,isfscallback cb,void *usrdata) +{ + s32 len; + struct isfs_cb *param; + + if(_fs_fd<0 || filepath==NULL) return ISFS_EINVAL; + + len = strnlen(filepath,ISFS_MAXPATH); + if(len>=ISFS_MAXPATH) return ISFS_EINVAL; + + param = (struct isfs_cb*)iosAlloc(hId,ISFS_STRUCTSIZE); + if(param==NULL) return ISFS_ENOMEM; + + param->cb = cb; + param->usrdata = usrdata; + param->functype = ISFS_FUNCNULL; + memcpy(param->fsattr.filepath,filepath,(len+1)); + + param->fsattr.attributes = attributes; + param->fsattr.ownerperm = owner_perm; + param->fsattr.groupperm = group_perm; + param->fsattr.otherperm = other_perm; + return IOS_IoctlAsync(_fs_fd,ISFS_IOCTL_CREATEFILE,¶m->fsattr,sizeof(param->fsattr),NULL,0,__isfsFunctionCB,param); +} + +s32 ISFS_Delete(const char *filepath) +{ + s32 ret; + s32 len; + struct isfs_cb *param; + + if(_fs_fd<0 || filepath==NULL) return ISFS_EINVAL; + + len = strnlen(filepath,ISFS_MAXPATH); + if(len>=ISFS_MAXPATH) return ISFS_EINVAL; + + param = (struct isfs_cb*)iosAlloc(hId,ISFS_STRUCTSIZE); + if(param==NULL) return ISFS_ENOMEM; + + memcpy(param->filepath,filepath,(len+1)); + ret = IOS_Ioctl(_fs_fd,ISFS_IOCTL_DELETE,param->filepath,ISFS_MAXPATH,NULL,0); + + if(param!=NULL) iosFree(hId,param); + return ret; +} + +s32 ISFS_DeleteAsync(const char *filepath,isfscallback cb,void *usrdata) +{ + s32 len; + struct isfs_cb *param; + + if(_fs_fd<0 || filepath==NULL) return ISFS_EINVAL; + + len = strnlen(filepath,ISFS_MAXPATH); + if(len>=ISFS_MAXPATH) return ISFS_EINVAL; + + param = (struct isfs_cb*)iosAlloc(hId,ISFS_STRUCTSIZE); + if(param==NULL) return ISFS_ENOMEM; + + param->cb = cb; + param->usrdata = usrdata; + param->functype = ISFS_FUNCNULL; + memcpy(param->filepath,filepath,(len+1)); + return IOS_IoctlAsync(_fs_fd,ISFS_IOCTL_DELETE,param->filepath,ISFS_MAXPATH,NULL,0,__isfsFunctionCB,param); +} + +s32 ISFS_Close(s32 fd) +{ + if(fd<0) return 0; + + return IOS_Close(fd); +} + +s32 ISFS_CloseAsync(s32 fd,isfscallback cb,void *usrdata) +{ + struct isfs_cb *param; + + if(fd<0) return 0; + + param = (struct isfs_cb*)iosAlloc(hId,ISFS_STRUCTSIZE); + if(param==NULL) return ISFS_ENOMEM; + + param->cb = cb; + param->usrdata = usrdata; + param->functype = ISFS_FUNCNULL; + return IOS_CloseAsync(fd,__isfsFunctionCB,param); +} + +s32 ISFS_GetFileStats(s32 fd,fstats *status) +{ + if(status==NULL || ((u32)status%32)!=0) return ISFS_EINVAL; + + return IOS_Ioctl(fd,ISFS_IOCTL_GETFILESTATS,NULL,0,status,sizeof(fstats)); +} + +s32 ISFS_GetFileStatsAsync(s32 fd,fstats *status,isfscallback cb,void *usrdata) +{ + struct isfs_cb *param; + + if(status==NULL || ((u32)status%32)!=0) return ISFS_EINVAL; + + param = (struct isfs_cb*)iosAlloc(hId,ISFS_STRUCTSIZE); + if(param==NULL) return ISFS_ENOMEM; + + param->cb = cb; + param->usrdata = usrdata; + param->functype = ISFS_FUNCNULL; + return IOS_IoctlAsync(fd,ISFS_IOCTL_GETFILESTATS,NULL,0,status,sizeof(fstats),__isfsFunctionCB,param); +} + +s32 ISFS_GetAttr(const char *filepath,u32 *ownerID,u16 *groupID,u8 *attributes,u8 *ownerperm,u8 *groupperm,u8 *otherperm) +{ + s32 ret; + s32 len; + struct isfs_cb *param; + + if(_fs_fd<0 || filepath==NULL || ownerID==NULL || groupID==NULL + || attributes==NULL || ownerperm==NULL || groupperm==NULL || otherperm==NULL) return ISFS_EINVAL; + + len = strnlen(filepath,ISFS_MAXPATH); + if(len>=ISFS_MAXPATH) return ISFS_EINVAL; + + param = (struct isfs_cb*)iosAlloc(hId,ISFS_STRUCTSIZE); + if(param==NULL) return ISFS_ENOMEM; + + memcpy(param->filepath,filepath,(len+1)); + ret = IOS_Ioctl(_fs_fd,ISFS_IOCTL_GETATTR,param->filepath,ISFS_MAXPATH,¶m->fsattr,sizeof(param->fsattr)); + if(ret==IPC_OK) { + *ownerID = param->fsattr.owner_id; + *groupID = param->fsattr.group_id; + *ownerperm = param->fsattr.ownerperm; + *groupperm = param->fsattr.groupperm; + *otherperm = param->fsattr.otherperm; + *attributes = param->fsattr.attributes; + } + + if(param!=NULL) iosFree(hId,param); + return ret; +} + +s32 ISFS_GetAttrAsync(const char *filepath,u32 *ownerID,u16 *groupID,u8 *attributes,u8 *ownerperm,u8 *groupperm,u8 *otherperm,isfscallback cb,void *usrdata) +{ + s32 len; + struct isfs_cb *param; + + if(_fs_fd<0 || filepath==NULL || ownerID==NULL || groupID==NULL + || attributes==NULL || ownerperm==NULL || groupperm==NULL || otherperm==NULL) return ISFS_EINVAL; + + len = strnlen(filepath,ISFS_MAXPATH); + if(len>=ISFS_MAXPATH) return ISFS_EINVAL; + + param = (struct isfs_cb*)iosAlloc(hId,ISFS_STRUCTSIZE); + if(param==NULL) return ISFS_ENOMEM; + + param->cb = cb; + param->usrdata = usrdata; + param->functype = ISFS_FUNCGETATTR; + param->funcargv[0] = ownerID; + param->funcargv[1] = groupID; + param->funcargv[2] = attributes; + param->funcargv[3] = ownerperm; + param->funcargv[4] = groupperm; + param->funcargv[5] = otherperm; + memcpy(param->filepath,filepath,(len+1)); + return IOS_IoctlAsync(_fs_fd,ISFS_IOCTL_GETATTR,param->filepath,ISFS_MAXPATH,¶m->fsattr,sizeof(param->fsattr),__isfsFunctionCB,param); +} + +s32 ISFS_Rename(const char *filepathOld,const char *filepathNew) +{ + s32 ret; + s32 len0,len1; + struct isfs_cb *param; + + if(_fs_fd<0 || filepathOld==NULL || filepathNew==NULL) return ISFS_EINVAL; + + len0 = strnlen(filepathOld,ISFS_MAXPATH); + if(len0>=ISFS_MAXPATH) return ISFS_EINVAL; + + len1 = strnlen(filepathNew,ISFS_MAXPATH); + if(len1>=ISFS_MAXPATH) return ISFS_EINVAL; + + param = (struct isfs_cb*)iosAlloc(hId,ISFS_STRUCTSIZE); + if(param==NULL) return ISFS_ENOMEM; + + memcpy(param->fsrename.filepathOld,filepathOld,(len0+1)); + memcpy(param->fsrename.filepathNew,filepathNew,(len1+1)); + ret = IOS_Ioctl(_fs_fd,ISFS_IOCTL_RENAME,¶m->fsrename,sizeof(param->fsrename),NULL,0); + + if(param!=NULL) iosFree(hId,param); + return ret; +} + +s32 ISFS_RenameAsync(const char *filepathOld,const char *filepathNew,isfscallback cb,void *usrdata) +{ + s32 len0,len1; + struct isfs_cb *param; + + if(_fs_fd<0 || filepathOld==NULL || filepathNew==NULL) return ISFS_EINVAL; + + len0 = strnlen(filepathOld,ISFS_MAXPATH); + if(len0>=ISFS_MAXPATH) return ISFS_EINVAL; + + len1 = strnlen(filepathNew,ISFS_MAXPATH); + if(len1>=ISFS_MAXPATH) return ISFS_EINVAL; + + param = (struct isfs_cb*)iosAlloc(hId,ISFS_STRUCTSIZE); + if(param==NULL) return ISFS_ENOMEM; + + param->cb = cb; + param->usrdata = usrdata; + param->functype = ISFS_FUNCNULL; + memcpy(param->fsrename.filepathOld,filepathOld,(len0+1)); + memcpy(param->fsrename.filepathNew,filepathNew,(len1+1)); + return IOS_IoctlAsync(_fs_fd,ISFS_IOCTL_RENAME,¶m->fsrename,sizeof(param->fsrename),NULL,0,__isfsFunctionCB,param); +} + +s32 ISFS_SetAttr(const char *filepath,u32 ownerID,u16 groupID,u8 attributes,u8 ownerperm,u8 groupperm,u8 otherperm) +{ + s32 ret, len; + struct isfs_cb *param; + + if(_fs_fd<0 || filepath==NULL) return ISFS_EINVAL; + + len = strnlen(filepath, ISFS_MAXPATH); + if(len>=ISFS_MAXPATH) return ISFS_EINVAL; + + param = (struct isfs_cb*)iosAlloc(hId, ISFS_STRUCTSIZE); + if(param==NULL) return ISFS_ENOMEM; + + memcpy(param->fsattr.filepath, filepath, (len+1)); + param->fsattr.owner_id = ownerID; + param->fsattr.group_id = groupID; + param->fsattr.ownerperm = ownerperm; + param->fsattr.groupperm = groupperm; + param->fsattr.otherperm = otherperm; + param->fsattr.attributes = attributes; + + ret = IOS_Ioctl(_fs_fd,ISFS_IOCTL_SETATTR,¶m->fsattr,sizeof(param->fsattr),NULL,0); + + if(param!=NULL) iosFree(hId,param); + return ret; +} + +s32 ISFS_SetAttrAsync(const char *filepath,u32 ownerID,u16 groupID,u8 attributes,u8 ownerperm,u8 groupperm,u8 otherperm,isfscallback cb,void *usrdata) +{ + s32 len; + struct isfs_cb *param; + + if(_fs_fd<0 || filepath==NULL) return ISFS_EINVAL; + + len = strnlen(filepath, ISFS_MAXPATH); + if(len>=ISFS_MAXPATH) return ISFS_EINVAL; + + param = (struct isfs_cb*)iosAlloc(hId, ISFS_STRUCTSIZE); + if(param==NULL) return ISFS_ENOMEM; + + param->cb = cb; + param->usrdata = usrdata; + param->functype = ISFS_FUNCNULL; + memcpy(param->fsattr.filepath, filepath, (len+1)); + param->fsattr.owner_id = ownerID; + param->fsattr.group_id = groupID; + param->fsattr.ownerperm = ownerperm; + param->fsattr.groupperm = groupperm; + param->fsattr.otherperm = otherperm; + param->fsattr.attributes = attributes; + return IOS_IoctlAsync(_fs_fd,ISFS_IOCTL_SETATTR,¶m->fsattr,sizeof(param->fsattr),NULL,0,__isfsFunctionCB,param); +} + +s32 ISFS_GetUsage(const char* filepath, u32* usage1, u32* usage2) +{ + s32 ret,len; + struct isfs_cb *param; + + if(_fs_fd<0 || filepath==NULL || usage1==NULL || usage2 == NULL) + return ISFS_EINVAL; + + len = strnlen(filepath, ISFS_MAXPATH); + if(len>=ISFS_MAXPATH) return ISFS_EINVAL; + + param = (struct isfs_cb*)iosAlloc(hId, ISFS_STRUCTSIZE); + if(param==NULL) return ISFS_ENOMEM; + + memcpy(param->filepath,filepath,(len+1)); + + param->fsusage.vector[0].data = param->filepath; + param->fsusage.vector[0].len = ISFS_MAXPATH; + param->fsusage.vector[1].data = ¶m->fsusage.usage1; + param->fsusage.vector[1].len = sizeof(u32); + param->fsusage.vector[2].data = ¶m->fsusage.usage2; + param->fsusage.vector[2].len = sizeof(u32); + ret = IOS_Ioctlv(_fs_fd,ISFS_IOCTL_GETUSAGE,1,2,param->fsusage.vector); + if(ret==IPC_OK) { + *usage1 = param->fsusage.usage1; + *usage2 = param->fsusage.usage2; + } + + if(param!=NULL) iosFree(hId, param); + return ret; +} + +s32 ISFS_GetUsageAsync(const char* filepath, u32* usage1, u32* usage2,isfscallback cb,void *usrdata) +{ + s32 len; + struct isfs_cb *param; + + if(_fs_fd<0 || filepath==NULL || usage1==NULL || usage2 == NULL) + return ISFS_EINVAL; + + len = strnlen(filepath, ISFS_MAXPATH); + if(len>=ISFS_MAXPATH) return ISFS_EINVAL; + + param = (struct isfs_cb*)iosAlloc(hId, ISFS_STRUCTSIZE); + if(param==NULL) return ISFS_ENOMEM; + + param->cb = cb; + param->usrdata = usrdata; + param->functype = ISFS_FUNCGETUSAGE; + param->funcargv[0] = usage1; + param->funcargv[1] = usage2; + memcpy(param->filepath,filepath,(len+1)); + + param->fsusage.vector[0].data = param->filepath; + param->fsusage.vector[0].len = ISFS_MAXPATH; + param->fsusage.vector[1].data = ¶m->fsusage.usage1; + param->fsusage.vector[1].len = sizeof(u32); + param->fsusage.vector[2].data = ¶m->fsusage.usage2; + param->fsusage.vector[2].len = sizeof(u32); + return IOS_IoctlvAsync(_fs_fd,ISFS_IOCTL_GETUSAGE,1,2,param->fsusage.vector,__isfsFunctionCB,param); +} + + +#endif /* defined(HW_RVL) */ diff --git a/wii/libogc/libogc/kprintf.c b/wii/libogc/libogc/kprintf.c new file mode 100644 index 0000000000..976a756704 --- /dev/null +++ b/wii/libogc/libogc/kprintf.c @@ -0,0 +1,291 @@ +/* + * linux/lib/vsprintf.c + * + * Copyright (C) 1991, 1992 Linus Torvalds + */ + +/* vsprintf.c -- Lars Wirzenius & Linus Torvalds. */ +/* + * Wirzenius wrote this portably, Torvalds fucked it up :-) + */ + +#include +#include +#include + +/* we use this so that we can do without the ctype library */ +#define is_digit(c) ((c) >= '0' && (c) <= '9') + +static int skip_atoi(const char **s) +{ + int i=0; + + while (is_digit(**s)) + i = i*10 + *((*s)++) - '0'; + return i; +} + +#define ZEROPAD 1 /* pad with zero */ +#define SIGN 2 /* unsigned/signed long */ +#define PLUS 4 /* show plus */ +#define SPACE 8 /* space if plus */ +#define LEFT 16 /* left justified */ +#define SPECIAL 32 /* 0x */ +#define LARGE 64 /* use 'ABCDEF' instead of 'abcdef' */ + +#define do_div(n,base) ({ \ +int __res; \ +__res = ((unsigned long) n) % (unsigned) base; \ +n = ((unsigned long) n) / (unsigned) base; \ +__res; }) + +static char * number(char * str, long num, int base, int size, int precision + ,int type) +{ + char c,sign,tmp[66]; + const char *digits="0123456789abcdefghijklmnopqrstuvwxyz"; + int i; + + if (type & LARGE) + digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + if (type & LEFT) + type &= ~ZEROPAD; + if (base < 2 || base > 36) + return 0; + c = (type & ZEROPAD) ? '0' : ' '; + sign = 0; + if (type & SIGN) { + if (num < 0) { + sign = '-'; + num = -num; + size--; + } else if (type & PLUS) { + sign = '+'; + size--; + } else if (type & SPACE) { + sign = ' '; + size--; + } + } + if (type & SPECIAL) { + if (base == 16) + size -= 2; + else if (base == 8) + size--; + } + i = 0; + if (num == 0) + tmp[i++]='0'; + else while (num != 0) + tmp[i++] = digits[do_div(num,base)]; + if (i > precision) + precision = i; + size -= precision; + if (!(type&(ZEROPAD+LEFT))) + while(size-->0) + *str++ = ' '; + if (sign) + *str++ = sign; + if (type & SPECIAL) { + if (base==8) + *str++ = '0'; + else if (base==16) { + *str++ = '0'; + *str++ = digits[33]; + } + } + if (!(type & LEFT)) + while (size-- > 0) + *str++ = c; + while (i < precision--) + *str++ = '0'; + while (i-- > 0) + *str++ = tmp[i]; + while (size-- > 0) + *str++ = ' '; + return str; +} + +int kvsprintf(char *buf, const char *fmt, va_list args) +{ + int len; + unsigned long num; + int i, base; + char * str; + const char *s; + + int flags; /* flags to number() */ + + int field_width; /* width of output field */ + int precision; /* min. # of digits for integers; max + number of chars for from string */ + int qualifier; /* 'h', 'l', or 'L' for integer fields */ + + for (str=buf ; *fmt ; ++fmt) { + if (*fmt != '%') { + *str++ = *fmt; + continue; + } + + /* process flags */ + flags = 0; + repeat: + ++fmt; /* this also skips first '%' */ + switch (*fmt) { + case '-': flags |= LEFT; goto repeat; + case '+': flags |= PLUS; goto repeat; + case ' ': flags |= SPACE; goto repeat; + case '#': flags |= SPECIAL; goto repeat; + case '0': flags |= ZEROPAD; goto repeat; + } + + /* get field width */ + field_width = -1; + if (is_digit(*fmt)) + field_width = skip_atoi(&fmt); + else if (*fmt == '*') { + ++fmt; + /* it's the next argument */ + field_width = va_arg(args, int); + if (field_width < 0) { + field_width = -field_width; + flags |= LEFT; + } + } + + /* get the precision */ + precision = -1; + if (*fmt == '.') { + ++fmt; + if (is_digit(*fmt)) + precision = skip_atoi(&fmt); + else if (*fmt == '*') { + ++fmt; + /* it's the next argument */ + precision = va_arg(args, int); + } + if (precision < 0) + precision = 0; + } + + /* get the conversion qualifier */ + qualifier = -1; + if (*fmt == 'h' || *fmt == 'l' || *fmt == 'L') { + qualifier = *fmt; + ++fmt; + } + + /* default base */ + base = 10; + + switch (*fmt) { + case 'c': + if (!(flags & LEFT)) + while (--field_width > 0) + *str++ = ' '; + *str++ = (unsigned char) va_arg(args, int); + while (--field_width > 0) + *str++ = ' '; + continue; + + case 's': + s = va_arg(args, char *); + if (!s) + s = ""; + + len = strnlen(s, precision); + + if (!(flags & LEFT)) + while (len < field_width--) + *str++ = ' '; + for (i = 0; i < len; ++i) + *str++ = *s++; + while (len < field_width--) + *str++ = ' '; + continue; + + case 'p': + if (field_width == -1) { + field_width = 2*sizeof(void *); + flags |= ZEROPAD; + } + str = number(str, + (unsigned long) va_arg(args, void *), 16, + field_width, precision, flags); + continue; + + + case 'n': + if (qualifier == 'l') { + long * ip = va_arg(args, long *); + *ip = (str - buf); + } else { + int * ip = va_arg(args, int *); + *ip = (str - buf); + } + continue; + + case '%': + *str++ = '%'; + continue; + + /* integer number formats - set up the flags and "break" */ + case 'o': + base = 8; + break; + + case 'X': + flags |= LARGE; + case 'x': + base = 16; + break; + + case 'd': + case 'i': + flags |= SIGN; + case 'u': + break; + + default: + *str++ = '%'; + if (*fmt) + *str++ = *fmt; + else + --fmt; + continue; + } + if (qualifier == 'l') + num = va_arg(args, unsigned long); + else if (qualifier == 'h') { + num = (unsigned short) va_arg(args, int); + if (flags & SIGN) + num = (short) num; + } else if (flags & SIGN) + num = va_arg(args, int); + else + num = va_arg(args, unsigned int); + str = number(str, num, base, field_width, precision, flags); + } + *str = '\0'; + return str-buf; +} + +#define __DOUTBUFSIZE 256 + +char __outstr[__DOUTBUFSIZE]; + +//--------------------------------------------------------------------------------- +void kprintf(const char *str, ...) +//--------------------------------------------------------------------------------- +{ + + int len; + + va_list args; + + va_start(args, str); + len=kvsprintf(__outstr,str,args); + va_end(args); + + write(2, __outstr, len); +} diff --git a/wii/libogc/libogc/lock_supp.c b/wii/libogc/libogc/lock_supp.c new file mode 100644 index 0000000000..6a30c37bf0 --- /dev/null +++ b/wii/libogc/libogc/lock_supp.c @@ -0,0 +1,64 @@ +#include <_ansi.h> +#include <_syslist.h> +#include +#include +#include +#ifndef REENTRANT_SYSCALLS_PROVIDED +#include +#endif +#include + +#include "asm.h" +#include "processor.h" +#include "mutex.h" + + +int __libogc_lock_init(int *lock,int recursive) +{ + s32 ret; + mutex_t retlck = LWP_MUTEX_NULL; + + if(!lock) return -1; + + *lock = 0; + ret = LWP_MutexInit(&retlck,(recursive?TRUE:FALSE)); + if(ret==0) *lock = (int)retlck; + + return ret; +} + +int __libogc_lock_close(int *lock) +{ + s32 ret; + mutex_t plock; + + if(!lock || *lock==0) return -1; + + plock = (mutex_t)*lock; + ret = LWP_MutexDestroy(plock); + if(ret==0) *lock = 0; + + return ret; +} + +int __libogc_lock_acquire(int *lock) +{ + mutex_t plock; + + if(!lock || *lock==0) return -1; + + plock = (mutex_t)*lock; + return LWP_MutexLock(plock); +} + + +int __libogc_lock_release(int *lock) +{ + mutex_t plock; + + if(!lock || *lock==0) return -1; + + plock = (mutex_t)*lock; + return LWP_MutexUnlock(plock); +} + diff --git a/wii/libogc/libogc/lwp.c b/wii/libogc/libogc/lwp.c new file mode 100644 index 0000000000..5927ebb638 --- /dev/null +++ b/wii/libogc/libogc/lwp.c @@ -0,0 +1,415 @@ +/*------------------------------------------------------------- + +lwp.c -- Thread subsystem I + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + + +#include +#include +#include "asm.h" +#include "processor.h" +#include "lwp_threadq.h" +#include "lwp_threads.h" +#include "lwp_wkspace.h" +#include "lwp_objmgr.h" +#include "lwp_config.h" +#include "lwp.h" + +#define LWP_OBJTYPE_THREAD 1 +#define LWP_OBJTYPE_TQUEUE 2 + +#define LWP_CHECK_THREAD(hndl) \ +{ \ + if(((hndl)==LWP_THREAD_NULL) || (LWP_OBJTYPE(hndl)!=LWP_OBJTYPE_THREAD)) \ + return NULL; \ +} + +#define LWP_CHECK_TQUEUE(hndl) \ +{ \ + if(((hndl)==LWP_TQUEUE_NULL) || (LWP_OBJTYPE(hndl)!=LWP_OBJTYPE_TQUEUE)) \ + return NULL; \ +} + +typedef struct _tqueue_st { + lwp_obj object; + lwp_thrqueue tqueue; +} tqueue_st; + +lwp_objinfo _lwp_thr_objects; +lwp_objinfo _lwp_tqueue_objects; + +extern int __crtmain(); + +extern u8 __stack_addr[],__stack_end[]; + +static __inline__ u32 __lwp_priotocore(u32 prio) +{ + return (255 - prio); +} + +static __inline__ lwp_cntrl* __lwp_cntrl_open(lwp_t thr_id) +{ + LWP_CHECK_THREAD(thr_id); + return (lwp_cntrl*)__lwp_objmgr_get(&_lwp_thr_objects,LWP_OBJMASKID(thr_id)); +} + +static __inline__ tqueue_st* __lwp_tqueue_open(lwpq_t tqueue) +{ + LWP_CHECK_TQUEUE(tqueue); + return (tqueue_st*)__lwp_objmgr_get(&_lwp_tqueue_objects,LWP_OBJMASKID(tqueue)); +} + +static lwp_cntrl* __lwp_cntrl_allocate() +{ + lwp_cntrl *thethread; + + __lwp_thread_dispatchdisable(); + thethread = (lwp_cntrl*)__lwp_objmgr_allocate(&_lwp_thr_objects); + if(thethread) { + __lwp_objmgr_open(&_lwp_thr_objects,&thethread->object); + return thethread; + } + __lwp_thread_dispatchenable(); + return NULL; +} + +static tqueue_st* __lwp_tqueue_allocate() +{ + tqueue_st *tqueue; + + __lwp_thread_dispatchdisable(); + tqueue = (tqueue_st*)__lwp_objmgr_allocate(&_lwp_tqueue_objects); + if(tqueue) { + __lwp_objmgr_open(&_lwp_tqueue_objects,&tqueue->object); + return tqueue; + } + __lwp_thread_dispatchenable(); + return NULL; +} + +static __inline__ void __lwp_cntrl_free(lwp_cntrl *thethread) +{ + __lwp_objmgr_close(&_lwp_thr_objects,&thethread->object); + __lwp_objmgr_free(&_lwp_thr_objects,&thethread->object); +} + +static __inline__ void __lwp_tqueue_free(tqueue_st *tq) +{ + __lwp_objmgr_close(&_lwp_tqueue_objects,&tq->object); + __lwp_objmgr_free(&_lwp_tqueue_objects,&tq->object); +} + +static void* idle_func(void *arg) +{ + while(1); + return 0; +} + +void __lwp_sysinit() +{ + __lwp_objmgr_initinfo(&_lwp_thr_objects,LWP_MAX_THREADS,sizeof(lwp_cntrl)); + __lwp_objmgr_initinfo(&_lwp_tqueue_objects,LWP_MAX_TQUEUES,sizeof(tqueue_st)); + + // create idle thread, is needed iff all threads are locked on a queue + _thr_idle = (lwp_cntrl*)__lwp_objmgr_allocate(&_lwp_thr_objects); + __lwp_thread_init(_thr_idle,NULL,0,255,0,TRUE); + _thr_executing = _thr_heir = _thr_idle; + __lwp_thread_start(_thr_idle,idle_func,NULL); + __lwp_objmgr_open(&_lwp_thr_objects,&_thr_idle->object); + + // create main thread, as this is our entry point + // for every GC application. + _thr_main = (lwp_cntrl*)__lwp_objmgr_allocate(&_lwp_thr_objects); + __lwp_thread_init(_thr_main,__stack_end,((u32)__stack_addr-(u32)__stack_end),191,0,TRUE); + __lwp_thread_start(_thr_main,(void*)__crtmain,NULL); + __lwp_objmgr_open(&_lwp_thr_objects,&_thr_main->object); +} + +BOOL __lwp_thread_isalive(lwp_t thr_id) +{ + if(thr_id==LWP_THREAD_NULL || LWP_OBJTYPE(thr_id)!=LWP_OBJTYPE_THREAD) return FALSE; + + lwp_cntrl *thethread = (lwp_cntrl*)__lwp_objmgr_getnoprotection(&_lwp_thr_objects,LWP_OBJMASKID(thr_id)); + + if(thethread) { + u32 *stackbase = thethread->stack; + if(stackbase[0]==0xDEADBABE && !__lwp_statedormant(thethread->cur_state) && !__lwp_statetransient(thethread->cur_state)) + return TRUE; + } + + return FALSE; +} + +lwp_t __lwp_thread_currentid() +{ + return _thr_executing->object.id; +} + +BOOL __lwp_thread_exists(lwp_t thr_id) +{ + if(thr_id==LWP_THREAD_NULL || LWP_OBJTYPE(thr_id)!=LWP_OBJTYPE_THREAD) return FALSE; + return (__lwp_objmgr_getnoprotection(&_lwp_thr_objects,LWP_OBJMASKID(thr_id))!=NULL); +} + +frame_context* __lwp_thread_context(lwp_t thr_id) +{ + lwp_cntrl *thethread; + frame_context *pctx = NULL; + + LWP_CHECK_THREAD(thr_id); + thethread = (lwp_cntrl*)__lwp_objmgr_getnoprotection(&_lwp_thr_objects,LWP_OBJMASKID(thr_id)); + if(thethread) pctx = &thethread->context; + + return pctx; +} + +s32 LWP_CreateThread(lwp_t *thethread,void* (*entry)(void *),void *arg,void *stackbase,u32 stack_size,u8 prio) +{ + u32 status; + lwp_cntrl *lwp_thread; + + if(!thethread || !entry) return -1; + + lwp_thread = __lwp_cntrl_allocate(); + if(!lwp_thread) return -1; + + status = __lwp_thread_init(lwp_thread,stackbase,stack_size,__lwp_priotocore(prio),0,TRUE); + if(!status) { + __lwp_cntrl_free(lwp_thread); + __lwp_thread_dispatchenable(); + return -1; + } + + status = __lwp_thread_start(lwp_thread,entry,arg); + if(!status) { + __lwp_cntrl_free(lwp_thread); + __lwp_thread_dispatchenable(); + return -1; + } + + *thethread = (lwp_t)(LWP_OBJMASKTYPE(LWP_OBJTYPE_THREAD)|LWP_OBJMASKID(lwp_thread->object.id)); + __lwp_thread_dispatchenable(); + + return 0; +} + +s32 LWP_SuspendThread(lwp_t thethread) +{ + lwp_cntrl *lwp_thread; + + lwp_thread = __lwp_cntrl_open(thethread); + if(!lwp_thread) return -1; + + if(!__lwp_statesuspended(lwp_thread->cur_state)) { + __lwp_thread_suspend(lwp_thread); + __lwp_thread_dispatchenable(); + return LWP_SUCCESSFUL; + } + __lwp_thread_dispatchenable(); + return LWP_ALREADY_SUSPENDED; +} + +s32 LWP_ResumeThread(lwp_t thethread) +{ + lwp_cntrl *lwp_thread; + + lwp_thread = __lwp_cntrl_open(thethread); + if(!lwp_thread) return -1; + + if(__lwp_statesuspended(lwp_thread->cur_state)) { + __lwp_thread_resume(lwp_thread,TRUE); + __lwp_thread_dispatchenable(); + return LWP_SUCCESSFUL; + } + __lwp_thread_dispatchenable(); + return LWP_NOT_SUSPENDED; +} + +lwp_t LWP_GetSelf() +{ + lwp_t ret; + + __lwp_thread_dispatchdisable(); + ret = (lwp_t)(LWP_OBJMASKTYPE(LWP_OBJTYPE_THREAD)|LWP_OBJMASKID(_thr_executing->object.id)); + __lwp_thread_dispatchunnest(); + + return ret; +} + +void LWP_SetThreadPriority(lwp_t thethread,u32 prio) +{ + lwp_cntrl *lwp_thread; + + if(thethread==LWP_THREAD_NULL) thethread = LWP_GetSelf(); + + lwp_thread = __lwp_cntrl_open(thethread); + if(!lwp_thread) return; + + __lwp_thread_changepriority(lwp_thread,__lwp_priotocore(prio),TRUE); + __lwp_thread_dispatchenable(); +} + +void LWP_YieldThread() +{ + __lwp_thread_dispatchdisable(); + __lwp_thread_yield(); + __lwp_thread_dispatchenable(); +} + +void LWP_Reschedule(u32 prio) +{ + __lwp_thread_dispatchdisable(); + __lwp_rotate_readyqueue(prio); + __lwp_thread_dispatchenable(); +} + +BOOL LWP_ThreadIsSuspended(lwp_t thethread) +{ + BOOL state; + lwp_cntrl *lwp_thread; + + lwp_thread = __lwp_cntrl_open(thethread); + if(!lwp_thread) return FALSE; + + state = (__lwp_statesuspended(lwp_thread->cur_state) ? TRUE : FALSE); + + __lwp_thread_dispatchenable(); + return state; +} + + +s32 LWP_JoinThread(lwp_t thethread,void **value_ptr) +{ + u32 level; + void *return_ptr; + lwp_cntrl *exec,*lwp_thread; + + lwp_thread = __lwp_cntrl_open(thethread); + if(!lwp_thread) return 0; + + if(__lwp_thread_isexec(lwp_thread)) { + __lwp_thread_dispatchenable(); + return EDEADLK; //EDEADLK + } + + exec = _thr_executing; + _CPU_ISR_Disable(level); + __lwp_threadqueue_csenter(&lwp_thread->join_list); + exec->wait.ret_code = 0; + exec->wait.ret_arg_1 = NULL; + exec->wait.ret_arg = (void*)&return_ptr; + exec->wait.queue = &lwp_thread->join_list; + exec->wait.id = thethread; + _CPU_ISR_Restore(level); + __lwp_threadqueue_enqueue(&lwp_thread->join_list,LWP_WD_NOTIMEOUT); + __lwp_thread_dispatchenable(); + + if(value_ptr) *value_ptr = return_ptr; + return 0; +} + +s32 LWP_InitQueue(lwpq_t *thequeue) +{ + tqueue_st *tq; + + if(!thequeue) return -1; + + tq = __lwp_tqueue_allocate(); + if(!tq) return -1; + + __lwp_threadqueue_init(&tq->tqueue,LWP_THREADQ_MODEFIFO,LWP_STATES_WAITING_ON_THREADQ,0); + + *thequeue = (lwpq_t)(LWP_OBJMASKTYPE(LWP_OBJTYPE_TQUEUE)|LWP_OBJMASKID(tq->object.id)); + __lwp_thread_dispatchenable(); + + return 0; +} + +void LWP_CloseQueue(lwpq_t thequeue) +{ + lwp_cntrl *thethread; + tqueue_st *tq = (tqueue_st*)thequeue; + + tq = __lwp_tqueue_open(thequeue); + if(!tq) return; + + do { + thethread = __lwp_threadqueue_dequeue(&tq->tqueue); + } while(thethread); + __lwp_thread_dispatchenable(); + + __lwp_tqueue_free(tq); + return; +} + +s32 LWP_ThreadSleep(lwpq_t thequeue) +{ + u32 level; + tqueue_st *tq; + lwp_cntrl *exec = NULL; + + tq = __lwp_tqueue_open(thequeue); + if(!tq) return -1; + + exec = _thr_executing; + _CPU_ISR_Disable(level); + __lwp_threadqueue_csenter(&tq->tqueue); + exec->wait.ret_code = 0; + exec->wait.ret_arg = NULL; + exec->wait.ret_arg_1 = NULL; + exec->wait.queue = &tq->tqueue; + exec->wait.id = thequeue; + _CPU_ISR_Restore(level); + __lwp_threadqueue_enqueue(&tq->tqueue,LWP_THREADQ_NOTIMEOUT); + __lwp_thread_dispatchenable(); + return 0; +} + +void LWP_ThreadBroadcast(lwpq_t thequeue) +{ + tqueue_st *tq; + lwp_cntrl *thethread; + + tq = __lwp_tqueue_open(thequeue); + if(!tq) return; + + do { + thethread = __lwp_threadqueue_dequeue(&tq->tqueue); + } while(thethread); + __lwp_thread_dispatchenable(); +} + +void LWP_ThreadSignal(lwpq_t thequeue) +{ + tqueue_st *tq; + + tq = __lwp_tqueue_open(thequeue); + if(!tq) return; + + __lwp_threadqueue_dequeue(&tq->tqueue); + __lwp_thread_dispatchenable(); +} diff --git a/wii/libogc/libogc/lwp_handler.S b/wii/libogc/libogc/lwp_handler.S new file mode 100644 index 0000000000..edb8e633cd --- /dev/null +++ b/wii/libogc/libogc/lwp_handler.S @@ -0,0 +1,565 @@ +#include + + .set FP_SIZE, 8 + + .set GP_SRR0, (SRR0_OFFSET - 8) + .set GP_SRR1, (GP_SRR0 + 4) + + .set GP_1, (GPR1_OFFSET - 8) + .set GP_2, (GP_1 + 4) +#ifdef _DEBUG + .set GP_5, (GPR5_OFFSET - 8) + .set GP_6, (GP_5 + 4) +#endif + .set GP_13, (GPR13_OFFSET - 8) + .set GP_14, (GP_13 + 4) + .set GP_15, (GP_14 + 4) + .set GP_16, (GP_15 + 4) + .set GP_17, (GP_16 + 4) + .set GP_18, (GP_17 + 4) + .set GP_19, (GP_18 + 4) + .set GP_20, (GP_19 + 4) + .set GP_21, (GP_20 + 4) + .set GP_22, (GP_21 + 4) + .set GP_23, (GP_22 + 4) + .set GP_24, (GP_23 + 4) + .set GP_25, (GP_24 + 4) + .set GP_26, (GP_25 + 4) + .set GP_27, (GP_26 + 4) + .set GP_28, (GP_27 + 4) + .set GP_29, (GP_28 + 4) + .set GP_30, (GP_29 + 4) + .set GP_31, (GP_30 + 4) + + .set GQ_0, (GP_31 + 4) + .set GQ_1, (GQ_0 + 4) + .set GQ_2, (GQ_1 + 4) + .set GQ_3, (GQ_2 + 4) + .set GQ_4, (GQ_3 + 4) + .set GQ_5, (GQ_4 + 4) + .set GQ_6, (GQ_5 + 4) + .set GQ_7, (GQ_6 + 4) + + .set GP_CR, (GQ_7 + 4) + .set GP_LR, (GP_CR + 4) + .set GP_CTR, (GP_LR + 4) + .set GP_XER, (GP_CTR + 4) + .set GP_MSR, (GP_XER + 4) + .set GP_DAR, (GP_MSR + 4) + + .set STATE, (GP_DAR + 4) + .set MODE, (STATE + 2) + + .set FP_0, (FPR0_OFFSET - 8) + .set FP_1, (FP_0 + FP_SIZE) + .set FP_2, (FP_1 + FP_SIZE) + .set FP_3, (FP_2 + FP_SIZE) + .set FP_4, (FP_3 + FP_SIZE) + .set FP_5, (FP_4 + FP_SIZE) + .set FP_6, (FP_5 + FP_SIZE) + .set FP_7, (FP_6 + FP_SIZE) + .set FP_8, (FP_7 + FP_SIZE) + .set FP_9, (FP_8 + FP_SIZE) + .set FP_10, (FP_9 + FP_SIZE) + .set FP_11, (FP_10 + FP_SIZE) + .set FP_12, (FP_11 + FP_SIZE) + .set FP_13, (FP_12 + FP_SIZE) + .set FP_14, (FP_13 + FP_SIZE) + .set FP_15, (FP_14 + FP_SIZE) + .set FP_16, (FP_15 + FP_SIZE) + .set FP_17, (FP_16 + FP_SIZE) + .set FP_18, (FP_17 + FP_SIZE) + .set FP_19, (FP_18 + FP_SIZE) + .set FP_20, (FP_19 + FP_SIZE) + .set FP_21, (FP_20 + FP_SIZE) + .set FP_22, (FP_21 + FP_SIZE) + .set FP_23, (FP_22 + FP_SIZE) + .set FP_24, (FP_23 + FP_SIZE) + .set FP_25, (FP_24 + FP_SIZE) + .set FP_26, (FP_25 + FP_SIZE) + .set FP_27, (FP_26 + FP_SIZE) + .set FP_28, (FP_27 + FP_SIZE) + .set FP_29, (FP_28 + FP_SIZE) + .set FP_30, (FP_29 + FP_SIZE) + .set FP_31, (FP_30 + FP_SIZE) + .set FP_FPSCR, (FP_31 + FP_SIZE) + .set PSFP_0, (FP_FPSCR + FP_SIZE) + .set PSFP_1, (PSFP_0 + FP_SIZE) + .set PSFP_2, (PSFP_1 + FP_SIZE) + .set PSFP_3, (PSFP_2 + FP_SIZE) + .set PSFP_4, (PSFP_3 + FP_SIZE) + .set PSFP_5, (PSFP_4 + FP_SIZE) + .set PSFP_6, (PSFP_5 + FP_SIZE) + .set PSFP_7, (PSFP_6 + FP_SIZE) + .set PSFP_8, (PSFP_7 + FP_SIZE) + .set PSFP_9, (PSFP_8 + FP_SIZE) + .set PSFP_10, (PSFP_9 + FP_SIZE) + .set PSFP_11, (PSFP_10 + FP_SIZE) + .set PSFP_12, (PSFP_11 + FP_SIZE) + .set PSFP_13, (PSFP_12 + FP_SIZE) + .set PSFP_14, (PSFP_13 + FP_SIZE) + .set PSFP_15, (PSFP_14 + FP_SIZE) + .set PSFP_16, (PSFP_15 + FP_SIZE) + .set PSFP_17, (PSFP_16 + FP_SIZE) + .set PSFP_18, (PSFP_17 + FP_SIZE) + .set PSFP_19, (PSFP_18 + FP_SIZE) + .set PSFP_20, (PSFP_19 + FP_SIZE) + .set PSFP_21, (PSFP_20 + FP_SIZE) + .set PSFP_22, (PSFP_21 + FP_SIZE) + .set PSFP_23, (PSFP_22 + FP_SIZE) + .set PSFP_24, (PSFP_23 + FP_SIZE) + .set PSFP_25, (PSFP_24 + FP_SIZE) + .set PSFP_26, (PSFP_25 + FP_SIZE) + .set PSFP_27, (PSFP_26 + FP_SIZE) + .set PSFP_28, (PSFP_27 + FP_SIZE) + .set PSFP_29, (PSFP_28 + FP_SIZE) + .set PSFP_30, (PSFP_29 + FP_SIZE) + .set PSFP_31, (PSFP_30 + FP_SIZE) + + .align 5 + .globl _cpu_context_save_fp +_cpu_context_save_fp: + lhz r4,STATE(r3) + ori r4,r4,0x0001 + sth r4,STATE(r3) + stfd fr0, FP_0(r3) + stfd fr1, FP_1(r3) + stfd fr2, FP_2(r3) + stfd fr3, FP_3(r3) + stfd fr4, FP_4(r3) + stfd fr5, FP_5(r3) + stfd fr6, FP_6(r3) + stfd fr7, FP_7(r3) + stfd fr8, FP_8(r3) + stfd fr9, FP_9(r3) + stfd fr10, FP_10(r3) + stfd fr11, FP_11(r3) + stfd fr12, FP_12(r3) + stfd fr13, FP_13(r3) + stfd fr14, FP_14(r3) + stfd fr15, FP_15(r3) + stfd fr16, FP_16(r3) + stfd fr17, FP_17(r3) + stfd fr18, FP_18(r3) + stfd fr19, FP_19(r3) + stfd fr20, FP_20(r3) + stfd fr21, FP_21(r3) + stfd fr22, FP_22(r3) + stfd fr23, FP_23(r3) + stfd fr24, FP_24(r3) + stfd fr25, FP_25(r3) + stfd fr26, FP_26(r3) + stfd fr27, FP_27(r3) + stfd fr28, FP_28(r3) + stfd fr29, FP_29(r3) + stfd fr30, FP_30(r3) + stfd fr31, FP_31(r3) + mffs fr0 + stfd fr0, FP_FPSCR(r3) + lfd fr0, FP_0(r3) + mfspr r4,920 + extrwi. r4,r4,1,2 + beq 1f + psq_st fr0,PSFP_0(r3),0,0 + psq_st fr1,PSFP_1(r3),0,0 + psq_st fr2,PSFP_2(r3),0,0 + psq_st fr3,PSFP_3(r3),0,0 + psq_st fr4,PSFP_4(r3),0,0 + psq_st fr5,PSFP_5(r3),0,0 + psq_st fr6,PSFP_6(r3),0,0 + psq_st fr7,PSFP_7(r3),0,0 + psq_st fr8,PSFP_8(r3),0,0 + psq_st fr9,PSFP_9(r3),0,0 + psq_st fr10,PSFP_10(r3),0,0 + psq_st fr11,PSFP_11(r3),0,0 + psq_st fr12,PSFP_12(r3),0,0 + psq_st fr13,PSFP_13(r3),0,0 + psq_st fr14,PSFP_14(r3),0,0 + psq_st fr15,PSFP_15(r3),0,0 + psq_st fr16,PSFP_16(r3),0,0 + psq_st fr17,PSFP_17(r3),0,0 + psq_st fr18,PSFP_18(r3),0,0 + psq_st fr19,PSFP_19(r3),0,0 + psq_st fr20,PSFP_20(r3),0,0 + psq_st fr21,PSFP_21(r3),0,0 + psq_st fr22,PSFP_22(r3),0,0 + psq_st fr23,PSFP_23(r3),0,0 + psq_st fr24,PSFP_24(r3),0,0 + psq_st fr25,PSFP_25(r3),0,0 + psq_st fr26,PSFP_26(r3),0,0 + psq_st fr27,PSFP_27(r3),0,0 + psq_st fr28,PSFP_28(r3),0,0 + psq_st fr29,PSFP_29(r3),0,0 + psq_st fr30,PSFP_30(r3),0,0 + psq_st fr31,PSFP_31(r3),0,0 +1: blr + + .align 5 + .globl _cpu_context_restore_fp +_cpu_context_restore_fp: + lhz r4,STATE(r3) + clrlwi. r4,r4,31 + beq 2f + lfd fr0, FP_FPSCR(r3) + mtfsf 255, fr0 + mfspr r4,920 + extrwi. r4,r4,1,2 + beq 1f + psq_l fr0,PSFP_0(r3),0,0 + psq_l fr1,PSFP_1(r3),0,0 + psq_l fr2,PSFP_2(r3),0,0 + psq_l fr3,PSFP_3(r3),0,0 + psq_l fr4,PSFP_4(r3),0,0 + psq_l fr5,PSFP_5(r3),0,0 + psq_l fr6,PSFP_6(r3),0,0 + psq_l fr7,PSFP_7(r3),0,0 + psq_l fr8,PSFP_8(r3),0,0 + psq_l fr9,PSFP_9(r3),0,0 + psq_l fr10,PSFP_10(r3),0,0 + psq_l fr11,PSFP_11(r3),0,0 + psq_l fr12,PSFP_12(r3),0,0 + psq_l fr13,PSFP_13(r3),0,0 + psq_l fr14,PSFP_14(r3),0,0 + psq_l fr15,PSFP_15(r3),0,0 + psq_l fr16,PSFP_16(r3),0,0 + psq_l fr17,PSFP_17(r3),0,0 + psq_l fr18,PSFP_18(r3),0,0 + psq_l fr19,PSFP_19(r3),0,0 + psq_l fr20,PSFP_20(r3),0,0 + psq_l fr21,PSFP_21(r3),0,0 + psq_l fr22,PSFP_22(r3),0,0 + psq_l fr23,PSFP_23(r3),0,0 + psq_l fr24,PSFP_24(r3),0,0 + psq_l fr25,PSFP_25(r3),0,0 + psq_l fr26,PSFP_26(r3),0,0 + psq_l fr27,PSFP_27(r3),0,0 + psq_l fr28,PSFP_28(r3),0,0 + psq_l fr29,PSFP_29(r3),0,0 + psq_l fr30,PSFP_30(r3),0,0 + psq_l fr31,PSFP_31(r3),0,0 +1: lfd fr0, FP_0(r3) + lfd fr1, FP_1(r3) + lfd fr2, FP_2(r3) + lfd fr3, FP_3(r3) + lfd fr4, FP_4(r3) + lfd fr5, FP_5(r3) + lfd fr6, FP_6(r3) + lfd fr7, FP_7(r3) + lfd fr8, FP_8(r3) + lfd fr9, FP_9(r3) + lfd fr10, FP_10(r3) + lfd fr11, FP_11(r3) + lfd fr12, FP_12(r3) + lfd fr13, FP_13(r3) + lfd fr14, FP_14(r3) + lfd fr15, FP_15(r3) + lfd fr16, FP_16(r3) + lfd fr17, FP_17(r3) + lfd fr18, FP_18(r3) + lfd fr19, FP_19(r3) + lfd fr20, FP_20(r3) + lfd fr21, FP_21(r3) + lfd fr22, FP_22(r3) + lfd fr23, FP_23(r3) + lfd fr24, FP_24(r3) + lfd fr25, FP_25(r3) + lfd fr26, FP_26(r3) + lfd fr27, FP_27(r3) + lfd fr28, FP_28(r3) + lfd fr29, FP_29(r3) + lfd fr30, FP_30(r3) + lfd fr31, FP_31(r3) +2: blr + + .align 5 + .globl _cpu_context_switch +_cpu_context_switch: + sync + isync + + stw sp,GP_1(r3) + lwz sp,GP_1(r4) + stw toc,GP_2(r3) + lwz toc,GP_2(r4) + + stmw r13,GP_13(r3) + lmw r13,GP_13(r4) + + mfspr r5,912 + stw r5,GQ_0(r3) + lwz r6,GQ_0(r4) + mtspr 912,r6 + mfspr r5,913 + stw r5,GQ_1(r3) + lwz r6,GQ_1(r4) + mtspr 913,r6 + mfspr r5,914 + stw r5,GQ_2(r3) + lwz r6,GQ_2(r4) + mtspr 914,r6 + mfspr r5,915 + stw r5,GQ_3(r3) + lwz r6,GQ_3(r4) + mtspr 915,r6 + mfspr r5,916 + stw r5,GQ_4(r3) + lwz r6,GQ_4(r4) + mtspr 916,r6 + mfspr r5,917 + stw r5,GQ_5(r3) + lwz r6,GQ_5(r4) + mtspr 917,r6 + mfspr r5,918 + stw r5,GQ_6(r3) + lwz r6,GQ_6(r4) + mtspr 918,r6 + mfspr r5,919 + stw r5,GQ_7(r3) + lwz r6,GQ_7(r4) + mtspr 919,r6 + + mfcr r5 + stw r5, GP_CR(r3) + lwz r6, GP_CR(r4) + mtcrf 255, r6 + mflr r5 + stw r5, GP_LR(r3) + lwz r6, GP_LR(r4) + mtlr r6 + mfmsr r5 + stw r5, GP_MSR(r3) + lwz r6, GP_MSR(r4) + rlwinm r6, r6, 0, 19, 17 + mtmsr r6 + + blr + + .align 5 + .globl _cpu_context_save +_cpu_context_save: + sync + isync + + stw sp,GPR1_OFFSET-8(r3) + stw toc,GPR2_OFFSET-8(r3) + stmw r13,GPR13_OFFSET-8(r3) + + mfctr r6 + stw r6, CTR_OFFSET-8(r3) + mfcr r6 + stw r6, CR_OFFSET-8(r3) + mflr r7 + stw r7, LR_OFFSET-8(r3) + mfmsr r8 + stw r8, MSR_OFFSET-8(r3) + + mfspr r6,913 + stw r6,GQR1_OFFSET-8(r3) + mfspr r6,914 + stw r6,GQR2_OFFSET-8(r3) + mfspr r6,915 + stw r6,GQR3_OFFSET-8(r3) + mfspr r6,916 + stw r6,GQR4_OFFSET-8(r3) + mfspr r6,917 + stw r6,GQR5_OFFSET-8(r3) + mfspr r6,918 + stw r6,GQR6_OFFSET-8(r3) + mfspr r6,919 + stw r6,GQR7_OFFSET-8(r3) + + blr + + .align 5 + .globl _cpu_context_restore +_cpu_context_restore: + lwz sp,GPR1_OFFSET-8(r3) + lwz toc,GPR2_OFFSET-8(r3) + lmw r13,GPR13_OFFSET-8(r3) + + lwz r6, CTR_OFFSET-8(r3) + mtctr r6 + lwz r6, CR_OFFSET-8(r3) + mtcrf 255, r6 + lwz r7, LR_OFFSET-8(r3) + mtlr r7 + lwz r8, MSR_OFFSET-8(r3) + rlwinm r8,r8,0,19,17 + mtmsr r8 + + lwz r6, GQR1_OFFSET-8(r3) + mtspr 913,r6 + lwz r6, GQR2_OFFSET-8(r3) + mtspr 914,r6 + lwz r6, GQR3_OFFSET-8(r3) + mtspr 915,r6 + lwz r6, GQR4_OFFSET-8(r3) + mtspr 916,r6 + lwz r6, GQR5_OFFSET-8(r3) + mtspr 917,r6 + lwz r6, GQR6_OFFSET-8(r3) + mtspr 918,r6 + lwz r6, GQR7_OFFSET-8(r3) + mtspr 919,r6 + + blr + +#ifdef _DEBUG + .align 5 + .globl _cpu_context_switch_ex +_cpu_context_switch_ex: + sync + isync + + stw sp,GP_1(r3) + lwz sp,GP_1(r4) + stw toc,GP_2(r3) + lwz toc,GP_2(r4) + + stmw r5,GP_5(r3) + + mfspr r5,912 + stw r5,GQ_0(r3) + lwz r5,GQ_0(r4) + mfspr r6,913 + mtspr 912,r5 + stw r6,GQ_1(r3) + lwz r6,GQ_1(r4) + mfspr r5,914 + mtspr 913,r6 + stw r5,GQ_2(r3) + lwz r5,GQ_2(r4) + mfspr r6,915 + mtspr 914,r5 + stw r6,GQ_3(r3) + lwz r6,GQ_3(r4) + mfspr r5,916 + mtspr 915,r6 + stw r5,GQ_4(r3) + lwz r5,GQ_4(r4) + mfspr r6,917 + mtspr 916,r5 + stw r6,GQ_5(r3) + lwz r6,GQ_5(r4) + mfspr r5,918 + mtspr 917,r6 + stw r5,GQ_6(r3) + lwz r5,GQ_6(r4) + mfspr r6,919 + mtspr 918,r5 + stw r6,GQ_7(r3) + lwz r6,GQ_7(r4) + mtspr 919,r6 + + mfsrr0 r5 + stw r5, GP_SRR0(r3) + lwz r5, GP_SRR0(r4) + mfsrr1 r6 + mtsrr0 r5 + stw r6, GP_SRR1(r3) + lwz r6, GP_SRR1(r4) + mtsrr1 r6 + mfcr r5 + stw r5, GP_CR(r3) + lwz r5, GP_CR(r4) + mflr r6 + mtcrf 255, r5 + stw r6, GP_LR(r3) + lwz r6, GP_LR(r4) + mfmsr r5 + mtlr r6 + stw r5, GP_MSR(r3) + lwz r5, GP_MSR(r4) + lmw r6, GP_6(r4) + rlwinm r5, r5, 0, 19, 17 + mtmsr r5 + + lwz r5,GP_5(r4) + blr + + .align 5 + .globl _cpu_context_save_ex +_cpu_context_save_ex: + sync + isync + + stw r0,GPR0_OFFSET-8(r3) + stw sp,GPR1_OFFSET-8(r3) + stw toc,GPR2_OFFSET-8(r3) + stmw r3,GPR3_OFFSET-8(r3) + + mfctr r6 + stw r6, CTR_OFFSET-8(r3) + mfcr r6 + stw r6, CR_OFFSET-8(r3) + mflr r7 + stw r7, LR_OFFSET-8(r3) + mfxer r7 + stw r8, XER_OFFSET-8(r3) + mfmsr r8 + stw r8, MSR_OFFSET-8(r3) + mfdar r8 + stw r8, DAR_OFFSET-8(r3) + mfsrr0 r8 + stw r8, SRR0_OFFSET-8(r3) + mfsrr1 r8 + stw r8, SRR1_OFFSET-8(r3) + + mfspr r6,913 + stw r6,GQR1_OFFSET-8(r3) + mfspr r6,914 + stw r6,GQR2_OFFSET-8(r3) + mfspr r6,915 + stw r6,GQR3_OFFSET-8(r3) + mfspr r6,916 + stw r6,GQR4_OFFSET-8(r3) + mfspr r6,917 + stw r6,GQR5_OFFSET-8(r3) + mfspr r6,918 + stw r6,GQR6_OFFSET-8(r3) + mfspr r6,919 + stw r6,GQR7_OFFSET-8(r3) + + blr + + .align 5 + .globl _cpu_context_restore_ex +_cpu_context_restore_ex: + + lwz r6, CTR_OFFSET-8(r3) + mtctr r6 + lwz r6, CR_OFFSET-8(r3) + mtcrf 255, r6 + lwz r7, LR_OFFSET-8(r3) + mtlr r7 + lwz r7, XER_OFFSET-8(r3) + mtxer r7 + lwz r8, MSR_OFFSET-8(r3) + mtmsr r8 + lwz r8, SRR0_OFFSET-8(r3) + mtsrr0 r8 + lwz r8, SRR1_OFFSET-8(r3) + mtsrr1 r8 + + lwz r6, GQR1_OFFSET-8(r3) + mtspr 913,r6 + lwz r6, GQR2_OFFSET-8(r3) + mtspr 914,r6 + lwz r6, GQR3_OFFSET-8(r3) + mtspr 915,r6 + lwz r6, GQR4_OFFSET-8(r3) + mtspr 916,r6 + lwz r6, GQR5_OFFSET-8(r3) + mtspr 917,r6 + lwz r6, GQR6_OFFSET-8(r3) + mtspr 918,r6 + lwz r6, GQR7_OFFSET-8(r3) + mtspr 919,r6 + + lwz sp,GPR1_OFFSET-8(r3) + lwz toc,GPR2_OFFSET-8(r3) + lmw r4,GPR4_OFFSET-8(r3) + lwz r3,GPR3_OFFSET-8(r3) + + blr +#endif diff --git a/wii/libogc/libogc/lwp_heap.c b/wii/libogc/libogc/lwp_heap.c new file mode 100644 index 0000000000..5507dcca55 --- /dev/null +++ b/wii/libogc/libogc/lwp_heap.c @@ -0,0 +1,198 @@ +#include +#include +#include +#include +#include + +#include "lwp_heap.h" + + +u32 __lwp_heap_init(heap_cntrl *theheap,void *start_addr,u32 size,u32 pg_size) +{ + u32 dsize,level; + heap_block *block; + + if(!__lwp_heap_pgsize_valid(pg_size) || sizepg_size = pg_size; + dsize = (size - HEAP_OVERHEAD); + + block = (heap_block*)start_addr; + block->back_flag = HEAP_DUMMY_FLAG; + block->front_flag = dsize; + block->next = __lwp_heap_tail(theheap); + block->prev = __lwp_heap_head(theheap); + + theheap->start = block; + theheap->first = block; + theheap->perm_null = NULL; + theheap->last = block; + + block = __lwp_heap_nextblock(block); + block->back_flag = dsize; + block->front_flag = HEAP_DUMMY_FLAG; + theheap->final = block; + _CPU_ISR_Restore(level); + + return (dsize - HEAP_BLOCK_USED_OVERHEAD); +} + +void* __lwp_heap_allocate(heap_cntrl *theheap,u32 size) +{ + u32 excess; + u32 dsize; + heap_block *block; + heap_block *next_block; + heap_block *tmp_block; + void *ptr; + u32 offset,level; + + + if(size>=(-1-HEAP_BLOCK_USED_OVERHEAD)) return NULL; + + _CPU_ISR_Disable(level); + excess = (size % theheap->pg_size); + dsize = (size + theheap->pg_size + HEAP_BLOCK_USED_OVERHEAD); + + if(excess) + dsize += (theheap->pg_size - excess); + + if(dsizefirst;;block=block->next) { + if(block==__lwp_heap_tail(theheap)) { + _CPU_ISR_Restore(level); + return NULL; + } + if(block->front_flag>=dsize) break; + } + + if((block->front_flag-dsize)>(theheap->pg_size+HEAP_BLOCK_USED_OVERHEAD)) { + block->front_flag -= dsize; + next_block = __lwp_heap_nextblock(block); + next_block->back_flag = block->front_flag; + + tmp_block = __lwp_heap_blockat(next_block,dsize); + tmp_block->back_flag = next_block->front_flag = __lwp_heap_buildflag(dsize,HEAP_BLOCK_USED); + + ptr = __lwp_heap_startuser(next_block); + } else { + next_block = __lwp_heap_nextblock(block); + next_block->back_flag = __lwp_heap_buildflag(block->front_flag,HEAP_BLOCK_USED); + + block->front_flag = next_block->back_flag; + block->next->prev = block->prev; + block->prev->next = block->next; + + ptr = __lwp_heap_startuser(block); + } + + offset = (theheap->pg_size - ((u32)ptr&(theheap->pg_size-1))); + ptr += offset; + *(((u32*)ptr)-1) = offset; + _CPU_ISR_Restore(level); + + return ptr; +} + +BOOL __lwp_heap_free(heap_cntrl *theheap,void *ptr) +{ + heap_block *block; + heap_block *next_block; + heap_block *new_next; + heap_block *prev_block; + heap_block *tmp_block; + u32 dsize,level; + + _CPU_ISR_Disable(level); + + block = __lwp_heap_usrblockat(ptr); + if(!__lwp_heap_blockin(theheap,block) || __lwp_heap_blockfree(block)) { + _CPU_ISR_Restore(level); + return FALSE; + } + + dsize = __lwp_heap_blocksize(block); + next_block = __lwp_heap_blockat(block,dsize); + + if(!__lwp_heap_blockin(theheap,next_block) || (block->front_flag!=next_block->back_flag)) { + _CPU_ISR_Restore(level); + return FALSE; + } + + if(__lwp_heap_prev_blockfree(block)) { + prev_block = __lwp_heap_prevblock(block); + if(!__lwp_heap_blockin(theheap,prev_block)) { + _CPU_ISR_Restore(level); + return FALSE; + } + + if(__lwp_heap_blockfree(next_block)) { + prev_block->front_flag += next_block->front_flag+dsize; + tmp_block = __lwp_heap_nextblock(prev_block); + tmp_block->back_flag = prev_block->front_flag; + next_block->next->prev = next_block->prev; + next_block->prev->next = next_block->next; + } else { + prev_block->front_flag = next_block->back_flag = prev_block->front_flag+dsize; + } + } else if(__lwp_heap_blockfree(next_block)) { + block->front_flag = dsize+next_block->front_flag; + new_next = __lwp_heap_nextblock(block); + new_next->back_flag = block->front_flag; + block->next = next_block->next; + block->prev = next_block->prev; + next_block->prev->next = block; + next_block->next->prev = block; + + if(theheap->first==next_block) theheap->first = block; + } else { + next_block->back_flag = block->front_flag = dsize; + block->prev = __lwp_heap_head(theheap); + block->next = theheap->first; + theheap->first = block; + block->next->prev = block; + } + _CPU_ISR_Restore(level); + + return TRUE; +} + +u32 __lwp_heap_getinfo(heap_cntrl *theheap,heap_iblock *theinfo) +{ + u32 not_done = 1; + heap_block *theblock = NULL; + heap_block *nextblock = NULL; + + theinfo->free_blocks = 0; + theinfo->free_size = 0; + theinfo->used_blocks = 0; + theinfo->used_size = 0; + + if(!__sys_state_up(__sys_state_get())) return 1; + + theblock = theheap->start; + if(theblock->back_flag!=HEAP_DUMMY_FLAG) return 2; + + while(not_done) { + if(__lwp_heap_blockfree(theblock)) { + theinfo->free_blocks++; + theinfo->free_size += __lwp_heap_blocksize(theblock); + } else { + theinfo->used_blocks++; + theinfo->used_size += __lwp_heap_blocksize(theblock); + } + + if(theblock->front_flag!=HEAP_DUMMY_FLAG) { + nextblock = __lwp_heap_nextblock(theblock); + if(theblock->front_flag!=nextblock->back_flag) return 2; + } + + if(theblock->front_flag==HEAP_DUMMY_FLAG) + not_done = 0; + else + theblock = nextblock; + } + return 0; +} diff --git a/wii/libogc/libogc/lwp_heap.inl b/wii/libogc/libogc/lwp_heap.inl new file mode 100644 index 0000000000..913a84a79f --- /dev/null +++ b/wii/libogc/libogc/lwp_heap.inl @@ -0,0 +1,75 @@ +#ifndef __LWP_HEAP_INL__ +#define __LWP_HEAP_INL__ + +static __inline__ heap_block* __lwp_heap_head(heap_cntrl *theheap) +{ + return (heap_block*)&theheap->start; +} + +static __inline__ heap_block* __lwp_heap_tail(heap_cntrl *heap) +{ + return (heap_block*)&heap->final; +} + +static __inline__ heap_block* __lwp_heap_prevblock(heap_block *block) +{ + return (heap_block*)((char*)block - (block->back_flag&~HEAP_BLOCK_USED)); +} + +static __inline__ heap_block* __lwp_heap_nextblock(heap_block *block) +{ + return (heap_block*)((char*)block + (block->front_flag&~HEAP_BLOCK_USED)); +} + +static __inline__ heap_block* __lwp_heap_blockat(heap_block *block,u32 offset) +{ + return (heap_block*)((char*)block + offset); +} + +static __inline__ heap_block* __lwp_heap_usrblockat(void *ptr) +{ + u32 offset = *(((u32*)ptr)-1); + return __lwp_heap_blockat(ptr,-offset+-HEAP_BLOCK_USED_OVERHEAD); +} + +static __inline__ bool __lwp_heap_prev_blockfree(heap_block *block) +{ + return !(block->back_flag&HEAP_BLOCK_USED); +} + +static __inline__ bool __lwp_heap_blockfree(heap_block *block) +{ + return !(block->front_flag&HEAP_BLOCK_USED); +} + +static __inline__ bool __lwp_heap_blockused(heap_block *block) +{ + return (block->front_flag&HEAP_BLOCK_USED); +} + +static __inline__ u32 __lwp_heap_blocksize(heap_block *block) +{ + return (block->front_flag&~HEAP_BLOCK_USED); +} + +static __inline__ void* __lwp_heap_startuser(heap_block *block) +{ + return (void*)&block->next; +} + +static __inline__ bool __lwp_heap_blockin(heap_cntrl *heap,heap_block *block) +{ + return ((u32)block>=(u32)heap->start && (u32)block<=(u32)heap->final); +} + +static __inline__ bool __lwp_heap_pgsize_valid(u32 pgsize) +{ + return (pgsize!=0 && ((pgsize%PPC_ALIGNMENT)==0)); +} + +static __inline__ u32 __lwp_heap_buildflag(u32 size,u32 flag) +{ + return (size|flag); +} + +#endif diff --git a/wii/libogc/libogc/lwp_messages.c b/wii/libogc/libogc/lwp_messages.c new file mode 100644 index 0000000000..284de8a45c --- /dev/null +++ b/wii/libogc/libogc/lwp_messages.c @@ -0,0 +1,258 @@ +#include +#include "asm.h" +#include "lwp_messages.h" +#include "lwp_wkspace.h" + +void __lwpmq_msg_insert(mq_cntrl *mqueue,mq_buffercntrl *msg,u32 type) +{ + ++mqueue->num_pendingmsgs; + msg->prio = type; + +#ifdef _LWPMQ_DEBUG + printf("__lwpmq_msg_insert(%p,%p,%d)\n",mqueue,msg,type); +#endif + + switch(type) { + case LWP_MQ_SEND_REQUEST: + __lwpmq_msg_append(mqueue,msg); + break; + case LWP_MQ_SEND_URGENT: + __lwpmq_msg_prepend(mqueue,msg); + break; + default: + { + mq_buffercntrl *tmsg; + lwp_node *node; + lwp_queue *header; + + header = &mqueue->pending_msgs; + node = header->first; + while(!__lwp_queue_istail(header,node)) { + tmsg = (mq_buffercntrl*)node; + if(tmsg->prio<=msg->prio) { + node = node->next; + continue; + } + break; + } + __lwp_queue_insert(node->prev,&msg->node); + } + break; + } + + if(mqueue->num_pendingmsgs==1 && mqueue->notify_handler) + mqueue->notify_handler(mqueue->notify_arg); +} + +u32 __lwpmq_initialize(mq_cntrl *mqueue,mq_attr *attrs,u32 max_pendingmsgs,u32 max_msgsize) +{ + u32 alloc_msgsize; + u32 buffering_req; + +#ifdef _LWPMQ_DEBUG + printf("__lwpmq_initialize(%p,%p,%d,%d)\n",mqueue,attrs,max_pendingmsgs,max_msgsize); +#endif + mqueue->max_pendingmsgs = max_pendingmsgs; + mqueue->num_pendingmsgs = 0; + mqueue->max_msgsize = max_msgsize; + __lwpmq_set_notify(mqueue,NULL,NULL); + + alloc_msgsize = max_msgsize; + if(alloc_msgsize&(sizeof(u32)-1)) + alloc_msgsize = (alloc_msgsize+sizeof(u32))&~(sizeof(u32)-1); + + buffering_req = max_pendingmsgs*(alloc_msgsize+sizeof(mq_buffercntrl)); + mqueue->msq_buffers = (mq_buffer*)__lwp_wkspace_allocate(buffering_req); + + if(!mqueue->msq_buffers) return 0; + + __lwp_queue_initialize(&mqueue->inactive_msgs,mqueue->msq_buffers,max_pendingmsgs,(alloc_msgsize+sizeof(mq_buffercntrl))); + __lwp_queue_init_empty(&mqueue->pending_msgs); + __lwp_threadqueue_init(&mqueue->wait_queue,__lwpmq_is_priority(attrs)?LWP_THREADQ_MODEPRIORITY:LWP_THREADQ_MODEFIFO,LWP_STATES_WAITING_FOR_MESSAGE,LWP_MQ_STATUS_TIMEOUT); + + return 1; +} + +u32 __lwpmq_seize(mq_cntrl *mqueue,u32 id,void *buffer,u32 *size,u32 wait,u64 timeout) +{ + u32 level; + mq_buffercntrl *msg; + lwp_cntrl *exec,*thread; + + exec = _thr_executing; + exec->wait.ret_code = LWP_MQ_STATUS_SUCCESSFUL; +#ifdef _LWPMQ_DEBUG + printf("__lwpmq_seize(%p,%d,%p,%p,%d,%d)\n",mqueue,id,buffer,size,wait,mqueue->num_pendingmsgs); +#endif + + _CPU_ISR_Disable(level); + if(mqueue->num_pendingmsgs!=0) { + --mqueue->num_pendingmsgs; + msg = __lwpmq_get_pendingmsg(mqueue); + _CPU_ISR_Restore(level); + + *size = msg->contents.size; + exec->wait.cnt = msg->prio; + __lwpmq_buffer_copy(buffer,msg->contents.buffer,*size); + + thread = __lwp_threadqueue_dequeue(&mqueue->wait_queue); + if(!thread) { + __lwpmq_free_msg(mqueue,msg); + return LWP_MQ_STATUS_SUCCESSFUL; + } + + msg->prio = thread->wait.cnt; + msg->contents.size = (u32)thread->wait.ret_arg_1; + __lwpmq_buffer_copy(msg->contents.buffer,thread->wait.ret_arg,msg->contents.size); + + __lwpmq_msg_insert(mqueue,msg,msg->prio); + return LWP_MQ_STATUS_SUCCESSFUL; + } + + if(!wait) { + _CPU_ISR_Restore(level); + exec->wait.ret_code = LWP_MQ_STATUS_UNSATISFIED_NOWAIT; + return LWP_MQ_STATUS_UNSATISFIED_NOWAIT; + } + + __lwp_threadqueue_csenter(&mqueue->wait_queue); + exec->wait.queue = &mqueue->wait_queue; + exec->wait.id = id; + exec->wait.ret_arg = (void*)buffer; + exec->wait.ret_arg_1 = (void*)size; + _CPU_ISR_Restore(level); + + __lwp_threadqueue_enqueue(&mqueue->wait_queue,timeout); + return LWP_MQ_STATUS_SUCCESSFUL; +} + +u32 __lwpmq_submit(mq_cntrl *mqueue,u32 id,void *buffer,u32 size,u32 type,u32 wait,u64 timeout) +{ + u32 level; + lwp_cntrl *thread; + mq_buffercntrl *msg; + +#ifdef _LWPMQ_DEBUG + printf("__lwpmq_submit(%p,%p,%d,%d,%d,%d)\n",mqueue,buffer,size,id,type,wait); +#endif + if(size>mqueue->max_msgsize) + return LWP_MQ_STATUS_INVALID_SIZE; + + if(mqueue->num_pendingmsgs==0) { + thread = __lwp_threadqueue_dequeue(&mqueue->wait_queue); + if(thread) { + __lwpmq_buffer_copy(thread->wait.ret_arg,buffer,size); + *(u32*)thread->wait.ret_arg_1 = size; + thread->wait.cnt = type; + return LWP_MQ_STATUS_SUCCESSFUL; + } + } + + if(mqueue->num_pendingmsgsmax_pendingmsgs) { + msg = __lwpmq_allocate_msg(mqueue); + if(!msg) return LWP_MQ_STATUS_UNSATISFIED; + + __lwpmq_buffer_copy(msg->contents.buffer,buffer,size); + msg->contents.size = size; + msg->prio = type; + __lwpmq_msg_insert(mqueue,msg,type); + return LWP_MQ_STATUS_SUCCESSFUL; + } + + if(!wait) return LWP_MQ_STATUS_TOO_MANY; + if(__lwp_isr_in_progress()) return LWP_MQ_STATUS_UNSATISFIED; + + { + lwp_cntrl *exec = _thr_executing; + + _CPU_ISR_Disable(level); + __lwp_threadqueue_csenter(&mqueue->wait_queue); + exec->wait.queue = &mqueue->wait_queue; + exec->wait.id = id; + exec->wait.ret_arg = (void*)buffer; + exec->wait.ret_arg_1 = (void*)size; + exec->wait.cnt = type; + _CPU_ISR_Restore(level); + + __lwp_threadqueue_enqueue(&mqueue->wait_queue,timeout); + } + return LWP_MQ_STATUS_UNSATISFIED_WAIT; +} + +u32 __lwpmq_broadcast(mq_cntrl *mqueue,void *buffer,u32 size,u32 id,u32 *count) +{ + lwp_cntrl *thread; + u32 num_broadcast; + lwp_waitinfo *waitp; + u32 rsize; +#ifdef _LWPMQ_DEBUG + printf("__lwpmq_broadcast(%p,%p,%d,%d,%p)\n",mqueue,buffer,size,id,count); +#endif + if(mqueue->num_pendingmsgs!=0) { + *count = 0; + return LWP_MQ_STATUS_SUCCESSFUL; + } + + num_broadcast = 0; + while((thread=__lwp_threadqueue_dequeue(&mqueue->wait_queue))) { + waitp = &thread->wait; + ++num_broadcast; + + rsize = size; + if(size>mqueue->max_msgsize) + rsize = mqueue->max_msgsize; + + __lwpmq_buffer_copy(waitp->ret_arg,buffer,rsize); + *(u32*)waitp->ret_arg_1 = size; + } + *count = num_broadcast; + return LWP_MQ_STATUS_SUCCESSFUL; +} + +void __lwpmq_close(mq_cntrl *mqueue,u32 status) +{ + __lwp_threadqueue_flush(&mqueue->wait_queue,status); + __lwpmq_flush_support(mqueue); + __lwp_wkspace_free(mqueue->msq_buffers); +} + +u32 __lwpmq_flush(mq_cntrl *mqueue) +{ + if(mqueue->num_pendingmsgs!=0) + return __lwpmq_flush_support(mqueue); + else + return 0; +} + +u32 __lwpmq_flush_support(mq_cntrl *mqueue) +{ + u32 level; + lwp_node *inactive; + lwp_node *mqueue_first; + lwp_node *mqueue_last; + u32 cnt; + + _CPU_ISR_Disable(level); + + inactive = mqueue->inactive_msgs.first; + mqueue_first = mqueue->pending_msgs.first; + mqueue_last = mqueue->pending_msgs.last; + + mqueue->inactive_msgs.first = mqueue_first; + mqueue_last->next = inactive; + inactive->prev = mqueue_last; + mqueue_first->prev = __lwp_queue_head(&mqueue->inactive_msgs); + + __lwp_queue_init_empty(&mqueue->pending_msgs); + + cnt = mqueue->num_pendingmsgs; + mqueue->num_pendingmsgs = 0; + + _CPU_ISR_Restore(level); + return cnt; +} + +void __lwpmq_flush_waitthreads(mq_cntrl *mqueue) +{ + __lwp_threadqueue_flush(&mqueue->wait_queue,LWP_MQ_STATUS_UNSATISFIED_NOWAIT); +} diff --git a/wii/libogc/libogc/lwp_messages.inl b/wii/libogc/libogc/lwp_messages.inl new file mode 100644 index 0000000000..db023fa99e --- /dev/null +++ b/wii/libogc/libogc/lwp_messages.inl @@ -0,0 +1,62 @@ +#ifndef __MESSAGE_INL__ +#define __MESSAGE_INL__ + +static __inline__ void __lwpmq_set_notify(mq_cntrl *mqueue,mq_notifyhandler handler,void *arg) +{ + mqueue->notify_handler = handler; + mqueue->notify_arg = arg; +} + +static __inline__ u32 __lwpmq_is_priority(mq_attr *attr) +{ + return (attr->mode==LWP_MQ_PRIORITY); +} + +static __inline__ mq_buffercntrl* __lwpmq_allocate_msg(mq_cntrl *mqueue) +{ + return (mq_buffercntrl*)__lwp_queue_get(&mqueue->inactive_msgs); +} + +static __inline__ void __lwpmq_free_msg(mq_cntrl *mqueue,mq_buffercntrl *msg) +{ + __lwp_queue_append(&mqueue->inactive_msgs,&msg->node); +} + +static __inline__ void __lwpmq_msg_append(mq_cntrl *mqueue,mq_buffercntrl *msg) +{ +#ifdef _LWPMQ_DEBUG + printf("__lwpmq_msq_append(%p,%p,%p)\n",mqueue,&mqueue->inactive_msgs,msg); +#endif + __lwp_queue_append(&mqueue->pending_msgs,&msg->node); +} + +static __inline__ void __lwpmq_msg_prepend(mq_cntrl *mqueue,mq_buffercntrl *msg) +{ +#ifdef _LWPMQ_DEBUG + printf("__lwpmq_msq_prepend(%p,%p,%p)\n",mqueue,&mqueue->inactive_msgs,msg); +#endif + __lwp_queue_prepend(&mqueue->pending_msgs,&msg->node); +} + +static __inline__ u32 __lwpmq_send(mq_cntrl *mqueue,u32 id,void *buffer,u32 size,u32 wait,u32 timeout) +{ + return __lwpmq_submit(mqueue,id,buffer,size,LWP_MQ_SEND_REQUEST,wait,timeout); +} + +static __inline__ u32 __lwpmq_urgent(mq_cntrl *mqueue,void *buffer,u32 size,u32 id,u32 wait,u32 timeout) +{ + return __lwpmq_submit(mqueue,id,buffer,size,LWP_MQ_SEND_URGENT,wait,timeout); +} + +static __inline__ mq_buffercntrl* __lwpmq_get_pendingmsg(mq_cntrl *mqueue) +{ + return (mq_buffercntrl*)__lwp_queue_getI(&mqueue->pending_msgs); +} + +static __inline__ void __lwpmq_buffer_copy(void *dest,const void *src,u32 size) +{ + if(size==sizeof(u32)) *(u32*)dest = *(u32*)src; + else memcpy(dest,src,size); +} + +#endif diff --git a/wii/libogc/libogc/lwp_mutex.c b/wii/libogc/libogc/lwp_mutex.c new file mode 100644 index 0000000000..205074a952 --- /dev/null +++ b/wii/libogc/libogc/lwp_mutex.c @@ -0,0 +1,95 @@ +#include "asm.h" +#include "lwp_mutex.h" + +void __lwp_mutex_initialize(lwp_mutex *mutex,lwp_mutex_attr *attrs,u32 init_lock) +{ + mutex->atrrs = *attrs; + mutex->lock = init_lock; + mutex->blocked_cnt = 0; + + if(init_lock==LWP_MUTEX_LOCKED) { + mutex->nest_cnt = 1; + mutex->holder = _thr_executing; + if(__lwp_mutex_isinheritprio(attrs) || __lwp_mutex_isprioceiling(attrs)) + _thr_executing->res_cnt++; + } else { + mutex->nest_cnt = 0; + mutex->holder = NULL; + } + + __lwp_threadqueue_init(&mutex->wait_queue,__lwp_mutex_isfifo(attrs)?LWP_THREADQ_MODEFIFO:LWP_THREADQ_MODEPRIORITY,LWP_STATES_WAITING_FOR_MUTEX,LWP_MUTEX_TIMEOUT); +} + +u32 __lwp_mutex_surrender(lwp_mutex *mutex) +{ + lwp_cntrl *thethread; + lwp_cntrl *holder; + + holder = mutex->holder; + + if(mutex->atrrs.onlyownerrelease) { + if(!__lwp_thread_isexec(holder)) + return LWP_MUTEX_NOTOWNER; + } + + if(!mutex->nest_cnt) + return LWP_MUTEX_SUCCESSFUL; + + mutex->nest_cnt--; + if(mutex->nest_cnt!=0) { + switch(mutex->atrrs.nest_behavior) { + case LWP_MUTEX_NEST_ACQUIRE: + return LWP_MUTEX_SUCCESSFUL; + case LWP_MUTEX_NEST_ERROR: + return LWP_MUTEX_NEST_NOTALLOWED; + case LWP_MUTEX_NEST_BLOCK: + break; + } + } + + if(__lwp_mutex_isinheritprio(&mutex->atrrs) || __lwp_mutex_isprioceiling(&mutex->atrrs)) + holder->res_cnt--; + + mutex->holder = NULL; + if(__lwp_mutex_isinheritprio(&mutex->atrrs) || __lwp_mutex_isprioceiling(&mutex->atrrs)) { + if(holder->res_cnt==0 && holder->real_prio!=holder->cur_prio) + __lwp_thread_changepriority(holder,holder->real_prio,TRUE); + } + + if((thethread=__lwp_threadqueue_dequeue(&mutex->wait_queue))) { + mutex->nest_cnt = 1; + mutex->holder = thethread; + if(__lwp_mutex_isinheritprio(&mutex->atrrs) || __lwp_mutex_isprioceiling(&mutex->atrrs)) + thethread->res_cnt++; + } else + mutex->lock = LWP_MUTEX_UNLOCKED; + + return LWP_MUTEX_SUCCESSFUL; +} + +void __lwp_mutex_seize_irq_blocking(lwp_mutex *mutex,u64 timeout) +{ + lwp_cntrl *exec; + + exec = _thr_executing; + if(__lwp_mutex_isinheritprio(&mutex->atrrs)){ + if(mutex->holder->cur_prio>exec->cur_prio) + __lwp_thread_changepriority(mutex->holder,exec->cur_prio,FALSE); + } + + mutex->blocked_cnt++; + __lwp_threadqueue_enqueue(&mutex->wait_queue,timeout); + + if(_thr_executing->wait.ret_code==LWP_MUTEX_SUCCESSFUL) { + if(__lwp_mutex_isprioceiling(&mutex->atrrs)) { + if(mutex->atrrs.prioceilcur_prio) + __lwp_thread_changepriority(exec,mutex->atrrs.prioceil,FALSE); + } + } + __lwp_thread_dispatchenable(); +} + +void __lwp_mutex_flush(lwp_mutex *mutex,u32 status) +{ + __lwp_threadqueue_flush(&mutex->wait_queue,status); +} diff --git a/wii/libogc/libogc/lwp_mutex.inl b/wii/libogc/libogc/lwp_mutex.inl new file mode 100644 index 0000000000..afa9c82396 --- /dev/null +++ b/wii/libogc/libogc/lwp_mutex.inl @@ -0,0 +1,88 @@ +#ifndef __LWP_MUTEX_INL__ +#define __LWP_MUTEX_INL__ + +static __inline__ u32 __lwp_mutex_locked(lwp_mutex *mutex) +{ + return (mutex->lock==LWP_MUTEX_LOCKED); +} + +static __inline__ u32 __lwp_mutex_ispriority(lwp_mutex_attr *attrs) +{ + return (attrs->mode==LWP_MUTEX_PRIORITY); +} + +static __inline__ u32 __lwp_mutex_isfifo(lwp_mutex_attr *attrs) +{ + return (attrs->mode==LWP_MUTEX_FIFO); +} + +static __inline__ u32 __lwp_mutex_isinheritprio(lwp_mutex_attr *attrs) +{ + return (attrs->mode==LWP_MUTEX_INHERITPRIO); +} + +static __inline__ u32 __lwp_mutex_isprioceiling(lwp_mutex_attr *attrs) +{ + return (attrs->mode==LWP_MUTEX_PRIORITYCEIL); +} + +static __inline__ u32 __lwp_mutex_seize_irq_trylock(lwp_mutex *mutex,u32 *isr_level) +{ + lwp_cntrl *exec; + u32 level = *isr_level; + + exec = _thr_executing; + exec->wait.ret_code = LWP_MUTEX_SUCCESSFUL; + if(!__lwp_mutex_locked(mutex)) { + mutex->lock = LWP_MUTEX_LOCKED; + mutex->holder = exec; + mutex->nest_cnt = 1; + if(__lwp_mutex_isinheritprio(&mutex->atrrs) || __lwp_mutex_isprioceiling(&mutex->atrrs)) + exec->res_cnt++; + if(!__lwp_mutex_isprioceiling(&mutex->atrrs)) { + _CPU_ISR_Restore(level); + return 0; + } + { + u32 prioceiling,priocurr; + + prioceiling = mutex->atrrs.prioceil; + priocurr = exec->cur_prio; + if(priocurr==prioceiling) { + _CPU_ISR_Restore(level); + return 0; + } + if(priocurr>prioceiling) { + __lwp_thread_dispatchdisable(); + _CPU_ISR_Restore(level); + __lwp_thread_changepriority(mutex->holder,mutex->atrrs.prioceil,FALSE); + __lwp_thread_dispatchenable(); + return 0; + } + exec->wait.ret_code = LWP_MUTEX_CEILINGVIOL; + mutex->nest_cnt = 0; + exec->res_cnt--; + _CPU_ISR_Restore(level); + return 0; + } + return 0; + } + + if(__lwp_thread_isexec(mutex->holder)) { + switch(mutex->atrrs.nest_behavior) { + case LWP_MUTEX_NEST_ACQUIRE: + mutex->nest_cnt++; + _CPU_ISR_Restore(level); + return 0; + case LWP_MUTEX_NEST_ERROR: + exec->wait.ret_code = LWP_MUTEX_NEST_NOTALLOWED; + _CPU_ISR_Restore(level); + return 0; + case LWP_MUTEX_NEST_BLOCK: + break; + } + } + return 1; +} + +#endif diff --git a/wii/libogc/libogc/lwp_objmgr.c b/wii/libogc/libogc/lwp_objmgr.c new file mode 100644 index 0000000000..9b2149baff --- /dev/null +++ b/wii/libogc/libogc/lwp_objmgr.c @@ -0,0 +1,129 @@ +#include +#include +#include +#include +#include +#include +#include + +#include "lwp_objmgr.h" + +static u32 _lwp_objmgr_memsize = 0; +static lwp_obj *null_local_table = NULL; + +u32 __lwp_objmgr_memsize() +{ + return _lwp_objmgr_memsize; +} + +void __lwp_objmgr_initinfo(lwp_objinfo *info,u32 max_nodes,u32 node_size) +{ + u32 idx,i,size; + lwp_obj *object; + lwp_queue inactives; + void **local_table; + + info->min_id = 0; + info->max_id = 0; + info->inactives_cnt = 0; + info->node_size = node_size; + info->max_nodes = max_nodes; + info->obj_blocks = NULL; + info->local_table = &null_local_table; + + __lwp_queue_init_empty(&info->inactives); + + size = ((info->max_nodes*sizeof(lwp_obj*))+(info->max_nodes*info->node_size)); + local_table = (void**)__lwp_wkspace_allocate(info->max_nodes*sizeof(lwp_obj*)); + if(!local_table) return; + + info->local_table = (lwp_obj**)local_table; + for(i=0;imax_nodes;i++) { + local_table[i] = NULL; + } + + info->obj_blocks = __lwp_wkspace_allocate(info->max_nodes*info->node_size); + if(!info->obj_blocks) { + __lwp_wkspace_free(local_table); + return; + } + + __lwp_queue_initialize(&inactives,info->obj_blocks,info->max_nodes,info->node_size); + + idx = info->min_id; + while((object=(lwp_obj*)__lwp_queue_get(&inactives))!=NULL) { + object->id = idx; + object->information = NULL; + __lwp_queue_append(&info->inactives,&object->node); + idx++; + } + + info->max_id += info->max_nodes; + info->inactives_cnt += info->max_nodes; + _lwp_objmgr_memsize += size; +} + +lwp_obj* __lwp_objmgr_getisrdisable(lwp_objinfo *info,u32 id,u32 *p_level) +{ + u32 level; + lwp_obj *object = NULL; + + _CPU_ISR_Disable(level); + if(info->max_id>=id) { + if((object=info->local_table[id])!=NULL) { + *p_level = level; + return object; + } + } + _CPU_ISR_Restore(level); + return NULL; +} + +lwp_obj* __lwp_objmgr_getnoprotection(lwp_objinfo *info,u32 id) +{ + lwp_obj *object = NULL; + + if(info->max_id>=id) { + if((object=info->local_table[id])!=NULL) return object; + } + return NULL; +} + +lwp_obj* __lwp_objmgr_get(lwp_objinfo *info,u32 id) +{ + lwp_obj *object = NULL; + + if(info->max_id>=id) { + __lwp_thread_dispatchdisable(); + if((object=info->local_table[id])!=NULL) return object; + __lwp_thread_dispatchenable(); + } + return NULL; +} + +lwp_obj* __lwp_objmgr_allocate(lwp_objinfo *info) +{ + u32 level; + lwp_obj* object; + + _CPU_ISR_Disable(level); + object = (lwp_obj*)__lwp_queue_getI(&info->inactives); + if(object) { + object->information = info; + info->inactives_cnt--; + } + _CPU_ISR_Restore(level); + + return object; +} + +void __lwp_objmgr_free(lwp_objinfo *info,lwp_obj *object) +{ + u32 level; + + _CPU_ISR_Disable(level); + __lwp_queue_appendI(&info->inactives,&object->node); + object->information = NULL; + info->inactives_cnt++; + _CPU_ISR_Restore(level); +} diff --git a/wii/libogc/libogc/lwp_objmgr.inl b/wii/libogc/libogc/lwp_objmgr.inl new file mode 100644 index 0000000000..357d16c7a6 --- /dev/null +++ b/wii/libogc/libogc/lwp_objmgr.inl @@ -0,0 +1,19 @@ +#ifndef __LWP_OBJMGR_INL__ +#define __LWP_OBJMGR_INL__ + +static __inline__ void __lwp_objmgr_setlocal(lwp_objinfo *info,u32 idx,lwp_obj *object) +{ + if(idxmax_nodes) info->local_table[idx] = object; +} + +static __inline__ void __lwp_objmgr_open(lwp_objinfo *info,lwp_obj *object) +{ + __lwp_objmgr_setlocal(info,object->id,object); +} + +static __inline__ void __lwp_objmgr_close(lwp_objinfo *info,lwp_obj *object) +{ + __lwp_objmgr_setlocal(info,object->id,NULL); +} + +#endif diff --git a/wii/libogc/libogc/lwp_priority.c b/wii/libogc/libogc/lwp_priority.c new file mode 100644 index 0000000000..d8d0e4c700 --- /dev/null +++ b/wii/libogc/libogc/lwp_priority.c @@ -0,0 +1,14 @@ +#include + +vu32 _prio_major_bitmap; +u32 _prio_bitmap[16] __attribute__((aligned(32))); + +void __lwp_priority_init() +{ + u32 index; + + _prio_major_bitmap = 0; + for(index=0;index<16;index++) + _prio_bitmap[index] = 0; + +} diff --git a/wii/libogc/libogc/lwp_priority.inl b/wii/libogc/libogc/lwp_priority.inl new file mode 100644 index 0000000000..3b4b54bba8 --- /dev/null +++ b/wii/libogc/libogc/lwp_priority.inl @@ -0,0 +1,42 @@ +#ifndef __LWP_PRIORITY_INL__ +#define __LWP_PRIORITY_INL__ + +static __inline__ void __lwp_priomap_init(prio_cntrl *theprio,u32 prio) +{ + u32 mask; + + u32 major = prio/16; + u32 minor = prio%16; + + theprio->minor = &_prio_bitmap[major]; + + mask = 0x80000000>>major; + theprio->ready_major = mask; + theprio->block_major = ~mask; + + mask = 0x80000000>>minor; + theprio->ready_minor = mask; + theprio->block_minor = ~mask; +} + +static __inline__ void __lwp_priomap_addto(prio_cntrl *theprio) +{ + *theprio->minor |= theprio->ready_minor; + _prio_major_bitmap |= theprio->ready_major; +} + +static __inline__ void __lwp_priomap_removefrom(prio_cntrl *theprio) +{ + *theprio->minor &= theprio->block_minor; + if(*theprio->minor==0) + _prio_major_bitmap &= theprio->block_major; +} + +static __inline__ u32 __lwp_priomap_highest() +{ + u32 major = cntlzw(_prio_major_bitmap); + u32 minor = cntlzw(_prio_bitmap[major]); + return ((major<<4)+minor); +} + +#endif diff --git a/wii/libogc/libogc/lwp_queue.c b/wii/libogc/libogc/lwp_queue.c new file mode 100644 index 0000000000..cb359c9ed5 --- /dev/null +++ b/wii/libogc/libogc/lwp_queue.c @@ -0,0 +1,68 @@ +#include +#include "asm.h" +#include "processor.h" +#include "lwp_queue.h" + +void __lwp_queue_initialize(lwp_queue *queue,void *start_addr,u32 num_nodes,u32 node_size) +{ + u32 count; + lwp_node *curr; + lwp_node *next; + +#ifdef _LWPQ_DEBUG + printf("__lwp_queue_initialize(%p,%p,%d,%d)\n",queue,start_addr,num_nodes,node_size); +#endif + count = num_nodes; + curr = __lwp_queue_head(queue); + queue->perm_null = NULL; + next = (lwp_node*)start_addr; + + while(count--) { + curr->next = next; + next->prev = curr; + curr = next; + next = (lwp_node*)(((void*)next)+node_size); + } + curr->next = __lwp_queue_tail(queue); + queue->last = curr; +} + +lwp_node* __lwp_queue_get(lwp_queue *queue) +{ + u32 level; + lwp_node *ret = NULL; + + _CPU_ISR_Disable(level); + if(!__lwp_queue_isempty(queue)) { + ret = __lwp_queue_firstnodeI(queue); + } + _CPU_ISR_Restore(level); + return ret; +} + +void __lwp_queue_append(lwp_queue *queue,lwp_node *node) +{ + u32 level; + + _CPU_ISR_Disable(level); + __lwp_queue_appendI(queue,node); + _CPU_ISR_Restore(level); +} + +void __lwp_queue_extract(lwp_node *node) +{ + u32 level; + + _CPU_ISR_Disable(level); + __lwp_queue_extractI(node); + _CPU_ISR_Restore(level); +} + +void __lwp_queue_insert(lwp_node *after,lwp_node *node) +{ + u32 level; + + _CPU_ISR_Disable(level); + __lwp_queue_insertI(after,node); + _CPU_ISR_Restore(level); +} diff --git a/wii/libogc/libogc/lwp_queue.inl b/wii/libogc/libogc/lwp_queue.inl new file mode 100644 index 0000000000..809aaa3d1c --- /dev/null +++ b/wii/libogc/libogc/lwp_queue.inl @@ -0,0 +1,96 @@ +#ifndef __LWP_QUEUE_INL__ +#define __LWP_QUEUE_INL__ + +static __inline__ lwp_node* __lwp_queue_head(lwp_queue *queue) +{ + return (lwp_node*)queue; +} + +static __inline__ lwp_node* __lwp_queue_tail(lwp_queue *queue) +{ + return (lwp_node*)&queue->perm_null; +} + +static __inline__ u32 __lwp_queue_istail(lwp_queue *queue,lwp_node *node) +{ + return (node==__lwp_queue_tail(queue)); +} + +static __inline__ u32 __lwp_queue_ishead(lwp_queue *queue,lwp_node *node) +{ + return (node==__lwp_queue_head(queue)); +} + +static __inline__ lwp_node* __lwp_queue_firstnodeI(lwp_queue *queue) +{ + lwp_node *ret = queue->first; + lwp_node *new_first = ret->next; + queue->first = new_first; + new_first->prev = __lwp_queue_head(queue); + return ret; +} + +static __inline__ void __lwp_queue_init_empty(lwp_queue *queue) +{ + queue->first = __lwp_queue_tail(queue); + queue->perm_null = NULL; + queue->last = __lwp_queue_head(queue); +} + +static __inline__ u32 __lwp_queue_isempty(lwp_queue *queue) +{ + return (queue->first==__lwp_queue_tail(queue)); +} + +static __inline__ u32 __lwp_queue_onenode(lwp_queue *queue) +{ + return (queue->first==queue->last); +} + +static __inline__ void __lwp_queue_appendI(lwp_queue *queue,lwp_node *node) +{ + lwp_node *old; + node->next = __lwp_queue_tail(queue); + old = queue->last; + queue->last = node; + old->next = node; + node->prev = old; +} + +static __inline__ void __lwp_queue_extractI(lwp_node *node) +{ + lwp_node *next = node->next; + lwp_node *prev = node->prev; + next->prev = prev; + prev->next = next; +} + +static __inline__ void __lwp_queue_insertI(lwp_node *after,lwp_node *node) +{ + lwp_node *before; + + node->prev = after; + before = after->next; + after->next = node; + node->next = before; + before->prev = node; +} + +static __inline__ void __lwp_queue_prepend(lwp_queue *queue,lwp_node *node) +{ + __lwp_queue_insert(__lwp_queue_head(queue),node); +} + +static __inline__ void __lwp_queue_prependI(lwp_queue *queue,lwp_node *node) +{ + __lwp_queue_insertI(__lwp_queue_head(queue),node); +} + +static __inline__ lwp_node* __lwp_queue_getI(lwp_queue *queue) +{ + if(!__lwp_queue_isempty(queue)) + return __lwp_queue_firstnodeI(queue); + return NULL; +} + +#endif diff --git a/wii/libogc/libogc/lwp_sema.c b/wii/libogc/libogc/lwp_sema.c new file mode 100644 index 0000000000..49b1901da2 --- /dev/null +++ b/wii/libogc/libogc/lwp_sema.c @@ -0,0 +1,63 @@ +#include "asm.h" +#include "lwp_sema.h" + +void __lwp_sema_initialize(lwp_sema *sema,lwp_semattr *attrs,u32 init_count) +{ + sema->attrs = *attrs; + sema->count = init_count; + + __lwp_threadqueue_init(&sema->wait_queue,__lwp_sema_ispriority(attrs)?LWP_THREADQ_MODEPRIORITY:LWP_THREADQ_MODEFIFO,LWP_STATES_WAITING_FOR_SEMAPHORE,LWP_SEMA_TIMEOUT); +} + +u32 __lwp_sema_surrender(lwp_sema *sema,u32 id) +{ + u32 level,ret; + lwp_cntrl *thethread; + + ret = LWP_SEMA_SUCCESSFUL; + if((thethread=__lwp_threadqueue_dequeue(&sema->wait_queue))) return ret; + else { + _CPU_ISR_Disable(level); + if(sema->count<=sema->attrs.max_cnt) + ++sema->count; + else + ret = LWP_SEMA_MAXCNT_EXCEEDED; + _CPU_ISR_Restore(level); + } + return ret; +} + +u32 __lwp_sema_seize(lwp_sema *sema,u32 id,u32 wait,u64 timeout) +{ + u32 level; + lwp_cntrl *exec; + + exec = _thr_executing; + exec->wait.ret_code = LWP_SEMA_SUCCESSFUL; + + _CPU_ISR_Disable(level); + if(sema->count!=0) { + --sema->count; + _CPU_ISR_Restore(level); + return LWP_SEMA_SUCCESSFUL; + } + + if(!wait) { + _CPU_ISR_Restore(level); + exec->wait.ret_code = LWP_SEMA_UNSATISFIED_NOWAIT; + return LWP_SEMA_UNSATISFIED_NOWAIT; + } + + __lwp_threadqueue_csenter(&sema->wait_queue); + exec->wait.queue = &sema->wait_queue; + exec->wait.id = id; + _CPU_ISR_Restore(level); + + __lwp_threadqueue_enqueue(&sema->wait_queue,timeout); + return LWP_SEMA_SUCCESSFUL; +} + +void __lwp_sema_flush(lwp_sema *sema,u32 status) +{ + __lwp_threadqueue_flush(&sema->wait_queue,status); +} diff --git a/wii/libogc/libogc/lwp_sema.inl b/wii/libogc/libogc/lwp_sema.inl new file mode 100644 index 0000000000..0f57c6dcda --- /dev/null +++ b/wii/libogc/libogc/lwp_sema.inl @@ -0,0 +1,38 @@ +#ifndef __LWP_SEMA_INL__ +#define __LWP_SEMA_INL__ + +static __inline__ u32 __lwp_sema_ispriority(lwp_semattr *attr) +{ + return (attr->mode==LWP_SEMA_MODEPRIORITY); +} + +static __inline__ void __lwp_sema_seize_isrdisable(lwp_sema *sema,u32 id,u32 wait,u32 *isrlevel) +{ + lwp_cntrl *exec; + u32 level = *isrlevel; + + exec = _thr_executing; + exec->wait.ret_code = LWP_SEMA_SUCCESSFUL; + if(sema->count!=0) { + --sema->count; + _CPU_ISR_Restore(level); + return; + } + + if(!wait) { + _CPU_ISR_Restore(level); + exec->wait.ret_code = LWP_SEMA_UNSATISFIED_NOWAIT; + return; + } + + __lwp_thread_dispatchdisable(); + __lwp_threadqueue_csenter(&sema->wait_queue); + exec->wait.queue = &sema->wait_queue; + exec->wait.id = id; + _CPU_ISR_Restore(level); + + __lwp_threadqueue_enqueue(&sema->wait_queue,0); + __lwp_thread_dispatchenable(); +} + +#endif diff --git a/wii/libogc/libogc/lwp_stack.c b/wii/libogc/libogc/lwp_stack.c new file mode 100644 index 0000000000..05eadebfc4 --- /dev/null +++ b/wii/libogc/libogc/lwp_stack.c @@ -0,0 +1,27 @@ +#include +#include "lwp_stack.h" +#include "lwp_wkspace.h" + +u32 __lwp_stack_allocate(lwp_cntrl *thethread,u32 size) +{ + void *stack_addr = NULL; + + if(!__lwp_stack_isenough(size)) + size = CPU_MINIMUM_STACK_SIZE; + + size = __lwp_stack_adjust(size); + stack_addr = __lwp_wkspace_allocate(size); + + if(!stack_addr) size = 0; + + thethread->stack = stack_addr; + return size; +} + +void __lwp_stack_free(lwp_cntrl *thethread) +{ + if(!thethread->stack_allocated) + return; + + __lwp_wkspace_free(thethread->stack); +} diff --git a/wii/libogc/libogc/lwp_stack.inl b/wii/libogc/libogc/lwp_stack.inl new file mode 100644 index 0000000000..65a2cd5df7 --- /dev/null +++ b/wii/libogc/libogc/lwp_stack.inl @@ -0,0 +1,14 @@ +#ifndef __LWP_STACK_INL__ +#define __LWP_STACK_INL__ + +static __inline__ u32 __lwp_stack_isenough(u32 size) +{ + return (size>=CPU_MINIMUM_STACK_SIZE); +} + +static __inline__ u32 __lwp_stack_adjust(u32 size) +{ + return (size+CPU_STACK_ALIGNMENT); +} + +#endif diff --git a/wii/libogc/libogc/lwp_states.inl b/wii/libogc/libogc/lwp_states.inl new file mode 100644 index 0000000000..79ee4ecf70 --- /dev/null +++ b/wii/libogc/libogc/lwp_states.inl @@ -0,0 +1,109 @@ +#ifndef __LWP_STATES_INL__ +#define __LWP_STATES_INL__ + +static __inline__ u32 __lwp_setstate(u32 curr_state,u32 stateset) +{ + return (curr_state|stateset); +} + +static __inline__ u32 __lwp_clearstate(u32 curr_state,u32 stateclear) +{ + return (curr_state&~stateclear); +} + +static __inline__ u32 __lwp_stateready(u32 curr_state) +{ + return (curr_state==LWP_STATES_READY); +} + +static __inline__ u32 __lwp_stateonlydormant(u32 curr_state) +{ + return (curr_state==LWP_STATES_DORMANT); +} + +static __inline__ u32 __lwp_statedormant(u32 curr_state) +{ + return (curr_state&LWP_STATES_DORMANT); +} + +static __inline__ u32 __lwp_statesuspended(u32 curr_state) +{ + return (curr_state&LWP_STATES_SUSPENDED); +} + +static __inline__ u32 __lwp_statetransient(u32 curr_state) +{ + return (curr_state&LWP_STATES_TRANSIENT); +} + +static __inline__ u32 __lwp_statedelaying(u32 curr_state) +{ + return (curr_state&LWP_STATES_DELAYING); +} + +static __inline__ u32 __lwp_statewaitbuffer(u32 curr_state) +{ + return (curr_state&LWP_STATES_WAITING_FOR_BUFFER); +} + +static __inline__ u32 __lwp_statewaitsegment(u32 curr_state) +{ + return (curr_state&LWP_STATES_WAITING_FOR_SEGMENT); +} + +static __inline__ u32 __lwp_statewaitmessage(u32 curr_state) +{ + return (curr_state&LWP_STATES_WAITING_FOR_MESSAGE); +} + +static __inline__ u32 __lwp_statewaitevent(u32 curr_state) +{ + return (curr_state&LWP_STATES_WAITING_FOR_EVENT); +} + +static __inline__ u32 __lwp_statewaitmutex(u32 curr_state) +{ + return (curr_state&LWP_STATES_WAITING_FOR_MUTEX); +} + +static __inline__ u32 __lwp_statewaitsemaphore(u32 curr_state) +{ + return (curr_state&LWP_STATES_WAITING_FOR_SEMAPHORE); +} + +static __inline__ u32 __lwp_statewaittime(u32 curr_state) +{ + return (curr_state&LWP_STATES_WAITING_FOR_TIME); +} + +static __inline__ u32 __lwp_statewaitrpcreply(u32 curr_state) +{ + return (curr_state&LWP_STATES_WAITING_FOR_RPCREPLAY); +} + +static __inline__ u32 __lwp_statewaitperiod(u32 curr_state) +{ + return (curr_state&LWP_STATES_WAITING_FOR_PERIOD); +} + +static __inline__ u32 __lwp_statewaitlocallyblocked(u32 curr_state) +{ + return (curr_state&LWP_STATES_LOCALLY_BLOCKED); +} + +static __inline__ u32 __lwp_statewaitthreadqueue(u32 curr_state) +{ + return (curr_state&LWP_STATES_WAITING_ON_THREADQ); +} + +static __inline__ u32 __lwp_stateblocked(u32 curr_state) +{ + return (curr_state&LWP_STATES_BLOCKED); +} + +static __inline__ u32 __lwp_statesset(u32 curr_state,u32 mask) +{ + return ((curr_state&mask)!=LWP_STATES_READY); +} + +#endif diff --git a/wii/libogc/libogc/lwp_threadq.c b/wii/libogc/libogc/lwp_threadq.c new file mode 100644 index 0000000000..285202be20 --- /dev/null +++ b/wii/libogc/libogc/lwp_threadq.c @@ -0,0 +1,497 @@ +#include +#include +#include "asm.h" +#include "lwp_threadq.h" + +//#define _LWPTHRQ_DEBUG + +static void __lwp_threadqueue_timeout(void *usr_data) +{ + lwp_cntrl *thethread; + lwp_thrqueue *thequeue; + + __lwp_thread_dispatchdisable(); + thethread = (lwp_cntrl*)usr_data; + thequeue = thethread->wait.queue; + if(thequeue->sync_state!=LWP_THREADQ_SYNCHRONIZED && __lwp_thread_isexec(thethread)) { + if(thequeue->sync_state!=LWP_THREADQ_SATISFIED) thequeue->sync_state = LWP_THREADQ_TIMEOUT; + } else { + thethread->wait.ret_code = thethread->wait.queue->timeout_state; + __lwp_threadqueue_extract(thethread->wait.queue,thethread); + } + __lwp_thread_dispatchunnest(); +} + +lwp_cntrl* __lwp_threadqueue_firstfifo(lwp_thrqueue *queue) +{ + if(!__lwp_queue_isempty(&queue->queues.fifo)) + return (lwp_cntrl*)queue->queues.fifo.first; + + return NULL; +} + +lwp_cntrl* __lwp_threadqueue_firstpriority(lwp_thrqueue *queue) +{ + u32 index; + + for(index=0;indexqueues.priority[index])) + return (lwp_cntrl*)queue->queues.priority[index].first; + } + return NULL; +} + +void __lwp_threadqueue_enqueuefifo(lwp_thrqueue *queue,lwp_cntrl *thethread,u64 timeout) +{ + u32 level,sync_state; + + _CPU_ISR_Disable(level); + + sync_state = queue->sync_state; + queue->sync_state = LWP_THREADQ_SYNCHRONIZED; +#ifdef _LWPTHRQ_DEBUG + printf("__lwp_threadqueue_enqueuefifo(%p,%d)\n",thethread,sync_state); +#endif + switch(sync_state) { + case LWP_THREADQ_SYNCHRONIZED: + break; + case LWP_THREADQ_NOTHINGHAPPEND: + __lwp_queue_appendI(&queue->queues.fifo,&thethread->object.node); + _CPU_ISR_Restore(level); + return; + case LWP_THREADQ_TIMEOUT: + thethread->wait.ret_code = thethread->wait.queue->timeout_state; + _CPU_ISR_Restore(level); + break; + case LWP_THREADQ_SATISFIED: + if(__lwp_wd_isactive(&thethread->timer)) { + __lwp_wd_deactivate(&thethread->timer); + _CPU_ISR_Restore(level); + __lwp_wd_remove_ticks(&thethread->timer); + } else + _CPU_ISR_Restore(level); + + break; + } + __lwp_thread_unblock(thethread); +} + +lwp_cntrl* __lwp_threadqueue_dequeuefifo(lwp_thrqueue *queue) +{ + u32 level; + lwp_cntrl *ret; + + _CPU_ISR_Disable(level); + if(!__lwp_queue_isempty(&queue->queues.fifo)) { + ret = (lwp_cntrl*)__lwp_queue_firstnodeI(&queue->queues.fifo); + if(!__lwp_wd_isactive(&ret->timer)) { + _CPU_ISR_Restore(level); + __lwp_thread_unblock(ret); + } else { + __lwp_wd_deactivate(&ret->timer); + _CPU_ISR_Restore(level); + __lwp_wd_remove_ticks(&ret->timer); + __lwp_thread_unblock(ret); + } + return ret; + } + + switch(queue->sync_state) { + case LWP_THREADQ_SYNCHRONIZED: + case LWP_THREADQ_SATISFIED: + _CPU_ISR_Restore(level); + return NULL; + case LWP_THREADQ_NOTHINGHAPPEND: + case LWP_THREADQ_TIMEOUT: + queue->sync_state = LWP_THREADQ_SATISFIED; + _CPU_ISR_Restore(level); + return _thr_executing; + } + return NULL; +} + +void __lwp_threadqueue_enqueuepriority(lwp_thrqueue *queue,lwp_cntrl *thethread,u64 timeout) +{ + u32 level,search_prio,header_idx,prio,block_state,sync_state; + lwp_cntrl *search_thread; + lwp_queue *header; + lwp_node *cur_node,*next_node,*prev_node,*search_node; + + __lwp_queue_init_empty(&thethread->wait.block2n); + + prio = thethread->cur_prio; + header_idx = prio/LWP_THREADQ_PRIOPERHEADER; + header = &queue->queues.priority[header_idx]; + block_state = queue->state; + + if(prio&LWP_THREADQ_REVERSESEARCHMASK) { +#ifdef _LWPTHRQ_DEBUG + printf("__lwp_threadqueue_enqueuepriority(%p,reverse_search)\n",thethread); +#endif + goto reverse_search; + } + +#ifdef _LWPTHRQ_DEBUG + printf("__lwp_threadqueue_enqueuepriority(%p,forward_search)\n",thethread); +#endif +forward_search: + search_prio = LWP_PRIO_MIN - 1; + _CPU_ISR_Disable(level); + search_thread = (lwp_cntrl*)header->first; + while(!__lwp_queue_istail(header,(lwp_node*)search_thread)) { + search_prio = search_thread->cur_prio; + if(prio<=search_prio) break; + _CPU_ISR_Flash(level); + + if(!__lwp_statesset(search_thread->cur_state,block_state)) { + _CPU_ISR_Restore(level); + goto forward_search; + } + search_thread = (lwp_cntrl*)search_thread->object.node.next; + } + if(queue->sync_state!=LWP_THREADQ_NOTHINGHAPPEND) goto synchronize; + queue->sync_state = LWP_THREADQ_SYNCHRONIZED; + if(prio==search_prio) goto equal_prio; + + search_node = (lwp_node*)search_thread; + prev_node = search_node->prev; + cur_node = (lwp_node*)thethread; + + cur_node->next = search_node; + cur_node->prev = prev_node; + prev_node->next = cur_node; + search_node->prev = cur_node; + _CPU_ISR_Restore(level); + return; + +reverse_search: + search_prio = LWP_PRIO_MAX + 1; + _CPU_ISR_Disable(level); + search_thread = (lwp_cntrl*)header->last; + while(!__lwp_queue_ishead(header,(lwp_node*)search_thread)) { + search_prio = search_thread->cur_prio; + if(prio>=search_prio) break; + _CPU_ISR_Flash(level); + + if(!__lwp_statesset(search_thread->cur_state,block_state)) { + _CPU_ISR_Restore(level); + goto reverse_search; + } + search_thread = (lwp_cntrl*)search_thread->object.node.prev; + } + if(queue->sync_state!=LWP_THREADQ_NOTHINGHAPPEND) goto synchronize; + queue->sync_state = LWP_THREADQ_SYNCHRONIZED; + if(prio==search_prio) goto equal_prio; + + search_node = (lwp_node*)search_thread; + next_node = search_node->next; + cur_node = (lwp_node*)thethread; + + cur_node->next = next_node; + cur_node->prev = search_node; + search_node->next = cur_node; + next_node->prev = cur_node; + _CPU_ISR_Restore(level); + return; + +equal_prio: +#ifdef _LWPTHRQ_DEBUG + printf("__lwp_threadqueue_enqueuepriority(%p,equal_prio)\n",thethread); +#endif + search_node = __lwp_queue_tail(&search_thread->wait.block2n); + prev_node = search_node->prev; + cur_node = (lwp_node*)thethread; + + cur_node->next = search_node; + cur_node->prev = prev_node; + prev_node->next = cur_node; + search_node->prev = cur_node; + _CPU_ISR_Restore(level); + return; + +synchronize: + sync_state = queue->sync_state; + queue->sync_state = LWP_THREADQ_SYNCHRONIZED; + +#ifdef _LWPTHRQ_DEBUG + printf("__lwp_threadqueue_enqueuepriority(%p,sync_state = %d)\n",thethread,sync_state); +#endif + switch(sync_state) { + case LWP_THREADQ_SYNCHRONIZED: + break; + case LWP_THREADQ_NOTHINGHAPPEND: + break; + case LWP_THREADQ_TIMEOUT: + thethread->wait.ret_code = thethread->wait.queue->timeout_state; + _CPU_ISR_Restore(level); + break; + case LWP_THREADQ_SATISFIED: + if(__lwp_wd_isactive(&thethread->timer)) { + __lwp_wd_deactivate(&thethread->timer); + _CPU_ISR_Restore(level); + __lwp_wd_remove_ticks(&thethread->timer); + } else + _CPU_ISR_Restore(level); + break; + } + __lwp_thread_unblock(thethread); +} + +lwp_cntrl* __lwp_threadqueue_dequeuepriority(lwp_thrqueue *queue) +{ + u32 level,idx; + lwp_cntrl *newfirstthr,*ret = NULL; + lwp_node *newfirstnode,*newsecnode,*last_node,*next_node,*prev_node; + + _CPU_ISR_Disable(level); + for(idx=0;idxqueues.priority[idx])) { + ret = (lwp_cntrl*)queue->queues.priority[idx].first; + goto dequeue; + } + } + +#ifdef _LWPTHRQ_DEBUG + printf("__lwp_threadqueue_dequeuepriority(%p,sync_state = %d)\n",ret,queue->sync_state); +#endif + switch(queue->sync_state) { + case LWP_THREADQ_SYNCHRONIZED: + case LWP_THREADQ_SATISFIED: + _CPU_ISR_Restore(level); + return NULL; + case LWP_THREADQ_NOTHINGHAPPEND: + case LWP_THREADQ_TIMEOUT: + queue->sync_state = LWP_THREADQ_SATISFIED; + _CPU_ISR_Restore(level); + return _thr_executing; + } + +dequeue: +#ifdef _LWPTHRQ_DEBUG + printf("__lwp_threadqueue_dequeuepriority(%p,dequeue)\n",ret); +#endif + newfirstnode = ret->wait.block2n.first; + newfirstthr = (lwp_cntrl*)newfirstnode; + next_node = ret->object.node.next; + prev_node = ret->object.node.prev; + if(!__lwp_queue_isempty(&ret->wait.block2n)) { + last_node = ret->wait.block2n.last; + newsecnode = newfirstnode->next; + prev_node->next = newfirstnode; + next_node->prev = newfirstnode; + newfirstnode->next = next_node; + newfirstnode->prev = prev_node; + + if(!__lwp_queue_onenode(&ret->wait.block2n)) { + newsecnode->prev = __lwp_queue_head(&newfirstthr->wait.block2n); + newfirstthr->wait.block2n.first = newsecnode; + newfirstthr->wait.block2n.last = last_node; + last_node->next = __lwp_queue_tail(&newfirstthr->wait.block2n); + } + } else { + prev_node->next = next_node; + next_node->prev = prev_node; + } + + if(!__lwp_wd_isactive(&ret->timer)) { + _CPU_ISR_Restore(level); + __lwp_thread_unblock(ret); + } else { + __lwp_wd_deactivate(&ret->timer); + _CPU_ISR_Restore(level); + __lwp_wd_remove_ticks(&ret->timer); + __lwp_thread_unblock(ret); + } + return ret; +} + +void __lwp_threadqueue_init(lwp_thrqueue *queue,u32 mode,u32 state,u32 timeout_state) +{ + u32 index; + + queue->state = state; + queue->mode = mode; + queue->timeout_state = timeout_state; + queue->sync_state = LWP_THREADQ_SYNCHRONIZED; +#ifdef _LWPTHRQ_DEBUG + printf("__lwp_threadqueue_init(%p,%08x,%d,%d)\n",queue,state,timeout_state,mode); +#endif + switch(mode) { + case LWP_THREADQ_MODEFIFO: + __lwp_queue_init_empty(&queue->queues.fifo); + break; + case LWP_THREADQ_MODEPRIORITY: + for(index=0;indexqueues.priority[index]); + break; + } +} + +lwp_cntrl* __lwp_threadqueue_first(lwp_thrqueue *queue) +{ + lwp_cntrl *ret; + + switch(queue->mode) { + case LWP_THREADQ_MODEFIFO: + ret = __lwp_threadqueue_firstfifo(queue); + break; + case LWP_THREADQ_MODEPRIORITY: + ret = __lwp_threadqueue_firstpriority(queue); + break; + default: + ret = NULL; + break; + } + + return ret; +} + +void __lwp_threadqueue_enqueue(lwp_thrqueue *queue,u64 timeout) +{ + lwp_cntrl *thethread; + + thethread = _thr_executing; + __lwp_thread_setstate(thethread,queue->state); + + if(timeout) { + __lwp_wd_initialize(&thethread->timer,__lwp_threadqueue_timeout,thethread->object.id,thethread); + __lwp_wd_insert_ticks(&thethread->timer,timeout); + } + +#ifdef _LWPTHRQ_DEBUG + printf("__lwp_threadqueue_enqueue(%p,%p,%d)\n",queue,thethread,queue->mode); +#endif + switch(queue->mode) { + case LWP_THREADQ_MODEFIFO: + __lwp_threadqueue_enqueuefifo(queue,thethread,timeout); + break; + case LWP_THREADQ_MODEPRIORITY: + __lwp_threadqueue_enqueuepriority(queue,thethread,timeout); + break; + } +} + +lwp_cntrl* __lwp_threadqueue_dequeue(lwp_thrqueue *queue) +{ + lwp_cntrl *ret = NULL; + +#ifdef _LWPTHRQ_DEBUG + printf("__lwp_threadqueue_dequeue(%p,%p,%d,%d)\n",queue,_thr_executing,queue->mode,queue->sync_state); +#endif + switch(queue->mode) { + case LWP_THREADQ_MODEFIFO: + ret = __lwp_threadqueue_dequeuefifo(queue); + break; + case LWP_THREADQ_MODEPRIORITY: + ret = __lwp_threadqueue_dequeuepriority(queue); + break; + default: + ret = NULL; + break; + } +#ifdef _LWPTHRQ_DEBUG + printf("__lwp_threadqueue_dequeue(%p,%p,%d,%d)\n",queue,ret,queue->mode,queue->sync_state); +#endif + return ret; +} + +void __lwp_threadqueue_flush(lwp_thrqueue *queue,u32 status) +{ + lwp_cntrl *thethread; + while((thethread=__lwp_threadqueue_dequeue(queue))) { + thethread->wait.ret_code = status; + } +} + +void __lwp_threadqueue_extract(lwp_thrqueue *queue,lwp_cntrl *thethread) +{ + switch(queue->mode) { + case LWP_THREADQ_MODEFIFO: + __lwp_threadqueue_extractfifo(queue,thethread); + break; + case LWP_THREADQ_MODEPRIORITY: + __lwp_threadqueue_extractpriority(queue,thethread); + break; + } + +} + +void __lwp_threadqueue_extractfifo(lwp_thrqueue *queue,lwp_cntrl *thethread) +{ + u32 level; + + _CPU_ISR_Disable(level); + if(!__lwp_statewaitthreadqueue(thethread->cur_state)) { + _CPU_ISR_Restore(level); + return; + } + + __lwp_queue_extractI(&thethread->object.node); + if(!__lwp_wd_isactive(&thethread->timer)) { + _CPU_ISR_Restore(level); + } else { + __lwp_wd_deactivate(&thethread->timer); + _CPU_ISR_Restore(level); + __lwp_wd_remove_ticks(&thethread->timer); + } + __lwp_thread_unblock(thethread); +} + +void __lwp_threadqueue_extractpriority(lwp_thrqueue *queue,lwp_cntrl *thethread) +{ + u32 level; + lwp_cntrl *first; + lwp_node *curr,*next,*prev,*new_first,*new_sec,*last; + + curr = (lwp_node*)thethread; + + _CPU_ISR_Disable(level); + if(__lwp_statewaitthreadqueue(thethread->cur_state)) { + next = curr->next; + prev = curr->prev; + + if(!__lwp_queue_isempty(&thethread->wait.block2n)) { + new_first = thethread->wait.block2n.first; + first = (lwp_cntrl*)new_first; + last = thethread->wait.block2n.last; + new_sec = new_first->next; + + prev->next = new_first; + next->prev = new_first; + new_first->next = next; + new_first->prev = prev; + + if(!__lwp_queue_onenode(&thethread->wait.block2n)) { + new_sec->prev = __lwp_queue_head(&first->wait.block2n); + first->wait.block2n.first = new_sec; + first->wait.block2n.last = last; + last->next = __lwp_queue_tail(&first->wait.block2n); + } + } else { + prev->next = next; + next->prev = prev; + } + if(!__lwp_wd_isactive(&thethread->timer)) { + _CPU_ISR_Restore(level); + __lwp_thread_unblock(thethread); + } else { + __lwp_wd_deactivate(&thethread->timer); + _CPU_ISR_Restore(level); + __lwp_wd_remove_ticks(&thethread->timer); + __lwp_thread_unblock(thethread); + } + } else + _CPU_ISR_Restore(level); +} + +u32 __lwp_threadqueue_extractproxy(lwp_cntrl *thethread) +{ + u32 state; + + state = thethread->cur_state; + if(__lwp_statewaitthreadqueue(state)) { + __lwp_threadqueue_extract(thethread->wait.queue,thethread); + return TRUE; + } + return FALSE; +} diff --git a/wii/libogc/libogc/lwp_threadq.inl b/wii/libogc/libogc/lwp_threadq.inl new file mode 100644 index 0000000000..cce5c04ad4 --- /dev/null +++ b/wii/libogc/libogc/lwp_threadq.inl @@ -0,0 +1,9 @@ +#ifndef __LWP_THREADQ_INL__ +#define __LWP_THREADQ_INL__ + +static __inline__ void __lwp_threadqueue_csenter(lwp_thrqueue *queue) +{ + queue->sync_state = LWP_THREADQ_NOTHINGHAPPEND; +} + +#endif diff --git a/wii/libogc/libogc/lwp_threads.c b/wii/libogc/libogc/lwp_threads.c new file mode 100644 index 0000000000..f6fe307d1b --- /dev/null +++ b/wii/libogc/libogc/lwp_threads.c @@ -0,0 +1,750 @@ +#include +#include +#include +#include "asm.h" +#include "processor.h" +#include "sys_state.h" +#include "lwp_stack.h" +#include "lwp_threads.h" +#include "lwp_threadq.h" +#include "lwp_watchdog.h" + +#define LWP_MAXPRIORITIES 256 + +/* new one */ +frame_context core_context; + +lwp_cntrl *_thr_main = NULL; +lwp_cntrl *_thr_idle = NULL; + +lwp_cntrl *_thr_executing = NULL; +lwp_cntrl *_thr_heir = NULL; +lwp_cntrl *_thr_allocated_fp = NULL; + +vu32 _context_switch_want; +vu32 _thread_dispatch_disable_level; + +wd_cntrl _lwp_wd_timeslice; +u32 _lwp_ticks_per_timeslice = 0; +void **__lwp_thr_libc_reent = NULL; +lwp_queue _lwp_thr_ready[LWP_MAXPRIORITIES]; + +static void (*_lwp_exitfunc)(void); + +extern void _cpu_context_switch(void *,void *); +extern void _cpu_context_switch_ex(void *,void *); +extern void _cpu_context_save(void *); +extern void _cpu_context_restore(void *); +extern void _cpu_context_save_fp(void *); +extern void _cpu_context_restore_fp(void *); + +extern int __libc_create_hook(lwp_cntrl *,lwp_cntrl *); +extern int __libc_start_hook(lwp_cntrl *,lwp_cntrl *); +extern int __libc_delete_hook(lwp_cntrl *, lwp_cntrl *); + +extern void kprintf(const char *str, ...); + +#ifdef _LWPTHREADS_DEBUG +static void __lwp_dumpcontext(frame_context *ctx) +{ + kprintf("GPR00 %08x GPR08 %08x GPR16 %08x GPR24 %08x\n",ctx->GPR[0], ctx->GPR[8], ctx->GPR[16], ctx->GPR[24]); + kprintf("GPR01 %08x GPR09 %08x GPR17 %08x GPR25 %08x\n",ctx->GPR[1], ctx->GPR[9], ctx->GPR[17], ctx->GPR[25]); + kprintf("GPR02 %08x GPR10 %08x GPR18 %08x GPR26 %08x\n",ctx->GPR[2], ctx->GPR[10], ctx->GPR[18], ctx->GPR[26]); + kprintf("GPR03 %08x GPR11 %08x GPR19 %08x GPR27 %08x\n",ctx->GPR[3], ctx->GPR[11], ctx->GPR[19], ctx->GPR[27]); + kprintf("GPR04 %08x GPR12 %08x GPR20 %08x GPR28 %08x\n",ctx->GPR[4], ctx->GPR[12], ctx->GPR[20], ctx->GPR[28]); + kprintf("GPR05 %08x GPR13 %08x GPR21 %08x GPR29 %08x\n",ctx->GPR[5], ctx->GPR[13], ctx->GPR[21], ctx->GPR[29]); + kprintf("GPR06 %08x GPR14 %08x GPR22 %08x GPR30 %08x\n",ctx->GPR[6], ctx->GPR[14], ctx->GPR[22], ctx->GPR[30]); + kprintf("GPR07 %08x GPR15 %08x GPR23 %08x GPR31 %08x\n",ctx->GPR[7], ctx->GPR[15], ctx->GPR[23], ctx->GPR[31]); + kprintf("LR %08x SRR0 %08x SRR1 %08x MSR %08x\n\n", ctx->LR, ctx->SRR0, ctx->SRR1,ctx->MSR); +} + +void __lwp_showmsr() +{ + register u32 msr; + _CPU_MSR_GET(msr); + kprintf("msr: %08x\n",msr); +} + +void __lwp_dumpcontext_fp(lwp_cntrl *thrA,lwp_cntrl *thrB) +{ + kprintf("_cpu_contextfp_dump(%p,%p)\n",thrA,thrB); +} +#endif + +/* +void __lwp_getthreadlist(lwp_obj **thrs) +{ + *thrs = _lwp_objects; +} +*/ +u32 __lwp_isr_in_progress() +{ + register u32 isr_nest_level; + isr_nest_level = mfspr(272); + return isr_nest_level; +} + +static inline void __lwp_msr_setlevel(u32 level) +{ + register u32 msr; + _CPU_MSR_GET(msr); + if(!(level&CPU_MODES_INTERRUPT_MASK)) + msr |= MSR_EE; + else + msr &= ~MSR_EE; + _CPU_MSR_SET(msr); +} + +static inline u32 __lwp_msr_getlevel() +{ + register u32 msr; + _CPU_MSR_GET(msr); + if(msr&MSR_EE) return 0; + else return 1; +} + +void __lwp_thread_delayended(void *arg) +{ + lwp_cntrl *thethread = (lwp_cntrl*)arg; +#ifdef _LWPTHREADS_DEBUG + kprintf("__lwp_thread_delayended(%p)\n",thethread); +#endif + if(!thethread) return; + + __lwp_thread_dispatchdisable(); + __lwp_thread_unblock(thethread); + __lwp_thread_dispatchunnest(); +} + +void __lwp_thread_tickle_timeslice(void *arg) +{ + s64 ticks; + lwp_cntrl *exec; + + exec = _thr_executing; + ticks = millisecs_to_ticks(1); + + __lwp_thread_dispatchdisable(); + + if(!exec->is_preemptible) { + __lwp_wd_insert_ticks(&_lwp_wd_timeslice,ticks); + __lwp_thread_dispatchunnest(); + return; + } + if(!__lwp_stateready(exec->cur_state)) { + __lwp_wd_insert_ticks(&_lwp_wd_timeslice,ticks); + __lwp_thread_dispatchunnest(); + return; + } + + switch(exec->budget_algo) { + case LWP_CPU_BUDGET_ALGO_NONE: + break; + case LWP_CPU_BUDGET_ALGO_TIMESLICE: + if((--exec->cpu_time_budget)==0) { + __lwp_thread_resettimeslice(); + exec->cpu_time_budget = _lwp_ticks_per_timeslice; + } + break; + } + + __lwp_wd_insert_ticks(&_lwp_wd_timeslice,ticks); + __lwp_thread_dispatchunnest(); +} + +void __thread_dispatch_fp() +{ + u32 level; + lwp_cntrl *exec; + + _CPU_ISR_Disable(level); + exec = _thr_executing; +#ifdef _LWPTHREADS_DEBUG + __lwp_dumpcontext_fp(exec,_thr_allocated_fp); +#endif + if(!__lwp_thread_isallocatedfp(exec)) { + if(_thr_allocated_fp) _cpu_context_save_fp(&_thr_allocated_fp->context); + _cpu_context_restore_fp(&exec->context); + _thr_allocated_fp = exec; + } + _CPU_ISR_Restore(level); +} + +void __thread_dispatch() +{ + u32 level; + lwp_cntrl *exec,*heir; + + _CPU_ISR_Disable(level); + exec = _thr_executing; + while(_context_switch_want==TRUE) { + heir = _thr_heir; + _thread_dispatch_disable_level = 1; + _context_switch_want = FALSE; + _thr_executing = heir; + _CPU_ISR_Restore(level); + + if(__lwp_thr_libc_reent) { + exec->libc_reent = *__lwp_thr_libc_reent; + *__lwp_thr_libc_reent = heir->libc_reent; + } +#ifdef _DEBUG + _cpu_context_switch_ex((void*)&exec->context,(void*)&heir->context); +#else + _cpu_context_switch((void*)&exec->context,(void*)&heir->context); +#endif + exec = _thr_executing; + _CPU_ISR_Disable(level); + } + _thread_dispatch_disable_level = 0; + _CPU_ISR_Restore(level); +} + +static void __lwp_thread_handler() +{ + u32 level; + lwp_cntrl *exec; + + exec = _thr_executing; +#ifdef _LWPTHREADS_DEBUG + kprintf("__lwp_thread_handler(%p,%d)\n",exec,_thread_dispatch_disable_level); +#endif + level = exec->isr_level; + __lwp_msr_setlevel(level); + __lwp_thread_dispatchenable(); + exec->wait.ret_arg = exec->entry(exec->arg); + + __lwp_thread_exit(exec->wait.ret_arg); +#ifdef _LWPTHREADS_DEBUG + kprintf("__lwp_thread_handler(%p): thread returned(%p)\n",exec,exec->wait.ret_arg); +#endif +} + +void __lwp_rotate_readyqueue(u32 prio) +{ + u32 level; + lwp_cntrl *exec; + lwp_queue *ready; + lwp_node *node; + + ready = &_lwp_thr_ready[prio]; + exec = _thr_executing; + + if(ready==exec->ready) { + __lwp_thread_yield(); + return; + } + + _CPU_ISR_Disable(level); + if(!__lwp_queue_isempty(ready) && !__lwp_queue_onenode(ready)) { + node = __lwp_queue_firstnodeI(ready); + __lwp_queue_appendI(ready,node); + } + _CPU_ISR_Flash(level); + + if(_thr_heir->ready==ready) + _thr_heir = (lwp_cntrl*)ready->first; + + if(exec!=_thr_heir) + _context_switch_want = TRUE; + +#ifdef _LWPTHREADS_DEBUG + kprintf("__lwp_rotate_readyqueue(%d,%p,%p)\n",prio,exec,_thr_heir); +#endif + _CPU_ISR_Restore(level); +} + +void __lwp_thread_yield() +{ + u32 level; + lwp_cntrl *exec; + lwp_queue *ready; + + exec = _thr_executing; + ready = exec->ready; + + _CPU_ISR_Disable(level); + if(!__lwp_queue_onenode(ready)) { + __lwp_queue_extractI(&exec->object.node); + __lwp_queue_appendI(ready,&exec->object.node); + _CPU_ISR_Flash(level); + if(__lwp_thread_isheir(exec)) + _thr_heir = (lwp_cntrl*)ready->first; + _context_switch_want = TRUE; + } else if(!__lwp_thread_isheir(exec)) + _context_switch_want = TRUE; + _CPU_ISR_Restore(level); +} + +void __lwp_thread_resettimeslice() +{ + u32 level; + lwp_cntrl *exec; + lwp_queue *ready; + + exec = _thr_executing; + ready = exec->ready; + + _CPU_ISR_Disable(level); + if(__lwp_queue_onenode(ready)) { + _CPU_ISR_Restore(level); + return; + } + + __lwp_queue_extractI(&exec->object.node); + __lwp_queue_appendI(ready,&exec->object.node); + + _CPU_ISR_Flash(level); + + if(__lwp_thread_isheir(exec)) + _thr_heir = (lwp_cntrl*)ready->first; + + _context_switch_want = TRUE; + _CPU_ISR_Restore(level); +} + +void __lwp_thread_setstate(lwp_cntrl *thethread,u32 state) +{ + u32 level; + lwp_queue *ready; + + ready = thethread->ready; +#ifdef _LWPTHREADS_DEBUG + kprintf("__lwp_thread_setstate(%d,%p,%p,%08x)\n",_context_switch_want,_thr_heir,thethread,thethread->cur_state); +#endif + _CPU_ISR_Disable(level); + if(!__lwp_stateready(thethread->cur_state)) { + thethread->cur_state = __lwp_clearstate(thethread->cur_state,state); + _CPU_ISR_Restore(level); + return; + } + + thethread->cur_state = state; + if(__lwp_queue_onenode(ready)) { + __lwp_queue_init_empty(ready); + __lwp_priomap_removefrom(&thethread->priomap); + } else + __lwp_queue_extractI(&thethread->object.node); + _CPU_ISR_Flash(level); + + if(__lwp_thread_isheir(thethread)) + __lwp_thread_calcheir(); + if(__lwp_thread_isexec(thethread)) + _context_switch_want = TRUE; +#ifdef _LWPTHREADS_DEBUG + kprintf("__lwp_thread_setstate(%d,%p,%p,%08x)\n",_context_switch_want,_thr_heir,thethread,thethread->cur_state); +#endif + _CPU_ISR_Restore(level); +} + +void __lwp_thread_clearstate(lwp_cntrl *thethread,u32 state) +{ + u32 level,cur_state; + + _CPU_ISR_Disable(level); + + cur_state = thethread->cur_state; + if(cur_state&state) { + cur_state = thethread->cur_state = __lwp_clearstate(cur_state,state); + if(__lwp_stateready(cur_state)) { + __lwp_priomap_addto(&thethread->priomap); + __lwp_queue_appendI(thethread->ready,&thethread->object.node); + _CPU_ISR_Flash(level); + + if(thethread->cur_prio<_thr_heir->cur_prio) { + _thr_heir = thethread; + if(_thr_executing->is_preemptible + || thethread->cur_prio==0) + _context_switch_want = TRUE; + } + } + } + + _CPU_ISR_Restore(level); +} + +u32 __lwp_evaluatemode() +{ + lwp_cntrl *exec; + + exec = _thr_executing; + if(!__lwp_stateready(exec->cur_state) + || (!__lwp_thread_isheir(exec) && exec->is_preemptible)){ + _context_switch_want = TRUE; + return TRUE; + } + return FALSE; +} + +void __lwp_thread_changepriority(lwp_cntrl *thethread,u32 prio,u32 prependit) +{ + u32 level; + + __lwp_thread_settransient(thethread); + + if(thethread->cur_prio!=prio) + __lwp_thread_setpriority(thethread,prio); + + _CPU_ISR_Disable(level); + + thethread->cur_state = __lwp_clearstate(thethread->cur_state,LWP_STATES_TRANSIENT); + if(!__lwp_stateready(thethread->cur_state)) { + _CPU_ISR_Restore(level); + return; + } + + __lwp_priomap_addto(&thethread->priomap); + if(prependit) + __lwp_queue_prependI(thethread->ready,&thethread->object.node); + else + __lwp_queue_appendI(thethread->ready,&thethread->object.node); + + _CPU_ISR_Flash(level); + + __lwp_thread_calcheir(); + + if(!(_thr_executing==_thr_heir) + && _thr_executing->is_preemptible) + _context_switch_want = TRUE; + + _CPU_ISR_Restore(level); +} + +void __lwp_thread_setpriority(lwp_cntrl *thethread,u32 prio) +{ + thethread->cur_prio = prio; + thethread->ready = &_lwp_thr_ready[prio]; + __lwp_priomap_init(&thethread->priomap,prio); +#ifdef _LWPTHREADS_DEBUG + kprintf("__lwp_thread_setpriority(%p,%d,%p)\n",thethread,prio,thethread->ready); +#endif +} + +void __lwp_thread_suspend(lwp_cntrl *thethread) +{ + u32 level; + lwp_queue *ready; + + ready = thethread->ready; + + _CPU_ISR_Disable(level); + thethread->suspendcnt++; + if(!__lwp_stateready(thethread->cur_state)) { + thethread->cur_state = __lwp_setstate(thethread->cur_state,LWP_STATES_SUSPENDED); + _CPU_ISR_Restore(level); + return; + } + + thethread->cur_state = LWP_STATES_SUSPENDED; + if(__lwp_queue_onenode(ready)) { + __lwp_queue_init_empty(ready); + __lwp_priomap_removefrom(&thethread->priomap); + } else { + __lwp_queue_extractI(&thethread->object.node); + } + _CPU_ISR_Flash(level); + + if(__lwp_thread_isheir(thethread)) + __lwp_thread_calcheir(); + + if(__lwp_thread_isexec(thethread)) + _context_switch_want = TRUE; + + _CPU_ISR_Restore(level); +} + +void __lwp_thread_settransient(lwp_cntrl *thethread) +{ + u32 level,oldstates; + lwp_queue *ready; + + ready = thethread->ready; + + _CPU_ISR_Disable(level); + + oldstates = thethread->cur_state; + thethread->cur_state = __lwp_setstate(oldstates,LWP_STATES_TRANSIENT); + + if(__lwp_stateready(oldstates)) { + if(__lwp_queue_onenode(ready)) { + __lwp_queue_init_empty(ready); + __lwp_priomap_removefrom(&thethread->priomap); + } else { + __lwp_queue_extractI(&thethread->object.node); + } + } + + _CPU_ISR_Restore(level); +} + +void __lwp_thread_resume(lwp_cntrl *thethread,u32 force) +{ + u32 level,state; + + _CPU_ISR_Disable(level); + + if(force==TRUE) + thethread->suspendcnt = 0; + else + thethread->suspendcnt--; + + if(thethread->suspendcnt>0) { + _CPU_ISR_Restore(level); + return; + } + + state = thethread->cur_state; + if(state&LWP_STATES_SUSPENDED) { + state = thethread->cur_state = __lwp_clearstate(thethread->cur_state,LWP_STATES_SUSPENDED); + if(__lwp_stateready(state)) { + __lwp_priomap_addto(&thethread->priomap); + __lwp_queue_appendI(thethread->ready,&thethread->object.node); + _CPU_ISR_Flash(level); + if(thethread->cur_prio<_thr_heir->cur_prio) { + _thr_heir = thethread; + if(_thr_executing->is_preemptible + || thethread->cur_prio==0) + _context_switch_want = TRUE; + } + } + } + _CPU_ISR_Restore(level); +} + +void __lwp_thread_loadenv(lwp_cntrl *thethread) +{ + u32 stackbase,sp,size; + u32 r2,r13,msr_value; + + thethread->context.FPSCR = 0x000000f8; + + stackbase = (u32)thethread->stack; + size = thethread->stack_size; + + // tag both bottom & head of stack + *((u32*)stackbase) = 0xDEADBABE; + sp = stackbase+size-CPU_MINIMUM_STACK_FRAME_SIZE; + sp &= ~(CPU_STACK_ALIGNMENT-1); + *((u32*)sp) = 0; + + thethread->context.GPR[1] = sp; + + msr_value = (MSR_ME|MSR_IR|MSR_DR|MSR_RI); + if(!(thethread->isr_level&CPU_MODES_INTERRUPT_MASK)) + msr_value |= MSR_EE; + + thethread->context.MSR = msr_value; + thethread->context.LR = (u32)__lwp_thread_handler; + + __asm__ __volatile__ ("mr %0,2; mr %1,13" : "=r" ((r2)), "=r" ((r13))); + thethread->context.GPR[2] = r2; + thethread->context.GPR[13] = r13; + +#ifdef _LWPTHREADS_DEBUG + kprintf("__lwp_thread_loadenv(%p,%p,%d,%p)\n",thethread,(void*)stackbase,size,(void*)sp); +#endif + +} + +void __lwp_thread_ready(lwp_cntrl *thethread) +{ + u32 level; + lwp_cntrl *heir; + + _CPU_ISR_Disable(level); +#ifdef _LWPTHREADS_DEBUG + kprintf("__lwp_thread_ready(%p)\n",thethread); +#endif + thethread->cur_state = LWP_STATES_READY; + __lwp_priomap_addto(&thethread->priomap); + __lwp_queue_appendI(thethread->ready,&thethread->object.node); + _CPU_ISR_Flash(level); + + __lwp_thread_calcheir(); + heir = _thr_heir; + if(!(__lwp_thread_isexec(heir)) && _thr_executing->is_preemptible) + _context_switch_want = TRUE; + + _CPU_ISR_Restore(level); +} + +u32 __lwp_thread_init(lwp_cntrl *thethread,void *stack_area,u32 stack_size,u32 prio,u32 isr_level,bool is_preemtible) +{ + u32 act_stack_size = 0; + +#ifdef _LWPTHREADS_DEBUG + kprintf("__lwp_thread_init(%p,%p,%d,%d,%d)\n",thethread,stack_area,stack_size,prio,isr_level); +#endif + + if(!stack_area) { + if(!__lwp_stack_isenough(stack_size)) + act_stack_size = CPU_MINIMUM_STACK_SIZE; + else + act_stack_size = stack_size; + + act_stack_size = __lwp_stack_allocate(thethread,act_stack_size); + if(!act_stack_size) return 0; + + thethread->stack_allocated = TRUE; + } else { + thethread->stack = stack_area; + act_stack_size = stack_size; + thethread->stack_allocated = FALSE; + } + thethread->stack_size = act_stack_size; + + __lwp_threadqueue_init(&thethread->join_list,LWP_THREADQ_MODEFIFO,LWP_STATES_WAITING_FOR_JOINATEXIT,0); + + memset(&thethread->context,0,sizeof(thethread->context)); + memset(&thethread->wait,0,sizeof(thethread->wait)); + + thethread->budget_algo = (prio<128 ? LWP_CPU_BUDGET_ALGO_NONE : LWP_CPU_BUDGET_ALGO_TIMESLICE); + thethread->is_preemptible = is_preemtible; + thethread->isr_level = isr_level; + thethread->real_prio = prio; + thethread->cur_state = LWP_STATES_DORMANT; + thethread->cpu_time_budget = _lwp_ticks_per_timeslice; + thethread->suspendcnt = 0; + thethread->res_cnt = 0; + __lwp_thread_setpriority(thethread,prio); + + __libc_create_hook(_thr_executing,thethread); + + return 1; +} + +void __lwp_thread_close(lwp_cntrl *thethread) +{ + u32 level; + void **value_ptr; + lwp_cntrl *p; + + __lwp_thread_setstate(thethread,LWP_STATES_TRANSIENT); + + if(!__lwp_threadqueue_extractproxy(thethread)) { + if(__lwp_wd_isactive(&thethread->timer)) + __lwp_wd_remove_ticks(&thethread->timer); + } + + _CPU_ISR_Disable(level); + value_ptr = (void**)thethread->wait.ret_arg; + while((p=__lwp_threadqueue_dequeue(&thethread->join_list))!=NULL) { + *(void**)p->wait.ret_arg = value_ptr; + } + thethread->cpu_time_budget = 0; + thethread->budget_algo = LWP_CPU_BUDGET_ALGO_NONE; + _CPU_ISR_Restore(level); + + __libc_delete_hook(_thr_executing,thethread); + + if(__lwp_thread_isallocatedfp(thethread)) + __lwp_thread_deallocatefp(); + + __lwp_stack_free(thethread); + + __lwp_objmgr_close(thethread->object.information,&thethread->object); + __lwp_objmgr_free(thethread->object.information,&thethread->object); +} + +void __lwp_thread_closeall() +{ + u32 i,level; + lwp_queue *header; + lwp_cntrl *ptr,*next; +#ifdef _LWPTHREADS_DEBUG + kprintf("__lwp_thread_closeall(enter)\n"); +#endif + _CPU_ISR_Disable(level); + for(i=0;ifirst; + while(ptr!=(lwp_cntrl*)__lwp_queue_tail(&_lwp_thr_ready[i])) { + next = (lwp_cntrl*)ptr->object.node.next; + if(ptr!=_thr_executing) + __lwp_thread_close(ptr); + + ptr = next; + } + } + _CPU_ISR_Restore(level); +#ifdef _LWPTHREADS_DEBUG + kprintf("__lwp_thread_closeall(leave)\n"); +#endif +} + +void __lwp_thread_exit(void *value_ptr) +{ + __lwp_thread_dispatchdisable(); + _thr_executing->wait.ret_arg = (u32*)value_ptr; + __lwp_thread_close(_thr_executing); + __lwp_thread_dispatchenable(); +} + +u32 __lwp_thread_start(lwp_cntrl *thethread,void* (*entry)(void*),void *arg) +{ +#ifdef _LWPTHREADS_DEBUG + kprintf("__lwp_thread_start(%p,%p,%p,%d)\n",thethread,entry,arg,thethread->cur_state); +#endif + if(__lwp_statedormant(thethread->cur_state)) { + thethread->entry = entry; + thethread->arg = arg; + __lwp_thread_loadenv(thethread); + __lwp_thread_ready(thethread); + __libc_start_hook(_thr_executing,thethread); + return 1; + } + return 0; +} + +void __lwp_thread_startmultitasking() +{ + _lwp_exitfunc = NULL; + + __sys_state_set(SYS_STATE_BEGIN_MT); + __sys_state_set(SYS_STATE_UP); + + _context_switch_want = FALSE; + _thr_executing = _thr_heir; +#ifdef _LWPTHREADS_DEBUG + kprintf("__lwp_start_multitasking(%p,%p)\n",_thr_executing,_thr_heir); +#endif + __lwp_thread_starttimeslice(); + _cpu_context_switch((void*)&core_context,(void*)&_thr_heir->context); + + if(_lwp_exitfunc) _lwp_exitfunc(); +} + +void __lwp_thread_stopmultitasking(void (*exitfunc)()) +{ + _lwp_exitfunc = exitfunc; + if(__sys_state_get()!=SYS_STATE_SHUTDOWN) { + __lwp_thread_stoptimeslice(); + __sys_state_set(SYS_STATE_SHUTDOWN); + _cpu_context_switch((void*)&_thr_executing->context,(void*)&core_context); + } +} + +void __lwp_thread_coreinit() +{ + u32 index; + +#ifdef _LWPTHREADS_DEBUG + kprintf("__lwp_sys_init()\n\n"); +#endif + __lwp_thread_dispatchinitialize(); + __lwp_thread_inittimeslice(); + + _context_switch_want = FALSE; + _thr_executing = NULL; + _thr_heir = NULL; + _thr_allocated_fp = NULL; + _lwp_ticks_per_timeslice = 10; + + memset(&core_context,0,sizeof(core_context)); + + for(index=0;index<=LWP_PRIO_MAX;index++) + __lwp_queue_init_empty(&_lwp_thr_ready[index]); + + __sys_state_set(SYS_STATE_BEFORE_MT); +} + diff --git a/wii/libogc/libogc/lwp_threads.inl b/wii/libogc/libogc/lwp_threads.inl new file mode 100644 index 0000000000..b6a7278eff --- /dev/null +++ b/wii/libogc/libogc/lwp_threads.inl @@ -0,0 +1,90 @@ +#ifndef __LWP_INL__ +#define __LWP_INL__ + +static __inline__ u32 __lwp_thread_isexec(lwp_cntrl *thethread) +{ + return (thethread==_thr_executing); +} + +static __inline__ u32 __lwp_thread_isheir(lwp_cntrl *thethread) +{ + return (thethread==_thr_heir); +} + +static __inline__ void __lwp_thread_calcheir() +{ + _thr_heir = (lwp_cntrl*)_lwp_thr_ready[__lwp_priomap_highest()].first; +} + +static __inline__ u32 __lwp_thread_isallocatedfp(lwp_cntrl *thethread) +{ + return (thethread==_thr_allocated_fp); +} + +static __inline__ void __lwp_thread_deallocatefp() +{ + _thr_allocated_fp = NULL; +} + +static __inline__ void __lwp_thread_dispatchinitialize() +{ + _thread_dispatch_disable_level = 1; +} + +static __inline__ void __lwp_thread_dispatchenable() +{ + if((--_thread_dispatch_disable_level)==0) + __thread_dispatch(); +} + +static __inline__ void __lwp_thread_dispatchdisable() +{ + ++_thread_dispatch_disable_level; +} + +static __inline__ void __lwp_thread_dispatchunnest() +{ + --_thread_dispatch_disable_level; +} + +static __inline__ void __lwp_thread_unblock(lwp_cntrl *thethread) +{ + __lwp_thread_clearstate(thethread,LWP_STATES_BLOCKED); +} + +static __inline__ void** __lwp_thread_getlibcreent() +{ + return __lwp_thr_libc_reent; +} + +static __inline__ void __lwp_thread_setlibcreent(void **libc_reent) +{ + __lwp_thr_libc_reent = libc_reent; +} + +static __inline__ bool __lwp_thread_isswitchwant() +{ + + return _context_switch_want; +} + +static __inline__ bool __lwp_thread_isdispatchenabled() +{ + return (_thread_dispatch_disable_level==0); +} + +static __inline__ void __lwp_thread_inittimeslice() +{ + __lwp_wd_initialize(&_lwp_wd_timeslice,__lwp_thread_tickle_timeslice,LWP_TIMESLICE_TIMER_ID,NULL); +} + +static __inline__ void __lwp_thread_starttimeslice() +{ + __lwp_wd_insert_ticks(&_lwp_wd_timeslice,millisecs_to_ticks(1)); +} + +static __inline__ void __lwp_thread_stoptimeslice() +{ + __lwp_wd_remove_ticks(&_lwp_wd_timeslice); +} +#endif diff --git a/wii/libogc/libogc/lwp_watchdog.c b/wii/libogc/libogc/lwp_watchdog.c new file mode 100644 index 0000000000..63390bb358 --- /dev/null +++ b/wii/libogc/libogc/lwp_watchdog.c @@ -0,0 +1,192 @@ +#include +#include +#include "asm.h" +#include "lwp_threads.h" +#include "lwp_watchdog.h" + +//#define _LWPWD_DEBUG + +#ifdef _LWPWD_DEBUG +#include +#endif + +vu32 _wd_sync_level; +vu32 _wd_sync_count; +u32 _wd_ticks_since_boot; + +lwp_queue _wd_ticks_queue; + +static void __lwp_wd_settimer(wd_cntrl *wd) +{ + u64 now; + s64 diff; + union uulc { + u64 ull; + u32 ul[2]; + } v; + + now = gettime(); + v.ull = diff = diff_ticks(now,wd->fire); +#ifdef _LWPWD_DEBUG + printf("__lwp_wd_settimer(%p,%llu,%lld)\n",wd,wd->fire,diff); +#endif + if(diff<=0) { +#ifdef _LWPWD_DEBUG + printf(" __lwp_wd_settimer(0): %lld<=0\n",diff); +#endif + wd->fire = 0; + mtdec(0); + } else if(diff<0x0000000080000000LL) { +#ifdef _LWPWD_DEBUG + printf("__lwp_wd_settimer(%d): %lld<0x0000000080000000LL\n",v.ul[1],diff); +#endif + mtdec(v.ul[1]); + } else { +#ifdef _LWPWD_DEBUG + printf("__lwp_wd_settimer(0x7fffffff)\n"); +#endif + mtdec(0x7fffffff); + } +} + +void __lwp_watchdog_init() +{ + _wd_sync_level = 0; + _wd_sync_count = 0; + _wd_ticks_since_boot = 0; + + __lwp_queue_init_empty(&_wd_ticks_queue); +} + +void __lwp_wd_insert(lwp_queue *header,wd_cntrl *wd) +{ + u32 level; + u64 fire; + u32 isr_nest_level; + wd_cntrl *after; +#ifdef _LWPWD_DEBUG + printf("__lwp_wd_insert(%p,%llu,%llu)\n",wd,wd->start,wd->fire); +#endif + isr_nest_level = __lwp_isr_in_progress(); + wd->state = LWP_WD_INSERTED; + + _wd_sync_count++; +restart: + _CPU_ISR_Disable(level); + fire = wd->fire; + for(after=__lwp_wd_first(header);;after=__lwp_wd_next(after)) { + if(fire==0 || !__lwp_wd_next(after)) break; + if(firefire) break; + + _CPU_ISR_Flash(level); + if(wd->state!=LWP_WD_INSERTED) goto exit_insert; + if(_wd_sync_level>isr_nest_level) { + _wd_sync_level = isr_nest_level; + _CPU_ISR_Restore(level); + goto restart; + } + } + __lwp_wd_activate(wd); + wd->fire = fire; + __lwp_queue_insertI(after->node.prev,&wd->node); + if(__lwp_wd_first(header)==wd) __lwp_wd_settimer(wd); + +exit_insert: + _wd_sync_level = isr_nest_level; + _wd_sync_count--; + _CPU_ISR_Restore(level); + return; +} + +u32 __lwp_wd_remove(lwp_queue *header,wd_cntrl *wd) +{ + u32 level; + u32 prev_state; + wd_cntrl *next; +#ifdef _LWPWD_DEBUG + printf("__lwp_wd_remove(%p)\n",wd); +#endif + _CPU_ISR_Disable(level); + prev_state = wd->state; + switch(prev_state) { + case LWP_WD_INACTIVE: + break; + case LWP_WD_INSERTED: + wd->state = LWP_WD_INACTIVE; + break; + case LWP_WD_ACTIVE: + case LWP_WD_REMOVE: + wd->state = LWP_WD_INACTIVE; + next = __lwp_wd_next(wd); + if(_wd_sync_count) _wd_sync_level = __lwp_isr_in_progress(); + __lwp_queue_extractI(&wd->node); + if(!__lwp_queue_isempty(header) && __lwp_wd_first(header)==next) __lwp_wd_settimer(next); + break; + } + _CPU_ISR_Restore(level); + return prev_state; +} + +void __lwp_wd_tickle(lwp_queue *queue) +{ + wd_cntrl *wd; + u64 now; + s64 diff; + + if(__lwp_queue_isempty(queue)) return; + + wd = __lwp_wd_first(queue); + now = gettime(); + diff = diff_ticks(now,wd->fire); +#ifdef _LWPWD_DEBUG + printf("__lwp_wd_tickle(%p,%08x%08x,%08x%08x,%08x%08x,%08x%08x)\n",wd,(u32)(now>>32),(u32)now,(u32)(wd->start>>32),(u32)wd->start,(u32)(wd->fire>>32),(u32)wd->fire,(u32)(diff>>32),(u32)diff); +#endif + if(diff<=0) { + do { + switch(__lwp_wd_remove(queue,wd)) { + case LWP_WD_ACTIVE: + wd->routine(wd->usr_data); + break; + case LWP_WD_INACTIVE: + break; + case LWP_WD_INSERTED: + break; + case LWP_WD_REMOVE: + break; + } + wd = __lwp_wd_first(queue); + } while(!__lwp_queue_isempty(queue) && wd->fire==0); + } else { + __lwp_wd_reset(wd); + } +} + +void __lwp_wd_adjust(lwp_queue *queue,u32 dir,s64 interval) +{ + u32 level; + u64 abs_int; + + _CPU_ISR_Disable(level); + abs_int = gettime()+LWP_WD_ABS(interval); + if(!__lwp_queue_isempty(queue)) { + switch(dir) { + case LWP_WD_BACKWARD: + __lwp_wd_first(queue)->fire += LWP_WD_ABS(interval); + break; + case LWP_WD_FORWARD: + while(abs_int) { + if(abs_int<__lwp_wd_first(queue)->fire) { + __lwp_wd_first(queue)->fire -= LWP_WD_ABS(interval); + break; + } else { + abs_int -= __lwp_wd_first(queue)->fire; + __lwp_wd_first(queue)->fire = gettime(); + __lwp_wd_tickle(queue); + if(__lwp_queue_isempty(queue)) break; + } + } + break; + } + } + _CPU_ISR_Restore(level); +} diff --git a/wii/libogc/libogc/lwp_watchdog.inl b/wii/libogc/libogc/lwp_watchdog.inl new file mode 100644 index 0000000000..5216e10996 --- /dev/null +++ b/wii/libogc/libogc/lwp_watchdog.inl @@ -0,0 +1,84 @@ +#ifndef __LWP_WATCHDOG_INL__ +#define __LWP_WATCHDOG_INL__ + +static __inline__ void __lwp_wd_initialize(wd_cntrl *wd,wd_service_routine routine,u32 id,void *usr_data) +{ + wd->state = LWP_WD_INACTIVE; + wd->id = id; + wd->routine = routine; + wd->usr_data = usr_data; +} + +static __inline__ wd_cntrl* __lwp_wd_first(lwp_queue *queue) +{ + return (wd_cntrl*)queue->first; +} + +static __inline__ wd_cntrl* __lwp_wd_last(lwp_queue *queue) +{ + return (wd_cntrl*)queue->last; +} + +static __inline__ wd_cntrl* __lwp_wd_next(wd_cntrl *wd) +{ + return (wd_cntrl*)wd->node.next; +} + +static __inline__ wd_cntrl* __lwp_wd_prev(wd_cntrl *wd) +{ + return (wd_cntrl*)wd->node.prev; +} + +static __inline__ void __lwp_wd_activate(wd_cntrl *wd) +{ + wd->state = LWP_WD_ACTIVE; +} + +static __inline__ void __lwp_wd_deactivate(wd_cntrl *wd) +{ + wd->state = LWP_WD_REMOVE; +} + +static __inline__ u32 __lwp_wd_isactive(wd_cntrl *wd) +{ + return (wd->state==LWP_WD_ACTIVE); +} + +static __inline__ u64 __lwp_wd_calc_ticks(const struct timespec *time) +{ + u64 ticks; + + ticks = secs_to_ticks(time->tv_sec); + ticks += nanosecs_to_ticks(time->tv_nsec); + + return ticks; +} + +static __inline__ void __lwp_wd_tickle_ticks() +{ + __lwp_wd_tickle(&_wd_ticks_queue); +} + +static __inline__ void __lwp_wd_insert_ticks(wd_cntrl *wd,s64 interval) +{ + wd->start = gettime(); + wd->fire = (wd->start+LWP_WD_ABS(interval)); + __lwp_wd_insert(&_wd_ticks_queue,wd); +} + +static __inline__ void __lwp_wd_adjust_ticks(u32 dir,s64 interval) +{ + __lwp_wd_adjust(&_wd_ticks_queue,dir,interval); +} + +static __inline__ void __lwp_wd_remove_ticks(wd_cntrl *wd) +{ + __lwp_wd_remove(&_wd_ticks_queue,wd); +} + +static __inline__ void __lwp_wd_reset(wd_cntrl *wd) +{ + __lwp_wd_remove(&_wd_ticks_queue,wd); + __lwp_wd_insert(&_wd_ticks_queue,wd); +} +#endif diff --git a/wii/libogc/libogc/lwp_wkspace.c b/wii/libogc/libogc/lwp_wkspace.c new file mode 100644 index 0000000000..a9d92d4968 --- /dev/null +++ b/wii/libogc/libogc/lwp_wkspace.c @@ -0,0 +1,45 @@ +#include +#include +#include +#include +#include +#include "system.h" +#include "lwp_wkspace.h" + +#define ROUND32UP(v) (((u32)(v)+31)&~31) + +heap_cntrl __wkspace_heap; +static heap_iblock __wkspace_iblock; +static u32 __wkspace_heap_size = 0; + +u32 __lwp_wkspace_heapsize() +{ + return __wkspace_heap_size; +} + +u32 __lwp_wkspace_heapfree() +{ + __lwp_heap_getinfo(&__wkspace_heap,&__wkspace_iblock); + return __wkspace_iblock.free_size; +} + +u32 __lwp_wkspace_heapused() +{ + __lwp_heap_getinfo(&__wkspace_heap,&__wkspace_iblock); + return __wkspace_iblock.used_size; +} + +void __lwp_wkspace_init(u32 size) +{ + u32 arLo,level,dsize; + + // Get current ArenaLo and adjust to 32-byte boundary + _CPU_ISR_Disable(level); + arLo = ROUND32UP(SYS_GetArenaLo()); + dsize = (size - (arLo - (u32)SYS_GetArenaLo())); + SYS_SetArenaLo((void*)(arLo+dsize)); + _CPU_ISR_Restore(level); + + memset((void*)arLo,0,dsize); + __wkspace_heap_size += __lwp_heap_init(&__wkspace_heap,(void*)arLo,dsize,PPC_ALIGNMENT); +} diff --git a/wii/libogc/libogc/lwp_wkspace.inl b/wii/libogc/libogc/lwp_wkspace.inl new file mode 100644 index 0000000000..4aa8f0faf0 --- /dev/null +++ b/wii/libogc/libogc/lwp_wkspace.inl @@ -0,0 +1,14 @@ +#ifndef __LWP_WKSPACE_INL__ +#define __LWP_WKSPACE_INL__ + +static __inline__ void* __lwp_wkspace_allocate(u32 size) +{ + return __lwp_heap_allocate(&__wkspace_heap,size); +} + +static __inline__ BOOL __lwp_wkspace_free(void *ptr) +{ + return __lwp_heap_free(&__wkspace_heap,ptr); +} + +#endif diff --git a/wii/libogc/libogc/malloc_lock.c b/wii/libogc/libogc/malloc_lock.c new file mode 100644 index 0000000000..c907f86171 --- /dev/null +++ b/wii/libogc/libogc/malloc_lock.c @@ -0,0 +1,81 @@ +#include <_ansi.h> +#include <_syslist.h> +#ifndef REENTRANT_SYSCALLS_PROVIDED +#include +#endif +#include +#undef errno +extern int errno; + +#include "asm.h" +#include "processor.h" +#include "lwp_mutex.h" + +#define MEMLOCK_MUTEX_ID 0x00030040 + +static int initialized = 0; +static lwp_mutex mem_lock; + +void __memlock_init() +{ + __lwp_thread_dispatchdisable(); + if(!initialized) { + lwp_mutex_attr attr; + + initialized = 1; + + attr.mode = LWP_MUTEX_FIFO; + attr.nest_behavior = LWP_MUTEX_NEST_ACQUIRE; + attr.onlyownerrelease = TRUE; + attr.prioceil = 1; + __lwp_mutex_initialize(&mem_lock,&attr,LWP_MUTEX_UNLOCKED); + } + __lwp_thread_dispatchunnest(); +} + +#ifndef REENTRANT_SYSCALLS_PROVIDED +void _DEFUN(__libogc_malloc_lock,(r), + struct _reent *r) +{ + u32 level; + + if(!initialized) return; + + _CPU_ISR_Disable(level); + __lwp_mutex_seize(&mem_lock,MEMLOCK_MUTEX_ID,TRUE,LWP_THREADQ_NOTIMEOUT,level); +} + +void _DEFUN(__libogc_malloc_unlock,(r), + struct _reent *r) +{ + if(!initialized) return; + + __lwp_thread_dispatchdisable(); + __lwp_mutex_surrender(&mem_lock); + __lwp_thread_dispatchenable(); +} + +#else +void _DEFUN(__libogc_malloc_lock,(ptr), + struct _reent *ptr) +{ + unsigned int level; + + if(!initialized) return; + + _CPU_ISR_Disable(level); + __lwp_mutex_seize(&mem_lock,MEMLOCK_MUTEX_ID,TRUE,LWP_THREADQ_NOTIMEOUT,level); + ptr->_errno = _thr_executing->wait.ret_code; +} + +void _DEFUN(__libogc_malloc_unlock,(ptr), + struct _reent *ptr) +{ + if(!initialized) return; + + __lwp_thread_dispatchdisable(); + ptr->_errno = __lwp_mutex_surrender(&mem_lock); + __lwp_thread_dispatchenable(); +} + +#endif diff --git a/wii/libogc/libogc/message.c b/wii/libogc/libogc/message.c new file mode 100644 index 0000000000..4a529de321 --- /dev/null +++ b/wii/libogc/libogc/message.c @@ -0,0 +1,167 @@ +/*------------------------------------------------------------- + +message.c -- Thread subsystem II + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + + +-------------------------------------------------------------*/ + + +#include +#include +#include +#include +#include +#include "message.h" + +#define LWP_OBJTYPE_MBOX 6 + +#define LWP_CHECK_MBOX(hndl) \ +{ \ + if(((hndl)==MQ_BOX_NULL) || (LWP_OBJTYPE(hndl)!=LWP_OBJTYPE_MBOX)) \ + return NULL; \ +} + +typedef struct _mqbox_st +{ + lwp_obj object; + mq_cntrl mqueue; +} mqbox_st; + +lwp_objinfo _lwp_mqbox_objects; + +void __lwp_mqbox_init() +{ + __lwp_objmgr_initinfo(&_lwp_mqbox_objects,LWP_MAX_MQUEUES,sizeof(mqbox_st)); +} + +static __inline__ mqbox_st* __lwp_mqbox_open(mqbox_t mbox) +{ + LWP_CHECK_MBOX(mbox); + return (mqbox_st*)__lwp_objmgr_get(&_lwp_mqbox_objects,LWP_OBJMASKID(mbox)); +} + +static __inline__ void __lwp_mqbox_free(mqbox_st *mqbox) +{ + __lwp_objmgr_close(&_lwp_mqbox_objects,&mqbox->object); + __lwp_objmgr_free(&_lwp_mqbox_objects,&mqbox->object); +} + +static mqbox_st* __lwp_mqbox_allocate() +{ + mqbox_st *mqbox; + + __lwp_thread_dispatchdisable(); + mqbox = (mqbox_st*)__lwp_objmgr_allocate(&_lwp_mqbox_objects); + if(mqbox) { + __lwp_objmgr_open(&_lwp_mqbox_objects,&mqbox->object); + return mqbox; + } + __lwp_thread_dispatchenable(); + return NULL; +} + +s32 MQ_Init(mqbox_t *mqbox,u32 count) +{ + mq_attr attr; + mqbox_st *ret = NULL; + + if(!mqbox) return -1; + + ret = __lwp_mqbox_allocate(); + if(!ret) return MQ_ERROR_TOOMANY; + + attr.mode = LWP_MQ_FIFO; + if(!__lwpmq_initialize(&ret->mqueue,&attr,count,sizeof(mqmsg_t))) { + __lwp_mqbox_free(ret); + __lwp_thread_dispatchenable(); + return MQ_ERROR_TOOMANY; + } + + *mqbox = (mqbox_t)(LWP_OBJMASKTYPE(LWP_OBJTYPE_MBOX)|LWP_OBJMASKID(ret->object.id)); + __lwp_thread_dispatchenable(); + return MQ_ERROR_SUCCESSFUL; +} + +void MQ_Close(mqbox_t mqbox) +{ + mqbox_st *mbox; + + mbox = __lwp_mqbox_open(mqbox); + if(!mbox) return; + + __lwpmq_close(&mbox->mqueue,0); + __lwp_thread_dispatchenable(); + + __lwp_mqbox_free(mbox); +} + +BOOL MQ_Send(mqbox_t mqbox,mqmsg_t msg,u32 flags) +{ + BOOL ret; + mqbox_st *mbox; + u32 wait = (flags==MQ_MSG_BLOCK)?TRUE:FALSE; + + mbox = __lwp_mqbox_open(mqbox); + if(!mbox) return FALSE; + + ret = FALSE; + if(__lwpmq_submit(&mbox->mqueue,mbox->object.id,(void*)&msg,sizeof(mqmsg_t),LWP_MQ_SEND_REQUEST,wait,LWP_THREADQ_NOTIMEOUT)==LWP_MQ_STATUS_SUCCESSFUL) ret = TRUE; + __lwp_thread_dispatchenable(); + + return ret; +} + +BOOL MQ_Receive(mqbox_t mqbox,mqmsg_t *msg,u32 flags) +{ + BOOL ret; + mqbox_st *mbox; + u32 tmp,wait = (flags==MQ_MSG_BLOCK)?TRUE:FALSE; + + mbox = __lwp_mqbox_open(mqbox); + if(!mbox) return FALSE; + + ret = FALSE; + if(__lwpmq_seize(&mbox->mqueue,mbox->object.id,(void*)msg,&tmp,wait,LWP_THREADQ_NOTIMEOUT)==LWP_MQ_STATUS_SUCCESSFUL) ret = TRUE; + __lwp_thread_dispatchenable(); + + return ret; +} + +BOOL MQ_Jam(mqbox_t mqbox,mqmsg_t msg,u32 flags) +{ + BOOL ret; + mqbox_st *mbox; + u32 wait = (flags==MQ_MSG_BLOCK)?TRUE:FALSE; + + mbox = __lwp_mqbox_open(mqbox); + if(!mbox) return FALSE; + + ret = FALSE; + if(__lwpmq_submit(&mbox->mqueue,mbox->object.id,(void*)&msg,sizeof(mqmsg_t),LWP_MQ_SEND_URGENT,wait,LWP_THREADQ_NOTIMEOUT)==LWP_MQ_STATUS_SUCCESSFUL) ret = TRUE; + __lwp_thread_dispatchenable(); + + return ret; +} diff --git a/wii/libogc/libogc/mutex.c b/wii/libogc/libogc/mutex.c new file mode 100644 index 0000000000..546dad1402 --- /dev/null +++ b/wii/libogc/libogc/mutex.c @@ -0,0 +1,160 @@ +/*------------------------------------------------------------- + +mutex.c -- Thread subsystem III + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + + +#include +#include +#include "asm.h" +#include "lwp_mutex.h" +#include "lwp_objmgr.h" +#include "lwp_config.h" +#include "mutex.h" + +#define LWP_OBJTYPE_MUTEX 3 + +#define LWP_CHECK_MUTEX(hndl) \ +{ \ + if(((hndl)==LWP_MUTEX_NULL) || (LWP_OBJTYPE(hndl)!=LWP_OBJTYPE_MUTEX)) \ + return NULL; \ +} + +typedef struct _mutex_st +{ + lwp_obj object; + lwp_mutex mutex; +} mutex_st; + +lwp_objinfo _lwp_mutex_objects; + +static s32 __lwp_mutex_locksupp(mutex_t lock,u32 timeout,u8 block) +{ + u32 level; + mutex_st *p; + + if(lock==LWP_MUTEX_NULL || LWP_OBJTYPE(lock)!=LWP_OBJTYPE_MUTEX) return -1; + + p = (mutex_st*)__lwp_objmgr_getisrdisable(&_lwp_mutex_objects,LWP_OBJMASKID(lock),&level); + if(!p) return -1; + + __lwp_mutex_seize(&p->mutex,p->object.id,block,timeout,level); + return _thr_executing->wait.ret_code; +} + +void __lwp_mutex_init() +{ + __lwp_objmgr_initinfo(&_lwp_mutex_objects,LWP_MAX_MUTEXES,sizeof(mutex_st)); +} + + +static __inline__ mutex_st* __lwp_mutex_open(mutex_t lock) +{ + LWP_CHECK_MUTEX(lock); + return (mutex_st*)__lwp_objmgr_get(&_lwp_mutex_objects,LWP_OBJMASKID(lock)); +} + +static __inline__ void __lwp_mutex_free(mutex_st *lock) +{ + __lwp_objmgr_close(&_lwp_mutex_objects,&lock->object); + __lwp_objmgr_free(&_lwp_mutex_objects,&lock->object); +} + +static mutex_st* __lwp_mutex_allocate() +{ + mutex_st *lock; + + __lwp_thread_dispatchdisable(); + lock = (mutex_st*)__lwp_objmgr_allocate(&_lwp_mutex_objects); + if(lock) { + __lwp_objmgr_open(&_lwp_mutex_objects,&lock->object); + return lock; + } + __lwp_thread_dispatchunnest(); + return NULL; +} + +s32 LWP_MutexInit(mutex_t *mutex,bool use_recursive) +{ + lwp_mutex_attr attr; + mutex_st *ret; + + if(!mutex) return -1; + + ret = __lwp_mutex_allocate(); + if(!ret) return -1; + + attr.mode = LWP_MUTEX_FIFO; + attr.nest_behavior = use_recursive?LWP_MUTEX_NEST_ACQUIRE:LWP_MUTEX_NEST_ERROR; + attr.onlyownerrelease = TRUE; + attr.prioceil = 1; //__lwp_priotocore(LWP_PRIO_MAX-1); + __lwp_mutex_initialize(&ret->mutex,&attr,LWP_MUTEX_UNLOCKED); + + *mutex = (mutex_t)(LWP_OBJMASKTYPE(LWP_OBJTYPE_MUTEX)|LWP_OBJMASKID(ret->object.id)); + __lwp_thread_dispatchunnest(); + return 0; +} + +s32 LWP_MutexDestroy(mutex_t mutex) +{ + mutex_st *p = __lwp_mutex_open(mutex); + if(!p) return 0; + + if(__lwp_mutex_locked(&p->mutex)) { + __lwp_thread_dispatchenable(); + return EBUSY; + } + __lwp_mutex_flush(&p->mutex,EINVAL); + __lwp_thread_dispatchenable(); + + __lwp_mutex_free(p); + return 0; +} + +s32 LWP_MutexLock(mutex_t mutex) +{ + return __lwp_mutex_locksupp(mutex,LWP_THREADQ_NOTIMEOUT,TRUE); +} + +s32 LWP_MutexTryLock(mutex_t mutex) +{ + return __lwp_mutex_locksupp(mutex,LWP_THREADQ_NOTIMEOUT,FALSE); +} + +s32 LWP_MutexUnlock(mutex_t mutex) +{ + u32 ret; + mutex_st *lock; + + lock = __lwp_mutex_open(mutex); + if(!lock) return -1; + + ret = __lwp_mutex_surrender(&lock->mutex); + __lwp_thread_dispatchenable(); + + return ret; +} diff --git a/wii/libogc/libogc/network_common.c b/wii/libogc/libogc/network_common.c new file mode 100644 index 0000000000..7442a35ec3 --- /dev/null +++ b/wii/libogc/libogc/network_common.c @@ -0,0 +1,198 @@ +#include "lwip/def.h" +#include "lwip/inet.h" + +/* Here for now until needed in other places in lwIP */ +#ifndef isascii +#define in_range(c, lo, up) ((u8_t)c >= lo && (u8_t)c <= up) +#define isascii(c) in_range(c, 0x20, 0x7f) +#define isdigit(c) in_range(c, '0', '9') +#define isxdigit(c) (isdigit(c) || in_range(c, 'a', 'f') || in_range(c, 'A', 'F')) +#define islower(c) in_range(c, 'a', 'z') +#define isspace(c) (c == ' ' || c == '\f' || c == '\n' || c == '\r' || c == '\t' || c == '\v') +#endif + + + /* + * Ascii internet address interpretation routine. + * The value returned is in network order. + */ + + /* */ + /* inet_addr */ + u32_t inet_addr(const char *cp) + { + struct in_addr val; + + if (inet_aton(cp, &val)) { + return (val.s_addr); + } + return (INADDR_NONE); + } + + /* + * Check whether "cp" is a valid ascii representation + * of an Internet address and convert to a binary address. + * Returns 1 if the address is valid, 0 if not. + * This replaces inet_addr, the return value from which + * cannot distinguish between failure and a local broadcast address. + */ + /* */ + /* inet_aton */ + s8_t + inet_aton(const char *cp, struct in_addr *addr) + { + u32_t val; + s32_t base, n; + char c; + u32_t parts[4]; + u32_t* pp = parts; + + c = *cp; + for (;;) { + /* + * Collect number up to ``.''. + * Values are specified as for C: + * 0x=hex, 0=octal, isdigit=decimal. + */ + if (!isdigit(c)) + return (0); + val = 0; base = 10; + if (c == '0') { + c = *++cp; + if (c == 'x' || c == 'X') + base = 16, c = *++cp; + else + base = 8; + } + for (;;) { + if (isdigit(c)) { + val = (val * base) + (s16_t)(c - '0'); + c = *++cp; + } else if (base == 16 && isxdigit(c)) { + val = (val << 4) | + (s16_t)(c + 10 - (islower(c) ? 'a' : 'A')); + c = *++cp; + } else + break; + } + if (c == '.') { + /* + * Internet format: + * a.b.c.d + * a.b.c (with c treated as 16 bits) + * a.b (with b treated as 24 bits) + */ + if (pp >= parts + 3) + return (0); + *pp++ = val; + c = *++cp; + } else + break; + } + /* + * Check for trailing characters. + */ + if (c != '\0' && (!isascii(c) || !isspace(c))) + return (0); + /* + * Concoct the address according to + * the number of parts specified. + */ + n = pp - parts + 1; + switch (n) { + + case 0: + return (0); /* initial nondigit */ + + case 1: /* a -- 32 bits */ + break; + + case 2: /* a.b -- 8.24 bits */ + if (val > 0xffffff) + return (0); + val |= parts[0] << 24; + break; + + case 3: /* a.b.c -- 8.8.16 bits */ + if (val > 0xffff) + return (0); + val |= (parts[0] << 24) | (parts[1] << 16); + break; + + case 4: /* a.b.c.d -- 8.8.8.8 bits */ + if (val > 0xff) + return (0); + val |= (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8); + break; + } + if (addr) + addr->s_addr = htonl(val); + return (1); + } + +/* Convert numeric IP address into decimal dotted ASCII representation. + * returns ptr to static buffer; not reentrant! + */ +char *inet_ntoa(struct in_addr addr) +{ + static char str[16]; + u32_t s_addr = addr.s_addr; + char inv[3]; + char *rp; + u8_t *ap; + u8_t rem; + u8_t n; + u8_t i; + + rp = str; + ap = (u8_t *)&s_addr; + for(n = 0; n < 4; n++) { + i = 0; + do { + rem = *ap % (u8_t)10; + *ap /= (u8_t)10; + inv[i++] = '0' + rem; + } while(*ap); + while(i--) + *rp++ = inv[i]; + *rp++ = '.'; + ap++; + } + *--rp = 0; + return str; +} + + +#ifndef BYTE_ORDER +#error BYTE_ORDER is not defined +#endif +#if BYTE_ORDER == LITTLE_ENDIAN + +u16_t +htons(u16_t n) +{ + return ((n & 0xff) << 8) | ((n & 0xff00) >> 8); +} + +u16_t +ntohs(u16_t n) +{ + return htons(n); +} + +u32_t +htonl(u32_t n) +{ + return ((n & 0xff) << 24) | + ((n & 0xff00) << 8) | + ((n & 0xff0000) >> 8) | + ((n & 0xff000000) >> 24); +} + +u32_t +ntohl(u32_t n) +{ + return htonl(n); +} + +#endif /* BYTE_ORDER == LITTLE_ENDIAN */ diff --git a/wii/libogc/libogc/network_wii.c b/wii/libogc/libogc/network_wii.c new file mode 100644 index 0000000000..5c76cd8f49 --- /dev/null +++ b/wii/libogc/libogc/network_wii.c @@ -0,0 +1,1167 @@ +/*------------------------------------------------------------- + +network_wii.c -- Wii network subsystem + +Copyright (C) 2008 bushing + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + +#if defined(HW_RVL) + + +#define MAX_IP_RETRIES 100 +#define MAX_INIT_RETRIES 32 + +//#define DEBUG_NET + +#ifdef DEBUG_NET +#define debug_printf(fmt, args...) \ + do { \ + fprintf(stderr, "%s:%d:" fmt, __FUNCTION__, __LINE__, ##args); \ + } while (0) +#else +#define debug_printf(fmt, args...) do { } while (0) +#endif // DEBUG_NET + +#include +#include +#include +#define __LINUX_ERRNO_EXTENSIONS__ +#include +#include +#include +#include + +#include "ipc.h" +#include "processor.h" +#include "network.h" +#include "ogcsys.h" +#include "lwp_heap.h" + +#define NET_HEAP_SIZE 64*1024 + +#define IOS_O_NONBLOCK 0x04 //(O_NONBLOCK >> 16) - it's in octal representation, so this shift leads to 0 and hence nonblocking sockets didn't work. changed it to the right value. + +#define IOCTL_NWC24_STARTUP 0x06 + +#define IOCTL_NCD_SETIFCONFIG3 0x03 +#define IOCTL_NCD_SETIFCONFIG4 0x04 +#define IOCTL_NCD_GETLINKSTATUS 0x07 +#define IOCTLV_NCD_GETMACADDRESS 0x08 + +#define NET_UNKNOWN_ERROR_OFFSET -10000 + +enum { + IOCTL_SO_ACCEPT = 1, + IOCTL_SO_BIND, + IOCTL_SO_CLOSE, + IOCTL_SO_CONNECT, + IOCTL_SO_FCNTL, + IOCTL_SO_GETPEERNAME, // todo + IOCTL_SO_GETSOCKNAME, // todo + IOCTL_SO_GETSOCKOPT, // todo 8 + IOCTL_SO_SETSOCKOPT, + IOCTL_SO_LISTEN, + IOCTL_SO_POLL, // todo b + IOCTLV_SO_RECVFROM, + IOCTLV_SO_SENDTO, + IOCTL_SO_SHUTDOWN, // todo e + IOCTL_SO_SOCKET, + IOCTL_SO_GETHOSTID, + IOCTL_SO_GETHOSTBYNAME, + IOCTL_SO_GETHOSTBYADDR,// todo + IOCTLV_SO_GETNAMEINFO, // todo 13 + IOCTL_SO_UNK14, // todo + IOCTL_SO_INETATON, // todo + IOCTL_SO_INETPTON, // todo + IOCTL_SO_INETNTOP, // todo + IOCTLV_SO_GETADDRINFO, // todo + IOCTL_SO_SOCKATMARK, // todo + IOCTLV_SO_UNK1A, // todo + IOCTLV_SO_UNK1B, // todo + IOCTLV_SO_GETINTERFACEOPT, // todo + IOCTLV_SO_SETINTERFACEOPT, // todo + IOCTL_SO_SETINTERFACE, // todo + IOCTL_SO_STARTUP, // 0x1f + IOCTL_SO_ICMPSOCKET = 0x30, // todo + IOCTLV_SO_ICMPPING, // todo + IOCTL_SO_ICMPCANCEL, // todo + IOCTL_SO_ICMPCLOSE // todo +}; + +struct init_data { + u32 state; + s32 fd; + s32 prevres; + s32 result; + syswd_t alarm; + u32 retries; + netcallback cb; + void *usrdata; + u8 *buf; +}; + +struct init_default_cb { + lwpq_t queue; + s32 result; +}; + +struct bind_params { + u32 socket; + u32 has_name; + u8 name[28]; +}; + +struct connect_params { + u32 socket; + u32 has_addr; + u8 addr[28]; +}; + +struct sendto_params { + u32 socket; + u32 flags; + u32 has_destaddr; + u8 destaddr[28]; +}; + +struct setsockopt_params { + u32 socket; + u32 level; + u32 optname; + u32 optlen; + u8 optval[20]; +}; + +// 0 means we don't know what this error code means +// I sense a pattern here... +static u8 _net_error_code_map[] = { + 0, // 0 + E2BIG, + EACCES, + EADDRINUSE, + EADDRNOTAVAIL, + EAFNOSUPPORT, // 5 + EAGAIN, + EALREADY, + EBADFD, + EBADMSG, + EBUSY, // 10 + ECANCELED, + ECHILD, + ECONNABORTED, + ECONNREFUSED, + ECONNRESET, // 15 + EDEADLK, + EDESTADDRREQ, + EDOM, + EDQUOT, + EEXIST, // 20 + EFAULT, + EFBIG, + EHOSTUNREACH, + EIDRM, + EILSEQ, // 25 + EINPROGRESS, + EINTR, + EINVAL, + EIO, + EISCONN, // 30 + EISDIR, + ELOOP, + EMFILE, + EMLINK, + EMSGSIZE, // 35 + EMULTIHOP, + ENAMETOOLONG, + ENETDOWN, + ENETRESET, + ENETUNREACH, // 40 + ENFILE, + ENOBUFS, + ENODATA, + ENODEV, + ENOENT, // 45 + ENOEXEC, + ENOLCK, + ENOLINK, + ENOMEM, + ENOMSG, // 50 + ENOPROTOOPT, + ENOSPC, + ENOSR, + ENOSTR, + ENOSYS, // 55 + ENOTCONN, + ENOTDIR, + ENOTEMPTY, + ENOTSOCK, + ENOTSUP, // 60 + ENOTTY, + ENXIO, + EOPNOTSUPP, + EOVERFLOW, + EPERM, // 65 + EPIPE, + EPROTO, + EPROTONOSUPPORT, + EPROTOTYPE, + ERANGE, // 70 + EROFS, + ESPIPE, + ESRCH, + ESTALE, + ETIME, // 75 + ETIMEDOUT, +}; + +static volatile bool _init_busy = false; +static volatile bool _init_abort = false; +static vs32 _last_init_result = -ENETDOWN; +static s32 net_ip_top_fd = -1; +static u8 __net_heap_inited = 0; +static s32 __net_hid=-1; +static heap_cntrl __net_heap; + +static char __manage_fs[] ATTRIBUTE_ALIGN(32) = "/dev/net/ncd/manage"; +static char __iptop_fs[] ATTRIBUTE_ALIGN(32) = "/dev/net/ip/top"; +static char __kd_fs[] ATTRIBUTE_ALIGN(32) = "/dev/net/kd/request"; + +#define ROUNDDOWN32(v) (((u32)(v)-0x1f)&~0x1f) + +static s32 NetCreateHeap() +{ + u32 level; + void *net_heap_ptr; + + _CPU_ISR_Disable(level); + + if(__net_heap_inited) + { + _CPU_ISR_Restore(level); + return IPC_OK; + } + + net_heap_ptr = (void *)ROUNDDOWN32(((u32)SYS_GetArena2Hi() - NET_HEAP_SIZE)); + if((u32)net_heap_ptr < (u32)SYS_GetArena2Lo()) + { + _CPU_ISR_Restore(level); + return IPC_ENOMEM; + } + SYS_SetArena2Hi(net_heap_ptr); + __lwp_heap_init(&__net_heap, net_heap_ptr, NET_HEAP_SIZE, 32); + __net_heap_inited=1; + _CPU_ISR_Restore(level); + return IPC_OK; +} + +static void* net_malloc(u32 size) +{ + return __lwp_heap_allocate(&__net_heap, size); +} + +static BOOL net_free(void *ptr) +{ + return __lwp_heap_free(&__net_heap, ptr); +} + +static s32 _net_convert_error(s32 ios_retval) +{ +// return ios_retval; + if (ios_retval >= 0) return ios_retval; + if (ios_retval < -sizeof(_net_error_code_map) + || !_net_error_code_map[-ios_retval]) + return NET_UNKNOWN_ERROR_OFFSET + ios_retval; + return -_net_error_code_map[-ios_retval]; +} + +u32 net_gethostip(void) +{ + u32 ip_addr=0; + int retries; + + if (net_ip_top_fd < 0) return 0; + for (retries=0, ip_addr=0; !ip_addr && retries < 5; retries++) { + ip_addr = IOS_Ioctl(net_ip_top_fd, IOCTL_SO_GETHOSTID, 0, 0, 0, 0); +#ifdef DEBUG_NET + debug_printf("."); + fflush(stdout); +#endif + if (!ip_addr) + usleep(100000); + } + + return ip_addr; +} + +static s32 net_init_chain(s32 result, void *usrdata); + +static void net_init_alarm(syswd_t alarm, void *cb_arg) { + debug_printf("net_init alarm\n"); + net_init_chain(0, cb_arg); +} + +static s32 net_init_chain(s32 result, void *usrdata) { + struct init_data *data = (struct init_data *) usrdata; + struct timespec tb; + + debug_printf("net_init chain entered: %u %d\n", data->state, result); + + if (_init_abort) { + data->state = 0xff; + goto error; + } + + switch (data->state) { + case 0: // open manage fd + data->state = 1; + data->result = IOS_OpenAsync(__manage_fs, 0, net_init_chain, data); + if (data->result < 0) { + data->result = _net_convert_error(data->result); + goto done; + } + return 0; + + case 1: // get link status + if (result == IPC_ENOENT) { + debug_printf("IPC_ENOENT, retrying...\n"); + data->state = 0; + tb.tv_sec = 0; + tb.tv_nsec = 100000000; + data->result = SYS_SetAlarm(data->alarm, &tb, net_init_alarm, data); + if (data->result) { + debug_printf("error setting the alarm: %d\n", data->result); + goto done; + } + return 0; + } + + if (result < 0) { + data->result = _net_convert_error(result); + debug_printf("error opening the manage fd: %d\n", data->result); + goto done; + } + + data->fd = result; + data->state = 2; + data->result = IOS_IoctlvFormatAsync(__net_hid, data->fd, IOCTL_NCD_GETLINKSTATUS, net_init_chain, data, ":d", data->buf, 0x20); + if (data->result < 0) { + data->result = _net_convert_error(data->result); + data->state = 0xff; + if (IOS_CloseAsync(data->fd, net_init_chain, data) < 0) + goto done; + } + return 0; + + case 2: // close manage fd + data->prevres = result; + data->state = 3; + data->result = IOS_CloseAsync(data->fd, net_init_chain, data); + if (data->result < 0) { + data->result = _net_convert_error(data->result); + goto done; + } + return 0; + + case 3: // open top fd + if (data->prevres < 0) { + data->result = _net_convert_error(data->prevres); + debug_printf("invalid link status %d\n", data->result); + goto done; + } + + data->state = 4; + data->result = IOS_OpenAsync(__iptop_fs, 0, net_init_chain, data); + if (data->result < 0) { + data->result = _net_convert_error(data->result); + goto done; + } + return 0; + + case 4: // open request fd + if (result < 0) { + data->result = _net_convert_error(result); + debug_printf("error opening the top fd: %d\n", data->result); + goto done; + } + + net_ip_top_fd = result; + data->state = 5; + data->result = IOS_OpenAsync(__kd_fs, 0, net_init_chain, data); + if (data->result < 0) { + data->result = _net_convert_error(data->result); + data->state = 0xff; + goto error; + } + return 0; + + case 5: // NWC24 startup + if (result < 0) { + data->result = _net_convert_error(result); + debug_printf("error opening the request fd: %d\n", data->result); + data->state = 0xff; + goto error; + } + + data->fd = result; + data->retries = MAX_INIT_RETRIES; + case 6: + data->state = 7; + data->result = IOS_IoctlAsync(data->fd, IOCTL_NWC24_STARTUP, NULL, 0, data->buf, 0x20, net_init_chain, data); + if (data->result < 0) { + data->result = _net_convert_error(data->result); + data->state = 0xff; + if (IOS_CloseAsync(data->fd, net_init_chain, data) < 0) + goto done; + } + return 0; + case 7: + if (result==0) { + memcpy(&result, data->buf, sizeof(result)); + if(result==-29 && --data->retries) { + data->state = 6; + tb.tv_sec = 0; + tb.tv_nsec = 100000000; + data->result = SYS_SetAlarm(data->alarm, &tb, net_init_alarm, data); + if (data->result) { + data->state = 0xff; + debug_printf("error setting the alarm: %d\n", data->result); + if (IOS_CloseAsync(data->fd, net_init_chain, data) < 0) + goto error; + } + return 0; + } else if (result == -15) // this happens if it's already been started + result = 0; + } + + data->prevres = result; + data->state = 8; + data->result = IOS_CloseAsync(data->fd, net_init_chain, data); + if (data->result < 0) { + data->result = _net_convert_error(data->result); + data->state = 0xff; + goto error; + } + return 0; + + case 8: // socket startup + if (data->prevres < 0) { + data->result = _net_convert_error(data->prevres); + debug_printf("NWC24 startup failed: %d\n", data->result); + data->state = 0xff; + goto error; + } + + data->state = 9; + data->retries = MAX_IP_RETRIES; + data->result = IOS_IoctlAsync(net_ip_top_fd, IOCTL_SO_STARTUP, 0, 0, 0, 0, net_init_chain, data); + if (data->result < 0) { + data->result = _net_convert_error(data->result); + data->state = 0xff; + goto error; + } + return 0; + + case 9: // check ip + if (result < 0) { + data->result = _net_convert_error(result); + debug_printf("socket startup failed: %d\n", data->result); + data->state = 0xff; + goto error; + } + + data->state = 10; + data->result = IOS_IoctlAsync(net_ip_top_fd, IOCTL_SO_GETHOSTID, 0, 0, 0, 0, net_init_chain, data); + if (data->result < 0) { + data->result = _net_convert_error(data->result); + data->state = 0xff; + goto error; + } + return 0; + + case 10: // done, check result + if (result == 0) { + if (!data->retries) { + data->result = -ETIMEDOUT; + debug_printf("unable to obtain ip\n"); + data->state = 0xff; + goto error; + } + + debug_printf("unable to obtain ip, retrying...\n"); + data->state = 9; + data->retries--; + tb.tv_sec = 0; + tb.tv_nsec = 100000000; + data->result = SYS_SetAlarm(data->alarm, &tb, net_init_alarm, data); + if (data->result) { + data->state = 0xff; + debug_printf("error setting the alarm: %d\n", data->result); + goto error; + } + return 0; + } + + data->result = 0; + goto done; + +error: + case 0xff: // error occured before, last async call finished + if (net_ip_top_fd >= 0) { + data->fd = net_ip_top_fd; + net_ip_top_fd = -1; + if (IOS_CloseAsync(data->fd, net_init_chain, data) < 0) + goto done; + return 0; + } + goto done; + + default: + debug_printf("unknown state in chain %d\n", data->state); + data->result = -1; + + break; + } + +done: + SYS_RemoveAlarm(data->alarm); + + _last_init_result = data->result; + + if (data->cb) + data->cb(data->result, data->usrdata); + + free(data->buf); + free(data); + + _init_busy = false; + + return 0; +} + +s32 net_init_async(netcallback cb, void *usrdata) { + s32 ret; + struct init_data *data; + + if (net_ip_top_fd >= 0) + return 0; + + if (_init_busy) + return -EBUSY; + + ret = NetCreateHeap(); + if (ret != IPC_OK) + return ret; + + if (__net_hid == -1) + __net_hid = iosCreateHeap(1024); //only needed for ios calls + + if (__net_hid < 0) + return __net_hid; + + data = malloc(sizeof(struct init_data)); + if (!data) + return -1; + + memset(data, 0, sizeof(struct init_data)); + + if (SYS_CreateAlarm(&data->alarm)) { + debug_printf("error creating alarm\n"); + free(data); + return -1; + } + + data->buf = memalign(32, 0x20); + if (!data->buf) { + free(data); + return -1; + } + + data->cb = cb; + data->usrdata = usrdata; + + // kick off the callback chain + _init_busy = true; + _init_abort = false; + _last_init_result = -EBUSY; + net_init_chain(IPC_ENOENT, data); + + return 0; +} + +static void net_init_callback(s32 result, void *usrdata) { + struct init_default_cb *data = (struct init_default_cb *) usrdata; + + data->result = result; + LWP_ThreadBroadcast(data->queue); + + return; +} + +s32 net_init(void) { + struct init_default_cb data; + + if (net_ip_top_fd >= 0) + return 0; + + LWP_InitQueue(&data.queue); + net_init_async((netcallback)net_init_callback, &data); + LWP_ThreadSleep(data.queue); + LWP_CloseQueue(data.queue); + + return data.result; +} + +s32 net_get_status(void) { + return _last_init_result; +} + +void net_deinit() { + if (_init_busy) { + debug_printf("aborting net_init_async\n"); + _init_abort = true; + while (_init_busy) + usleep(50); + debug_printf("net_init_async done\n"); + } + + if (net_ip_top_fd >= 0) IOS_Close(net_ip_top_fd); + net_ip_top_fd = -1; + _last_init_result = -ENETDOWN; +} + +void net_wc24cleanup() { + s32 kd_fd; + STACK_ALIGN(u8, kd_buf, 0x20, 32); + + kd_fd = IOS_Open(__kd_fs, 0); + if (kd_fd >= 0) { + IOS_Ioctl(kd_fd, 7, NULL, 0, kd_buf, 0x20); + IOS_Close(kd_fd); + } +} + +s32 net_get_mac_address(void *mac_buf) { + s32 fd; + s32 result; + void *_mac_buf; + STACK_ALIGN(u32, manage_buf, 0x20, 32); + + if (mac_buf==NULL) return -EINVAL; + + result = NetCreateHeap(); + if (result!=IPC_OK) return result; + + _mac_buf = net_malloc(6); + if (_mac_buf==NULL) return IPC_ENOMEM; + + fd = IOS_Open(__manage_fs, 0); + if (fd<0) { + net_free(_mac_buf); + return fd; + } + + result = IOS_IoctlvFormat(__net_hid, fd, IOCTLV_NCD_GETMACADDRESS, ":dd", manage_buf, 0x20, _mac_buf, 0x06); + IOS_Close(fd); + + if (result>=0) { + memcpy(mac_buf, _mac_buf, 6); + if (manage_buf[0]) result = manage_buf[0]; + } + + net_free(_mac_buf); + return result; +} + +/* Returned value is a static buffer -- this function is not threadsafe! */ +struct hostent * net_gethostbyname(const char *addrString) +{ + s32 ret, len, i; + u8 *params; + struct hostent *ipData; + u32 addrOffset; + static u8 ipBuffer[0x460] ATTRIBUTE_ALIGN(32); + + memset(ipBuffer, 0, 0x460); + + if (net_ip_top_fd < 0) { + errno = -ENXIO; + return NULL; + } + + len = strlen(addrString) + 1; + params = net_malloc(len); + if (params==NULL) { + errno = IPC_ENOMEM; + return NULL; + } + + memcpy(params, addrString, len); + + ret = _net_convert_error(IOS_Ioctl(net_ip_top_fd, IOCTL_SO_GETHOSTBYNAME, params, len, ipBuffer, 0x460)); + + if(params!=NULL) net_free(params); + + if (ret < 0) { + errno = ret; + return NULL; + } + + ipData = ((struct hostent*)ipBuffer); + addrOffset = (u32)MEM_PHYSICAL_TO_K0(ipData->h_name) - ((u32)ipBuffer + 0x10); + + ipData->h_name = MEM_PHYSICAL_TO_K0(ipData->h_name) - addrOffset; + ipData->h_aliases = MEM_PHYSICAL_TO_K0(ipData->h_aliases) - addrOffset; + + for (i=0; (i < 0x40) && (ipData->h_aliases[i] != 0); i++) { + ipData->h_aliases[i] = MEM_PHYSICAL_TO_K0(ipData->h_aliases[i]) - addrOffset; + } + + ipData->h_addr_list = MEM_PHYSICAL_TO_K0(ipData->h_addr_list) - addrOffset; + + for (i=0; (i < 0x40) && (ipData->h_addr_list[i] != 0); i++) { + ipData->h_addr_list[i] = MEM_PHYSICAL_TO_K0(ipData->h_addr_list[i]) - addrOffset; + } + + errno = 0; + return ipData; +} + +s32 net_socket(u32 domain, u32 type, u32 protocol) +{ + s32 ret; + STACK_ALIGN(u32, params, 3, 32); + + if (net_ip_top_fd < 0) return -ENXIO; + + params[0] = domain; + params[1] = type; + params[2] = protocol; + + ret = _net_convert_error(IOS_Ioctl(net_ip_top_fd, IOCTL_SO_SOCKET, params, 12, NULL, 0)); + if(ret>=0) // set tcp window size to 32kb + { + int window_size = 32768; + net_setsockopt(ret, SOL_SOCKET, SO_RCVBUF, (char *) &window_size, sizeof(window_size)); + } + debug_printf("net_socket(%d, %d, %d)=%d\n", domain, type, protocol, ret); + return ret; +} + +s32 net_shutdown(s32 s, u32 how) +{ + s32 ret; + STACK_ALIGN(u32, params, 2, 32); + + if (net_ip_top_fd < 0) return -ENXIO; + + params[0] = s; + params[1] = how; + ret = _net_convert_error(IOS_Ioctl(net_ip_top_fd, IOCTL_SO_SHUTDOWN, params, 8, NULL, 0)); + + debug_printf("net_shutdown(%d, %d)=%d\n", s, how, ret); + return ret; +} + +s32 net_bind(s32 s, struct sockaddr *name, socklen_t namelen) +{ + s32 ret; + STACK_ALIGN(struct bind_params,params,1,32); + + if (net_ip_top_fd < 0) return -ENXIO; + if (name->sa_family != AF_INET) return -EAFNOSUPPORT; + + name->sa_len = 8; + + memset(params, 0, sizeof(struct bind_params)); + params->socket = s; + params->has_name = 1; + memcpy(params->name, name, 8); + + ret = _net_convert_error(IOS_Ioctl(net_ip_top_fd, IOCTL_SO_BIND, params, sizeof (struct bind_params), NULL, 0)); + debug_printf("net_bind(%d, %p)=%d\n", s, name, ret); + + return ret; +} + +s32 net_listen(s32 s, u32 backlog) +{ + s32 ret; + STACK_ALIGN(u32, params, 2, 32); + + if (net_ip_top_fd < 0) return -ENXIO; + + params[0] = s; + params[1] = backlog; + + debug_printf("calling ios_ioctl(%d, %d, %p, %d)\n", net_ip_top_fd, IOCTL_SO_SOCKET, params, 8); + + ret = _net_convert_error(IOS_Ioctl(net_ip_top_fd, IOCTL_SO_LISTEN, params, 8, NULL, 0)); + debug_printf("net_listen(%d, %d)=%d\n", s, backlog, ret); + return ret; +} + +s32 net_accept(s32 s, struct sockaddr *addr, socklen_t *addrlen) +{ + s32 ret; + STACK_ALIGN(u32, _socket, 1, 32); + + debug_printf("net_accept()\n"); + + if (net_ip_top_fd < 0) return -ENXIO; + + if (!addr) return -EINVAL; + addr->sa_len = 8; + addr->sa_family = AF_INET; + + if (!addrlen) return -EINVAL; + + if (*addrlen < 8) return -ENOMEM; + + *addrlen = 8; + + *_socket = s; + debug_printf("calling ios_ioctl(%d, %d, %p, %d)\n", net_ip_top_fd, IOCTL_SO_ACCEPT, _socket, 4); + ret = _net_convert_error(IOS_Ioctl(net_ip_top_fd, IOCTL_SO_ACCEPT, _socket, 4, addr, *addrlen)); + + debug_printf("net_accept(%d, %p)=%d\n", s, addr, ret); + return ret; +} + +s32 net_connect(s32 s, struct sockaddr *addr, socklen_t addrlen) +{ + s32 ret; + STACK_ALIGN(struct connect_params,params,1,32); + + if (net_ip_top_fd < 0) return -ENXIO; + if (addr->sa_family != AF_INET) return -EAFNOSUPPORT; + if (addrlen < 8) return -EINVAL; + + addr->sa_len = 8; + + memset(params, 0, sizeof(struct connect_params)); + params->socket = s; + params->has_addr = 1; + memcpy(¶ms->addr, addr, addrlen); + + ret = _net_convert_error(IOS_Ioctl(net_ip_top_fd, IOCTL_SO_CONNECT, params, sizeof(struct connect_params), NULL, 0)); + if (ret < 0) + debug_printf("SOConnect(%d, %p)=%d\n", s, addr, ret); + + return ret; +} + +s32 net_write(s32 s, const void *data, s32 size) +{ + return net_send(s, data, size, 0); +} + +s32 net_send(s32 s, const void *data, s32 size, u32 flags) +{ + return net_sendto(s, data, size, flags, NULL, 0); +} + +s32 net_sendto(s32 s, const void *data, s32 len, u32 flags, struct sockaddr *to, socklen_t tolen) +{ + s32 ret; + u8 * message_buf = NULL; + STACK_ALIGN(struct sendto_params,params,1,32); + + if (net_ip_top_fd < 0) return -ENXIO; + if (tolen > 28) return -EOVERFLOW; + + message_buf = net_malloc(len); + if (message_buf == NULL) { + debug_printf("net_send: failed to alloc %d bytes\n", len); + return IPC_ENOMEM; + } + + debug_printf("net_sendto(%d, %p, %d, %d, %p, %d)\n", s, data, len, flags, to, tolen); + + if (to && to->sa_len != tolen) { + debug_printf("warning: to->sa_len was %d, setting to %d\n", to->sa_len, tolen); + to->sa_len = tolen; + } + + memset(params, 0, sizeof(struct sendto_params)); + memcpy(message_buf, data, len); // ensure message buf is aligned + + params->socket = s; + params->flags = flags; + if (to) { + params->has_destaddr = 1; + memcpy(params->destaddr, to, to->sa_len); + } else { + params->has_destaddr = 0; + } + + ret = _net_convert_error(IOS_IoctlvFormat(__net_hid, net_ip_top_fd, IOCTLV_SO_SENDTO, "dd:", message_buf, len, params, sizeof(struct sendto_params))); + debug_printf("net_send retuned %d\n", ret); + + if(message_buf!=NULL) net_free(message_buf); + return ret; +} + +s32 net_recv(s32 s, void *mem, s32 len, u32 flags) +{ + return net_recvfrom(s, mem, len, flags, NULL, NULL); +} + +s32 net_recvfrom(s32 s, void *mem, s32 len, u32 flags, struct sockaddr *from, socklen_t *fromlen) +{ + s32 ret; + u8* message_buf = NULL; + STACK_ALIGN(u32, params, 2, 32); + + if (net_ip_top_fd < 0) return -ENXIO; + if (len<=0) return -EINVAL; + + if (fromlen && from->sa_len != *fromlen) { + debug_printf("warning: from->sa_len was %d, setting to %d\n",from->sa_len, *fromlen); + from->sa_len = *fromlen; + } + + message_buf = net_malloc(len); + if (message_buf == NULL) { + debug_printf("SORecv: failed to alloc %d bytes\n", len); + return IPC_ENOMEM; + } + + debug_printf("net_recvfrom(%d, '%s', %d, %d, %p, %d)\n", s, (char *)mem, len, flags, from, fromlen?*fromlen:0); + + memset(message_buf, 0, len); + params[0] = s; + params[1] = flags; + + ret = _net_convert_error(IOS_IoctlvFormat(__net_hid, net_ip_top_fd, IOCTLV_SO_RECVFROM, "d:dd", params, 8, message_buf, len, from, (fromlen?*fromlen:0))); + debug_printf("net_recvfrom returned %d\n", ret); + + if (ret > 0) { + if (ret > len) { + ret = -EOVERFLOW; + goto done; + } + + memcpy(mem, message_buf, ret); + } + + if (fromlen && from) *fromlen = from->sa_len; + +done: + if(message_buf!=NULL) net_free(message_buf); + return ret; +} + +s32 net_read(s32 s, void *mem, s32 len) +{ + return net_recvfrom(s, mem, len, 0, NULL, NULL); +} + +s32 net_close(s32 s) +{ + s32 ret; + STACK_ALIGN(u32, _socket, 1, 32); + + if (net_ip_top_fd < 0) return -ENXIO; + + *_socket = s; + ret = _net_convert_error(IOS_Ioctl(net_ip_top_fd, IOCTL_SO_CLOSE, _socket, 4, NULL, 0)); + + if (ret < 0) + debug_printf("net_close(%d)=%d\n", s, ret); + + return ret; +} + +s32 net_select(s32 maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset, struct timeval *timeout) +{ + // not yet implemented + return -EINVAL; +} + +s32 net_setsockopt(s32 s, u32 level, u32 optname, const void *optval, socklen_t optlen) +{ + s32 ret; + STACK_ALIGN(struct setsockopt_params,params,1,32); + + if (net_ip_top_fd < 0) return -ENXIO; + if (optlen < 0 || optlen > 20) return -EINVAL; + + memset(params, 0, sizeof(struct setsockopt_params)); + params->socket = s; + params->level = level; + params->optname = optname; + params->optlen = optlen; + if (optval && optlen) memcpy (params->optval, optval, optlen); + + ret = _net_convert_error(IOS_Ioctl(net_ip_top_fd, IOCTL_SO_SETSOCKOPT, params, sizeof(struct setsockopt_params), NULL, 0)); + + debug_printf("net_setsockopt(%d, %u, %u, %p, %d)=%d\n", s, level, optname, optval, optlen, ret); + return ret; +} + +s32 net_ioctl(s32 s, u32 cmd, void *argp) +{ + u32 flags; + u32 *intp = (u32 *)argp; + + if (net_ip_top_fd < 0) return -ENXIO; + if (!intp) return -EINVAL; + + switch (cmd) { + case FIONBIO: + flags = net_fcntl(s, F_GETFL, 0); + flags &= ~IOS_O_NONBLOCK; + if (*intp) flags |= IOS_O_NONBLOCK; + return net_fcntl(s, F_SETFL, flags); + default: + return -EINVAL; + } +} + +s32 net_fcntl(s32 s, u32 cmd, u32 flags) +{ + s32 ret; + STACK_ALIGN(u32, params, 3, 32); + + if (net_ip_top_fd < 0) return -ENXIO; + if (cmd != F_GETFL && cmd != F_SETFL) return -EINVAL; + + + params[0] = s; + params[1] = cmd; + params[2] = flags; + + ret = _net_convert_error(IOS_Ioctl(net_ip_top_fd, IOCTL_SO_FCNTL, params, 12, NULL, 0)); + + debug_printf("net_fcntl(%d, %d, %x)=%d\n", params[0], params[1], params[2], ret); + + return ret; +} + + +/*! + * \fn s32 net_poll(struct pollsd *sds, u32 nsds, s64 timeout) + * \brief Poll a set of sockets for a set of events. + * + * \param[in] sds a pointer to an array of pollsd structures + * \param[in] nsds the number of elements in the sds array + * \param[in] time in milliseconds before the function should timeout + * + * \return the number of structures in sds that now have non-zero revent fields + */ +s32 net_poll(struct pollsd *sds,s32 nsds,s32 timeout) +{ + union ullc { + u64 ull; + u32 ul[2]; + }; + + s32 ret; + union ullc outv; + struct pollsd *psds; + STACK_ALIGN(u64,params,1,32); + + if(net_ip_top_fd<0) return -ENXIO; + if(sds==NULL || nsds==0) return -EINVAL; + + psds = net_malloc((nsds*sizeof(struct pollsd))); + if(psds==NULL) { + debug_printf("net_poll: failed to alloc %d bytes\n", nsds * sizeof(struct pollsd)); + return IPC_ENOMEM; + } + + outv.ul[0] = 0; + outv.ul[1] = timeout; + params[0] = outv.ull; + memcpy(psds,sds,(nsds*sizeof(struct pollsd))); + + ret = _net_convert_error(IOS_Ioctl(net_ip_top_fd, IOCTL_SO_POLL, params, 8, psds, (nsds * sizeof(struct pollsd)))); + + memcpy(sds,psds,(nsds*sizeof(struct pollsd))); + + net_free(psds); + + debug_printf("net_poll(sds, %d, %lld)=%d\n", nsds, params[0], ret); + + return ret; +} + +s32 if_config(char *local_ip, char *netmask, char *gateway,bool use_dhcp, int max_retries) +{ + s32 i,ret; + struct in_addr hostip; + + if (!use_dhcp) + return -EINVAL; + + for (i = 0; i < MAX_INIT_RETRIES; ++i) { + ret = net_init(); + + if ((ret != -EAGAIN) && (ret != -ETIMEDOUT)) + break; + + usleep(50 * 1000); + } + + if (ret < 0) + return ret; + + hostip.s_addr = net_gethostip(); + if (local_ip && hostip.s_addr) { + strcpy(local_ip, inet_ntoa(hostip)); + return 0; + } + + return -1; +} + +s32 if_configex(struct in_addr *local_ip, struct in_addr *netmask, struct in_addr *gateway,bool use_dhcp, int max_retries) +{ + s32 i,ret; + struct in_addr hostip; + + if (!use_dhcp) + return -EINVAL; + + for (i = 0; i < MAX_INIT_RETRIES; ++i) { + ret = net_init(); + + if ((ret != -EAGAIN) && (ret != -ETIMEDOUT)) + break; + + usleep(50 * 1000); + } + + if (ret < 0) + return ret; + + hostip.s_addr = net_gethostip(); + if (local_ip && hostip.s_addr) { + *local_ip = hostip; + return 0; + } + + return -1; +} + +#endif /* defined(HW_RVL) */ diff --git a/wii/libogc/libogc/newlibc.c b/wii/libogc/libogc/newlibc.c new file mode 100644 index 0000000000..c9ab5624fa --- /dev/null +++ b/wii/libogc/libogc/newlibc.c @@ -0,0 +1,72 @@ +#include +#include +#include +#include "sys_state.h" +#include "lwp_threads.h" + +int libc_reentrant; +struct _reent libc_globl_reent; + +extern void _wrapup_reent(struct _reent *); +extern void _reclaim_reent(struct _reent *); + +int __libc_create_hook(lwp_cntrl *curr_thr,lwp_cntrl *create_thr) +{ + create_thr->libc_reent = NULL; + return 1; +} + +int __libc_start_hook(lwp_cntrl *curr_thr,lwp_cntrl *start_thr) +{ + struct _reent *ptr; + + ptr = (struct _reent*)calloc(1,sizeof(struct _reent)); + if(!ptr) abort(); + + _REENT_INIT_PTR((ptr)); + + start_thr->libc_reent = ptr; + return 1; +} + +int __libc_delete_hook(lwp_cntrl *curr_thr, lwp_cntrl *delete_thr) +{ + struct _reent *ptr; + + if(curr_thr==delete_thr) + ptr = _REENT; + else + ptr = (struct _reent*)delete_thr->libc_reent; + + if(ptr && ptr!=&libc_globl_reent) { + _reclaim_reent(ptr); + free(ptr); + } + delete_thr->libc_reent = 0; + + if(curr_thr==delete_thr) _REENT = 0; + + return 1; +} + +void __libc_init(int reentrant) +{ + libc_globl_reent = (struct _reent)_REENT_INIT((libc_globl_reent)); + _REENT = &libc_globl_reent; + + if(reentrant) { + __lwp_thread_setlibcreent((void*)&_REENT); + libc_reentrant = reentrant; + } +} + +void __libc_wrapup() +{ + if(!__sys_state_up(__sys_state_get())) return; + if(_REENT!=&libc_globl_reent) { + _wrapup_reent(&libc_globl_reent); + _REENT = &libc_globl_reent; + } +} + + diff --git a/wii/libogc/libogc/ogc_crt0.S b/wii/libogc/libogc/ogc_crt0.S new file mode 100644 index 0000000000..57f56026b3 --- /dev/null +++ b/wii/libogc/libogc/ogc_crt0.S @@ -0,0 +1,157 @@ +#include + + .text + .section .init + + # crt0.s file for the GameCube V1.1 by Costis (costis@gbaemu.com)! + # + # Updates: Added support for clearing the BSS section so that global + # variables are cleared to 0 upon start-up. + # + # This is start-up code for initializing the GameCube system and hardware + # before executing the actual user program code. It clears the GPR's, + # initializes the FPR's, initializes the Data, Code, and L2 caches, clears + # and initializes SPR's, and disables exceptions (interrupts). + # + # Have fun!!! Please e-mail any suggestions or bugs to costis@gbaemu.com. + + # Entry Point + + .extern __InitBATS + .extern __InitPS + .extern __InitFPRS + .extern __InitCache + .extern __InitSystem + .extern __sbss_start, __bss_end, __CheckARGV + .globl _start, __main, __system_argv +_start: + b startup + .long 0x5f617267 +__argv: + .long 0 # argv magic + .long 0 # command line + .long 0 # command line length + .long 0 # argc + .long 0 # argv + .long 0 # end address of argv + +startup: + bl __InitBATS # Initialize BATs to a clear and known state + bl __InitGPRS # Initialize the General Purpose Registers + bl __InitHardware # Initialize some aspects of the Hardware + bl __InitSystem # Initialize more cache aspects, clear a few SPR's, and disable interrupts. + + bl __CheckARGV # check for argv & initialise struct + + lis r3,__isIPL@h + ori r3,r3,__isIPL@l + cmplwi r3,0 + bne 1f + + # Clear the SBSS section! + lis r3,__sbss_start@h + ori r3,r3,__sbss_start@l + li r4,0 + lis r5,__sbss_end@h + ori r5,r5,__sbss_end@l + sub r5,r5,r3 + bl _memset + + # Clear the BSS section! + lis r3,__bss_start@h + ori r3,r3,__bss_start@l + li r4,0 + lis r5,__bss_end@h + ori r5,r5,__bss_end@l + sub r5,r5,r3 + bl _memset + +1: + b SYS_Init # Branch to the user code! + +__InitGPRS: + # Clear all of the GPR's to 0 + li r0,0 + li r3,0 + li r4,0 + li r5,0 + li r6,0 + li r7,0 + li r8,0 + li r9,0 + li r10,0 + li r11,0 + li r12,0 + li r14,0 + li r15,0 + li r16,0 + li r17,0 + li r18,0 + li r19,0 + li r20,0 + li r21,0 + li r22,0 + li r23,0 + li r24,0 + li r25,0 + li r26,0 + li r27,0 + li r28,0 + li r29,0 + li r30,0 + li r31,0 + + lis sp,__crt0stack@h # we take 0x8173FFF0 as the topmost starting point for our stack,this gives us ~128Kb Stack + ori sp,sp,__crt0stack@l + addi sp,sp,-4 + stw r0,0(sp) + stwu sp,-56(sp) + + lis r2,_SDA2_BASE_@h + ori r2,r2,_SDA2_BASE_@l # Set the Small Data 2 (Read Only) base register. + lis r13,_SDA_BASE_@h + ori r13,r13,_SDA_BASE_@l # Set the Small Data (Read\Write) base register. + blr + +__InitHardware: + # Enable the Floating Point Registers + mfmsr r3 + ori r3,r3,MSR_FP + mtmsr r3 + + mflr r31 + bl __InitPS # Initialize Paired Singles + bl __InitFPRS # Initialize the FPR's + bl __InitCache # Initialize the system caches + mtlr r31 + blr + + //r3 = ptr, r4 = fill, r5 = size + .globl _memset +_memset: + clrlwi. r6,r5,29 + srwi r5,r5,2 + subi r3,r3,4 + mtctr r5 +1: stwu r4,4(r3) + bdnz 1b + cmplwi r6,0 + beq 3f +2: stbu r4,1(r3) + addic. r6,r6,-1 + bne+ 2b +3: blr + + .section .bss + .balign 8 +__crt0stack_end: + .space 0x4000 +__crt0stack: + + .globl __system_argv + .section .sdata,"aw",@progbits + .align 2 + .type __system_argv, @object + .size __system_argv, 4 +__system_argv: + .long __argv diff --git a/wii/libogc/libogc/pad.c b/wii/libogc/libogc/pad.c new file mode 100644 index 0000000000..8a77a8b278 --- /dev/null +++ b/wii/libogc/libogc/pad.c @@ -0,0 +1,756 @@ +#include +#include +#include +#include +#include +#include +#include +#include "asm.h" +#include "processor.h" +#include "si.h" +#include "pad.h" + +#define PAD_PRODPADS 6 + +#define _SHIFTL(v, s, w) \ + ((u32) (((u32)(v) & ((0x01 << (w)) - 1)) << (s))) +#define _SHIFTR(v, s, w) \ + ((u32)(((u32)(v) >> (s)) & ((0x01 << (w)) - 1))) + +#define PAD_ENABLEDMASK(chan) (0x80000000>>chan); + +typedef struct _keyinput { + s8 stickX; + s8 stickY; + s8 substickX; + s8 substickY; + u8 triggerL; + u8 triggerR; + u16 up; + u16 down; + u16 state; + u32 chan; +} keyinput; + +typedef void (*SPECCallback)(u32,u32*,PADStatus*); + +static sampling_callback __pad_samplingcallback = NULL; +static SPECCallback __pad_makestatus = NULL; +static u32 __pad_initialized = 0; +static u32 __pad_enabledbits = 0; +static u32 __pad_resettingbits = 0; +static u32 __pad_recalibratebits = 0; +static u32 __pad_waitingbits = 0; +static u32 __pad_pendingbits = 0; +static u32 __pad_checkingbits = 0; +static u32 __pad_resettingchan = 32; +static u32 __pad_spec = 5; + +static u32 __pad_analogmode = 0x00000300; +static u32 __pad_cmdreadorigin = 0x41000000; +static u32 __pad_cmdcalibrate = 0x42000000; +static u32 __pad_xpatchbits = 0xf0000000; + +static u32 __pad_recalibrated$207 = 0; + +static u32 __pad_type[PAD_CHANMAX]; +static s8 __pad_origin[PAD_CHANMAX][12]; +static u32 __pad_cmdprobedevice[PAD_CHANMAX]; + +static keyinput __pad_keys[PAD_CHANMAX]; +static u8 __pad_clampregion[8] = {30, 180, 15, 72, 40, 15, 59, 31}; + +static vu32* const _siReg = (u32*)0xCC006400; +static vu16* const _viReg = (u16*)0xCC002000; + +extern u32 __PADFixBits; + +static void __pad_enable(u32 chan); +static void __pad_disable(u32 chan); +static void __pad_doreset(); +static s32 __pad_onreset(s32 final); + +static sys_resetinfo pad_resetinfo = { + {}, + __pad_onreset, + 127 +}; + +extern void udelay(int); + +static s32 __pad_onreset(s32 final) +{ + u32 ret; + + if(__pad_samplingcallback!=NULL) PAD_SetSamplingCallback(NULL); + + if(final==FALSE) { + ret = PAD_Sync(); + if(__pad_recalibrated$207==0 && ret) { + __pad_recalibrated$207 = PAD_Recalibrate(0xf0000000); + return 0; + } + return ret; + } + __pad_recalibrated$207 = 0; + return 1; +} + +static void SPEC0_MakeStatus(u32 chan,u32 *data,PADStatus *status) +{ + status->button = 0; + + if(data[0]&0x00080000) status->button |= 0x0100; + if(data[0]&0x00200000) status->button |= 0x0200; + if(data[0]&0x01000000) status->button |= 0x0400; + if(data[0]&0x00010000) status->button |= 0x0800; + if(data[0]&0x00100000) status->button |= 0x1000; + + status->stickX = (s8)(data[1]>>16); + status->stickY = (s8)(data[1]>>24); + status->substickX = (s8)data[1]; + status->substickY = (s8)(data[1]>>8); + status->triggerL = (u8)_SHIFTR(data[0],8,8); + status->triggerR = (u8)(data[0]&0xff); + status->analogA = 0; + status->analogB = 0; + + if(status->triggerL>=0xaa) status->button |= 0x40; + if(status->triggerR>=0xaa) status->button |= 0x20; + + status->stickX -= 128; + status->stickY -= 128; + status->substickX -= 128; + status->substickY -= 128; +} + +static void SPEC1_MakeStatus(u32 chan,u32 *data,PADStatus *status) +{ + status->button = 0; + + if(data[0]&0x00800000) status->button |= 0x0100; + if(data[0]&0x01000000) status->button |= 0x0200; + if(data[0]&0x00200000) status->button |= 0x0400; + if(data[0]&0x00100000) status->button |= 0x0800; + if(data[0]&0x02000000) status->button |= 0x1000; + + status->stickX = (s8)(data[1]>>16); + status->stickY = (s8)(data[1]>>24); + status->substickX = (s8)data[1]; + status->substickY = (s8)(data[1]>>8); + status->triggerL = (u8)_SHIFTR(data[0],8,8); + status->triggerR = (u8)data[0]&0xff; + status->analogA = 0; + status->analogB = 0; + + if(status->triggerL>=0xaa) status->button |= 0x40; + if(status->triggerR>=0xaa) status->button |= 0x20; + + status->stickX -= 128; + status->stickY -= 128; + status->substickX -= 128; + status->substickY -= 128; +} + +static s8 __pad_clampS8(s8 var,s8 org) +{ + s32 siorg = (s32)org; + if(siorg>0) { + siorg -= 128; + if((s32)varbutton = _SHIFTR(data[0],16,14); + + status->stickX = (s8)(data[0]>>8); + status->stickY = (s8)data[0]; + mode = __pad_analogmode&0x0700; + if(mode==0x100) { + status->substickX = (s8)((data[1]>>24)&0xf0); + status->substickY = (s8)((data[1]>>8)&0xff); + status->triggerL = (u8)((data[1]>>16)&0xff); + status->triggerR = (u8)((data[1]>>8)&0xff); + status->analogA = (u8)(data[1]&0xf0); + status->analogB = (u8)((data[1]<<4)&0xf0); + } else if(mode==0x200) { + status->substickX = (s8)((data[1]>>24)&0xf0); + status->substickY = (s8)((data[1]>>20)&0xf0); + status->triggerL = (u8)((data[1]>>16)&0xf0); + status->triggerR = (u8)((data[1]>>12)&0xf0); + status->analogA = (u8)((data[1]>>8)&0xff); + status->analogB = (s8)data[1]&0xff; + } else if(mode==0x300) { + status->substickX = (s8)((data[1]>>24)&0xff); + status->substickY = (s8)((data[1]>>16)&0xff); + status->triggerL = (u8)((data[1]>>8)&0xff); + status->triggerR = (u8)data[1]&0xff; + status->analogA = 0; + status->analogB = 0; + } else if(mode==0x400) { + status->substickX = (s8)((data[1]>>24)&0xff); + status->substickY = (s8)((data[1]>>16)&0xff); + status->triggerL = 0; + status->triggerR = 0; + status->analogA = (u8)((data[1]>>8)&0xff); + status->analogB = (u8)data[1]&0xff ; + } else if(!mode || mode==0x500 || mode==0x600 || mode==0x700) { + status->substickX = (s8)((data[1]>>24)&0xff); + status->substickY = (s8)((data[1]>>16)&0xff); + status->triggerL = (u8)((data[1]>>8)&0xf0); + status->triggerR = (u8)((data[1]>>4)&0xf0); + status->analogA = (u8)(data[1]&0xf0); + status->analogB = (u8)((data[1]<<4)&0xf0); + } + + status->stickX -= 128; + status->stickY -= 128; + status->substickX -= 128; + status->substickY -= 128; + status->stickX = __pad_clampS8(status->stickX,__pad_origin[chan][2]); + status->stickY = __pad_clampS8(status->stickY,__pad_origin[chan][3]); + status->substickX = __pad_clampS8(status->substickX,__pad_origin[chan][4]); + status->substickY = __pad_clampS8(status->substickY,__pad_origin[chan][5]); + status->triggerL = __pad_clampU8(status->triggerL,__pad_origin[chan][6]); + status->triggerR = __pad_clampU8(status->triggerR,__pad_origin[chan][7]); +} + +static void __pad_clampstick(s8 *px,s8 *py,s8 max,s8 xy,s8 min) +{ + s32 x,y,signX,signY,d; + + x = *px; + y = *py; + if(x>=0) signX = 1; + else { signX = -1; x = -(x); } + + if(y>=0) signY = 1; + else { signY = -1; y = -(y); } + + if(x<=min) x = 0; + else x -= min; + + if(y<=min) y = 0; + else y -= min; + + if(x!=0 || y!=0) { + s32 xx,yy,maxy; + + xx = (x * xy); + yy= (y * xy); + maxy = (max * xy); + if(yy<=xx) { + d = ((x * xy) + (y * (max - xy))); + if(maxy*trigger) *trigger = 0; + else if(max<*trigger) *trigger = (max - min); + else *trigger -= min; +} + +static void __pad_updateorigin(s32 chan) +{ + u32 mode,mask,type; + + mask = PAD_ENABLEDMASK(chan); + mode = __pad_analogmode&0x0700; + if(mode==0x0100) { + __pad_origin[chan][4] &= ~0x0f; + __pad_origin[chan][5] &= ~0x0f; + __pad_origin[chan][8] &= ~0x0f; + __pad_origin[chan][9] &= ~0x0f; + } else if(mode==0x200) { + __pad_origin[chan][4] &= ~0x0f; + __pad_origin[chan][5] &= ~0x0f; + __pad_origin[chan][6] &= ~0x0f; + __pad_origin[chan][7] &= ~0x0f; + } + + __pad_origin[chan][2] -= 128; + __pad_origin[chan][3] -= 128; + __pad_origin[chan][4] -= 128; + __pad_origin[chan][5] -= 128; + + if(__pad_xpatchbits&mask && (s32)__pad_origin[chan][2]>64) { + type = SI_GetType(chan)&~0xffff; + if(!(type&~0x09ffffff)) __pad_origin[chan][2] = 0; + } +} + +static void __pad_probecallback(s32 chan,u32 type) +{ + if(!(type&0x0f)) { + __pad_enable(__pad_resettingchan); + __pad_waitingbits |= PAD_ENABLEDMASK(__pad_resettingchan); + } + __pad_doreset(); +} + +static void __pad_origincallback(s32 chan,u32 type) +{ + if(!(type&0x0f)) { + __pad_updateorigin(__pad_resettingchan); + __pad_enable(__pad_resettingchan); + } + __pad_doreset(); +} + +static void __pad_originupdatecallback(s32 chan,u32 type) +{ + u32 en_bits = __pad_enabledbits&PAD_ENABLEDMASK(chan); + + if(en_bits) { + if(!(type&0x0f)) __pad_updateorigin(chan); + if(type&SI_ERROR_NO_RESPONSE) __pad_disable(chan); + } +} + +static void __pad_typeandstatuscallback(s32 chan,u32 type) +{ + u32 recal_bits,mask,ret = 0; + mask = PAD_ENABLEDMASK(__pad_resettingchan); + recal_bits = __pad_recalibratebits&mask; + __pad_recalibratebits &= ~mask; + + if(type&0x0f) { + __pad_doreset(); + return; + } + + __pad_type[__pad_resettingchan] = (type&~0xff); + if(((type&SI_TYPE_MASK)-SI_TYPE_GC) + || !(type&SI_GC_STANDARD)) { + __pad_doreset(); + return; + } + + if(__pad_spec<2) { + __pad_enable(__pad_resettingchan); + __pad_doreset(); + return; + } + + if(!(type&SI_GC_WIRELESS) || type&SI_WIRELESS_IR) { + if(recal_bits) ret = SI_Transfer(__pad_resettingchan,&__pad_cmdcalibrate,3,__pad_origin[__pad_resettingchan],10,__pad_origincallback,0); + else ret = SI_Transfer(__pad_resettingchan,&__pad_cmdreadorigin,1,__pad_origin[__pad_resettingchan],10,__pad_origincallback,0); + } else if(type&SI_WIRELESS_FIX_ID && !(type&SI_WIRELESS_CONT_MASK) && !(type&SI_WIRELESS_LITE)) { + if(type&SI_WIRELESS_RECEIVED) ret = SI_Transfer(__pad_resettingchan,&__pad_cmdreadorigin,1,__pad_origin[__pad_resettingchan],10,__pad_origincallback,0); + else ret = SI_Transfer(__pad_resettingchan,&__pad_cmdprobedevice[__pad_resettingchan],3,__pad_origin[__pad_resettingchan],8,__pad_probecallback,0); + } + if(!ret) { + __pad_pendingbits |= mask; + __pad_doreset(); + } +} + +static void __pad_receivecheckcallback(s32 chan,u32 type) +{ + u32 mask,tmp; + mask = PAD_ENABLEDMASK(chan); + if(__pad_enabledbits&mask) { + tmp = type&0xff; + type &= ~0xff; + __pad_waitingbits &= ~mask; + __pad_checkingbits &= ~mask; + if(!(tmp&0x0f) + && (type&SI_GC_WIRELESS) && (type&SI_WIRELESS_RECEIVED) && (type&SI_WIRELESS_FIX_ID) + && !(type&SI_WIRELESS_IR) && !(type&SI_WIRELESS_CONT_MASK) && !(type&SI_WIRELESS_LITE)) SI_Transfer(chan,&__pad_cmdreadorigin,1,__pad_origin[chan],10,__pad_originupdatecallback,0); + else __pad_disable(chan); + } +} + +static void __pad_enable(u32 chan) +{ + u32 buf[2]; + __pad_enabledbits |= PAD_ENABLEDMASK(chan); + SI_GetResponse(chan,(void*)buf); + SI_SetCommand(chan,(__pad_analogmode|0x00400000)); + SI_EnablePolling(__pad_enabledbits); +} + +static void __pad_disable(u32 chan) +{ + u32 level,mask; + _CPU_ISR_Disable(level); + mask = PAD_ENABLEDMASK(chan); + SI_DisablePolling(mask); + __pad_enabledbits &= ~mask; + __pad_waitingbits &= ~mask; + __pad_pendingbits &= ~mask; + __pad_checkingbits &= ~mask; + SYS_SetWirelessID(chan,0); + _CPU_ISR_Restore(level); +} + +static void __pad_doreset() +{ + __pad_resettingchan = cntlzw(__pad_resettingbits); + if(__pad_resettingchan==32) return; + __pad_resettingbits &= ~PAD_ENABLEDMASK(__pad_resettingchan); + + memset(__pad_origin[__pad_resettingchan],0,12); + SI_GetTypeAsync(__pad_resettingchan,__pad_typeandstatuscallback); +} + +static void __pad_samplinghandler(u32 irq,void *ctx) +{ +} + +u32 __PADDisableRecalibration(s32 disable) +{ + u32 level,ret; + u8 *ram_recaldis = (u8*)0x800030e3; + + _CPU_ISR_Disable(level); + + ret = 0; + if(ram_recaldis[0]&0x40) ret = 1; + + ram_recaldis[0] &= 0xbf; + if(disable) ram_recaldis[0] |= 0x40; + + _CPU_ISR_Restore(level); + + return ret; +} + +u32 PAD_Init() +{ + u32 chan; + u16 prodpads = PAD_PRODPADS; + if(__pad_initialized) return 1; + + if(__pad_spec) PAD_SetSpec(__pad_spec); + + memset(__pad_keys,0,sizeof(keyinput)*PAD_CHANMAX); + + __pad_recalibratebits = 0xf0000000; + + chan = 0; + while(chan<4) { + __pad_keys[chan].chan = -1; + __pad_cmdprobedevice[chan] = 0x4d000000|(chan<<22)|_SHIFTL(prodpads,8,14); + chan++; + } + + SI_RefreshSamplingRate(); + SYS_RegisterResetFunc(&pad_resetinfo); + + __pad_initialized = 1; + return PAD_Reset(0xf0000000); +} + +u32 PAD_Read(PADStatus *status) +{ + u32 chan,mask,ret; + u32 level,sistatus,type; + u32 buf[2]; + _CPU_ISR_Disable(level); + chan = 0; + ret = 0; + while(chan<4) { + mask = PAD_ENABLEDMASK(chan); + if(__pad_pendingbits&mask) { + PAD_Reset(0); + memset(&status[chan],0,sizeof(PADStatus)); + status[chan].err = PAD_ERR_NOT_READY; + } else if(__pad_resettingbits&mask || __pad_resettingchan==chan) { + memset(&status[chan],0,sizeof(PADStatus)); + status[chan].err = PAD_ERR_NOT_READY; + } else if(!(__pad_enabledbits&mask)) { + memset(&status[chan],0,sizeof(PADStatus)); + status[chan].err = PAD_ERR_NO_CONTROLLER; + } else { + if(SI_IsChanBusy(chan)) { + memset(&status[chan],0,sizeof(PADStatus)); + status[chan].err = PAD_ERR_TRANSFER; + } else { + sistatus = SI_GetStatus(chan); + if(sistatus&SI_ERROR_NO_RESPONSE) { + SI_GetResponse(chan,(void*)buf); + if(!(__pad_waitingbits&mask)) { + memset(&status[chan],0,sizeof(PADStatus)); + status[chan].err = PAD_ERR_NONE; + if(!(__pad_checkingbits&mask)) { + __pad_checkingbits |= mask; + SI_GetTypeAsync(chan,__pad_receivecheckcallback); + } + } else { + __pad_disable(chan); + memset(&status[chan],0,sizeof(PADStatus)); + status[chan].err = PAD_ERR_NO_CONTROLLER; + } + } else { + type = SI_GetType(chan); + if(!(type&SI_WIRELESS_STATE)) ret |= mask; + if(!SI_GetResponse(chan,buf) + || buf[0]&0x80000000) { + memset(&status[chan],0,sizeof(PADStatus)); + status[chan].err = PAD_ERR_TRANSFER; + } else { + __pad_makestatus(chan,buf,&status[chan]); + if(status[chan].button&0x00002000) { + memset(&status[chan],0,sizeof(PADStatus)); + status[chan].err = PAD_ERR_TRANSFER; + SI_Transfer(chan,&__pad_cmdreadorigin,1,__pad_origin[chan],10,__pad_originupdatecallback,0); + } else { + status[chan].err = PAD_ERR_NONE; + status[chan].button &= ~0x80; + } + } + } + } + } + chan++; + + } + _CPU_ISR_Restore(level); + + return ret; +} + +u32 PAD_Reset(u32 mask) +{ + u32 level; + u32 pend_bits,en_bits; + + _CPU_ISR_Disable(level); + pend_bits = (__pad_pendingbits|mask); + __pad_pendingbits = 0; + + pend_bits &= ~(__pad_waitingbits|__pad_checkingbits); + __pad_resettingbits |= pend_bits; + + en_bits = (__pad_resettingbits&__pad_enabledbits); + __pad_enabledbits &= ~pend_bits; + + if(__pad_spec==4) __pad_recalibratebits |= pend_bits; + + SI_DisablePolling(en_bits); + if(__pad_resettingchan==32) __pad_doreset(); + _CPU_ISR_Restore(level); + + return 1; +} + +u32 PAD_Recalibrate(u32 mask) +{ + u32 level; + + _CPU_ISR_Disable(level); + + _CPU_ISR_Restore(level); + return 1; +} + +u32 PAD_Sync() +{ + u32 ret = 0; + + if(!__pad_resettingbits && __pad_resettingchan==32) { + if(SI_Busy()==0) ret = 1; + } + return ret; +} + +void PAD_SetSpec(u32 spec) +{ + if(__pad_initialized) return; + + __pad_spec = 0; + if(spec==0) __pad_makestatus = SPEC0_MakeStatus; + else if(spec==1) __pad_makestatus = SPEC1_MakeStatus; + else if(spec<6) __pad_makestatus = SPEC2_MakeStatus; + + __pad_spec = spec; +} + +void PAD_ControlMotor(s32 chan,u32 cmd) +{ + u32 level; + u32 mask,type; + + _CPU_ISR_Disable(level); + + mask = PAD_ENABLEDMASK(chan); + if(__pad_enabledbits&mask) { + type = SI_GetType(chan); + if(!(type&SI_GC_NOMOTOR)) { + if(__pad_spec<2 && cmd==PAD_MOTOR_STOP_HARD) cmd = 0; + + cmd = 0x00400000|__pad_analogmode|(cmd&0x03); + SI_SetCommand(chan,cmd); + SI_TransferCommands(); + } + } + _CPU_ISR_Restore(level); +} + +sampling_callback PAD_SetSamplingCallback(sampling_callback cb) +{ + sampling_callback ret; + + ret = __pad_samplingcallback; + __pad_samplingcallback = cb; + if(cb) { + SI_RegisterPollingHandler(__pad_samplinghandler); + } else { + SI_UnregisterPollingHandler(__pad_samplinghandler); + } + + return ret; +} + +void PAD_Clamp(PADStatus *status) +{ + s32 i; + + for(i=0;i>i); + + switch(padstatus[i].err) { + case PAD_ERR_NONE: + oldstate = __pad_keys[i].state; + state = padstatus[i].button; + __pad_keys[i].stickX = padstatus[i].stickX; + __pad_keys[i].stickY = padstatus[i].stickY; + __pad_keys[i].substickX = padstatus[i].substickX; + __pad_keys[i].substickY = padstatus[i].substickY; + __pad_keys[i].triggerL = padstatus[i].triggerL; + __pad_keys[i].triggerR = padstatus[i].triggerR; + __pad_keys[i].up = oldstate & ~state; + __pad_keys[i].down = state & (state ^ oldstate); + __pad_keys[i].state = state; + __pad_keys[i].chan = i; + + connected |= (1<PAD_CHAN3 || __pad_keys[pad].chan==-1) return 0; + return __pad_keys[pad].up; +} + +u16 PAD_ButtonsDown(int pad) +{ + if(padPAD_CHAN3 || __pad_keys[pad].chan==-1) return 0; + return __pad_keys[pad].down; +} + +u16 PAD_ButtonsHeld(int pad) +{ + if(padPAD_CHAN3 || __pad_keys[pad].chan==-1) return 0; + return __pad_keys[pad].state; +} + +s8 PAD_SubStickX(int pad) +{ + if(padPAD_CHAN3 || __pad_keys[pad].chan==-1) return 0; + return __pad_keys[pad].substickX; +} + +s8 PAD_SubStickY(int pad) +{ + if(padPAD_CHAN3 || __pad_keys[pad].chan==-1) return 0; + return __pad_keys[pad].substickY; +} + +s8 PAD_StickX(int pad) +{ + if(padPAD_CHAN3 || __pad_keys[pad].chan==-1) return 0; + return __pad_keys[pad].stickX; +} + +s8 PAD_StickY(int pad) +{ + if(padPAD_CHAN3 || __pad_keys[pad].chan==-1) return 0; + return __pad_keys[pad].stickY; +} + +u8 PAD_TriggerL(int pad) +{ + if(padPAD_CHAN3 || __pad_keys[pad].chan==-1) return 0; + return __pad_keys[pad].triggerL; +} + +u8 PAD_TriggerR(int pad) +{ + if(padPAD_CHAN3 || __pad_keys[pad].chan==-1) return 0; + return __pad_keys[pad].triggerR; +} diff --git a/wii/libogc/libogc/sbrk.c b/wii/libogc/libogc/sbrk.c new file mode 100644 index 0000000000..f74bc977f9 --- /dev/null +++ b/wii/libogc/libogc/sbrk.c @@ -0,0 +1,92 @@ +#include <_ansi.h> +#include <_syslist.h> +#include +#include +#include +#include + +#include "asm.h" +#include "processor.h" +#include "system.h" + +#if defined(HW_RVL) +u32 MALLOC_MEM2 __attribute__((weak)) = 1; +#endif + +void* _DEFUN(__libogc_sbrk_r,(ptr,incr), + struct _reent *ptr _AND + ptrdiff_t incr) +{ + u32 level; + char *heap_end = 0; + char *prev_heap = 0; +#if defined(HW_RVL) + static char *mem2_start = NULL; +#endif + + _CPU_ISR_Disable(level); +#if defined(HW_RVL) + if(MALLOC_MEM2) { + // use MEM2 aswell for malloc + if(mem2_start==NULL) + heap_end = (char*)SYS_GetArenaLo(); + else + heap_end = (char*)SYS_GetArena2Lo(); + + if(mem2_start) { + // we're in MEM2 + if((heap_end+incr)>(char*)SYS_GetArena2Hi()) { + // out of MEM2 case + ptr->_errno = ENOMEM; + prev_heap = (char *)-1; + } else if ((heap_end+incr) < mem2_start) { + // trying to sbrk() back below the MEM2 start barrier + ptr->_errno = EINVAL; + prev_heap = (char *)-1; + } else { + // success case + prev_heap = heap_end; + SYS_SetArena2Lo((void*)(heap_end+incr)); + } + // if MEM2 area is exactly at the barrier, transition back to MEM1 again + if(SYS_GetArena2Lo() == mem2_start) mem2_start = NULL; + } else { + // we're in MEM1 + if((heap_end+incr)>(char*)SYS_GetArenaHi()) { + // out of MEM1, transition into MEM2 + if(((char*)SYS_GetArena2Lo() + incr) > (char*)SYS_GetArena2Hi()) { + // this increment doesn't fit in available MEM2 + ptr->_errno = ENOMEM; + prev_heap = (char *)-1; + } else { + // MEM2 is available, move into it + mem2_start = heap_end = prev_heap = SYS_GetArena2Lo(); + SYS_SetArena2Lo((void*)(heap_end+incr)); + } + } else { + // MEM1 is available (or we're freeing memory) + prev_heap = heap_end; + SYS_SetArenaLo((void*)(heap_end+incr)); + } + } + } else { +#endif + heap_end = (char*)SYS_GetArenaLo(); + + if((heap_end+incr)>(char*)SYS_GetArenaHi()) { + + ptr->_errno = ENOMEM; + prev_heap = (char *)-1; + + } else { + + prev_heap = heap_end; + SYS_SetArenaLo((void*)(heap_end+incr)); + } +#if defined(HW_RVL) + } +#endif + _CPU_ISR_Restore(level); + + return (void*)prev_heap; +} diff --git a/wii/libogc/libogc/sdgecko_buf.c b/wii/libogc/libogc/sdgecko_buf.c new file mode 100644 index 0000000000..fd48531fd2 --- /dev/null +++ b/wii/libogc/libogc/sdgecko_buf.c @@ -0,0 +1,47 @@ +#include +#include + +#include "card_cmn.h" +#include "card_buf.h" + +#define BUF_POOL_CNT 3 + +typedef struct _buf_node { + struct _buf_node *next; + u8 data[SECTOR_SIZE+2]; + +} BufNode; + +static BufNode s_buf[BUF_POOL_CNT]; +static BufNode *s_freepool; + +void sdgecko_initBufferPool() +{ + u32 i; + for(i=0;idata; + s_freepool = s_freepool->next; + } + + return buf; +} + +void sdgecko_freeBuffer(u8 *buf) +{ + if(buf) { + BufNode *node = (BufNode*)(buf-offsetof(BufNode,data)); + node->next = s_freepool; + s_freepool = node; + } +} diff --git a/wii/libogc/libogc/sdgecko_io.c b/wii/libogc/libogc/sdgecko_io.c new file mode 100644 index 0000000000..13358dcdea --- /dev/null +++ b/wii/libogc/libogc/sdgecko_io.c @@ -0,0 +1,1356 @@ +#include +#include +#include +#include +#include + +#include "asm.h" +#include "processor.h" +#include "exi.h" +#include "lwp.h" +#include "system.h" +#include "semaphore.h" +#include "card_cmn.h" +//#include "card_fat.h" +#include "card_io.h" + +// SDHC support +// added by emu_kidid +#define SECTOR_ADDRESSING 0 +#define BYTE_ADDRESSING 1 +#define TYPE_SD 0 +#define TYPE_SDHC 1 + +#define MMC_ERROR_PARAM 0x0040 +#define MMC_ERROR_ADDRESS 0x0020 +#define MMC_ERROR_ERASE_SEQ 0x0010 +#define MMC_ERROR_CRC 0x0008 +#define MMC_ERROR_ILL 0x0004 +#define MMC_ERROR_ERASE_RES 0x0002 +#define MMC_ERROR_IDLE 0x0001 + +#define CARDIO_OP_INITFAILED 0x8000 +#define CARDIO_OP_TIMEDOUT 0x4000 +#define CARDIO_OP_IOERR_IDLE 0x2000 +#define CARDIO_OP_IOERR_PARAM 0x1000 +#define CARDIO_OP_IOERR_WRITE 0x0200 +#define CARDIO_OP_IOERR_ADDR 0x0100 +#define CARDIO_OP_IOERR_CRC 0x0002 +#define CARDIO_OP_IOERR_ILL 0x0001 +#define CARDIO_OP_IOERR_FATAL (CARDIO_OP_IOERR_PARAM|CARDIO_OP_IOERR_WRITE|CARDIO_OP_IOERR_ADDR|CARDIO_OP_IOERR_CRC|CARDIO_OP_IOERR_ILL) + +#define _SHIFTL(v, s, w) \ + ((u32) (((u32)(v) & ((0x01 << (w)) - 1)) << (s))) +#define _SHIFTR(v, s, w) \ + ((u32)(((u32)(v) >> (s)) & ((0x01 << (w)) - 1))) + +typedef s32 (*cardiocallback)(s32 drv_no); + +u8 g_CID[MAX_DRIVE][16]; +u8 g_CSD[MAX_DRIVE][16]; +u8 g_CardStatus[MAX_DRIVE][64]; + +u8 g_mCode[MAX_MI_NUM] = { 0x03 }; + +u16 g_dCode[MAX_MI_NUM][MAX_DI_NUM] = +{ + { + 0x033f, /* SD 8Mb */ + 0x0383, /* SD 16Mb */ + 0x074b, /* SD 32Mb */ + 0x0edf, /* SD 64Mb */ + 0x0f03 /* SD 128Mb */ + } +}; + +static u8 _ioWPFlag; +static u8 _ioClrFlag; +static u32 _ioCardFreq; +static u32 _ioRetryCnt; +static cardiocallback _ioRetryCB = NULL; + +static lwpq_t _ioEXILock[MAX_DRIVE]; + +static u32 _ioPageSize[MAX_DRIVE]; +static u32 _ioFlag[MAX_DRIVE]; +static u32 _ioError[MAX_DRIVE]; +static bool _ioCardInserted[MAX_DRIVE]; + +static u8 _ioResponse[MAX_DRIVE][128]; +static u8 _ioCrc7Table[256]; +static u16 _ioCrc16Table[256]; + +// SDHC support +static u32 _initType[MAX_DRIVE]; +static u32 _ioAddressingType[MAX_DRIVE]; + +extern unsigned long gettick(); + +static __inline__ u32 __check_response(s32 drv_no,u8 res) +{ + if(drv_no<0 || drv_no>=MAX_DRIVE) return CARDIO_ERROR_NOCARD; + + _ioError[drv_no] = 0; + if(_ioFlag[drv_no]==INITIALIZING && res&MMC_ERROR_IDLE) { + _ioError[drv_no] |= CARDIO_OP_IOERR_IDLE; + return CARDIO_ERROR_READY; + } else { + if(res&MMC_ERROR_PARAM) _ioError[drv_no] |= CARDIO_OP_IOERR_PARAM; + if(res&MMC_ERROR_ADDRESS) _ioError[drv_no] |= CARDIO_OP_IOERR_ADDR; + if(res&MMC_ERROR_CRC) _ioError[drv_no] |= CARDIO_OP_IOERR_CRC; + if(res&MMC_ERROR_ILL) _ioError[drv_no] |= CARDIO_OP_IOERR_ILL; + } + return ((_ioError[drv_no]&CARDIO_OP_IOERR_FATAL)?CARDIO_ERROR_INTERNAL:CARDIO_ERROR_READY); +} + +static void __init_crc7() +{ + s32 i,j; + u8 c,crc7; + + crc7 = 0; + for(i=0;i<256;i++) { + c = i; + crc7 = 0; + for(j=0;j<8;j++) { + crc7 <<= 1; + if((crc7^c)&0x80) crc7 ^= 0x09; + c <<= 1; + } + crc7 &= 0x7f; + _ioCrc7Table[i] = crc7; + } +} + +static u8 __make_crc7(void *buffer,u32 len) +{ + s32 i; + u8 crc7; + u8 *ptr; + + crc7 = 0; + ptr = buffer; + for(i=0;i>bcnt)&0xff); + if(mask&val) { + res |= 0x01; + if(!(res&0x0008)) res |= 0x0008; + else res &= ~0x0008; + + } else if(res&0x0008) res |= 0x0008; + else res &= ~0x0008; + + mask >>= 1; + bcnt++; + } + ptr++; + cnt++; + } + return (res<<1)&0xff; +} +*/ +static void __init_crc16() +{ + s32 i,j; + u16 crc16,c; + + for(i=0;i<256;i++) { + crc16 = 0; + c = ((u16)i)<<8; + for(j=0;j<8;j++) { + if((crc16^c)&0x8000) crc16 = (crc16<<1)^0x1021; + else crc16 <<= 1; + + c <<= 1; + } + + _ioCrc16Table[i] = crc16; + } +} + +static u16 __make_crc16(void *buffer,u32 len) +{ + s32 i; + u8 *ptr; + u16 crc16; + + crc16 = 0; + ptr = buffer; + for(i=0;i>8)^(u16)(ptr[i]))]; + + return crc16; +} + +/* Old way, realtime +static u16 __make_crc16(void *buffer,u32 len) +{ + u32 mask,cnt,bcnt; + u32 res,val,tmp; + u8 *ptr = (u8*)buffer; + + cnt = 0; + res = 0; + while(cnt>(bcnt+8))&0xff); + if(mask&tmp) { + res = (res<<1)|0x0001; + if(!(res&0x0020)) res |= 0x0020; + else res &= ~0x0020; + if(!(res&0x1000)) res |= 0x1000; + else res &= ~0x1000; + } else { + res = (res<<1)&~0x0001; + if(res&0x0020) res |= 0x0020; + else res &= ~0x0020; + if(res&0x1000) res |= 0x1000; + else res &= ~0x1000; + } + mask >>= 1; + bcnt++; + } + ptr++; + cnt++; + } + + return (res&0xffff); +} +*/ + +static u32 __card_checktimeout(s32 drv_no,u32 startT,u32 timeout) +{ + u32 endT,diff; + u32 msec; + + endT = gettick(); + if(endT=MAX_DRIVE) return CARDIO_ERROR_NOCARD; + + _ioClrFlag = 0xff; + cmd[0] = 0x40; + crc = __make_crc7(cmd,5); + + if(_ioWPFlag) { + _ioClrFlag = 0x00; + for(cnt=0;cnt<5;cnt++) cmd[cnt] ^= -1; + } + + for(cnt=0;cnt<128;cnt++) dummy[cnt] = _ioClrFlag; + + __exi_wait(drv_no); + + if(EXI_SelectSD(drv_no,EXI_DEVICE_0,_ioCardFreq)==0) { + EXI_Unlock(drv_no); + return CARDIO_ERROR_NOCARD; + } + + + cnt = 0; + while(cnt<20) { + if(EXI_ImmEx(drv_no,dummy,128,EXI_WRITE)==0) { + EXI_Deselect(drv_no); + EXI_Unlock(drv_no); + return CARDIO_ERROR_IOERROR; + } + cnt++; + } + EXI_Deselect(drv_no); + + if(EXI_Select(drv_no,EXI_DEVICE_0,_ioCardFreq)==0) { + EXI_Unlock(drv_no); + return CARDIO_ERROR_NOCARD; + } + + crc |= 0x01; + if(_ioWPFlag) crc ^= -1; + if(EXI_ImmEx(drv_no,cmd,5,EXI_WRITE)==0) { + EXI_Deselect(drv_no); + EXI_Unlock(drv_no); + return CARDIO_ERROR_IOERROR; + } + + if(EXI_ImmEx(drv_no,&crc,1,EXI_WRITE)==0) { + EXI_Deselect(drv_no); + EXI_Unlock(drv_no); + return CARDIO_ERROR_IOERROR; + } + + EXI_Deselect(drv_no); + EXI_Unlock(drv_no); + return CARDIO_ERROR_READY; +} + +static s32 __card_writecmd(s32 drv_no,void *buf,s32 len) +{ + u8 crc,*ptr; + u8 dummy[32]; + u32 cnt; + + if(drv_no<0 || drv_no>=MAX_DRIVE) return CARDIO_ERROR_NOCARD; + + ptr = buf; + ptr[0] |= 0x40; + crc = __make_crc7(buf,len); + + if(_ioWPFlag) { + for(cnt=0;cnt=MAX_DRIVE) return CARDIO_ERROR_NOCARD; + + ret = CARDIO_ERROR_READY; + ptr = buf; + *ptr = _ioClrFlag; + + __exi_wait(drv_no); + + if(EXI_Select(drv_no,EXI_DEVICE_0,_ioCardFreq)==0) { + EXI_Unlock(drv_no); + return CARDIO_ERROR_NOCARD; + } + + if(EXI_ImmEx(drv_no,ptr,1,EXI_READWRITE)==0) { + EXI_Deselect(drv_no); + EXI_Unlock(drv_no); + return CARDIO_ERROR_IOERROR; + } + + startT = gettick(); + while(*ptr&0x80) { + *ptr = _ioClrFlag; + if(EXI_ImmEx(drv_no,ptr,1,EXI_READWRITE)==0) { + EXI_Deselect(drv_no); + EXI_Unlock(drv_no); + return CARDIO_ERROR_IOERROR; + } + if(!(*ptr&0x80)) break; + if(__card_checktimeout(drv_no,startT,500)!=0) { + *ptr = _ioClrFlag; + if(EXI_ImmEx(drv_no,ptr,1,EXI_READWRITE)==0) { + EXI_Deselect(drv_no); + EXI_Unlock(drv_no); + return CARDIO_ERROR_IOERROR; + } + if(*ptr&0x80) ret = CARDIO_ERROR_IOTIMEOUT; + break; + } + } + if(len>1 && ret==CARDIO_ERROR_READY) { + *(++ptr) = _ioClrFlag; + if(EXI_ImmEx(drv_no,ptr,len-1,EXI_READWRITE)==0) ret = CARDIO_ERROR_IOERROR; + } + + EXI_Deselect(drv_no); + EXI_Unlock(drv_no); + return ret; +} + +static s32 __card_stopreadresponse(s32 drv_no,void *buf,s32 len) +{ + u8 *ptr,tmp; + s32 startT,ret; + + if(drv_no<0 || drv_no>=MAX_DRIVE) return CARDIO_ERROR_NOCARD; + + ptr = buf; + + __exi_wait(drv_no); + + if(EXI_Select(drv_no,EXI_DEVICE_0,_ioCardFreq)==0) { + EXI_Unlock(drv_no); + return CARDIO_ERROR_NOCARD; + } + + ret = CARDIO_ERROR_READY; + *ptr = _ioClrFlag; + if(EXI_ImmEx(drv_no,ptr,1,EXI_READWRITE)==0) { + EXI_Deselect(drv_no); + EXI_Unlock(drv_no); + return CARDIO_ERROR_IOERROR; + } + + *ptr = _ioClrFlag; + if(EXI_ImmEx(drv_no,ptr,1,EXI_READWRITE)==0) { + EXI_Deselect(drv_no); + EXI_Unlock(drv_no); + return CARDIO_ERROR_IOERROR; + } + + startT = gettick(); + while(*ptr&0x80) { + *ptr = _ioClrFlag; + if(EXI_ImmEx(drv_no,ptr,1,EXI_READWRITE)==0) { + EXI_Deselect(drv_no); + EXI_Unlock(drv_no); + return CARDIO_ERROR_IOERROR; + } + if(!(*ptr&0x80)) break; + if(__card_checktimeout(drv_no,startT,1500)!=0) { + *ptr = _ioClrFlag; + if(EXI_ImmEx(drv_no,ptr,1,EXI_READWRITE)==0) { + EXI_Deselect(drv_no); + EXI_Unlock(drv_no); + return CARDIO_ERROR_IOERROR; + } + if(*ptr&0x80) ret = CARDIO_ERROR_IOTIMEOUT; + break; + } + } + + tmp = *ptr; + while(*ptr!=0xff) { + *ptr = _ioClrFlag; + if(EXI_ImmEx(drv_no,ptr,1,EXI_READWRITE)==0) { + EXI_Deselect(drv_no); + EXI_Unlock(drv_no); + return CARDIO_ERROR_IOERROR; + } + if(*ptr==0xff) break; + if(__card_checktimeout(drv_no,startT,1500)!=0) { + *ptr = _ioClrFlag; + if(EXI_ImmEx(drv_no,ptr,1,EXI_READWRITE)==0) { + EXI_Deselect(drv_no); + EXI_Unlock(drv_no); + return CARDIO_ERROR_IOERROR; + } + if(*ptr!=0xff) ret = CARDIO_ERROR_IOTIMEOUT; + break; + } + } + *ptr = tmp; + + if(len>1 && ret==CARDIO_ERROR_READY) { + *(++ptr) = _ioClrFlag; + if(EXI_ImmEx(drv_no,ptr,len-1,EXI_READWRITE)==0) ret = CARDIO_ERROR_IOERROR; + } + + EXI_Deselect(drv_no); + EXI_Unlock(drv_no); + return ret; +} + +static s32 __card_datares(s32 drv_no,void *buf) +{ + u8 *ptr; + s32 startT,ret; + + if(drv_no<0 || drv_no>=MAX_DRIVE) return CARDIO_ERROR_NOCARD; + + ptr = buf; + + __exi_wait(drv_no); + + if(EXI_Select(drv_no,EXI_DEVICE_0,_ioCardFreq)==0) { + EXI_Unlock(drv_no); + return CARDIO_ERROR_NOCARD; + } + + ret = CARDIO_ERROR_READY; + *ptr = _ioClrFlag; + if(EXI_ImmEx(drv_no,ptr,1,EXI_READWRITE)==0) { + EXI_Deselect(drv_no); + EXI_Unlock(drv_no); + return CARDIO_ERROR_IOERROR; + } + startT = gettick(); + while(*ptr&0x10) { + *ptr = _ioClrFlag; + if(EXI_ImmEx(drv_no,ptr,1,EXI_READWRITE)==0) { + EXI_Deselect(drv_no); + EXI_Unlock(drv_no); + return CARDIO_ERROR_IOERROR; + } + if(!(*ptr&0x10)) break; + if(__card_checktimeout(drv_no,startT,1500)!=0) { + *ptr = _ioClrFlag; + if(EXI_ImmEx(drv_no,ptr,1,EXI_READWRITE)==0) { + EXI_Deselect(drv_no); + EXI_Unlock(drv_no); + return CARDIO_ERROR_IOERROR; + } + if(*ptr&0x10) ret = CARDIO_ERROR_IOTIMEOUT; + break; + } + } + + *(++ptr) = _ioClrFlag; + if(EXI_ImmEx(drv_no,ptr,1,EXI_READWRITE)==0) { + EXI_Deselect(drv_no); + EXI_Unlock(drv_no); + return CARDIO_ERROR_IOERROR; + } + + startT = gettick(); + while(!*ptr) { + *ptr = _ioClrFlag; + if(EXI_ImmEx(drv_no,ptr,1,EXI_READWRITE)==0) { + EXI_Deselect(drv_no); + EXI_Unlock(drv_no); + return CARDIO_ERROR_IOERROR; + } + if(*ptr) break; + if(__card_checktimeout(drv_no,startT,1500)!=0) { + *ptr = _ioClrFlag; + if(EXI_ImmEx(drv_no,ptr,1,EXI_READWRITE)==0) { + EXI_Deselect(drv_no); + EXI_Unlock(drv_no); + return CARDIO_ERROR_IOERROR; + } + if(!*ptr) ret = CARDIO_ERROR_IOTIMEOUT; + break; + } + } + EXI_Deselect(drv_no); + EXI_Unlock(drv_no); + + return ret; +} + +static s32 __card_stopresponse(s32 drv_no) +{ + s32 ret; + + if((ret=__card_stopreadresponse(drv_no,_ioResponse[drv_no],1))!=0) return ret; + ret = __check_response(drv_no,_ioResponse[drv_no][0]); + + return ret; +} + +static s32 __card_dataresponse(s32 drv_no) +{ + s32 ret; + u8 res; + + if((ret=__card_datares(drv_no,_ioResponse[drv_no]))!=0) return ret; + res = _SHIFTR(_ioResponse[drv_no][0],1,3); + if(res==0x0005) ret = CARDIO_OP_IOERR_CRC; + else if(res==0x0006) ret = CARDIO_OP_IOERR_WRITE; + + return ret; +} + +static s32 __card_dataread(s32 drv_no,void *buf,u32 len) +{ + u8 *ptr; + u32 cnt; + u8 res[2]; + u16 crc,crc_org; + s32 startT,ret; + + if(drv_no<0 || drv_no>=MAX_DRIVE) return CARDIO_ERROR_NOCARD; + + __exi_wait(drv_no); + + if(EXI_Select(drv_no,EXI_DEVICE_0,_ioCardFreq)==0) { + EXI_Unlock(drv_no); + return CARDIO_ERROR_NOCARD; + } + + ret = CARDIO_ERROR_READY; + ptr = buf; + for(cnt=0;cnt=MAX_DRIVE) return CARDIO_ERROR_NOCARD; + + for(cnt=0;cnt<32;cnt++) dummy[cnt] = _ioClrFlag; + crc = __make_crc16(buf,len); + + __exi_wait(drv_no); + + if(EXI_Select(drv_no,EXI_DEVICE_0,_ioCardFreq)==0) { + EXI_Unlock(drv_no); + return CARDIO_ERROR_NOCARD; + } + + dummy[0] = 0xfc; + if(EXI_ImmEx(drv_no,dummy,1,EXI_WRITE)==0) { + EXI_Deselect(drv_no); + EXI_Unlock(drv_no); + return CARDIO_ERROR_IOERROR; + } + + if(EXI_ImmEx(drv_no,buf,len,EXI_WRITE)==0) { + EXI_Deselect(drv_no); + EXI_Unlock(drv_no); + return CARDIO_ERROR_IOERROR; + } + + /* sleep 1us*/ + usleep(1); + + ret = CARDIO_ERROR_READY; + if(EXI_ImmEx(drv_no,&crc,2,EXI_WRITE)==0) ret = CARDIO_ERROR_IOERROR; + + EXI_Deselect(drv_no); + EXI_Unlock(drv_no); + + return ret; +} + +static s32 __card_multiwritestop(s32 drv_no) +{ + s32 ret,cnt,startT; + u8 dummy[32]; + + if(drv_no<0 || drv_no>=MAX_DRIVE) return CARDIO_ERROR_NOCARD; + + for(cnt=0;cnt<32;cnt++) dummy[cnt] = _ioClrFlag; + + __exi_wait(drv_no); + + if(EXI_Select(drv_no,EXI_DEVICE_0,_ioCardFreq)==0) { + EXI_Unlock(drv_no); + return CARDIO_ERROR_NOCARD; + } + + ret = CARDIO_ERROR_READY; + dummy[0] = 0xfd; + if(_ioWPFlag) dummy[0] = 0x02; //!0xfd + if(EXI_ImmEx(drv_no,dummy,1,EXI_WRITE)==0) { + EXI_Deselect(drv_no); + EXI_Unlock(drv_no); + return CARDIO_ERROR_IOERROR; + } + + dummy[0] = _ioClrFlag; + if(EXI_ImmEx(drv_no,dummy,1,EXI_READWRITE)==0) { + EXI_Deselect(drv_no); + EXI_Unlock(drv_no); + return CARDIO_ERROR_IOERROR; + } + + dummy[0] = _ioClrFlag; + if(EXI_ImmEx(drv_no,dummy,1,EXI_READWRITE)==0) { + EXI_Deselect(drv_no); + EXI_Unlock(drv_no); + return CARDIO_ERROR_IOERROR; + } + + dummy[0] = _ioClrFlag; + if(EXI_ImmEx(drv_no,dummy,1,EXI_READWRITE)==0) { + EXI_Deselect(drv_no); + EXI_Unlock(drv_no); + return CARDIO_ERROR_IOERROR; + } + + dummy[0] = _ioClrFlag; + if(EXI_ImmEx(drv_no,dummy,1,EXI_READWRITE)==0) { + EXI_Deselect(drv_no); + EXI_Unlock(drv_no); + return CARDIO_ERROR_IOERROR; + } + + startT = gettick(); + ret = CARDIO_ERROR_READY; + while(dummy[0]==0) { + dummy[0] = _ioClrFlag; + if(EXI_ImmEx(drv_no,dummy,1,EXI_READWRITE)==0) { + EXI_Deselect(drv_no); + EXI_Unlock(drv_no); + return CARDIO_ERROR_IOERROR; + } + if(dummy[0]) break; + if(__card_checktimeout(drv_no,startT,1500)!=0) { + dummy[0] = _ioClrFlag; + if(EXI_ImmEx(drv_no,dummy,1,EXI_READWRITE)==0) { + EXI_Deselect(drv_no); + EXI_Unlock(drv_no); + return CARDIO_ERROR_IOERROR; + } + if(!dummy[0]) ret = CARDIO_ERROR_IOTIMEOUT; + break; + } + } + + EXI_Deselect(drv_no); + EXI_Unlock(drv_no); + return ret; +} + +static s32 __card_response1(s32 drv_no) +{ + s32 ret; + + if(drv_no<0 || drv_no>=MAX_DRIVE) return CARDIO_ERROR_NOCARD; + + if((ret=__card_readresponse(drv_no,_ioResponse[drv_no],1))!=0) return ret; + return __check_response(drv_no,_ioResponse[drv_no][0]); +} + +static s32 __card_response2(s32 drv_no) +{ + u32 ret; + + if(drv_no<0 || drv_no>=MAX_DRIVE) return CARDIO_ERROR_NOCARD; + + if((ret=__card_readresponse(drv_no,_ioResponse[drv_no],2))!=0) return ret; + if(!(_ioResponse[drv_no][0]&0x7c) && !(_ioResponse[drv_no][1]&0x9e)) return CARDIO_ERROR_READY; + return CARDIO_ERROR_FATALERROR; +} + +static s32 __card_sendappcmd(s32 drv_no) +{ + s32 ret; + u8 ccmd[5] = {0,0,0,0,0}; + + if(drv_no<0 || drv_no>=MAX_DRIVE) return CARDIO_ERROR_NOCARD; + + ccmd[0] = 0x37; + if((ret=__card_writecmd(drv_no,ccmd,5))!=0) { + return ret; + } + if((ret=__card_readresponse(drv_no,_ioResponse[drv_no],1))!=0) return ret; + ret = __check_response(drv_no,_ioResponse[drv_no][0]); + + return ret; +} + +static s32 __card_sendopcond(s32 drv_no) +{ + u8 ccmd[5] = {0,0,0,0,0}; + s32 ret; + s32 startT; + + if(drv_no<0 || drv_no>=MAX_DRIVE) return CARDIO_ERROR_NOCARD; + ret = 0; + startT = gettick(); + do { + if(_initType[drv_no]==TYPE_SDHC) { + __card_sendappcmd(drv_no); + ccmd[0] = 0x29; + ccmd[1] = 0x40; + } else + ccmd[0] = 0x01; + + if((ret=__card_writecmd(drv_no,ccmd,5))!=0) { + return ret; + } + if((ret=__card_readresponse(drv_no,_ioResponse[drv_no],1))!=0) return ret; + if((ret=__check_response(drv_no,_ioResponse[drv_no][0]))!=0) return ret; + if(!(_ioError[drv_no]&CARDIO_OP_IOERR_IDLE)) return CARDIO_ERROR_READY; + + ret = __card_checktimeout(drv_no,startT,1500); + } while(ret==0); + + if(_initType[drv_no]==TYPE_SDHC) { + __card_sendappcmd(drv_no); + ccmd[0] = 0x29; + ccmd[1] = 0x40; + } else + ccmd[0] = 0x01; + + if((ret=__card_writecmd(drv_no,ccmd,5))!=0) { + return ret; + } + if((ret=__card_readresponse(drv_no,_ioResponse[drv_no],1))!=0) return ret; + if((ret=__check_response(drv_no,_ioResponse[drv_no][0]))!=0) return ret; + if(_ioError[drv_no]&CARDIO_OP_IOERR_IDLE) return CARDIO_ERROR_IOERROR; + + return CARDIO_ERROR_READY; +} + +static s32 __card_sendCMD8(s32 drv_no) +{ + s32 ret; + u8 ccmd[5] = {0,0,0,0,0}; + + if(drv_no<0 || drv_no>=MAX_DRIVE) return CARDIO_ERROR_NOCARD; + + ccmd[0] = 0x08; + ccmd[3] = 0x01; + ccmd[4] = 0xAA; + if((ret=__card_writecmd(drv_no,ccmd,5))!=0){ + return ret; + } + if((ret=__card_readresponse(drv_no,_ioResponse[drv_no],5))!=0) return ret; + ret = __check_response(drv_no,_ioResponse[drv_no][0]); + + return ret; +} + +static s32 __card_sendCMD58(s32 drv_no) +{ + s32 ret; + u8 ccmd[5] = {0,0,0,0,0}; + + if(drv_no<0 || drv_no>=MAX_DRIVE) return CARDIO_ERROR_NOCARD; + + ccmd[0]= 0x3A; + if((ret=__card_writecmd(drv_no,ccmd,5))!=0) { + return ret; + } + if((ret=__card_readresponse(drv_no,_ioResponse[drv_no],5))!=0) return ret; + ret = __check_response(drv_no,_ioResponse[drv_no][0]); + + return ret; +} + +static s32 __card_sendcmd(s32 drv_no,u8 cmd,u8 *arg) +{ + u8 ccmd[5] = {0,0,0,0,0}; + + if(drv_no<0 || drv_no>=MAX_DRIVE) return CARDIO_ERROR_NOCARD; + + ccmd[0] = cmd; + if(arg) { + ccmd[1] = arg[0]; + ccmd[2] = arg[1]; + ccmd[3] = arg[2]; + ccmd[4] = arg[3]; + } + return __card_writecmd(drv_no,ccmd,5); +} + +static s32 __card_setblocklen(s32 drv_no,u32 block_len) +{ + u8 cmd[5]; + s32 ret; + + if(drv_no<0 || drv_no>=MAX_DRIVE) return CARDIO_ERROR_NOCARD; + if(block_len>PAGE_SIZE512) block_len = PAGE_SIZE512; + + cmd[0] = 0x10; + cmd[1] = (block_len>>24)&0xff; + cmd[2] = (block_len>>16)&0xff; + cmd[3] = (block_len>>8)&0xff; + cmd[4] = block_len&0xff; + if((ret=__card_writecmd(drv_no,cmd,5))!=0) { + return ret; + } + if((ret=__card_readresponse(drv_no,_ioResponse[drv_no],1))<0) return ret; + ret = __check_response(drv_no,_ioResponse[drv_no][0]); + + return ret; +} + +static s32 __card_readcsd(s32 drv_no) +{ + u8 ccmd[5] = {0,0,0,0,0}; + s32 ret; + + if(drv_no<0 || drv_no>=MAX_DRIVE) return CARDIO_ERROR_NOCARD; + ret = 0; + ccmd[0] = 0x09; + if((ret=__card_writecmd(drv_no,ccmd,5))!=0) { + return ret; + } + if((ret=__card_readresponse(drv_no,_ioResponse[drv_no],1))!=0) return ret; + ret = __check_response(drv_no,_ioResponse[drv_no][0]); + if(ret==0) { + if((ret=__card_dataread(drv_no,g_CSD[drv_no],16))!=0) return ret; + } + return ret; +} + +static s32 __card_readcid(s32 drv_no) +{ + u8 ccmd[5] = {0,0,0,0,0}; + s32 ret; + + if(drv_no<0 || drv_no>=MAX_DRIVE) return CARDIO_ERROR_NOCARD; + ret = 0; + ccmd[0] = 0x0A; + if((ret=__card_writecmd(drv_no,ccmd,5))!=0) { + return ret; + } + if((ret=__card_readresponse(drv_no,_ioResponse[drv_no],1))!=0) return ret; + ret = __check_response(drv_no,_ioResponse[drv_no][0]); + if(ret==0) { + if((ret=__card_dataread(drv_no,g_CID[drv_no],16))!=0) return ret; + } + return ret; +} + +static s32 __card_sd_status(s32 drv_no) +{ + s32 ret; + + if(drv_no<0 || drv_no>=MAX_DRIVE) return CARDIO_ERROR_NOCARD; + if(_ioPageSize[drv_no]!=64) { + _ioPageSize[drv_no] = 64; + if((ret=__card_setblocklen(drv_no,_ioPageSize[drv_no]))!=0) return ret; + } + if((ret=__card_sendappcmd(drv_no))!=0) return ret; + if((ret=__card_sendcmd(drv_no,0x0d,NULL))!=0) return ret; + if((ret=__card_response2(drv_no))!=0) return ret; + ret = __card_dataread(drv_no,g_CardStatus[drv_no],64); + + return ret; +} + +static s32 __card_softreset(s32 drv_no) +{ + s32 ret; + + if(drv_no<0 || drv_no>=MAX_DRIVE) return CARDIO_ERROR_NOCARD; + ret = 0; + if((ret=__card_writecmd0(drv_no))!=0) { + return ret; + } + + if((ret=__card_readresponse(drv_no,_ioResponse[drv_no],1))!=0) return ret; + return __check_response(drv_no,_ioResponse[drv_no][0]); +} + +static bool __card_check(s32 drv_no) +{ + s32 ret; + + if(drv_no<0 || drv_no>=MAX_DRIVE) return FALSE; + while((ret=EXI_ProbeEx(drv_no))==0); + if(ret!=1) return FALSE; + + if(!(EXI_GetState(drv_no)&EXI_FLAG_ATTACH)) { + if(EXI_Attach(drv_no,__card_exthandler)==0) return FALSE; + sdgecko_insertedCB(drv_no); + } + return TRUE; +} + +static s32 __card_retrycb(s32 drv_no) +{ + _ioRetryCB = NULL; + _ioRetryCnt++; + return sdgecko_initIO(drv_no); +} + +static void __convert_sector(s32 drv_no,u32 sector_no,u8 *arg) +{ + if(_ioAddressingType[drv_no]==BYTE_ADDRESSING) { + arg[0] = (sector_no>>15)&0xff; + arg[1] = (sector_no>>7)&0xff; + arg[2] = (sector_no<<1)&0xff; + arg[3] = (sector_no<<9)&0xff; + } else if(_ioAddressingType[drv_no]==SECTOR_ADDRESSING) { + arg[0] = (sector_no>>24)&0xff; + arg[1] = (sector_no>>16)&0xff; + arg[2] = (sector_no>>8)&0xff; + arg[3] = sector_no&0xff; + } +} + +void sdgecko_initIODefault() +{ + u32 i; + __init_crc7(); + __init_crc16(); + for(i=0;i=MAX_DRIVE) return CARDIO_ERROR_NOCARD; + + u32 id = 0; + EXI_GetID(drv_no,EXI_DEVICE_0,&id); + if ( id != -1 ) return CARDIO_ERROR_NOCARD; + + if(_ioRetryCnt>5) { + _ioRetryCnt = 0; + return CARDIO_ERROR_IOERROR; + } + + _ioCardInserted[drv_no] = __card_check(drv_no); + + if(_ioCardInserted[drv_no]==TRUE) { + _ioWPFlag = 0; + _ioCardFreq = EXI_SPEED16MHZ; + _initType[drv_no] = TYPE_SD; + _ioFlag[drv_no] = INITIALIZING; + _ioAddressingType[drv_no] = BYTE_ADDRESSING; + if(__card_softreset(drv_no)!=0) { + _ioWPFlag = 1; + if(__card_softreset(drv_no)!=0) goto exit; + } + + if(__card_sendCMD8(drv_no)!=0) goto exit; + if((_ioResponse[drv_no][3]==1) && (_ioResponse[drv_no][4]==0xAA)) _initType[drv_no] = TYPE_SDHC; + + if(__card_sendopcond(drv_no)!=0) goto exit; + if(__card_readcsd(drv_no)!=0) goto exit; + if(__card_readcid(drv_no)!=0) goto exit; + + if(_initType[drv_no]==TYPE_SDHC) { + if(__card_sendCMD58(drv_no)!=0) goto exit; + if(_ioResponse[drv_no][1]&0x40) _ioAddressingType[drv_no] = SECTOR_ADDRESSING; + } + + _ioPageSize[drv_no] = 1<=EXI_CHANNEL_2) return CARDIO_ERROR_NOCARD; + ret = sdgecko_preIO(drv_no); + if(ret!=0) return ret; + + return __card_readcid(drv_no); +} + +s32 sdgecko_readCSD(s32 drv_no) +{ + s32 ret; + + if(drv_no<0 || drv_no>=MAX_DRIVE) return CARDIO_ERROR_NOCARD; + ret = sdgecko_preIO(drv_no); + if(ret!=0) return ret; + + return __card_readcsd(drv_no); +} + +s32 sdgecko_readStatus(s32 drv_no) +{ + s32 ret; + + if(drv_no<0 || drv_no>=MAX_DRIVE) return CARDIO_ERROR_NOCARD; + ret = sdgecko_preIO(drv_no); + if(ret!=0) return ret; + + return __card_sd_status(drv_no); +} + +// Multiple sector read by emu_kidid +s32 sdgecko_readSectors(s32 drv_no,u32 sector_no,u32 num_sectors,void *buf) +{ + u32 i; + s32 ret; + u8 arg[4]; + char *ptr = (char*)buf; + + if(drv_no<0 || drv_no>=MAX_DRIVE) return CARDIO_ERROR_NOCARD; + + ret = sdgecko_preIO(drv_no); + if(ret!=0) return ret; + + if(num_sectors<1) return CARDIO_ERROR_INTERNAL; + + + // Must be 512b, otherwise fail! + if(PAGE_SIZE512!=_ioPageSize[drv_no]) { + _ioPageSize[drv_no] = PAGE_SIZE512; + if((ret=__card_setblocklen(drv_no,PAGE_SIZE512))!=0) return ret; + } + + // SDHC support fix + __convert_sector(drv_no,sector_no,arg); + + if((ret=__card_sendcmd(drv_no,0x12,arg))!=0) return ret; + if((ret=__card_response1(drv_no))!=0) return ret; + + for(i=0;i=MAX_DRIVE) return CARDIO_ERROR_NOCARD; + + ret = sdgecko_preIO(drv_no); + if(ret!=0) return ret; + + if(num_sectors<1) return CARDIO_ERROR_INTERNAL; + + + if(PAGE_SIZE512!=_ioPageSize[drv_no]) { + _ioPageSize[drv_no] = PAGE_SIZE512; + if((ret=__card_setblocklen(drv_no,_ioPageSize[drv_no]))!=0) return ret; + } + + // send SET_WRITE_BLK_ERASE_CNT cmd + arg[0] = (num_sectors>>24)&0xff; + arg[1] = (num_sectors>>16)&0xff; + arg[2] = (num_sectors>>8)&0xff; + arg[3] = num_sectors&0xff; + if((ret=__card_sendappcmd(drv_no))!=0) return ret; + if((ret=__card_sendcmd(drv_no,0x17,arg))!=0) return ret; + if((ret=__card_response1(drv_no))!=0) return ret; + + // SDHC support fix + __convert_sector(drv_no,sector_no,arg); + + if((ret=__card_sendcmd(drv_no,0x19,arg))!=0) return ret; + if((ret=__card_response1(drv_no))!=0) return ret; + + for(i=0;i=MAX_DRIVE) return CARDIO_ERROR_NOCARD; + + if(__card_check(drv_no)==TRUE && _ioFlag[drv_no]!=NOT_INITIALIZED) { + if((ret=__card_sendappcmd(drv_no))!=0) goto exit; + if((ret=__card_sendcmd(drv_no,0x2a,NULL))!=0) goto exit; + ret = __card_response1(drv_no); + } + _ioFlag[drv_no] = NOT_INITIALIZED; + +exit: + if(_ioCardInserted[drv_no]==TRUE) { + _ioCardInserted[drv_no] = FALSE; + EXI_Detach(drv_no); + } + if(_ioRetryCB) + return _ioRetryCB(drv_no); + + return CARDIO_ERROR_READY; +} + +static void (*pfCallbackIN[MAX_DRIVE])(s32) = {NULL, NULL}; +static void (*pfCallbackOUT[MAX_DRIVE])(s32) = {NULL, NULL}; + +void sdgecko_insertedCB(s32 drv_no) +{ + if(pfCallbackIN[drv_no]) + pfCallbackIN[drv_no](drv_no); +} + +void sdgecko_ejectedCB(s32 drv_no) +{ + if(pfCallbackOUT[drv_no]) + pfCallbackOUT[drv_no](drv_no); +} + +void sdgecko_setSpeed(u32 freq) +{ + _ioCardFreq = freq; +} + +u32 sdgecko_getPageSize(s32 drv_no) +{ + return _ioPageSize[drv_no]; +} + +u32 sdgecko_setPageSize(s32 drv_no, int size) +{ + if(_ioPageSize[drv_no]!=size) + _ioPageSize[drv_no] = size; + + return __card_setblocklen(drv_no, _ioPageSize[drv_no]); +} + +u32 sdgecko_getAddressingType(s32 drv_no) +{ + return _ioAddressingType[drv_no]; +} diff --git a/wii/libogc/libogc/semaphore.c b/wii/libogc/libogc/semaphore.c new file mode 100644 index 0000000000..4164d62a0e --- /dev/null +++ b/wii/libogc/libogc/semaphore.c @@ -0,0 +1,150 @@ +/*------------------------------------------------------------- + +semaphore.c -- Thread subsystem IV + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + + +-------------------------------------------------------------*/ + + +#include +#include +#include +#include "lwp_sema.h" +#include "lwp_objmgr.h" +#include "lwp_config.h" +#include "semaphore.h" + +#define LWP_OBJTYPE_SEM 4 + +#define LWP_CHECK_SEM(hndl) \ +{ \ + if(((hndl)==LWP_SEM_NULL) || (LWP_OBJTYPE(hndl)!=LWP_OBJTYPE_SEM)) \ + return NULL; \ +} + + +typedef struct _sema_st +{ + lwp_obj object; + lwp_sema sema; +} sema_st; + +lwp_objinfo _lwp_sema_objects; + +void __lwp_sema_init() +{ + __lwp_objmgr_initinfo(&_lwp_sema_objects,LWP_MAX_SEMAS,sizeof(sema_st)); +} + +static __inline__ sema_st* __lwp_sema_open(sem_t sem) +{ + LWP_CHECK_SEM(sem); + return (sema_st*)__lwp_objmgr_get(&_lwp_sema_objects,LWP_OBJMASKID(sem)); +} + +static __inline__ void __lwp_sema_free(sema_st *sema) +{ + __lwp_objmgr_close(&_lwp_sema_objects,&sema->object); + __lwp_objmgr_free(&_lwp_sema_objects,&sema->object); +} + +static sema_st* __lwp_sema_allocate() +{ + sema_st *sema; + + __lwp_thread_dispatchdisable(); + sema = (sema_st*)__lwp_objmgr_allocate(&_lwp_sema_objects); + if(sema) { + __lwp_objmgr_open(&_lwp_sema_objects,&sema->object); + return sema; + } + __lwp_thread_dispatchenable(); + return NULL; +} + +s32 LWP_SemInit(sem_t *sem,u32 start,u32 max) +{ + lwp_semattr attr; + sema_st *ret; + + if(!sem) return -1; + + ret = __lwp_sema_allocate(); + if(!ret) return -1; + + attr.max_cnt = max; + attr.mode = LWP_SEMA_MODEFIFO; + __lwp_sema_initialize(&ret->sema,&attr,start); + + *sem = (sem_t)(LWP_OBJMASKTYPE(LWP_OBJTYPE_SEM)|LWP_OBJMASKID(ret->object.id)); + __lwp_thread_dispatchenable(); + return 0; +} + +s32 LWP_SemWait(sem_t sem) +{ + sema_st *lwp_sem = __lwp_sema_open(sem); + if(!lwp_sem) return -1; + + __lwp_sema_seize(&lwp_sem->sema,lwp_sem->object.id,TRUE,LWP_THREADQ_NOTIMEOUT); + __lwp_thread_dispatchenable(); + + switch(_thr_executing->wait.ret_code) { + case LWP_SEMA_SUCCESSFUL: + break; + case LWP_SEMA_UNSATISFIED_NOWAIT: + return EAGAIN; + case LWP_SEMA_DELETED: + return EAGAIN; + case LWP_SEMA_TIMEOUT: + return ETIMEDOUT; + + } + return 0; +} + +s32 LWP_SemPost(sem_t sem) +{ + sema_st *lwp_sem = __lwp_sema_open(sem); + if(!lwp_sem) return -1; + + __lwp_sema_surrender(&lwp_sem->sema,lwp_sem->object.id); + __lwp_thread_dispatchenable(); + + return 0; +} + +s32 LWP_SemDestroy(sem_t sem) +{ + sema_st *lwp_sem = __lwp_sema_open(sem); + if(!lwp_sem) return -1; + + __lwp_sema_flush(&lwp_sem->sema,-1); + __lwp_thread_dispatchenable(); + + __lwp_sema_free(lwp_sem); + return 0; +} diff --git a/wii/libogc/libogc/si.c b/wii/libogc/libogc/si.c new file mode 100644 index 0000000000..5c3bc8c30d --- /dev/null +++ b/wii/libogc/libogc/si.c @@ -0,0 +1,693 @@ +#include +#include +#include +#include +#include "asm.h" +#include "processor.h" +#include "system.h" +#include "ogcsys.h" +#include "video.h" +#include "irq.h" +#include "si.h" +#include "lwp_watchdog.h" + +#define _SHIFTL(v, s, w) \ + ((u32) (((u32)(v) & ((0x01 << (w)) - 1)) << (s))) +#define _SHIFTR(v, s, w) \ + ((u32)(((u32)(v) >> (s)) & ((0x01 << (w)) - 1))) + +#define SISR_ERRORMASK(chn) (0x0f000000>>((chn)<<3)) +#define SIPOLL_ENABLE(chn) (0x80000000>>((chn)+24)) + +#define SICOMCSR_TCINT (1<<31) +#define SICOMCSR_TCINT_ENABLE (1<<30) +#define SICOMCSR_COMERR (1<<29) +#define SICOMCSR_RDSTINT (1<<28) +#define SICOMCSR_RDSTINT_ENABLE (1<<27) +#define SICOMCSR_TSTART (1<<0) + +#define SISR_UNDERRUN 0x0001 +#define SISR_OVERRUN 0x0002 +#define SISR_COLLISION 0x0004 +#define SISR_NORESPONSE 0x0008 +#define SISR_WRST 0x0010 +#define SISR_RDST 0x0020 + +typedef union _sicomcsr { + u32 val; + struct { + u32 tcint : 1; + u32 tcintmsk : 1; + u32 comerr : 1; + u32 rdstint : 1; + u32 rdstintmsk : 1; + u32 pad2 : 4; + u32 outlen : 7; + u32 pad1 : 1; + u32 inlen : 7; + u32 pad0 : 5; + u32 channel : 2; + u32 tstart : 1; + } csrmap; +} sicomcsr; + +static struct _sipacket { + s32 chan; + void *out; + u32 out_bytes; + void *in; + u32 in_bytes; + SICallback callback; + u64 fire; +} sipacket[4]; + +static struct _sicntrl { + s32 chan; + u32 poll; + u32 in_bytes; + void *in; + SICallback callback; +} sicntrl = { + -1, + 0, + 0, + NULL, + NULL +}; + +static struct _xy { + u16 line; + u8 cnt; +} xy[2][12] = { + { + {0x00F6,0x02},{0x000F,0x12},{0x001E,0x09},{0x002C,0x06}, + {0x0034,0x05},{0x0041,0x04},{0x0057,0x03},{0x0057,0x03}, + {0x0057,0x03},{0x0083,0x02},{0x0083,0x02},{0x0083,0x02} + }, + + { + {0x0128,0x02},{0x000F,0x15},{0x001D,0x0B},{0x002D,0x07}, + {0x0034,0x06},{0x003F,0x05},{0x004E,0x04},{0x0068,0x03}, + {0x0068,0x03},{0x0068,0x03},{0x0068,0x03},{0x009C,0x02} + } +}; + +u32 __PADFixBits = 0; + +static u32 sampling_rate = 0; +static u32 cmdtypeandstatus$47 = 0; +static u32 cmdtypeandstatus$223 = 0; +static u32 cmdfixdevice[4] = {0,0,0,0}; +static u32 si_type[4] = {8,8,8,8}; +static u32 inputBufferVCount[4] = {0,0,0,0}; +static u32 inputBufferValid[4] = {0,0,0,0}; +static u32 inputBuffer[4][2] = {{0,0},{0,0},{0,0},{0,0}}; +static RDSTHandler rdstHandlers[4] = {NULL,NULL,NULL,NULL}; +static u64 typeTime[4] = {0,0,0,0}; +static u64 xferTime[4] = {0,0,0,0}; +static SICallback typeCallback[4][4] = {{NULL,NULL,NULL,NULL}, + {NULL,NULL,NULL,NULL}, + {NULL,NULL,NULL,NULL}, + {NULL,NULL,NULL,NULL}}; +static syswd_t si_alarm[4]; + +#if defined(HW_DOL) + static vu32* const _siReg = (u32*)0xCC006400; +#elif defined(HW_RVL) + static vu32* const _siReg = (u32*)0xCD006400; +#else + #error HW model unknown. +#endif + +static vu16* const _viReg = (u16*)0xCC002000; + +static u32 __si_transfer(s32 chan,void *out,u32 out_len,void *in,u32 in_len,SICallback cb); + +static __inline__ struct _xy* __si_getxy() +{ + switch(VIDEO_GetCurrentTvMode()) { + case VI_NTSC: + case VI_MPAL: + case VI_EURGB60: + return xy[0]; + break; + case VI_PAL: + return xy[1]; + break; + } + return NULL; +} + +static __inline__ void __si_cleartcinterrupt() +{ + _siReg[13] = (_siReg[13]|SICOMCSR_TCINT)&SICOMCSR_TCINT; +} + +static void __si_alarmhandler(syswd_t thealarm,void *cbarg) +{ + u32 chn = 0; + + while(chn<4) + { + if(si_alarm[chn]==thealarm) + break; + chn++; + } + if(chn==4) + return; + + if(sipacket[chn].chan!=-1) { + if(__si_transfer(sipacket[chn].chan,sipacket[chn].out,sipacket[chn].out_bytes,sipacket[chn].in,sipacket[chn].in_bytes,sipacket[chn].callback)) sipacket[chn].chan = -1; + } +} + +static u32 __si_completetransfer() +{ + u32 val,cnt,i; + u32 *in; + u32 sisr = _siReg[14]; + + __si_cleartcinterrupt(); + + if(sicntrl.chan==-1) return sisr; + + xferTime[sicntrl.chan] = gettime(); + + in = (u32*)sicntrl.in; + cnt = (sicntrl.in_bytes/4); + for(i=0;i>((3-i)*8))&0xff; + } + if(_siReg[13]&SICOMCSR_COMERR) { + sisr = (sisr>>((3-sicntrl.chan)*8))&0x0f; + if(sisr&SISR_NORESPONSE && !(si_type[sicntrl.chan]&SI_ERR_BUSY)) si_type[sicntrl.chan] = SI_ERROR_NO_RESPONSE; + if(!sisr) sisr = SISR_COLLISION; + } else { + typeTime[sicntrl.chan] = gettime(); + sisr = 0; + } + + sicntrl.chan = -1; + return sisr; +} + +static u32 __si_transfer(s32 chan,void *out,u32 out_len,void *in,u32 in_len,SICallback cb) +{ + u32 level,cnt,i; + sicomcsr csr; + _CPU_ISR_Disable(level); + if(sicntrl.chan!=-1) { + _CPU_ISR_Restore(level); + return 0; + } + _siReg[14] &= SISR_ERRORMASK(chan); + + sicntrl.chan = chan; + sicntrl.callback = cb; + sicntrl.in_bytes = in_len; + sicntrl.in = in; + cnt = ((out_len+3)/4); + for(i=0;i=0) { + if(!__si_transfer(sipacket[chan].chan,sipacket[chan].out,sipacket[chan].out_bytes,sipacket[chan].in,sipacket[chan].in_bytes,sipacket[chan].callback)) break; + SYS_CancelAlarm(si_alarm[chan]); + sipacket[chan].chan = -1; + } + } + cnt++; + } +} + +static void __si_interrupthandler(u32 irq,void *ctx) +{ + SICallback cb; + u32 chn,curr_line,line,ret; + sicomcsr csr; + + csr.val = _siReg[13]; + if(csr.csrmap.tcintmsk && csr.csrmap.tcint) { + chn = sicntrl.chan; + cb = sicntrl.callback; + sicntrl.callback = NULL; + + ret = __si_completetransfer(); + __si_transfernext(chn); + + if(cb) cb(chn,ret); + + _siReg[14] &= SISR_ERRORMASK(chn); + + if(si_type[chn]==SI_ERR_BUSY && !SI_IsChanBusy(chn)) SI_Transfer(chn,&cmdtypeandstatus$47,1,&si_type[chn],3,__si_gettypecallback,65); + } + + if(csr.csrmap.rdstintmsk && csr.csrmap.rdstint) { + curr_line = VIDEO_GetCurrentLine(); + curr_line++; + line = _SHIFTR(sicntrl.poll,16,10); + + chn = 0; + while(chn<4) { + if(SI_GetResponseRaw(chn)) inputBufferVCount[chn] = curr_line; + chn++; + } + + chn = 0; + while(chn<4) { + if(sicntrl.poll&SIPOLL_ENABLE(chn)) { + if(!inputBufferVCount[chn] || ((line>>1)+inputBufferVCount[chn])>= 24; + mask = (poll>>4)&0x0f; + sicntrl.poll &= ~mask; + + poll &= (0x03fffff0|mask); + + sicntrl.poll |= (poll&~0x03ffff00); + SI_TransferCommands(); + _siReg[12] = sicntrl.poll; + _CPU_ISR_Restore(level); +} + +void SI_DisablePolling(u32 poll) +{ + u32 level,mask; + _CPU_ISR_Disable(level); + mask = (poll>>24)&0xf0; + sicntrl.poll &= ~mask; + _siReg[12] = sicntrl.poll; + _CPU_ISR_Restore(level); +} + +void SI_SetSamplingRate(u32 samplingrate) +{ + u32 div,level; + struct _xy *xy = NULL; + + if(samplingrate>11) samplingrate = 11; + + _CPU_ISR_Disable(level); + sampling_rate = samplingrate; + xy = __si_getxy(); + + div = 1; + if(_viReg[54]&0x0001) div = 2; + + SI_SetXY(div*xy[samplingrate].line,xy[samplingrate].cnt); + _CPU_ISR_Restore(level); +} + +void SI_RefreshSamplingRate() +{ + SI_SetSamplingRate(sampling_rate); +} + +u32 SI_GetStatus(s32 chan) +{ + u32 level,sisr; + + _CPU_ISR_Disable(level); + sisr = (_siReg[14]>>((3-chan)<<3)); + if(sisr&SISR_NORESPONSE && !(si_type[chan]&SI_ERR_BUSY)) si_type[chan] = SI_ERROR_NO_RESPONSE; + _CPU_ISR_Restore(level); + return sisr; +} + +u32 SI_GetResponseRaw(s32 chan) +{ + u32 status,ret; + ret = 0; + status = SI_GetStatus(chan); + if(status&SISR_RDST) { + inputBuffer[chan][0] = _siReg[(chan*3)+1]; + inputBuffer[chan][1] = _siReg[(chan*3)+2]; + inputBufferValid[chan] = 1; + ret = 1; + } + return ret; +} + +u32 SI_GetResponse(s32 chan,void *buf) +{ + u32 level,valid; + _CPU_ISR_Disable(level); + SI_GetResponseRaw(chan); + valid = inputBufferValid[chan]; + inputBufferValid[chan] = 0; + if(valid) { + ((u32*)buf)[0] = inputBuffer[chan][0]; + ((u32*)buf)[1] = inputBuffer[chan][1]; + } + _CPU_ISR_Restore(level); + return valid; +} + +void SI_SetCommand(s32 chan,u32 cmd) +{ + _siReg[chan*3] = cmd; +} + +u32 SI_GetCommand(s32 chan) +{ + return (_siReg[chan*3]); +} + +u32 SI_Transfer(s32 chan,void *out,u32 out_len,void *in,u32 in_len,SICallback cb,u32 us_delay) +{ + u32 ret = 0; + u32 level; + s64 diff; + u64 now,fire; + struct timespec tb; + _CPU_ISR_Disable(level); + if(sipacket[chan].chan==-1 && sicntrl.chan!=chan) { + ret = 1; + fire = now = gettime(); + if(us_delay) fire = xferTime[chan]+microsecs_to_ticks(us_delay); + diff = (now - fire); + if(diff<0) { + tb.tv_sec = 0; + tb.tv_nsec = ticks_to_nanosecs((fire - now)); + SYS_SetAlarm(si_alarm[chan],&tb,__si_alarmhandler,NULL); + } else if(__si_transfer(chan,out,out_len,in,in_len,cb)) { + _CPU_ISR_Restore(level); + return ret; + } + sipacket[chan].chan = chan; + sipacket[chan].out = out; + sipacket[chan].out_bytes = out_len; + sipacket[chan].in = in; + sipacket[chan].in_bytes = in_len; + sipacket[chan].callback = cb; + sipacket[chan].fire = fire; + } + _CPU_ISR_Restore(level); + return ret; +} + +u32 SI_GetType(s32 chan) +{ + u32 level,type; + u64 now; + s64 diff; + _CPU_ISR_Disable(level); + now = gettime(); + type = si_type[chan]; + diff = (now - typeTime[chan]); + if(sicntrl.poll&(0x80>>chan)) { + if(type!=SI_ERROR_NO_RESPONSE) { + typeTime[chan] = gettime(); + _CPU_ISR_Restore(level); + return type; + } + si_type[chan] = type = SI_ERR_BUSY; + } else if(diff==millisecs_to_ticks(50) && type!=SI_ERROR_NO_RESPONSE) { + _CPU_ISR_Restore(level); + return type; + } else if(diff==millisecs_to_ticks(75)) si_type[chan] = SI_ERR_BUSY; + else si_type[chan] = type = SI_ERR_BUSY; + + typeTime[chan] = gettime(); + + SI_Transfer(chan,&cmdtypeandstatus$223,1,&si_type[chan],3,__si_gettypecallback,65); + _CPU_ISR_Restore(level); + + return type; +} + +u32 SI_GetTypeAsync(s32 chan,SICallback cb) +{ + u32 level; + u32 type,i; + _CPU_ISR_Disable(level); + type = SI_GetType(chan); + if(si_type[chan]&SI_ERR_BUSY) { + i=0; + for(i=0;i<4;i++) { + if(!typeCallback[chan][i] && typeCallback[chan][i]!=cb) { + typeCallback[chan][i] = cb; + break; + } + } + _CPU_ISR_Restore(level); + return type; + } + + cb(chan,type); + _CPU_ISR_Restore(level); + return type; +} + +void SI_TransferCommands() +{ + _siReg[14] = 0x80000000; +} + +u32 SI_RegisterPollingHandler(RDSTHandler handler) +{ + u32 level,i; + + _CPU_ISR_Disable(level); + + i = 0; + for(i=0;i<4;i++) { + if(rdstHandlers[i]==handler) { + _CPU_ISR_Restore(level); + return 1; + } + } + + for(i=0;i<4;i++) { + if(rdstHandlers[i]==NULL) { + rdstHandlers[i] = handler; + SI_EnablePollingInterrupt(TRUE); + _CPU_ISR_Restore(level); + return 1; + } + } + + _CPU_ISR_Restore(level); + return 0; +} + +u32 SI_UnregisterPollingHandler(RDSTHandler handler) +{ + u32 level,i; + + _CPU_ISR_Disable(level); + for(i=0;i<4;i++) { + if(rdstHandlers[i]==handler) { + rdstHandlers[i] = NULL; + for(i=0;i<4;i++) { + if(rdstHandlers[i]!=NULL) break; + } + if(i>=4) SI_EnablePollingInterrupt(FALSE); + + _CPU_ISR_Restore(level); + return 1; + } + } + _CPU_ISR_Restore(level); + return 0; +} + +u32 SI_EnablePollingInterrupt(s32 enable) +{ + sicomcsr csr; + u32 level,ret,i; + + _CPU_ISR_Disable(level); + + ret = 0; + csr.val = _siReg[13]; + if(csr.csrmap.rdstintmsk) ret = 1; + + if(enable) { + csr.csrmap.rdstintmsk = 1; + for(i=0;i<4;i++) inputBufferVCount[i] = 0; + } else + csr.csrmap.rdstintmsk = 0; + + csr.val &= 0x7ffffffe; + _siReg[13] = csr.val; + + _CPU_ISR_Restore(level); + return ret; +} + +void __si_init() +{ + u32 i; + for(i=0;i<4;i++) { + sipacket[i].chan = -1; + SYS_CreateAlarm(&si_alarm[i]); + } + sicntrl.poll = 0; + + SI_SetSamplingRate(0); + while(_siReg[13]&0x0001); + _siReg[13] = 0x80000000; + + _siReg[15] &= ~0x80000000; // permit exi clock to be set to 32MHz + + IRQ_Request(IRQ_PI_SI,__si_interrupthandler,NULL); + __UnmaskIrq(IRQMASK(IRQ_PI_SI)); + + SI_GetType(0); + SI_GetType(1); + SI_GetType(2); + SI_GetType(3); +} diff --git a/wii/libogc/libogc/stm.c b/wii/libogc/libogc/stm.c new file mode 100644 index 0000000000..396e15509e --- /dev/null +++ b/wii/libogc/libogc/stm.c @@ -0,0 +1,243 @@ +/*------------------------------------------------------------- + +stm.c - System and miscellaneous hardware control functions + +Copyright (C) 2008 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) +Hector Martin (marcan) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + +#if defined(HW_RVL) + +#include +#include "ipc.h" +#include "system.h" +#include "asm.h" +#include "processor.h" +#include "stm.h" + +#define IOCTL_STM_EVENTHOOK 0x1000 +#define IOCTL_STM_GET_IDLEMODE 0x3001 +#define IOCTL_STM_RELEASE_EH 0x3002 +#define IOCTL_STM_HOTRESET 0x2001 +#define IOCTL_STM_HOTRESET_FOR_PD 0x2002 +#define IOCTL_STM_SHUTDOWN 0x2003 +#define IOCTL_STM_IDLE 0x2004 +#define IOCTL_STM_WAKEUP 0x2005 +#define IOCTL_STM_VIDIMMING 0x5001 +#define IOCTL_STM_LEDFLASH 0x6001 +#define IOCTL_STM_LEDMODE 0x6002 +#define IOCTL_STM_READVER 0x7001 +#define IOCTL_STM_READDDRREG 0x4001 +#define IOCTL_STM_READDDRREG2 0x4002 + +static s32 __stm_eh_fd = -1; +static s32 __stm_imm_fd = -1; +static u32 __stm_vdinuse = 0; +static u32 __stm_initialized= 0; +static u32 __stm_ehregistered= 0; +static u32 __stm_ehclear= 0; + +static u32 __stm_ehbufin[0x08] ATTRIBUTE_ALIGN(32) = {0,0,0,0,0,0,0,0}; +static u32 __stm_ehbufout[0x08] ATTRIBUTE_ALIGN(32) = {0,0,0,0,0,0,0,0}; +static u32 __stm_immbufin[0x08] ATTRIBUTE_ALIGN(32) = {0,0,0,0,0,0,0,0}; +static u32 __stm_immbufout[0x08] ATTRIBUTE_ALIGN(32) = {0,0,0,0,0,0,0,0}; + +static char __stm_eh_fs[] ATTRIBUTE_ALIGN(32) = "/dev/stm/eventhook"; +static char __stm_imm_fs[] ATTRIBUTE_ALIGN(32) = "/dev/stm/immediate"; + +s32 __STM_SetEventHook(); +s32 __STM_ReleaseEventHook(); +static s32 __STMEventHandler(s32 result,void *usrdata); + +stmcallback __stm_eventcb = NULL; + +static vu16* const _viReg = (u16*)0xCC002000; + +s32 __STM_Init() +{ + if(__stm_initialized==1) return 1; + + __stm_vdinuse = 0; + __stm_imm_fd = IOS_Open(__stm_imm_fs,0); + if(__stm_imm_fd<0) return 0; + + __stm_eh_fd = IOS_Open(__stm_eh_fs,0); + if(__stm_eh_fd<0) return 0; + + __stm_initialized = 1; + __STM_SetEventHook(); + return 1; +} + +s32 __STM_Close() +{ + s32 res; + s32 ret = 0; + __STM_ReleaseEventHook(); + + if(__stm_imm_fd >= 0) { + res = IOS_Close(__stm_imm_fd); + if(res < 0) ret = res; + __stm_imm_fd = -1; + } + if(__stm_eh_fd >= 0) { + res = IOS_Close(__stm_eh_fd); + if(res < 0) ret = res; + __stm_eh_fd = -1; + } + __stm_initialized = 0; + return ret; +} + +s32 __STM_SetEventHook() +{ + s32 ret; + u32 level; + + if(__stm_initialized==0) return STM_ENOTINIT; + + __stm_ehclear = 0; + + _CPU_ISR_Disable(level); + ret = IOS_IoctlAsync(__stm_eh_fd,IOCTL_STM_EVENTHOOK,__stm_ehbufin,0x20,__stm_ehbufout,0x20,__STMEventHandler,NULL); + if(ret<0) __stm_ehregistered = 0; + else __stm_ehregistered = 1; + _CPU_ISR_Restore(level); + + return ret; +} + +s32 __STM_ReleaseEventHook() +{ + s32 ret; + + if(__stm_initialized==0) return STM_ENOTINIT; + if(__stm_ehregistered==0) return STM_ENOHANDLER; + + __stm_ehclear = 1; + + ret = IOS_Ioctl(__stm_imm_fd,IOCTL_STM_RELEASE_EH,__stm_immbufin,0x20,__stm_immbufout,0x20); + if(ret>=0) __stm_ehregistered = 0; + + return ret; +} + +static s32 __STMEventHandler(s32 result,void *usrdata) +{ + __stm_ehregistered = 0; + + if(result < 0) { // shouldn't happen + return result; + } + + if(__stm_ehclear) { //release + return 0; + } + + if(__stm_eventcb) { + __stm_eventcb(__stm_ehbufout[0]); + } + + __STM_SetEventHook(); + + return 0; +} + +stmcallback STM_RegisterEventHandler(stmcallback newhandler) +{ + stmcallback old; + old = __stm_eventcb; + __stm_eventcb = newhandler; + return old; +} + +s32 STM_ShutdownToStandby() +{ + int res; + + _viReg[1] = 0; + if(__stm_initialized==0) { + return STM_ENOTINIT; + } + __stm_immbufin[0] = 0; + res= IOS_Ioctl(__stm_imm_fd,IOCTL_STM_SHUTDOWN,__stm_immbufin,0x20,__stm_immbufout,0x20); + if(res<0) { + } + return res; +} + +s32 STM_ShutdownToIdle() +{ + int res; + + _viReg[1] = 0; + if(__stm_initialized==0) { + return STM_ENOTINIT; + } + switch(SYS_GetHollywoodRevision()) { + case 0: + case 1: + case 2: + __stm_immbufin[0] = 0xFCA08280; + default: + __stm_immbufin[0] = 0xFCE082C0; + } + res= IOS_Ioctl(__stm_imm_fd,IOCTL_STM_IDLE,__stm_immbufin,0x20,__stm_immbufout,0x20); + if(res<0) { + } + return res; +} + +s32 STM_SetLedMode(u32 mode) +{ + int res; + if(__stm_initialized==0) { + return STM_ENOTINIT; + } + __stm_immbufin[0] = mode; + res= IOS_Ioctl(__stm_imm_fd,IOCTL_STM_LEDMODE,__stm_immbufin,0x20,__stm_immbufout,0x20); + if(res<0) { + } + return res; +} + +s32 STM_RebootSystem() +{ + int res; + + _viReg[1] = 0; + if(__stm_initialized==0) { + return STM_ENOTINIT; + } + __stm_immbufin[0] = 0; + res= IOS_Ioctl(__stm_imm_fd,IOCTL_STM_HOTRESET,__stm_immbufin,0x20,__stm_immbufout,0x20); + if(res<0) { + } + return res; +} + + + +#endif /* defined(HW_RVL) */ diff --git a/wii/libogc/libogc/sys_state.c b/wii/libogc/libogc/sys_state.c new file mode 100644 index 0000000000..32a96ef55b --- /dev/null +++ b/wii/libogc/libogc/sys_state.c @@ -0,0 +1,3 @@ +#include "sys_state.h" + +u32 _sys_state_curr; diff --git a/wii/libogc/libogc/sys_state.inl b/wii/libogc/libogc/sys_state.inl new file mode 100644 index 0000000000..a3835a96cb --- /dev/null +++ b/wii/libogc/libogc/sys_state.inl @@ -0,0 +1,44 @@ +#ifndef __SYS_STATE_INL__ +#define __SYS_STATE_INL__ + +static __inline__ void __sys_state_init() +{ + _sys_state_curr = SYS_STATE_BEFORE_INIT; +} + +static __inline__ void __sys_state_set(u32 sys_state) +{ + _sys_state_curr = sys_state; +} + +static __inline__ u32 __sys_state_get() +{ + return _sys_state_curr; +} + +static __inline__ u32 __sys_state_beforeinit(u32 statecode) +{ + return (statecode==SYS_STATE_BEFORE_INIT); +} + +static __inline__ u32 __sys_state_beforemultitasking(u32 statecode) +{ + return (statecode==SYS_STATE_BEFORE_MT); +} + +static __inline__ u32 __sys_state_beginmultitasking(u32 statecode) +{ + return (statecode==SYS_STATE_BEGIN_MT); +} + +static __inline__ u32 __sys_state_up(u32 statecode) +{ + return (statecode==SYS_STATE_UP); +} + +static __inline__ u32 __sys_state_failed(u32 statecode) +{ + return (statecode==SYS_STATE_FAILED); +} + +#endif diff --git a/wii/libogc/libogc/system.c b/wii/libogc/libogc/system.c new file mode 100644 index 0000000000..9e76ae3e07 --- /dev/null +++ b/wii/libogc/libogc/system.c @@ -0,0 +1,1723 @@ +/*------------------------------------------------------------- + +system.c -- OS functions and initialization + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + +#include +#include +#include +#include +#include + +#include "asm.h" +#include "irq.h" +#include "exi.h" +#if defined(HW_RVL) +#include "ipc.h" +#include "ios.h" +#include "stm.h" +#include "es.h" +#include "conf.h" +#include "wiilaunch.h" +#endif +#include "cache.h" +#include "video.h" +#include "system.h" +#include "sys_state.h" +#include "lwp_threads.h" +#include "lwp_priority.h" +#include "lwp_watchdog.h" +#include "lwp_wkspace.h" +#include "lwp_objmgr.h" +#include "lwp_config.h" +#include "libversion.h" + +#define SYSMEM1_SIZE 0x01800000 +#if defined(HW_RVL) +#define SYSMEM2_SIZE 0x04000000 +#endif +#define KERNEL_HEAP (1*1024*1024) + +// DSPCR bits +#define DSPCR_DSPRESET 0x0800 // Reset DSP +#define DSPCR_DSPDMA 0x0200 // ARAM dma in progress, if set +#define DSPCR_DSPINTMSK 0x0100 // * interrupt mask (RW) +#define DSPCR_DSPINT 0x0080 // * interrupt active (RWC) +#define DSPCR_ARINTMSK 0x0040 +#define DSPCR_ARINT 0x0020 +#define DSPCR_AIINTMSK 0x0010 +#define DSPCR_AIINT 0x0008 +#define DSPCR_HALT 0x0004 // halt DSP +#define DSPCR_PIINT 0x0002 // assert DSP PI interrupt +#define DSPCR_RES 0x0001 // reset DSP + +#define LWP_OBJTYPE_SYSWD 7 + +#define LWP_CHECK_SYSWD(hndl) \ +{ \ + if(((hndl)==SYS_WD_NULL) || (LWP_OBJTYPE(hndl)!=LWP_OBJTYPE_SYSWD)) \ + return NULL; \ +} + +#define _SHIFTL(v, s, w) \ + ((u32) (((u32)(v) & ((0x01 << (w)) - 1)) << (s))) +#define _SHIFTR(v, s, w) \ + ((u32)(((u32)(v) >> (s)) & ((0x01 << (w)) - 1))) + +struct _sramcntrl { + u8 srambuf[64]; + u32 offset; + s32 enabled; + s32 locked; + s32 sync; +} sramcntrl ATTRIBUTE_ALIGN(32); + +typedef struct _alarm_st +{ + lwp_obj object; + wd_cntrl alarm; + u64 ticks; + u64 periodic; + u64 start_per; + alarmcallback alarmhandler; + void *cb_arg; +} alarm_st; + +typedef struct _yay0header { + unsigned int id ATTRIBUTE_PACKED; + unsigned int dec_size ATTRIBUTE_PACKED; + unsigned int links_offset ATTRIBUTE_PACKED; + unsigned int chunks_offset ATTRIBUTE_PACKED; +} yay0header; + +static u16 sys_fontenc = 0xffff; +static u32 sys_fontcharsinsheet = 0; +static u8 *sys_fontwidthtab = NULL; +static u8 *sys_fontimage = NULL; +static sys_fontheader *sys_fontdata = NULL; + +static lwp_queue sys_reset_func_queue; +static u32 system_initialized = 0; +static lwp_objinfo sys_alarm_objects; + +static void *__sysarena1lo = NULL; +static void *__sysarena1hi = NULL; + +#if defined(HW_RVL) +static void *__sysarena2lo = NULL; +static void *__sysarena2hi = NULL; +static void *__ipcbufferlo = NULL; +static void *__ipcbufferhi = NULL; +#endif + +static void __RSWDefaultHandler(); +static resetcallback __RSWCallback = NULL; +#if defined(HW_RVL) +static void __POWDefaultHandler(); +static powercallback __POWCallback = NULL; + +static u32 __sys_resetdown = 0; +#endif + +static vu16* const _viReg = (u16*)0xCC002000; +static vu32* const _piReg = (u32*)0xCC003000; +static vu16* const _memReg = (u16*)0xCC004000; +static vu16* const _dspReg = (u16*)0xCC005000; + +void __SYS_ReadROM(void *buf,u32 len,u32 offset); +void* SYS_AllocArena1MemLo(u32 size,u32 align); + +static s32 __sram_sync(void); +static s32 __sram_writecallback(s32 chn,s32 dev); +static s32 __mem_onreset(s32 final); + +extern void __lwp_thread_coreinit(void); +extern void __lwp_sysinit(void); +extern void __heap_init(void); +extern void __exception_init(void); +extern void __exception_closeall(void); +extern void __systemcall_init(void); +extern void __decrementer_init(void); +extern void __lwp_mutex_init(void); +extern void __lwp_cond_init(void); +extern void __lwp_mqbox_init(void); +extern void __lwp_sema_init(void); +extern void __exi_init(void); +extern void __si_init(void); +extern void __irq_init(void); +extern void __lwp_start_multitasking(void); +extern void __timesystem_init(void); +extern void __memlock_init(void); +extern void __libc_init(int); + +extern void __libogc_malloc_lock( struct _reent *ptr ); +extern void __libogc_malloc_unlock( struct _reent *ptr ); + +extern void __exception_console(void); +extern void __exception_printf(const char *str, ...); + +extern void __realmode(void*); +extern void __configMEM1_24Mb(void); +extern void __configMEM1_48Mb(void); +extern void __configMEM2_64Mb(void); +extern void __configMEM2_128Mb(void); +extern void __reset(u32 reset_code); + +extern u32 __IPC_ClntInit(void); +extern u32 __PADDisableRecalibration(s32 disable); + +extern void __console_init_ex(void *conbuffer,int tgt_xstart,int tgt_ystart,int tgt_stride,int con_xres,int con_yres,int con_stride); + +extern int clock_gettime(struct timespec *tp); +extern void timespec_subtract(const struct timespec *tp_start,const struct timespec *tp_end,struct timespec *result); + + +extern int __libogc_lock_init(int *lock,int recursive); +extern int __libogc_lock_close(int *lock); +extern int __libogc_lock_release(int *lock); +extern int __libogc_lock_acquire(int *lock); +extern void __libogc_exit(int status); +extern void * __libogc_sbrk_r(struct _reent *ptr, ptrdiff_t incr); +extern int __libogc_gettod_r(struct _reent *ptr, struct timeval *tp, struct timezone *tz); + +extern u8 __gxregs[]; +extern u8 __text_start[]; +extern u8 __isIPL[]; +extern u8 __Arena1Lo[], __Arena1Hi[]; +#if defined(HW_RVL) +extern u8 __Arena2Lo[], __Arena2Hi[]; +extern u8 __ipcbufferLo[], __ipcbufferHi[]; +#endif + +u8 *__argvArena1Lo = (u8*)0xdeadbeef; + +static u32 __sys_inIPL = (u32)__isIPL; + +static u32 _dsp_initcode[] = +{ + 0x029F0010,0x029F0033,0x029F0034,0x029F0035, + 0x029F0036,0x029F0037,0x029F0038,0x029F0039, + 0x12061203,0x12041205,0x00808000,0x0088FFFF, + 0x00841000,0x0064001D,0x02180000,0x81001C1E, + 0x00441B1E,0x00840800,0x00640027,0x191E0000, + 0x00DEFFFC,0x02A08000,0x029C0028,0x16FC0054, + 0x16FD4348,0x002102FF,0x02FF02FF,0x02FF02FF, + 0x02FF02FF,0x00000000,0x00000000,0x00000000 +}; + +static sys_resetinfo mem_resetinfo = { + {}, + __mem_onreset, + 127 +}; + +static const char *__sys_versiondate; +static const char *__sys_versionbuild; + +static __inline__ alarm_st* __lwp_syswd_open(syswd_t wd) +{ + LWP_CHECK_SYSWD(wd); + return (alarm_st*)__lwp_objmgr_get(&sys_alarm_objects,LWP_OBJMASKID(wd)); +} + +static __inline__ void __lwp_syswd_free(alarm_st *alarm) +{ + __lwp_objmgr_close(&sys_alarm_objects,&alarm->object); + __lwp_objmgr_free(&sys_alarm_objects,&alarm->object); +} + +#ifdef HW_DOL +#define SOFTRESET_ADR *((vu32*)0xCC003024) +void __reload() { SOFTRESET_ADR=0; } + +void __libogc_exit(int status) +{ + SYS_ResetSystem(SYS_SHUTDOWN,0,0); + __lwp_thread_stopmultitasking(__reload); +} +#else +static void (*reload)() = (void(*)())0x80001800; + +static bool __stub_found() +{ + u64 sig = ((u64)(*(u32*)0x80001804) << 32) + *(u32*)0x80001808; + if (sig == 0x5354554248415858ULL) // 'STUBHAXX' + return true; + return false; +} + +void __reload() +{ + if(__stub_found()) { + __exception_closeall(); + reload(); + } + SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); +} + +void __libogc_exit(int status) +{ + if(__stub_found()) { + SYS_ResetSystem(SYS_SHUTDOWN,0,0); + __lwp_thread_stopmultitasking(reload); + } + SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); +} + +#endif + +static void __init_syscall_array() { + __syscalls.sbrk_r = __libogc_sbrk_r; + __syscalls.lock_init = __libogc_lock_init; + __syscalls.lock_close = __libogc_lock_close; + __syscalls.lock_release = __libogc_lock_release; + __syscalls.lock_acquire = __libogc_lock_acquire; + __syscalls.malloc_lock = __libogc_malloc_lock; + __syscalls.malloc_unlock = __libogc_malloc_unlock; + __syscalls.exit = __libogc_exit; + __syscalls.gettod_r = __libogc_gettod_r; + +} + +static alarm_st* __lwp_syswd_allocate() +{ + alarm_st *alarm; + + __lwp_thread_dispatchdisable(); + alarm = (alarm_st*)__lwp_objmgr_allocate(&sys_alarm_objects); + if(alarm) { + __lwp_objmgr_open(&sys_alarm_objects,&alarm->object); + return alarm; + } + __lwp_thread_dispatchenable(); + return NULL; +} + +static s32 __mem_onreset(s32 final) +{ + if(final==TRUE) { + _memReg[8] = 255; + __UnmaskIrq(IM_MEM0|IM_MEM1|IM_MEM2|IM_MEM3); + } + return 1; +} + +static void __sys_alarmhandler(void *arg) +{ + alarm_st *alarm; + syswd_t thealarm = (syswd_t)arg; + + if(thealarm==SYS_WD_NULL || LWP_OBJTYPE(thealarm)!=LWP_OBJTYPE_SYSWD) return; + + __lwp_thread_dispatchdisable(); + alarm = (alarm_st*)__lwp_objmgr_getnoprotection(&sys_alarm_objects,LWP_OBJMASKID(thealarm)); + if(alarm) { + if(alarm->alarmhandler) alarm->alarmhandler(thealarm,alarm->cb_arg); + if(alarm->periodic) __lwp_wd_insert_ticks(&alarm->alarm,alarm->periodic); + } + __lwp_thread_dispatchunnest(); +} + +#if defined(HW_DOL) +static void __dohotreset(u32 resetcode) +{ + u32 level; + + _CPU_ISR_Disable(level); + _viReg[1] = 0; + ICFlashInvalidate(); + __reset(resetcode<<3); +} +#endif + +static s32 __call_resetfuncs(s32 final) +{ + s32 ret; + sys_resetinfo *info; + lwp_queue *header = &sys_reset_func_queue; + + ret = 1; + info = (sys_resetinfo*)header->first; + while(info!=(sys_resetinfo*)__lwp_queue_tail(header)) { + if(info->func && info->func(final)==0) ret |= (ret<<1); + info = (sys_resetinfo*)info->node.next; + } + if(__sram_sync()==0) ret |= (ret<<1); + + if(ret&~0x01) return 0; + return 1; +} + +#if defined(HW_DOL) +static void __doreboot(u32 resetcode,s32 force_menu) +{ + u32 level; + + _CPU_ISR_Disable(level); + + *((u32*)0x817ffffc) = 0; + *((u32*)0x817ffff8) = 0; + *((u32*)0x800030e2) = 1; +} +#endif + +static void __MEMInterruptHandler() +{ + _memReg[16] = 0; +} + +static void __RSWDefaultHandler() +{ + +} + +#if defined(HW_RVL) +static void __POWDefaultHandler() +{ +} +#endif + +#if defined(HW_DOL) +static void __RSWHandler() +{ + s64 now; + static s64 hold_down = 0; + + hold_down = gettime(); + do { + now = gettime(); + if(diff_usec(hold_down,now)>=100) break; + } while(!(_piReg[0]&0x10000)); + + if(_piReg[0]&0x10000) { + __MaskIrq(IRQMASK(IRQ_PI_RSW)); + + if(__RSWCallback) { + __RSWCallback(); + } + } + _piReg[0] = 2; +} +#endif + +#if defined(HW_RVL) +static void __STMEventHandler(u32 event) +{ + s32 ret; + u32 level; + + if(event==STM_EVENT_RESET) { + ret = SYS_ResetButtonDown(); + if(ret) { + _CPU_ISR_Disable(level); + __sys_resetdown = 1; + __RSWCallback(); + _CPU_ISR_Restore(level); + } + } + + if(event==STM_EVENT_POWER) { + _CPU_ISR_Disable(level); + __POWCallback(); + _CPU_ISR_Restore(level); + } +} +#endif + +void * __attribute__ ((weak)) __myArena1Lo = 0; +void * __attribute__ ((weak)) __myArena1Hi = 0; + +static void __lowmem_init() +{ + u32 *_gx = (u32*)__gxregs; + +#if defined(HW_DOL) + void *ram_start = (void*)0x80000000; + void *ram_end = (void*)(0x80000000|SYSMEM1_SIZE); + void *arena_start = (void*)0x80003000; +#elif defined(HW_RVL) + void *arena_start = (void*)0x80003F00; +#endif + + memset(_gx,0,2048); + memset(arena_start,0,0x100); + if ( __argvArena1Lo == (u8*)0xdeadbeef ) __argvArena1Lo = __Arena1Lo; + if (__myArena1Lo == 0) __myArena1Lo = __argvArena1Lo; + if (__myArena1Hi == 0) __myArena1Hi = __Arena1Hi; + +#if defined(HW_DOL) + memset(ram_start,0,0x100); + *((u32*)(ram_start+0x20)) = 0x0d15ea5e; // magic word "disease" + *((u32*)(ram_start+0x24)) = 1; // version + *((u32*)(ram_start+0x28)) = SYSMEM1_SIZE; // physical memory size + *((u32*)(ram_start+0x2C)) = 1 + ((*(u32*)0xCC00302c)>>28); + + *((u32*)(ram_start+0x30)) = (u32)__myArena1Lo; + *((u32*)(ram_start+0x34)) = (u32)__myArena1Hi; + + *((u32*)(ram_start+0xEC)) = (u32)ram_end; // ram_end (??) + *((u32*)(ram_start+0xF0)) = SYSMEM1_SIZE; // simulated memory size + *((u32*)(ram_start+0xF8)) = TB_BUS_CLOCK; // bus speed: 162 MHz + *((u32*)(ram_start+0xFC)) = TB_CORE_CLOCK; // cpu speed: 486 Mhz + + *((u16*)(arena_start+0xE0)) = 6; // production pads + *((u32*)(arena_start+0xE4)) = 0xC0008000; + + DCFlushRangeNoSync(ram_start, 0x100); +#endif + + DCFlushRangeNoSync(arena_start, 0x100); + DCFlushRangeNoSync(_gx, 2048); + _sync(); + + SYS_SetArenaLo((void*)__myArena1Lo); + SYS_SetArenaHi((void*)__myArena1Hi); +#if defined(HW_RVL) + SYS_SetArena2Lo((void*)__Arena2Lo); + SYS_SetArena2Hi((void*)__Arena2Hi); +#endif +} + +#if defined(HW_RVL) +static void __ipcbuffer_init() +{ + __ipcbufferlo = (void*)__ipcbufferLo; + __ipcbufferhi = (void*)__ipcbufferHi; +} +#endif + +static void __memprotect_init() +{ + u32 level; + + _CPU_ISR_Disable(level); + + __MaskIrq((IM_MEM0|IM_MEM1|IM_MEM2|IM_MEM3)); + + _memReg[16] = 0; + _memReg[8] = 255; + + IRQ_Request(IRQ_MEM0,__MEMInterruptHandler,NULL); + IRQ_Request(IRQ_MEM1,__MEMInterruptHandler,NULL); + IRQ_Request(IRQ_MEM2,__MEMInterruptHandler,NULL); + IRQ_Request(IRQ_MEM3,__MEMInterruptHandler,NULL); + IRQ_Request(IRQ_MEMADDRESS,__MEMInterruptHandler,NULL); + + SYS_RegisterResetFunc(&mem_resetinfo); + __UnmaskIrq(IM_MEMADDRESS); //only enable memaddress irq atm + + _CPU_ISR_Restore(level); +} + +static __inline__ u32 __get_fontsize(void *buffer) +{ + u8 *ptr = (u8*)buffer; + + if(ptr[0]=='Y' && ptr[1]=='a' && ptr[2]=='y') return (((u32*)ptr)[1]); + else return 0; +} + +static u32 __read_rom(void *buf,u32 len,u32 offset) +{ + u32 ret; + u32 loff; + + DCInvalidateRange(buf,len); + + if(EXI_Lock(EXI_CHANNEL_0,EXI_DEVICE_1,NULL)==0) return 0; + if(EXI_Select(EXI_CHANNEL_0,EXI_DEVICE_1,EXI_SPEED8MHZ)==0) { + EXI_Unlock(EXI_CHANNEL_0); + return 0; + } + + ret = 0; + loff = offset<<6; + if(EXI_Imm(EXI_CHANNEL_0,&loff,4,EXI_WRITE,NULL)==0) ret |= 0x0001; + if(EXI_Sync(EXI_CHANNEL_0)==0) ret |= 0x0002; + if(EXI_Dma(EXI_CHANNEL_0,buf,len,EXI_READ,NULL)==0) ret |= 0x0004; + if(EXI_Sync(EXI_CHANNEL_0)==0) ret |= 0x0008; + if(EXI_Deselect(EXI_CHANNEL_0)==0) ret |= 0x0010; + if(EXI_Unlock(EXI_CHANNEL_0)==0) ret |= 0x00020; + + if(ret) return 0; + return 1; +} + +static u32 __getrtc(u32 *gctime) +{ + u32 ret; + u32 cmd; + u32 time; + + if(EXI_Lock(EXI_CHANNEL_0,EXI_DEVICE_1,NULL)==0) return 0; + if(EXI_Select(EXI_CHANNEL_0,EXI_DEVICE_1,EXI_SPEED8MHZ)==0) { + EXI_Unlock(EXI_CHANNEL_0); + return 0; + } + + ret = 0; + time = 0; + cmd = 0x20000000; + if(EXI_Imm(EXI_CHANNEL_0,&cmd,4,EXI_WRITE,NULL)==0) ret |= 0x01; + if(EXI_Sync(EXI_CHANNEL_0)==0) ret |= 0x02; + if(EXI_Imm(EXI_CHANNEL_0,&time,4,EXI_READ,NULL)==0) ret |= 0x04; + if(EXI_Sync(EXI_CHANNEL_0)==0) ret |= 0x08; + if(EXI_Deselect(EXI_CHANNEL_0)==0) ret |= 0x10; + + EXI_Unlock(EXI_CHANNEL_0); + *gctime = time; + if(ret) return 0; + + return 1; +} + +static u32 __sram_read(void *buffer) +{ + u32 command,ret; + + DCInvalidateRange(buffer,64); + + if(EXI_Lock(EXI_CHANNEL_0,EXI_DEVICE_1,NULL)==0) return 0; + if(EXI_Select(EXI_CHANNEL_0,EXI_DEVICE_1,EXI_SPEED8MHZ)==0) { + EXI_Unlock(EXI_CHANNEL_0); + return 0; + } + + ret = 0; + command = 0x20000100; + if(EXI_Imm(EXI_CHANNEL_0,&command,4,EXI_WRITE,NULL)==0) ret |= 0x01; + if(EXI_Sync(EXI_CHANNEL_0)==0) ret |= 0x02; + if(EXI_Dma(EXI_CHANNEL_0,buffer,64,EXI_READ,NULL)==0) ret |= 0x04; + if(EXI_Sync(EXI_CHANNEL_0)==0) ret |= 0x08; + if(EXI_Deselect(EXI_CHANNEL_0)==0) ret |= 0x10; + if(EXI_Unlock(EXI_CHANNEL_0)==0) ret |= 0x20; + + if(ret) return 0; + return 1; +} + +static u32 __sram_write(void *buffer,u32 loc,u32 len) +{ + u32 cmd,ret; + + if(EXI_Lock(EXI_CHANNEL_0,EXI_DEVICE_1,__sram_writecallback)==0) return 0; + if(EXI_Select(EXI_CHANNEL_0,EXI_DEVICE_1,EXI_SPEED8MHZ)==0) { + EXI_Unlock(EXI_CHANNEL_0); + return 0; + } + + ret = 0; + cmd = 0xa0000100+(loc<<6); + if(EXI_Imm(EXI_CHANNEL_0,&cmd,4,EXI_WRITE,NULL)==0) ret |= 0x01; + if(EXI_Sync(EXI_CHANNEL_0)==0) ret |= 0x02; + if(EXI_ImmEx(EXI_CHANNEL_0,buffer,len,EXI_WRITE)==0) ret |= 0x04; + if(EXI_Deselect(EXI_CHANNEL_0)==0) ret |= 0x08; + if(EXI_Unlock(EXI_CHANNEL_0)==0) ret |= 0x10; + + if(ret) return 0; + return 1; +} + +static s32 __sram_writecallback(s32 chn,s32 dev) +{ + sramcntrl.sync = __sram_write(sramcntrl.srambuf+sramcntrl.offset,sramcntrl.offset,(64-sramcntrl.offset)); + if(sramcntrl.sync) sramcntrl.offset = 64; + + return 1; +} + +static s32 __sram_sync() +{ + return sramcntrl.sync; +} + +void __sram_init() +{ + sramcntrl.enabled = 0; + sramcntrl.locked = 0; + sramcntrl.sync = __sram_read(sramcntrl.srambuf); + + sramcntrl.offset = 64; +} + +static void DisableWriteGatherPipe() +{ + mtspr(920,(mfspr(920)&~0x40000000)); +} + +static void __buildchecksum(u16 *buffer,u16 *c1,u16 *c2) +{ + u32 i; + + *c1 = 0; + *c2 = 0; + for(i=0;i<4;i++) { + *c1 += buffer[6+i]; + *c2 += buffer[6+i]^-1; + } +} + +static void* __locksram(u32 loc) +{ + u32 level; + + _CPU_ISR_Disable(level); + if(!sramcntrl.locked) { + sramcntrl.enabled = level; + sramcntrl.locked = 1; + return (void*)((u32)sramcntrl.srambuf+loc); + } + _CPU_ISR_Restore(level); + return NULL; +} + +static u32 __unlocksram(u32 write,u32 loc) +{ + syssram *sram = (syssram*)sramcntrl.srambuf; + + if(write) { + if(!loc) { + if((sram->flags&0x03)>0x02) sram->flags = (sram->flags&~0x03); + __buildchecksum((u16*)sramcntrl.srambuf,&sram->checksum,&sram->checksum_inv); + } + if(locsheet_format==0x0000) { + cnt = (sys_fontdata->sheet_fullsize/2)-1; + + while(cnt>=0) { + idx = _SHIFTR(src[cnt],6,2); + val1 = data[idx]; + + idx = _SHIFTR(src[cnt],4,2); + val2 = data[idx]; + + dest[(cnt<<1)+0] =((val1&0xf0)|(val2&0x0f)); + + idx = _SHIFTR(src[cnt],2,2); + val1 = data[idx]; + + idx = _SHIFTR(src[cnt],0,2); + val2 = data[idx]; + + dest[(cnt<<1)+1] =((val1&0xf0)|(val2&0x0f)); + + cnt--; + } + } + DCStoreRange(dest,sys_fontdata->sheet_fullsize); +} + +static void __dsp_bootstrap() +{ + u16 status; + u32 tick; + + memcpy(SYS_GetArenaHi()-128,(void*)0x81000000,128); + memcpy((void*)0x81000000,_dsp_initcode,128); + DCFlushRange((void*)0x81000000,128); + + _dspReg[9] = 67; + _dspReg[5] = (DSPCR_DSPRESET|DSPCR_DSPINT|DSPCR_ARINT|DSPCR_AIINT|DSPCR_HALT); + _dspReg[5] |= DSPCR_RES; + while(_dspReg[5]&DSPCR_RES); + + _dspReg[0] = 0; + while((_SHIFTL(_dspReg[2],16,16)|(_dspReg[3]&0xffff))&0x80000000); + + ((u32*)_dspReg)[8] = 0x01000000; + ((u32*)_dspReg)[9] = 0; + ((u32*)_dspReg)[10] = 32; + + status = _dspReg[5]; + while(!(status&DSPCR_ARINT)) status = _dspReg[5]; + _dspReg[5] = status; + + tick = gettick(); + while((gettick()-tick)<2194); + + ((u32*)_dspReg)[8] = 0x01000000; + ((u32*)_dspReg)[9] = 0; + ((u32*)_dspReg)[10] = 32; + + status = _dspReg[5]; + while(!(status&DSPCR_ARINT)) status = _dspReg[5]; + _dspReg[5] = status; + + _dspReg[5] &= ~DSPCR_DSPRESET; + while(_dspReg[5]&0x400); + + _dspReg[5] &= ~DSPCR_HALT; + while(!(_dspReg[2]&0x8000)); + status = _dspReg[3]; + + _dspReg[5] |= DSPCR_HALT; + _dspReg[5] = (DSPCR_DSPRESET|DSPCR_DSPINT|DSPCR_ARINT|DSPCR_AIINT|DSPCR_HALT); + _dspReg[5] |= DSPCR_RES; + while(_dspReg[5]&DSPCR_RES); + + memcpy((void*)0x81000000,SYS_GetArenaHi()-128,128); +#ifdef _SYS_DEBUG + printf("__audiosystem_init(finish)\n"); +#endif +} + +static void __dsp_shutdown() +{ + u32 tick; + + _dspReg[5] = (DSPCR_DSPRESET|DSPCR_HALT); + _dspReg[27] &= ~0x8000; + while(_dspReg[5]&0x400); + while(_dspReg[5]&0x200); + + _dspReg[5] = (DSPCR_DSPRESET|DSPCR_DSPINT|DSPCR_ARINT|DSPCR_AIINT|DSPCR_HALT); + _dspReg[0] = 0; + while((_SHIFTL(_dspReg[2],16,16)|(_dspReg[3]&0xffff))&0x80000000); + + tick = gettick(); + while((gettick()-tick)<44); + + _dspReg[5] |= DSPCR_RES; + while(_dspReg[5]&DSPCR_RES); +} + +static void decode_szp(void *src,void *dest) +{ + u32 i,k,link; + u8 *dest8,*tmp; + u32 loff,coff,roff; + u32 size,cnt,cmask,bcnt; + yay0header *header; + + dest8 = (u8*)dest; + header = (yay0header*)src; + size = header->dec_size; + loff = header->links_offset; + coff = header->chunks_offset; + + roff = sizeof(yay0header); + cmask = 0; + cnt = 0; + bcnt = 0; + + do { + if(!bcnt) { + cmask = *(u32*)(src+roff); + roff += 4; + bcnt = 32; + } + + if(cmask&0x80000000) { + dest8[cnt++] = *(u8*)(src+coff); + coff++; + } else { + link = *(u16*)(src+loff); + loff += 2; + + tmp = dest8+(cnt-(link&0x0fff)-1); + k = link>>12; + if(k==0) { + k = (*(u8*)(src+coff))+18; + coff++; + } else k += 2; + + for(i=0;i0) { + cpy_cnt = (len>256)?256:len; + while(__read_rom(buf,cpy_cnt,offset)==0); + offset += cpy_cnt; + buf += cpy_cnt; + len -= cpy_cnt; + } +} + +u32 __SYS_GetRTC(u32 *gctime) +{ + u32 cnt,ret; + u32 time1,time2; + + cnt = 0; + ret = 0; + while(cnt<16) { + if(__getrtc(&time1)==0) ret |= 0x01; + if(__getrtc(&time2)==0) ret |= 0x02; + if(ret) return 0; + if(time1==time2) { + *gctime = time1; + return 1; + } + cnt++; + } + return 0; +} + +void __SYS_SetTime(s64 time) +{ + u32 level; + s64 now; + s64 *pBootTime = (s64*)0x800030d8; + + _CPU_ISR_Disable(level); + now = gettime(); + now -= time; + now += *pBootTime; + *pBootTime = now; + settime(now); + EXI_ProbeReset(); + _CPU_ISR_Restore(level); +} + +s64 __SYS_GetSystemTime() +{ + u32 level; + s64 now; + s64 *pBootTime = (s64*)0x800030d8; + + _CPU_ISR_Disable(level); + now = gettime(); + now += *pBootTime; + _CPU_ISR_Restore(level); + return now; +} + +void __SYS_SetBootTime() +{ + u32 gctime; + + __SYS_LockSram(); + __SYS_GetRTC(&gctime); + __SYS_SetTime(secs_to_ticks(gctime)); + __SYS_UnlockSram(0); +} + +u32 __SYS_LoadFont(void *src,void *dest) +{ + if(__read_font(src)==0) return 0; + + decode_szp(src,dest); + + sys_fontdata = (sys_fontheader*)dest; + sys_fontwidthtab = (u8*)dest+sys_fontdata->width_table; + sys_fontcharsinsheet = sys_fontdata->sheet_column*sys_fontdata->sheet_row; + + /* TODO: implement SJIS handling */ + return 1; +} + +#if defined(HW_RVL) +void* __SYS_GetIPCBufferLo() +{ + return __ipcbufferlo; +} + +void* __SYS_GetIPCBufferHi() +{ + return __ipcbufferhi; +} + +#endif + +void _V_EXPORTNAME(void) +{ __sys_versionbuild = _V_STRING; __sys_versiondate = _V_DATE_; } + +#if defined(HW_RVL) +void __SYS_DoPowerCB(void) +{ + u32 level; + powercallback powcb; + + _CPU_ISR_Disable(level); + powcb = __POWCallback; + __POWCallback = __POWDefaultHandler; + powcb(); + _CPU_ISR_Restore(level); +} +#endif + +void __SYS_InitCallbacks() +{ +#if defined(HW_RVL) + __POWCallback = __POWDefaultHandler; + __sys_resetdown = 0; +#endif + __RSWCallback = __RSWDefaultHandler; +} + +void __attribute__((weak)) __SYS_PreInit() +{ + +} + +void SYS_Init() +{ + u32 level; + + _CPU_ISR_Disable(level); + + __SYS_PreInit(); + + if(system_initialized) return; + system_initialized = 1; + + _V_EXPORTNAME(); + + __init_syscall_array(); + __lowmem_init(); +#if defined(HW_RVL) + __ipcbuffer_init(); +#endif + __lwp_wkspace_init(KERNEL_HEAP); + __lwp_queue_init_empty(&sys_reset_func_queue); + __lwp_objmgr_initinfo(&sys_alarm_objects,LWP_MAX_WATCHDOGS,sizeof(alarm_st)); + __sys_state_init(); + __lwp_priority_init(); + __lwp_watchdog_init(); + __exception_init(); + __systemcall_init(); + __decrementer_init(); + __irq_init(); + __exi_init(); + __sram_init(); + __si_init(); + __lwp_thread_coreinit(); + __lwp_sysinit(); + __memlock_init(); + __lwp_mqbox_init(); + __lwp_sema_init(); + __lwp_mutex_init(); + __lwp_cond_init(); + __timesystem_init(); + __dsp_bootstrap(); + + if(!__sys_inIPL) + __memprotect_init(); + +#ifdef SDLOADER_FIX + __SYS_SetBootTime(); +#endif + DisableWriteGatherPipe(); + __SYS_InitCallbacks(); +#if defined(HW_RVL) + __IPC_ClntInit(); +#elif defined(HW_DOL) + IRQ_Request(IRQ_PI_RSW,__RSWHandler,NULL); + __MaskIrq(IRQMASK(IRQ_PI_RSW)); +#endif + __libc_init(1); + __lwp_thread_startmultitasking(); + _CPU_ISR_Restore(level); +} + +// This function gets called inside the main thread, prior to the application's main() function +void SYS_PreMain() +{ +#if defined(HW_RVL) + u32 i; + + for (i = 0; i < 32; ++i) + IOS_Close(i); + + __IOS_LoadStartupIOS(); + __IOS_InitializeSubsystems(); + STM_RegisterEventHandler(__STMEventHandler); + CONF_Init(); + WII_Initialize(); +#endif +} + +u32 SYS_ResetButtonDown() +{ + return (!(_piReg[0]&0x00010000)); +} + +#if defined(HW_DOL) +void SYS_ResetSystem(s32 reset,u32 reset_code,s32 force_menu) +{ + u32 ret = 0; + syssram *sram; + + __dsp_shutdown(); + + if(reset==SYS_SHUTDOWN) { + ret = __PADDisableRecalibration(TRUE); + } + + while(__call_resetfuncs(FALSE)==0); + + if(reset==SYS_HOTRESET && force_menu==TRUE) { + sram = __SYS_LockSram(); + sram->flags |= 0x40; + __SYS_UnlockSram(TRUE); + while(!__SYS_SyncSram()); + } + + __exception_closeall(); + __call_resetfuncs(TRUE); + + LCDisable(); + + __lwp_thread_dispatchdisable(); + if(reset==SYS_HOTRESET) { + __dohotreset(reset_code); + } else if(reset==SYS_RESTART) { + __lwp_thread_closeall(); + __lwp_thread_dispatchunnest(); + __doreboot(reset_code,force_menu); + } + + __lwp_thread_closeall(); + + memset((void*)0x80000040,0,140); + memset((void*)0x800000D4,0,20); + memset((void*)0x800000F4,0,4); + memset((void*)0x80003000,0,192); + memset((void*)0x800030C8,0,12); + memset((void*)0x800030E2,0,1); + + __PADDisableRecalibration(ret); +} +#endif + +#if defined(HW_RVL) + +void SYS_ResetSystem(s32 reset,u32 reset_code,s32 force_menu) +{ + u32 ret = 0; + + __dsp_shutdown(); + + if(reset==SYS_SHUTDOWN) { + ret = __PADDisableRecalibration(TRUE); + } + + while(__call_resetfuncs(FALSE)==0); + + switch(reset) { + case SYS_RESTART: + STM_RebootSystem(); + break; + case SYS_POWEROFF: + if(CONF_GetShutdownMode() == CONF_SHUTDOWN_IDLE) { + ret = CONF_GetIdleLedMode(); + if(ret <= 2) STM_SetLedMode(ret); + STM_ShutdownToIdle(); + } else { + STM_ShutdownToStandby(); + } + break; + case SYS_POWEROFF_STANDBY: + STM_ShutdownToStandby(); + break; + case SYS_POWEROFF_IDLE: + ret = CONF_GetIdleLedMode(); + if(ret >= 0 && ret <= 2) STM_SetLedMode(ret); + STM_ShutdownToIdle(); + break; + case SYS_RETURNTOMENU: + WII_ReturnToMenu(); + break; + } + + //TODO: implement SYS_HOTRESET + // either restart failed or this is SYS_SHUTDOWN + + __IOS_ShutdownSubsystems(); + + __exception_closeall(); + __call_resetfuncs(TRUE); + + LCDisable(); + + __lwp_thread_dispatchdisable(); + __lwp_thread_closeall(); + + memset((void*)0x80000040,0,140); + memset((void*)0x800000D4,0,20); + memset((void*)0x800000F4,0,4); + memset((void*)0x80003000,0,192); + memset((void*)0x800030C8,0,12); + memset((void*)0x800030E2,0,1); + + __PADDisableRecalibration(ret); +} +#endif + +void SYS_RegisterResetFunc(sys_resetinfo *info) +{ + u32 level; + sys_resetinfo *after; + lwp_queue *header = &sys_reset_func_queue; + + _CPU_ISR_Disable(level); + for(after=(sys_resetinfo*)header->first;after->node.next!=NULL && info->prio>=after->prio;after=(sys_resetinfo*)after->node.next); + __lwp_queue_insertI(after->node.prev,&info->node); + _CPU_ISR_Restore(level); +} + +void SYS_UnregisterResetFunc(sys_resetinfo *info) { + u32 level; + lwp_node *n; + + _CPU_ISR_Disable(level); + for (n = sys_reset_func_queue.first; n->next; n = n->next) { + if (n == &info->node) { + __lwp_queue_extractI(n); + break; + } + } + _CPU_ISR_Restore(level); +} + +void SYS_SetArena1Lo(void *newLo) +{ + u32 level; + + _CPU_ISR_Disable(level); + __sysarena1lo = newLo; + _CPU_ISR_Restore(level); +} + +void* SYS_GetArena1Lo() +{ + u32 level; + void *arenalo; + + _CPU_ISR_Disable(level); + arenalo = __sysarena1lo; + _CPU_ISR_Restore(level); + + return arenalo; +} + +void SYS_SetArena1Hi(void *newHi) +{ + u32 level; + + _CPU_ISR_Disable(level); + __sysarena1hi = newHi; + _CPU_ISR_Restore(level); +} + +void* SYS_GetArena1Hi() +{ + u32 level; + void *arenahi; + + _CPU_ISR_Disable(level); + arenahi = __sysarena1hi; + _CPU_ISR_Restore(level); + + return arenahi; +} + +u32 SYS_GetArena1Size() +{ + u32 level,size; + + _CPU_ISR_Disable(level); + size = ((u32)__sysarena1hi - (u32)__sysarena1lo); + _CPU_ISR_Restore(level); + + return size; +} + +void* SYS_AllocArena1MemLo(u32 size,u32 align) +{ + u32 mem1lo; + void *ptr = NULL; + + mem1lo = (u32)SYS_GetArena1Lo(); + ptr = (void*)((mem1lo+(align-1))&~(align-1)); + mem1lo = ((((u32)ptr+size+align)-1)&~(align-1)); + SYS_SetArena1Lo((void*)mem1lo); + + return ptr; +} + +#if defined(HW_RVL) +void SYS_SetArena2Lo(void *newLo) +{ + u32 level; + + _CPU_ISR_Disable(level); + __sysarena2lo = newLo; + _CPU_ISR_Restore(level); +} + +void* SYS_GetArena2Lo() +{ + u32 level; + void *arenalo; + + _CPU_ISR_Disable(level); + arenalo = __sysarena2lo; + _CPU_ISR_Restore(level); + + return arenalo; +} + +void SYS_SetArena2Hi(void *newHi) +{ + u32 level; + + _CPU_ISR_Disable(level); + __sysarena2hi = newHi; + _CPU_ISR_Restore(level); +} + +void* SYS_GetArena2Hi() +{ + u32 level; + void *arenahi; + + _CPU_ISR_Disable(level); + arenahi = __sysarena2hi; + _CPU_ISR_Restore(level); + + return arenahi; +} + +u32 SYS_GetArena2Size() +{ + u32 level,size; + + _CPU_ISR_Disable(level); + size = ((u32)__sysarena2hi - (u32)__sysarena2lo); + _CPU_ISR_Restore(level); + + return size; +} + +void* SYS_AllocArena2MemLo(u32 size,u32 align) +{ + u32 mem2lo; + void *ptr = NULL; + + mem2lo = (u32)SYS_GetArena2Lo(); + ptr = (void*)((mem2lo+(align-1))&~(align-1)); + mem2lo = ((((u32)ptr+size+align)-1)&~(align-1)); + SYS_SetArena2Lo((void*)mem2lo); + + return ptr; +} +#endif + +void SYS_ProtectRange(u32 chan,void *addr,u32 bytes,u32 cntrl) +{ + u16 rcntrl; + u32 pstart,pend,level; + + if(chansheet_image)+31)&~31); + __expand_font((u8*)font_data+font_data->sheet_image,sys_fontimage); + return 1; + } + + return 0; +} + +void SYS_GetFontTexture(s32 c,void **image,s32 *xpos,s32 *ypos,s32 *width) +{ + u32 sheets,rem; + + *xpos = 0; + *ypos = 0; + *image = NULL; + if(!sys_fontwidthtab || ! sys_fontimage) return; + + if(cfirst_char || c>sys_fontdata->last_char) c = sys_fontdata->inval_char; + else c -= sys_fontdata->first_char; + + sheets = c/sys_fontcharsinsheet; + rem = c%sys_fontcharsinsheet; + *image = sys_fontimage+(sys_fontdata->sheet_size*sheets); + *xpos = (rem%sys_fontdata->sheet_column)*sys_fontdata->cell_width; + *ypos = (rem/sys_fontdata->sheet_column)*sys_fontdata->cell_height; + *width = sys_fontwidthtab[c]; +} + +void SYS_GetFontTexel(s32 c,void *image,s32 pos,s32 stride,s32 *width) +{ + u32 sheets,rem; + u32 xoff,yoff; + u32 xpos,ypos; + u8 *img_start; + u8 *ptr1,*ptr2; + + if(!sys_fontwidthtab || ! sys_fontimage) return; + + if(cfirst_char || c>sys_fontdata->last_char) c = sys_fontdata->inval_char; + else c -= sys_fontdata->first_char; + + sheets = c/sys_fontcharsinsheet; + rem = c%sys_fontcharsinsheet; + xoff = (rem%sys_fontdata->sheet_column)*sys_fontdata->cell_width; + yoff = (rem/sys_fontdata->sheet_column)*sys_fontdata->cell_height; + img_start = sys_fontimage+(sys_fontdata->sheet_size*sheets); + + ypos = 0; + while(yposcell_height) { + xpos = 0; + while(xposcell_width) { + ptr1 = img_start+(((sys_fontdata->sheet_width/8)<<5)*((ypos+yoff)/8)); + ptr1 = ptr1+(((xpos+xoff)/8)<<5); + ptr1 = ptr1+(((ypos+yoff)%8)<<2); + ptr1 = ptr1+(((xpos+xoff)%8)/2); + + ptr2 = image+((ypos/8)*(((stride<<1)/8)<<5)); + ptr2 = ptr2+(((xpos+pos)/8)<<5); + ptr2 = ptr2+(((xpos+pos)%8)/2); + ptr2 = ptr2+((ypos%8)<<2); + + *ptr2 = *ptr1; + + xpos += 2; + } + ypos++; + } + *width = sys_fontwidthtab[c]; +} + +s32 SYS_CreateAlarm(syswd_t *thealarm) +{ + alarm_st *alarm; + + alarm = __lwp_syswd_allocate(); + if(!alarm) return -1; + + alarm->alarmhandler = NULL; + alarm->ticks = 0; + alarm->start_per = 0; + alarm->periodic = 0; + + *thealarm = (LWP_OBJMASKTYPE(LWP_OBJTYPE_SYSWD)|LWP_OBJMASKID(alarm->object.id)); + __lwp_thread_dispatchenable(); + return 0; +} + +s32 SYS_SetAlarm(syswd_t thealarm,const struct timespec *tp,alarmcallback cb,void *cbarg) +{ + alarm_st *alarm; + + alarm = __lwp_syswd_open(thealarm); + if(!alarm) return -1; + + alarm->cb_arg = cbarg; + alarm->alarmhandler = cb; + alarm->ticks = __lwp_wd_calc_ticks(tp); + + alarm->periodic = 0; + alarm->start_per = 0; + + __lwp_wd_initialize(&alarm->alarm,__sys_alarmhandler,alarm->object.id,(void*)thealarm); + __lwp_wd_insert_ticks(&alarm->alarm,alarm->ticks); + __lwp_thread_dispatchenable(); + return 0; +} + +s32 SYS_SetPeriodicAlarm(syswd_t thealarm,const struct timespec *tp_start,const struct timespec *tp_period,alarmcallback cb,void *cbarg) +{ + alarm_st *alarm; + + alarm = __lwp_syswd_open(thealarm); + if(!alarm) return -1; + + alarm->start_per = __lwp_wd_calc_ticks(tp_start); + alarm->periodic = __lwp_wd_calc_ticks(tp_period); + alarm->alarmhandler = cb; + alarm->cb_arg = cbarg; + + alarm->ticks = 0; + + __lwp_wd_initialize(&alarm->alarm,__sys_alarmhandler,alarm->object.id,(void*)thealarm); + __lwp_wd_insert_ticks(&alarm->alarm,alarm->start_per); + __lwp_thread_dispatchenable(); + return 0; +} + +s32 SYS_RemoveAlarm(syswd_t thealarm) +{ + alarm_st *alarm; + + alarm = __lwp_syswd_open(thealarm); + if(!alarm) return -1; + + alarm->alarmhandler = NULL; + alarm->ticks = 0; + alarm->periodic = 0; + alarm->start_per = 0; + + __lwp_wd_remove_ticks(&alarm->alarm); + __lwp_syswd_free(alarm); + __lwp_thread_dispatchenable(); + return 0; +} + +s32 SYS_CancelAlarm(syswd_t thealarm) +{ + alarm_st *alarm; + + alarm = __lwp_syswd_open(thealarm); + if(!alarm) return -1; + + alarm->alarmhandler = NULL; + alarm->ticks = 0; + alarm->periodic = 0; + alarm->start_per = 0; + + __lwp_wd_remove_ticks(&alarm->alarm); + __lwp_thread_dispatchenable(); + return 0; +} + +resetcallback SYS_SetResetCallback(resetcallback cb) +{ + u32 level; + resetcallback old; + + _CPU_ISR_Disable(level); + old = __RSWCallback; + __RSWCallback = cb; +#if defined(HW_DOL) + if(__RSWCallback) { + _piReg[0] = 2; + __UnmaskIrq(IRQMASK(IRQ_PI_RSW)); + } else + __MaskIrq(IRQMASK(IRQ_PI_RSW)); +#endif + _CPU_ISR_Restore(level); + return old; +} + +#if defined(HW_RVL) +powercallback SYS_SetPowerCallback(powercallback cb) +{ + u32 level; + powercallback old; + + _CPU_ISR_Disable(level); + old = __POWCallback; + __POWCallback = cb; + _CPU_ISR_Restore(level); + return old; +} +#endif + +void SYS_StartPMC(u32 mcr0val,u32 mcr1val) +{ + mtmmcr0(mcr0val); + mtmmcr1(mcr1val); +} + +void SYS_StopPMC() +{ + mtmmcr0(0); + mtmmcr1(0); +} + +void SYS_ResetPMC() +{ + mtpmc1(0); + mtpmc2(0); + mtpmc3(0); + mtpmc4(0); +} + +void SYS_DumpPMC() +{ + printf("<%lu load/stores / %lu miss cycles / %lu cycles / %lu instructions>\n",mfpmc1(),mfpmc2(),mfpmc3(),mfpmc4()); +} + +void SYS_SetWirelessID(u32 chan,u32 id) +{ + u32 write; + syssramex *sram; + + write = 0; + sram = __SYS_LockSramEx(); + if(sram->wirelessPad_id[chan]!=(u16)id) { + sram->wirelessPad_id[chan] = (u16)id; + write = 1; + } + __SYS_UnlockSramEx(write); +} + +u32 SYS_GetWirelessID(u32 chan) +{ + u16 id; + syssramex *sram; + + id = 0; + sram = __SYS_LockSramEx(); + id = sram->wirelessPad_id[chan]; + __SYS_UnlockSramEx(0); + return id; +} + +#if defined(HW_RVL) +u32 SYS_GetHollywoodRevision() +{ + u32 rev; + DCInvalidateRange((void*)0x80003138,8); + rev = *((u32*)0x80003138); + return rev; +} +#endif + +u64 SYS_Time() +{ + u64 current_time = 0; + u32 gmtime =0; + __SYS_GetRTC(&gmtime); + current_time = gmtime; +#ifdef HW_RVL + u32 bias; + if (CONF_GetCounterBias(&bias) >= 0) + current_time += bias; +#else + syssram* sram = __SYS_LockSram(); + current_time += sram->counter_bias; + __SYS_UnlockSram(0); +#endif + return (TB_TIMER_CLOCK * 1000) * current_time; +} diff --git a/wii/libogc/libogc/system_asm.S b/wii/libogc/libogc/system_asm.S new file mode 100644 index 0000000000..2b8580ca7e --- /dev/null +++ b/wii/libogc/libogc/system_asm.S @@ -0,0 +1,380 @@ +#include + + .globl __realmode +__realmode: + clrlwi r3,r3,2 + mtsrr0 r3 + mfmsr r3 + rlwinm r3,r3,0,28,25 + mtsrr1 r3 + rfi + + // complete init sequence taken from bootmii's ppc skeleton. thanks to segher + // after a talk with dhewg we came to that point that it's good to wipe+setup BATS correctly + .globl __configBATS +__configBATS: + // HID0 = 00110c64: + // bus checkstops off, sleep modes off, + // caches off, caches invalidate, + // store gathering off, enable data cache + // flush assist, enable branch target cache, + // enable branch history table + lis r3,0x0011 + ori r3,r3,0x0c64 + mtspr HID0,r3 + isync + +#if defined(HW_RVL) + lis r3,0x8200 //bits set: H4A(HID4 access), SBE(2nd BAT enabled) + mtspr HID4,r3 + isync +#endif + + // clear all BATs + li r0,0 + mtspr IBAT0U,r0; mtspr IBAT1U,r0; mtspr IBAT2U,r0; mtspr IBAT3U,r0 // IBAT0...3 + mtspr DBAT0U,r0; mtspr DBAT1U,r0; mtspr DBAT2U,r0; mtspr DBAT3U,r0 // DBAT0...3 +#if defined(HW_RVL) + mtspr IBAT4U,r0; mtspr IBAT5U,r0; mtspr IBAT6U,r0; mtspr IBAT7U,r0 // IBAT4...7 + mtspr DBAT4U,r0; mtspr DBAT5U,r0; mtspr DBAT6U,r0; mtspr DBAT7U,r0 // DBAT4...7 +#endif + isync + + // clear all SRs + lis r0,0x8000 + mtsr 0,r0; mtsr 1,r0; mtsr 2,r0; mtsr 3,r0; mtsr 4,r0; mtsr 5,r0; mtsr 6,r0 + mtsr 7,r0; mtsr 8,r0; mtsr 9,r0; mtsr 10,r0; mtsr 11,r0; mtsr 12,r0; mtsr 13,r0 + mtsr 14,r0; mtsr 15,r0 + isync + + // set [DI]BAT0 for 256MB@80000000, + // real 00000000, WIMG=0000, R/W + li r3,2 + lis r4,0x8000 + ori r4,r4,0x1fff + mtspr IBAT0L,r3 + mtspr IBAT0U,r4 + mtspr DBAT0L,r3 + mtspr DBAT0U,r4 + isync + +#if defined(HW_RVL) + // set [DI]BAT4 for 256MB@90000000, + // real 10000000, WIMG=0000, R/W + addis r3,r3,0x1000 + addis r4,r4,0x1000 + mtspr IBAT4L,r3 + mtspr IBAT4U,r4 + mtspr DBAT4L,r3 + mtspr DBAT4U,r4 + isync +#endif + + // set DBAT1 for 256MB@c0000000, + // real 00000000, WIMG=0101, R/W + li r3,0x2a + lis r4,0xc000 + ori r4,r4,0x1fff + mtspr DBAT1L,r3 + mtspr DBAT1U,r4 + isync + +#if defined(HW_RVL) + // set DBAT5 for 256MB@d0000000, + // real 10000000, WIMG=0101, R/W + addis r3,r3,0x1000 + addis r4,r4,0x1000 + mtspr DBAT5L,r3 + mtspr DBAT5U,r4 + isync +#endif + + mfmsr r3 + ori r3,r3,MSR_DR|MSR_IR + mtsrr1 r3 + mflr r3 + oris r3,r3,0x8000 + mtsrr0 r3 + rfi + + .globl __InitFPRS +__InitFPRS: + # Enable the Floating Point Registers + mfmsr r3 + ori r3,r3,MSR_FP + mtmsr r3 + mfspr r3,920 + extrwi. r3,r3,1,2 + beq 1f + + # Clear all of the PS FPR's to 0 + lis r3,zeroPS@ha + addi r3,r3,zeroPS@l + psq_l fr0,0(r3),0,0 + ps_mr fr1,fr0 + ps_mr fr2,fr0 + ps_mr fr3,fr0 + ps_mr fr4,fr0 + ps_mr fr5,fr0 + ps_mr fr6,fr0 + ps_mr fr7,fr0 + ps_mr fr8,fr0 + ps_mr fr9,fr0 + ps_mr fr10,fr0 + ps_mr fr11,fr0 + ps_mr fr12,fr0 + ps_mr fr13,fr0 + ps_mr fr14,fr0 + ps_mr fr15,fr0 + ps_mr fr16,fr0 + ps_mr fr17,fr0 + ps_mr fr18,fr0 + ps_mr fr19,fr0 + ps_mr fr20,fr0 + ps_mr fr21,fr0 + ps_mr fr22,fr0 + ps_mr fr23,fr0 + ps_mr fr24,fr0 + ps_mr fr25,fr0 + ps_mr fr26,fr0 + ps_mr fr27,fr0 + ps_mr fr28,fr0 + ps_mr fr29,fr0 + ps_mr fr30,fr0 + ps_mr fr31,fr0 + + # Clear all of the FPR's to 0 +1: lis r3,zeroF@ha + lfd fr0,zeroF@l(r3) + fmr fr1,fr0 + fmr fr2,fr0 + fmr fr3,fr0 + fmr fr4,fr0 + fmr fr5,fr0 + fmr fr6,fr0 + fmr fr7,fr0 + fmr fr8,fr0 + fmr fr9,fr0 + fmr fr10,fr0 + fmr fr11,fr0 + fmr fr12,fr0 + fmr fr13,fr0 + fmr fr14,fr0 + fmr fr15,fr0 + fmr fr16,fr0 + fmr fr17,fr0 + fmr fr18,fr0 + fmr fr19,fr0 + fmr fr20,fr0 + fmr fr21,fr0 + fmr fr22,fr0 + fmr fr23,fr0 + fmr fr24,fr0 + fmr fr25,fr0 + fmr fr26,fr0 + fmr fr27,fr0 + fmr fr28,fr0 + fmr fr29,fr0 + fmr fr30,fr0 + fmr fr31,fr0 + mtfsf 255,fr0 + + # Return + blr + + .extern ICFlashInvalidate + .globl __InitPS +__InitPS: + mflr r0 + stw r0,4(sp) + stwu sp,-8(sp) + mfspr r3,HID2 + oris r3,r3,0xA000 + mtspr HID2,r3 + isync + bl ICFlashInvalidate + sync + li r3,0 + mtspr GQR0,r3 + mtspr GQR1,r3 + mtspr GQR2,r3 + mtspr GQR3,r3 + mtspr GQR4,r3 + mtspr GQR5,r3 + mtspr GQR6,r3 + mtspr GQR7,r3 + isync + lwz r0,12(sp) + addi sp,sp,8 + mtlr r0 + blr + + .extern ICEnable + .extern DCEnable + .extern L2Init + .extern L2Enable + .globl __InitCache +__InitCache: + mflr r0 + stw r0, 4(sp) + stwu sp, -16(sp) + stw r31, 12(sp) + + mfspr r3,HID0 + rlwinm. r0,r3, 0, 16, 16 // Check if the Instruction Cache has been enabled or not. + bne ICEnabled + + bl ICEnable +ICEnabled: + mfspr r3, HID0 + rlwinm. r0, r3, 0, 17, 17 // Check if the Data Cache has been enabled or not. + bne DCEnabled + + bl DCEnable +DCEnabled: + + mfspr r3, L2CR + clrrwi. r0, r3, 31 // Check if the Locked Cache has been enabled or not. + bne L2Enabled + + bl L2Init + bl L2Enable + +L2Enabled: + # Restore the non-volatile registers to their previous values and return. + lwz r0, 20(sp) + lwz r31, 12(sp) + addi sp, sp, 16 + mtlr r0 + blr + + .globl __InitSystem +__InitSystem: + mflr r0 + stw r0, 4(sp) + stwu sp, -24(sp) + stmw r29, 12(sp) + + # Disable interrupts! + mfmsr r3 + rlwinm r4,r3,0,17,15 + rlwinm r4,r4,0,26,24 + mtmsr r4 + + # Clear various SPR's + li r3,0 + mtspr 952, r3 + mtspr 956, r3 + mtspr 953, r3 + mtspr 954, r3 + mtspr 957, r3 + mtspr 958, r3 + isync + +#if defined(HW_RVL) + mfspr r3,HID4 + oris r3,r3,0x0190 //set additional bits in HID4: SR0(store 0), LPE(PS LE exception), L2CFI(L2 castout prior to L2 inv. flash) + mtspr HID4,r3 + isync +#endif + + # Disable Speculative Bus Accesses to non-guarded space from both caches. + mfspr r3, HID0 + ori r3, r3, 0x0200 + mtspr HID0, r3 + isync + + # Set the Non-IEEE mode in the FPSCR + mtfsb1 29 + + # Disable Write Gather Pipe + mfspr r3,HID2 # (HID2) + rlwinm r3, r3, 0, 2, 0 + mtspr HID2,r3 # (HID2) + isync + + # Restore the non-volatile registers to their previous values and return. + lwz r0, 28(sp) + lmw r29,12(sp) + addi sp, sp, 24 + mtlr r0 + blr + + .globl __flush_cache +__flush_cache: + lis r5,0xffff + ori r5,r5,0xfff1 + and r5,r5,r3 + subf r3,r5,r3 + add r4,r4,r3 +1: dcbst r0,r5 + sync + icbi r0,r5 + addic r5,r5,8 + subic. r4,r4,8 + bge 1b + sync + blr + + .globl __reset +__reset: + b 1f +9: mfspr r8,HID0 + ori r8,r8,0x0008 + mtspr HID0,r8 + isync + sync + nop + b 2f +1: b 3f +2: mftb r5 +4: mftb r6 + subf r7,r5,r6 + cmplwi r7,0x1124 + blt 4b + nop + b 5f +3: b 6f +5: lis r8,0xCC00 + ori r8,r8,0x3000 + li r4,3 + stw r4,36(r8) + stw r3,36(r8) + nop + b 7f +6: b 8f +7: nop + b 7b +8: b 9b + + .globl __InitBATS +__InitBATS: + mflr r31 + oris r31,r31,0x8000 + lis r3,__configBATS@h + ori r3,r3,__configBATS@l + bl __realmode + mtlr r31 + blr + + .globl SYS_SwitchFiber +SYS_SwitchFiber: + mflr r0 + mr r9,sp + stwu r9,-8(r8) + mr sp,r8 + stw r0,4(r9) + mtlr r7 + blrl + lwz r5,0(sp) + lwz r0,4(r5) + mtlr r0 + mr sp,r5 + blr + + .section .data + .balign 4 +zeroF: + .double 0.0 +zeroPS: + .float 0.0,0.0 diff --git a/wii/libogc/libogc/texconv.c b/wii/libogc/libogc/texconv.c new file mode 100644 index 0000000000..f955b351aa --- /dev/null +++ b/wii/libogc/libogc/texconv.c @@ -0,0 +1,77 @@ +/*------------------------------------------------------------- + +texconv.c - Helper functions for GX texture conversion + +Copyright (C) 2008 +softdev +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ +#include + +void MakeTexture565(const void *src,void *dst,s32 width,s32 height) +{ + register u32 tmp0=0,tmp1=0,tmp2=0,tmp3=0; + + __asm__ __volatile__ ( + " srwi %6,%6,2\n" + " srwi %7,%7,2\n" + " subi %3,%4,4\n" + " subi %4,%4,8\n" + + "2: mtctr %6\n" + " mr %0,%5\n" + // + "1: lwz %1,0(%5)\n" + " stwu %1,8(%4)\n" + " lwz %2,4(%5)\n" + " stwu %2,8(%3)\n" + + " lwz %1,1024(%5)\n" + " stwu %1,8(%4)\n" + " lwz %2,1028(%5)\n" + " stwu %2,8(%3)\n" + + " lwz %1,2048(%5)\n" + " stwu %1,8(%4)\n" + " lwz %2,2052(%5)\n" + " stwu %2,8(%3)\n" + + " lwz %1,3072(%5)\n" + " stwu %1,8(%4)\n" + " lwz %2,3076(%5)\n" + " stwu %2,8(%3)\n" + + " addi %5,%5,8\n" + " bdnz 1b\n" + + " addi %5,%0,4096\n" + " subic. %7,%7,1\n" + " bne 2b" + // 0 1 2 3 + : "=&b"(tmp0), "=&r"(tmp1), "=&r"(tmp2), "=&b"(tmp3) + // 4 5 6 7 + : "b"(dst), "b"(src), "r"(width), "r"(height) + : "memory" + ); +} diff --git a/wii/libogc/libogc/timesupp.c b/wii/libogc/libogc/timesupp.c new file mode 100644 index 0000000000..bdb8770819 --- /dev/null +++ b/wii/libogc/libogc/timesupp.c @@ -0,0 +1,323 @@ +#include <_ansi.h> +#include <_syslist.h> + +#include "asm.h" +#include "processor.h" +#include "lwp.h" +#include "lwp_threadq.h" +#include "timesupp.h" +#include "exi.h" +#include "system.h" +#include "conf.h" + +#include +#include + +/* time variables */ +static u32 exi_wait_inited = 0; +static lwpq_t time_exi_wait; + +extern u32 __SYS_GetRTC(u32 *gctime); +extern syssram* __SYS_LockSram(); +extern u32 __SYS_UnlockSram(u32 write); + + + +u32 _DEFUN(gettick,(), + _NOARGS) + +{ + u32 result; + __asm__ __volatile__ ( + "mftb %0\n" + : "=r" (result) + ); + return result; +} + + +u64 _DEFUN(gettime,(), + _NOARGS) +{ + u32 tmp; + union uulc { + u64 ull; + u32 ul[2]; + } v; + + __asm__ __volatile__( + "1: mftbu %0\n\ + mftb %1\n\ + mftbu %2\n\ + cmpw %0,%2\n\ + bne 1b\n" + : "=r" (v.ul[0]), "=r" (v.ul[1]), "=&r" (tmp) + ); + return v.ull; +} + +void _DEFUN(settime,(t), + u64 t) +{ + u32 tmp; + union uulc { + u64 ull; + u32 ul[2]; + } v; + + v.ull = t; + __asm__ __volatile__ ( + "li %0,0\n\ + mttbl %0\n\ + mttbu %1\n\ + mttbl %2\n" + : "=&r" (tmp) + : "r" (v.ul[0]), "r" (v.ul[1]) + ); +} + +u32 diff_sec(u64 start,u64 end) +{ + u64 diff; + + diff = diff_ticks(start,end); + return ticks_to_secs(diff); +} + +u32 diff_msec(u64 start,u64 end) +{ + u64 diff = diff_ticks(start,end); + return ticks_to_millisecs(diff); +} + +u32 diff_usec(u64 start,u64 end) +{ + u64 diff = diff_ticks(start,end); + return ticks_to_microsecs(diff); +} + +u32 diff_nsec(u64 start,u64 end) +{ + u64 diff = diff_ticks(start,end); + return ticks_to_nanosecs(diff); +} + +void __timesystem_init() +{ + if(!exi_wait_inited) { + exi_wait_inited = 1; + LWP_InitQueue(&time_exi_wait); + } +} + +void timespec_subtract(const struct timespec *tp_start,const struct timespec *tp_end,struct timespec *result) +{ + struct timespec start_st = *tp_start; + struct timespec *start = &start_st; + u32 nsecpersec = TB_NSPERSEC; + + if(tp_end->tv_nsectv_nsec) { + int secs = (start->tv_nsec - tp_end->tv_nsec)/nsecpersec+1; + start->tv_nsec -= nsecpersec * secs; + start->tv_sec += secs; + } + if((tp_end->tv_nsec - start->tv_nsec)>nsecpersec) { + int secs = (start->tv_nsec - tp_end->tv_nsec)/nsecpersec; + start->tv_nsec += nsecpersec * secs; + start->tv_sec -= secs; + } + + result->tv_sec = (tp_end->tv_sec - start->tv_sec); + result->tv_nsec = (tp_end->tv_nsec - start->tv_nsec); +} + +unsigned long long timespec_to_ticks(const struct timespec *tp) +{ + return __lwp_wd_calc_ticks(tp); +} + +int clock_gettime(struct timespec *tp) +{ + u32 gctime; +#if defined(HW_RVL) + u32 wii_bias = 0; +#endif + + if(!tp) return -1; + + if(!__SYS_GetRTC(&gctime)) return -1; + +#if defined(HW_DOL) + syssram* sram = __SYS_LockSram(); + gctime += sram->counter_bias; + __SYS_UnlockSram(0); +#else + if(CONF_GetCounterBias(&wii_bias)>=0) gctime += wii_bias; +#endif + gctime += 946684800; + + tp->tv_sec = gctime; + tp->tv_nsec = ticks_to_nanosecs(gettick())%1000000000; + + return 0; +} + +// this function spins till timeout is reached +void _DEFUN(udelay,(us), + unsigned us) +{ + unsigned long long start, end; + start = gettime(); + while (1) + { + end = gettime(); + if (diff_usec(start,end) >= us) + break; + } +} + +unsigned int _DEFUN(nanosleep,(tb), + struct timespec *tb) +{ + u64 timeout; + + __lwp_thread_dispatchdisable(); + + timeout = __lwp_wd_calc_ticks(tb); + __lwp_thread_setstate(_thr_executing,LWP_STATES_DELAYING|LWP_STATES_INTERRUPTIBLE_BY_SIGNAL); + __lwp_wd_initialize(&_thr_executing->timer,__lwp_thread_delayended,_thr_executing->object.id,_thr_executing); + __lwp_wd_insert_ticks(&_thr_executing->timer,timeout); + + __lwp_thread_dispatchenable(); + return TB_SUCCESSFUL; +} + +static u32 __getrtc(u32 *gctime) +{ + u32 ret; + u32 cmd; + u32 time; + + if(EXI_Select(EXI_CHANNEL_0,EXI_DEVICE_1,EXI_SPEED8MHZ)==0) { + return 0; + } + + ret = 0; + time = 0; + cmd = 0x20000000; + if(EXI_Imm(EXI_CHANNEL_0,&cmd,4,EXI_WRITE,NULL)==0) ret |= 0x01; + if(EXI_Sync(EXI_CHANNEL_0)==0) ret |= 0x02; + if(EXI_Imm(EXI_CHANNEL_0,&time,4,EXI_READ,NULL)==0) ret |= 0x04; + if(EXI_Sync(EXI_CHANNEL_0)==0) ret |= 0x08; + if(EXI_Deselect(EXI_CHANNEL_0)==0) ret |= 0x10; + + *gctime = time; + if(ret) return 0; + + return 1; +} + +static s32 __time_exi_unlock(s32 chn,s32 dev) +{ + LWP_ThreadBroadcast(time_exi_wait); + return 1; +} + +static void __time_exi_wait() +{ + u32 ret; + + do { + if((ret=EXI_Lock(EXI_CHANNEL_0,EXI_DEVICE_1,__time_exi_unlock))==1) break; + LWP_ThreadSleep(time_exi_wait); + }while(ret==0); +} + +static u32 __getRTC(u32 *gctime) +{ + u32 cnt,time1,time2; + + __time_exi_wait(); + + cnt = 0; + + while(cnt<16) { + if(__getrtc(&time1)==0 + || __getrtc(&time2)==0) { + EXI_Unlock(EXI_CHANNEL_0); + break; + } + if(time1==time2) { + *gctime = time1; + EXI_Unlock(EXI_CHANNEL_0); + return 1; + } + cnt++; + } + return 0; +} + +time_t _DEFUN(time,(timer), + time_t *timer) +{ + time_t gctime = 0; +#if defined(HW_RVL) + u32 wii_bias = 0; +#endif + + if(__getRTC((u32*)&gctime)==0) return (time_t)0; + +#if defined(HW_DOL) + syssram* sram = __SYS_LockSram(); + gctime += sram->counter_bias; + __SYS_UnlockSram(0); +#else + if(CONF_GetCounterBias(&wii_bias)>=0) gctime += wii_bias; +#endif + + gctime += 946684800; + + if(timer) *timer = gctime; + return gctime; +} + +unsigned int _DEFUN(sleep,(s), + unsigned int s) +{ + struct timespec tb; + + tb.tv_sec = s; + tb.tv_nsec = 0; + return nanosleep(&tb); +} + +unsigned int _DEFUN(usleep,(us), + unsigned int us) +{ + struct timespec tb; + u32 sec = us/TB_USPERSEC; + u32 rem = us - (sec*TB_USPERSEC); + + tb.tv_sec = sec; + tb.tv_nsec = rem*TB_NSPERUS; + return nanosleep(&tb); +} + +clock_t clock(void) { + return -1; +} + +int __libogc_gettod_r(struct _reent *ptr, struct timeval *tp, struct timezone *tz) { + + if (tp != NULL) { + tp->tv_sec = time(NULL); + tp->tv_usec = ticks_to_microsecs(gettick())%1000000; + } + if (tz != NULL) { + tz->tz_minuteswest = 0; + tz->tz_dsttime = 0; + + } + return 0; +} + diff --git a/wii/libogc/libogc/timesupp.h b/wii/libogc/libogc/timesupp.h new file mode 100644 index 0000000000..2e84d439d9 --- /dev/null +++ b/wii/libogc/libogc/timesupp.h @@ -0,0 +1,27 @@ +#ifndef __TIMESUPP_H__ +#define __TIMESUPP_H__ + +#define TB_REQ 250 +#define TB_SUCCESSFUL 0 + +#define TB_SECSPERMIN 60 +#define TB_MINSPERHR 60 +#define TB_MONSPERYR 12 +#define TB_DAYSPERYR 365 +#define TB_HRSPERDAY 24 +#define TB_SECSPERDAY (TB_SECSPERMIN*TB_MINSPERHR*TB_HRSPERDAY) +#define TB_SECSPERNYR (365*TB_SECSPERDAY) + +#define TB_MSPERSEC 1000 +#define TB_USPERSEC 1000000 +#define TB_NSPERSEC 1000000000 +#define TB_NSPERMS 1000000 +#define TB_NSPERUS 1000 +#define TB_USPERTICK 10000 + +#include + +time_t time(time_t *timer); +unsigned int nanosleep(struct timespec *tb); + +#endif diff --git a/wii/libogc/libogc/tpl.c b/wii/libogc/libogc/tpl.c new file mode 100644 index 0000000000..b6e027cdff --- /dev/null +++ b/wii/libogc/libogc/tpl.c @@ -0,0 +1,346 @@ +#include +#include +#include +#include +#include +#include +#include "tpl.h" +#include "processor.h" + +#define TPL_FILE_TYPE_DISC 0 +#define TPL_FILE_TYPE_MEM 1 + +#define TPL_HDR_VERSION_FIELD 0 +#define TPL_HDR_NTEXTURE_FIELD 4 +#define TPL_HDR_HDRSIZE_FIELD 8 +#define TPL_HDR_DESCR_FIELD 12 + +// texture header +typedef struct _tplimgheader TPLImgHeader; + +struct _tplimgheader { + u16 height; + u16 width; + u32 fmt; + void *data; + u32 wraps; + u32 wrapt; + u32 minfilter; + u32 magfilter; + f32 lodbias; + u8 edgelod; + u8 minlod; + u8 maxlod; + u8 unpacked; +} ATTRIBUTE_PACKED; + +// texture palette header +typedef struct _tplpalheader TPLPalHeader; + +struct _tplpalheader { + u16 nitems; + u8 unpacked; + u8 pad; + u32 fmt; + void *data; +} ATTRIBUTE_PACKED; + +// texture descriptor +typedef struct _tpldesc TPLDescHeader; + +struct _tpldesc { + TPLImgHeader *imghead; + TPLPalHeader *palhead; +} ATTRIBUTE_PACKED; + +static u32 TPL_GetTextureSize(u32 width,u32 height,u32 fmt) +{ + u32 size = 0; + + switch(fmt) { + case GX_TF_I4: + case GX_TF_CI4: + case GX_TF_CMPR: + size = ((width+7)>>3)*((height+7)>>3)*32; + break; + case GX_TF_I8: + case GX_TF_IA4: + case GX_TF_CI8: + size = ((width+7)>>3)*((height+7)>>2)*32; + break; + case GX_TF_IA8: + case GX_TF_CI14: + case GX_TF_RGB565: + case GX_TF_RGB5A3: + size = ((width+3)>>2)*((height+3)>>2)*32; + break; + case GX_TF_RGBA8: + size = ((width+3)>>2)*((height+3)>>2)*32*2; + break; + default: + break; + } + return size; +} + +s32 TPL_OpenTPLFromFile(TPLFile* tdf, const char* file_name) +{ + u32 c; + u32 version; + FILE *f = NULL; + TPLDescHeader *deschead = NULL; + TPLImgHeader *imghead = NULL; + TPLPalHeader *palhead = NULL; + + if(!file_name) return 0; + + f = fopen(file_name,"rb"); + if(!f) return -1; + + tdf->type = TPL_FILE_TYPE_DISC; + tdf->tpl_file = (FHANDLE)f; + + fread(&version,sizeof(u32),1,f); + fread(&tdf->ntextures,sizeof(u32),1,f); + + fseek(f,TPL_HDR_DESCR_FIELD,SEEK_SET); + + deschead = malloc(tdf->ntextures*sizeof(TPLDescHeader)); + if(deschead) { + fread(deschead,sizeof(TPLDescHeader),tdf->ntextures,f); + + for(c=0;cntextures;c++) { + imghead = deschead[c].imghead; + palhead = deschead[c].palhead; + + //now read in the image data. + fseek(f,(s32)imghead,SEEK_SET); + imghead = malloc(sizeof(TPLImgHeader)); + if(!imghead) goto error_open; + + fread(imghead,sizeof(TPLImgHeader),1,f); + deschead[c].imghead = imghead; + + if(palhead) { + fseek(f,(s32)palhead,SEEK_SET); + + palhead = malloc(sizeof(TPLPalHeader)); + if(!palhead) goto error_open; + + fread(palhead,sizeof(TPLPalHeader),1,f); + deschead[c].palhead = palhead; + } + } + tdf->texdesc = deschead; + + return 1; + } + +error_open: + if(deschead) free(deschead); + if(palhead) free(palhead); + + fclose(f); + return 0; +} + +s32 TPL_OpenTPLFromMemory(TPLFile* tdf, void *memory,u32 len) +{ + u32 c,pos; + const char *p = memory; + TPLDescHeader *deschead = NULL; + TPLImgHeader *imghead = NULL; + TPLPalHeader *palhead = NULL; + + if(!memory || !len) return -1; //TPL_ERR_INVALID + + tdf->type = TPL_FILE_TYPE_MEM; + tdf->tpl_file = (FHANDLE)NULL; + + //version = *(u32*)(p + TPL_HDR_VERSION_FIELD); + tdf->ntextures = *(u32*)(p + TPL_HDR_NTEXTURE_FIELD); + + deschead = (TPLDescHeader*)(p + TPL_HDR_DESCR_FIELD); + for(c=0;cntextures;c++) { + imghead = NULL; + palhead = NULL; + + pos = (u32)deschead[c].imghead; + imghead = (TPLImgHeader*)(p + pos); + + pos = (u32)imghead->data; + imghead->data = (char*)(p + pos); + + pos = (u32)deschead[c].palhead; + if(pos) { + palhead = (TPLPalHeader*)(p + pos); + + pos = (u32)palhead->data; + palhead->data = (char*)(p + pos); + } + deschead[c].imghead = imghead; + deschead[c].palhead = palhead; + } + tdf->texdesc = deschead; + + return 1; +} + +s32 TPL_GetTextureInfo(TPLFile *tdf,s32 id,u32 *fmt,u16 *width,u16 *height) +{ + TPLDescHeader *deschead = NULL; + TPLImgHeader *imghead = NULL; + + if(!tdf) return -1; + if(id<0 || id>=tdf->ntextures) return -1; + + deschead = (TPLDescHeader*)tdf->texdesc; + if(!deschead) return -1; + + imghead = deschead[id].imghead; + if(!imghead) return -1; + + if(fmt) *fmt = imghead->fmt; + if(width) *width = imghead->width; + if(height) *height = imghead->height; + + return 0; +} + +s32 TPL_GetTexture(TPLFile *tdf,s32 id,GXTexObj *texObj) +{ + s32 pos; + u32 size; + FILE *f = NULL; + TPLDescHeader *deschead = NULL; + TPLImgHeader *imghead = NULL; + s32 bMipMap = 0; + u8 biasclamp = GX_DISABLE; + + if(!tdf) return -1; + if(!texObj) return -1; + if(id<0 || id>=tdf->ntextures) return -1; + + deschead = (TPLDescHeader*)tdf->texdesc; + if(!deschead) return -1; + + imghead = deschead[id].imghead; + if(!imghead) return -1; + + size = TPL_GetTextureSize(imghead->width,imghead->height,imghead->fmt); + if(tdf->type==TPL_FILE_TYPE_DISC) { + f = (FILE*)tdf->tpl_file; + pos = (s32)imghead->data; + imghead->data = memalign(PPC_CACHE_ALIGNMENT,size); + if(!imghead->data) return -1; + + fseek(f,pos,SEEK_SET); + fread(imghead->data,1,size,f); + } + + if(imghead->maxlod>0) bMipMap = 1; + if(imghead->lodbias>0.0f) biasclamp = GX_ENABLE; + + DCFlushRange(imghead->data,size); + GX_InitTexObj(texObj,imghead->data,imghead->width,imghead->height,imghead->fmt,imghead->wraps,imghead->wrapt,bMipMap); + if(bMipMap) GX_InitTexObjLOD(texObj,imghead->minfilter,imghead->magfilter,imghead->minlod,imghead->maxlod, + imghead->lodbias,biasclamp,biasclamp,imghead->edgelod); + + return 0; +} + +s32 TPL_GetTextureCI(TPLFile *tdf,s32 id,GXTexObj *texObj,GXTlutObj *tlutObj,u8 tluts) +{ + s32 pos; + u32 size; + FILE *f = NULL; + TPLDescHeader *deschead = NULL; + TPLImgHeader *imghead = NULL; + TPLPalHeader *palhead = NULL; + s32 bMipMap = 0; + u8 biasclamp = GX_DISABLE; + + if(!tdf) return -1; + if(!texObj) return -1; + if(!tlutObj) return -1; + if(id<0 || id>=tdf->ntextures) return -1; + + deschead = (TPLDescHeader*)tdf->texdesc; + if(!deschead) return -1; + + imghead = deschead[id].imghead; + if(!imghead) return -1; + + palhead = deschead[id].palhead; + if(!palhead) return -1; + + size = TPL_GetTextureSize(imghead->width,imghead->height,imghead->fmt); + if(tdf->type==TPL_FILE_TYPE_DISC) { + f = (FILE*)tdf->tpl_file; + pos = (s32)imghead->data; + imghead->data = memalign(PPC_CACHE_ALIGNMENT,size); + if(!imghead->data) return -1; + + fseek(f,pos,SEEK_SET); + fread(imghead->data,1,size,f); + + pos = (s32)palhead->data; + palhead->data = memalign(PPC_CACHE_ALIGNMENT,(palhead->nitems*sizeof(u16))); + if(!palhead->data) { + free(imghead->data); + return -1; + } + + fseek(f,pos,SEEK_SET); + fread(palhead->data,1,(palhead->nitems*sizeof(u16)),f); + } + + if(imghead->maxlod>0) bMipMap = 1; + if(imghead->lodbias>0.0f) biasclamp = GX_ENABLE; + + DCFlushRange(imghead->data,size); + DCFlushRange(palhead->data,(palhead->nitems*sizeof(u16))); + GX_InitTlutObj(tlutObj,palhead->data,palhead->fmt,palhead->nitems); + GX_InitTexObjCI(texObj,imghead->data,imghead->width,imghead->height,imghead->fmt,imghead->wraps,imghead->wrapt,bMipMap,tluts); + if(bMipMap) GX_InitTexObjLOD(texObj,imghead->minfilter,imghead->magfilter,imghead->minlod,imghead->maxlod, + imghead->lodbias,biasclamp,biasclamp,imghead->edgelod); + + return 0; +} + +void TPL_CloseTPLFile(TPLFile *tdf) +{ + int i; + FILE *f; + TPLPalHeader *palhead; + TPLImgHeader *imghead; + TPLDescHeader *deschead; + + if(!tdf) return; + + if(tdf->type==TPL_FILE_TYPE_DISC) { + f = (FILE*)tdf->tpl_file; + if(f) fclose(f); + + deschead = (TPLDescHeader*)tdf->texdesc; + if(!deschead) return; + + for(i=0;intextures;i++) { + imghead = deschead[i].imghead; + palhead = deschead[i].palhead; + if(imghead) { + if(imghead->data) free(imghead->data); + free(imghead); + } + if(palhead) { + if(palhead->data) free(palhead->data); + free(palhead); + } + } + free(tdf->texdesc); + } + + tdf->ntextures = 0; + tdf->texdesc = NULL; + tdf->tpl_file = NULL; +} diff --git a/wii/libogc/libogc/usb.c b/wii/libogc/libogc/usb.c new file mode 100644 index 0000000000..f48c6ff2e4 --- /dev/null +++ b/wii/libogc/libogc/usb.c @@ -0,0 +1,1464 @@ +/*------------------------------------------------------------- + +usb.c -- USB lowlevel + +Copyright (C) 2008 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) +tueidj + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + + +/* Note: There are 3 types of USB interfaces here, the early ones + * (V0: /dev/usb/oh0 and /dev/usb/oh1) and two later ones (V5: /dev/usb/ven + * and /dev/usb/hid) which are similar but have some small + * differences. There is also an earlier version of /dev/usb/hid (V4) + * found in IOSes 37,61,56,etc. and /dev/usb/msc found in IOS 57. + * These interfaces aren't implemented here and you may find some + * devices don't show up if you're running under those IOSes. + */ + +#if defined(HW_RVL) +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "usb.h" + +#define USB_HEAPSIZE 16384 + +#define USBV0_IOCTL_CTRLMSG 0 +#define USBV0_IOCTL_BLKMSG 1 +#define USBV0_IOCTL_INTRMSG 2 +#define USBV0_IOCTL_SUSPENDDEV 5 +#define USBV0_IOCTL_RESUMEDEV 6 +#define USBV0_IOCTL_ISOMSG 9 +#define USBV0_IOCTL_GETDEVLIST 12 +#define USBV0_IOCTL_DEVREMOVALHOOK 26 +#define USBV0_IOCTL_DEVINSERTHOOK 27 +#define USBV0_IOCTL_DEVICECLASSCHANGE 28 + +#define USBV4_IOCTL_GETVERSION 6 // returns 0x40001 + +#define USBV5_IOCTL_GETVERSION 0 // should return 0x50001 +#define USBV5_IOCTL_GETDEVICECHANGE 1 +#define USBV5_IOCTL_SHUTDOWN 2 +#define USBV5_IOCTL_GETDEVPARAMS 3 +#define USBV5_IOCTL_ATTACHFINISH 6 +#define USBV5_IOCTL_SETALTERNATE 7 +#define USBV5_IOCTL_SUSPEND_RESUME 16 +#define USBV5_IOCTL_CANCELENDPOINT 17 +#define USBV5_IOCTL_CTRLMSG 18 +#define USBV5_IOCTL_INTRMSG 19 +#define USBV5_IOCTL_ISOMSG 20 +#define USBV5_IOCTL_BULKMSG 21 +#define USBV5_IOCTL_MSC_READWRITE_ASYNC 32 /* unimplemented */ +#define USBV5_IOCTL_MSC_READ_ASYNC 33 /* unimplemented */ +#define USBV5_IOCTL_MSC_WRITE_ASYNC 34 /* unimplemented */ +#define USBV5_IOCTL_MSC_READWRITE 35 /* unimplemented */ +#define USBV5_IOCTL_MSC_RESET 36 /* unimplemented */ + +#define USB_MAX_DEVICES 32 + +static s32 hId = -1; +static const char __oh0_path[] ATTRIBUTE_ALIGN(32) = "/dev/usb/oh0"; +static const char __ven_path[] ATTRIBUTE_ALIGN(32) = "/dev/usb/ven"; +static const char __hid_path[] ATTRIBUTE_ALIGN(32) = "/dev/usb/hid"; + +typedef struct _usb_cb_list { + usbcallback cb; + void *userdata; + union { + s32 device_id; + struct _usb_cb_list *next; + }; +} _usb_cb_list; + +struct _usbv5_host { + usb_device_entry attached_devices[USB_MAX_DEVICES]; + _usb_cb_list remove_cb[USB_MAX_DEVICES]; + s32 fd; + _usb_cb_list *device_change_notify; +}; + +static struct _usbv5_host* ven_host = NULL; +static struct _usbv5_host* hid_host = NULL; + +struct _usb_msg { + s32 fd; + u32 heap_buffers; + union { + struct { + u8 bmRequestType; + u8 bmRequest; + u16 wValue; + u16 wIndex; + u16 wLength; + void *rpData; + } ctrl; + + struct { + void *rpData; + u16 wLength; + u8 pad[4]; + u8 bEndpoint; + } bulk; + + struct { + void *rpData; + u16 wLength; + u8 bEndpoint; + } intr; + + struct { + void *rpData; + void *rpPacketSizes; + u8 bPackets; + u8 bEndpoint; + } iso; + + struct { + u16 pid; + u16 vid; + } notify; + + u8 class; + u32 hid_intr_dir; + + u32 align_pad[4]; // pad to 24 bytes + }; + usbcallback cb; + void *userdata; + ioctlv vec[7]; +}; + +static s32 __usbv5_devicechangeCB(s32 result, void *p); + +static s32 __usbv5_attachfinishCB(s32 result, void *p) +{ + _usb_cb_list *list; + struct _usbv5_host* host = (struct _usbv5_host*)p; + if(host==NULL) return IPC_EINVAL; + + /* the callback functions may attempt to set a new notify func, + * device_change_notify is set to NULL *before* calling it to + * avoid wiping out the new functions + */ + list = host->device_change_notify; + host->device_change_notify = NULL; + while (list) { + _usb_cb_list *next = list->next; + list->cb(result, list->userdata); + iosFree(hId, list); + list = next; + } + + if (result==0) + IOS_IoctlAsync(host->fd, USBV5_IOCTL_GETDEVICECHANGE, NULL, 0, host->attached_devices, 0x180, __usbv5_devicechangeCB, host); + + return IPC_OK; +} + +static s32 __usbv5_devicechangeCB(s32 result, void *p) +{ + int i, j; + struct _usbv5_host* host = (struct _usbv5_host*)p; + + if(host==NULL) return IPC_EINVAL; + + if (result>=0) { + // can't check the remove callbacks only if the number of devices has decreased, + // because devices may have been inserted as well as removed + for (i=0; iremove_cb[i].cb==NULL) + continue; + for (j=0; jremove_cb[i].device_id == host->attached_devices[j].device_id) + break; + } + + if (j==result) { // execute callback and remove it + host->remove_cb[i].cb(0, host->remove_cb[i].userdata); + host->remove_cb[i].cb = NULL; + } + } + // wipe unused device entries + memset(host->attached_devices+result, 0, sizeof(usb_device_entry)*(32-result)); + + IOS_IoctlAsync(host->fd, USBV5_IOCTL_ATTACHFINISH, NULL, 0, NULL, 0, __usbv5_attachfinishCB, host); + } + + return IPC_OK; +} + +static s32 add_devicechange_cb(_usb_cb_list **list, usbcallback cb, void *userdata) +{ + _usb_cb_list *new_cb = (_usb_cb_list*)iosAlloc(hId, sizeof(_usb_cb_list)); + if (new_cb==NULL) + return IPC_ENOMEM; + + new_cb->cb = cb; + new_cb->userdata = userdata; + new_cb->next = *list; + *list = new_cb; + + return IPC_OK; +} + +static s32 __usbv5_messageCB(s32 result,void *_msg) +{ + struct _usb_msg *msg = (struct _usb_msg*)_msg; + + if(msg==NULL) return IPC_EINVAL; + + if(msg->cb!=NULL) msg->cb(result, msg->userdata); + + iosFree(hId,msg); + + return IPC_OK; +} + +static s32 __usbv0_messageCB(s32 result,void *usrdata) +{ + u32 i; + struct _usb_msg *msg = (struct _usb_msg*)usrdata; + + if(msg==NULL) return IPC_EINVAL; + + if(msg->cb!=NULL) msg->cb(result, msg->userdata); + + for(i=0; iheap_buffers; i++) { + if(msg->vec[i].data!=NULL) + iosFree(hId,msg->vec[i].data); + } + + iosFree(hId,msg); + + return IPC_OK; +} + +static s32 __find_device_on_host(struct _usbv5_host *host, s32 device_id) +{ + int i; + if (host==NULL) return -1; + + for (i=0; host->attached_devices[i].device_id; i++) { + if (host->attached_devices[i].device_id == device_id) + return i; + } + + return -1; +} + +static s32 __usb_isochronous_message(s32 device_id,u8 bEndpoint,u8 bPackets,u16* rpPacketSizes,void* rpData,usbcallback cb,void *userdata) +{ + s32 ret = IPC_ENOMEM; + struct _usb_msg *msg; + u16 wLength=0; + u8 i; + + for (i=0; ifd = device_id; + msg->cb = cb; + msg->userdata = userdata; + + if (device_id>=0 && device_id<0x20) { + u8 *pEndp=NULL; + u16 *pLength=NULL; + u8 *pPackets=NULL; + + pEndp = (u8*)iosAlloc(hId,32); + if(pEndp==NULL) goto done; + *pEndp = bEndpoint; + + pLength = (u16*)iosAlloc(hId,32); + if(pLength==NULL) goto done; + // NOT byteswapped! + *pLength = wLength; + + pPackets = (u8*)iosAlloc(hId,32); + if(pPackets==NULL) goto done; + *pPackets = bPackets; + + msg->heap_buffers = 3; + + msg->vec[0].data = pEndp; + msg->vec[0].len = sizeof(u8); + msg->vec[1].data = pLength; + msg->vec[1].len = sizeof(u16); + msg->vec[2].data = pPackets; + msg->vec[2].len = sizeof(u8); + msg->vec[3].data = rpPacketSizes; + msg->vec[3].len = sizeof(u16)*bPackets; + msg->vec[4].data = rpData; + msg->vec[4].len = wLength; + + if (cb==NULL) + ret = IOS_Ioctlv(device_id, USBV0_IOCTL_ISOMSG, 3, 2, msg->vec); + else + return IOS_IoctlvAsync(device_id, USBV0_IOCTL_ISOMSG, 3, 2, msg->vec, __usbv0_messageCB, msg); + +done: + if(pEndp) iosFree(hId,pEndp); + if(pLength) iosFree(hId,pLength); + if(pPackets) iosFree(hId,pPackets); + } else { + u8 endpoint_dir = !!(bEndpoint&USB_ENDPOINT_IN); + s32 fd = (device_id<0) ? ven_host->fd : hid_host->fd; + + msg->iso.rpData = rpData; + msg->iso.rpPacketSizes = rpPacketSizes; + msg->iso.bEndpoint = bEndpoint; + msg->iso.bPackets = bPackets; + + msg->vec[0].data = msg; + msg->vec[0].len = 64; + // block counts are used for both input and output + msg->vec[1].data = msg->vec[3].data = rpPacketSizes; + msg->vec[1].len = msg->vec[3].len = sizeof(u16)*bPackets; + msg->vec[2].data = rpData; + msg->vec[2].len = wLength; + + if (cb==NULL) + ret = IOS_Ioctlv(fd, USBV5_IOCTL_ISOMSG, 2-endpoint_dir, 2+endpoint_dir, msg->vec); + else + return IOS_IoctlvAsync(fd, USBV5_IOCTL_ISOMSG, 2-endpoint_dir, 2+endpoint_dir, msg->vec, __usbv5_messageCB, msg); + } + + if (msg!=NULL) iosFree(hId,msg); + + return ret; +} + +static s32 __usb_control_message(s32 device_id,u8 bmRequestType,u8 bmRequest,u16 wValue,u16 wIndex,u16 wLength,void *rpData,usbcallback cb,void *userdata) +{ + s32 ret = IPC_ENOMEM; + struct _usb_msg *msg; + + if(((s32)rpData%32)!=0) return IPC_EINVAL; + if(wLength && !rpData) return IPC_EINVAL; + if(!wLength && rpData) return IPC_EINVAL; + + msg = (struct _usb_msg*)iosAlloc(hId,sizeof(struct _usb_msg)); + if(msg==NULL) return IPC_ENOMEM; + + memset(msg, 0, sizeof(struct _usb_msg)); + + msg->fd = device_id; + msg->cb = cb; + msg->userdata = userdata; + + if (device_id>=0 && device_id<0x20) { + u8 *pRqType = NULL,*pRq = NULL,*pNull = NULL; + u16 *pValue = NULL,*pIndex = NULL,*pLength = NULL; + + pRqType = (u8*)iosAlloc(hId,32); + if(pRqType==NULL) goto done; + *pRqType = bmRequestType; + + pRq = (u8*)iosAlloc(hId,32); + if(pRq==NULL) goto done; + *pRq = bmRequest; + + pValue = (u16*)iosAlloc(hId,32); + if(pValue==NULL) goto done; + *pValue = bswap16(wValue); + + pIndex = (u16*)iosAlloc(hId,32); + if(pIndex==NULL) goto done; + *pIndex = bswap16(wIndex); + + pLength = (u16*)iosAlloc(hId,32); + if(pLength==NULL) goto done; + *pLength = bswap16(wLength); + + pNull = (u8*)iosAlloc(hId,32); + if(pNull==NULL) goto done; + *pNull = 0; + + msg->heap_buffers = 6; + + msg->vec[0].data = pRqType; + msg->vec[0].len = sizeof(u8); + msg->vec[1].data = pRq; + msg->vec[1].len = sizeof(u8); + msg->vec[2].data = pValue; + msg->vec[2].len = sizeof(u16); + msg->vec[3].data = pIndex; + msg->vec[3].len = sizeof(u16); + msg->vec[4].data = pLength; + msg->vec[4].len = sizeof(u16); + msg->vec[5].data = pNull; + msg->vec[5].len = sizeof(u8); + msg->vec[6].data = rpData; + msg->vec[6].len = wLength; + + if (cb==NULL) + ret = IOS_Ioctlv(device_id, USBV0_IOCTL_CTRLMSG, 6, 1, msg->vec); + else + return IOS_IoctlvAsync(device_id, USBV0_IOCTL_CTRLMSG, 6, 1, msg->vec, __usbv0_messageCB, msg); + +done: + if(pRqType!=NULL) iosFree(hId,pRqType); + if(pRq!=NULL) iosFree(hId,pRq); + if(pValue!=NULL) iosFree(hId,pValue); + if(pIndex!=NULL) iosFree(hId,pIndex); + if(pLength!=NULL) iosFree(hId,pLength); + if(pNull!=NULL) iosFree(hId,pNull); + + } else { + u8 request_dir = !!(bmRequestType&USB_CTRLTYPE_DIR_DEVICE2HOST); + s32 fd = (device_id<0) ? ven_host->fd : hid_host->fd; + + msg->ctrl.bmRequestType = bmRequestType; + msg->ctrl.bmRequest = bmRequest; + msg->ctrl.wValue = wValue; + msg->ctrl.wIndex = wIndex; + msg->ctrl.wLength = wLength; + msg->ctrl.rpData = rpData; + + msg->vec[0].data = msg; + msg->vec[0].len = 64; + msg->vec[1].data = rpData; + msg->vec[1].len = wLength; + + if (cb==NULL) + ret = IOS_Ioctlv(fd, USBV5_IOCTL_CTRLMSG, 2-request_dir, request_dir, msg->vec); + else + return IOS_IoctlvAsync(fd, USBV5_IOCTL_CTRLMSG, 2-request_dir, request_dir, msg->vec, __usbv5_messageCB, msg); + } + + if(msg!=NULL) iosFree(hId,msg); + + return ret; +} + +static inline s32 __usb_interrupt_bulk_message(s32 device_id,u8 ioctl,u8 bEndpoint,u16 wLength,void *rpData,usbcallback cb,void *userdata) +{ + s32 ret = IPC_ENOMEM; + struct _usb_msg *msg; + + if(((s32)rpData%32)!=0) return IPC_EINVAL; + if(wLength && !rpData) return IPC_EINVAL; + if(!wLength && rpData) return IPC_EINVAL; + + msg = (struct _usb_msg*)iosAlloc(hId,sizeof(struct _usb_msg)); + if(msg==NULL) return IPC_ENOMEM; + + memset(msg, 0, sizeof(struct _usb_msg)); + + msg->fd = device_id; + msg->cb = cb; + msg->userdata = userdata; + + if (device_id>=0 && device_id<0x20) { + u8 *pEndP = NULL; + u16 *pLength = NULL; + + pEndP = (u8*)iosAlloc(hId,32); + if(pEndP==NULL) goto done; + *pEndP = bEndpoint; + + pLength = (u16*)iosAlloc(hId,32); + if(pLength==NULL) goto done; + *pLength = wLength; + + msg->vec[0].data = pEndP; + msg->vec[0].len = sizeof(u8); + msg->vec[1].data = pLength; + msg->vec[1].len = sizeof(u16); + msg->vec[2].data = rpData; + msg->vec[2].len = wLength; + + msg->heap_buffers = 2; + + if (cb==NULL) + ret = IOS_Ioctlv(device_id,ioctl,2,1,msg->vec); + else + return IOS_IoctlvAsync(device_id,ioctl,2,1,msg->vec,__usbv0_messageCB,msg); + +done: + if(pEndP!=NULL) iosFree(hId,pEndP); + if(pLength!=NULL) iosFree(hId,pLength); + + } else { + u8 endpoint_dir = !!(bEndpoint&USB_ENDPOINT_IN); + s32 fd = (device_id<0) ? ven_host->fd : hid_host->fd; + + if (ioctl == USBV0_IOCTL_INTRMSG) { + // HID does this a little bit differently + if (device_id>=0) + msg->hid_intr_dir = !endpoint_dir; + else { + msg->intr.rpData = rpData; + msg->intr.wLength = wLength; + msg->intr.bEndpoint = bEndpoint; + } + ioctl = USBV5_IOCTL_INTRMSG; + } else { + msg->bulk.rpData = rpData; + msg->bulk.wLength = wLength; + msg->bulk.bEndpoint = bEndpoint; + ioctl = USBV5_IOCTL_BULKMSG; + } + + msg->vec[0].data = msg; + msg->vec[0].len = 64; + msg->vec[1].data = rpData; + msg->vec[1].len = wLength; + + if (cb==NULL) + ret = IOS_Ioctlv(fd, ioctl, 2-endpoint_dir, endpoint_dir, msg->vec); + else + return IOS_IoctlvAsync(fd, ioctl, 2-endpoint_dir, endpoint_dir, msg->vec, __usbv5_messageCB, msg); + } + + if(msg!=NULL) iosFree(hId,msg); + + return ret; +} + +static inline s32 __usb_getdesc(s32 fd, u8 *buffer, u8 valuehi, u8 valuelo, u16 index, u16 size) +{ + u8 requestType = USB_CTRLTYPE_DIR_DEVICE2HOST; + + if (valuehi==USB_DT_HID || valuehi==USB_DT_REPORT || valuehi==USB_DT_PHYSICAL) + requestType |= USB_CTRLTYPE_REC_INTERFACE; + + return __usb_control_message(fd, requestType, USB_REQ_GETDESCRIPTOR, (valuehi << 8) | valuelo, index, size, buffer, NULL, NULL); +} + +static u32 __find_next_endpoint(u8 *buffer,s32 size,u8 align) +{ + u8 *ptr = buffer; + + while(size>2 && buffer[0]) { // abort if buffer[0]==0 to avoid getting stuck + if(buffer[1]==USB_DT_ENDPOINT || buffer[1]==USB_DT_INTERFACE) + break; + + size -= (buffer[0]+align)&~align; + buffer += (buffer[0]+align)&~align; + } + + return (buffer - ptr); +} + +s32 USB_Initialize() +{ + if(hId==-1) hId = iosCreateHeap(USB_HEAPSIZE); + if(hId<0) return IPC_ENOMEM; + + if (ven_host==NULL) { + s32 ven_fd = IOS_Open(__ven_path, IPC_OPEN_NONE); + if (ven_fd>=0) { + ven_host = (struct _usbv5_host*)iosAlloc(hId, sizeof(*ven_host)); + if (ven_host==NULL) { + IOS_Close(ven_fd); + return IPC_ENOMEM; + } + memset(ven_host, 0, sizeof(*ven_host)); + ven_host->fd = ven_fd; + + u32 *ven_ver = (u32*)iosAlloc(hId, 0x20); + if (ven_ver==NULL) goto mem_error; + if (IOS_Ioctl(ven_fd, USBV5_IOCTL_GETVERSION, NULL, 0, ven_ver, 0x20)==0 && ven_ver[0]==0x50001) + IOS_IoctlAsync(ven_fd, USBV5_IOCTL_GETDEVICECHANGE, NULL, 0, ven_host->attached_devices, 0x180, __usbv5_devicechangeCB, ven_host); + else { + // wrong ven version + IOS_Close(ven_fd); + iosFree(hId, ven_host); + ven_host = NULL; + } + + iosFree(hId, ven_ver); + } + } + + if (hid_host==NULL) { + s32 hid_fd = IOS_Open(__hid_path, IPC_OPEN_NONE); + if (hid_fd>=0) { + hid_host = (struct _usbv5_host*)iosAlloc(hId, sizeof(*hid_host)); + if (hid_host==NULL) { + IOS_Close(hid_fd); + goto mem_error; + } + memset(hid_host, 0, sizeof(*hid_host)); + hid_host->fd = hid_fd; + + u32 *hid_ver = (u32*)iosAlloc(hId, 0x20); + if (hid_ver==NULL) goto mem_error; + // have to call the USB4 version first, to be safe + if (IOS_Ioctl(hid_fd, USBV4_IOCTL_GETVERSION, NULL, 0, NULL, 0)==0x40001 || \ + IOS_Ioctl(hid_fd, USBV5_IOCTL_GETVERSION, NULL, 0, hid_ver, 0x20) || hid_ver[0]!=0x50001) { + // wrong hid version + IOS_Close(hid_fd); + iosFree(hId, hid_host); + hid_host = NULL; + } else + IOS_IoctlAsync(hid_fd, USBV5_IOCTL_GETDEVICECHANGE, NULL, 0, hid_host->attached_devices, 0x180, __usbv5_devicechangeCB, hid_host); + + iosFree(hId, hid_ver); + } + } + + return IPC_OK; + +mem_error: + USB_Deinitialize(); + return IPC_ENOMEM; +} + +s32 USB_Deinitialize() +{ + if (hid_host) { + if (hid_host->fd>=0) { + IOS_Ioctl(hid_host->fd, USBV5_IOCTL_SHUTDOWN, NULL, 0, NULL, 0); + IOS_Close(hid_host->fd); + } + iosFree(hId, hid_host); + hid_host = NULL; + } + + if (ven_host) { + if (ven_host->fd>=0) { + IOS_Ioctl(ven_host->fd, USBV5_IOCTL_SHUTDOWN, NULL, 0, NULL, 0); + IOS_Close(ven_host->fd); + } + iosFree(hId, ven_host); + ven_host = NULL; + } + + return IPC_OK; +} + +s32 USB_OpenDevice(s32 device_id,u16 vid,u16 pid,s32 *fd) +{ + s32 ret = USB_OK; + char *devicepath = NULL; + *fd = -1; + + if (device_id && device_id!=USB_OH1_DEVICE_ID) { + int i; + + i = __find_device_on_host(ven_host, device_id); + if (i>=0) + USB_ResumeDevice(device_id); + else { + // HID V5 devices need their descriptors read before being used + usb_devdesc desc; + i = __find_device_on_host(hid_host, device_id); + if (i>=0) { + USB_ResumeDevice(device_id); + i = USB_GetDescriptors(device_id, &desc); + if (i>=0) + USB_FreeDescriptors(&desc); + else { + USB_SuspendDevice(device_id); + return i; + } + } + } + if (i>=0) { + *fd = device_id; + return 0; + } + } + + devicepath = iosAlloc(hId,USB_MAXPATH); + if(devicepath==NULL) return IPC_ENOMEM; + + if (device_id==USB_OH1_DEVICE_ID) + snprintf(devicepath,USB_MAXPATH,"/dev/usb/oh1/%x/%x",vid,pid); + else + snprintf(devicepath,USB_MAXPATH,"/dev/usb/oh0/%x/%x",vid,pid); + + *fd = IOS_Open(devicepath,0); + if(*fd<0) ret = *fd; + + if (devicepath!=NULL) iosFree(hId,devicepath); + return ret; +} + +s32 USBV5_CloseDevice(s32 device_id) +{ + int i; + struct _usbv5_host* host; + + if (__find_device_on_host(ven_host, device_id)>=0) + host = ven_host; + else if (__find_device_on_host(hid_host, device_id)>=0) + host = hid_host; + else + return IPC_EINVAL; + + for (i=0; i < USB_MAX_DEVICES; i++) { + if (host->remove_cb[i].cb==NULL) + continue; + + if (host->remove_cb[i].device_id==device_id) { + host->remove_cb[i].cb(0, host->remove_cb[i].userdata); + host->remove_cb[i].cb = NULL; + break; + } + } + //return USB_SuspendDevice(device_id); + return 0; +} + +s32 USB_CloseDevice(s32 *fd) +{ + s32 ret = IPC_EINVAL; + if (fd) { + ret = USBV5_CloseDevice(*fd); + if (ret==IPC_EINVAL && *fd>0) + ret = IOS_Close(*fd); + if (ret>=0) *fd = -1; + } + + return ret; +} + +s32 USB_CloseDeviceAsync(s32 *fd,usbcallback cb,void *userdata) +{ + s32 ret = IPC_EINVAL; + if(fd) { + ret = USBV5_CloseDevice(*fd); + if (ret!=IPC_EINVAL) { + if (cb) + return cb(ret, userdata); + else + return ret; + } + if (*fd>0) + return IOS_CloseAsync(*fd,cb,userdata); + } + + return ret; +} + +s32 USB_GetDeviceDescription(s32 fd,usb_devdesc *devdesc) +{ + s32 ret; + usb_devdesc *p; + + p = iosAlloc(hId,USB_DT_DEVICE_SIZE); + if(p==NULL) return IPC_ENOMEM; + + ret = __usb_control_message(fd,USB_CTRLTYPE_DIR_DEVICE2HOST,USB_REQ_GETDESCRIPTOR,(USB_DT_DEVICE<<8),0,USB_DT_DEVICE_SIZE,p,NULL,NULL); + if(ret>=0) memcpy(devdesc,p,USB_DT_DEVICE_SIZE); + devdesc->configurations = NULL; + + if(p!=NULL) iosFree(hId,p); + return ret; +} + +static s32 USBV5_GetDescriptors(s32 device_id, usb_devdesc *udd) +{ + s32 retval = IPC_ENOMEM; + u32 *io_buffer = NULL; + u8 *buffer = NULL; + usb_configurationdesc *ucd = NULL; + usb_interfacedesc *uid = NULL; + usb_endpointdesc *ued = NULL; + u32 iConf, iEndpoint; + s32 fd; + u32 desc_out_size, desc_start_offset; + + if (__find_device_on_host(ven_host, device_id)>=0) { + fd = ven_host->fd; + desc_out_size = 0xC0; + desc_start_offset = 20; + } else if (__find_device_on_host(hid_host, device_id)>=0) { + fd = hid_host->fd; + desc_out_size = 0x60; + desc_start_offset = 36; + } else + return IPC_EINVAL; + + io_buffer = (u32*)iosAlloc(hId, 0x20); + buffer = (u8*)iosAlloc(hId, desc_out_size); + if (io_buffer==NULL || buffer==NULL) goto free_bufs; + + io_buffer[0] = device_id; + io_buffer[2] = 0; + memset(buffer, 0, desc_out_size); + retval = IOS_Ioctl(fd, USBV5_IOCTL_GETDEVPARAMS, io_buffer, 0x20, buffer, desc_out_size); + if (retval==IPC_OK) { + u8 *next = buffer+desc_start_offset; + + memcpy(udd, next, sizeof(*udd)); + udd->configurations = calloc(udd->bNumConfigurations, sizeof(*udd->configurations)); + if(udd->configurations == NULL) goto free_bufs; + + next += (udd->bLength+3)&~3; + for (iConf = 0; iConf < udd->bNumConfigurations; iConf++) + { + ucd = &udd->configurations[iConf]; + memcpy(ucd, next, USB_DT_CONFIG_SIZE); + next += (USB_DT_CONFIG_SIZE+3)&~3; + + // ignore the actual value of bNumInterfaces; IOS presents each interface as a different device + // alternate settings will not show up here, if you want them you must explicitly request + // the interface descriptor + if (ucd->bNumInterfaces==0) + continue; + + ucd->bNumInterfaces = 1; + ucd->interfaces = calloc(1, sizeof(*ucd->interfaces)); + if (ucd->interfaces == NULL) goto free_bufs; + + uid = ucd->interfaces; + memcpy(uid, next, USB_DT_INTERFACE_SIZE); + next += (uid->bLength+3)&~3; + + /* This skips vendor and class specific descriptors */ + uid->extra_size = __find_next_endpoint(next, buffer+desc_out_size-next, 3); + if(uid->extra_size>0) + { + uid->extra = malloc(uid->extra_size); + if(uid->extra == NULL) + goto free_bufs; + memcpy(uid->extra, next, uid->extra_size); + // already rounded + next += uid->extra_size; + } + + if (uid->bNumEndpoints) { + uid->endpoints = calloc(uid->bNumEndpoints, sizeof(*uid->endpoints)); + if (uid->endpoints == NULL) goto free_bufs; + + for(iEndpoint = 0; iEndpoint < uid->bNumEndpoints; iEndpoint++) + { + ued = &uid->endpoints[iEndpoint]; + memcpy(ued, next, USB_DT_ENDPOINT_SIZE); + next += (ued->bLength+3)&~3; + } + } + + } + + retval = IPC_OK; + } + +free_bufs: + if (io_buffer!=NULL) + iosFree(hId, io_buffer); + if (buffer!=NULL) + iosFree(hId, buffer); + if (retval<0) + USB_FreeDescriptors(udd); + return retval; +} + +s32 USB_GetDescriptors(s32 fd, usb_devdesc *udd) +{ + u8 *buffer = NULL; + u8 *ptr = NULL; + usb_configurationdesc *ucd = NULL; + usb_interfacedesc *uid = NULL; + usb_endpointdesc *ued = NULL; + s32 retval = 0; + u32 size; + u32 iConf, iInterface, iEndpoint; + + if (udd==NULL) + return IPC_EINVAL; + memset(udd, 0, sizeof(*udd)); + + if (fd>=0x20 || fd<-1) + return USBV5_GetDescriptors(fd, udd); + + buffer = iosAlloc(hId, sizeof(*udd)); + if(buffer == NULL) + { + retval = IPC_ENOHEAP; + goto free_and_error; + } + + retval = __usb_getdesc(fd, buffer, USB_DT_DEVICE, 0, 0, USB_DT_DEVICE_SIZE); + if(retval < 0) + goto free_and_error; + memcpy(udd, buffer, USB_DT_DEVICE_SIZE); + iosFree(hId, buffer); + + udd->bcdUSB = bswap16(udd->bcdUSB); + udd->idVendor = bswap16(udd->idVendor); + udd->idProduct = bswap16(udd->idProduct); + udd->bcdDevice = bswap16(udd->bcdDevice); + + udd->configurations = calloc(udd->bNumConfigurations, sizeof(*udd->configurations)); + if(udd->configurations == NULL) + { + retval = IPC_ENOMEM; + goto free_and_error; + } + for(iConf = 0; iConf < udd->bNumConfigurations; iConf++) + { + buffer = iosAlloc(hId, USB_DT_CONFIG_SIZE); + if(buffer == NULL) + { + retval = IPC_ENOHEAP; + goto free_and_error; + } + + retval = __usb_getdesc(fd, buffer, USB_DT_CONFIG, iConf, 0, USB_DT_CONFIG_SIZE); + if (retval < 0) + goto free_and_error; + + ucd = &udd->configurations[iConf]; + memcpy(ucd, buffer, USB_DT_CONFIG_SIZE); + iosFree(hId, buffer); + + ucd->wTotalLength = bswap16(ucd->wTotalLength); + size = ucd->wTotalLength; + buffer = iosAlloc(hId, size); + if(buffer == NULL) + { + retval = IPC_ENOHEAP; + goto free_and_error; + } + + retval = __usb_getdesc(fd, buffer, USB_DT_CONFIG, iConf, 0, ucd->wTotalLength); + if(retval < 0) + goto free_and_error; + + ptr = buffer; + ptr += ucd->bLength; + size -= ucd->bLength; + + retval = IPC_ENOMEM; + + ucd->interfaces = calloc(ucd->bNumInterfaces, sizeof(*ucd->interfaces)); + if(ucd->interfaces == NULL) + goto free_and_error; + for(iInterface = 0; iInterface < ucd->bNumInterfaces; iInterface++) + { + retval = __find_next_endpoint(ptr, size, 0); + if (retval>0) { + // FIXME: do something with this data + } + ptr += retval; + size -= retval; + + uid = ucd->interfaces+iInterface; + memcpy(uid, ptr, USB_DT_INTERFACE_SIZE); + ptr += uid->bLength; + size -= uid->bLength; + + /* This skips vendor and class specific descriptors */ + uid->extra_size = __find_next_endpoint(ptr, size, 0); + if(uid->extra_size>0) + { + uid->extra = malloc(uid->extra_size); + if(uid->extra == NULL) + goto free_and_error; + memcpy(uid->extra, ptr, uid->extra_size); + ptr += uid->extra_size; + size -= uid->extra_size; + } + + if (uid->bNumEndpoints) { + uid->endpoints = calloc(uid->bNumEndpoints, sizeof(*uid->endpoints)); + if(uid->endpoints == NULL) + goto free_and_error; + + for(iEndpoint = 0; iEndpoint < uid->bNumEndpoints; iEndpoint++) + { + ued = &uid->endpoints[iEndpoint]; + memcpy(ued, ptr, USB_DT_ENDPOINT_SIZE); + ptr += ued->bLength; + size -= ued->bLength; + ued->wMaxPacketSize = bswap16(ued->wMaxPacketSize); + } + } + + if (iInterface==(ucd->bNumInterfaces-1) && size>2) { + // we've read all the interfaces but there's data left (probably alternate setting interfaces) + // see if we can find another interface descriptor + retval = __find_next_endpoint(ptr, size, 0); + if (size-retval >= USB_DT_INTERFACE_SIZE && ptr[retval+1] == USB_DT_INTERFACE) { + // found alternates, make room and loop + usb_interfacedesc *interfaces = realloc(ucd->interfaces, (iInterface+2)*sizeof(*interfaces)); + if (interfaces == NULL) + goto free_and_error; + interfaces[iInterface+1].endpoints = NULL; + interfaces[iInterface+1].extra = NULL; + ucd->bNumInterfaces++; + ucd->interfaces = interfaces; + } + } + } + iosFree(hId, buffer); + buffer = NULL; + } + retval = IPC_OK; + +free_and_error: + if(buffer != NULL) + iosFree(hId, buffer); + if(retval < 0) + USB_FreeDescriptors(udd); + return retval; +} + +s32 USB_GetGenericDescriptor(s32 fd,u8 type,u8 index,u8 interface,void *data,u32 size) { + u8 *buffer; + s32 retval; + + buffer = iosAlloc(hId,size); + if(buffer==NULL) { + retval = IPC_ENOMEM; + goto free_and_error; + } + + retval = __usb_getdesc(fd,buffer,type,index,interface,size); + if(retval<0) goto free_and_error; + + memcpy(data,buffer,size); + retval = IPC_OK; + +free_and_error: + if(buffer!=NULL) iosFree(hId,buffer); + return retval; +} + +s32 USB_GetHIDDescriptor(s32 fd,u8 interface,usb_hiddesc *uhd,u32 size) +{ + int i; + s32 retval; + + if (size < USB_DT_HID_SIZE) + return IPC_EINVAL; + + retval = USB_GetGenericDescriptor(fd, USB_DT_HID, 0, interface, uhd, size); + if (retval != IPC_OK) + return retval; + + uhd->bcdHID = bswap16(uhd->bcdHID); + uhd->descr[0].wDescriptorLength = bswap16(uhd->descr[0].wDescriptorLength); + size -= USB_DT_HID_SIZE; + for (i=1; ibNumDescriptors && size>=3; size -=3, i++) + uhd->descr[i].wDescriptorLength = bswap16(uhd->descr[i].wDescriptorLength); + + return retval; +} + +void USB_FreeDescriptors(usb_devdesc *udd) +{ + int iConf, iInterface; + usb_configurationdesc *ucd; + usb_interfacedesc *uid; + if(udd->configurations != NULL) + { + for(iConf = 0; iConf < udd->bNumConfigurations; iConf++) + { + ucd = &udd->configurations[iConf]; + if(ucd->interfaces != NULL) + { + for(iInterface = 0; iInterface < ucd->bNumInterfaces; iInterface++) + { + uid = ucd->interfaces+iInterface; + free(uid->endpoints); + free(uid->extra); + } + free(ucd->interfaces); + } + } + free(udd->configurations); + } +} + +s32 USB_GetAsciiString(s32 fd,u8 bIndex,u16 wLangID,u16 wLength,void *rpData) +{ + s32 ret; + u8 bo, ro; + u8 *buf; + u8 *rp = (u8 *)rpData; + + if(wLength > 255) + wLength = 255; + + buf = iosAlloc(hId, 255); /* 255 is the highest possible length of a descriptor */ + if(buf == NULL) + return IPC_ENOMEM; + + ret = __usb_getdesc(fd, buf, USB_DT_STRING, bIndex, wLangID, 255); + + /* index 0 gets a list of supported languages */ + if(bIndex == 0) + { + if(ret > 0) + memcpy(rpData, buf, wLength); + iosFree(hId, buf); + return ret; + } + + if(ret > 0) + { + bo = 2; + ro = 0; + while(ro < (wLength - 1) && bo < buf[0]) + { + if(buf[bo + 1]) + rp[ro++] = '?'; + else + rp[ro++] = buf[bo]; + bo += 2; + } + rp[ro] = 0; + ret = ro - 1; + } + + iosFree(hId, buf); + return ret; +} + +s32 USB_ReadIsoMsg(s32 fd,u8 bEndpoint,u8 bPackets,u16 *rpPacketSizes,void *rpData) +{ + return __usb_isochronous_message(fd,bEndpoint,bPackets,rpPacketSizes,rpData,NULL,NULL); +} + +s32 USB_ReadIsoMsgAsync(s32 fd,u8 bEndpoint,u8 bPackets,u16 *rpPacketSizes,void *rpData,usbcallback cb,void *userdata) +{ + return __usb_isochronous_message(fd,bEndpoint,bPackets,rpPacketSizes,rpData,cb,userdata); +} + +s32 USB_WriteIsoMsg(s32 fd,u8 bEndpoint,u8 bPackets,u16 *rpPacketSizes,void *rpData) +{ + return __usb_isochronous_message(fd,bEndpoint,bPackets,rpPacketSizes,rpData,NULL,NULL); +} + +s32 USB_WriteIsoMsgAsync(s32 fd,u8 bEndpoint,u8 bPackets,u16 *rpPacketSizes,void *rpData,usbcallback cb,void *userdata) +{ + return __usb_isochronous_message(fd,bEndpoint,bPackets,rpPacketSizes,rpData,cb,userdata); +} + +s32 USB_ReadIntrMsg(s32 fd,u8 bEndpoint,u16 wLength,void *rpData) +{ + return __usb_interrupt_bulk_message(fd,USBV0_IOCTL_INTRMSG,bEndpoint,wLength,rpData,NULL,NULL); +} + +s32 USB_ReadIntrMsgAsync(s32 fd,u8 bEndpoint,u16 wLength,void *rpData,usbcallback cb,void *userdata) +{ + return __usb_interrupt_bulk_message(fd,USBV0_IOCTL_INTRMSG,bEndpoint,wLength,rpData,cb,userdata); +} + +s32 USB_WriteIntrMsg(s32 fd,u8 bEndpoint,u16 wLength,void *rpData) +{ + return __usb_interrupt_bulk_message(fd,USBV0_IOCTL_INTRMSG,bEndpoint,wLength,rpData,NULL,NULL); +} + +s32 USB_WriteIntrMsgAsync(s32 fd,u8 bEndpoint,u16 wLength,void *rpData,usbcallback cb,void *userdata) +{ + return __usb_interrupt_bulk_message(fd,USBV0_IOCTL_INTRMSG,bEndpoint,wLength,rpData,cb,userdata); +} + +s32 USB_ReadBlkMsg(s32 fd,u8 bEndpoint,u16 wLength,void *rpData) +{ + return __usb_interrupt_bulk_message(fd,USBV0_IOCTL_BLKMSG,bEndpoint,wLength,rpData,NULL,NULL); +} + +s32 USB_ReadBlkMsgAsync(s32 fd,u8 bEndpoint,u16 wLength,void *rpData,usbcallback cb,void *userdata) +{ + return __usb_interrupt_bulk_message(fd,USBV0_IOCTL_BLKMSG,bEndpoint,wLength,rpData,cb,userdata); +} + +s32 USB_WriteBlkMsg(s32 fd,u8 bEndpoint,u16 wLength,void *rpData) +{ + return __usb_interrupt_bulk_message(fd,USBV0_IOCTL_BLKMSG,bEndpoint,wLength,rpData,NULL,NULL); +} + +s32 USB_WriteBlkMsgAsync(s32 fd,u8 bEndpoint,u16 wLength,void *rpData,usbcallback cb,void *userdata) +{ + return __usb_interrupt_bulk_message(fd,USBV0_IOCTL_BLKMSG,bEndpoint,wLength,rpData,cb,userdata); +} + +s32 USB_ReadCtrlMsg(s32 fd,u8 bmRequestType,u8 bmRequest,u16 wValue,u16 wIndex,u16 wLength,void *rpData) +{ + return __usb_control_message(fd,bmRequestType,bmRequest,wValue,wIndex,wLength,rpData,NULL,NULL); +} + +s32 USB_ReadCtrlMsgAsync(s32 fd,u8 bmRequestType,u8 bmRequest,u16 wValue,u16 wIndex,u16 wLength,void *rpData,usbcallback cb,void *userdata) +{ + return __usb_control_message(fd,bmRequestType,bmRequest,wValue,wIndex,wLength,rpData,cb,userdata); +} + +s32 USB_WriteCtrlMsg(s32 fd,u8 bmRequestType,u8 bmRequest,u16 wValue,u16 wIndex,u16 wLength,void *rpData) +{ + return __usb_control_message(fd,bmRequestType,bmRequest,wValue,wIndex,wLength,rpData,NULL,NULL); +} + +s32 USB_WriteCtrlMsgAsync(s32 fd,u8 bmRequestType,u8 bmRequest,u16 wValue,u16 wIndex,u16 wLength,void *rpData,usbcallback cb,void *userdata) +{ + return __usb_control_message(fd,bmRequestType,bmRequest,wValue,wIndex,wLength,rpData,cb,userdata); +} + +static s32 USB5_RegisterDeviceRemoval(struct _usbv5_host *host, s32 device_id, usbcallback cb, void *userdata) +{ + int i; + + // check to make sure the device is present + if (__find_device_on_host(host, device_id)<0) + return IPC_ENOENT; + + // now make sure it's not hooked already + for (i=0; iremove_cb[i].cb && host->remove_cb[i].device_id==device_id) + return IPC_EINVAL; + } + + // find a free entry and add it + for (i=0; iremove_cb[i].cb==NULL) { + host->remove_cb[i].cb = cb; + host->remove_cb[i].userdata = userdata; + host->remove_cb[i].device_id = device_id; + return IPC_OK; + } + } + return IPC_EINVAL; +} + +s32 USB_DeviceRemovalNotifyAsync(s32 fd,usbcallback cb,void *userdata) +{ + s32 ret; + if (fd>=0 && fd<0x20) + return IOS_IoctlAsync(fd,USBV0_IOCTL_DEVREMOVALHOOK,NULL,0,NULL,0,cb,userdata); + + ret = USB5_RegisterDeviceRemoval(ven_host, fd, cb, userdata); + if (ret == IPC_ENOENT) + ret = USB5_RegisterDeviceRemoval(hid_host, fd, cb, userdata); + + return ret; +} + +static s32 USBV5_SuspendResume(s32 device_id, s32 resumed) +{ + s32 ret; + s32 fd; + + if (__find_device_on_host(ven_host, device_id)>=0) + fd = ven_host->fd; + else if (__find_device_on_host(hid_host, device_id)>=0) + fd = hid_host->fd; + else + return IPC_ENOENT; + + s32 *buf = (s32*)iosAlloc(hId, 32); + if (buf==NULL) return IPC_ENOMEM; + + buf[0] = device_id; + buf[2] = resumed; + ret = IOS_Ioctl(fd, USBV5_IOCTL_SUSPEND_RESUME, buf, 32, NULL, 0); + iosFree(hId, buf); + + return ret; +} + +s32 USB_SuspendDevice(s32 fd) +{ + if (fd>=0x20 || fd<-1) + return USBV5_SuspendResume(fd, 0); + + return IOS_Ioctl(fd,USBV0_IOCTL_SUSPENDDEV,NULL,0,NULL,0); +} + +s32 USB_ResumeDevice(s32 fd) +{ + if (fd>=0x20 || fd<-1) + return USBV5_SuspendResume(fd, 1); + + return IOS_Ioctl(fd,USBV0_IOCTL_RESUMEDEV,NULL,0,NULL,0); +} + +s32 USB_DeviceChangeNotifyAsync(u8 interface_class, usbcallback cb, void* userdata) +{ + s32 ret=IPC_ENOENT; + + if (ven_host==NULL) { + s32 fd; + struct _usb_msg *msg; + + fd = IOS_Open(__oh0_path,IPC_OPEN_NONE); + if (fd<0) return fd; + + msg = iosAlloc(hId,sizeof(*msg)); + if (msg==NULL) { + IOS_Close(fd); + return IPC_ENOMEM; + } + + msg->cb = cb; + msg->userdata = userdata; + msg->class = interface_class; + + msg->vec[0].data = &msg->class; + msg->vec[0].len = 1; + + ret = IOS_IoctlvAsync(fd,USBV0_IOCTL_DEVICECLASSCHANGE,1,0,msg->vec,__usbv5_messageCB,msg); + IOS_Close(fd); + + if (ret<0) iosFree(hId, msg); + } + else if (interface_class != USB_CLASS_HID && ven_host) + ret = add_devicechange_cb(&ven_host->device_change_notify, cb, userdata); + + else if (interface_class==USB_CLASS_HID && hid_host) + ret = add_devicechange_cb(&hid_host->device_change_notify, cb, userdata); + + + return ret; +} + +s32 USB_GetDeviceList(usb_device_entry *descr_buffer,u8 num_descr,u8 interface_class,u8 *cnt_descr) +{ + int i; + u8 cntdevs=0; + + if (ven_host==NULL) { + s32 fd; + u32 *buf = (u32*)iosAlloc(hId, num_descr<<3); + if (buf==NULL) return IPC_ENOMEM; + + fd = IOS_Open(__oh0_path,IPC_OPEN_NONE); + if (fd<0) { + iosFree(hId, buf); + return fd; + } + + cntdevs = 0; + i = IOS_IoctlvFormat(hId,fd,USBV0_IOCTL_GETDEVLIST,"bb:dd",num_descr,interface_class,&cntdevs,sizeof(cntdevs),buf,(num_descr<<3)); + if (cnt_descr) *cnt_descr = cntdevs; + + while (cntdevs--) { + descr_buffer[cntdevs].device_id = 0; + descr_buffer[cntdevs].vid = (u16)(buf[cntdevs*2+1]>>16); + descr_buffer[cntdevs].pid = (u16)buf[cntdevs*2+1]; + } + + IOS_Close(fd); + iosFree(hId, buf); + return i; + } + + // for ven_host, we can only exclude usb_hid class devices + if (interface_class != USB_CLASS_HID && ven_host) { + i=0; + while (cntdevsattached_devices[i].device_id) { + descr_buffer[cntdevs++] = ven_host->attached_devices[i++]; + if (i>=32) break; + } + } + + if ((!interface_class || interface_class==USB_CLASS_HID) && hid_host) { + i=0; + while (cntdevsattached_devices[i].device_id) { + descr_buffer[cntdevs++] = hid_host->attached_devices[i++]; + if (i>32) break; + } + } + + if (cnt_descr) *cnt_descr = cntdevs; + + return IPC_OK; +} + +s32 USB_SetConfiguration(s32 fd, u8 configuration) +{ + return __usb_control_message(fd, (USB_CTRLTYPE_DIR_HOST2DEVICE | USB_CTRLTYPE_TYPE_STANDARD | USB_CTRLTYPE_REC_DEVICE), USB_REQ_SETCONFIG, configuration, 0, 0, NULL, NULL, NULL); +} + +s32 USB_GetConfiguration(s32 fd, u8 *configuration) +{ + u8 *_configuration; + s32 retval; + + _configuration = iosAlloc(hId, 1); + if(_configuration == NULL) + return IPC_ENOMEM; + + retval = __usb_control_message(fd, (USB_CTRLTYPE_DIR_DEVICE2HOST | USB_CTRLTYPE_TYPE_STANDARD | USB_CTRLTYPE_REC_DEVICE), USB_REQ_GETCONFIG, 0, 0, 1, _configuration, NULL, NULL); + if(retval >= 0) + *configuration = *_configuration; + iosFree(hId, _configuration); + + return retval; +} + +s32 USB_SetAlternativeInterface(s32 fd, u8 interface, u8 alternateSetting) +{ + return __usb_control_message(fd, (USB_CTRLTYPE_DIR_HOST2DEVICE | USB_CTRLTYPE_TYPE_STANDARD | USB_CTRLTYPE_REC_INTERFACE), USB_REQ_SETINTERFACE, alternateSetting, interface, 0, NULL, NULL, NULL); +} + +static s32 USBV5_CancelEndpoint(s32 device_id, u8 endpoint) +{ + s32 ret; + s32 fd; + + if (__find_device_on_host(ven_host, device_id)>=0) + fd = ven_host->fd; + else if (__find_device_on_host(hid_host, device_id)>=0) + fd = hid_host->fd; + else + return IPC_ENOENT; + + s32 *buf = (s32*)iosAlloc(hId, 32); + if (buf==NULL) return IPC_ENOMEM; + + buf[0] = device_id; + buf[2] = endpoint; + ret = IOS_Ioctl(fd, USBV5_IOCTL_CANCELENDPOINT, buf, 32, NULL, 0); + iosFree(hId, buf); + + return ret; +} + +s32 USB_ClearHalt(s32 fd, u8 endpoint) +{ + if (fd>=0x20 || fd<-1) + return USBV5_CancelEndpoint(fd, endpoint); + return __usb_control_message(fd, (USB_CTRLTYPE_DIR_HOST2DEVICE | USB_CTRLTYPE_TYPE_STANDARD | USB_CTRLTYPE_REC_ENDPOINT), USB_REQ_CLEARFEATURE, USB_FEATURE_ENDPOINT_HALT, endpoint, 0, NULL, NULL, NULL); +} + +#endif /* defined(HW_RVL) */ + diff --git a/wii/libogc/libogc/usbgecko.c b/wii/libogc/libogc/usbgecko.c new file mode 100644 index 0000000000..c00630a207 --- /dev/null +++ b/wii/libogc/libogc/usbgecko.c @@ -0,0 +1,374 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "usbgecko.h" + +#define _SHIFTL(v, s, w) \ + ((u32) (((u32)(v) & ((0x01 << (w)) - 1)) << (s))) +#define _SHIFTR(v, s, w) \ + ((u32)(((u32)(v) >> (s)) & ((0x01 << (w)) - 1))) + + +static u32 usbgecko_inited = 0; +static lwpq_t wait_exi_queue[2]; + +static s32 __usbgecko_exi_unlock(s32 chan,s32 dev) +{ + LWP_ThreadBroadcast(wait_exi_queue[chan]); + return 1; +} + +static void __usbgecko_init() +{ + u32 i; + + for(i=0;i 0x7FFFF) + return 0; + + if(!EXI_Select(chn,EXI_DEVICE_0,EXI_SPEED16MHZ)) ret |= 0x01; + if(!EXI_ImmEx(chn,&val,sizeof(u32),EXI_WRITE)) ret |= 0x02; + if(!EXI_ImmEx(chn,&val,sizeof(u32),EXI_WRITE)) ret |= 0x04; + if(!EXI_Deselect(chn)) ret |= 0x08; + + if(ret) return 0; + return 1; +} + +static __inline__ int __flashreadcommand(s32 chn, u32 flashaddress, u8 *flashdata) +{ + s32 ret = 0; + u32 val = 0xF0000000|(flashaddress<<9); + + if (flashaddress > 0x7FFFF) + return 0; + + if(!EXI_Select(chn,EXI_DEVICE_0,EXI_SPEED16MHZ)) ret |= 0x01; + if(!EXI_ImmEx(chn,&val,sizeof(u32),EXI_WRITE)) ret |= 0x02; + if(!EXI_ImmEx(chn,&val,sizeof(u32),EXI_READ)) ret |= 0x04; + if(!EXI_Deselect(chn)) ret |= 0x08; + + if(ret) return 0; + *flashdata = val>>23; + return 1; +} + +static int __usb_sendbyte(s32 chn,char ch) +{ + s32 ret; + u16 val; + + val = (0xB000|_SHIFTL(ch,4,8)); + ret = __send_command(chn,&val); + if(ret==1 && !(val&0x0400)) ret = 0; + + return ret; +} + +static int __usb_recvbyte(s32 chn,char *ch) +{ + s32 ret; + u16 val; + + *ch = 0; + val = 0xA000; + ret = __send_command(chn,&val); + if(ret==1 && !(val&0x0800)) ret = 0; + else if(ret==1) *ch = (val&0xff); + + return ret; +} + +int __usb_checksend(s32 chn) +{ + s32 ret; + u16 val; + + val = 0xC000; + ret = __send_command(chn,&val); + if(ret==1 && !(val&0x0400)) ret = 0; + + return ret; +} + +int __usb_checkrecv(s32 chn) +{ + s32 ret; + u16 val; + + val = 0xD000; + ret = __send_command(chn,&val); + if(ret==1 && !(val&0x0400)) ret = 0; + + return ret; +} + +void usb_flush(s32 chn) +{ + char tmp; + + __usbgecko_exi_wait(chn); + while(__usb_recvbyte(chn,&tmp)); + EXI_Unlock(chn); +} + +int usb_isgeckoalive(s32 chn) +{ + u32 id = 0; + s32 ret; + u16 val; + + if (EXI_GetID(chn, EXI_DEVICE_0, &id) == 0) + return 0; + + if (id != 0) + return 0; + + __usbgecko_exi_wait(chn); + + val = 0x9000; + ret = __send_command(chn,&val); + if(ret==1 && !(val&0x0470)) ret = 0; + + EXI_Unlock(chn); + + return ret; +} + +int usb_recvbuffer_ex(s32 chn,void *buffer,int size, int retries) +{ + s32 ret; + s32 left = size; + char *ptr = (char*)buffer; + + __usbgecko_exi_wait(chn); + while(left>0) { + ret = __usb_recvbyte(chn,ptr); + if(ret==0) break; + + ptr++; + left--; + + if (retries >= 0) { + retries--; + if (retries == 0) + break; + } + } + EXI_Unlock(chn); + + return (size - left); +} + +int usb_recvbuffer(s32 chn,void *buffer,int size) { + return usb_recvbuffer_ex(chn, buffer, size, -1); +} + +int usb_sendbuffer_ex(s32 chn,const void *buffer,int size, int retries) +{ + s32 ret; + s32 left = size; + char *ptr = (char*)buffer; + + __usbgecko_exi_wait(chn); + while(left>0) { + ret = __usb_sendbyte(chn,*ptr); + if(ret==0) break; + + ptr++; + left--; + + if (retries >= 0) { + retries--; + if (retries == 0) + break; + } + } + EXI_Unlock(chn); + + return (size - left); +} + +int usb_sendbuffer(s32 chn,const void *buffer,int size) { + return usb_sendbuffer_ex(chn, buffer, size, -1); +} + +int usb_recvbuffer_safe_ex(s32 chn,void *buffer,int size, int retries) +{ + s32 ret; + s32 left = size; + char *ptr = (char*)buffer; + + __usbgecko_exi_wait(chn); + while(left>0) { + if(__usb_checkrecv(chn)) { + ret = __usb_recvbyte(chn,ptr); + if(ret==0) break; + + ptr++; + left--; + } + + if (retries >= 0) { + retries--; + if (retries == 0) + break; + } + } + EXI_Unlock(chn); + + return (size - left); +} + +int usb_recvbuffer_safe(s32 chn,void *buffer,int size) { + return usb_recvbuffer_safe_ex(chn, buffer, size, -1); +} + +int usb_sendbuffer_safe_ex(s32 chn,const void *buffer,int size, int retries) +{ + s32 ret; + s32 left = size; + char *ptr = (char*)buffer; + + __usbgecko_exi_wait(chn); + while(left>0) { + if(__usb_checksend(chn)) { + ret = __usb_sendbyte(chn,*ptr); + if(ret==0) break; + + ptr++; + left--; + } + + if (retries >= 0) { + retries--; + if (retries == 0) + break; + } + } + EXI_Unlock(chn); + + return (size - left); +} + +int usb_sendbuffer_safe(s32 chn,const void *buffer,int size) { + return usb_sendbuffer_safe_ex(chn, buffer, size, -1); +} + +static int __flashsoftwareid_entry(s32 chn) +{ + s32 ret=0; + + if (__flashwritecommand(chn, 0x5555, 0xAA) && __flashwritecommand(chn, 0x2AAA, 0x55) && + __flashwritecommand(chn, 0x5555, 0x90)) + ret = 1; + + return ret; +} + +static int __flashsoftwareid_exit(s32 chn) +{ + s32 ret=0; + + if (__flashwritecommand(chn, 0x5555, 0xAA) && __flashwritecommand(chn, 0x2AAA, 0x55) && + __flashwritecommand(chn, 0x5555, 0xF0)) + ret = 1; + + return ret; +} + +int usb_flashread(s32 chn, u32 offset, void *buffer, size_t length) +{ + s32 ret=1; + u8 *data = (u8*)buffer; + + __usbgecko_exi_wait(chn); + while (ret && length--) + ret = __flashreadcommand(chn, offset++, data++); + + EXI_Unlock(chn); + + return ret; +} + +int usb_flashwrite(s32 chn, u32 offset, const void *buffer, size_t length) +{ + s32 ret=1; + const u8 *data = (const u8*)buffer; + u8 verify; + + __usbgecko_exi_wait(chn); + while (ret && length--) + { + if (!__flashwritecommand(chn, 0x5555, 0xAA) || !__flashwritecommand(chn, 0x2AAA, 0x55) || + !__flashwritecommand(chn, 0x5555, 0xA0) || !__flashwritecommand(chn, offset, *data)) + ret = 0; + else + { + usleep(20); + if (!__flashreadcommand(chn, offset++, &verify) || verify != *data++) + ret = 0; + } + } + EXI_Unlock(chn); + + return ret; +} + +int usb_flashverify(s32 chn) +{ + u8 id[2]; + s32 ret=0; + + __usbgecko_exi_wait(chn); + + if (__flashsoftwareid_entry(chn) &&__flashreadcommand(chn, 0, id+0) && + __flashreadcommand(chn, 1, id+1) && id[0] == 0xBF && id[1] == 0xD7 && + __flashsoftwareid_exit(chn)) + ret = 1; + + EXI_Unlock(chn); + + return ret; +} diff --git a/wii/libogc/libogc/usbmouse.c b/wii/libogc/libogc/usbmouse.c new file mode 100644 index 0000000000..6ab1055d5c --- /dev/null +++ b/wii/libogc/libogc/usbmouse.c @@ -0,0 +1,407 @@ +/*------------------------------------------------------------- + +usbmouse.c -- USB mouse support + +Copyright (C) 2009 +Daryl Borth (Tantric) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + +#if defined(HW_RVL) + +#include +#include +#include + +#include +#include +#include +#include +#include + +#define MOUSE_THREAD_STACKSIZE (1024 * 4) +#define MOUSE_THREAD_PRIO 65 + +#define MOUSE_MAX_DATA 32 + +#define HEAP_SIZE 4096 +#define DEVLIST_MAXSIZE 8 + +typedef struct { + lwp_node node; + mouse_event event; +} _node; + +struct umouse { + bool connected; + bool has_wheel; + + s32 fd; + + u8 configuration; + u32 interface; + u32 altInterface; + + u8 ep; + u32 ep_size; +}; + +static lwp_queue _queue; + +static s32 hId = -1; +static bool _mouse_is_inited = false; +static lwp_t _mouse_thread = LWP_THREAD_NULL; +static bool _mouse_thread_running = false; +static bool _mouse_thread_quit = false; +static struct umouse *_mouse = NULL; +static s8 *_mousedata = NULL; +static sem_t _mousesema = LWP_SEM_NULL; + +static u8 _mouse_stack[MOUSE_THREAD_STACKSIZE] ATTRIBUTE_ALIGN(8); + +//Add an event to the event queue +static s32 _mouse_addEvent(const mouse_event *event) { + _node *n = malloc(sizeof(_node)); + n->event = *event; + + __lwp_queue_append(&_queue, (lwp_node*) n); + + return 1; +} + +// Event callback +static s32 _mouse_event_cb(s32 result, mouse_event *event) +{ + if (result>=3) + { + event->button = _mousedata[0]; + event->rx = _mousedata[1]; + event->ry = _mousedata[2]; + // this isn't defined in the HID mouse boot protocol, but it's a fairly safe bet + if (_mouse->has_wheel) { + // if more than 3 bytes were returned and the fourth byte is 1 or -1, assume it's wheel motion + // if it's outside this range, probably not a wheel + if (result < 4 || _mousedata[3] < -1 || _mousedata[3] > 1) { + _mouse->has_wheel = false; + event->rz = 0; + } + else + event->rz = _mousedata[3]; + } else + event->rz = 0; + } + else + _mouse->connected = false; + + if (_mousesema != LWP_SEM_NULL) + LWP_SemPost(_mousesema); + + return 0; +} + +//Callback when the mouse is disconnected +static s32 _disconnect(s32 retval, void *data) +{ + _mouse->connected = false; + if (_mousesema != LWP_SEM_NULL) + LWP_SemPost(_mousesema); + return 1; +} + +//Callback when a device is connected/disconnected (for notification when we're looking for a mouse) +static s32 _device_change(s32 retval, void *data) +{ + if (_mousesema != LWP_SEM_NULL) + LWP_SemPost(_mousesema); + return 1; +} + +//init the ioheap +static s32 USBMouse_Initialize(void) +{ + if (hId > 0) + return 0; + + hId = iosCreateHeap(HEAP_SIZE); + + if (hId < 0) + return IPC_ENOHEAP; + + return IPC_OK; +} + +//Close the device +static void USBMouse_Close(void) +{ + if (_mouse && _mouse->fd != -1) { + USB_CloseDevice(&_mouse->fd); + _mouse->fd = -1; + } +} + +//Search for a mouse connected to the wii usb port +//Thanks to Sven Peter usbstorage support +static s32 USBMouse_Open() +{ + usb_device_entry *buffer; + u8 device_count, i; + u16 vid, pid; + bool found = false; + u32 iConf, iInterface, iEp; + usb_devdesc udd; + usb_configurationdesc *ucd; + usb_interfacedesc *uid; + usb_endpointdesc *ued; + + buffer = iosAlloc(hId, DEVLIST_MAXSIZE * sizeof(usb_device_entry)); + if(buffer == NULL) + return -1; + + memset(buffer, 0, DEVLIST_MAXSIZE * sizeof(usb_device_entry)); + + if (USB_GetDeviceList(buffer, DEVLIST_MAXSIZE, USB_CLASS_HID, &device_count) < 0) + { + iosFree(hId,buffer); + return -2; + } + + for (i = 0; i < device_count; i++) + { + vid = buffer[i].vid; + pid = buffer[i].pid; + + if ((vid == 0) || (pid == 0)) + continue; + + s32 fd = 0; + if (USB_OpenDevice(buffer[i].device_id, vid, pid, &fd) < 0) + continue; + + if (USB_GetDescriptors(fd, &udd) < 0) { + USB_CloseDevice(&fd); + continue; + } + + for(iConf = 0; iConf < udd.bNumConfigurations; iConf++) + { + ucd = &udd.configurations[iConf]; + + for(iInterface = 0; iInterface < ucd->bNumInterfaces; iInterface++) + { + uid = &ucd->interfaces[iInterface]; + + if ((uid->bInterfaceClass == USB_CLASS_HID) && + (uid->bInterfaceSubClass == USB_SUBCLASS_BOOT) && + (uid->bInterfaceProtocol== USB_PROTOCOL_MOUSE)) + { + for(iEp = 0; iEp < uid->bNumEndpoints; iEp++) + { + ued = &uid->endpoints[iEp]; + + if (ued->bmAttributes != USB_ENDPOINT_INTERRUPT) + continue; + + if (!(ued->bEndpointAddress & USB_ENDPOINT_IN)) + continue; + + if (ued->wMaxPacketSize > MOUSE_MAX_DATA) + continue; + + _mouse->fd = fd; + + _mouse->configuration = ucd->bConfigurationValue; + _mouse->interface = uid->bInterfaceNumber; + _mouse->altInterface = uid->bAlternateSetting; + + _mouse->ep = ued->bEndpointAddress; + _mouse->ep_size = ued->wMaxPacketSize; + + found = true; + + break; + } + } + + if (found) + break; + } + + if (found) + break; + } + + USB_FreeDescriptors(&udd); + + if (found) + break; + else + USB_CloseDevice(&fd); + } + + iosFree(hId,buffer); + + if (!found) + return -3; + + if (USB_DeviceRemovalNotifyAsync(_mouse->fd, &_disconnect, NULL) < 0) + { + USBMouse_Close(); + return -8; + } + + // set boot protocol + USB_WriteCtrlMsg(_mouse->fd, USB_REQTYPE_INTERFACE_SET, USB_REQ_SETPROTOCOL, 0, _mouse->interface, 0, NULL); + // assume there's a wheel until we know otherwise + _mouse->has_wheel = true; + _mouse->connected = true; + return 1; +} + +bool MOUSE_IsConnected(void) +{ + if (!_mouse) return false; + return _mouse->connected; +} + +static void * _mouse_thread_func(void *arg) +{ + mouse_event event; + memset(&event, 0, sizeof(event)); + + while (!_mouse_thread_quit) + { + // scan for new attached mice + if (!MOUSE_IsConnected()) + { + USBMouse_Close(); + if (USBMouse_Open() < 0) { + // wait for something to be inserted + USB_DeviceChangeNotifyAsync(USB_CLASS_HID, _device_change, NULL); + LWP_SemWait(_mousesema); + continue; + } + } + + if (USB_ReadIntrMsgAsync(_mouse->fd, _mouse->ep, _mouse->ep_size, _mousedata, (usbcallback)_mouse_event_cb, &event) < 0) + break; + LWP_SemWait(_mousesema); + _mouse_addEvent(&event); + memset(&event, 0, sizeof(event)); + } + return NULL; +} + +//Initialize USB and USB_MOUSE and the event queue +s32 MOUSE_Init(void) +{ + if(_mouse_is_inited) return 0; + + if (USB_Initialize() != IPC_OK) + return -1; + + if (USBMouse_Initialize() != IPC_OK) { + return -2; + } + + _mousedata = (s8*)iosAlloc(hId,MOUSE_MAX_DATA); + _mouse = (struct umouse *) malloc(sizeof(struct umouse)); + memset(_mouse, 0, sizeof(struct umouse)); + _mouse->fd = -1; + LWP_SemInit(&_mousesema, 0, 1); + + if (!_mouse_thread_running) + { + // start the mouse thread + _mouse_thread_quit = false; + memset(_mouse_stack, 0, MOUSE_THREAD_STACKSIZE); + + s32 res = LWP_CreateThread(&_mouse_thread, _mouse_thread_func, NULL, + _mouse_stack, MOUSE_THREAD_STACKSIZE, + MOUSE_THREAD_PRIO); + + if (res) + { + USBMouse_Close(); + MOUSE_FlushEvents(); + _mouse_thread_running = false; + return -6; + } + _mouse_thread_running = true; + } + + __lwp_queue_init_empty(&_queue); + _mouse_is_inited = true; + return 0; +} + +// Deinitialize USB_MOUSE and the event queue +s32 MOUSE_Deinit(void) +{ + if(!_mouse_is_inited) return 1; + + if (_mouse_thread_running) { + _mouse_thread_quit = true; + LWP_SemPost(_mousesema); + LWP_JoinThread(_mouse_thread, NULL); + _mouse_thread_running = false; + } + + USBMouse_Close(); + MOUSE_FlushEvents(); + if(_mousedata!=NULL) iosFree(hId,_mousedata); + free(_mouse); + if (_mousesema != LWP_SEM_NULL) { + LWP_SemDestroy(_mousesema); + _mousesema = LWP_SEM_NULL; + } + _mouse_is_inited = false; + return 1; +} + +//Get the first event of the event queue +s32 MOUSE_GetEvent(mouse_event *event) +{ + _node *n = (_node *) __lwp_queue_get(&_queue); + + if (!n) + return 0; + + if (event) + *event = n->event; + + free(n); + + return 1; +} + +//Flush all pending events +s32 MOUSE_FlushEvents(void) +{ + s32 res=0; + + while (MOUSE_GetEvent(NULL)) + res++; + + return res; +} + +#endif diff --git a/wii/libogc/libogc/usbstorage.c b/wii/libogc/libogc/usbstorage.c new file mode 100644 index 0000000000..d53effbcf6 --- /dev/null +++ b/wii/libogc/libogc/usbstorage.c @@ -0,0 +1,1008 @@ +/*------------------------------------------------------------- + +usbstorage.c -- Bulk-only USB mass storage support + +Copyright (C) 2008 +Sven Peter (svpe) +Copyright (C) 2009-2010 +tueidj, rodries, Tantric + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ +#if defined(HW_RVL) + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "asm.h" +#include "processor.h" +#include "disc_io.h" +#include "lwp_watchdog.h" + +#define ROUNDDOWN32(v) (((u32)(v)-0x1f)&~0x1f) + +#define HEAP_SIZE (18*1024) +#define TAG_START 0x0BADC0DE + +#define CBW_SIZE 31 +#define CBW_SIGNATURE 0x43425355 +#define CBW_IN (1 << 7) +#define CBW_OUT 0 + +#define CSW_SIZE 13 +#define CSW_SIGNATURE 0x53425355 + +#define SCSI_TEST_UNIT_READY 0x00 +#define SCSI_REQUEST_SENSE 0x03 +#define SCSI_INQUIRY 0x12 +#define SCSI_START_STOP 0x1B +#define SCSI_READ_CAPACITY 0x25 +#define SCSI_READ_10 0x28 +#define SCSI_WRITE_10 0x2A + +#define SCSI_SENSE_REPLY_SIZE 18 +#define SCSI_SENSE_NOT_READY 0x02 +#define SCSI_SENSE_MEDIUM_ERROR 0x03 +#define SCSI_SENSE_HARDWARE_ERROR 0x04 + +#define USB_CLASS_MASS_STORAGE 0x08 +#define MASS_STORAGE_RBC_COMMANDS 0x01 +#define MASS_STORAGE_ATA_COMMANDS 0x02 +#define MASS_STORAGE_QIC_COMMANDS 0x03 +#define MASS_STORAGE_UFI_COMMANDS 0x04 +#define MASS_STORAGE_SFF8070_COMMANDS 0x05 +#define MASS_STORAGE_SCSI_COMMANDS 0x06 +#define MASS_STORAGE_BULK_ONLY 0x50 + +#define USBSTORAGE_GET_MAX_LUN 0xFE +#define USBSTORAGE_RESET 0xFF + +#define USB_ENDPOINT_BULK 0x02 + +#define USBSTORAGE_CYCLE_RETRIES 3 +#define USBSTORAGE_TIMEOUT 2 + +#define INVALID_LUN -2 + +#define MAX_TRANSFER_SIZE_V0 4096 +#define MAX_TRANSFER_SIZE_V5 (16*1024) + +#define DEVLIST_MAXSIZE 8 + +static heap_cntrl __heap; +static bool __inited = false; +static u64 usb_last_used = 0; +static lwpq_t __usbstorage_waitq = 0; +static u32 usbtimeout = USBSTORAGE_TIMEOUT; + +/* +The following is for implementing a DISC_INTERFACE +as used by libfat +*/ + +static usbstorage_handle __usbfd; +static u8 __lun = 0; +static bool __mounted = false; +static u16 __vid = 0; +static u16 __pid = 0; +static bool usb2_mode=true; + +static s32 __usbstorage_reset(usbstorage_handle *dev); +static s32 __usbstorage_clearerrors(usbstorage_handle *dev, u8 lun); +s32 USBStorage_Inquiry(usbstorage_handle *dev, u8 lun); + +/* XXX: this is a *really* dirty and ugly way to send a bulkmessage with a timeout + * but there's currently no other known way of doing this and it's in my humble + * opinion still better than having a function blocking forever while waiting + * for the USB data/IOS reply.. + */ + +static s32 __usb_blkmsg_cb(s32 retval, void *dummy) +{ + usbstorage_handle *dev = (usbstorage_handle *)dummy; + dev->retval = retval; + SYS_CancelAlarm(dev->alarm); + LWP_ThreadBroadcast(__usbstorage_waitq); + return 0; +} + +static s32 __usb_deviceremoved_cb(s32 retval,void *arg) +{ + __mounted = false; + return 0; +} + +static void __usb_timeouthandler(syswd_t alarm,void *cbarg) +{ + usbstorage_handle *dev = (usbstorage_handle*)cbarg; + dev->retval = USBSTORAGE_ETIMEDOUT; + LWP_ThreadBroadcast(__usbstorage_waitq); +} + +static void __usb_settimeout(usbstorage_handle *dev, u32 secs) +{ + struct timespec ts; + + ts.tv_sec = secs; + ts.tv_nsec = 0; + SYS_SetAlarm(dev->alarm,&ts,__usb_timeouthandler,dev); +} + +static s32 __USB_BlkMsgTimeout(usbstorage_handle *dev, u8 bEndpoint, u16 wLength, void *rpData, u32 timeout) +{ + s32 retval; + + dev->retval = USBSTORAGE_PROCESSING; + retval = USB_WriteBlkMsgAsync(dev->usb_fd, bEndpoint, wLength, rpData, __usb_blkmsg_cb, (void *)dev); + if(retval < 0) return retval; + + __usb_settimeout(dev, timeout); + + do { + retval = dev->retval; + if(retval!=USBSTORAGE_PROCESSING) break; + else LWP_ThreadSleep(__usbstorage_waitq); + } while(retval==USBSTORAGE_PROCESSING); + + if (retval<0) + USB_ClearHalt(dev->usb_fd, bEndpoint); + + return retval; +} + +static s32 __USB_CtrlMsgTimeout(usbstorage_handle *dev, u8 bmRequestType, u8 bmRequest, u16 wValue, u16 wIndex, u16 wLength, void *rpData) +{ + s32 retval; + + dev->retval = USBSTORAGE_PROCESSING; + retval = USB_WriteCtrlMsgAsync(dev->usb_fd, bmRequestType, bmRequest, wValue, wIndex, wLength, rpData, __usb_blkmsg_cb, (void *)dev); + if(retval < 0) return retval; + + __usb_settimeout(dev, usbtimeout); + + do { + retval = dev->retval; + if(retval!=USBSTORAGE_PROCESSING) break; + else LWP_ThreadSleep(__usbstorage_waitq); + } while(retval==USBSTORAGE_PROCESSING); + + return retval; +} + +static u8 *arena_ptr=NULL; +static u8 *cbw_buffer=NULL; + +s32 USBStorage_Initialize() +{ + u32 level; + + if(__inited) + return IPC_OK; + + _CPU_ISR_Disable(level); + LWP_InitQueue(&__usbstorage_waitq); + if(!arena_ptr) { + arena_ptr = (u8*)ROUNDDOWN32(((u32)SYS_GetArena2Hi() - HEAP_SIZE)); + if((u32)arena_ptr < (u32)SYS_GetArena2Lo()) { + _CPU_ISR_Restore(level); + return IPC_ENOMEM; + } + SYS_SetArena2Hi(arena_ptr); + } + __lwp_heap_init(&__heap, arena_ptr, HEAP_SIZE, 32); + cbw_buffer=(u8*)__lwp_heap_allocate(&__heap, 32); + __inited = true; + _CPU_ISR_Restore(level); + return IPC_OK; +} + +static s32 __send_cbw(usbstorage_handle *dev, u8 lun, u32 len, u8 flags, const u8 *cb, u8 cbLen) +{ + s32 retval = USBSTORAGE_OK; + + if(cbLen == 0 || cbLen > 16) + return IPC_EINVAL; + + memset(cbw_buffer, 0, CBW_SIZE); + + __stwbrx(cbw_buffer, 0, CBW_SIGNATURE); + __stwbrx(cbw_buffer, 4, ++dev->tag); + __stwbrx(cbw_buffer, 8, len); + cbw_buffer[12] = flags; + cbw_buffer[13] = lun; + cbw_buffer[14] = (cbLen > 6 ? 10 : 6); + + memcpy(cbw_buffer + 15, cb, cbLen); + + if(dev->suspended == 1) + { + USB_ResumeDevice(dev->usb_fd); + dev->suspended = 0; + } + + retval = __USB_BlkMsgTimeout(dev, dev->ep_out, CBW_SIZE, (void *)cbw_buffer, usbtimeout); + + if(retval == CBW_SIZE) return USBSTORAGE_OK; + else if(retval > 0) return USBSTORAGE_ESHORTWRITE; + + return retval; +} + +static s32 __read_csw(usbstorage_handle *dev, u8 *status, u32 *dataResidue, u32 timeout) +{ + s32 retval = USBSTORAGE_OK; + u32 signature, tag, _dataResidue, _status; + + memset(cbw_buffer, 0, CSW_SIZE); + + retval = __USB_BlkMsgTimeout(dev, dev->ep_in, CSW_SIZE, cbw_buffer, timeout); + if(retval > 0 && retval != CSW_SIZE) return USBSTORAGE_ESHORTREAD; + else if(retval < 0) return retval; + + signature = __lwbrx(cbw_buffer, 0); + tag = __lwbrx(cbw_buffer, 4); + _dataResidue = __lwbrx(cbw_buffer, 8); + _status = cbw_buffer[12]; + + if(signature != CSW_SIGNATURE) return USBSTORAGE_ESIGNATURE; + + if(dataResidue != NULL) + *dataResidue = _dataResidue; + if(status != NULL) + *status = _status; + + if(tag != dev->tag) return USBSTORAGE_ETAG; + + return USBSTORAGE_OK; +} + +static s32 __cycle(usbstorage_handle *dev, u8 lun, u8 *buffer, u32 len, u8 *cb, u8 cbLen, u8 write, u8 *_status, u32 *_dataResidue) +{ + s32 retval = USBSTORAGE_OK; + + u8 status=0; + u32 dataResidue = 0; + u16 max_size; + u8 ep = write ? dev->ep_out : dev->ep_in; + s8 retries = USBSTORAGE_CYCLE_RETRIES + 1; + + if(usb2_mode) + max_size=MAX_TRANSFER_SIZE_V5; + else + max_size=MAX_TRANSFER_SIZE_V0; + + LWP_MutexLock(dev->lock); + do + { + u8 *_buffer = buffer; + u32 _len = len; + retries--; + + if(retval == USBSTORAGE_ETIMEDOUT) + break; + + retval = __send_cbw(dev, lun, len, (write ? CBW_OUT:CBW_IN), cb, cbLen); + + while(_len > 0 && retval >= 0) + { + u32 thisLen = _len > max_size ? max_size : _len; + + if ((u32)_buffer&0x1F || !((u32)_buffer&0x10000000)) { + if (write) memcpy(dev->buffer, _buffer, thisLen); + retval = __USB_BlkMsgTimeout(dev, ep, thisLen, dev->buffer, usbtimeout); + if (!write && retval > 0) + memcpy(_buffer, dev->buffer, retval); + } else + retval = __USB_BlkMsgTimeout(dev, ep, thisLen, _buffer, usbtimeout); + + if (retval == thisLen) { + _len -= retval; + _buffer += retval; + } + else if (retval != USBSTORAGE_ETIMEDOUT) + retval = USBSTORAGE_EDATARESIDUE; + } + + if (retval >= 0) + retval = __read_csw(dev, &status, &dataResidue, usbtimeout); + + if (retval < 0) { + if (__usbstorage_reset(dev) == USBSTORAGE_ETIMEDOUT) + retval = USBSTORAGE_ETIMEDOUT; + } + } while (retval < 0 && retries > 0); + + LWP_MutexUnlock(dev->lock); + + if(_status != NULL) + *_status = status; + if(_dataResidue != NULL) + *_dataResidue = dataResidue; + + return retval; +} + +static s32 __usbstorage_clearerrors(usbstorage_handle *dev, u8 lun) +{ + s32 retval; + u8 cmd[6]; + u8 sense[SCSI_SENSE_REPLY_SIZE]; + u8 status = 0; + + memset(cmd, 0, sizeof(cmd)); + cmd[0] = SCSI_TEST_UNIT_READY; + + retval = __cycle(dev, lun, NULL, 0, cmd, 1, 0, &status, NULL); + if (retval < 0) return retval; + + if (status) + { + cmd[0] = SCSI_REQUEST_SENSE; + cmd[1] = lun << 5; + cmd[4] = SCSI_SENSE_REPLY_SIZE; + memset(sense, 0, SCSI_SENSE_REPLY_SIZE); + retval = __cycle(dev, lun, sense, SCSI_SENSE_REPLY_SIZE, cmd, 6, 0, NULL, NULL); + if (retval>=0) { + switch (sense[2]&0xF) { + case SCSI_SENSE_NOT_READY: + return USBSTORAGE_EINIT; + case SCSI_SENSE_MEDIUM_ERROR: + case SCSI_SENSE_HARDWARE_ERROR: + return USBSTORAGE_ESENSE; + } + } + } + + return retval; +} + +static s32 __usbstorage_reset(usbstorage_handle *dev) +{ + u32 t = usbtimeout; + usbtimeout = 1; + s32 retval = __USB_CtrlMsgTimeout(dev, (USB_CTRLTYPE_DIR_HOST2DEVICE | USB_CTRLTYPE_TYPE_CLASS | USB_CTRLTYPE_REC_INTERFACE), USBSTORAGE_RESET, 0, dev->interface, 0, NULL); + usbtimeout = t; + usleep(60*1000); + USB_ClearHalt(dev->usb_fd, dev->ep_in);usleep(10000); //from http://www.usb.org/developers/devclass_docs/usbmassbulk_10.pdf + USB_ClearHalt(dev->usb_fd, dev->ep_out);usleep(10000); + return retval; +} + +s32 USBStorage_Open(usbstorage_handle *dev, s32 device_id, u16 vid, u16 pid) +{ + s32 retval = -1; + u8 conf = -1; + u8 *max_lun; + u32 iConf, iInterface, iEp; + usb_devdesc udd; + usb_configurationdesc *ucd; + usb_interfacedesc *uid; + usb_endpointdesc *ued; + + max_lun = __lwp_heap_allocate(&__heap, 1); + if (!max_lun) + return IPC_ENOMEM; + + memset(dev, 0, sizeof(*dev)); + dev->usb_fd = -1; + + dev->tag = TAG_START; + + if (LWP_MutexInit(&dev->lock, false) < 0) + goto free_and_return; + + if (SYS_CreateAlarm(&dev->alarm) < 0) + goto free_and_return; + + retval = USB_OpenDevice(device_id, vid, pid, &dev->usb_fd); + if (retval < 0) + goto free_and_return; + + retval = USB_GetDescriptors(dev->usb_fd, &udd); + if (retval < 0) + goto free_and_return; + + for (iConf = 0; iConf < udd.bNumConfigurations; iConf++) { + ucd = &udd.configurations[iConf]; + for (iInterface = 0; iInterface < ucd->bNumInterfaces; iInterface++) { + uid = &ucd->interfaces[iInterface]; + if(uid->bInterfaceClass == USB_CLASS_MASS_STORAGE && /* + (uid->bInterfaceSubClass == MASS_STORAGE_SCSI_COMMANDS + || uid->bInterfaceSubClass == MASS_STORAGE_RBC_COMMANDS + || uid->bInterfaceSubClass == MASS_STORAGE_ATA_COMMANDS + || uid->bInterfaceSubClass == MASS_STORAGE_QIC_COMMANDS + || uid->bInterfaceSubClass == MASS_STORAGE_UFI_COMMANDS + || uid->bInterfaceSubClass == MASS_STORAGE_SFF8070_COMMANDS) &&*/ + uid->bInterfaceProtocol == MASS_STORAGE_BULK_ONLY) + { + + if (uid->bNumEndpoints < 2) + continue; + + dev->ep_in = dev->ep_out = 0; + for (iEp = 0; iEp < uid->bNumEndpoints; iEp++) { + ued = &uid->endpoints[iEp]; + if (ued->bmAttributes != USB_ENDPOINT_BULK) + continue; + + if (ued->bEndpointAddress & USB_ENDPOINT_IN) { + dev->ep_in = ued->bEndpointAddress; + } + else { + dev->ep_out = ued->bEndpointAddress; + if(ued->wMaxPacketSize > 64 && (dev->usb_fd>=0x20 || dev->usb_fd<-1)) + usb2_mode=true; + else + usb2_mode=false; + } + } + + if (dev->ep_in != 0 && dev->ep_out != 0) { + dev->configuration = ucd->bConfigurationValue; + dev->interface = uid->bInterfaceNumber; + dev->altInterface = uid->bAlternateSetting; + goto found; + } + } + } + } + + USB_FreeDescriptors(&udd); + retval = USBSTORAGE_ENOINTERFACE; + goto free_and_return; + +found: + dev->bInterfaceSubClass = uid->bInterfaceSubClass; + + USB_FreeDescriptors(&udd); + + retval = USBSTORAGE_EINIT; + // some devices return an error, ignore it + USB_GetConfiguration(dev->usb_fd, &conf); + + if (conf != dev->configuration) USB_SetConfiguration(dev->usb_fd, dev->configuration); + if (dev->altInterface !=0) USB_SetAlternativeInterface(dev->usb_fd, dev->interface, dev->altInterface); + + if(!usb2_mode) + retval = USBStorage_Reset(dev); + + dev->suspended = 0; + + LWP_MutexLock(dev->lock); + retval = __USB_CtrlMsgTimeout(dev, (USB_CTRLTYPE_DIR_DEVICE2HOST | USB_CTRLTYPE_TYPE_CLASS | USB_CTRLTYPE_REC_INTERFACE), USBSTORAGE_GET_MAX_LUN, 0, dev->interface, 1, max_lun); + LWP_MutexUnlock(dev->lock); + + if (retval < 0) + dev->max_lun = 1; + else + dev->max_lun = *max_lun + 1; + + if (retval == USBSTORAGE_ETIMEDOUT) + goto free_and_return; + + retval = USBSTORAGE_OK; + dev->sector_size = (u32 *) calloc(dev->max_lun, sizeof(u32)); + if(!dev->sector_size) { + retval = IPC_ENOMEM; + goto free_and_return; + } + + /* taken from linux usbstorage module (drivers/usb/storage/transport.c) + * + * Some devices (i.e. Iomega Zip100) need this -- apparently + * the bulk pipes get STALLed when the GetMaxLUN request is + * processed. This is, in theory, harmless to all other devices + * (regardless of if they stall or not). + * + * 8/9/10: If anyone wants to actually use a Zip100, they can add this back. + * But for now, it seems to be breaking things more than it is helping. + */ + //USB_ClearHalt(dev->usb_fd, dev->ep_in); + //USB_ClearHalt(dev->usb_fd, dev->ep_out); + + if(!dev->buffer) + dev->buffer = __lwp_heap_allocate(&__heap, MAX_TRANSFER_SIZE_V5); + + if(!dev->buffer) { + retval = IPC_ENOMEM; + } else { + USB_DeviceRemovalNotifyAsync(dev->usb_fd,__usb_deviceremoved_cb,dev); + retval = USBSTORAGE_OK; + } + +free_and_return: + if (max_lun) + __lwp_heap_free(&__heap, max_lun); + + if (retval < 0) { + USBStorage_Close(dev); + return retval; + } + + return 0; +} + +s32 USBStorage_Close(usbstorage_handle *dev) +{ + __mounted = false; + __lun = 0; + __vid = 0; + __pid = 0; + + if (dev->usb_fd != -1) + USB_CloseDevice(&dev->usb_fd); + + LWP_MutexDestroy(dev->lock); + SYS_RemoveAlarm(dev->alarm); + + if(dev->sector_size) + free(dev->sector_size); + + if (dev->buffer) + __lwp_heap_free(&__heap, dev->buffer); + + memset(dev, 0, sizeof(*dev)); + dev->usb_fd = -1; + return 0; +} + +s32 USBStorage_Reset(usbstorage_handle *dev) +{ + s32 retval; + + LWP_MutexLock(dev->lock); + retval = __usbstorage_reset(dev); + LWP_MutexUnlock(dev->lock); + + return retval; +} + +s32 USBStorage_GetMaxLUN(usbstorage_handle *dev) +{ + return dev->max_lun; +} + +s32 USBStorage_MountLUN(usbstorage_handle *dev, u8 lun) +{ + s32 retval; + u32 n_sectors; + + if(lun >= dev->max_lun) + return IPC_EINVAL; + + usleep(50); + retval = __usbstorage_clearerrors(dev, lun); + if (retval<0) + { + USBStorage_Reset(dev); + retval = __usbstorage_clearerrors(dev, lun); + } + + retval = USBStorage_Inquiry(dev, lun); + + retval = USBStorage_ReadCapacity(dev, lun, &dev->sector_size[lun], &n_sectors); + if(retval >= 0 && (dev->sector_size[lun]<512 || n_sectors==0)) + return INVALID_LUN; + + return retval; +} + +s32 USBStorage_Inquiry(usbstorage_handle *dev, u8 lun) +{ + int n; + s32 retval; + u8 cmd[] = {SCSI_INQUIRY, lun << 5,0,0,36,0}; + u8 response[36]; + + for(n=0;n<2;n++) + { + memset(response,0,36); + + retval = __cycle(dev, lun, response, 36, cmd, 6, 0, NULL, NULL); + if(retval>=0) break; + } + + if(retval>=0) retval=*response & 31; + /* + if(retval>=0) + { + switch(retval) + { + // info from http://en.wikipedia.org/wiki/SCSI_Peripheral_Device_Type + case 5: // CDROM + case 7: // optical memory device (e.g., some optical disks) + __dvd_mounted = 1; + break; + default: + __dvd_mounted = 0; + break; + } + } + */ + return retval; +} + +s32 USBStorage_ReadCapacity(usbstorage_handle *dev, u8 lun, u32 *sector_size, u32 *n_sectors) +{ + s32 retval; + u8 cmd[10] = {SCSI_READ_CAPACITY, lun<<5}; + u8 response[8]; + + retval = __cycle(dev, lun, response, sizeof(response), cmd, sizeof(cmd), 0, NULL, NULL); + if(retval >= 0) + { + if(n_sectors != NULL) + memcpy(n_sectors, response, 4); + if(sector_size != NULL) + memcpy(sector_size, response + 4, 4); + retval = USBSTORAGE_OK; + } + + return retval; +} + +s32 USBStorage_IsDVD() +{ + u32 sectorsize, numSectors; + + if(!__mounted || __usbfd.sector_size[__lun] != 2048) + return 0; + + if(USBStorage_ReadCapacity(&__usbfd, __lun, §orsize, &numSectors) < 0) + return 0; + + if(sectorsize == 2048) + return 1; + return 0; +} + +/* lo_ej = load/eject, controls the tray +* start = start(1) or stop(0) the motor (or eject(0), load(1)) +* imm = return before the command has completed +* it might be a good idea to call this before STM_ShutdownToStandby() so the USB HDD doesn't stay on +*/ +s32 USBStorage_StartStop(usbstorage_handle *dev, u8 lun, u8 lo_ej, u8 start, u8 imm) +{ + u8 status = 0; + s32 retval = USBSTORAGE_OK; + u8 cmd[] = { + SCSI_START_STOP, + (lun << 5) | (imm&1), + 0, + 0, + ((lo_ej&1)<<1) | (start&1), + 0 + }; + + if(lun >= dev->max_lun) + return IPC_EINVAL; + + LWP_MutexLock(dev->lock); + + retval = __send_cbw(dev, lun, 0, CBW_IN, cmd, sizeof(cmd)); + + // if imm==0, wait up to 10secs for spinup to finish + if (retval >= 0) + retval = __read_csw(dev, &status, NULL, (imm ? USBSTORAGE_TIMEOUT : 10)); + + LWP_MutexUnlock(dev->lock); + + if(retval >=0 && status != 0) + retval = USBSTORAGE_ESTATUS; + + return retval; +} + +s32 USBStorage_Read(usbstorage_handle *dev, u8 lun, u32 sector, u16 n_sectors, u8 *buffer) +{ + u8 status = 0; + s32 retval; + u8 cmd[] = { + SCSI_READ_10, + lun << 5, + sector >> 24, + sector >> 16, + sector >> 8, + sector, + 0, + n_sectors >> 8, + n_sectors, + 0 + }; + + if(lun >= dev->max_lun || dev->sector_size[lun] == 0) + return IPC_EINVAL; + + // more than 60s since last use - make sure drive is awake + if(ticks_to_secs(gettime() - usb_last_used) > 60) + { + usbtimeout = 10; + USBStorage_MountLUN(dev, lun); + } + + retval = __cycle(dev, lun, buffer, n_sectors * dev->sector_size[lun], cmd, sizeof(cmd), 0, &status, NULL); + if(retval > 0 && status != 0) + retval = USBSTORAGE_ESTATUS; + + usb_last_used = gettime(); + usbtimeout = USBSTORAGE_TIMEOUT; + + return retval; +} + +s32 USBStorage_Write(usbstorage_handle *dev, u8 lun, u32 sector, u16 n_sectors, const u8 *buffer) +{ + u8 status = 0; + s32 retval; + u8 cmd[] = { + SCSI_WRITE_10, + lun << 5, + sector >> 24, + sector >> 16, + sector >> 8, + sector, + 0, + n_sectors >> 8, + n_sectors, + 0 + }; + + if(lun >= dev->max_lun || dev->sector_size[lun] == 0) + return IPC_EINVAL; + + // more than 60s since last use - make sure drive is awake + if(ticks_to_secs(gettime() - usb_last_used) > 60) + { + usbtimeout = 10; + USBStorage_MountLUN(dev, lun); + } + + retval = __cycle(dev, lun, (u8 *)buffer, n_sectors * dev->sector_size[lun], cmd, sizeof(cmd), 1, &status, NULL); + if(retval > 0 && status != 0) + retval = USBSTORAGE_ESTATUS; + + usb_last_used = gettime(); + usbtimeout = USBSTORAGE_TIMEOUT; + + return retval; +} + +s32 USBStorage_Suspend(usbstorage_handle *dev) +{ + if(dev->suspended == 1) + return USBSTORAGE_OK; + + USB_SuspendDevice(dev->usb_fd); + dev->suspended = 1; + + return USBSTORAGE_OK; +} + +/* +The following is for implementing a DISC_INTERFACE +as used by libfat +*/ + +static bool __usbstorage_Startup(void) +{ + if(USB_Initialize() < 0 || USBStorage_Initialize() < 0) + return false; + + return true; +} + +static bool __usbstorage_IsInserted(void) +{ + usb_device_entry *buffer; + u8 device_count; + u8 i, j; + u16 vid, pid; + s32 maxLun; + s32 retval; + u32 sectorsize, numSectors; + + if(__mounted) + { + // device is not a USB DVD drive - always return true + if (__usbfd.sector_size[__lun] != 2048) + return true; + + // check if DVD is inserted + if (USBStorage_ReadCapacity(&__usbfd, __lun, §orsize, &numSectors) < 0) + return false; + else + return true; + } + + if(!__inited) + return false; + + buffer = (usb_device_entry*)__lwp_heap_allocate(&__heap, DEVLIST_MAXSIZE * sizeof(usb_device_entry)); + if (!buffer) + return false; + + memset(buffer, 0, DEVLIST_MAXSIZE * sizeof(usb_device_entry)); + + if (USB_GetDeviceList(buffer, DEVLIST_MAXSIZE, USB_CLASS_MASS_STORAGE, &device_count) < 0) + { + if (__vid != 0 || __pid != 0) + USBStorage_Close(&__usbfd); + + __lwp_heap_free(&__heap, buffer); + return false; + } + + usleep(100); + + if (__vid != 0 || __pid != 0) { + for(i = 0; i < device_count; i++) { + vid = buffer[i].vid; + pid = buffer[i].pid; + if(vid != 0 || pid != 0) { + if((vid == __vid) && (pid == __pid)) { + __mounted = true; + __lwp_heap_free(&__heap,buffer); + usleep(50); // I don't know why I have to wait but it's needed + return true; + } + } + } + USBStorage_Close(&__usbfd); // device changed or unplugged, return false the first time to notify to the client that he must unmount devices + __lwp_heap_free(&__heap,buffer); + return false; + } + for (i = 0; i < device_count; i++) { + vid = buffer[i].vid; + pid = buffer[i].pid; + if (vid == 0 || pid == 0) + continue; + + if (vid == 0x0b95 && pid == 0x7720) // USB LAN + continue; + + if (USBStorage_Open(&__usbfd, buffer[i].device_id, vid, pid) < 0) + continue; + + maxLun = USBStorage_GetMaxLUN(&__usbfd); + for (j = 0; j < maxLun; j++) { + retval = USBStorage_MountLUN(&__usbfd, j); + + if (retval == INVALID_LUN) + continue; + + if (retval < 0) + { + __usbstorage_reset(&__usbfd); + continue; + } + + __mounted = true; + __lun = j; + __vid = vid; + __pid = pid; + usb_last_used = gettime()-secs_to_ticks(100); + usleep(10000); + break; + } + + if (__mounted) + break; + + USBStorage_Close(&__usbfd); + } + __lwp_heap_free(&__heap, buffer); + + return __mounted; +} + +static bool __usbstorage_ReadSectors(u32 sector, u32 numSectors, void *buffer) +{ + s32 retval; + + if (!__mounted) + return false; + + retval = USBStorage_Read(&__usbfd, __lun, sector, numSectors, buffer); + + return retval >= 0; +} + +static bool __usbstorage_WriteSectors(u32 sector, u32 numSectors, const void *buffer) +{ + s32 retval; + + if (!__mounted) + return false; + + retval = USBStorage_Write(&__usbfd, __lun, sector, numSectors, buffer); + + return retval >= 0; +} + +static bool __usbstorage_ClearStatus(void) +{ + return true; +} + +static bool __usbstorage_Shutdown(void) +{ + if (__vid != 0 || __pid != 0) + USBStorage_Close(&__usbfd); + + return true; +} + +void USBStorage_Deinitialize() +{ + __usbstorage_Shutdown(); + LWP_CloseQueue(__usbstorage_waitq); + __inited = false; +} + +s32 USBStorage_ioctl(int request, ...) +{ + int retval = 0; + va_list ap; + + if(!__mounted) + return -1; + + va_start(ap, request); + + switch (request) + { + case B_RAW_DEVICE_COMMAND: + { + u8 write; + raw_device_command *rdc = va_arg(ap, raw_device_command *); + write = (rdc->flags == B_RAW_DEVICE_DATA_IN) ? 0 : 1; + retval = __cycle(&__usbfd, __lun, rdc->data, rdc->data_length, rdc->command, rdc->command_length, write, &rdc->scsi_status, NULL); + break; + } + + default: + retval = -1; + break; + } + + va_end(ap); + return retval; +} + +DISC_INTERFACE __io_usbstorage = { + DEVICE_TYPE_WII_USB, + FEATURE_MEDIUM_CANREAD | FEATURE_MEDIUM_CANWRITE | FEATURE_WII_USB, + (FN_MEDIUM_STARTUP)&__usbstorage_Startup, + (FN_MEDIUM_ISINSERTED)&__usbstorage_IsInserted, + (FN_MEDIUM_READSECTORS)&__usbstorage_ReadSectors, + (FN_MEDIUM_WRITESECTORS)&__usbstorage_WriteSectors, + (FN_MEDIUM_CLEARSTATUS)&__usbstorage_ClearStatus, + (FN_MEDIUM_SHUTDOWN)&__usbstorage_Shutdown +}; + +#endif /* HW_RVL */ diff --git a/wii/libogc/libogc/video.c b/wii/libogc/libogc/video.c new file mode 100644 index 0000000000..9012530ea2 --- /dev/null +++ b/wii/libogc/libogc/video.c @@ -0,0 +1,2594 @@ +/*------------------------------------------------------------- + +video.c -- VIDEO subsystem + + Copyright (C) 2004 - 2008 + Michael Wiedenbauer (shagkur) + Dave Murphy (WinterMute) + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-------------------------------------------------------------*/ + + +#include +#include +#include +#include +#include "asm.h" +#include "processor.h" +#include "ogcsys.h" +#include "irq.h" +#include "exi.h" +#include "gx.h" +#include "si.h" +#include "lwp.h" +#include "system.h" +#include "video.h" +#include "video_types.h" + +#define VIDEO_MQ 1 + +#define _SHIFTL(v, s, w) \ + ((u32) (((u32)(v) & ((0x01 << (w)) - 1)) << (s))) +#define _SHIFTR(v, s, w) \ + ((u32)(((u32)(v) >> (s)) & ((0x01 << (w)) - 1))) + +#define VI_REGCHANGE(_reg) \ + ((u64)0x01<<(63-_reg)) + +typedef struct _horVer { + u16 dispPosX; + u16 dispPosY; + u16 dispSizeX; + u16 dispSizeY; + u16 adjustedDispPosX; + u16 adjustedDispPosY; + u16 adjustedDispSizeY; + u16 adjustedPanPosY; + u16 adjustedPanSizeY; + u16 fbSizeX; + u16 fbSizeY; + u16 panPosX; + u16 panPosY; + u16 panSizeX; + u16 panSizeY; + u32 fbMode; + u32 nonInter; + u32 tv; + u8 wordPerLine; + u8 std; + u8 wpl; + void *bufAddr; + u32 tfbb; + u32 bfbb; + u8 xof; + s32 black; + s32 threeD; + void *rbufAddr; + u32 rtfbb; + u32 rbfbb; + const struct _timing *timing; +} horVer; + +GXRModeObj TVNtsc240Ds = +{ + VI_TVMODE_NTSC_DS, // viDisplayMode + 640, // fbWidth + 240, // efbHeight + 240, // xfbHeight + (VI_MAX_WIDTH_NTSC - 640)/2, // viXOrigin + (VI_MAX_HEIGHT_NTSC - 480)/2, // viYOrigin + 640, // viWidth + 480, // viHeight + VI_XFBMODE_SF, // xFBmode + GX_FALSE, // field_rendering + GX_FALSE, // aa + + // sample points arranged in increasing Y order + { + {6,6},{6,6},{6,6}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {6,6},{6,6},{6,6}, // pix 1 + {6,6},{6,6},{6,6}, // pix 2 + {6,6},{6,6},{6,6} // pix 3 + }, + + // vertical filter[7], 1/64 units, 6 bits each + { + 0, // line n-1 + 0, // line n-1 + 21, // line n + 22, // line n + 21, // line n + 0, // line n+1 + 0 // line n+1 + } +}; + +GXRModeObj TVNtsc240DsAa = +{ + VI_TVMODE_NTSC_DS, // viDisplayMode + 640, // fbWidth + 240, // efbHeight + 240, // xfbHeight + (VI_MAX_WIDTH_NTSC - 640)/2, // viXOrigin + (VI_MAX_HEIGHT_NTSC - 480)/2, // viYOrigin + 640, // viWidth + 480, // viHeight + VI_XFBMODE_SF, // xFBmode + GX_FALSE, // field_rendering + GX_TRUE, // aa + + // sample points arranged in increasing Y order + { + {3,2},{9,6},{3,10}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {3,2},{9,6},{3,10}, // pix 1 + {9,2},{3,6},{9,10}, // pix 2 + {9,2},{3,6},{9,10} // pix 3 + }, + + // vertical filter[7], 1/64 units, 6 bits each + { + 0, // line n-1 + 0, // line n-1 + 21, // line n + 22, // line n + 21, // line n + 0, // line n+1 + 0 // line n+1 + } +}; + +GXRModeObj TVNtsc240Int = +{ + VI_TVMODE_NTSC_INT, // viDisplayMode + 640, // fbWidth + 240, // efbHeight + 240, // xfbHeight + (VI_MAX_WIDTH_NTSC - 640)/2, // viXOrigin + (VI_MAX_HEIGHT_NTSC - 480)/2, // viYOrigin + 640, // viWidth + 480, // viHeight + VI_XFBMODE_SF, // xFBmode + GX_TRUE, // field_rendering + GX_FALSE, // aa + + // sample points arranged in increasing Y order + { + {6,6},{6,6},{6,6}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {6,6},{6,6},{6,6}, // pix 1 + {6,6},{6,6},{6,6}, // pix 2 + {6,6},{6,6},{6,6} // pix 3 + }, + + // vertical filter[7], 1/64 units, 6 bits each + { + 0, // line n-1 + 0, // line n-1 + 21, // line n + 22, // line n + 21, // line n + 0, // line n+1 + 0 // line n+1 + } +}; + +GXRModeObj TVNtsc240IntAa = +{ + VI_TVMODE_NTSC_INT, // viDisplayMode + 640, // fbWidth + 240, // efbHeight + 240, // xfbHeight + (VI_MAX_WIDTH_NTSC - 640)/2, // viXOrigin + (VI_MAX_HEIGHT_NTSC - 480)/2, // viYOrigin + 640, // viWidth + 480, // viHeight + VI_XFBMODE_SF, // xFBmode + GX_TRUE, // field_rendering + GX_TRUE, // aa + + // sample points arranged in increasing Y order + { + {3,2},{9,6},{3,10}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {3,2},{9,6},{3,10}, // pix 1 + {9,2},{3,6},{9,10}, // pix 2 + {9,2},{3,6},{9,10} // pix 3 + }, + + // vertical filter[7], 1/64 units, 6 bits each + { + 0, // line n-1 + 0, // line n-1 + 21, // line n + 22, // line n + 21, // line n + 0, // line n+1 + 0 // line n+1 + } +}; + +GXRModeObj TVNtsc480Int = +{ + VI_TVMODE_NTSC_INT, // viDisplayMode + 640, // fbWidth + 480, // efbHeight + 480, // xfbHeight + (VI_MAX_WIDTH_NTSC - 640)/2, // viXOrigin + (VI_MAX_HEIGHT_NTSC - 480)/2, // viYOrigin + 640, // viWidth + 480, // viHeight + VI_XFBMODE_DF, // xFBmode + GX_FALSE, // field_rendering + GX_FALSE, // aa + + // sample points arranged in increasing Y order + { + {6,6},{6,6},{6,6}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {6,6},{6,6},{6,6}, // pix 1 + {6,6},{6,6},{6,6}, // pix 2 + {6,6},{6,6},{6,6} // pix 3 + }, + + // vertical filter[7], 1/64 units, 6 bits each + { + 0, // line n-1 + 0, // line n-1 + 21, // line n + 22, // line n + 21, // line n + 0, // line n+1 + 0 // line n+1 + } +}; + +GXRModeObj TVNtsc480IntDf = +{ + VI_TVMODE_NTSC_INT, // viDisplayMode + 640, // fbWidth + 480, // efbHeight + 480, // xfbHeight + (VI_MAX_WIDTH_NTSC - 640)/2, // viXOrigin + (VI_MAX_HEIGHT_NTSC - 480)/2, // viYOrigin + 640, // viWidth + 480, // viHeight + VI_XFBMODE_DF, // xFBmode + GX_FALSE, // field_rendering + GX_FALSE, // aa + + // sample points arranged in increasing Y order + { + {6,6},{6,6},{6,6}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {6,6},{6,6},{6,6}, // pix 1 + {6,6},{6,6},{6,6}, // pix 2 + {6,6},{6,6},{6,6} // pix 3 + }, + + // vertical filter[7], 1/64 units, 6 bits each + { + 8, // line n-1 + 8, // line n-1 + 10, // line n + 12, // line n + 10, // line n + 8, // line n+1 + 8 // line n+1 + } +}; + +GXRModeObj TVNtsc480IntAa = +{ + VI_TVMODE_NTSC_INT, // viDisplayMode + 640, // fbWidth + 242, // efbHeight + 480, // xfbHeight + (VI_MAX_WIDTH_NTSC - 640)/2, // viXOrigin + (VI_MAX_HEIGHT_NTSC - 480)/2, // viYOrigin + 640, // viWidth + 480, // viHeight + VI_XFBMODE_DF, // xFBmode + GX_FALSE, // field_rendering + GX_TRUE, // aa + + // sample points arranged in increasing Y order + { + {3,2},{9,6},{3,10}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {3,2},{9,6},{3,10}, // pix 1 + {9,2},{3,6},{9,10}, // pix 2 + {9,2},{3,6},{9,10} // pix 3 + }, + + // vertical filter[7], 1/64 units, 6 bits each + { + 4, // line n-1 + 8, // line n-1 + 12, // line n + 16, // line n + 12, // line n + 8, // line n+1 + 4 // line n+1 + } +}; + + +GXRModeObj TVNtsc480Prog = +{ + VI_TVMODE_NTSC_PROG, // viDisplayMode + 640, // fbWidth + 480, // efbHeight + 480, // xfbHeight + (VI_MAX_WIDTH_NTSC - 640)/2, // viXOrigin + (VI_MAX_HEIGHT_NTSC - 480)/2, // viYOrigin + 640, // viWidth + 480, // viHeight + VI_XFBMODE_SF, // xFBmode + GX_FALSE, // field_rendering + GX_FALSE, // aa + + // sample points arranged in increasing Y order + { + {6,6},{6,6},{6,6}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {6,6},{6,6},{6,6}, // pix 1 + {6,6},{6,6},{6,6}, // pix 2 + {6,6},{6,6},{6,6} // pix 3 + }, + + // vertical filter[7], 1/64 units, 6 bits each + { + 0, // line n-1 + 0, // line n-1 + 21, // line n + 22, // line n + 21, // line n + 0, // line n+1 + 0 // line n+1 + } +}; + +GXRModeObj TVNtsc480ProgSoft = +{ + VI_TVMODE_NTSC_PROG, // viDisplayMode + 640, // fbWidth + 480, // efbHeight + 480, // xfbHeight + (VI_MAX_WIDTH_NTSC - 640)/2, // viXOrigin + (VI_MAX_HEIGHT_NTSC - 480)/2, // viYOrigin + 640, // viWidth + 480, // viHeight + VI_XFBMODE_SF, // xFBmode + GX_FALSE, // field_rendering + GX_FALSE, // aa + + // sample points arranged in increasing Y order + { + {6,6},{6,6},{6,6}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {6,6},{6,6},{6,6}, // pix 1 + {6,6},{6,6},{6,6}, // pix 2 + {6,6},{6,6},{6,6} // pix 3 + }, + + // vertical filter[7], 1/64 units, 6 bits each + { + 8, // line n-1 + 8, // line n-1 + 10, // line n + 12, // line n + 10, // line n + 8, // line n+1 + 8 // line n+1 + } +}; + +GXRModeObj TVNtsc480ProgAa = +{ + VI_TVMODE_NTSC_PROG, // viDisplayMode + 640, // fbWidth + 242, // efbHeight + 480, // xfbHeight + (VI_MAX_WIDTH_NTSC - 640)/2, // viXOrigin + (VI_MAX_HEIGHT_NTSC - 480)/2, // viYOrigin + 640, // viWidth + 480, // viHeight + VI_XFBMODE_SF, // xFBmode + GX_FALSE, // field_rendering + GX_TRUE, // aa + + // sample points arranged in increasing Y order + { + {3,2},{9,6},{3,10}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {3,2},{9,6},{3,10}, // pix 1 + {9,2},{3,6},{9,10}, // pix 2 + {9,2},{3,6},{9,10} // pix 3 + }, + + // vertical filter[7], 1/64 units, 6 bits each + { + 4, // line n-1 + 8, // line n-1 + 12, // line n + 16, // line n + 12, // line n + 8, // line n+1 + 4 // line n+1 + } +}; + +GXRModeObj TVMpal240Ds = +{ + VI_TVMODE_MPAL_DS, // viDisplayMode + 640, // fbWidth + 240, // efbHeight + 240, // xfbHeight + (VI_MAX_WIDTH_MPAL - 640)/2, // viXOrigin + (VI_MAX_HEIGHT_MPAL - 480)/2, // viYOrigin + 640, // viWidth + 480, // viHeight + VI_XFBMODE_SF, // xFBmode + GX_FALSE, // field_rendering + GX_FALSE, // aa + + // sample points arranged in increasing Y order + { + {6,6},{6,6},{6,6}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {6,6},{6,6},{6,6}, // pix 1 + {6,6},{6,6},{6,6}, // pix 2 + {6,6},{6,6},{6,6} // pix 3 + }, + + // vertical filter[7], 1/64 units, 6 bits each + { + 0, // line n-1 + 0, // line n-1 + 21, // line n + 22, // line n + 21, // line n + 0, // line n+1 + 0 // line n+1 + } +}; + +GXRModeObj TVMpal240DsAa = +{ + VI_TVMODE_MPAL_DS, // viDisplayMode + 640, // fbWidth + 240, // efbHeight + 240, // xfbHeight + (VI_MAX_WIDTH_MPAL - 640)/2, // viXOrigin + (VI_MAX_HEIGHT_MPAL - 480)/2, // viYOrigin + 640, // viWidth + 480, // viHeight + VI_XFBMODE_SF, // xFBmode + GX_FALSE, // field_rendering + GX_TRUE, // aa + + // sample points arranged in increasing Y order + { + {3,2},{9,6},{3,10}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {3,2},{9,6},{3,10}, // pix 1 + {9,2},{3,6},{9,10}, // pix 2 + {9,2},{3,6},{9,10} // pix 3 + }, + + // vertical filter[7], 1/64 units, 6 bits each + { + 0, // line n-1 + 0, // line n-1 + 21, // line n + 22, // line n + 21, // line n + 0, // line n+1 + 0 // line n+1 + } +}; + +GXRModeObj TVMpal480IntDf = +{ + VI_TVMODE_MPAL_INT, // viDisplayMode + 640, // fbWidth + 480, // efbHeight + 480, // xfbHeight + (VI_MAX_WIDTH_MPAL - 640)/2, // viXOrigin + (VI_MAX_HEIGHT_MPAL - 480)/2, // viYOrigin + 640, // viWidth + 480, // viHeight + VI_XFBMODE_DF, // xFBmode + GX_FALSE, // field_rendering + GX_FALSE, // aa + + // sample points arranged in increasing Y order + { + {6,6},{6,6},{6,6}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {6,6},{6,6},{6,6}, // pix 1 + {6,6},{6,6},{6,6}, // pix 2 + {6,6},{6,6},{6,6} // pix 3 + }, + + // vertical filter[7], 1/64 units, 6 bits each + { + 8, // line n-1 + 8, // line n-1 + 10, // line n + 12, // line n + 10, // line n + 8, // line n+1 + 8 // line n+1 + } +}; + +GXRModeObj TVMpal480IntAa = +{ + VI_TVMODE_MPAL_INT, // viDisplayMode + 640, // fbWidth + 242, // efbHeight + 480, // xfbHeight + (VI_MAX_WIDTH_MPAL - 640)/2, // viXOrigin + (VI_MAX_HEIGHT_MPAL - 480)/2, // viYOrigin + 640, // viWidth + 480, // viHeight + VI_XFBMODE_DF, // xFBmode + GX_FALSE, // field_rendering + GX_TRUE, // aa + + // sample points arranged in increasing Y order + { + {3,2},{9,6},{3,10}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {3,2},{9,6},{3,10}, // pix 1 + {9,2},{3,6},{9,10}, // pix 2 + {9,2},{3,6},{9,10} // pix 3 + }, + + // vertical filter[7], 1/64 units, 6 bits each + { + 4, // line n-1 + 8, // line n-1 + 12, // line n + 16, // line n + 12, // line n + 8, // line n+1 + 4 // line n+1 + } +}; + +GXRModeObj TVMpal480Prog = +{ + VI_TVMODE_MPAL_PROG, // viDisplayMode + 640, // fbWidth + 480, // efbHeight + 480, // xfbHeight + (VI_MAX_WIDTH_MPAL - 640)/2, // viXOrigin + (VI_MAX_HEIGHT_MPAL - 480)/2, // viYOrigin + 640, // viWidth + 480, // viHeight + VI_XFBMODE_SF, // xFBmode + GX_FALSE, // field_rendering + GX_FALSE, // aa + + // sample points arranged in increasing Y order + { + {6,6},{6,6},{6,6}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {6,6},{6,6},{6,6}, // pix 1 + {6,6},{6,6},{6,6}, // pix 2 + {6,6},{6,6},{6,6} // pix 3 + }, + + // vertical filter[7], 1/64 units, 6 bits each + { + 0, // line n-1 + 0, // line n-1 + 21, // line n + 22, // line n + 21, // line n + 0, // line n+1 + 0 // line n+1 + } +}; + +GXRModeObj TVPal264Ds = +{ + VI_TVMODE_PAL_DS, // viDisplayMode + 640, // fbWidth + 264, // efbHeight + 264, // xfbHeight + (VI_MAX_WIDTH_PAL - 640)/2, // viXOrigin + (VI_MAX_HEIGHT_PAL - 528)/2, // viYOrigin + 640, // viWidth + 528, // viHeight + VI_XFBMODE_SF, // xFBmode + GX_FALSE, // field_rendering + GX_FALSE, // aa + + // sample points arranged in increasing Y order + { + {6,6},{6,6},{6,6}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {6,6},{6,6},{6,6}, // pix 1 + {6,6},{6,6},{6,6}, // pix 2 + {6,6},{6,6},{6,6} // pix 3 + }, + + // vertical filter[7], 1/64 units, 6 bits each + { + 0, // line n-1 + 0, // line n-1 + 21, // line n + 22, // line n + 21, // line n + 0, // line n+1 + 0 // line n+1 + } +}; + +GXRModeObj TVPal264DsAa = +{ + VI_TVMODE_PAL_DS, // viDisplayMode + 640, // fbWidth + 264, // efbHeight + 264, // xfbHeight + (VI_MAX_WIDTH_PAL - 640)/2, // viXOrigin + (VI_MAX_HEIGHT_PAL - 528)/2, // viYOrigin + 640, // viWidth + 528, // viHeight + VI_XFBMODE_SF, // xFBmode + GX_FALSE, // field_rendering + GX_TRUE, // aa + + // sample points arranged in increasing Y order + { + {3,2},{9,6},{3,10}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {3,2},{9,6},{3,10}, // pix 1 + {9,2},{3,6},{9,10}, // pix 2 + {9,2},{3,6},{9,10} // pix 3 + }, + + // vertical filter[7], 1/64 units, 6 bits each + { + 0, // line n-1 + 0, // line n-1 + 21, // line n + 22, // line n + 21, // line n + 0, // line n+1 + 0 // line n+1 + } +}; + +GXRModeObj TVPal264Int = +{ + VI_TVMODE_PAL_INT, // viDisplayMode + 640, // fbWidth + 264, // efbHeight + 264, // xfbHeight + (VI_MAX_WIDTH_PAL - 640)/2, // viXOrigin + (VI_MAX_HEIGHT_PAL - 528)/2, // viYOrigin + 640, // viWidth + 528, // viHeight + VI_XFBMODE_SF, // xFBmode + GX_TRUE, // field_rendering + GX_FALSE, // aa + + // sample points arranged in increasing Y order + { + {6,6},{6,6},{6,6}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {6,6},{6,6},{6,6}, // pix 1 + {6,6},{6,6},{6,6}, // pix 2 + {6,6},{6,6},{6,6} // pix 3 + }, + + // vertical filter[7], 1/64 units, 6 bits each + { + 0, // line n-1 + 0, // line n-1 + 21, // line n + 22, // line n + 21, // line n + 0, // line n+1 + 0 // line n+1 + } +}; + +GXRModeObj TVPal264IntAa = +{ + VI_TVMODE_PAL_INT, // viDisplayMode + 640, // fbWidth + 264, // efbHeight + 264, // xfbHeight + (VI_MAX_WIDTH_PAL - 640)/2, // viXOrigin + (VI_MAX_HEIGHT_PAL - 528)/2, // viYOrigin + 640, // viWidth + 528, // viHeight + VI_XFBMODE_SF, // xFBmode + GX_TRUE, // field_rendering + GX_TRUE, // aa + + // sample points arranged in increasing Y order + { + {3,2},{9,6},{3,10}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {3,2},{9,6},{3,10}, // pix 1 + {9,2},{3,6},{9,10}, // pix 2 + {9,2},{3,6},{9,10} // pix 3 + }, + + // vertical filter[7], 1/64 units, 6 bits each + { + 0, // line n-1 + 0, // line n-1 + 21, // line n + 22, // line n + 21, // line n + 0, // line n+1 + 0 // line n+1 + } +}; + +GXRModeObj TVPal524IntAa = +{ + VI_TVMODE_PAL_INT, + 640, + 264, + 524, + (VI_MAX_WIDTH_PAL-640)/2, + (VI_MAX_HEIGHT_PAL-528)/2, + 640, + 524, + VI_XFBMODE_DF, + GX_FALSE, + GX_TRUE, + + // sample points arranged in increasing Y order + { + {3,2},{9,6},{3,10}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {3,2},{9,6},{3,10}, // pix 1 + {9,2},{3,6},{9,10}, // pix 2 + {9,2},{3,6},{9,10} // pix 3 + }, + + // vertical filter[7], 1/64 units, 6 bits each + { + 4, // line n-1 + 8, // line n-1 + 12, // line n + 16, // line n + 12, // line n + 8, // line n+1 + 4 // line n+1 + } +}; + +GXRModeObj TVPal528Int = +{ + VI_TVMODE_PAL_INT, // viDisplayMode + 640, // fbWidth + 528, // efbHeight + 528, // xfbHeight + (VI_MAX_WIDTH_PAL - 640)/2, // viXOrigin + (VI_MAX_HEIGHT_PAL - 528)/2, // viYOrigin + 640, // viWidth + 528, // viHeight + VI_XFBMODE_DF, // xFBmode + GX_FALSE, // field_rendering + GX_FALSE, // aa + + // sample points arranged in increasing Y order + { + {6,6},{6,6},{6,6}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {6,6},{6,6},{6,6}, // pix 1 + {6,6},{6,6},{6,6}, // pix 2 + {6,6},{6,6},{6,6} // pix 3 + }, + + // vertical filter[7], 1/64 units, 6 bits each + { + 0, // line n-1 + 0, // line n-1 + 21, // line n + 22, // line n + 21, // line n + 0, // line n+1 + 0 // line n+1 + } +}; + +GXRModeObj TVPal528IntDf = +{ + VI_TVMODE_PAL_INT, // viDisplayMode + 640, // fbWidth + 528, // efbHeight + 528, // xfbHeight + (VI_MAX_WIDTH_PAL - 640)/2, // viXOrigin + (VI_MAX_HEIGHT_PAL - 528)/2, // viYOrigin + 640, // viWidth + 528, // viHeight + VI_XFBMODE_DF, // xFBmode + GX_FALSE, // field_rendering + GX_FALSE, // aa + + // sample points arranged in increasing Y order + { + {6,6},{6,6},{6,6}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {6,6},{6,6},{6,6}, // pix 1 + {6,6},{6,6},{6,6}, // pix 2 + {6,6},{6,6},{6,6} // pix 3 + }, + // vertical filter[7], 1/64 units, 6 bits each + { + 8, // line n-1 + 8, // line n-1 + 10, // line n + 12, // line n + 10, // line n + 8, // line n+1 + 8 // line n+1 + } +}; + +GXRModeObj TVPal576IntDfScale = +{ + VI_TVMODE_PAL_INT, // viDisplayMode + 640, // fbWidth + 480, // efbHeight + 576, // xfbHeight + (VI_MAX_WIDTH_PAL - 640)/2, // viXOrigin + (VI_MAX_HEIGHT_PAL - 576)/2, // viYOrigin + 640, // viWidth + 576, // viHeight + VI_XFBMODE_DF, // xFBmode + GX_FALSE, // field_rendering + GX_FALSE, // aa + + // sample points arranged in increasing Y order + { + {6,6},{6,6},{6,6}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {6,6},{6,6},{6,6}, // pix 1 + {6,6},{6,6},{6,6}, // pix 2 + {6,6},{6,6},{6,6} // pix 3 + }, + // vertical filter[7], 1/64 units, 6 bits each + { + 8, // line n-1 + 8, // line n-1 + 10, // line n + 12, // line n + 10, // line n + 8, // line n+1 + 8 // line n+1 + } +}; + +GXRModeObj TVPal576ProgScale = +{ + VI_TVMODE_PAL_PROG, // viDisplayMode + 640, // fbWidth + 480, // efbHeight + 576, // xfbHeight + (VI_MAX_WIDTH_PAL - 640)/2, // viXOrigin + (VI_MAX_HEIGHT_PAL - 576)/2, // viYOrigin + 640, // viWidth + 576, // viHeight + VI_XFBMODE_SF, // xFBmode + GX_FALSE, // field_rendering + GX_FALSE, // aa + + // sample points arranged in increasing Y order + { + {6,6},{6,6},{6,6}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {6,6},{6,6},{6,6}, // pix 1 + {6,6},{6,6},{6,6}, // pix 2 + {6,6},{6,6},{6,6} // pix 3 + }, + // vertical filter[7], 1/64 units, 6 bits each + { + 0, // line n-1 + 0, // line n-1 + 21, // line n + 22, // line n + 21, // line n + 0, // line n+1 + 0 // line n+1 + } +}; + +GXRModeObj TVEurgb60Hz240Ds = +{ + VI_TVMODE_EURGB60_DS, // viDisplayMode + 640, // fbWidth + 240, // efbHeight + 240, // xfbHeight + (VI_MAX_WIDTH_EURGB60 - 640)/2, // viXOrigin + (VI_MAX_HEIGHT_EURGB60 - 480)/2, // viYOrigin + 640, // viWidth + 480, // viHeight + VI_XFBMODE_SF, // xFBmode + GX_FALSE, // field_rendering + GX_FALSE, // aa + + // sample points arranged in increasing Y order + { + {6,6},{6,6},{6,6}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {6,6},{6,6},{6,6}, // pix 1 + {6,6},{6,6},{6,6}, // pix 2 + {6,6},{6,6},{6,6} // pix 3 + }, + // vertical filter[7], 1/64 units, 6 bits each + { + 0, // line n-1 + 0, // line n-1 + 21, // line n + 22, // line n + 21, // line n + 0, // line n+1 + 0 // line n+1 + } +}; + +GXRModeObj TVEurgb60Hz240DsAa = +{ + VI_TVMODE_EURGB60_DS, // viDisplayMode + 640, // fbWidth + 240, // efbHeight + 240, // xfbHeight + (VI_MAX_WIDTH_EURGB60 - 640)/2, // viXOrigin + (VI_MAX_HEIGHT_EURGB60 - 480)/2, // viYOrigin + 640, // viWidth + 480, // viHeight + VI_XFBMODE_SF, // xFBmode + GX_FALSE, // field_rendering + GX_TRUE, // aa + + // sample points arranged in increasing Y order + { + {3,2},{9,6},{3,10}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {3,2},{9,6},{3,10}, // pix 1 + {9,2},{3,6},{9,10}, // pix 2 + {9,2},{3,6},{9,10} // pix 3 + }, + // vertical filter[7], 1/64 units, 6 bits each + { + 0, // line n-1 + 0, // line n-1 + 21, // line n + 22, // line n + 21, // line n + 0, // line n+1 + 0 // line n+1 + } +}; + +GXRModeObj TVEurgb60Hz240Int = +{ + VI_TVMODE_EURGB60_INT, // viDisplayMode + 640, // fbWidth + 240, // efbHeight + 240, // xfbHeight + (VI_MAX_WIDTH_EURGB60 - 640)/2, // viXOrigin + (VI_MAX_HEIGHT_EURGB60 - 480)/2, // viYOrigin + 640, // viWidth + 480, // viHeight + VI_XFBMODE_SF, // xFBmode + GX_TRUE, // field_rendering + GX_FALSE, // aa + + // sample points arranged in increasing Y order + { + {6,6},{6,6},{6,6}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {6,6},{6,6},{6,6}, // pix 1 + {6,6},{6,6},{6,6}, // pix 2 + {6,6},{6,6},{6,6} // pix 3 + }, + // vertical filter[7], 1/64 units, 6 bits each + { + 0, // line n-1 + 0, // line n-1 + 21, // line n + 22, // line n + 21, // line n + 0, // line n+1 + 0 // line n+1 + } +}; + +GXRModeObj TVEurgb60Hz240IntAa = +{ + VI_TVMODE_EURGB60_INT, // viDisplayMode + 640, // fbWidth + 240, // efbHeight + 240, // xfbHeight + (VI_MAX_WIDTH_EURGB60 - 640)/2, // viXOrigin + (VI_MAX_HEIGHT_EURGB60 - 480)/2, // viYOrigin + 640, // viWidth + 480, // viHeight + VI_XFBMODE_SF, // xFBmode + GX_TRUE, // field_rendering + GX_TRUE, // aa + + // sample points arranged in increasing Y order + { + {3,2},{9,6},{3,10}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {3,2},{9,6},{3,10}, // pix 1 + {9,2},{3,6},{9,10}, // pix 2 + {9,2},{3,6},{9,10} // pix 3 + }, + // vertical filter[7], 1/64 units, 6 bits each + { + 0, // line n-1 + 0, // line n-1 + 21, // line n + 22, // line n + 21, // line n + 0, // line n+1 + 0 // line n+1 + } +}; + +GXRModeObj TVEurgb60Hz480Int = +{ + VI_TVMODE_EURGB60_INT, // viDisplayMode + 640, // fbWidth + 480, // efbHeight + 480, // xfbHeight + (VI_MAX_WIDTH_EURGB60 - 640)/2, // viXOrigin + (VI_MAX_HEIGHT_EURGB60 - 480)/2, // viYOrigin + 640, // viWidth + 480, // viHeight + VI_XFBMODE_DF, // xFBmode + GX_FALSE, // field_rendering + GX_FALSE, // aa + + // sample points arranged in increasing Y order + { + {6,6},{6,6},{6,6}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {6,6},{6,6},{6,6}, // pix 1 + {6,6},{6,6},{6,6}, // pix 2 + {6,6},{6,6},{6,6} // pix 3 + }, + // vertical filter[7], 1/64 units, 6 bits each + { + 0, // line n-1 + 0, // line n-1 + 21, // line n + 22, // line n + 21, // line n + 0, // line n+1 + 0 // line n+1 + } +}; + +GXRModeObj TVEurgb60Hz480IntDf = +{ + VI_TVMODE_EURGB60_INT, // viDisplayMode + 640, // fbWidth + 480, // efbHeight + 480, // xfbHeight + (VI_MAX_WIDTH_EURGB60 - 640)/2, // viXOrigin + (VI_MAX_HEIGHT_EURGB60 - 480)/2, // viYOrigin + 640, // viWidth + 480, // viHeight + VI_XFBMODE_DF, // xFBmode + GX_FALSE, // field_rendering + GX_FALSE, // aa + + // sample points arranged in increasing Y order + { + {6,6},{6,6},{6,6}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {6,6},{6,6},{6,6}, // pix 1 + {6,6},{6,6},{6,6}, // pix 2 + {6,6},{6,6},{6,6} // pix 3 + }, + // vertical filter[7], 1/64 units, 6 bits each + { + 8, // line n-1 + 8, // line n-1 + 10, // line n + 12, // line n + 10, // line n + 8, // line n+1 + 8 // line n+1 + } +}; + +GXRModeObj TVEurgb60Hz480IntAa = +{ + VI_TVMODE_EURGB60_INT, // viDisplayMode + 640, // fbWidth + 242, // efbHeight + 480, // xfbHeight + (VI_MAX_WIDTH_EURGB60 - 640)/2, // viXOrigin + (VI_MAX_HEIGHT_EURGB60 - 480)/2, // viYOrigin + 640, // viWidth + 480, // viHeight + VI_XFBMODE_DF, // xFBmode + GX_FALSE, // field_rendering + GX_TRUE, // aa + + // sample points arranged in increasing Y order + { + {3,2},{9,6},{3,10}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {3,2},{9,6},{3,10}, // pix 1 + {9,2},{3,6},{9,10}, // pix 2 + {9,2},{3,6},{9,10} // pix 3 + }, + // vertical filter[7], 1/64 units, 6 bits each + { + 4, // line n-1 + 8, // line n-1 + 12, // line n + 16, // line n + 12, // line n + 8, // line n+1 + 4 // line n+1 + } +}; + +GXRModeObj TVEurgb60Hz480Prog = +{ + VI_TVMODE_EURGB60_PROG, // viDisplayMode + 640, // fbWidth + 480, // efbHeight + 480, // xfbHeight + (VI_MAX_WIDTH_EURGB60 - 640)/2, // viXOrigin + (VI_MAX_HEIGHT_EURGB60 - 480)/2, // viYOrigin + 640, // viWidth + 480, // viHeight + VI_XFBMODE_SF, // xFBmode + GX_FALSE, // field_rendering + GX_FALSE, // aa + + // sample points arranged in increasing Y order + { + {6,6},{6,6},{6,6}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {6,6},{6,6},{6,6}, // pix 1 + {6,6},{6,6},{6,6}, // pix 2 + {6,6},{6,6},{6,6} // pix 3 + }, + // vertical filter[7], 1/64 units, 6 bits each + { + 0, // line n-1 + 0, // line n-1 + 21, // line n + 22, // line n + 21, // line n + 0, // line n+1 + 0 // line n+1 + } +}; + +GXRModeObj TVEurgb60Hz480ProgSoft = +{ + VI_TVMODE_EURGB60_PROG, // viDisplayMode + 640, // fbWidth + 480, // efbHeight + 480, // xfbHeight + (VI_MAX_WIDTH_EURGB60 - 640)/2, // viXOrigin + (VI_MAX_HEIGHT_EURGB60 - 480)/2, // viYOrigin + 640, // viWidth + 480, // viHeight + VI_XFBMODE_SF, // xFBmode + GX_FALSE, // field_rendering + GX_FALSE, // aa + + // sample points arranged in increasing Y order + { + {3,2},{9,6},{3,10}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {3,2},{9,6},{3,10}, // pix 1 + {9,2},{3,6},{9,10}, // pix 2 + {9,2},{3,6},{9,10} // pix 3 + }, + // vertical filter[7], 1/64 units, 6 bits each + { + 4, // line n-1 + 8, // line n-1 + 12, // line n + 16, // line n + 12, // line n + 8, // line n+1 + 4 // line n+1 + } +}; + +GXRModeObj TVEurgb60Hz480ProgAa = +{ + VI_TVMODE_EURGB60_PROG, // viDisplayMode + 640, // fbWidth + 242, // efbHeight + 480, // xfbHeight + (VI_MAX_WIDTH_EURGB60 - 640)/2, // viXOrigin + (VI_MAX_HEIGHT_EURGB60 - 480)/2, // viYOrigin + 640, // viWidth + 480, // viHeight + VI_XFBMODE_SF, // xFBmode + GX_FALSE, // field_rendering + GX_TRUE, // aa + + // sample points arranged in increasing Y order + { + {6,6},{6,6},{6,6}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {6,6},{6,6},{6,6}, // pix 1 + {6,6},{6,6},{6,6}, // pix 2 + {6,6},{6,6},{6,6} // pix 3 + }, + // vertical filter[7], 1/64 units, 6 bits each + { + 8, // line n-1 + 8, // line n-1 + 10, // line n + 12, // line n + 10, // line n + 8, // line n+1 + 8 // line n+1 + } +}; + + +static const u16 taps[26] = { + 0x01F0,0x01DC,0x01AE,0x0174,0x0129,0x00DB, + 0x008E,0x0046,0x000C,0x00E2,0x00CB,0x00C0, + 0x00C4,0x00CF,0x00DE,0x00EC,0x00FC,0x0008, + 0x000F,0x0013,0x0013,0x000F,0x000C,0x0008, + 0x0001,0x0000 +}; + +static const struct _timing { + u8 equ; + u16 acv; + u16 prbOdd,prbEven; + u16 psbOdd,psbEven; + u8 bs1,bs2,bs3,bs4; + u16 be1,be2,be3,be4; + u16 nhlines,hlw; + u8 hsy,hcs,hce,hbe640; + u16 hbs640; +} video_timing[] = { + { + 0x06,0x00F0, + 0x0018,0x0019,0x0003,0x0002, + 0x0C,0x0D,0x0C,0x0D, + 0x0208,0x0207,0x0208,0x0207, + 0x020D,0x01AD, + 0x40,0x47,0x69,0xA2, + 0x0175 + }, + { + 0x06,0x00F0, + 0x0018,0x0018,0x0004,0x0004, + 0x0C,0x0C,0x0C,0x0C, + 0x0208,0x0208,0x0208,0x0208, + 0x020E,0x01AD, + 0x40,0x47,0x69,0xA2, + 0x0175 + }, + { + 0x05,0x0120, + 0x0021,0x0022,0x0001,0x0000, + 0x0A,0x0B,0x0A,0x0B, + 0x026D,0x026C,0x026D,0x026C, + 0x0271,0x01B0, + 0x40,0x4B,0x6A,0xAC, + 0x017C + }, + { + 0x05,0x011F, + 0x0021,0x0021,0x0002,0x0002, + 0x0D,0x0B,0x0D,0x0B, + 0x026B,0x026D,0x026B,0x026D, + 0x0270,0x01B0, + 0x40,0x4B,0x6A,0xAC, + 0x017C + }, + { + 0x06,0x00F0, + 0x0018,0x0019,0x0003,0x0002, + 0x10,0x0F,0x0E,0x0D, + 0x0206,0x0205,0x0204,0x0207, + 0x020D,0x01AD, + 0x40,0x4E,0x70,0xA2, + 0x0175 + }, + { + 0x06,0x00F0, + 0x0018,0x0018,0x0004,0x0004, + 0x10,0x0E,0x10,0x0E, + 0x0206,0x0208,0x0206,0x0208, + 0x020E,0x01AD, + 0x40,0x4E,0x70,0xA2, + 0x0175 + }, + { + 0x0C,0x01E0, + 0x0030,0x0030,0x0006,0x0006, + 0x18,0x18,0x18,0x18, + 0x040E,0x040E,0x040E,0x040E, + 0x041A,0x01AD, + 0x40,0x47,0x69,0xA2, + 0x0175 + }, + { + 0x0A,0x0240, + 0x003E,0x003E,0x0006,0x0006, + 0x14,0x14,0x14,0x14, + 0x04D8,0x04D8,0x04D8,0x04D8, + 0x04E2,0x01B0, + 0x40,0x4B,0x6A,0xAC, + 0x017C + } +}; + +#if defined(HW_RVL) +static u32 vdacFlagRegion; +static u32 i2cIdentFirst = 0; +static u32 i2cIdentFlag = 1; +static u32 oldTvStatus = 0x03e7; +static u32 oldDtvStatus = 0x03e7; +static vu32* const _i2cReg = (u32*)0xCD800000; +#endif + +static u16 regs[60]; +static u16 shdw_regs[60]; +static u32 fbSet = 0; +static s16 displayOffsetH; +static s16 displayOffsetV; +static u32 currTvMode,changeMode; +static u32 shdw_changeMode,flushFlag; +static u64 changed,shdw_changed; +static vu32 retraceCount; +static const struct _timing *currTiming; +static lwpq_t video_queue; +static horVer HorVer; +static void *currentFb = NULL; +static void *nextFb = NULL; +static VIRetraceCallback preRetraceCB = NULL; +static VIRetraceCallback postRetraceCB = NULL; +static VIPositionCallback positionCB = NULL; + +static vu16* const _viReg = (u16*)0xCC002000; + +extern syssram* __SYS_LockSram(); +extern u32 __SYS_UnlockSram(u32 write); + +extern void __VIClearFramebuffer(void*,u32,u32); + +extern void udelay(int us); + +static __inline__ u32 cntlzd(u64 bit) +{ + u32 hi = (u32)(bit>>32); + u32 lo = (u32)(bit&-1); + u32 value = cntlzw(hi); + if(value>=32) value += cntlzw(lo); + + return value; +} + +static const struct _timing* __gettiming(u32 vimode) +{ + switch(vimode) { + case VI_TVMODE_NTSC_INT: + return &video_timing[0]; + break; + case VI_TVMODE_NTSC_DS: + return &video_timing[1]; + break; + case VI_TVMODE_PAL_INT: + return &video_timing[2]; + break; + case VI_TVMODE_PAL_DS: + return &video_timing[3]; + break; + case VI_TVMODE_EURGB60_INT: + return &video_timing[0]; + break; + case VI_TVMODE_EURGB60_DS: + return &video_timing[1]; + break; + case VI_TVMODE_MPAL_INT: + return &video_timing[4]; + break; + case VI_TVMODE_MPAL_DS: + return &video_timing[5]; + break; + case VI_TVMODE_NTSC_PROG: + return &video_timing[6]; + break; + case VI_TVMODE_PAL_PROG: + return &video_timing[7]; + break; + case VI_TVMODE_EURGB60_PROG: + return &video_timing[6]; + break; + case VI_TVMODE_MPAL_PROG: + return &video_timing[6]; + break; + default: + return NULL; + } +} + +#if defined(HW_RVL) +static inline void __viOpenI2C(u32 channel) +{ + u32 val = ((_i2cReg[49]&~0x8000)|0x4000); + val |= _SHIFTL(channel,15,1); + _i2cReg[49] = val; +} + +static inline u32 __viSetSCL(u32 channel) +{ + u32 val = (_i2cReg[48]&~0x4000); + val |= _SHIFTL(channel,14,1); + _i2cReg[48] = val; + return 1; +} +static inline u32 __viSetSDA(u32 channel) +{ + u32 val = (_i2cReg[48]&~0x8000); + val |= _SHIFTL(channel,15,1); + _i2cReg[48] = val; + return 1; +} + +static inline u32 __viGetSDA() +{ + return _SHIFTR(_i2cReg[50],15,1); +} + +static inline void __viCheckI2C() +{ + __viOpenI2C(0); + udelay(4); + + i2cIdentFlag = 0; + if(__viGetSDA()!=0) i2cIdentFlag = 1; +} + +static u32 __sendSlaveAddress(u8 addr) +{ + u32 i; + + __viSetSDA(i2cIdentFlag^1); + udelay(2); + + __viSetSCL(0); + for(i=0;i<8;i++) { + if(addr&0x80) __viSetSDA(i2cIdentFlag); + else __viSetSDA(i2cIdentFlag^1); + udelay(2); + + __viSetSCL(1); + udelay(2); + + __viSetSCL(0); + addr <<= 1; + } + + __viOpenI2C(0); + udelay(2); + + __viSetSCL(1); + udelay(2); + + if(i2cIdentFlag==1 && __viGetSDA()!=0) return 0; + + __viSetSDA(i2cIdentFlag^1); + __viOpenI2C(1); + __viSetSCL(0); + + return 1; +} +#endif + +static inline void __setInterruptRegs(const struct _timing *tm) +{ + u16 hlw; + + hlw = 0; + if(tm->nhlines%2) hlw = tm->hlw; + regs[24] = 0x1000|((tm->nhlines/2)+1); + regs[25] = hlw+1; + changed |= VI_REGCHANGE(24); + changed |= VI_REGCHANGE(25); +} + +static inline void __setPicConfig(u16 fbSizeX,u32 xfbMode,u16 panPosX,u16 panSizeX,u8 *wordPerLine,u8 *std,u8 *wpl,u8 *xof) +{ + *wordPerLine = (fbSizeX+15)/16; + *std = *wordPerLine; + if(xfbMode==VI_XFBMODE_DF) *std <<= 1; + + *xof = panPosX%16; + *wpl = (*xof+(panSizeX+15))/16; + regs[36] = (*wpl<<8)|*std; + changed |= VI_REGCHANGE(36); +} + +static inline void __setBBIntervalRegs(const struct _timing *tm) +{ + regs[10] = (tm->be3<<5)|tm->bs3; + regs[11] = (tm->be1<<5)|tm->bs1; + changed |= VI_REGCHANGE(10); + changed |= VI_REGCHANGE(11); + + regs[12] = (tm->be4<<5)|tm->bs4; + regs[13] = (tm->be2<<5)|tm->bs2; + changed |= VI_REGCHANGE(12); + changed |= VI_REGCHANGE(13); +} + +static void __setScalingRegs(u16 panSizeX,u16 dispSizeX,s32 threeD) +{ + if(threeD) panSizeX = _SHIFTL(panSizeX,1,16); + if(panSizeXbufAddr,horVer->panPosX,horVer->adjustedPanPosY,horVer->wordPerLine,horVer->fbMode,horVer->adjustedDispPosY,tfbb,bfbb); + if(horVer->threeD) __calcFbbs((u32)horVer->rbufAddr,horVer->panPosX,horVer->adjustedPanPosY,horVer->wordPerLine,horVer->fbMode,horVer->adjustedDispPosY,rtfbb,rbfbb); + + flag = 1; + if((*tfbb)<0x01000000 && (*bfbb)<0x01000000 + && (*rtfbb)<0x01000000 && (*rbfbb)<0x01000000) flag = 0; + + if(flag) { + *tfbb >>= 5; + *bfbb >>= 5; + *rtfbb >>= 5; + *rbfbb >>= 5; + } + + regs[14] = _SHIFTL(flag,12,1)|_SHIFTL(horVer->xof,8,4)|_SHIFTR(*tfbb,16,8); + regs[15] = *tfbb&0xffff; + changed |= VI_REGCHANGE(14); + changed |= VI_REGCHANGE(15); + + regs[18] = _SHIFTR(*bfbb,16,8); + regs[19] = *bfbb&0xffff; + changed |= VI_REGCHANGE(18); + changed |= VI_REGCHANGE(19); + + if(horVer->threeD) { + regs[16] = _SHIFTR(*rtfbb,16,8); + regs[17] = *rtfbb&0xffff; + changed |= VI_REGCHANGE(16); + changed |= VI_REGCHANGE(17); + + regs[20] = _SHIFTR(*rbfbb,16,8); + regs[21] = *rbfbb&0xffff; + changed |= VI_REGCHANGE(20); + changed |= VI_REGCHANGE(21); + } +} + +static inline void __setHorizontalRegs(const struct _timing *tm,u16 dispPosX,u16 dispSizeX) +{ + u32 val1,val2; + + regs[2] = (tm->hcs<<8)|tm->hce; + regs[3] = tm->hlw; + changed |= VI_REGCHANGE(2); + changed |= VI_REGCHANGE(3); + + val1 = (tm->hbe640+dispPosX-40)&0x01ff; + val2 = (tm->hbs640+dispPosX+40)-(720-dispSizeX); + regs[4] = (val1>>9)|(val2<<1); + regs[5] = (val1<<7)|tm->hsy; + changed |= VI_REGCHANGE(4); + changed |= VI_REGCHANGE(5); +} + +static inline void __setVerticalRegs(u16 dispPosY,u16 dispSizeY,u8 equ,u16 acv,u16 prbOdd,u16 prbEven,u16 psbOdd,u16 psbEven,s32 black) +{ + u16 tmp; + u32 div1,div2; + u32 psb,prb; + u32 psbodd,prbodd; + u32 psbeven,prbeven; + + div1 = 2; + div2 = 1; + if(equ>=10) { + div1 = 1; + div2 = 2; + } + + prb = div2*dispPosY; + psb = div2*(((acv*div1)-dispSizeY)-dispPosY); + if(dispPosY%2) { + prbodd = prbEven+prb; + psbodd = psbEven+psb; + prbeven = prbOdd+prb; + psbeven = psbOdd+psb; + } else { + prbodd = prbOdd+prb; + psbodd = psbOdd+psb; + prbeven = prbEven+prb; + psbeven = psbEven+psb; + } + + tmp = dispSizeY/div1; + if(black) { + prbodd += ((tmp<<1)-2); + prbeven += ((tmp<<1)-2); + psbodd += 2; + psbeven += 2; + tmp = 0; + } + + regs[0] = ((tmp<<4)&~0x0f)|equ; + changed |= VI_REGCHANGE(0); + + regs[6] = psbodd; + regs[7] = prbodd; + changed |= VI_REGCHANGE(6); + changed |= VI_REGCHANGE(7); + + regs[8] = psbeven; + regs[9] = prbeven; + changed |= VI_REGCHANGE(8); + changed |= VI_REGCHANGE(9); +} + +static inline void __adjustPosition(u16 acv) +{ + u32 fact,field; + s16 dispPosX,dispPosY; + s16 dispSizeY,maxDispSizeY; + + dispPosX = (HorVer.dispPosX+displayOffsetH); + if(dispPosX<=(720-HorVer.dispSizeX)) { + if(dispPosX>=0) HorVer.adjustedDispPosX = dispPosX; + else HorVer.adjustedDispPosX = 0; + } else HorVer.adjustedDispPosX = (720-HorVer.dispSizeX); + + fact = 1; + if(HorVer.fbMode==VI_XFBMODE_SF) fact = 2; + + field = HorVer.dispPosY&0x0001; + dispPosY = HorVer.dispPosY+displayOffsetV; + if(dispPosY>field) HorVer.adjustedDispPosY = dispPosY; + else HorVer.adjustedDispPosY = field; + + dispSizeY = HorVer.dispPosY+HorVer.dispSizeY+displayOffsetV; + maxDispSizeY = ((acv<<1)-field); + if(dispSizeY>maxDispSizeY) dispSizeY -= (acv<<1)-field; + else dispSizeY = 0; + + dispPosY = HorVer.dispPosY+displayOffsetV; + if(dispPosYmaxDispSizeY) dispSizeY -= maxDispSizeY; + else dispSizeY = 0; + + dispPosY = HorVer.dispPosY+displayOffsetV; + if(dispPosYdisplay_offsetH; + __SYS_UnlockSram(0); +#else + s8 offset; + if ( CONF_GetDisplayOffsetH(&offset) == 0 ) { + displayOffsetH = offset; + } else { + displayOffsetH = 0; + } +#endif + displayOffsetV = 0; +} + +static void __VIInit(u32 vimode) +{ + u32 cnt; + u32 vi_mode,interlace,progressive; + const struct _timing *cur_timing = NULL; + + vi_mode = ((vimode>>2)&0x07); + interlace = (vimode&0x01); + progressive = (vimode&0x02); + + cur_timing = __gettiming(vimode); + + //reset the interface + cnt = 0; + _viReg[1] = 0x02; + while(cnt<1000) cnt++; + _viReg[1] = 0x00; + + // now begin to setup the interface + _viReg[2] = ((cur_timing->hcs<<8)|cur_timing->hce); //set HCS & HCE + _viReg[3] = cur_timing->hlw; //set Half Line Width + + _viReg[4] = (cur_timing->hbs640<<1); //set HBS640 + _viReg[5] = ((cur_timing->hbe640<<7)|cur_timing->hsy); //set HBE640 & HSY + + _viReg[0] = cur_timing->equ; + + _viReg[6] = (cur_timing->psbOdd+2); //set PSB odd field + _viReg[7] = (cur_timing->prbOdd+((cur_timing->acv<<1)-2)); //set PRB odd field + + _viReg[8] = (cur_timing->psbEven+2); //set PSB even field + _viReg[9] = (cur_timing->prbEven+((cur_timing->acv<<1)-2)); //set PRB even field + + _viReg[10] = ((cur_timing->be3<<5)|cur_timing->bs3); //set BE3 & BS3 + _viReg[11] = ((cur_timing->be1<<5)|cur_timing->bs1); //set BE1 & BS1 + + _viReg[12] = ((cur_timing->be4<<5)|cur_timing->bs4); //set BE4 & BS4 + _viReg[13] = ((cur_timing->be2<<5)|cur_timing->bs2); //set BE2 & BS2 + + _viReg[24] = (0x1000|((cur_timing->nhlines/2)+1)); + _viReg[25] = (cur_timing->hlw+1); + + _viReg[26] = 0x1001; //set DI1 + _viReg[27] = 0x0001; //set DI1 + _viReg[36] = 0x2828; //set HSR + + if(vi_mode=VI_DEBUG_PAL) vi_mode = VI_NTSC; + if(progressive){ + _viReg[1] = ((vi_mode<<8)|0x0005); //set MODE & INT & enable + _viReg[54] = 0x0001; + } else { + _viReg[1] = ((vi_mode<<8)|(interlace<<2)|0x0001); + _viReg[54] = 0x0000; + } +} + +#if defined(HW_RVL) +static u32 __VISendI2CData(u8 addr,void *val,u32 len) +{ + u8 c; + s32 i,j; + u32 level,ret; + + if(i2cIdentFirst==0) { + __viCheckI2C(); + i2cIdentFirst = 1; + } + + _CPU_ISR_Disable(level); + + __viOpenI2C(1); + __viSetSCL(1); + + __viSetSDA(i2cIdentFlag); + udelay(4); + + ret = __sendSlaveAddress(addr); + if(ret==0) { + _CPU_ISR_Restore(level); + return 0; + } + + __viOpenI2C(1); + for(i=0;i> 8; + buf[2] = data & 0xFF; + __VISendI2CData(0xe0,buf,3); + udelay(2); +} + +static void __VIWriteI2CRegister32(u8 reg, u32 data) +{ + u8 buf[5]; + buf[0] = reg; + buf[1] = data >> 24; + buf[2] = (data >> 16) & 0xFF; + buf[3] = (data >> 8) & 0xFF; + buf[4] = data & 0xFF; + __VISendI2CData(0xe0,buf,5); + udelay(2); +} + +static void __VIWriteI2CRegisterBuf(u8 reg, int size, u8 *data) +{ + u8 buf[0x100]; + buf[0] = reg; + memcpy(&buf[1], data, size); + __VISendI2CData(0xe0,buf,size+1); + udelay(2); +} + +static void __VISetYUVSEL(u8 dtvstatus) +{ + if(currTvMode==VI_NTSC) vdacFlagRegion = 0x0000; + else if(currTvMode==VI_PAL || currTvMode==VI_EURGB60) vdacFlagRegion = 0x0002; + else if(currTvMode==VI_MPAL) vdacFlagRegion = 0x0001; + else vdacFlagRegion = 0x0000; + + __VIWriteI2CRegister8(0x01, _SHIFTL(dtvstatus,5,3)|(vdacFlagRegion&0x1f)); +} + +static void __VISetFilterEURGB60(u8 enable) +{ + __VIWriteI2CRegister8(0x6e, enable); +} + +static void __VISetupEncoder(void) +{ + u8 macrobuf[0x1a]; + + u8 gamma[0x21] = { + 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, + 0x10, 0x00, 0x10, 0x00, 0x10, 0x20, 0x40, 0x60, + 0x80, 0xa0, 0xeb, 0x10, 0x00, 0x20, 0x00, 0x40, + 0x00, 0x60, 0x00, 0x80, 0x00, 0xa0, 0x00, 0xeb, + 0x00 + }; + + u8 dtv, tv; + + tv = VIDEO_GetCurrentTvMode(); + dtv = (_viReg[55]&0x01); + oldDtvStatus = dtv; + + // SetRevolutionModeSimple + + memset(macrobuf, 0, 0x1a); + + __VIWriteI2CRegister8(0x6a, 1); + __VIWriteI2CRegister8(0x65, 1); + __VISetYUVSEL(dtv); + __VIWriteI2CRegister8(0x00, 0); + __VIWriteI2CRegister16(0x71, 0x8e8e); + __VIWriteI2CRegister8(0x02, 7); + __VIWriteI2CRegister16(0x05, 0x0000); + __VIWriteI2CRegister16(0x08, 0x0000); + __VIWriteI2CRegister32(0x7A, 0x00000000); + + // Macrovision crap + __VIWriteI2CRegisterBuf(0x40, sizeof(macrobuf), macrobuf); + + // Sometimes 1 in RGB mode? (reg 1 == 3) + __VIWriteI2CRegister8(0x0A, 0); + + __VIWriteI2CRegister8(0x03, 1); + + __VIWriteI2CRegisterBuf(0x10, sizeof(gamma), gamma); + + __VIWriteI2CRegister8(0x04, 1); + + if(tv==VI_EURGB60) __VISetFilterEURGB60(1); + else __VISetFilterEURGB60(0); + oldTvStatus = tv; + +} +#endif + +static inline void __getCurrentDisplayPosition(u32 *px,u32 *py) +{ + u32 hpos = 0; + u32 vpos = 0; + u32 vpos_old; + + vpos = (_viReg[22]&0x7ff); + do { + vpos_old = vpos; + hpos = (_viReg[23]&0x7ff); + vpos = (_viReg[22]&0x7ff); + } while(vpos_old!=vpos); + *px = hpos; + *py = vpos; +} + +static inline u32 __getCurrentHalfLine() +{ + u32 vpos = 0; + u32 hpos = 0; + + __getCurrentDisplayPosition(&hpos,&vpos); + + hpos--; + vpos--; + vpos <<= 1; + + return vpos+(hpos/currTiming->hlw); +} + +static inline u32 __getCurrentFieldEvenOdd() +{ + u32 hline; + + hline = __getCurrentHalfLine(); + if(hlinenhlines) return 1; + + return 0; +} + +static inline u32 __VISetRegs() +{ + u32 val; + u64 mask; + + if(shdw_changeMode==1){ + if(!__getCurrentFieldEvenOdd()) return 0; + } + + while(shdw_changed) { + val = cntlzd(shdw_changed); + _viReg[val] = shdw_regs[val]; + mask = VI_REGCHANGE(val); + shdw_changed &= ~mask; + } + shdw_changeMode = 0; + currTiming = HorVer.timing; + currTvMode = HorVer.tv; + + currentFb = nextFb; + + return 1; +} + +static void __VIDisplayPositionToXY(s32 xpos,s32 ypos,s32 *px,s32 *py) +{ + u32 hpos,vpos; + u32 hline,val; + + hpos = (xpos-1); + vpos = (ypos-1); + hline = ((vpos<<1)+(hpos/currTiming->hlw)); + + *px = (s32)hpos; + if(HorVer.nonInter==0x0000) { + if(hlinenhlines) { + val = currTiming->prbOdd+(currTiming->equ*3); + if(hline>=val) { + val = (currTiming->nhlines-currTiming->psbOdd); + if(hlineequ*3))-currTiming->prbOdd)&~0x01); + } else + *py = -1; + } else + *py = -1; + } else { + hline -= currTiming->psbOdd; + val = (currTiming->prbEven+(currTiming->equ*3)); + if(hline>=val) { + val = (currTiming->nhlines-currTiming->psbEven); + if(hlineequ*3))-currTiming->prbEven)&~0x01)+1); + } else + *py = -1; + } else + *py = -1; + } + } else if(HorVer.nonInter==0x0001) { + if(hline>=currTiming->nhlines) hline -= currTiming->nhlines; + + val = (currTiming->prbOdd+(currTiming->equ*3)); + if(hline>=val) { + val = (currTiming->nhlines-currTiming->psbOdd); + if(hlineequ*3))-currTiming->prbOdd)&~0x01); + } else + *py = -1; + } else + *py = -1; + } else if(HorVer.nonInter==0x0002) { + if(hlinenhlines) { + val = currTiming->prbOdd+(currTiming->equ*3); + if(hline>=val) { + val = (currTiming->nhlines-currTiming->psbOdd); + if(hlineequ*3))-currTiming->prbOdd); + } else + *py = -1; + } else + *py = -1; + } else { + hline -= currTiming->psbOdd; + val = (currTiming->prbEven+(currTiming->equ*3)); + if(hline>=val) { + val = (currTiming->nhlines-currTiming->psbEven); + if(hlineequ*3))-currTiming->prbEven)&~0x01); + } else + *py = -1; + } else + *py = -1; + } + } +} + +static inline void __VIGetCurrentPosition(s32 *px,s32 *py) +{ + s32 xpos,ypos; + + __getCurrentDisplayPosition((u32*)&xpos,(u32*)&ypos); + __VIDisplayPositionToXY(xpos,ypos,px,py); +} + +static void __VIRetraceHandler(u32 nIrq,void *pCtx) +{ +#if defined(HW_RVL) + u8 dtv, tv; +#endif + u32 ret = 0; + u32 intr; + s32 xpos,ypos; + + intr = _viReg[24]; + if(intr&0x8000) { + _viReg[24] = intr&~0x8000; + ret |= 0x01; + } + + intr = _viReg[26]; + if(intr&0x8000) { + _viReg[26] = intr&~0x8000; + ret |= 0x02; + } + + intr = _viReg[28]; + if(intr&0x8000) { + _viReg[28] = intr&~0x8000; + ret |= 0x04; + } + + intr = _viReg[30]; + if(intr&0x8000) { + _viReg[30] = intr&~0x8000; + ret |= 0x08; + } + + intr = _viReg[30]; + if(ret&0x04 || ret&0x08) { + if(positionCB!=NULL) { + __VIGetCurrentPosition(&xpos,&ypos); + positionCB(xpos,ypos); + } + } + + retraceCount++; + if(preRetraceCB) + preRetraceCB(retraceCount); + + if(flushFlag) { + if(__VISetRegs()) { + flushFlag = 0; + SI_RefreshSamplingRate(); + } + } +#if defined(HW_RVL) + tv = VIDEO_GetCurrentTvMode(); + dtv = (_viReg[55]&0x01); + if(dtv!=oldDtvStatus || tv!=oldTvStatus) __VISetYUVSEL(dtv); + oldDtvStatus = dtv; + + if(tv!=oldTvStatus) { + if(tv==VI_EURGB60) __VISetFilterEURGB60(1); + else __VISetFilterEURGB60(0); + } + oldTvStatus = tv; +#endif + if(postRetraceCB) + postRetraceCB(retraceCount); + + LWP_ThreadBroadcast(video_queue); +} + +void* VIDEO_GetNextFramebuffer() +{ + return nextFb; +} + +void* VIDEO_GetCurrentFramebuffer() +{ + return currentFb; +} + +void VIDEO_Init() +{ + u32 level,vimode = 0; + + _CPU_ISR_Disable(level); + + if(!(_viReg[1]&0x0001)) + __VIInit(VI_TVMODE_NTSC_INT); + + retraceCount = 0; + changed = 0; + shdw_changed = 0; + shdw_changeMode = 0; + flushFlag = 0; + + _viReg[38] = ((taps[1]>>6)|(taps[2]<<4)); + _viReg[39] = (taps[0]|_SHIFTL(taps[1],10,6)); + _viReg[40] = ((taps[4]>>6)|(taps[5]<<4)); + _viReg[41] = (taps[3]|_SHIFTL(taps[4],10,6)); + _viReg[42] = ((taps[7]>>6)|(taps[8]<<4)); + _viReg[43] = (taps[6]|_SHIFTL(taps[7],10,6)); + _viReg[44] = (taps[11]|(taps[12]<<8)); + _viReg[45] = (taps[9]|(taps[10]<<8)); + _viReg[46] = (taps[15]|(taps[16]<<8)); + _viReg[47] = (taps[13]|(taps[14]<<8)); + _viReg[48] = (taps[19]|(taps[20]<<8)); + _viReg[49] = (taps[17]|(taps[18]<<8)); + _viReg[50] = (taps[23]|(taps[24]<<8)); + _viReg[51] = (taps[21]|(taps[22]<<8)); + _viReg[56] = 640; + + __importAdjustingValues(); + + HorVer.nonInter = _SHIFTR(_viReg[1],2,1); + HorVer.tv = _SHIFTR(_viReg[1],8,2); + + vimode = HorVer.nonInter; + if(HorVer.tv!=VI_DEBUG) vimode += (HorVer.tv<<2); + currTiming = __gettiming(vimode); + currTvMode = HorVer.tv; + + regs[1] = _viReg[1]; + HorVer.timing = currTiming; + HorVer.dispSizeX = 640; + HorVer.dispSizeY = currTiming->acv<<1; + HorVer.dispPosX = (VI_MAX_WIDTH_NTSC-HorVer.dispSizeX)/2; + HorVer.dispPosY = 0; + + __adjustPosition(currTiming->acv); + + HorVer.fbSizeX = 640; + HorVer.fbSizeY = currTiming->acv<<1; + HorVer.panPosX = 0; + HorVer.panPosY = 0; + HorVer.panSizeX = 640; + HorVer.panSizeY = currTiming->acv<<1; + HorVer.fbMode = VI_XFBMODE_SF; + HorVer.wordPerLine = 40; + HorVer.std = 40; + HorVer.wpl = 40; + HorVer.xof = 0; + HorVer.black = 1; + HorVer.threeD = 0; + HorVer.bfbb = 0; + HorVer.tfbb = 0; + HorVer.rbfbb = 0; + HorVer.rtfbb = 0; + + _viReg[24] &= ~0x8000; + _viReg[26] &= ~0x8000; + + preRetraceCB = NULL; + postRetraceCB = NULL; + + LWP_InitQueue(&video_queue); + + IRQ_Request(IRQ_PI_VI,__VIRetraceHandler,NULL); + __UnmaskIrq(IRQMASK(IRQ_PI_VI)); +#if defined(HW_RVL) + __VISetupEncoder(); +#endif + _CPU_ISR_Restore(level); +} + +void VIDEO_Configure(GXRModeObj *rmode) +{ + u16 dcr; + u32 nonint,vimode,level; + const struct _timing *curtiming; + _CPU_ISR_Disable(level); + nonint = (rmode->viTVMode&0x0003); + if(nonint!=HorVer.nonInter) { + changeMode = 1; + HorVer.nonInter = nonint; + } + HorVer.tv = _SHIFTR(rmode->viTVMode,2,3); + HorVer.dispPosX = rmode->viXOrigin; + HorVer.dispPosY = rmode->viYOrigin; + if(HorVer.nonInter==VI_NON_INTERLACE) HorVer.dispPosY = HorVer.dispPosY<<1; + + HorVer.dispSizeX = rmode->viWidth; + HorVer.fbSizeX = rmode->fbWidth; + HorVer.fbSizeY = rmode->xfbHeight; + HorVer.fbMode = rmode->xfbMode; + HorVer.panSizeX = HorVer.fbSizeX; + HorVer.panSizeY = HorVer.fbSizeY; + HorVer.panPosX = 0; + HorVer.panPosY = 0; + + if(HorVer.nonInter==VI_PROGRESSIVE || HorVer.nonInter==(VI_NON_INTERLACE|VI_PROGRESSIVE)) HorVer.dispSizeY = HorVer.panSizeY; + else if(HorVer.fbMode==VI_XFBMODE_SF) HorVer.dispSizeY = HorVer.panSizeY<<1; + else HorVer.dispSizeY = HorVer.panSizeY; + + if(HorVer.nonInter==(VI_NON_INTERLACE|VI_PROGRESSIVE)) HorVer.threeD = 1; + else HorVer.threeD = 0; + + vimode = VI_TVMODE(HorVer.tv,HorVer.nonInter); + curtiming = __gettiming(vimode); + HorVer.timing = curtiming; + + __adjustPosition(curtiming->acv); + __setInterruptRegs(curtiming); + + dcr = regs[1]&~0x030c; + dcr |= _SHIFTL(HorVer.threeD,3,1); + if(HorVer.nonInter==VI_PROGRESSIVE || HorVer.nonInter==(VI_NON_INTERLACE|VI_PROGRESSIVE)) dcr |= 0x0004; + else dcr |= _SHIFTL(HorVer.nonInter,2,1); + if(!(HorVer.tv==VI_EURGB60)) dcr |= _SHIFTL(HorVer.tv,8,2); + regs[1] = dcr; + changed |= VI_REGCHANGE(1); + + regs[54] &= ~0x0001; + if(HorVer.nonInter==VI_PROGRESSIVE || HorVer.nonInter==(VI_NON_INTERLACE|VI_PROGRESSIVE)) regs[54] |= 0x0001; + changed |= VI_REGCHANGE(54); + + __setScalingRegs(HorVer.panSizeX,HorVer.dispSizeX,HorVer.threeD); + __setHorizontalRegs(curtiming,HorVer.adjustedDispPosX,HorVer.dispSizeX); + __setBBIntervalRegs(curtiming); + __setPicConfig(HorVer.fbSizeX,HorVer.fbMode,HorVer.panPosX,HorVer.panSizeX,&HorVer.wordPerLine,&HorVer.std,&HorVer.wpl,&HorVer.xof); + + if(fbSet) __setFbbRegs(&HorVer,&HorVer.tfbb,&HorVer.bfbb,&HorVer.rtfbb,&HorVer.rbfbb); + + __setVerticalRegs(HorVer.adjustedDispPosY,HorVer.adjustedDispSizeY,curtiming->equ,curtiming->acv,curtiming->prbOdd,curtiming->prbEven,curtiming->psbOdd,curtiming->psbEven,HorVer.black); + _CPU_ISR_Restore(level); +} + +void VIDEO_WaitVSync(void) +{ + u32 level; + u32 retcnt; + + _CPU_ISR_Disable(level); + retcnt = retraceCount; + do { + LWP_ThreadSleep(video_queue); + } while(retraceCount==retcnt); + _CPU_ISR_Restore(level); +} + +void VIDEO_SetFramebuffer(void *fb) +{ + u32 level; + + _CPU_ISR_Disable(level); + fbSet = 1; + HorVer.bufAddr = fb; + __setFbbRegs(&HorVer,&HorVer.tfbb,&HorVer.bfbb,&HorVer.rtfbb,&HorVer.rbfbb); + _viReg[14] = regs[14]; + _viReg[15] = regs[15]; + + _viReg[18] = regs[18]; + _viReg[19] = regs[19]; + + if(HorVer.threeD) { + _viReg[16] = regs[16]; + _viReg[17] = regs[17]; + + _viReg[20] = regs[20]; + _viReg[21] = regs[21]; + } + _CPU_ISR_Restore(level); +} + +void VIDEO_SetNextFramebuffer(void *fb) +{ + u32 level; + _CPU_ISR_Disable(level); + fbSet = 1; + HorVer.bufAddr = fb; + __setFbbRegs(&HorVer,&HorVer.tfbb,&HorVer.bfbb,&HorVer.rtfbb,&HorVer.rbfbb); + _CPU_ISR_Restore(level); +} + +void VIDEO_SetNextRightFramebuffer(void *fb) +{ + u32 level; + + _CPU_ISR_Disable(level); + fbSet = 1; + HorVer.rbufAddr = fb; + __setFbbRegs(&HorVer,&HorVer.tfbb,&HorVer.bfbb,&HorVer.rtfbb,&HorVer.rbfbb); + _CPU_ISR_Restore(level); +} + +void VIDEO_Flush() +{ + u32 level; + u32 val; + u64 mask; + + _CPU_ISR_Disable(level); + shdw_changeMode |= changeMode; + changeMode = 0; + + shdw_changed |= changed; + while(changed) { + val = cntlzd(changed); + shdw_regs[val] = regs[val]; + mask = VI_REGCHANGE(val); + changed &= ~mask; + } + flushFlag = 1; + nextFb = HorVer.bufAddr; + _CPU_ISR_Restore(level); +} + +void VIDEO_SetBlack(bool black) +{ + u32 level; + const struct _timing *curtiming; + + _CPU_ISR_Disable(level); + HorVer.black = black; + curtiming = HorVer.timing; + __setVerticalRegs(HorVer.adjustedDispPosY,HorVer.dispSizeY,curtiming->equ,curtiming->acv,curtiming->prbOdd,curtiming->prbEven,curtiming->psbOdd,curtiming->psbEven,HorVer.black); + _CPU_ISR_Restore(level); +} + +u32 VIDEO_GetNextField() +{ + u32 level,nextfield; + + _CPU_ISR_Disable(level); + nextfield = __getCurrentFieldEvenOdd()^1; //we've to swap the result because it shows us only the current field,so we've the next field either even or odd + _CPU_ISR_Restore(level); + + return nextfield^(HorVer.adjustedDispPosY&0x0001); //if the YOrigin is at an odd position we've to swap it again, since the Fb registers are set swapped if this rule applies +} + +u32 VIDEO_GetCurrentTvMode() +{ + u32 mode; + u32 level; + u32 tv; + + _CPU_ISR_Disable(level); + mode = currTvMode; + + if(mode==VI_DEBUG) tv = VI_NTSC; + else if(mode==VI_EURGB60) tv = VI_EURGB60; + else if(mode==VI_MPAL) tv = VI_MPAL; + else if(mode==VI_NTSC) tv = VI_NTSC; + else tv = VI_PAL; + _CPU_ISR_Restore(level); + + return tv; +} + +GXRModeObj * VIDEO_GetPreferredMode(GXRModeObj *mode) +{ + +GXRModeObj *rmode = NULL; + +#if defined(HW_RVL) + u32 tvmode = CONF_GetVideo(); + if (CONF_GetProgressiveScan() > 0 && VIDEO_HaveComponentCable()) { + switch (tvmode) { + case CONF_VIDEO_NTSC: + rmode = &TVNtsc480Prog; + break; + case CONF_VIDEO_PAL: + if (CONF_GetEuRGB60() > 0) + rmode = &TVEurgb60Hz480Prog; + else rmode = &TVPal576ProgScale; + break; + case CONF_VIDEO_MPAL: + rmode = &TVMpal480Prog; + break; + default: + rmode = &TVNtsc480Prog; + } + } else { + switch (tvmode) { + case CONF_VIDEO_NTSC: + rmode = &TVNtsc480IntDf; + break; + case CONF_VIDEO_PAL: + if (CONF_GetEuRGB60() > 0) + rmode = &TVEurgb60Hz480IntDf; + else rmode = &TVPal576IntDfScale; + break; + case CONF_VIDEO_MPAL: + rmode = &TVMpal480IntDf; + break; + default: + rmode = &TVNtsc480IntDf; + } + } +#else + u32 tvmode = VIDEO_GetCurrentTvMode(); + if (VIDEO_HaveComponentCable()) { + switch (tvmode) { + case VI_NTSC: + rmode = &TVNtsc480Prog; + break; + case VI_PAL: + rmode = &TVPal576ProgScale; + break; + case VI_MPAL: + rmode = &TVMpal480Prog; + break; + case VI_EURGB60: + rmode = &TVEurgb60Hz480Prog; + break; + } + } else { + switch (tvmode) { + case VI_NTSC: + rmode = &TVNtsc480IntDf; + break; + case VI_PAL: + rmode = &TVPal576IntDfScale; + break; + case VI_MPAL: + rmode = &TVMpal480IntDf; + break; + case VI_EURGB60: + rmode = &TVEurgb60Hz480IntDf; + break; + } + } +#endif + + if ( NULL != mode ) { + memcpy( mode, rmode, sizeof(GXRModeObj)); + } else { + mode = rmode; + } + + return mode; + + +} + +u32 VIDEO_GetCurrentLine() +{ + u32 level,curr_hl = 0; + + _CPU_ISR_Disable(level); + curr_hl = __getCurrentHalfLine(); + _CPU_ISR_Restore(level); + + if(curr_hl>=currTiming->nhlines) curr_hl -=currTiming->nhlines; + curr_hl >>= 1; + + return curr_hl; +} + +VIRetraceCallback VIDEO_SetPreRetraceCallback(VIRetraceCallback callback) +{ + u32 level = 0; + VIRetraceCallback ret = preRetraceCB; + _CPU_ISR_Disable(level); + preRetraceCB = callback; + _CPU_ISR_Restore(level); + return ret; +} + +VIRetraceCallback VIDEO_SetPostRetraceCallback(VIRetraceCallback callback) +{ + u32 level = 0; + VIRetraceCallback ret = postRetraceCB; + _CPU_ISR_Disable(level); + postRetraceCB = callback; + _CPU_ISR_Restore(level); + return ret; +} + +u32 VIDEO_GetFrameBufferSize(GXRModeObj *rmode) { + u16 w, h; + + w = VIDEO_PadFramebufferWidth(rmode->fbWidth); + h = rmode->xfbHeight; + + if (rmode->aa) + h += 4; + + return w * h * VI_DISPLAY_PIX_SZ; +} + +void VIDEO_ClearFrameBuffer(GXRModeObj *rmode,void *fb,u32 color) +{ + __VIClearFramebuffer(fb, VIDEO_GetFrameBufferSize(rmode), color); +} + +u32 VIDEO_HaveComponentCable(void) +{ + return (_viReg[55]&0x01); +} diff --git a/wii/libogc/libogc/video_asm.S b/wii/libogc/libogc/video_asm.S new file mode 100644 index 0000000000..b8cd37329e --- /dev/null +++ b/wii/libogc/libogc/video_asm.S @@ -0,0 +1,106 @@ +/*------------------------------------------------------------- + +video_asm.S -- VIDEO subsystem assembler support + +Copyright (C) 2004 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + + +#include + + .globl __VIClearFramebuffer + //r3 = dst, r4 = length(bytes),r5 = color +__VIClearFramebuffer: + srwi. r0,r4,8 + beq 2f + mtctr r0 + subi r3,r3,4 +1: stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + stwu r5,4(r3) + bdnz 1b +2: blr diff --git a/wii/libogc/libogc/wiilaunch.c b/wii/libogc/libogc/wiilaunch.c new file mode 100644 index 0000000000..29072cb74d --- /dev/null +++ b/wii/libogc/libogc/wiilaunch.c @@ -0,0 +1,409 @@ +/*------------------------------------------------------------- + +wiilaunch.c -- Wii NAND title launching and argument passing + +Copyright (C) 2008 +Hector Martin (marcan) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + +#if defined(HW_RVL) + +#include +#include +#include +#include +#include +#include "ipc.h" +#include "asm.h" +#include "processor.h" +#include "es.h" +#include "video.h" +#include "network.h" +#include "wiilaunch.h" + +static char __nandbootinfo[] ATTRIBUTE_ALIGN(32) = "/shared2/sys/NANDBOOTINFO"; +static char __stateflags[] ATTRIBUTE_ALIGN(32) = "/title/00000001/00000002/data/state.dat"; + +static int __initialized = 0; +static char args_set = 0; + +typedef struct { + u32 checksum; + u32 argsoff; + u8 unk1; + u8 unk2; + u8 apptype; + u8 titletype; + u32 launchcode; + u32 unknown[2]; + u64 launcher; + u8 argbuf[0x1000]; +} NANDBootInfo; + +typedef struct { + u32 checksum; + u8 flags; + u8 type; + u8 discstate; + u8 returnto; + u32 unknown[6]; +} StateFlags; + +#define TYPE_RETURN 3 +#define TYPE_NANDBOOT 4 +#define TYPE_SHUTDOWNSYSTEM 5 +#define RETURN_TO_MENU 0 +#define RETURN_TO_SETTINGS 1 +#define RETURN_TO_ARGS 2 + + +static NANDBootInfo nandboot ATTRIBUTE_ALIGN(32); + +static StateFlags stateflags ATTRIBUTE_ALIGN(32); + +static u32 __CalcChecksum(u32 *buf, int len) +{ + u32 sum = 0; + int i; + len = (len/4); + + for(i=1; i 0x1000) + return WII_E2BIG; + + argp = 0x1000 - argslen; + argvp = 0x1000 - buflen; + + memset(&nandboot.argbuf, 0, sizeof(nandboot.argbuf)); + + nandboot.argsoff = 0x1000 + argvp; + *((u32*)&nandboot.argbuf[argvp]) = argc; + argvp += 4; + + for(i=0; i 4) { + return WII_EINTERNAL; + } + res = ES_GetTicketViews(titleID, views, numviews); + if(res < 0) + return res; + + net_wc24cleanup(); + + if (args_set == 0) + { + memset(&nandboot,0,sizeof(NANDBootInfo)); + nandboot.apptype = 0x81; + if(titleID == 0x100000002LL) + nandboot.titletype = 4; + else + nandboot.titletype = 2; + if(ES_GetTitleID(&nandboot.launcher) < 0) + nandboot.launcher = 0x0000000100000002LL; + nandboot.checksum = __CalcChecksum((u32*)&nandboot,sizeof(NANDBootInfo)); + __WII_WriteNANDBootInfo(); + } + VIDEO_SetBlack(1); + VIDEO_Flush(); + + res = ES_LaunchTitle(titleID, &views[0]); + if(res < 0) + return res; + return WII_EINTERNAL; +} + +s32 WII_LaunchTitleWithArgs(u64 titleID, int launchcode, ...) +{ + char argv0[20]; + const char *argv[256]; + int argc = 1; + va_list args; + int ret = 0; + + if(!__initialized) + return WII_ENOTINIT; + + sprintf(argv0, "%016llx", titleID); + + argv[0] = argv0; + + va_start(args, launchcode); + + do { + argv[argc++] = va_arg(args, const char *); + } while(argv[argc - 1] != NULL); + + va_end(args); + + if(ES_GetTitleID(&nandboot.launcher) < 0) + nandboot.launcher = 0x100000002LL; + + if(titleID == 0x100000002LL) + nandboot.titletype = 4; + else + nandboot.titletype = 2; + nandboot.apptype = 0x81; + nandboot.launchcode = launchcode; + + stateflags.type = TYPE_RETURN; + stateflags.returnto = RETURN_TO_ARGS; + + __WII_SetArgs(argv); + + __WII_WriteStateFlags(); + __WII_WriteNANDBootInfo(); + + args_set = 1; + + ret = WII_LaunchTitle(titleID); + if(ret < 0) + args_set = 0; + + return ret; +} + +s32 WII_ReturnToMenu(void) +{ + if(!__initialized) + return WII_ENOTINIT; + stateflags.type = TYPE_RETURN; + stateflags.returnto = RETURN_TO_MENU; + __WII_WriteStateFlags(); + return WII_LaunchTitle(0x100000002LL); +} + +s32 WII_ReturnToSettings(void) +{ + if(!__initialized) + return WII_ENOTINIT; + stateflags.type = TYPE_RETURN; + stateflags.returnto = RETURN_TO_SETTINGS; + __WII_WriteStateFlags(); + return WII_LaunchTitle(0x100000002LL); +} + +s32 WII_ReturnToSettingsPage(const char *page) +{ + if(!__initialized) + return WII_ENOTINIT; + + return WII_LaunchTitleWithArgs(0x100000002LL, 1, page, NULL); +} + +s32 WII_OpenURL(const char *url) +{ + u32 tmdsize; + u64 tid = 0; + u64 *list; + u32 titlecount; + s32 ret; + u32 i; + + if(!__initialized) + return WII_ENOTINIT; + + ret = ES_GetNumTitles(&titlecount); + if(ret < 0) + return WII_EINTERNAL; + + list = memalign(32, titlecount * sizeof(u64) + 32); + + ret = ES_GetTitles(list, titlecount); + if(ret < 0) { + free(list); + return WII_EINTERNAL; + } + + for(i=0; i + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +#if defined(HW_RVL) + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#define SDIO_HEAPSIZE (5*1024) + +#define PAGE_SIZE512 512 + +#define SDIOHCR_RESPONSE 0x10 +#define SDIOHCR_HOSTCONTROL 0x28 +#define SDIOHCR_POWERCONTROL 0x29 +#define SDIOHCR_CLOCKCONTROL 0x2c +#define SDIOHCR_TIMEOUTCONTROL 0x2e +#define SDIOHCR_SOFTWARERESET 0x2f + +#define SDIOHCR_HOSTCONTROL_4BIT 0x02 + +#define SDIO_DEFAULT_TIMEOUT 0xe + +#define IOCTL_SDIO_WRITEHCREG 0x01 +#define IOCTL_SDIO_READHCREG 0x02 +#define IOCTL_SDIO_READCREG 0x03 +#define IOCTL_SDIO_RESETCARD 0x04 +#define IOCTL_SDIO_WRITECREG 0x05 +#define IOCTL_SDIO_SETCLK 0x06 +#define IOCTL_SDIO_SENDCMD 0x07 +#define IOCTL_SDIO_SETBUSWIDTH 0x08 +#define IOCTL_SDIO_READMCREG 0x09 +#define IOCTL_SDIO_WRITEMCREG 0x0A +#define IOCTL_SDIO_GETSTATUS 0x0B +#define IOCTL_SDIO_GETOCR 0x0C +#define IOCTL_SDIO_READDATA 0x0D +#define IOCTL_SDIO_WRITEDATA 0x0E + +#define SDIOCMD_TYPE_BC 1 +#define SDIOCMD_TYPE_BCR 2 +#define SDIOCMD_TYPE_AC 3 +#define SDIOCMD_TYPE_ADTC 4 + +#define SDIO_RESPONSE_NONE 0 +#define SDIO_RESPONSE_R1 1 +#define SDIO_RESPONSE_R1B 2 +#define SDIO_RESPOSNE_R2 3 +#define SDIO_RESPONSE_R3 4 +#define SDIO_RESPONSE_R4 5 +#define SDIO_RESPONSE_R5 6 +#define SDIO_RESPONSE_R6 7 + +#define SDIO_CMD_GOIDLE 0x00 +#define SDIO_CMD_ALL_SENDCID 0x02 +#define SDIO_CMD_SENDRCA 0x03 +#define SDIO_CMD_SELECT 0x07 +#define SDIO_CMD_DESELECT 0x07 +#define SDIO_CMD_SENDIFCOND 0x08 +#define SDIO_CMD_SENDCSD 0x09 +#define SDIO_CMD_SENDCID 0x0A +#define SDIO_CMD_SENDSTATUS 0x0D +#define SDIO_CMD_SETBLOCKLEN 0x10 +#define SDIO_CMD_READBLOCK 0x11 +#define SDIO_CMD_READMULTIBLOCK 0x12 +#define SDIO_CMD_WRITEBLOCK 0x18 +#define SDIO_CMD_WRITEMULTIBLOCK 0x19 +#define SDIO_CMD_APPCMD 0x37 + +#define SDIO_ACMD_SETBUSWIDTH 0x06 +#define SDIO_ACMD_SENDSCR 0x33 +#define SDIO_ACMD_SENDOPCOND 0x29 + +#define SDIO_STATUS_CARD_INSERTED 0x1 +#define SDIO_STATUS_CARD_INITIALIZED 0x10000 +#define SDIO_STATUS_CARD_SDHC 0x100000 + +#define READ_BL_LEN ((u8)(__sd0_csd[5]&0x0f)) +#define WRITE_BL_LEN ((u8)(((__sd0_csd[12]&0x03)<<2)|((__sd0_csd[13]>>6)&0x03))) + +static u8 *rw_buffer = NULL; + +struct _sdiorequest +{ + u32 cmd; + u32 cmd_type; + u32 rsp_type; + u32 arg; + u32 blk_cnt; + u32 blk_size; + void *dma_addr; + u32 isdma; + u32 pad0; +}; + +struct _sdioresponse +{ + u32 rsp_fields[3]; + u32 acmd12_response; +}; + +static s32 hId = -1; + +static s32 __sd0_fd = -1; +static u16 __sd0_rca = 0; +static s32 __sd0_initialized = 0; +static s32 __sd0_sdhc = 0; +//static u8 __sd0_csd[16]; +static u8 __sd0_cid[16]; + +static s32 __sdio_initialized = 0; + +static char _sd0_fs[] ATTRIBUTE_ALIGN(32) = "/dev/sdio/slot0"; + +static s32 __sdio_sendcommand(u32 cmd,u32 cmd_type,u32 rsp_type,u32 arg,u32 blk_cnt,u32 blk_size,void *buffer,void *reply,u32 rlen) +{ + s32 ret; + STACK_ALIGN(ioctlv,iovec,3,32); + STACK_ALIGN(struct _sdiorequest,request,1,32); + STACK_ALIGN(struct _sdioresponse,response,1,32); + + request->cmd = cmd; + request->cmd_type = cmd_type; + request->rsp_type = rsp_type; + request->arg = arg; + request->blk_cnt = blk_cnt; + request->blk_size = blk_size; + request->dma_addr = buffer; + request->isdma = ((buffer!=NULL)?1:0); + request->pad0 = 0; + + if(request->isdma || __sd0_sdhc == 1) { + iovec[0].data = request; + iovec[0].len = sizeof(struct _sdiorequest); + iovec[1].data = buffer; + iovec[1].len = (blk_size*blk_cnt); + iovec[2].data = response; + iovec[2].len = sizeof(struct _sdioresponse); + ret = IOS_Ioctlv(__sd0_fd,IOCTL_SDIO_SENDCMD,2,1,iovec); + } else + ret = IOS_Ioctl(__sd0_fd,IOCTL_SDIO_SENDCMD,request,sizeof(struct _sdiorequest),response,sizeof(struct _sdioresponse)); + + if(reply && !(rlen>16)) memcpy(reply,response,rlen); + +// printf(" cmd= %08x\n", cmd); + + return ret; +} + +static s32 __sdio_setclock(u32 set) +{ + s32 ret; + STACK_ALIGN(u32,clock,1,32); + + *clock = set; + ret = IOS_Ioctl(__sd0_fd,IOCTL_SDIO_SETCLK,clock,sizeof(u32),NULL,0); + + return ret; +} +static s32 __sdio_getstatus() +{ + s32 ret; + STACK_ALIGN(u32,status,1,32); + + ret = IOS_Ioctl(__sd0_fd,IOCTL_SDIO_GETSTATUS,NULL,0,status,sizeof(u32)); + if(ret<0) return ret; + + return *status; +} + +static s32 __sdio_resetcard() +{ + s32 ret; + STACK_ALIGN(u32,status,1,32); + + __sd0_rca = 0; + ret = IOS_Ioctl(__sd0_fd,IOCTL_SDIO_RESETCARD,NULL,0,status,sizeof(u32)); + if(ret<0) return ret; + + __sd0_rca = (u16)(*status>>16); + return (*status&0xffff); +} + +static s32 __sdio_gethcr(u8 reg, u8 size, u32 *val) +{ + s32 ret; + STACK_ALIGN(u32,hcr_value,1,32); + STACK_ALIGN(u32,hcr_query,6,32); + + if(val==NULL) return IPC_EINVAL; + + *hcr_value = 0; + *val = 0; + hcr_query[0] = reg; + hcr_query[1] = 0; + hcr_query[2] = 0; + hcr_query[3] = size; + hcr_query[4] = 0; + hcr_query[5] = 0; + ret = IOS_Ioctl(__sd0_fd,IOCTL_SDIO_READHCREG,(void*)hcr_query,24,hcr_value,sizeof(u32)); + *val = *hcr_value; + + + return ret; +} + +static s32 __sdio_sethcr(u8 reg, u8 size, u32 data) +{ + s32 ret; + STACK_ALIGN(u32,hcr_query,6,32); + + hcr_query[0] = reg; + hcr_query[1] = 0; + hcr_query[2] = 0; + hcr_query[3] = size; + hcr_query[4] = data; + hcr_query[5] = 0; + ret = IOS_Ioctl(__sd0_fd,IOCTL_SDIO_WRITEHCREG,(void*)hcr_query,24,NULL,0); + + + return ret; +} + +static s32 __sdio_waithcr(u8 reg, u8 size, u8 unset, u32 mask) +{ + u32 val; + s32 ret; + s32 tries = 10; + + while(tries-- > 0) + { + ret = __sdio_gethcr(reg, size, &val); + if(ret < 0) return ret; + if((unset && !(val & mask)) || (!unset && (val & mask))) return 0; + usleep(10000); + } + + return -1; +} + +static s32 __sdio_setbuswidth(u32 bus_width) +{ + s32 ret; + u32 hc_reg = 0; + + ret = __sdio_gethcr(SDIOHCR_HOSTCONTROL, 1, &hc_reg); + if(ret<0) return ret; + + hc_reg &= 0xff; + hc_reg &= ~SDIOHCR_HOSTCONTROL_4BIT; + if(bus_width==4) hc_reg |= SDIOHCR_HOSTCONTROL_4BIT; + + return __sdio_sethcr(SDIOHCR_HOSTCONTROL, 1, hc_reg); +} + +static s32 __sd0_getrca() +{ + s32 ret; + u32 rca; + + ret = __sdio_sendcommand(SDIO_CMD_SENDRCA,0,SDIO_RESPONSE_R5,0,0,0,NULL,&rca,sizeof(rca)); + if(ret<0) return ret; + + __sd0_rca = (u16)(rca>>16); + return (rca&0xffff); +} + +static s32 __sd0_select() +{ + s32 ret; + + ret = __sdio_sendcommand(SDIO_CMD_SELECT,SDIOCMD_TYPE_AC,SDIO_RESPONSE_R1B,(__sd0_rca<<16),0,0,NULL,NULL,0); + + return ret; +} + +static s32 __sd0_deselect() +{ + s32 ret; + + ret = __sdio_sendcommand(SDIO_CMD_DESELECT,SDIOCMD_TYPE_AC,SDIO_RESPONSE_R1B,0,0,0,NULL,NULL,0); + + return ret; +} + +static s32 __sd0_setblocklength(u32 blk_len) +{ + s32 ret; + + ret = __sdio_sendcommand(SDIO_CMD_SETBLOCKLEN,SDIOCMD_TYPE_AC,SDIO_RESPONSE_R1,blk_len,0,0,NULL,NULL,0); + + return ret; +} + +static s32 __sd0_setbuswidth(u32 bus_width) +{ + u16 val; + s32 ret; + + val = 0x0000; + if(bus_width==4) val = 0x0002; + + ret = __sdio_sendcommand(SDIO_CMD_APPCMD,SDIOCMD_TYPE_AC,SDIO_RESPONSE_R1,(__sd0_rca<<16),0,0,NULL,NULL,0); + if(ret<0) return ret; + + ret = __sdio_sendcommand(SDIO_ACMD_SETBUSWIDTH,SDIOCMD_TYPE_AC,SDIO_RESPONSE_R1,val,0,0,NULL,NULL,0); + + return ret; +} + +static s32 __sd0_getcid() +{ + s32 ret; + + ret = __sdio_sendcommand(SDIO_CMD_ALL_SENDCID,0,SDIO_RESPOSNE_R2,(__sd0_rca<<16),0,0,NULL,__sd0_cid,16); + + return ret; +} + + +static bool __sd0_initio() +{ + s32 ret; + s32 tries; + u32 status; + struct _sdioresponse resp; + + __sdio_resetcard(); + status = __sdio_getstatus(); + + if(!(status & SDIO_STATUS_CARD_INSERTED)) + return false; + + if(!(status & SDIO_STATUS_CARD_INITIALIZED)) + { + // IOS doesn't like this card, so we need to convice it to accept it. + + // reopen the handle which makes IOS clean stuff up + IOS_Close(__sd0_fd); + __sd0_fd = IOS_Open(_sd0_fs,1); + + // reset the host controller + if(__sdio_sethcr(SDIOHCR_SOFTWARERESET, 1, 7) < 0) goto fail; + if(__sdio_waithcr(SDIOHCR_SOFTWARERESET, 1, 1, 7) < 0) goto fail; + + // initialize interrupts (sd_reset_card does this on success) + __sdio_sethcr(0x34, 4, 0x13f00c3); + __sdio_sethcr(0x38, 4, 0x13f00c3); + + // enable power + __sd0_sdhc = 1; + ret = __sdio_sethcr(SDIOHCR_POWERCONTROL, 1, 0xe); + if(ret < 0) goto fail; + ret = __sdio_sethcr(SDIOHCR_POWERCONTROL, 1, 0xf); + if(ret < 0) goto fail; + + // enable internal clock, wait until it gets stable and enable sd clock + ret = __sdio_sethcr(SDIOHCR_CLOCKCONTROL, 2, 0); + if(ret < 0) goto fail; + ret = __sdio_sethcr(SDIOHCR_CLOCKCONTROL, 2, 0x101); + if(ret < 0) goto fail; + ret = __sdio_waithcr(SDIOHCR_CLOCKCONTROL, 2, 0, 2); + if(ret < 0) goto fail; + ret = __sdio_sethcr(SDIOHCR_CLOCKCONTROL, 2, 0x107); + if(ret < 0) goto fail; + + // setup timeout + ret = __sdio_sethcr(SDIOHCR_TIMEOUTCONTROL, 1, SDIO_DEFAULT_TIMEOUT); + if(ret < 0) goto fail; + + // standard SDHC initialization process + ret = __sdio_sendcommand(SDIO_CMD_GOIDLE, 0, 0, 0, 0, 0, NULL, NULL, 0); + if(ret < 0) goto fail; + ret = __sdio_sendcommand(SDIO_CMD_SENDIFCOND, 0, SDIO_RESPONSE_R6, 0x1aa, 0, 0, NULL, &resp, sizeof(resp)); + if(ret < 0) goto fail; + if((resp.rsp_fields[0] & 0xff) != 0xaa) goto fail; + + tries = 10; + while(tries-- > 0) + { + ret = __sdio_sendcommand(SDIO_CMD_APPCMD, SDIOCMD_TYPE_AC,SDIO_RESPONSE_R1,0,0,0,NULL,NULL,0); + if(ret < 0) goto fail; + ret = __sdio_sendcommand(SDIO_ACMD_SENDOPCOND, 0, SDIO_RESPONSE_R3, 0x40300000, 0, 0, NULL, &resp, sizeof(resp)); + if(ret < 0) goto fail; + if(resp.rsp_fields[0] & (1 << 31)) break; + + usleep(10000); + } + if(tries < 0) goto fail; + + // FIXME: SDv2 cards which are not high-capacity won't work :/ + if(resp.rsp_fields[0] & (1 << 30)) + __sd0_sdhc = 1; + else + __sd0_sdhc = 0; + + ret = __sd0_getcid(); + if(ret < 0) goto fail; + ret = __sd0_getrca(); + if(ret < 0) goto fail; + } + else if(status&SDIO_STATUS_CARD_SDHC) + __sd0_sdhc = 1; + else + __sd0_sdhc = 0; + + ret = __sdio_setbuswidth(4); + if(ret<0) return false; + + ret = __sdio_setclock(1); + if(ret<0) return false; + + ret = __sd0_select(); + if(ret<0) return false; + + ret = __sd0_setblocklength(PAGE_SIZE512); + if(ret<0) { + ret = __sd0_deselect(); + return false; + } + + ret = __sd0_setbuswidth(4); + if(ret<0) { + ret = __sd0_deselect(); + return false; + } + __sd0_deselect(); + + __sd0_initialized = 1; + return true; + + fail: + __sdio_sethcr(SDIOHCR_SOFTWARERESET, 1, 7); + __sdio_waithcr(SDIOHCR_SOFTWARERESET, 1, 1, 7); + IOS_Close(__sd0_fd); + __sd0_fd = IOS_Open(_sd0_fs,1); + return false; +} + +bool sdio_Deinitialize() +{ + if(__sd0_fd>=0) + IOS_Close(__sd0_fd); + + __sd0_fd = -1; + __sdio_initialized = 0; + return true; +} + +bool sdio_Startup() +{ + if(__sdio_initialized==1) return true; + + if(hId<0) { + hId = iosCreateHeap(SDIO_HEAPSIZE); + if(hId<0) return false; + } + + if(rw_buffer == NULL) rw_buffer = iosAlloc(hId,(4*1024)); + if(rw_buffer == NULL) return false; + + __sd0_fd = IOS_Open(_sd0_fs,1); + + if(__sd0_fd<0) { + sdio_Deinitialize(); + return false; + } + + if(__sd0_initio()==false) { + sdio_Deinitialize(); + return false; + } + __sdio_initialized = 1; + return true; +} + + + +bool sdio_Shutdown() +{ + if(__sd0_initialized==0) return false; + + sdio_Deinitialize(); + + __sd0_initialized = 0; + return true; +} + +bool sdio_ReadSectors(sec_t sector, sec_t numSectors,void* buffer) +{ + s32 ret; + u8 *ptr; + sec_t blk_off; + + if(buffer==NULL) return false; + + ret = __sd0_select(); + if(ret<0) return false; + + if((u32)buffer & 0x1F) { + ptr = (u8*)buffer; + int secs_to_read; + while(numSectors>0) { + if(__sd0_sdhc == 0) blk_off = (sector*PAGE_SIZE512); + else blk_off = sector; + if(numSectors > 8)secs_to_read = 8; + else secs_to_read = numSectors; + ret = __sdio_sendcommand(SDIO_CMD_READMULTIBLOCK,SDIOCMD_TYPE_AC,SDIO_RESPONSE_R1,blk_off,secs_to_read,PAGE_SIZE512,rw_buffer,NULL,0); + if(ret>=0) { + memcpy(ptr,rw_buffer,PAGE_SIZE512*secs_to_read); + ptr += PAGE_SIZE512*secs_to_read; + sector+=secs_to_read; + numSectors-=secs_to_read; + } else + break; + } + } else { + if(__sd0_sdhc == 0) sector *= PAGE_SIZE512; + ret = __sdio_sendcommand(SDIO_CMD_READMULTIBLOCK,SDIOCMD_TYPE_AC,SDIO_RESPONSE_R1,sector,numSectors,PAGE_SIZE512,buffer,NULL,0); + } + + __sd0_deselect(); + + return (ret>=0); +} + +bool sdio_WriteSectors(sec_t sector, sec_t numSectors,const void* buffer) +{ + s32 ret; + u8 *ptr; + u32 blk_off; + + if(buffer==NULL) return false; + + ret = __sd0_select(); + if(ret<0) return false; + + if((u32)buffer & 0x1F) { + ptr = (u8*)buffer; + int secs_to_write; + while(numSectors>0) { + if(__sd0_sdhc == 0) blk_off = (sector*PAGE_SIZE512); + else blk_off = sector; + if(numSectors > 8)secs_to_write = 8; + else secs_to_write = numSectors; + memcpy(rw_buffer,ptr,PAGE_SIZE512*secs_to_write); + ret = __sdio_sendcommand(SDIO_CMD_WRITEMULTIBLOCK,SDIOCMD_TYPE_AC,SDIO_RESPONSE_R1,blk_off,secs_to_write,PAGE_SIZE512,rw_buffer,NULL,0); + if(ret>=0) { + ptr += PAGE_SIZE512*secs_to_write; + sector+=secs_to_write; + numSectors-=secs_to_write; + } else + break; + } + } else { + if(__sd0_sdhc == 0) sector *= PAGE_SIZE512; + ret = __sdio_sendcommand(SDIO_CMD_WRITEMULTIBLOCK,SDIOCMD_TYPE_AC,SDIO_RESPONSE_R1,sector,numSectors,PAGE_SIZE512,(char *)buffer,NULL,0); + } + + __sd0_deselect(); + + return (ret>=0); +} + +bool sdio_ClearStatus() +{ + return true; +} + +bool sdio_IsInserted() +{ + return ((__sdio_getstatus() & SDIO_STATUS_CARD_INSERTED) == + SDIO_STATUS_CARD_INSERTED); +} + +bool sdio_IsInitialized() +{ + return ((__sdio_getstatus() & SDIO_STATUS_CARD_INITIALIZED) == + SDIO_STATUS_CARD_INITIALIZED); +} + +const DISC_INTERFACE __io_wiisd = { + DEVICE_TYPE_WII_SD, + FEATURE_MEDIUM_CANREAD | FEATURE_MEDIUM_CANWRITE | FEATURE_WII_SD, + (FN_MEDIUM_STARTUP)&sdio_Startup, + (FN_MEDIUM_ISINSERTED)&sdio_IsInserted, + (FN_MEDIUM_READSECTORS)&sdio_ReadSectors, + (FN_MEDIUM_WRITESECTORS)&sdio_WriteSectors, + (FN_MEDIUM_CLEARSTATUS)&sdio_ClearStatus, + (FN_MEDIUM_SHUTDOWN)&sdio_Shutdown +}; + +#endif diff --git a/wii/libogc/libogc_license.txt b/wii/libogc/libogc_license.txt new file mode 100644 index 0000000000..a3dfd0581b --- /dev/null +++ b/wii/libogc/libogc_license.txt @@ -0,0 +1,20 @@ + Copyright (C) 2004 - 2009 + Michael Wiedenbauer (shagkur) + Dave Murphy (WinterMute) + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any + damages arising from the use of this software. + + Permission is granted to anyone to use this software for any + purpose, including commercial applications, and to alter it and + redistribute it freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you + must not claim that you wrote the original software. If you use + this software in a product, an acknowledgment in the product + documentation would be appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and + must not be misrepresented as being the original software. + 3. This notice may not be removed or altered from any source + distribution. diff --git a/wii/libogc/libwiikeyboard/keyboard.c b/wii/libogc/libwiikeyboard/keyboard.c new file mode 100644 index 0000000000..b7a67f5588 --- /dev/null +++ b/wii/libogc/libwiikeyboard/keyboard.c @@ -0,0 +1,664 @@ +/*------------------------------------------------------------- + +keyboard.c -- keyboard event system + +Copyright (C) 2008, 2009 +DAVY Guillaume davyg2@gmail.com +Brian Johnson brijohn@gmail.com +dhewg + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include "wsksymvar.h" + +#define KBD_THREAD_STACKSIZE (1024 * 4) +#define KBD_THREAD_PRIO 64 +#define KBD_THREAD_UDELAY (1000 * 10) +#define KBD_THREAD_KBD_SCAN_INTERVAL (3 * 100) + +static lwp_queue _queue; +static lwp_t _kbd_thread = LWP_THREAD_NULL; +static lwp_t _kbd_buf_thread = LWP_THREAD_NULL; +static bool _kbd_thread_running = false; +static bool _kbd_thread_quit = false; + +keysym_t ksym_upcase(keysym_t); + +extern const struct wscons_keydesc ukbd_keydesctab[]; + +static struct wskbd_mapdata _ukbd_keymapdata = { + ukbd_keydesctab, + KB_NONE +}; + +struct nameint { + int value; + char *name; +}; + +static struct nameint kbdenc_tab[] = { + KB_ENCTAB +}; + +static struct nameint kbdvar_tab[] = { + KB_VARTAB +}; + +static int _sc_maplen = 0; /* number of entries in sc_map */ +static struct wscons_keymap *_sc_map = 0; /* current translation map */ + +static u16 _modifiers; + +static int _composelen; /* remaining entries in _composebuf */ +static keysym_t _composebuf[2]; + +typedef struct { + u8 keycode; + u16 symbol; +} _keyheld; + +#define MAXHELD 8 +static _keyheld _held[MAXHELD]; + +typedef struct { + lwp_node node; + keyboard_event event; +} _node; + +static keyPressCallback _readKey_cb = NULL; + +static u8 *_kbd_stack[KBD_THREAD_STACKSIZE] ATTRIBUTE_ALIGN(8); +static u8 *_kbd_buf_stack[KBD_THREAD_STACKSIZE] ATTRIBUTE_ALIGN(8); + +static kbd_t _get_keymap_by_name(const char *identifier) { + char name[64]; + u8 i, j; + kbd_t encoding, variant; + + kbd_t res = KB_NONE; + + if (!identifier || (strlen(identifier) < 2)) + return res; + + i = 0; + for (i = 0; ukbd_keydesctab[i].name != 0; ++i) { + if (ukbd_keydesctab[i].name & KB_HANDLEDBYWSKBD) + continue; + + encoding = KB_ENCODING(ukbd_keydesctab[i].name); + variant = KB_VARIANT(ukbd_keydesctab[i].name); + + name[0] = 0; + for (j = 0; j < sizeof(kbdenc_tab) / sizeof(struct nameint); ++j) + if (encoding == kbdenc_tab[j].value) { + strcpy(name, kbdenc_tab[j].name); + break; + } + + if (strlen(name) < 1) + continue; + + for (j = 0; j < sizeof(kbdvar_tab) / sizeof(struct nameint); ++j) + if (variant & kbdvar_tab[j].value) { + strcat(name, "-"); + strcat(name, kbdvar_tab[j].name); + } + + if (!strcmp(identifier, name)) { + res = ukbd_keydesctab[i].name; + break; + } + } + + return res; +} + +//Add an event to the event queue +static s32 _kbd_addEvent(const keyboard_event *event) { + _node *n = malloc(sizeof(_node)); + n->event = *event; + + __lwp_queue_append(&_queue, (lwp_node*) n); + + return 1; +} + +void update_modifier(u_int type, int toggle, int mask) { + if (toggle) { + if (type == KEYBOARD_PRESSED) + _modifiers ^= mask; + } else { + if (type == KEYBOARD_RELEASED) + _modifiers &= ~mask; + else + _modifiers |= mask; + } +} + +//Event callback, gets called when an event occurs in usbkeyboard +static void _kbd_event_cb(USBKeyboard_event kevent) +{ + keyboard_event event; + struct wscons_keymap kp; + keysym_t *group; + int gindex; + keysym_t ksym; + int i; + + switch (kevent.type) { + case USBKEYBOARD_DISCONNECTED: + event.type = KEYBOARD_DISCONNECTED; + event.modifiers = 0; + event.keycode = 0; + event.symbol = 0; + + _kbd_addEvent(&event); + + return; + + case USBKEYBOARD_PRESSED: + event.type = KEYBOARD_PRESSED; + break; + + case USBKEYBOARD_RELEASED: + event.type = KEYBOARD_RELEASED; + break; + + default: + return; + } + + event.keycode = kevent.keyCode; + + wskbd_get_mapentry(&_ukbd_keymapdata, event.keycode, &kp); + + /* Now update modifiers */ + switch (kp.group1[0]) { + case KS_Shift_L: + update_modifier(event.type, 0, MOD_SHIFT_L); + break; + + case KS_Shift_R: + update_modifier(event.type, 0, MOD_SHIFT_R); + break; + + case KS_Shift_Lock: + update_modifier(event.type, 1, MOD_SHIFTLOCK); + break; + + case KS_Caps_Lock: + update_modifier(event.type, 1, MOD_CAPSLOCK); + USBKeyboard_SetLed(USBKEYBOARD_LEDCAPS, + MOD_ONESET(_modifiers, MOD_CAPSLOCK)); + break; + + case KS_Control_L: + update_modifier(event.type, 0, MOD_CONTROL_L); + break; + + case KS_Control_R: + update_modifier(event.type, 0, MOD_CONTROL_R); + break; + + case KS_Alt_L: + update_modifier(event.type, 0, MOD_META_L); + break; + + case KS_Alt_R: + update_modifier(event.type, 0, MOD_META_R); + break; + + case KS_Mode_switch: + update_modifier(event.type, 0, MOD_MODESHIFT); + break; + + case KS_Mode_Lock: + update_modifier(event.type, 1, MOD_MODELOCK); + break; + + case KS_Num_Lock: + update_modifier(event.type, 1, MOD_NUMLOCK); + USBKeyboard_SetLed(USBKEYBOARD_LEDNUM, + MOD_ONESET(_modifiers, MOD_NUMLOCK)); + break; + + case KS_Hold_Screen: + update_modifier(event.type, 1, MOD_HOLDSCREEN); + USBKeyboard_SetLed(USBKEYBOARD_LEDSCROLL, + MOD_ONESET(_modifiers, MOD_HOLDSCREEN)); + break; + } + + /* Get the keysym */ + if (_modifiers & (MOD_MODESHIFT|MOD_MODELOCK) && + !MOD_ONESET(_modifiers, MOD_ANYCONTROL)) + group = &kp.group2[0]; + else + group = &kp.group1[0]; + + if ((_modifiers & MOD_NUMLOCK) && + KS_GROUP(group[1]) == KS_GROUP_Keypad) { + gindex = !MOD_ONESET(_modifiers, MOD_ANYSHIFT); + ksym = group[gindex]; + } else { + /* CAPS alone should only affect letter keys */ + if ((_modifiers & (MOD_CAPSLOCK | MOD_ANYSHIFT)) == + MOD_CAPSLOCK) { + gindex = 0; + ksym = ksym_upcase(group[0]); + } else { + gindex = MOD_ONESET(_modifiers, MOD_ANYSHIFT); + ksym = group[gindex]; + } + } + + /* Process compose sequence and dead accents */ + switch (KS_GROUP(ksym)) { + case KS_GROUP_Mod: + if (ksym == KS_Multi_key) { + update_modifier(KEYBOARD_PRESSED, 0, MOD_COMPOSE); + _composelen = 2; + } + break; + + case KS_GROUP_Dead: + if (event.type != KEYBOARD_PRESSED) + return; + + if (_composelen == 0) { + update_modifier(KEYBOARD_PRESSED, 0, MOD_COMPOSE); + _composelen = 1; + _composebuf[0] = ksym; + + return; + } + break; + } + + if ((event.type == KEYBOARD_PRESSED) && (_composelen > 0)) { + /* + * If the compose key also serves as AltGr (i.e. set to both + * KS_Multi_key and KS_Mode_switch), and would provide a valid, + * distinct combination as AltGr, leave compose mode. + */ + if (_composelen == 2 && group == &kp.group2[0]) { + if (kp.group1[gindex] != kp.group2[gindex]) + _composelen = 0; + } + + if (_composelen != 0) { + _composebuf[2 - _composelen] = ksym; + if (--_composelen == 0) { + ksym = wskbd_compose_value(_composebuf); + update_modifier(KEYBOARD_RELEASED, 0, MOD_COMPOSE); + } else { + return; + } + } + } + + // store up to MAXHELD pressed events to match the symbol for release + switch (KS_GROUP(ksym)) { + case KS_GROUP_Ascii: + case KS_GROUP_Keypad: + case KS_GROUP_Function: + if (event.type == KEYBOARD_PRESSED) { + for (i = 0; i < MAXHELD; ++i) { + if (_held[i].keycode == 0) { + _held[i].keycode = event.keycode; + _held[i].symbol = ksym; + + break; + } + } + } else { + for (i = 0; i < MAXHELD; ++i) { + if (_held[i].keycode == event.keycode) { + ksym = _held[i].symbol; + _held[i].keycode = 0; + _held[i].symbol = 0; + + break; + } + } + } + + break; + } + + event.symbol = ksym; + event.modifiers = _modifiers; + + _kbd_addEvent(&event); + + return; +} + +//This function call usb function to check if a new keyboard is connected +static s32 _kbd_scan_for_keyboard(void) +{ + s32 ret; + keyboard_event event; + + ret = USBKeyboard_Open(&_kbd_event_cb); + + if (ret < 0) + return ret; + + _modifiers = 0; + _composelen = 0; + memset(_held, 0, sizeof(_held)); + + USBKeyboard_SetLed(USBKEYBOARD_LEDNUM, true); + USBKeyboard_SetLed(USBKEYBOARD_LEDCAPS, true); + USBKeyboard_SetLed(USBKEYBOARD_LEDSCROLL, true); + usleep(200 * 1000); + USBKeyboard_SetLed(USBKEYBOARD_LEDNUM, false); + USBKeyboard_SetLed(USBKEYBOARD_LEDCAPS, false); + USBKeyboard_SetLed(USBKEYBOARD_LEDSCROLL, false); + + event.type = KEYBOARD_CONNECTED; + event.modifiers = 0; + event.keycode = 0; + + _kbd_addEvent(&event); + + return ret; +} + +static void * _kbd_thread_func(void *arg) { + u32 turns = 0; + + while (!_kbd_thread_quit) { + // scan for new attached keyboards + if ((turns % KBD_THREAD_KBD_SCAN_INTERVAL) == 0) { + if (!USBKeyboard_IsConnected()) + _kbd_scan_for_keyboard(); + + turns = 0; + } + turns++; + + USBKeyboard_Scan(); + usleep(KBD_THREAD_UDELAY); + } + + return NULL; +} + +struct { + vu8 head; + vu8 tail; + char buf[256]; +} _keyBuffer; + +static void * _kbd_buf_thread_func(void *arg) { + keyboard_event event; + while (!_kbd_thread_quit) { + if (((_keyBuffer.tail+1)&255) != _keyBuffer.head) { + if ( KEYBOARD_GetEvent(&event)) { + if (event.type == KEYBOARD_PRESSED) { + _keyBuffer.buf[_keyBuffer.tail] = event.symbol; + _keyBuffer.tail++; + } + } + } + usleep(KBD_THREAD_UDELAY); + } + return NULL; +} + +static ssize_t _keyboardRead(struct _reent *r, void *unused, char *ptr, size_t len) +{ + ssize_t count = len; + while ( count > 0 ) { + if (_keyBuffer.head != _keyBuffer.tail) { + char key = _keyBuffer.buf[_keyBuffer.head]; + *ptr++ = key; + if (_readKey_cb != NULL) _readKey_cb(key); + _keyBuffer.head++; + count--; + } + } + return len; +} + +static const devoptab_t std_in = +{ + "stdin", + 0, + NULL, + NULL, + NULL, + _keyboardRead, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL +}; + +//Initialize USB and USB_KEYBOARD and the event queue +s32 KEYBOARD_Init(keyPressCallback keypress_cb) +{ + int fd; + struct stat st; + char keymap[64]; + size_t i; + + if (USB_Initialize() != IPC_OK) + return -1; + + if (USBKeyboard_Initialize() != IPC_OK) { + return -2; + } + + if (_ukbd_keymapdata.layout == KB_NONE) { + keymap[0] = 0; + fd = open("/wiikbd.map", O_RDONLY); + + if ((fd > 0) && !fstat(fd, &st)) { + if ((st.st_size > 0) && (st.st_size < 64) && + (st.st_size == read(fd, keymap, st.st_size))) { + keymap[63] = 0; + for (i = 0; i < 64; ++i) { + if ((keymap[i] != '-') && (isalpha((int)keymap[i]) == 0)) { + keymap[i] = 0; + break; + } + } + } + + close(fd); + } + + _ukbd_keymapdata.layout = _get_keymap_by_name(keymap); + } + + if (_ukbd_keymapdata.layout == KB_NONE) { + switch (CONF_GetLanguage()) { + case CONF_LANG_GERMAN: + _ukbd_keymapdata.layout = KB_DE; + break; + + case CONF_LANG_JAPANESE: + _ukbd_keymapdata.layout = KB_JP; + break; + + case CONF_LANG_FRENCH: + _ukbd_keymapdata.layout = KB_FR; + break; + + case CONF_LANG_SPANISH: + _ukbd_keymapdata.layout = KB_ES; + break; + + case CONF_LANG_ITALIAN: + _ukbd_keymapdata.layout = KB_IT; + break; + + case CONF_LANG_DUTCH: + _ukbd_keymapdata.layout = KB_NL; + break; + + case CONF_LANG_SIMP_CHINESE: + case CONF_LANG_TRAD_CHINESE: + case CONF_LANG_KOREAN: + default: + _ukbd_keymapdata.layout = KB_US; + break; + } + } + + if (wskbd_load_keymap(&_ukbd_keymapdata, &_sc_map, &_sc_maplen) < 0) { + _ukbd_keymapdata.layout = KB_NONE; + + return -4; + } + + __lwp_queue_init_empty(&_queue); + + if (!_kbd_thread_running) { + // start the keyboard thread + _kbd_thread_quit = false; + + memset(_kbd_stack, 0, KBD_THREAD_STACKSIZE); + + s32 res = LWP_CreateThread(&_kbd_thread, _kbd_thread_func, NULL, + _kbd_stack, KBD_THREAD_STACKSIZE, + KBD_THREAD_PRIO); + + if (res) { + USBKeyboard_Close(); + + return -6; + } + + if(keypress_cb) + { + _keyBuffer.head = 0; + _keyBuffer.tail = 0; + + res = LWP_CreateThread(&_kbd_buf_thread, _kbd_buf_thread_func, NULL, + _kbd_buf_stack, KBD_THREAD_STACKSIZE, + KBD_THREAD_PRIO); + if(res) { + _kbd_thread_quit = true; + + LWP_JoinThread(_kbd_thread, NULL); + + USBKeyboard_Close(); + KEYBOARD_FlushEvents(); + USBKeyboard_Deinitialize(); + _kbd_thread_running = false; + return -6; + } + + devoptab_list[STD_IN] = &std_in; + setvbuf(stdin, NULL , _IONBF, 0); + _readKey_cb = keypress_cb; + } + _kbd_thread_running = true; + } + return 0; +} + +//Deinitialize USB and USB_KEYBOARD and the event queue +s32 KEYBOARD_Deinit(void) +{ + if (_kbd_thread_running) { + _kbd_thread_quit = true; + + if(_kbd_thread != LWP_THREAD_NULL) + LWP_JoinThread(_kbd_thread, NULL); + if(_kbd_buf_thread != LWP_THREAD_NULL) + LWP_JoinThread(_kbd_buf_thread, NULL); + + _kbd_thread_running = false; + } + + USBKeyboard_Close(); + KEYBOARD_FlushEvents(); + USBKeyboard_Deinitialize(); + + if (_sc_map) { + free(_sc_map); + _sc_map = NULL; + _sc_maplen = 0; + } + + return 1; +} + +//Get the first event of the event queue +s32 KEYBOARD_GetEvent(keyboard_event *event) +{ + _node *n = (_node *) __lwp_queue_get(&_queue); + + if (!n) + return 0; + + *event = n->event; + + free(n); + + return 1; +} + +//Flush all pending events +s32 KEYBOARD_FlushEvents(void) +{ + s32 res; + _node *n; + + res = 0; + while (true) { + n = (_node *) __lwp_queue_get(&_queue); + + if (!n) + break; + + free(n); + res++; + } + + return res; +} + diff --git a/wii/libogc/libwiikeyboard/ukbdmap.c b/wii/libogc/libwiikeyboard/ukbdmap.c new file mode 100644 index 0000000000..133a7d791e --- /dev/null +++ b/wii/libogc/libwiikeyboard/ukbdmap.c @@ -0,0 +1,1132 @@ +/* + * THIS FILE IS AUTOMAGICALLY GENERATED. DO NOT EDIT. + * + * generated by: + * OpenBSD: makemap.awk,v 1.10 2009/01/11 16:54:53 miod Exp + * generated from: + */ + +/* + * PLEASE DO NOT FORGET TO REGEN + * sys/dev/usb/ukbdmap.c + * AFTER ANY CHANGES TO THIS FILE! + */ + +/*- + * Copyright (c) 1997 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Juergen Hannken-Illjes. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include "wsksymvar.h" + +#define KC(n) KS_KEYCODE(n) + +static const keysym_t ukbd_keydesc_us[] = { +/* pos command normal shifted */ + KC(4), KS_a, + KC(5), KS_b, + KC(6), KS_c, + KC(7), KS_d, + KC(8), KS_e, + KC(9), KS_f, + KC(10), KS_g, + KC(11), KS_h, + KC(12), KS_i, + KC(13), KS_j, + KC(14), KS_k, + KC(15), KS_l, + KC(16), KS_m, + KC(17), KS_n, + KC(18), KS_o, + KC(19), KS_p, + KC(20), KS_q, + KC(21), KS_r, + KC(22), KS_s, + KC(23), KS_t, + KC(24), KS_u, + KC(25), KS_v, + KC(26), KS_w, + KC(27), KS_x, + KC(28), KS_y, + KC(29), KS_z, + KC(30), KS_1, KS_exclam, + KC(31), KS_2, KS_at, + KC(32), KS_3, KS_numbersign, + KC(33), KS_4, KS_dollar, + KC(34), KS_5, KS_percent, + KC(35), KS_6, KS_asciicircum, + KC(36), KS_7, KS_ampersand, + KC(37), KS_8, KS_asterisk, + KC(38), KS_9, KS_parenleft, + KC(39), KS_0, KS_parenright, + KC(40), KS_Return, + KC(41), KS_Cmd_Debugger,KS_Escape, + KC(42), KS_Cmd_ResetEmul,KS_BackSpace, + KC(43), KS_Tab, + KC(44), KS_space, + KC(45), KS_minus, KS_underscore, + KC(46), KS_equal, KS_plus, + KC(47), KS_bracketleft, KS_braceleft, + KC(48), KS_bracketright,KS_braceright, + KC(49), KS_backslash, KS_bar, + KC(50), KS_backslash, KS_bar, + KC(51), KS_semicolon, KS_colon, + KC(52), KS_apostrophe, KS_quotedbl, + KC(53), KS_grave, KS_asciitilde, + KC(54), KS_comma, KS_less, + KC(55), KS_period, KS_greater, + KC(56), KS_slash, KS_question, + KC(57), KS_Caps_Lock, + KC(58), KS_Cmd_Screen0, KS_f1, + KC(59), KS_Cmd_Screen1, KS_f2, + KC(60), KS_Cmd_Screen2, KS_f3, + KC(61), KS_Cmd_Screen3, KS_f4, + KC(62), KS_Cmd_Screen4, KS_f5, + KC(63), KS_Cmd_Screen5, KS_f6, + KC(64), KS_Cmd_Screen6, KS_f7, + KC(65), KS_Cmd_Screen7, KS_f8, + KC(66), KS_Cmd_Screen8, KS_f9, + KC(67), KS_Cmd_Screen9, KS_f10, + KC(68), KS_Cmd_Screen10,KS_f11, + KC(69), KS_Cmd_Screen11,KS_f12, + KC(70), KS_Print_Screen, + KC(71), KS_Hold_Screen, + KC(72), KS_Pause, /*Break*/ + KC(73), KS_Insert, + KC(74), KS_Home, + KC(75), KS_Cmd_ScrollBack,KS_Prior, + KC(76), KS_Cmd_ResetEmul,KS_Delete, + KC(77), KS_End, + KC(78), KS_Cmd_ScrollFwd,KS_Next, + KC(79), KS_Right, + KC(80), KS_Left, + KC(81), KS_Down, + KC(82), KS_Up, + KC(83), KS_Num_Lock, + KC(84), KS_KP_Divide, + KC(85), KS_KP_Multiply, + KC(86), KS_KP_Subtract, + KC(87), KS_KP_Add, + KC(88), KS_KP_Enter, + KC(89), KS_KP_End, KS_KP_1, + KC(90), KS_KP_Down, KS_KP_2, + KC(91), KS_KP_Next, KS_KP_3, + KC(92), KS_KP_Left, KS_KP_4, + KC(93), KS_KP_Begin, KS_KP_5, + KC(94), KS_KP_Right, KS_KP_6, + KC(95), KS_KP_Home, KS_KP_7, + KC(96), KS_KP_Up, KS_KP_8, + KC(97), KS_KP_Prior, KS_KP_9, + KC(98), KS_KP_Insert, KS_KP_0, + KC(99), KS_Cmd_KbdReset,KS_KP_Delete, + KC(101), KS_Menu, + KC(116), KS_Open, + KC(117), KS_Help, + KC(118), KS_Props, + KC(119), KS_Front, + KC(120), KS_Cmd, + KC(121), KS_Again, + KC(122), KS_Undo, + KC(123), KS_Cut, + KC(124), KS_Copy, + KC(125), KS_Paste, + KC(126), KS_Find, + KC(127), KS_AudioMute, + KC(128), KS_AudioRaise, + KC(129), KS_AudioLower, + KC(224), KS_Cmd1, KS_Control_L, + KC(225), KS_Shift_L, + KC(226), KS_Cmd2, KS_Alt_L, + KC(227), KS_Meta_L, + KC(228), KS_Cmd1, KS_Control_R, + KC(229), KS_Shift_R, + KC(230), KS_Cmd2, KS_Alt_R, KS_Multi_key, + KC(231), KS_Meta_R, +}; + +static const keysym_t ukbd_keydesc_de[] = { +/* pos normal shifted altgr shift-altgr */ + KC(16), KS_m, KS_M, KS_mu, + KC(20), KS_q, KS_Q, KS_at, + KC(28), KS_z, + KC(29), KS_y, + KC(31), KS_2, KS_quotedbl, KS_twosuperior, + KC(32), KS_3, KS_section, KS_threesuperior, + KC(35), KS_6, KS_ampersand, + KC(36), KS_7, KS_slash, KS_braceleft, + KC(37), KS_8, KS_parenleft, KS_bracketleft, + KC(38), KS_9, KS_parenright, KS_bracketright, + KC(39), KS_0, KS_equal, KS_braceright, + KC(45), KS_ssharp, KS_question, KS_backslash, + KC(46), KS_dead_acute, KS_dead_grave, + KC(47), KS_udiaeresis, + KC(48), KS_plus, KS_asterisk, KS_dead_tilde, + KC(49), KS_numbersign, KS_apostrophe, + KC(50), KS_numbersign, KS_apostrophe, + KC(51), KS_odiaeresis, + KC(52), KS_adiaeresis, + KC(53), KS_dead_circumflex,KS_dead_abovering, + KC(54), KS_comma, KS_semicolon, + KC(55), KS_period, KS_colon, + KC(56), KS_minus, KS_underscore, + KC(100), KS_less, KS_greater, KS_bar, KS_brokenbar, + KC(230), KS_Mode_switch, KS_Multi_key, +}; + +static const keysym_t ukbd_keydesc_de_nodead[] = { +/* pos normal shifted altgr shift-altgr */ + KC(46), KS_apostrophe, KS_grave, + KC(48), KS_plus, KS_asterisk, KS_asciitilde, + KC(53), KS_asciicircum, KS_degree, +}; + +static const keysym_t ukbd_keydesc_dk[] = { +/* pos normal shifted altgr shift-altgr */ + KC(31), KS_2, KS_quotedbl, KS_at, + KC(32), KS_3, KS_numbersign, KS_sterling, + KC(33), KS_4, KS_currency, KS_dollar, + KC(35), KS_6, KS_ampersand, + KC(36), KS_7, KS_slash, KS_braceleft, + KC(37), KS_8, KS_parenleft, KS_bracketleft, + KC(38), KS_9, KS_parenright, KS_bracketright, + KC(39), KS_0, KS_equal, KS_braceright, + KC(45), KS_plus, KS_question, + KC(46), KS_dead_acute, KS_dead_grave, KS_bar, + KC(47), KS_aring, + KC(48), KS_dead_diaeresis,KS_dead_circumflex,KS_dead_tilde, + KC(49), KS_apostrophe, KS_asterisk, + KC(50), KS_apostrophe, KS_asterisk, + KC(51), KS_ae, + KC(52), KS_oslash, + KC(53), KS_onehalf, KS_paragraph, + KC(54), KS_comma, KS_semicolon, + KC(55), KS_period, KS_colon, + KC(56), KS_minus, KS_underscore, + KC(100), KS_less, KS_greater, KS_backslash, + KC(230), KS_Mode_switch, KS_Multi_key, +}; + +static const keysym_t ukbd_keydesc_dk_nodead[] = { +/* pos normal shifted altgr shift-altgr */ + KC(46), KS_apostrophe, KS_grave, KS_bar, + KC(48), KS_diaeresis, KS_asciicircum, KS_asciitilde, +}; + +static const keysym_t ukbd_keydesc_sv[] = { +/* pos normal shifted altgr shift-altgr */ + KC(45), KS_plus, KS_question, KS_backslash, + KC(48), KS_dead_diaeresis,KS_dead_circumflex,KS_dead_tilde, + KC(51), KS_odiaeresis, + KC(52), KS_adiaeresis, + KC(53), KS_section, KS_onehalf, + KC(100), KS_less, KS_greater, KS_bar, + KC(230), KS_Mode_switch, KS_Multi_key, +}; + +static const keysym_t ukbd_keydesc_sv_nodead[] = { +/* pos normal shifted altgr shift-altgr */ + KC(46), KS_apostrophe, KS_grave, KS_bar, + KC(48), KS_diaeresis, KS_asciicircum, KS_asciitilde, +}; + +static const keysym_t ukbd_keydesc_no[] = { +/* pos normal shifted altgr shift-altgr */ + KC(46), KS_backslash, KS_dead_grave, KS_dead_acute, + KC(48), KS_dead_diaeresis,KS_dead_circumflex,KS_dead_tilde, + KC(51), KS_oslash, + KC(52), KS_ae, + KC(53), KS_bar, KS_paragraph, + KC(100), KS_less, KS_greater, +}; + +static const keysym_t ukbd_keydesc_no_nodead[] = { +/* pos normal shifted altgr shift-altgr */ + KC(46), KS_backslash, KS_grave, KS_acute, + KC(48), KS_diaeresis, KS_asciicircum, KS_asciitilde, +}; + +static const keysym_t ukbd_keydesc_fr[] = { +/* pos normal shifted altgr shift-altgr */ + KC(4), KS_q, + KC(16), KS_comma, KS_question, + KC(20), KS_a, + KC(26), KS_z, + KC(29), KS_w, + KC(30), KS_ampersand, KS_1, + KC(31), KS_eacute, KS_2, KS_asciitilde, + KC(32), KS_quotedbl, KS_3, KS_numbersign, + KC(33), KS_apostrophe, KS_4, KS_braceleft, + KC(34), KS_parenleft, KS_5, KS_bracketleft, + KC(35), KS_minus, KS_6, KS_bar, + KC(36), KS_egrave, KS_7, KS_grave, + KC(37), KS_underscore, KS_8, KS_backslash, + KC(38), KS_ccedilla, KS_9, KS_asciicircum, + KC(39), KS_agrave, KS_0, KS_at, + KC(45), KS_parenright, KS_degree, KS_bracketright, + KC(46), KS_equal, KS_plus, KS_braceright, + KC(47), KS_dead_circumflex,KS_dead_diaeresis, + KC(48), KS_dollar, KS_sterling, KS_currency, + KC(49), KS_asterisk, KS_mu, + KC(50), KS_asterisk, KS_mu, + KC(51), KS_m, + KC(52), KS_ugrave, KS_percent, + KC(53), KS_twosuperior, + KC(54), KS_semicolon, KS_period, + KC(55), KS_colon, KS_slash, + KC(56), KS_exclam, KS_section, + KC(100), KS_less, KS_greater, + KC(230), KS_Mode_switch, KS_Multi_key, +}; + +static const keysym_t ukbd_keydesc_fr_apple[] = { + KC(5), KS_b, KS_B, KS_ssharp, + KC(8), KS_e, KS_E, KS_ecircumflex, KS_Ecircumflex, + KC(11), KS_h, KS_H, KS_Igrave, KS_Icircumflex, + KC(12), KS_i, KS_I, KS_icircumflex, KS_idiaeresis, + KC(13), KS_j, KS_J, KS_Idiaeresis, KS_Iacute, + KC(14), KS_k, KS_K, KS_Egrave, KS_Ediaeresis, + KC(15), KS_l, KS_L, KS_voidSymbol, KS_bar, + KC(16), KS_comma, KS_question, KS_voidSymbol, KS_questiondown, + KC(17), KS_n, KS_N, KS_asciitilde, + KC(20), KS_a, KS_A, KS_ae, KS_AE, + KC(21), KS_r, KS_R, KS_registered, KS_comma, + KC(22), KS_s, KS_S, KS_Ograve, + KC(26), KS_z, KS_Z, KS_Acircumflex, KS_Aring, + KC(28), KS_y, KS_Y, KS_Uacute, + KC(31), KS_eacute, KS_2, KS_ediaeresis, + KC(32), KS_quotedbl, KS_3, + KC(33), KS_apostrophe, KS_4, + KC(34), KS_parenleft, KS_5, KS_braceleft, KS_bracketleft, + KC(35), KS_section, KS_6, + KC(36), KS_egrave, KS_7, KS_guillemotleft, + KS_guillemotright, + KC(37), KS_exclam, KS_8, + KC(38), KS_ccedilla, KS_9, KS_Ccedilla, KS_Aacute, + KC(37), KS_exclam, KS_8, KS_exclamdown, KS_Ucircumflex, + KC(39), KS_agrave, KS_0, KS_oslash, KS_Ooblique, + KC(45), KS_parenright, KS_degree, KS_braceright, KS_bracketright, + KC(46), KS_minus, KS_underscore, + KC(47), KS_dead_circumflex, KS_dead_diaeresis, + KS_ocircumflex, KS_Ocircumflex, + KC(48), KS_dollar, KS_asterisk, KS_cent, KS_yen, + KC(50), KS_grave, KS_sterling, KS_at, KS_numbersign, + KC(51), KS_m, KS_M, KS_mu, KS_Oacute, + KC(52), KS_ugrave, KS_percent, KS_Ugrave, + KC(53), KS_at, KS_numbersign, + KC(55), KS_colon, KS_slash, KS_voidSymbol, KS_backslash, + KC(56), KS_equal, KS_plus, + KC(103), KS_KP_Equal, + KC(231), KS_Mode_switch, KS_Multi_key, +}; + +/* + * fr-dvorak-be'po layout, simplified map, per http://www.clavier-dvorak.org/ + * (the complete map is still a moving target) + */ +static const keysym_t ukbd_keydesc_fr_dvorak_bepo[] = { + /* oe ligature */ + /* euro currency */ + KC(4), KS_a, KS_A, KS_ae, KS_AE, + KC(5), KS_k, KS_K, KS_asciitilde, + KC(6), KS_x, KS_X, KS_braceright, + KC(7), KS_i, KS_I, KS_dead_diaeresis, + KC(8), KS_p, KS_P, KS_ampersand, + KC(9), KS_e, KS_E, + KC(10), KS_comma, KS_semicolon, + KC(11), KS_c, + KC(12), KS_d, + KC(13), KS_t, + KC(14), KS_s, + KC(15), KS_r, + KC(16), KS_q, KS_Q, + KC(17), KS_apostrophe, KS_question, + KC(18), KS_l, + KC(19), KS_j, + KC(20), KS_b, KS_B, KS_bar, + KC(21), KS_o, KS_O, + KC(22), KS_u, KS_U, KS_ugrave, KS_Ugrave, + KC(23), KS_egrave, KS_Egrave, KS_dead_grave, + KC(24), KS_v, + KC(25), KS_period, KS_colon, /*ellipsis*/ + KC(26), KS_eacute, KS_Eacute, KS_dead_acute, + KC(27), KS_y, KS_Y, KS_braceleft, + KC(28), KS_dead_circumflex,KS_exclam, + KC(29), KS_agrave, KS_Agrave, KS_backslash, + KC(30), KS_quotedbl, KS_1, KS_hyphen, + KC(31), KS_guillemotleft,KS_2, KS_less, + KC(32), KS_guillemotright,KS_3, KS_greater, + KC(33), KS_parenleft, KS_4, KS_bracketleft, + KC(34), KS_parenright, KS_5, KS_bracketright, + KC(35), KS_at, KS_6, + KC(36), KS_plus, KS_7, + KC(37), KS_minus, KS_8, + KC(38), KS_slash, KS_9, + KC(39), KS_asterisk, KS_0, + KC(44), KS_space, KS_nobreakspace,KS_underscore, + KC(45), KS_equal, KS_asciicircum, + KC(46), KS_percent, KS_grave, + KC(47), KS_z, + KC(48), KS_w, + KC(49), KS_ccedilla, KS_Ccedilla, + KC(50), KS_ccedilla, KS_Ccedilla, + KC(51), KS_n, + KC(52), KS_m, + KC(53), KS_dollar, KS_numbersign, + KC(54), KS_g, KS_G, KS_mu, + KC(55), KS_h, + KC(56), KS_f, + KC(100), KS_egrave, KS_Egrave, KS_slash, + KC(230), KS_Mode_switch, KS_Multi_key, +}; + +static const keysym_t ukbd_keydesc_it[] = { +/* pos normal shifted altgr shift-altgr */ + KC(31), KS_2, KS_quotedbl, KS_twosuperior, + KC(32), KS_3, KS_sterling, KS_threesuperior, + KC(34), KS_5, KS_percent, + KC(35), KS_6, KS_ampersand, + KC(36), KS_7, KS_slash, + KC(37), KS_8, KS_parenleft, + KC(38), KS_9, KS_parenright, + KC(39), KS_0, KS_equal, + KC(45), KS_apostrophe, KS_question, + KC(46), KS_igrave, KS_asciicircum, + KC(47), KS_egrave, KS_eacute, KS_braceleft, KS_bracketleft, + KC(48), KS_plus, KS_asterisk, KS_braceright, KS_bracketright, + KC(49), KS_ugrave, KS_section, + KC(50), KS_ugrave, KS_section, + KC(51), KS_ograve, KS_Ccedilla, KS_at, + KC(52), KS_agrave, KS_degree, KS_numbersign, + KC(53), KS_backslash, KS_bar, + KC(54), KS_comma, KS_semicolon, + KC(55), KS_period, KS_colon, + KC(56), KS_minus, KS_underscore, + KC(100), KS_less, KS_greater, + KC(230), KS_Mode_switch, KS_Multi_key, +}; + +static const keysym_t ukbd_keydesc_uk[] = { +/* pos normal shifted altgr shift-altgr */ + KC(30), KS_1, KS_exclam, KS_plusminus, KS_exclamdown, + KC(31), KS_2, KS_quotedbl, KS_twosuperior, KS_cent, + KC(32), KS_3, KS_sterling, KS_threesuperior, + KC(33), KS_4, KS_dollar, KS_acute, KS_currency, + KC(34), KS_5, KS_percent, KS_mu, KS_yen, + KC(35), KS_6, KS_asciicircum, KS_paragraph, + KC(36), KS_7, KS_ampersand, KS_periodcentered,KS_brokenbar, + KC(37), KS_8, KS_asterisk, KS_cedilla, KS_ordfeminine, + KC(38), KS_9, KS_parenleft, KS_onesuperior, KS_diaeresis, + KC(39), KS_0, KS_parenright, KS_masculine, KS_copyright, + KC(45), KS_minus, KS_underscore, KS_hyphen, KS_ssharp, + KC(46), KS_equal, KS_plus, KS_onehalf, KS_guillemotleft, + KC(49), KS_numbersign, KS_asciitilde, KS_sterling, KS_thorn, + KC(50), KS_numbersign, KS_asciitilde, KS_sterling, KS_thorn, + KC(52), KS_apostrophe, KS_at, KS_section, KS_Agrave, + KC(53), KS_grave, KS_grave, KS_agrave, KS_agrave, + KC(100), KS_backslash, KS_bar, KS_Udiaeresis, +}; + +static const keysym_t ukbd_keydesc_jp[] = { +/* pos normal shifted altgr shift-altgr */ + KC(31), KS_2, KS_quotedbl, + KC(35), KS_6, KS_ampersand, + KC(36), KS_7, KS_apostrophe, + KC(37), KS_8, KS_parenleft, + KC(38), KS_9, KS_parenright, + KC(39), KS_0, + KC(45), KS_minus, KS_equal, + KC(46), KS_asciicircum, KS_asciitilde, + KC(47), KS_at, KS_grave, + KC(48), KS_bracketleft, KS_braceleft, + KC(49), KS_bracketright,KS_braceright, + KC(50), KS_bracketright,KS_braceright, + KC(51), KS_semicolon, KS_plus, + KC(52), KS_colon, KS_asterisk, + KC(53), KS_Zenkaku_Hankaku,/*replacegrave/tilde*/ + KC(135), KS_Hiragana_Katakana, + KC(136), KS_backslash, KS_underscore, + KC(137), KS_Henkan, + KC(138), KS_Muhenkan, + KC(139), KS_backslash, KS_bar, +}; + +static const keysym_t ukbd_keydesc_es[] = { +/* pos normal shifted altgr shift-altgr */ + KC(30), KS_1, KS_exclam, KS_bar, + KC(31), KS_2, KS_quotedbl, KS_at, + KC(32), KS_3, KS_periodcentered,KS_numbersign, + KC(33), KS_4, KS_dollar, KS_asciitilde, + KC(35), KS_6, KS_ampersand, + KC(36), KS_7, KS_slash, + KC(37), KS_8, KS_parenleft, + KC(38), KS_9, KS_parenright, + KC(39), KS_0, KS_equal, + KC(45), KS_apostrophe, KS_question, + KC(46), KS_exclamdown, KS_questiondown, + KC(47), KS_dead_grave, KS_dead_circumflex,KS_bracketleft, + KC(48), KS_plus, KS_asterisk, KS_bracketright, + KC(49), KS_ccedilla, KS_Ccedilla, KS_braceright, + KC(50), KS_ccedilla, KS_Ccedilla, KS_braceright, + KC(51), KS_ntilde, + KC(52), KS_dead_acute, KS_dead_diaeresis,KS_braceleft, + KC(53), KS_degree, KS_ordfeminine, KS_backslash, + KC(54), KS_comma, KS_semicolon, + KC(55), KS_period, KS_colon, + KC(56), KS_minus, KS_underscore, + KC(100), KS_less, KS_greater, + KC(230), KS_Mode_switch, KS_Multi_key, +}; + +static const keysym_t ukbd_keydesc_lt[] = { +/* pos normal shifted altgr shift-altgr */ + KC(8), KS_e, KS_E, KS_currency, + KC(9), KS_L7_scaron, KS_L7_Scaron, + KC(20), KS_L7_aogonek, KS_L7_Aogonek, + KC(26), KS_L7_zcaron, KS_L7_Zcaron, + KC(27), KS_L7_umacron, KS_L7_Umacron, + KC(30), KS_exclam, KS_1, KS_at, + KC(31), KS_minus, KS_2, KS_underscore, + KC(32), KS_slash, KS_3, KS_numbersign, + KC(33), KS_semicolon, KS_4, KS_dollar, + KC(34), KS_colon, KS_5, KS_paragraph, + KC(35), KS_comma, KS_6, KS_asciicircum, + KC(36), KS_period, KS_7, KS_ampersand, + KC(37), KS_equal, KS_8, KS_asterisk, + KC(38), KS_bracketleft, KS_9, KS_parenleft, + KC(39), KS_bracketright,KS_0, KS_parenright, + KC(44), KS_space, KS_space, KS_nobreakspace, + KC(45), KS_question, KS_plus, KS_apostrophe, + KC(46), KS_x, KS_X, KS_percent, + KC(47), KS_L7_iogonek, KS_L7_Iogonek, KS_braceleft, + KC(48), KS_w, KS_W, KS_braceright, + KC(49), KS_q, KS_Q, KS_bar, + KC(50), KS_q, KS_Q, KS_bar, + KC(51), KS_L7_uogonek, KS_L7_Uogonek, + KC(52), KS_L7_edot, KS_L7_Edot, KS_quotedbl, + KC(53), KS_grave, KS_asciitilde, + KC(54), KS_L7_ccaron, KS_L7_Ccaron, KS_L7_dbllow9quot, + KC(55), KS_f, KS_F, KS_L7_leftdblquot, + KC(56), KS_L7_eogonek, KS_L7_Eogonek, KS_backslash, + KC(230), KS_Mode_switch, KS_Multi_key, +}; + +static const keysym_t ukbd_keydesc_be[] = { +/* pos normal shifted altgr shift-altgr */ + KC(4), KS_q, + KC(16), KS_comma, KS_question, + KC(20), KS_a, + KC(26), KS_z, + KC(29), KS_w, + KC(30), KS_ampersand, KS_1, KS_bar, + KC(31), KS_eacute, KS_2, KS_at, + KC(32), KS_quotedbl, KS_3, KS_numbersign, + KC(33), KS_apostrophe, KS_4, + KC(34), KS_parenleft, KS_5, + KC(35), KS_section, KS_6, KS_asciicircum, + KC(36), KS_egrave, KS_7, + KC(37), KS_exclam, KS_8, + KC(38), KS_ccedilla, KS_9, KS_braceleft, + KC(39), KS_agrave, KS_0, KS_braceright, + KC(45), KS_parenright, KS_degree, + KC(46), KS_minus, KS_underscore, + KC(47), KS_dead_circumflex,KS_dead_diaeresis,KS_bracketleft, + KC(48), KS_dollar, KS_asterisk, KS_bracketright, + KC(49), KS_mu, KS_sterling, KS_grave, + KC(50), KS_mu, KS_sterling, KS_grave, + KC(51), KS_m, + KC(52), KS_ugrave, KS_percent, KS_acute, + KC(53), KS_twosuperior, KS_threesuperior, + KC(54), KS_semicolon, KS_period, + KC(55), KS_colon, KS_slash, + KC(56), KS_equal, KS_plus, KS_asciitilde, + KC(100), KS_less, KS_greater, KS_backslash, + KC(230), KS_Mode_switch, KS_Multi_key, +}; + + +static const keysym_t ukbd_keydesc_us_dvorak[] = { +/* pos command normal shifted */ + KC(5), KS_x, + KC(6), KS_j, + KC(7), KS_e, + KC(8), KS_period, KS_greater, + KC(9), KS_u, + KC(10), KS_i, + KC(11), KS_d, + KC(12), KS_c, + KC(13), KS_h, + KC(14), KS_t, + KC(15), KS_n, + KC(17), KS_b, + KC(18), KS_r, + KC(19), KS_l, + KC(20), KS_apostrophe, KS_quotedbl, + KC(21), KS_p, + KC(22), KS_o, + KC(23), KS_y, + KC(24), KS_g, + KC(25), KS_k, + KC(26), KS_comma, KS_less, + KC(27), KS_q, + KC(28), KS_f, + KC(29), KS_semicolon, KS_colon, + KC(45), KS_bracketleft, KS_braceleft, + KC(46), KS_bracketright,KS_braceright, + KC(47), KS_slash, KS_question, + KC(48), KS_equal, KS_plus, + KC(51), KS_s, + KC(52), KS_minus, KS_underscore, + KC(54), KS_w, + KC(55), KS_v, + KC(56), KS_z, +}; + +static const keysym_t ukbd_keydesc_swapctrlcaps[] = { +/* pos command normal shifted */ + KC(57), KS_Cmd1, KS_Control_L, + KC(224), KS_Caps_Lock, +}; + +static const keysym_t ukbd_keydesc_iopener[] = { +/* pos command normal shifted */ + KC(58), KS_Cmd_Debugger,KS_Escape, + KC(59), KS_Cmd_Screen0, KS_f1, + KC(60), KS_Cmd_Screen1, KS_f2, + KC(61), KS_Cmd_Screen2, KS_f3, + KC(62), KS_Cmd_Screen3, KS_f4, + KC(63), KS_Cmd_Screen4, KS_f5, + KC(64), KS_Cmd_Screen5, KS_f6, + KC(65), KS_Cmd_Screen6, KS_f7, + KC(66), KS_Cmd_Screen7, KS_f8, + KC(67), KS_Cmd_Screen8, KS_f9, + KC(68), KS_Cmd_Screen9, KS_f10, + KC(69), KS_f11, +}; + +static const keysym_t ukbd_keydesc_ru[] = { +/* pos normal shifted altgr shift-altgr */ + KC(4), KS_a, KS_A, KS_Cyrillic_ef, KS_Cyrillic_EF, + KC(5), KS_b, KS_B, KS_Cyrillic_i, KS_Cyrillic_I, + KC(6), KS_c, KS_C, KS_Cyrillic_es, KS_Cyrillic_ES, + KC(7), KS_d, KS_D, KS_Cyrillic_ve, KS_Cyrillic_VE, + KC(8), KS_e, KS_E, KS_Cyrillic_u, KS_Cyrillic_U, + KC(9), KS_f, KS_F, KS_Cyrillic_a, KS_Cyrillic_A, + KC(10), KS_g, KS_G, KS_Cyrillic_pe, KS_Cyrillic_PE, + KC(11), KS_h, KS_H, KS_Cyrillic_er, KS_Cyrillic_ER, + KC(12), KS_i, KS_I, KS_Cyrillic_sha,KS_Cyrillic_SHA, + KC(13), KS_j, KS_J, KS_Cyrillic_o, KS_Cyrillic_O, + KC(14), KS_k, KS_K, KS_Cyrillic_el, KS_Cyrillic_EL, + KC(15), KS_l, KS_L, KS_Cyrillic_de, KS_Cyrillic_DE, + KC(16), KS_m, KS_M, KS_Cyrillic_ssighn,KS_Cyrillic_SSIGHN, + KC(17), KS_n, KS_N, KS_Cyrillic_te, KS_Cyrillic_TE, + KC(18), KS_o, KS_O, KS_Cyrillic_scha,KS_Cyrillic_SCHA, + KC(19), KS_p, KS_P, KS_Cyrillic_ze, KS_Cyrillic_ZE, + KC(20), KS_q, KS_Q, KS_Cyrillic_ishort,KS_Cyrillic_ISHORT, + KC(21), KS_r, KS_R, KS_Cyrillic_ka, KS_Cyrillic_KA, + KC(22), KS_s, KS_S, KS_Cyrillic_yeru,KS_Cyrillic_YERU, + KC(23), KS_t, KS_T, KS_Cyrillic_ie, KS_Cyrillic_IE, + KC(24), KS_u, KS_U, KS_Cyrillic_ge, KS_Cyrillic_GE, + KC(25), KS_v, KS_V, KS_Cyrillic_em, KS_Cyrillic_EM, + KC(26), KS_w, KS_W, KS_Cyrillic_tse,KS_Cyrillic_TSE, + KC(27), KS_x, KS_X, KS_Cyrillic_che,KS_Cyrillic_CHE, + KC(28), KS_y, KS_Y, KS_Cyrillic_en, KS_Cyrillic_EN, + KC(29), KS_z, KS_Z, KS_Cyrillic_ya, KS_Cyrillic_YA, + KC(35), KS_6, KS_asciicircum, KS_6, KS_comma, + KC(36), KS_7, KS_ampersand, KS_7, KS_period, + KC(47), KS_bracketleft, KS_braceleft, KS_Cyrillic_ha, KS_Cyrillic_HA, + KC(48), KS_bracketright,KS_braceright, KS_Cyrillic_hsighn,KS_Cyrillic_HSIGHN, + KC(51), KS_semicolon, KS_colon, KS_Cyrillic_zhe,KS_Cyrillic_ZHE, + KC(52), KS_apostrophe, KS_quotedbl, KS_Cyrillic_e, KS_Cyrillic_E, + KC(54), KS_comma, KS_less, KS_Cyrillic_be, KS_Cyrillic_BE, + KC(55), KS_period, KS_greater, KS_Cyrillic_yu, KS_Cyrillic_YU, + KC(56), KS_slash, KS_question, KS_Cyrillic_yo, KS_Cyrillic_YO, + KC(230), KS_Mode_switch, KS_Multi_key, +}; + +static const keysym_t ukbd_keydesc_ua[] = { +/* pos normal shifted altgr shift-altgr */ + KC(4), KS_a, KS_A, KS_Cyrillic_ef, KS_Cyrillic_EF, + KC(5), KS_b, KS_B, KS_Cyrillic_i, KS_Cyrillic_I, + KC(6), KS_c, KS_C, KS_Cyrillic_es, KS_Cyrillic_ES, + KC(7), KS_d, KS_D, KS_Cyrillic_ve, KS_Cyrillic_VE, + KC(8), KS_e, KS_E, KS_Cyrillic_u, KS_Cyrillic_U, + KC(9), KS_f, KS_F, KS_Cyrillic_a, KS_Cyrillic_A, + KC(10), KS_g, KS_G, KS_Cyrillic_pe, KS_Cyrillic_PE, + KC(11), KS_h, KS_H, KS_Cyrillic_er, KS_Cyrillic_ER, + KC(12), KS_i, KS_I, KS_Cyrillic_sha,KS_Cyrillic_SHA, + KC(13), KS_j, KS_J, KS_Cyrillic_o, KS_Cyrillic_O, + KC(14), KS_k, KS_K, KS_Cyrillic_el, KS_Cyrillic_EL, + KC(15), KS_l, KS_L, KS_Cyrillic_de, KS_Cyrillic_DE, + KC(16), KS_m, KS_M, KS_Cyrillic_ssighn,KS_Cyrillic_SSIGHN, + KC(17), KS_n, KS_N, KS_Cyrillic_te, KS_Cyrillic_TE, + KC(18), KS_o, KS_O, KS_Cyrillic_scha,KS_Cyrillic_SCHA, + KC(19), KS_p, KS_P, KS_Cyrillic_ze, KS_Cyrillic_ZE, + KC(20), KS_q, KS_Q, KS_Cyrillic_ishort,KS_Cyrillic_ISHORT, + KC(21), KS_r, KS_R, KS_Cyrillic_ka, KS_Cyrillic_KA, + KC(22), KS_s, KS_S, KS_Cyrillic_yeru,KS_Cyrillic_YERU, + KC(23), KS_t, KS_T, KS_Cyrillic_ie, KS_Cyrillic_IE, + KC(24), KS_u, KS_U, KS_Cyrillic_ge, KS_Cyrillic_GE, + KC(25), KS_v, KS_V, KS_Cyrillic_em, KS_Cyrillic_EM, + KC(26), KS_w, KS_W, KS_Cyrillic_tse,KS_Cyrillic_TSE, + KC(27), KS_x, KS_X, KS_Cyrillic_che,KS_Cyrillic_CHE, + KC(28), KS_y, KS_Y, KS_Cyrillic_en, KS_Cyrillic_EN, + KC(29), KS_z, KS_Z, KS_Cyrillic_ya, KS_Cyrillic_YA, + KC(35), KS_6, KS_asciicircum, KS_6, KS_comma, + KC(36), KS_7, KS_ampersand, KS_7, KS_period, + KC(45), KS_minus, KS_underscore, KS_Cyrillic_iukr,KS_Cyrillic_IUKR, + KC(46), KS_equal, KS_plus, KS_Cyrillic_yeukr,KS_Cyrillic_YEUKR, + KC(47), KS_bracketleft, KS_braceleft, KS_Cyrillic_ha, KS_Cyrillic_HA, + KC(48), KS_bracketright,KS_braceright, KS_Cyrillic_hsighn,KS_Cyrillic_HSIGHN, + KC(49), KS_backslash, KS_bar, KS_Cyrillic_yi, KS_Cyrillic_YI, + KC(50), KS_backslash, KS_bar, KS_Cyrillic_yi, KS_Cyrillic_YI, + KC(51), KS_semicolon, KS_colon, KS_Cyrillic_zhe,KS_Cyrillic_ZHE, + KC(52), KS_apostrophe, KS_quotedbl, KS_Cyrillic_e, KS_Cyrillic_E, + KC(53), KS_grave, KS_asciitilde, KS_Cyrillic_gheukr,KS_Cyrillic_GHEUKR, + KC(54), KS_comma, KS_less, KS_Cyrillic_be, KS_Cyrillic_BE, + KC(55), KS_period, KS_greater, KS_Cyrillic_yu, KS_Cyrillic_YU, + KC(56), KS_slash, KS_question, KS_Cyrillic_yo, KS_Cyrillic_YO, + KC(230), KS_Mode_switch, KS_Multi_key, +}; + +static const keysym_t ukbd_keydesc_sg[] = { +/* pos normal shifted altgr shift-altgr */ + KC(8), KS_e, KS_E, KS_currency, + KC(28), KS_z, + KC(29), KS_y, + KC(30), KS_1, KS_plus, KS_bar, + KC(31), KS_2, KS_quotedbl, KS_at, + KC(32), KS_3, KS_asterisk, KS_numbersign, + KC(33), KS_4, KS_ccedilla, + KC(35), KS_6, KS_ampersand, KS_notsign, + KC(36), KS_7, KS_slash, KS_brokenbar, + KC(37), KS_8, KS_parenleft, KS_cent, + KC(38), KS_9, KS_parenright, + KC(39), KS_0, KS_equal, + KC(45), KS_apostrophe, KS_question, KS_dead_acute, + KC(46), KS_dead_circumflex,KS_dead_grave,KS_dead_tilde, + KC(47), KS_udiaeresis, KS_egrave, KS_bracketleft, + KC(48), KS_dead_diaeresis,KS_exclam, KS_bracketright, + KC(49), KS_dollar, KS_sterling, KS_braceright, + KC(50), KS_dollar, KS_sterling, KS_braceright, + KC(51), KS_odiaeresis, KS_eacute, + KC(52), KS_adiaeresis, KS_agrave, KS_braceleft, + KC(53), KS_section, KS_degree, KS_dead_abovering, + KC(54), KS_comma, KS_semicolon, + KC(55), KS_period, KS_colon, + KC(56), KS_minus, KS_underscore, + KC(100), KS_less, KS_greater, KS_backslash, + KC(230), KS_Mode_switch, KS_Multi_key, +}; + +static const keysym_t ukbd_keydesc_sg_nodead[] = { +/* pos normal shifted altgr shift-altgr */ + KC(45), KS_apostrophe, KS_question, KS_acute, + KC(46), KS_asciicircum, KS_grave, KS_asciitilde, + KC(48), KS_diaeresis, KS_exclam, KS_bracketright, +}; + +static const keysym_t ukbd_keydesc_sf[] = { +/* pos normal shifted altgr shift-altgr */ + KC(47), KS_egrave, KS_udiaeresis, KS_bracketleft, + KC(51), KS_eacute, KS_odiaeresis, + KC(52), KS_agrave, KS_adiaeresis, KS_braceleft, +}; + +static const keysym_t ukbd_keydesc_pt[] = { +/* pos normal shifted altgr shift-altgr */ + KC(31), KS_2, KS_quotedbl, KS_at, + KC(32), KS_3, KS_numbersign, KS_sterling, + KC(35), KS_6, KS_ampersand, + KC(36), KS_7, KS_slash, KS_braceleft, + KC(37), KS_8, KS_parenleft, KS_bracketleft, + KC(38), KS_9, KS_parenright, KS_bracketright, + KC(39), KS_0, KS_equal, KS_braceright, + KC(45), KS_apostrophe, KS_question, + KC(46), KS_less, KS_greater, + KC(47), KS_plus, KS_asterisk, + KC(48), KS_dead_acute, KS_dead_grave, + KC(49), KS_dead_tilde, KS_dead_circumflex, + KC(50), KS_dead_tilde, KS_dead_circumflex, + KC(51), KS_ccedilla, KS_Ccedilla, + KC(52), KS_masculine, KS_ordfeminine, + KC(53), KS_backslash, KS_bar, + KC(54), KS_comma, KS_semicolon, + KC(55), KS_period, KS_colon, + KC(56), KS_minus, KS_underscore, + KC(100), KS_less, KS_greater, + KC(230), KS_Mode_switch, KS_Multi_key, +}; + +static const keysym_t ukbd_keydesc_pt_apple[] = { +/* pos normal shifted */ + KC(46), KS_plus, KS_asterisk, + KC(47), KS_masculine, KS_ordfeminine, + KC(50), KS_backslash, KS_bar, + KC(52), KS_dead_tilde, KS_dead_circumflex +}; + +static const keysym_t ukbd_keydesc_la[] = { +/* pos normal shifted altgr shift-altgr */ + KC(20), KS_q, KS_Q, KS_at, + KC(30), KS_1, KS_exclam, + KC(31), KS_2, KS_quotedbl, + KC(32), KS_3, KS_numbersign, + KC(35), KS_6, KS_ampersand, + KC(36), KS_7, KS_slash, + KC(37), KS_8, KS_parenleft, + KC(38), KS_9, KS_parenright, + KC(39), KS_0, KS_equal, + KC(45), KS_apostrophe, KS_question, KS_backslash, + KC(46), KS_questiondown,KS_exclamdown, + KC(47), KS_dead_acute, KS_dead_diaeresis, + KC(48), KS_plus, KS_asterisk, KS_asciitilde, + KC(49), KS_braceright, KS_bracketright,KS_dead_grave, + KC(50), KS_braceright, KS_bracketright,KS_dead_grave, + KC(51), KS_ntilde, + KC(52), KS_braceleft, KS_bracketleft, KS_dead_circumflex, + KC(53), KS_bar, KS_degree, KS_notsign, + KC(54), KS_comma, KS_semicolon, + KC(55), KS_period, KS_colon, + KC(56), KS_minus, KS_underscore, + KC(100), KS_less, KS_greater, + KC(230), KS_Mode_switch, KS_Multi_key, +}; + +static const keysym_t ukbd_keydesc_br[] = { +/* pos normal shifted altgr shift-altgr */ + KC(30), KS_1, KS_exclam, KS_onesuperior, + KC(31), KS_2, KS_at, KS_twosuperior, + KC(32), KS_3, KS_numbersign, KS_threesuperior, + KC(33), KS_4, KS_dollar, KS_sterling, + KC(34), KS_5, KS_percent, KS_cent, + KC(35), KS_6, KS_dead_diaeresis,KS_notsign, + KC(46), KS_equal, KS_plus, KS_section, + KC(47), KS_dead_acute, KS_dead_grave, + KC(48), KS_bracketleft, KS_braceleft, KS_ordfeminine, + KC(49), KS_bracketright,KS_braceright, KS_masculine, + KC(50), KS_bracketright,KS_braceright, KS_masculine, + KC(51), KS_ccedilla, KS_Ccedilla, + KC(52), KS_dead_tilde, KS_dead_circumflex, + KC(53), KS_apostrophe, KS_quotedbl, + KC(56), KS_semicolon, KS_colon, + KC(99), KS_KP_Delete, KS_KP_Decimal, + KC(100), KS_backslash, KS_bar, + KC(136), KS_slash, KS_question, KS_degree, +}; + +static const keysym_t ukbd_keydesc_tr[] = { +/* pos normal shifted altgr shift-altgr */ + KC(12), KS_L5_idotless, KS_I, + KC(20), KS_q, KS_Q, KS_at, + KC(31), KS_2, KS_apostrophe, KS_sterling, + KC(32), KS_3, KS_asciicircum, KS_numbersign, + KC(33), KS_4, KS_plus, KS_dollar, + KC(34), KS_5, KS_percent, KS_onehalf, + KC(35), KS_6, KS_ampersand, + KC(36), KS_7, KS_slash, KS_braceleft, + KC(37), KS_8, KS_parenleft, KS_bracketleft, + KC(38), KS_9, KS_parenright, KS_bracketright, + KC(39), KS_0, KS_equal, KS_braceright, + KC(45), KS_asterisk, KS_question, KS_backslash, + KC(46), KS_minus, KS_underscore, + KC(47), KS_L5_gbreve, KS_L5_Gbreve, KS_dead_diaeresis, + KC(48), KS_udiaeresis, KS_Udiaeresis, KS_asciitilde, + KC(49), KS_comma, KS_semicolon, KS_dead_grave, + KC(50), KS_comma, KS_semicolon, KS_dead_grave, + KC(51), KS_L5_scedilla, KS_L5_Scedilla, KS_dead_acute, + KC(52), KS_i, KS_L5_Idotabove, + KC(53), KS_quotedbl, KS_eacute, + KC(54), KS_odiaeresis, KS_Odiaeresis, + KC(55), KS_ccedilla, KS_Ccedilla, + KC(56), KS_period, KS_colon, + KC(100), KS_less, KS_greater, KS_bar, + KC(230), KS_Mode_switch, KS_Multi_key, +}; + +static const keysym_t ukbd_keydesc_tr_nodead[] = { +/* pos normal shifted altgr shift-altgr */ + KC(47), KS_L5_gbreve, KS_L5_Gbreve, + KC(49), KS_comma, KS_semicolon, KS_grave, + KC(50), KS_comma, KS_semicolon, KS_grave, + KC(51), KS_L5_scedilla, KS_L5_Scedilla, KS_apostrophe, +}; + +static const keysym_t ukbd_keydesc_pl[] = { +/* pos normal shifted altgr shift-altgr */ + KC(4), KS_a, KS_A, KS_L2_aogonek, KS_L2_Aogonek, + KC(6), KS_c, KS_C, KS_L2_cacute, KS_L2_Cacute, + KC(8), KS_e, KS_E, KS_L2_eogonek, KS_L2_Eogonek, + KC(15), KS_l, KS_L, KS_L2_lstroke, KS_L2_Lstroke, + KC(17), KS_n, KS_N, KS_L2_nacute, KS_L2_Nacute, + KC(18), KS_o, KS_O, KS_oacute, KS_Oacute, + KC(22), KS_s, KS_S, KS_L2_sacute, KS_L2_Sacute, + KC(27), KS_x, KS_X, KS_L2_zacute, KS_L2_Zacute, + KC(29), KS_z, KS_Z, KS_L2_zdotabove,KS_L2_Zdotabove, + KC(230), KS_Mode_switch, KS_Multi_key, +}; + +static const keysym_t ukbd_keydesc_hu[] = { +/* pos normal shifted altgr shift-altgr */ + KC(5), KS_b, KS_B, KS_braceleft, + KC(6), KS_c, KS_C, KS_ampersand, + KC(9), KS_f, KS_F, KS_bracketleft, + KC(10), KS_g, KS_G, KS_bracketright, + KC(12), KS_i, KS_I, KS_iacute, + KC(13), KS_j, KS_J, KS_iacute, + KC(17), KS_n, KS_N, KS_braceright, + KC(20), KS_q, KS_Q, KS_backslash, + KC(25), KS_v, KS_V, KS_at, + KC(26), KS_w, KS_W,KS_bar, + KC(27), KS_x, KS_X, KS_numbersign, + KC(28), KS_z, KS_Z, + KC(29), KS_y, KS_Y, KS_greater, + KC(30), KS_1, KS_apostrophe, KS_asciitilde, + KC(31), KS_2, KS_quotedbl, + KC(32), KS_3, KS_plus, KS_asciicircum, + KC(33), KS_4, KS_exclam, + KC(34), KS_5, KS_percent, + KC(35), KS_6, KS_slash, + KC(36), KS_7, KS_equal,KS_grave, + KC(37), KS_8, KS_parenleft, + KC(38), KS_9, KS_parenright, KS_acute, + KC(39), KS_odiaeresis, KS_Odiaeresis, + KC(45), KS_udiaeresis, KS_Udiaeresis, + KC(46), KS_oacute, KS_Oacute, + KC(47), KS_odoubleacute,KS_Odoubleacute,KS_division, + KC(48), KS_uacute, KS_Uacute, KS_multiply, + KC(49), KS_udoubleacute,KS_Udoubleacute,KS_currency, + KC(50), KS_udoubleacute,KS_Udoubleacute,KS_currency, + KC(51), KS_eacute, KS_Eacute, KS_dollar, + KC(52), KS_aacute, KS_Aacute, KS_ssharp, + KC(53), KS_0, KS_section, + KC(54), KS_comma, KS_question, KS_semicolon, + KC(55), KS_period, KS_colon, + KC(56), KS_minus, KS_underscore, KS_asterisk, + KC(100), KS_iacute, KS_Iacute, KS_less, + KC(230), KS_Mode_switch, KS_Multi_key, +}; + +static const keysym_t ukbd_keydesc_si[]= +{ +/* pos normal shifted altgr shift-altgr */ + KC(5), KS_b, KS_B, KS_braceleft, + KC(9), KS_f, KS_F, KS_bracketleft, + KC(10), KS_g, KS_G, KS_bracketright, + KC(14), KS_k, KS_K, KS_L2_lstroke, + KC(15), KS_l, KS_L, KS_L2_Lstroke, + KC(16), KS_m, KS_M, KS_section, + KC(17), KS_n, KS_N, KS_braceright, + KC(20), KS_q, KS_Q, KS_backslash, + KC(25), KS_v, KS_V, KS_at, + KC(26), KS_w, KS_W, KS_bar, + KC(28), KS_z, KS_Z, + KC(29), KS_y, KS_Y, + KC(30), KS_1, KS_exclam, KS_asciitilde, + KC(31), KS_2, KS_quotedbl, KS_L2_caron, + KC(32), KS_3, KS_numbersign, KS_asciicircum, + KC(33), KS_4, KS_dollar, KS_L2_breve, + KC(34), KS_5, KS_percent, KS_degree, + KC(35), KS_6, KS_ampersand, KS_L2_ogonek, + KC(36), KS_7, KS_slash, KS_grave, + KC(37), KS_8, KS_parenleft, KS_L2_dotabove, + KC(38), KS_9, KS_parenright, KS_acute, + KC(39), KS_0, KS_equal, KS_L2_dblacute, + KC(45), KS_apostrophe, KS_question, KS_diaeresis, + KC(46), KS_plus, KS_asterisk, KS_cedilla, + KC(47), KS_L2_scaron, KS_L2_Scaron, KS_division, + KC(48), KS_L2_dstroke, KS_L2_Dstroke, KS_multiply, + KC(49), KS_L2_zcaron, KS_L2_Zcaron, KS_currency, + KC(50), KS_L2_zcaron, KS_L2_Zcaron, KS_currency, + KC(51), KS_L2_ccaron, KS_L2_Ccaron, + KC(52), KS_L2_cacute, KS_L2_Cacute, KS_ssharp, + KC(53), KS_cedilla, KS_diaeresis, + KC(54), KS_comma, KS_semicolon, + KC(55), KS_period, KS_colon, + KC(56), KS_minus, KS_underscore, + KC(100), KS_less, KS_greater, + KC(230), KS_Mode_switch, KS_Multi_key, +}; + +static const keysym_t ukbd_keydesc_cf[] = { +/* pos normal shifted altgr shift-altgr */ + KC(16), KS_m, KS_M, KS_mu, + KC(18), KS_o, KS_O, KS_section, + KC(19), KS_p, KS_P, KS_paragraph, + KC(30), KS_1, KS_exclam, KS_plusminus, + KC(31), KS_2, KS_quotedbl, KS_at, + KC(32), KS_3, KS_slash, KS_sterling, + KC(33), KS_4, KS_dollar, KS_cent, + KC(34), KS_5, KS_percent, KS_diaeresis, + KC(35), KS_6, KS_question, KS_macron, + KC(36), KS_7, KS_ampersand, KS_brokenbar, + KC(37), KS_8, KS_asterisk, KS_twosuperior, + KC(38), KS_9, KS_parenleft, KS_threesuperior, + KC(39), KS_0, KS_parenright, KS_onequarter, + KC(45), KS_minus, KS_underscore, KS_onehalf, + KC(46), KS_equal, KS_plus, KS_threequarters, + KC(47), KS_dead_circumflex,KS_dead_circumflex,KS_bracketleft, + KC(48), KS_dead_cedilla,KS_dead_diaeresis,KS_bracketright, + KC(49), KS_less, KS_greater, KS_braceright, + KC(50), KS_less, KS_greater, KS_braceright, + KC(51), KS_semicolon, KS_colon, KS_asciitilde, + KC(52), KS_dead_grave, KS_dead_grave, KS_braceleft, + KC(53), KS_numbersign, KS_bar, KS_backslash, + KC(54), KS_comma, KS_apostrophe, KS_hyphen, + KC(55), KS_period, KS_period, + KC(56), KS_eacute, KS_Eacute, KS_dead_acute, + KC(100), KS_guillemotleft,KS_guillemotright,KS_degree, + KC(230), KS_Mode_switch,KS_Multi_key, +}; + +static const keysym_t ukbd_keydesc_cf_nodead[] = { +/* pos normal shifted altgr shift-altgr */ + KC(47), KS_asciicircum,KS_asciicircum,KS_bracketleft, + KC(48), KS_cedilla, KS_diaeresis, KS_bracketright, + KC(52), KS_grave, KS_grave, KS_braceleft, + KC(56), KS_eacute, KS_Eacute, KS_acute, +}; + +static const keysym_t ukbd_keydesc_lv[] = { +/* pos normal shifted altgr shift-altgr */ + KC(4), KS_a, KS_A, KS_L7_amacron, KS_L7_Amacron, + KC(6), KS_c, KS_C, KS_L7_ccaron, KS_L7_Ccaron, + KC(8), KS_e, KS_E, KS_L7_emacron, KS_L7_Emacron, + KC(10), KS_g, KS_G, KS_L7_gcedilla, KS_L7_Gcedilla, + KC(12), KS_i, KS_I, KS_L7_imacron, KS_L7_Imacron, + KC(14), KS_k, KS_K, KS_L7_kcedilla, KS_L7_Kcedilla, + KC(15), KS_l, KS_L, KS_L7_lcedilla, KS_L7_Lcedilla, + KC(17), KS_n, KS_N, KS_L7_ncedilla, KS_L7_Ncedilla, + KC(18), KS_o, KS_O, KS_L7_omacron, KS_L7_Omacron, + KC(22), KS_s, KS_S, KS_L7_scaron, KS_L7_Scaron, + KC(24), KS_u, KS_U, KS_L7_umacron, KS_L7_Umacron, + KC(29), KS_z, KS_Z, KS_L7_zcaron, KS_L7_Zcaron, + KC(230), KS_Mode_switch, KS_Multi_key, +}; + +static const keysym_t ukbd_keydesc_nl[] = { +/* pos normal shifted altgr shift-altgr */ + KC(6), KS_c, KS_C, KS_cent, + KC(16), KS_m, KS_M, KS_mu, + KC(21), KS_r, KS_R, KS_paragraph, + KC(22), KS_s, KS_S, KS_ssharp, + KC(27), KS_x, KS_X, KS_guillemotright, + KC(29), KS_z, KS_Z, KS_guillemotleft, + KC(30), KS_1, KS_exclam, KS_onesuperior, + KC(31), KS_2, KS_quotedbl, KS_twosuperior, + KC(32), KS_3, KS_numbersign, KS_threesuperior, + KC(33), KS_4, KS_dollar, KS_onequarter, + KC(34), KS_5, KS_percent, KS_onehalf, + KC(35), KS_6, KS_ampersand, KS_threequarters, + KC(36), KS_7, KS_underscore, KS_sterling, + KC(37), KS_8, KS_parenleft, KS_braceleft, + KC(38), KS_9, KS_parenright, KS_braceright, + KC(39), KS_0, KS_apostrophe, + KC(45), KS_slash, KS_question, KS_backslash, + KC(46), KS_degree, KS_dead_tilde, KS_dead_cedilla, + KC(47), KS_dead_diaeresis,KS_dead_circumflex, + KC(48), KS_asterisk, KS_bar, + KC(49), KS_less, KS_greater, + KC(50), KS_less, KS_greater, + KC(51), KS_plus, KS_plusminus, + KC(52), KS_dead_acute, KS_dead_grave, + KC(53), KS_at, KS_section, KS_notsign, + KC(54), KS_comma, KS_semicolon, + KC(55), KS_period, KS_colon, KS_periodcentered, + KC(56), KS_minus, KS_equal, + KC(100), KS_bracketright,KS_bracketleft, KS_brokenbar, + KC(230), KS_Mode_switch, KS_Multi_key, +}; + +static const keysym_t ukbd_keydesc_nl_nodead[] = { +/* pos normal shifted altgr shift-altgr */ + KC(46), KS_degree, KS_asciitilde, KS_cedilla, + KC(47), KS_quotedbl, KS_asciicircum, + KC(52), KS_apostrophe, KS_grave, +}; + +#define KBD_MAP(name, base, map) \ + { name, base, sizeof(map)/sizeof(keysym_t), map } + +const struct wscons_keydesc ukbd_keydesctab[] = { + KBD_MAP(KB_US, 0, ukbd_keydesc_us), + KBD_MAP(KB_DE, KB_US, ukbd_keydesc_de), + KBD_MAP(KB_DE | KB_NODEAD, KB_DE, ukbd_keydesc_de_nodead), + KBD_MAP(KB_FR, KB_US, ukbd_keydesc_fr), + KBD_MAP(KB_FR | KB_APPLE, KB_FR, ukbd_keydesc_fr_apple), + KBD_MAP(KB_FR | KB_DVORAK, KB_US, ukbd_keydesc_fr_dvorak_bepo), + KBD_MAP(KB_DK, KB_US, ukbd_keydesc_dk), + KBD_MAP(KB_DK | KB_NODEAD, KB_DK, ukbd_keydesc_dk_nodead), + KBD_MAP(KB_IT, KB_US, ukbd_keydesc_it), + KBD_MAP(KB_UK, KB_US, ukbd_keydesc_uk), + KBD_MAP(KB_JP, KB_US, ukbd_keydesc_jp), + KBD_MAP(KB_SV, KB_DK, ukbd_keydesc_sv), + KBD_MAP(KB_SV | KB_NODEAD, KB_SV, ukbd_keydesc_sv_nodead), + KBD_MAP(KB_NO, KB_DK, ukbd_keydesc_no), + KBD_MAP(KB_NO | KB_NODEAD, KB_NO, ukbd_keydesc_no_nodead), + KBD_MAP(KB_US | KB_DVORAK, KB_US, ukbd_keydesc_us_dvorak), + KBD_MAP(KB_US | KB_SWAPCTRLCAPS, KB_US, ukbd_keydesc_swapctrlcaps), + KBD_MAP(KB_US | KB_IOPENER, KB_US, ukbd_keydesc_iopener), + KBD_MAP(KB_JP | KB_SWAPCTRLCAPS, KB_JP, ukbd_keydesc_swapctrlcaps), + KBD_MAP(KB_FR | KB_SWAPCTRLCAPS, KB_FR, ukbd_keydesc_swapctrlcaps), + KBD_MAP(KB_FR | KB_APPLE | KB_SWAPCTRLCAPS, KB_FR | KB_APPLE, + ukbd_keydesc_swapctrlcaps), + KBD_MAP(KB_FR | KB_DVORAK | KB_SWAPCTRLCAPS, KB_FR | KB_DVORAK, + ukbd_keydesc_swapctrlcaps), + KBD_MAP(KB_BE | KB_SWAPCTRLCAPS, KB_BE, ukbd_keydesc_swapctrlcaps), + KBD_MAP(KB_US | KB_DVORAK | KB_SWAPCTRLCAPS, KB_US | KB_DVORAK, + ukbd_keydesc_swapctrlcaps), + KBD_MAP(KB_US | KB_IOPENER | KB_SWAPCTRLCAPS, KB_US | KB_IOPENER, + ukbd_keydesc_swapctrlcaps), + KBD_MAP(KB_ES, KB_US, ukbd_keydesc_es), + KBD_MAP(KB_BE, KB_US, ukbd_keydesc_be), + KBD_MAP(KB_RU, KB_US, ukbd_keydesc_ru), + KBD_MAP(KB_UA, KB_US, ukbd_keydesc_ua), + KBD_MAP(KB_SG, KB_US, ukbd_keydesc_sg), + KBD_MAP(KB_SG | KB_NODEAD, KB_SG, ukbd_keydesc_sg_nodead), + KBD_MAP(KB_SF, KB_SG, ukbd_keydesc_sf), + KBD_MAP(KB_SF | KB_NODEAD, KB_SF, ukbd_keydesc_sg_nodead), + KBD_MAP(KB_PT, KB_US, ukbd_keydesc_pt), + KBD_MAP(KB_PT | KB_APPLE, KB_PT, ukbd_keydesc_pt_apple), + KBD_MAP(KB_LT, KB_US, ukbd_keydesc_lt), + KBD_MAP(KB_LA, KB_US, ukbd_keydesc_la), + KBD_MAP(KB_BR, KB_US, ukbd_keydesc_br), + KBD_MAP(KB_TR, KB_US, ukbd_keydesc_tr), + KBD_MAP(KB_TR | KB_NODEAD, KB_TR, ukbd_keydesc_tr_nodead), + KBD_MAP(KB_PL, KB_US, ukbd_keydesc_pl), + KBD_MAP(KB_HU, KB_US, ukbd_keydesc_hu), + KBD_MAP(KB_SI, KB_US, ukbd_keydesc_si), + KBD_MAP(KB_CF, KB_US, ukbd_keydesc_cf), + KBD_MAP(KB_CF | KB_NODEAD, KB_CF, ukbd_keydesc_cf_nodead), + KBD_MAP(KB_LV, KB_US, ukbd_keydesc_lv), + KBD_MAP(KB_NL, KB_US, ukbd_keydesc_nl), + KBD_MAP(KB_NL | KB_NODEAD, KB_NL, ukbd_keydesc_nl_nodead), + {0, 0, 0, 0} +}; + +#undef KBD_MAP +#undef KC diff --git a/wii/libogc/libwiikeyboard/usbkeyboard.c b/wii/libogc/libwiikeyboard/usbkeyboard.c new file mode 100644 index 0000000000..1b2d45a6e3 --- /dev/null +++ b/wii/libogc/libwiikeyboard/usbkeyboard.c @@ -0,0 +1,495 @@ +/*------------------------------------------------------------- + +usbkeyboard.c -- Usb keyboard support(boot protocol) + +Copyright (C) 2008, 2009 +DAVY Guillaume davyg2@gmail.com +dhewg + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + +#include +#include + +#include +#include + +#include + +#define HEAP_SIZE 4096 +#define DEVLIST_MAXSIZE 8 +#define KEY_ERROR 0x01 +#define MAXKEYCODE 6 + +#define USB_MOD_CTRL_L 0x01 +#define USB_MOD_SHIFT_L 0x02 +#define USB_MOD_ALT_L 0x04 +#define USB_MOD_META_L 0x08 +#define USB_MOD_CTRL_R 0x10 +#define USB_MOD_SHIFT_R 0x20 +#define USB_MOD_ALT_R 0x40 +#define USB_MOD_META_R 0x80 + +struct ukbd_data { + u16 modifiers; + u8 keycode[MAXKEYCODE]; +} ATTRIBUTE_PACKED; + +struct ukbd { + bool connected; + + s32 fd; + + struct ukbd_data sc_ndata; + struct ukbd_data sc_odata; + + u8 leds; + + eventcallback cb; + + u8 configuration; + u32 interface; + u32 altInterface; + + u8 ep; + u32 ep_size; +}; + +static s32 hId = -1; +static struct ukbd *_kbd = NULL; + +static u8 _ukbd_mod_map[][2] = { + { USB_MOD_CTRL_L, 224 }, + { USB_MOD_SHIFT_L, 225 }, + { USB_MOD_ALT_L, 226 }, + { USB_MOD_META_L, 227 }, + { USB_MOD_CTRL_R, 228 }, + { USB_MOD_SHIFT_R, 229 }, + { USB_MOD_ALT_R, 230 }, + { USB_MOD_META_R, 231 } +}; + +#define MODMAPSIZE (sizeof(_ukbd_mod_map)/sizeof(_ukbd_mod_map[0])) + +static void _submit(USBKeyboard_eventType type, u8 code) +{ + if (!_kbd->cb) + return; + + USBKeyboard_event ev; + ev.type = type; + ev.keyCode = code; + + _kbd->cb(ev); +} + +//Callback when the keyboard is disconnected +static s32 _disconnect(s32 retval, void *data) +{ + (void) data; + + _kbd->connected = false; + + _submit(USBKEYBOARD_DISCONNECTED, 0); + + return 1; +} + +//Get the protocol, 0=boot protocol and 1=report protocol +static s32 _get_protocol(void) +{ + s32 protocol; + u8 *buffer = 0; + + if(!_kbd || _kbd->fd==-1) return -1; + + buffer = iosAlloc(hId, 1); + + if (buffer == NULL) + return -1; + + USB_WriteCtrlMsg(_kbd->fd, USB_REQTYPE_INTERFACE_GET, USB_REQ_GETPROTOCOL, 0, _kbd->interface, 1, buffer); + + protocol = *buffer; + iosFree(hId, buffer); + + return protocol; +} + +//Modify the protocol, 0=boot protocol and 1=report protocol +static s32 _set_protocol(u8 protocol) +{ + if(!_kbd || _kbd->fd==-1) return -1; + return USB_WriteCtrlMsg(_kbd->fd, USB_REQTYPE_INTERFACE_SET, USB_REQ_SETPROTOCOL, protocol, _kbd->interface, 0, NULL); +} + +//Get an input report from interrupt pipe +static s32 _get_input_report(void) +{ + u8 *buffer = 0; + + if(!_kbd || _kbd->fd==-1) return -1; + buffer = iosAlloc(hId, 8); + + if (buffer == NULL) + return -1; + + s32 ret = USB_ReadIntrMsg(_kbd->fd, _kbd->ep, 8, buffer); + + memcpy(&_kbd->sc_ndata, buffer, 8); + iosFree(hId, buffer); + + _kbd->sc_ndata.modifiers = (_kbd->sc_ndata.modifiers << 8) | (_kbd->sc_ndata.modifiers >> 8); + + return ret; +} + +#if 0 +//Get an input report from control pipe +static s32 _get_output_report(u8 *leds) +{ + u8 *buffer = 0; + if(!_kbd || _kbd->fd==-1) return -1; + buffer = iosAlloc(hId, 1); + + if (buffer == NULL) + return -1; + + s32 ret = USB_WriteCtrlMsg(_kbd->fd, USB_REQTYPE_INTERFACE_GET, USB_REQ_GETREPORT, USB_REPTYPE_OUTPUT << 8, _kbd->interface, 1, buffer); + + memcpy(leds, buffer, 1); + iosFree(hId, buffer); + + return ret; +} +#endif + +//Set an input report to control pipe +static s32 _set_output_report(void) +{ + u8 *buffer = 0; + if(!_kbd || _kbd->fd==-1) return -1; + buffer = iosAlloc(hId, 1); + + if (buffer == NULL) + return -1; + + memcpy(buffer, &_kbd->leds, 1); + s32 ret = USB_WriteCtrlMsg(_kbd->fd, USB_REQTYPE_INTERFACE_SET, USB_REQ_SETREPORT, USB_REPTYPE_OUTPUT << 8, _kbd->interface, 1, buffer); + + iosFree(hId, buffer); + + return ret; +} + +//init the ioheap +s32 USBKeyboard_Initialize(void) +{ + if (hId > 0) + return 0; + + hId = iosCreateHeap(HEAP_SIZE); + + if (hId < 0) + return IPC_ENOHEAP; + + return IPC_OK; +} + +s32 USBKeyboard_Deinitialize(void) +{ + return IPC_OK; +} + +//Search for a keyboard connected to the wii usb port +//Thanks to Sven Peter usbstorage support +s32 USBKeyboard_Open(const eventcallback cb) +{ + usb_device_entry *buffer; + u8 device_count, i, conf; + u16 vid, pid; + bool found = false; + u32 iConf, iInterface, iEp; + usb_devdesc udd; + usb_configurationdesc *ucd; + usb_interfacedesc *uid; + usb_endpointdesc *ued; + + buffer = (usb_device_entry*)iosAlloc(hId, DEVLIST_MAXSIZE * sizeof(usb_device_entry)); + if(buffer == NULL) + return -1; + + memset(buffer, 0, DEVLIST_MAXSIZE * sizeof(usb_device_entry)); + + if (USB_GetDeviceList(buffer, DEVLIST_MAXSIZE, USB_CLASS_HID, &device_count) < 0) + { + iosFree(hId, buffer); + return -2; + } + + if (_kbd) { + if (_kbd->fd != -1) USB_CloseDevice(&_kbd->fd); + } else { + _kbd = (struct ukbd *) malloc(sizeof(struct ukbd)); + + if (!_kbd) + return -1; + } + + memset(_kbd, 0, sizeof(struct ukbd)); + _kbd->fd = -1; + + for (i = 0; i < device_count; i++) + { + vid = buffer[i].vid;; + pid = buffer[i].pid; + + if ((vid == 0) || (pid == 0)) + continue; + + s32 fd = 0; + if (USB_OpenDevice(buffer[i].device_id, vid, pid, &fd) < 0) + continue; + + if (USB_GetDescriptors(fd, &udd) < 0) { + USB_CloseDevice(&fd); + continue; + } + + for(iConf = 0; iConf < udd.bNumConfigurations; iConf++) + { + ucd = &udd.configurations[iConf]; + + for(iInterface = 0; iInterface < ucd->bNumInterfaces; iInterface++) + { + uid = &ucd->interfaces[iInterface]; + + if ((uid->bInterfaceClass == USB_CLASS_HID) && + (uid->bInterfaceSubClass == USB_SUBCLASS_BOOT) && + (uid->bInterfaceProtocol== USB_PROTOCOL_KEYBOARD)) + { + for(iEp = 0; iEp < uid->bNumEndpoints; iEp++) + { + ued = &uid->endpoints[iEp]; + + if (ued->bmAttributes != USB_ENDPOINT_INTERRUPT) + continue; + + if (!(ued->bEndpointAddress & USB_ENDPOINT_IN)) + continue; + + _kbd->fd = fd; + _kbd->cb = cb; + + _kbd->configuration = ucd->bConfigurationValue; + _kbd->interface = uid->bInterfaceNumber; + _kbd->altInterface = uid->bAlternateSetting; + + _kbd->ep = ued->bEndpointAddress; + _kbd->ep_size = ued->wMaxPacketSize; + + found = true; + + break; + } + } + + if (found) + break; + } + + if (found) + break; + } + + USB_FreeDescriptors(&udd); + + if (found) + break; + else + USB_CloseDevice(&fd); + } + + iosFree(hId, buffer); + + if (!found) + return -3; + + if (USB_GetConfiguration(_kbd->fd, &conf) < 0) + { + USBKeyboard_Close(); + return -4; + } + + if (conf != _kbd->configuration && + USB_SetConfiguration(_kbd->fd, _kbd->configuration) < 0) + { + USBKeyboard_Close(); + return -5; + } + + if (_kbd->altInterface != 0 && + USB_SetAlternativeInterface(_kbd->fd, _kbd->interface, _kbd->altInterface) < 0) + { + USBKeyboard_Close(); + return -6; + } + + if (_get_protocol() != 0) + { + if (_set_protocol(0) < 0) + { + USBKeyboard_Close(); + return -6; + } + + if (_get_protocol() == 1) + { + USBKeyboard_Close(); + return -7; + } + } + + if (USB_DeviceRemovalNotifyAsync(_kbd->fd, &_disconnect, NULL) < 0) + { + USBKeyboard_Close(); + return -8; + } + + _kbd->connected = true; + + return 1; +} + +//Close the device +void USBKeyboard_Close(void) +{ + if (!_kbd) + return; + + if(_kbd->fd != -1) + USB_CloseDevice(&_kbd->fd); + + free(_kbd); + _kbd = NULL; + + return; +} + +bool USBKeyboard_IsConnected(void) { + if (!_kbd) + return false; + + return _kbd->connected; +} + +//Scan for key presses and generate events for the callback function +s32 USBKeyboard_Scan(void) +{ + int i, j, index; + + if (!_kbd) + return -1; + + if (_get_input_report() < 0) + return -2; + + if (_kbd->sc_ndata.keycode[0] == KEY_ERROR) + return 0; + + if (_kbd->sc_ndata.modifiers != _kbd->sc_odata.modifiers) { + for (i = 0; i < MODMAPSIZE; ++i) { + if ((_kbd->sc_odata.modifiers & _ukbd_mod_map[i][0]) + && !(_kbd->sc_ndata.modifiers & _ukbd_mod_map[i][0])) + _submit(USBKEYBOARD_RELEASED, _ukbd_mod_map[i][1]); + else if ((_kbd->sc_ndata.modifiers & _ukbd_mod_map[i][0]) + && !(_kbd->sc_odata.modifiers & _ukbd_mod_map[i][0])) + _submit(USBKEYBOARD_PRESSED, _ukbd_mod_map[i][1]); + } + } + + for (i = 0; i < MAXKEYCODE; i++) { + if (_kbd->sc_odata.keycode[i] > 3) { + index = -1; + + for (j = 0; j < MAXKEYCODE; j++) { + if (_kbd->sc_odata.keycode[i] == _kbd->sc_ndata.keycode[j]) { + index = j; + break; + } + } + + if (index == -1) + _submit(USBKEYBOARD_RELEASED, _kbd->sc_odata.keycode[i]); + } + + if (_kbd->sc_ndata.keycode[i] > 3) { + index = -1; + + for (j = 0; j < MAXKEYCODE; j++) { + if (_kbd->sc_ndata.keycode[i] == _kbd->sc_odata.keycode[j]) { + index = j; + break; + } + } + + if (index == -1) + _submit(USBKEYBOARD_PRESSED, _kbd->sc_ndata.keycode[i]); + } + } + + _kbd->sc_odata = _kbd->sc_ndata; + + return 0; +} + +//Turn on/off a led +s32 USBKeyboard_SetLed(const USBKeyboard_led led, bool on) +{ + if (!_kbd) + return -1; + + if (on) + _kbd->leds = _kbd->leds | (1 << led ); + else + _kbd->leds = _kbd->leds & (255 ^ (1 << led)); + + if (_set_output_report() < 0) + return -2; + + return 1; +} + +//Toggle a led +s32 USBKeyboard_ToggleLed(const USBKeyboard_led led) +{ + if (!_kbd) + return -1; + + _kbd->leds = _kbd->leds ^ (1 << led); + + if (_set_output_report() < 0) + return -2; + + return 1; +} + diff --git a/wii/libogc/libwiikeyboard/wskbdutil.c b/wii/libogc/libwiikeyboard/wskbdutil.c new file mode 100644 index 0000000000..8ed2495afc --- /dev/null +++ b/wii/libogc/libwiikeyboard/wskbdutil.c @@ -0,0 +1,492 @@ +/*- + * Copyright (c) 1997 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Juergen Hannken-Illjes. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include + +#include + +#include "wsksymvar.h" + +static struct compose_tab_s { + keysym_t elem[2]; + keysym_t result; +} compose_tab[] = { + { { KS_plus, KS_plus }, KS_numbersign }, + { { KS_a, KS_a }, KS_at }, + { { KS_parenleft, KS_parenleft }, KS_bracketleft }, + { { KS_slash, KS_slash }, KS_backslash }, + { { KS_parenright, KS_parenright }, KS_bracketright }, + { { KS_parenleft, KS_minus }, KS_braceleft }, + { { KS_slash, KS_minus }, KS_bar }, + { { KS_parenright, KS_minus }, KS_braceright }, + { { KS_exclam, KS_exclam }, KS_exclamdown }, + { { KS_c, KS_slash }, KS_cent }, + { { KS_l, KS_minus }, KS_sterling }, + { { KS_y, KS_minus }, KS_yen }, + { { KS_s, KS_o }, KS_section }, + { { KS_x, KS_o }, KS_currency }, + { { KS_c, KS_o }, KS_copyright }, + { { KS_less, KS_less }, KS_guillemotleft }, + { { KS_greater, KS_greater }, KS_guillemotright }, + { { KS_question, KS_question }, KS_questiondown }, + { { KS_dead_acute, KS_space }, KS_apostrophe }, + { { KS_dead_grave, KS_space }, KS_grave }, + { { KS_dead_tilde, KS_space }, KS_asciitilde }, + { { KS_dead_circumflex, KS_space }, KS_asciicircum }, + { { KS_dead_diaeresis, KS_space }, KS_quotedbl }, + { { KS_dead_cedilla, KS_space }, KS_comma }, + { { KS_dead_circumflex, KS_A }, KS_Acircumflex }, + { { KS_dead_diaeresis, KS_A }, KS_Adiaeresis }, + { { KS_dead_grave, KS_A }, KS_Agrave }, + { { KS_dead_abovering, KS_A }, KS_Aring }, + { { KS_dead_tilde, KS_A }, KS_Atilde }, + { { KS_dead_cedilla, KS_C }, KS_Ccedilla }, + { { KS_dead_acute, KS_E }, KS_Eacute }, + { { KS_dead_circumflex, KS_E }, KS_Ecircumflex }, + { { KS_dead_diaeresis, KS_E }, KS_Ediaeresis }, + { { KS_dead_grave, KS_E }, KS_Egrave }, + { { KS_dead_acute, KS_I }, KS_Iacute }, + { { KS_dead_circumflex, KS_I }, KS_Icircumflex }, + { { KS_dead_diaeresis, KS_I }, KS_Idiaeresis }, + { { KS_dead_grave, KS_I }, KS_Igrave }, + { { KS_dead_tilde, KS_N }, KS_Ntilde }, + { { KS_dead_acute, KS_O }, KS_Oacute }, + { { KS_dead_circumflex, KS_O }, KS_Ocircumflex }, + { { KS_dead_diaeresis, KS_O }, KS_Odiaeresis }, + { { KS_dead_grave, KS_O }, KS_Ograve }, + { { KS_dead_tilde, KS_O }, KS_Otilde }, + { { KS_dead_acute, KS_U }, KS_Uacute }, + { { KS_dead_circumflex, KS_U }, KS_Ucircumflex }, + { { KS_dead_diaeresis, KS_U }, KS_Udiaeresis }, + { { KS_dead_grave, KS_U }, KS_Ugrave }, + { { KS_dead_acute, KS_Y }, KS_Yacute }, + { { KS_dead_acute, KS_a }, KS_aacute }, + { { KS_dead_circumflex, KS_a }, KS_acircumflex }, + { { KS_dead_diaeresis, KS_a }, KS_adiaeresis }, + { { KS_dead_grave, KS_a }, KS_agrave }, + { { KS_dead_abovering, KS_a }, KS_aring }, + { { KS_dead_tilde, KS_a }, KS_atilde }, + { { KS_dead_cedilla, KS_c }, KS_ccedilla }, + { { KS_dead_acute, KS_e }, KS_eacute }, + { { KS_dead_circumflex, KS_e }, KS_ecircumflex }, + { { KS_dead_diaeresis, KS_e }, KS_ediaeresis }, + { { KS_dead_grave, KS_e }, KS_egrave }, + { { KS_dead_acute, KS_i }, KS_iacute }, + { { KS_dead_circumflex, KS_i }, KS_icircumflex }, + { { KS_dead_diaeresis, KS_i }, KS_idiaeresis }, + { { KS_dead_grave, KS_i }, KS_igrave }, + { { KS_dead_tilde, KS_n }, KS_ntilde }, + { { KS_dead_acute, KS_o }, KS_oacute }, + { { KS_dead_circumflex, KS_o }, KS_ocircumflex }, + { { KS_dead_diaeresis, KS_o }, KS_odiaeresis }, + { { KS_dead_grave, KS_o }, KS_ograve }, + { { KS_dead_tilde, KS_o }, KS_otilde }, + { { KS_dead_acute, KS_u }, KS_uacute }, + { { KS_dead_circumflex, KS_u }, KS_ucircumflex }, + { { KS_dead_diaeresis, KS_u }, KS_udiaeresis }, + { { KS_dead_grave, KS_u }, KS_ugrave }, + { { KS_dead_acute, KS_y }, KS_yacute }, + { { KS_dead_diaeresis, KS_y }, KS_ydiaeresis }, + { { KS_quotedbl, KS_A }, KS_Adiaeresis }, + { { KS_quotedbl, KS_E }, KS_Ediaeresis }, + { { KS_quotedbl, KS_I }, KS_Idiaeresis }, + { { KS_quotedbl, KS_O }, KS_Odiaeresis }, + { { KS_quotedbl, KS_U }, KS_Udiaeresis }, + { { KS_quotedbl, KS_a }, KS_adiaeresis }, + { { KS_quotedbl, KS_e }, KS_ediaeresis }, + { { KS_quotedbl, KS_i }, KS_idiaeresis }, + { { KS_quotedbl, KS_o }, KS_odiaeresis }, + { { KS_quotedbl, KS_u }, KS_udiaeresis }, + { { KS_quotedbl, KS_y }, KS_ydiaeresis }, + { { KS_acute, KS_A }, KS_Aacute }, + { { KS_asciicircum, KS_A }, KS_Acircumflex }, + { { KS_grave, KS_A }, KS_Agrave }, + { { KS_asterisk, KS_A }, KS_Aring }, + { { KS_asciitilde, KS_A }, KS_Atilde }, + { { KS_cedilla, KS_C }, KS_Ccedilla }, + { { KS_acute, KS_E }, KS_Eacute }, + { { KS_asciicircum, KS_E }, KS_Ecircumflex }, + { { KS_grave, KS_E }, KS_Egrave }, + { { KS_acute, KS_I }, KS_Iacute }, + { { KS_asciicircum, KS_I }, KS_Icircumflex }, + { { KS_grave, KS_I }, KS_Igrave }, + { { KS_asciitilde, KS_N }, KS_Ntilde }, + { { KS_acute, KS_O }, KS_Oacute }, + { { KS_asciicircum, KS_O }, KS_Ocircumflex }, + { { KS_grave, KS_O }, KS_Ograve }, + { { KS_asciitilde, KS_O }, KS_Otilde }, + { { KS_acute, KS_U }, KS_Uacute }, + { { KS_asciicircum, KS_U }, KS_Ucircumflex }, + { { KS_grave, KS_U }, KS_Ugrave }, + { { KS_acute, KS_Y }, KS_Yacute }, + { { KS_acute, KS_a }, KS_aacute }, + { { KS_asciicircum, KS_a }, KS_acircumflex }, + { { KS_grave, KS_a }, KS_agrave }, + { { KS_asterisk, KS_a }, KS_aring }, + { { KS_asciitilde, KS_a }, KS_atilde }, + { { KS_cedilla, KS_c }, KS_ccedilla }, + { { KS_acute, KS_e }, KS_eacute }, + { { KS_asciicircum, KS_e }, KS_ecircumflex }, + { { KS_grave, KS_e }, KS_egrave }, + { { KS_acute, KS_i }, KS_iacute }, + { { KS_asciicircum, KS_i }, KS_icircumflex }, + { { KS_grave, KS_i }, KS_igrave }, + { { KS_asciitilde, KS_n }, KS_ntilde }, + { { KS_acute, KS_o }, KS_oacute }, + { { KS_asciicircum, KS_o }, KS_ocircumflex }, + { { KS_grave, KS_o }, KS_ograve }, + { { KS_asciitilde, KS_o }, KS_otilde }, + { { KS_acute, KS_u }, KS_uacute }, + { { KS_asciicircum, KS_u }, KS_ucircumflex }, + { { KS_grave, KS_u }, KS_ugrave }, + { { KS_acute, KS_y }, KS_yacute } +}; + +#define COMPOSE_SIZE sizeof(compose_tab)/sizeof(compose_tab[0]) + +static int compose_tab_inorder = 0; + +inline int compose_tab_cmp(struct compose_tab_s *, + struct compose_tab_s *); +keysym_t ksym_upcase(keysym_t); +void fillmapentry(const keysym_t *, int, struct wscons_keymap *); + +inline int +compose_tab_cmp(i, j) + struct compose_tab_s *i, *j; +{ + if (i->elem[0] == j->elem[0]) + return(i->elem[1] - j->elem[1]); + else + return(i->elem[0] - j->elem[0]); +} + +keysym_t +wskbd_compose_value(compose_buf) + keysym_t *compose_buf; +{ + int i, j, r; + struct compose_tab_s v; + + if (! compose_tab_inorder) { + /* Insertion sort. */ + for (i = 1; i < COMPOSE_SIZE; i++) { + v = compose_tab[i]; + /* find correct slot, moving others up */ + for (j = i; --j >= 0 && compose_tab_cmp(& v, & compose_tab[j]) < 0; ) + compose_tab[j + 1] = compose_tab[j]; + compose_tab[j + 1] = v; + } + compose_tab_inorder = 1; + } + + for (j = 0, i = COMPOSE_SIZE; i != 0; i /= 2) { + if (compose_tab[j + i/2].elem[0] == compose_buf[0]) { + if (compose_tab[j + i/2].elem[1] == compose_buf[1]) + return(compose_tab[j + i/2].result); + r = compose_tab[j + i/2].elem[1] < compose_buf[1]; + } else + r = compose_tab[j + i/2].elem[0] < compose_buf[0]; + if (r) { + j += i/2 + 1; + i--; + } + } + + return(KS_voidSymbol); +} + +static const u_char latin1_to_upper[256] = { +/* 0 8 1 9 2 a 3 b 4 c 5 d 6 e 7 f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 1 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 1 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 2 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 2 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 4 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 4 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 5 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 5 */ + 0x00, 'A', 'B', 'C', 'D', 'E', 'F', 'G', /* 6 */ + 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', /* 6 */ + 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', /* 7 */ + 'X', 'Y', 'Z', 0x00, 0x00, 0x00, 0x00, 0x00, /* 7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 8 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 8 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 9 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 9 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* a */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* a */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* b */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* b */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* c */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* c */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* d */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* d */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* e */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* e */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0x00, /* f */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0x00, /* f */ +}; + +keysym_t +ksym_upcase(ksym) + keysym_t ksym; +{ + if (ksym >= KS_f1 && ksym <= KS_f20) + return(KS_F1 - KS_f1 + ksym); + + if (KS_GROUP(ksym) == KS_GROUP_Ascii && ksym <= 0xff && + latin1_to_upper[ksym] != 0x00) + return(latin1_to_upper[ksym]); + + return(ksym); +} + +void +fillmapentry(kp, len, mapentry) + const keysym_t *kp; + int len; + struct wscons_keymap *mapentry; +{ + switch (len) { + case 0: + mapentry->group1[0] = KS_voidSymbol; + mapentry->group1[1] = KS_voidSymbol; + mapentry->group2[0] = KS_voidSymbol; + mapentry->group2[1] = KS_voidSymbol; + break; + + case 1: + mapentry->group1[0] = kp[0]; + mapentry->group1[1] = ksym_upcase(kp[0]); + mapentry->group2[0] = mapentry->group1[0]; + mapentry->group2[1] = mapentry->group1[1]; + break; + + case 2: + mapentry->group1[0] = kp[0]; + mapentry->group1[1] = kp[1]; + mapentry->group2[0] = mapentry->group1[0]; + mapentry->group2[1] = mapentry->group1[1]; + break; + + case 3: + mapentry->group1[0] = kp[0]; + mapentry->group1[1] = kp[1]; + mapentry->group2[0] = kp[2]; + mapentry->group2[1] = ksym_upcase(kp[2]); + break; + + case 4: + mapentry->group1[0] = kp[0]; + mapentry->group1[1] = kp[1]; + mapentry->group2[0] = kp[2]; + mapentry->group2[1] = kp[3]; + break; + + } +} + +void +wskbd_get_mapentry(mapdata, kc, mapentry) + const struct wskbd_mapdata *mapdata; + int kc; + struct wscons_keymap *mapentry; +{ + kbd_t cur; + const keysym_t *kp; + const struct wscons_keydesc *mp; + int l; + keysym_t ksg; + + mapentry->command = KS_voidSymbol; + mapentry->group1[0] = KS_voidSymbol; + mapentry->group1[1] = KS_voidSymbol; + mapentry->group2[0] = KS_voidSymbol; + mapentry->group2[1] = KS_voidSymbol; + + for (cur = mapdata->layout & ~KB_HANDLEDBYWSKBD; cur != 0; ) { + mp = mapdata->keydesc; + while (mp->map_size > 0) { + if (mp->name == cur) + break; + mp++; + } + + /* If map not found, return */ + if (mp->map_size <= 0) + return; + + for (kp = mp->map; kp < mp->map + mp->map_size; kp++) { + ksg = KS_GROUP(*kp); + if (ksg == KS_GROUP_Keycode && + KS_VALUE(*kp) == kc) { + /* First skip keycode and possible command */ + kp++; + if (KS_GROUP(*kp) == KS_GROUP_Command || + *kp == KS_Cmd || *kp == KS_Cmd1 || *kp == KS_Cmd2) + mapentry->command = *kp++; + + for (l = 0; kp + l < mp->map + mp->map_size; + l++) { + ksg = KS_GROUP(kp[l]); + if (ksg == KS_GROUP_Keycode) + break; + } + if (l > 4) { + fprintf(stderr, "wskbd_get_mapentry: %lu(%d): bad entry", + mp->name, *kp); + return; + } + fillmapentry(kp, l, mapentry); + return; + } + } + + cur = mp->base; + } +} + +void +wskbd_init_keymap(newlen, map, maplen) + int newlen; + struct wscons_keymap **map; + int *maplen; +{ + int i; + + if (newlen != *maplen) { + if (*maplen > 0) + free(*map); + *maplen = newlen; + *map = malloc(newlen*sizeof(struct wscons_keymap)); + } + + for (i = 0; i < *maplen; i++) { + (*map)[i].command = KS_voidSymbol; + (*map)[i].group1[0] = KS_voidSymbol; + (*map)[i].group1[1] = KS_voidSymbol; + (*map)[i].group2[0] = KS_voidSymbol; + (*map)[i].group2[1] = KS_voidSymbol; + } +} + +int +wskbd_load_keymap(mapdata, map, maplen) + const struct wskbd_mapdata *mapdata; + struct wscons_keymap **map; + int *maplen; +{ + int i, s, kc, stack_ptr; + const keysym_t *kp; + const struct wscons_keydesc *mp, *stack[10]; + kbd_t cur; + keysym_t ksg; + + for (cur = mapdata->layout & ~KB_HANDLEDBYWSKBD, stack_ptr = 0; + cur != 0; stack_ptr++) { + mp = mapdata->keydesc; + while (mp->map_size > 0) { + if (cur == 0 || mp->name == cur) { + break; + } + mp++; + } + + if (stack_ptr == sizeof(stack)/sizeof(stack[0])) { + fprintf(stderr, "wskbd_load_keymap: %lu: recursion too deep", + mapdata->layout); + return(EINVAL); + } + + if (mp->map_size <= 0) + return(EINVAL); + + stack[stack_ptr] = mp; + cur = mp->base; + } + + for (i = 0, s = stack_ptr - 1; s >= 0; s--) { + mp = stack[s]; + for (kp = mp->map; kp < mp->map + mp->map_size; kp++) { + ksg = KS_GROUP(*kp); + if (ksg == KS_GROUP_Keycode && KS_VALUE(*kp) > i) + i = KS_VALUE(*kp); + } + } + + wskbd_init_keymap(i + 1, map, maplen); + + for (s = stack_ptr - 1; s >= 0; s--) { + mp = stack[s]; + for (kp = mp->map; kp < mp->map + mp->map_size; ) { + ksg = KS_GROUP(*kp); + if (ksg != KS_GROUP_Keycode) { + fprintf(stderr, "wskbd_load_keymap: %lu(%d): bad entry", + mp->name, *kp); + return(EINVAL); + } + + kc = KS_VALUE(*kp); + kp++; + + if (KS_GROUP(*kp) == KS_GROUP_Command || + *kp == KS_Cmd || *kp == KS_Cmd1 || *kp == KS_Cmd2) { + (*map)[kc].command = *kp; + kp++; + } + + for (i = 0; kp + i < mp->map + mp->map_size; i++) { + ksg = KS_GROUP(kp[i]); + if (ksg == KS_GROUP_Keycode) + break; + } + + if (i > 4) { + fprintf(stderr, "wskbd_load_keymap: %lu(%d): bad entry", + mp->name, *kp); + return(EINVAL); + } + + fillmapentry(kp, i, &(*map)[kc]); + kp += i; + } + } + + return(0); +} diff --git a/wii/libogc/libwiikeyboard/wsksymvar.h b/wii/libogc/libwiikeyboard/wsksymvar.h new file mode 100644 index 0000000000..0bf10d3466 --- /dev/null +++ b/wii/libogc/libwiikeyboard/wsksymvar.h @@ -0,0 +1,69 @@ +/*- + * Copyright (c) 1997 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Juergen Hannken-Illjes. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _DEV_WSCONS_WSKSYMVAR_H_ +#define _DEV_WSCONS_WSKSYMVAR_H_ + +#include + +typedef u16 keysym_t; +typedef u32 kbd_t; + +struct wscons_keymap { + keysym_t command; + keysym_t group1[2]; + keysym_t group2[2]; +}; + +struct wscons_keydesc { + kbd_t name; /* name of this map */ + kbd_t base; /* map this one is based on */ + int map_size; /* size of map */ + const keysym_t *map; /* the map itself */ +}; + +struct wskbd_mapdata { + const struct wscons_keydesc *keydesc; + kbd_t layout; +}; + +/* layout variant bits ignored by mapping code */ +#define KB_HANDLEDBYWSKBD KB_METAESC + +/* + * Utility functions. + */ +void wskbd_get_mapentry(const struct wskbd_mapdata *, int, + struct wscons_keymap *); +void wskbd_init_keymap(int, struct wscons_keymap **, int *); +int wskbd_load_keymap(const struct wskbd_mapdata *, + struct wscons_keymap **, int *); +keysym_t wskbd_compose_value(keysym_t *); + +#endif /* !_DEV_WSCONS_WSKSYMVAR_H_ */ diff --git a/wii/libogc/lwbt/bt.h b/wii/libogc/lwbt/bt.h new file mode 100644 index 0000000000..d0ed63af8e --- /dev/null +++ b/wii/libogc/lwbt/bt.h @@ -0,0 +1,119 @@ +/** + * \addtogroup uip + * @{ + */ + +/** + * \file + * Header file for the uIP TCP/IP stack. + * \author Adam Dunkels + * + * The uIP TCP/IP stack header file contains definitions for a number + * of C macros that are used by uIP programs as well as internal uIP + * structures, TCP/IP header structures and function declarations. + * + */ + + +/* + * Copyright (c) 2001-2003, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * + */ + +#ifndef __BT_H__ +#define __BT_H__ + +#include "btopt.h" +#include "btarch.h" + +#define ERR_OK 0 +#define ERR_MEM -1 +#define ERR_BUF -2 +#define ERR_ABRT -3 +#define ERR_RST -4 +#define ERR_CLSD -5 +#define ERR_CONN -6 +#define ERR_VAL -7 +#define ERR_ARG -8 +#define ERR_RTE -9 +#define ERR_USE -10 +#define ERR_IF -11 +#define ERR_PKTSIZE -17 + +#define PROTO_ICMP 1 +#define PROTO_TCP 6 +#define PROTO_UDP 17 + +/* Headezes. */ +#define IP_HLEN 20 /* Size of IP header */ +#define TRANSPORT_HLEN 20 + +#define UDP_HLEN 8 /* Size of UDP header */ +#define TCP_HLEN 20 /* Size of TCP header */ +#define IPUDP_HLEN 28 /* Size of IP + UDP header */ +#define IPTCP_HLEN 40 /* Size of IP + TCP header */ + +/** + * Convert 16-bit quantity from host byte order to network byte order. + * + * This macro is primarily used for converting constants from host + * byte order to network byte order. For converting variables to + * network byte order, use the htons() function instead. + * + * \hideinitializer + */ +#ifndef HTONS +# if BYTE_ORDER == BIG_ENDIAN +# define HTONS(n) (n) +# else /* BYTE_ORDER == BIG_ENDIAN */ +# define HTONS(n) ((((u16_t)((n) & 0xff)) << 8) | (((n) & 0xff00) >> 8)) +# endif /* BYTE_ORDER == BIG_ENDIAN */ +#endif /* HTONS */ + + +/** + * Convert 16-bit quantity from host byte order to network byte order. + * + * This function is primarily used for converting variables from host + * byte order to network byte order. For converting constants to + * network byte order, use the HTONS() macro instead. + */ +#ifndef htons +u16_t htons(u16_t val); +#endif /* htons */ + +/** @} */ + +#endif /* __UIP_H__ */ + + +/** @} */ + diff --git a/wii/libogc/lwbt/btarch.h b/wii/libogc/lwbt/btarch.h new file mode 100644 index 0000000000..7697f32b22 --- /dev/null +++ b/wii/libogc/lwbt/btarch.h @@ -0,0 +1,156 @@ +/** + * \defgroup uiparch Architecture specific uIP functions + * @{ + * + * The functions in the architecture specific module implement the IP + * check sum and 32-bit additions. + * + * The IP checksum calculation is the most computationally expensive + * operation in the TCP/IP stack and it therefore pays off to + * implement this in efficient assembler. The purpose of the uip-arch + * module is to let the checksum functions to be implemented in + * architecture specific assembler. + * + */ + +/** + * \file + * Declarations of architecture specific functions. + * \author Adam Dunkels + */ + +/* + * Copyright (c) 2001, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the lwBT stack. + * + * + */ + +#ifndef __BT_ARCH_H__ +#define __BT_ARCH_H__ + +#include "bt.h" +#include "asm.h" +#include "processor.h" + +#define MEM_ALIGNMENT 4 +#define MEM_ALIGN(mem) ((void*)(((u32_t)(mem)+MEM_ALIGNMENT-1)&~(u32_t)(MEM_ALIGNMENT-1))) +#define MEM_ALIGN_SIZE(size) (((size)+MEM_ALIGNMENT-1)&~(u32_t)(MEM_ALIGNMENT-1)) + + +#if BYTE_ORDER == BIG_ENDIAN + #ifndef htole16 + #define htole16 bswap16 + #endif + #ifndef htole32 + #define htole32 bswap32 + #endif + #ifndef htole64 + #define htole64 bswap64 + #endif + #ifndef le16toh + #define le16toh bswap16 + #endif + #ifndef le32toh + #define le32toh bswap32 + #endif + #ifndef le642toh + #define le64toh bswap64 + #endif + #ifndef htons + #define htons(x) (x) + #endif + #ifndef htonl + #define htonl(x) (x) + #endif + #ifndef ntohl + #define ntohl(x) (x) + #endif + #ifndef ntohs + #define ntohs(x) (x) + #endif +#else + #ifndef htole16 + #define htole16 + #endif + #ifndef htole32 + #define htole32 + #endif + #ifndef le16toh + #define le16toh + #endif + #ifndef le32toh + #define le32toh + #endif +#endif + +#if LIBC_MEMFUNCREPLACE +static __inline__ void __memcpy(void *dest,const void *src,s32_t len) +{ + u8_t *dest0 = (u8_t*)dest; + u8_t *src0 = (u8_t*)src; + + while(len--) { + *dest0++ = *src0++; + } +} + +static __inline__ void __memset(void *dest,s32_t c,s32_t len) +{ + u8_t *dest0 = (u8_t*)dest; + + while(len--) { + *dest0++ = (s8_t)c; + } +} + +#define MEMCPY __memcpy +#define MEMSET __memset +#else +#define MEMCPY memcpy +#define MEMSET memset +#endif + +#if LOGGING == 1 +#include +#define LOG(fmt, ...) fprintf(stderr, "[BTLOG] " __FILE__ ":%i: " fmt "\n", __LINE__, ##__VA_ARGS__) +#else +#define LOG(fmt, ...) +#endif /* LOGGING == 1 */ + +#if ERRORING == 1 +#include +#define ERROR(fmt,...) fprintf(stderr, "[BTERR] " __FILE__ ":%i: " fmt "\n", __LINE__, ##__VA_ARGS__) +#else +#define ERROR(fmt, ...) +#endif /* ERRORING == 1 */ + +/** @} */ + +#endif /* __UIP_ARCH_H__ */ diff --git a/wii/libogc/lwbt/bte.c b/wii/libogc/lwbt/bte.c new file mode 100644 index 0000000000..f02bee003b --- /dev/null +++ b/wii/libogc/lwbt/bte.c @@ -0,0 +1,1361 @@ +#include +#include +#include +#include +#include +#include +#include + +#include "bt.h" +#include "bte.h" +#include "hci.h" +#include "l2cap.h" +#include "btmemb.h" +#include "physbusif.h" + + +#define STACKSIZE 32768 +#define MQ_BOX_SIZE 256 + +/* Vendor specific OGF */ +#define HCI_VENDOR_OGF 0x3f + +/* Vendor specific OCF */ +#define HCI_VENDOR_PATCH_START_OCF 0x4f +#define HCI_VENDOR_PATCH_CONT_OCF 0x4c +#define HCI_VENDOR_PATCH_END_OCF 0x4f + +enum bte_state { + STATE_NOTREADY = -1, + STATE_READY = 0, + STATE_CONNECTING, + STATE_CONNECTED, + STATE_DISCONNECTING, + STATE_DISCONNECTED, + STATE_SENDING, + STATE_SENT, + STATE_RECEIVING, + STATE_RECEIVED, + STATE_FAILED +}; + +struct bt_state +{ + err_t last_err; + + syswd_t timer_svc; + lwpq_t hci_cmdq; + u8_t hci_cmddone; + u8_t hci_inited; + + u8_t num_maxdevs; + u8_t num_founddevs; + struct inquiry_info_ex *info; + + btecallback cb; + void *usrdata; +}; + +struct ctrl_req_t +{ + u8 err; + struct pbuf *p; + struct bte_pcb *pcb; + enum bte_state state; + s32 (*sent)(void *arg,struct bte_pcb *pcb,u8 err); + + struct ctrl_req_t *next; +}; + +static struct bt_state btstate; +static u8_t bte_patch0[184] = { + 0x70,0x99,0x08,0x00,0x88,0x43,0xd1,0x07,0x09,0x0c,0x08,0x43,0xa0,0x62,0x19,0x23, + 0xdb,0x01,0x33,0x80,0x7c,0xf7,0x88,0xf8,0x28,0x76,0x80,0xf7,0x17,0xff,0x43,0x78, + 0xeb,0x70,0x19,0x23,0xdb,0x01,0x33,0x87,0x7c,0xf7,0xbc,0xfb,0x0b,0x60,0xa3,0x7b, + 0x01,0x49,0x0b,0x60,0x90,0xf7,0x96,0xfb,0xd8,0x1d,0x08,0x00,0x00,0xf0,0x04,0xf8, + 0x00,0x23,0x79,0xf7,0xe3,0xfa,0x00,0x00,0x00,0xb5,0x00,0x23,0x11,0x49,0x0b,0x60, + 0x1d,0x21,0xc9,0x03,0x0b,0x60,0x7d,0x20,0x80,0x01,0x01,0x38,0xfd,0xd1,0x0e,0x4b, + 0x0e,0x4a,0x13,0x60,0x47,0x20,0x00,0x21,0x96,0xf7,0x96,0xff,0x46,0x20,0x00,0x21, + 0x96,0xf7,0x92,0xff,0x0a,0x4a,0x13,0x68,0x0a,0x48,0x03,0x40,0x13,0x60,0x0a,0x4a, + 0x13,0x68,0x0a,0x48,0x03,0x40,0x13,0x60,0x09,0x4a,0x13,0x68,0x09,0x48,0x03,0x40, + 0x13,0x60,0x00,0xbd,0x24,0x80,0x0e,0x00,0x81,0x03,0x0f,0xfe,0x5c,0x00,0x0f,0x00, + 0x60,0xfc,0x0e,0x00,0xfe,0xff,0x00,0x00,0xfc,0xfc,0x0e,0x00,0xff,0x9f,0x00,0x00, + 0x30,0xfc,0x0e,0x00,0x7f,0xff,0x00,0x00 +}; +static u8_t bte_patch1[92] = { + 0x07,0x20,0xbc,0x65,0x01,0x00,0x84,0x42,0x09,0xd2,0x84,0x42,0x09,0xd1,0x21,0x84, + 0x5a,0x00,0x00,0x83,0xf0,0x74,0xff,0x09,0x0c,0x08,0x43,0x22,0x00,0x61,0x00,0x00, + 0x83,0xf0,0x40,0xfc,0x00,0x00,0x00,0x00,0x23,0xcc,0x9f,0x01,0x00,0x6f,0xf0,0xe4, + 0xfc,0x03,0x28,0x7d,0xd1,0x24,0x3c,0x62,0x01,0x00,0x28,0x20,0x00,0xe0,0x60,0x8d, + 0x23,0x68,0x25,0x04,0x12,0x01,0x00,0x20,0x1c,0x20,0x1c,0x24,0xe0,0xb0,0x21,0x26, + 0x74,0x2f,0x00,0x00,0x86,0xf0,0x18,0xfd,0x21,0x4f,0x3b,0x60 +}; + +static u8 ppc_stack[STACKSIZE] ATTRIBUTE_ALIGN(8); + +err_t acl_wlp_completed(void *arg,struct bd_addr *bdaddr); +err_t link_key_not(void *arg,struct bd_addr *bdaddr,u8_t *key); +err_t pin_req(void *arg,struct bd_addr *bdaddr); +err_t l2cap_connected(void *arg,struct l2cap_pcb *l2cappcb,u16_t result,u16_t status); +err_t l2cap_accepted(void *arg,struct l2cap_pcb *l2cappcb,err_t err); +err_t acl_conn_complete(void *arg,struct bd_addr *bdaddr); +err_t l2cap_disconnect_cfm(void *arg, struct l2cap_pcb *pcb); +err_t l2cap_disconnected_ind(void *arg, struct l2cap_pcb *pcb, err_t err); + +err_t bte_input(void *arg,struct l2cap_pcb *pcb,struct pbuf *p,err_t err); +err_t bte_callback(void (*f)(void*),void *ctx); +err_t bte_hci_apply_patch_complete(void *arg,struct hci_pcb *pcb,u8_t ogf,u8_t ocf,u8_t result); +err_t bte_hci_patch_complete(void *arg,struct hci_pcb *pcb,u8_t ogf,u8_t ocf,u8_t result); +err_t bte_hci_initcore_complete(void *arg,struct hci_pcb *pcb,u8_t ogf,u8_t ocf,u8_t result); +err_t bte_hci_initsub_complete(void *arg,struct hci_pcb *pcb,u8_t ogf,u8_t ocf,u8_t result); +err_t bte_inquiry_complete(void *arg,struct hci_pcb *pcb,struct hci_inq_res *ires,u16_t result); +err_t bte_read_stored_link_key_complete(void *arg,struct hci_pcb *pcb,u8_t ogf,u8_t ocf,u8_t result); +err_t bte_read_bd_addr_complete(void *arg,struct hci_pcb *pcb,u8_t ogf,u8_t ocf,u8_t result); + + +MEMB(bte_pcbs,sizeof(struct bte_pcb),MEMP_NUM_BTE_PCB); +MEMB(bte_ctrl_reqs,sizeof(struct ctrl_req_t),MEMP_NUM_BTE_CTRLS); + +static void bte_reset_all() +{ + btmemb_init(&bte_pcbs); + btmemb_init(&bte_ctrl_reqs); + + if(btstate.info!=NULL) free(btstate.info); + + btstate.info = NULL; + btstate.hci_inited = 0; + btstate.hci_cmddone = 0; + btstate.num_founddevs = 0; + btstate.last_err = ERR_OK; +} + +static void bt_alarmhandler(syswd_t alarm,void *cbarg) +{ + __lwp_thread_dispatchdisable(); + SYS_SwitchFiber(0,0,0,0,(u32)l2cap_tmr,(u32)(&ppc_stack[STACKSIZE])); + __lwp_thread_dispatchunnest(); +} + +static inline s32 __bte_waitcmdfinish(struct bt_state *state) +{ + u32 level; + s32 ret; + + if(!state) return ERR_VAL; + + _CPU_ISR_Disable(level); + while(!state->hci_cmddone) + LWP_ThreadSleep(state->hci_cmdq); + ret = state->last_err; + _CPU_ISR_Restore(level); + + return ret; +} + +static inline s32 __bte_cmdfinish(struct bt_state *state,err_t err) +{ + u32 level; + + if(!state) return ERR_VAL; + + _CPU_ISR_Disable(level); + state->last_err = err; + state->hci_cmddone = 1; + if(state->cb!=NULL) + state->cb(err,state->usrdata); + else + LWP_ThreadSignal(state->hci_cmdq); + _CPU_ISR_Restore(level); + + return err; +} + +static inline s32 __bte_waitrequest(struct ctrl_req_t *req) +{ + s32 err; + u32 level; + + if(!req || !req->pcb) return ERR_VAL; + + _CPU_ISR_Disable(level); + while(req->state!=STATE_SENT + && req->state!=STATE_FAILED) + { + LWP_ThreadSleep(req->pcb->cmdq); + } + err = req->err; + _CPU_ISR_Restore(level); + + return err; +} + +static inline void __bte_close_ctrl_queue(struct bte_pcb *pcb) +{ + struct ctrl_req_t *req; + + while(pcb->ctrl_req_head!=NULL) { + req = pcb->ctrl_req_head; + req->err = ERR_CLSD; + req->state = STATE_DISCONNECTED; + if(req->sent!=NULL) { + req->sent(pcb->cbarg,pcb,ERR_CLSD); + btmemb_free(&bte_ctrl_reqs,req); + } else + LWP_ThreadSignal(pcb->cmdq); + + pcb->ctrl_req_head = req->next; + } + pcb->ctrl_req_tail = NULL; +} + +static s32 __bte_send_pending_request(struct bte_pcb *pcb) +{ + s32 err; + struct ctrl_req_t *req; + + if(pcb->ctrl_req_head==NULL) return ERR_OK; + if(pcb->state==STATE_DISCONNECTING || pcb->state==STATE_DISCONNECTED) return ERR_CLSD; + + req = pcb->ctrl_req_head; + req->state = STATE_SENDING; + + err = l2ca_datawrite(pcb->ctl_pcb,req->p); + btpbuf_free(req->p); + + if(err!=ERR_OK) { + pcb->ctrl_req_head = req->next; + + req->err = err; + req->state = STATE_FAILED; + if(req->sent) { + req->sent(pcb->cbarg,pcb,err); + btmemb_free(&bte_ctrl_reqs,req); + } else + LWP_ThreadSignal(pcb->cmdq); + } + + return err; +} + +static s32 __bte_send_request(struct ctrl_req_t *req) +{ + s32 err; + u32 level; + + req->next = NULL; + req->err = ERR_VAL; + req->state = STATE_READY; + + _CPU_ISR_Disable(level); + if(req->pcb->ctrl_req_head==NULL) { + req->pcb->ctrl_req_head = req->pcb->ctrl_req_tail = req; + err = __bte_send_pending_request(req->pcb); + } else { + req->pcb->ctrl_req_tail->next = req; + req->pcb->ctrl_req_tail = req; + err = ERR_OK; + } + _CPU_ISR_Restore(level); + + return err; +} + +static err_t __bte_shutdown_finished(void *arg,struct hci_pcb *pcb,u8_t ogf,u8_t ocf,u8_t result) +{ + err_t err; + struct bt_state *state = (struct bt_state*)arg; + + if(state==NULL) return ERR_OK; + + state->hci_inited = 0; + hci_cmd_complete(NULL); + if(result==HCI_SUCCESS) + err = ERR_OK; + else + err = ERR_CONN; + + physbusif_close(); + return __bte_cmdfinish(state,err); +} + +static void bte_process_handshake(struct bte_pcb *pcb,u8_t param,void *buf,u16_t len) +{ + struct ctrl_req_t *req; + + LOG("bte_process_handshake(%p)\n",pcb); + + switch(param) { + case HIDP_HSHK_SUCCESSFULL: + req = pcb->ctrl_req_head; + pcb->ctrl_req_head = req->next; + + req->err = ERR_OK; + req->state = STATE_SENT; + if(req->sent) { + req->sent(pcb->cbarg,pcb,ERR_OK); + btmemb_free(&bte_ctrl_reqs,req); + } else + LWP_ThreadSignal(pcb->cmdq); + + __bte_send_pending_request(pcb); + break; + case HIDP_HSHK_NOTREADY: + case HIDP_HSHK_INV_REPORTID: + case HIDP_HSHK_NOTSUPPORTED: + case HIDP_HSHK_IVALIDPARAM: + case HIDP_HSHK_UNKNOWNERROR: + break; + case HIDP_HSHK_FATALERROR: + break; + default: + break; + } +} + +static void bte_process_data(struct bte_pcb *pcb,u8_t param,void *buf,u16_t len) +{ + LOG("bte_process_data(%p)\n",pcb); + switch(param) { + case HIDP_DATA_RTYPE_INPUT: + if(pcb->recv!=NULL) pcb->recv(pcb->cbarg,buf,len); + break; + case HIDP_DATA_RTYPE_OTHER: + case HIDP_DATA_RTYPE_OUPUT: + case HIDP_DATA_RTYPE_FEATURE: + break; + default: + break; + } +} + +static err_t bte_process_input(void *arg,struct l2cap_pcb *pcb,struct pbuf *p,err_t err) +{ + u8 *buf; + u16 len; + u8 hdr,type,param; + struct bte_pcb *bte = (struct bte_pcb*)arg; + + LOG("bte_process_input(%p,%p)\n",bte,p); + + if(bte->state==STATE_DISCONNECTING + || bte->state==STATE_DISCONNECTED) return ERR_CLSD; + + buf = p->payload; + len = p->tot_len; + + len--; + hdr = *buf++; + type = (hdr&HIDP_HDR_TRANS_MASK); + param = (hdr&HIDP_HDR_PARAM_MASK); + switch(type) { + case HIDP_TRANS_HANDSHAKE: + bte_process_handshake(bte,param,buf,len); + break; + case HIDP_TRANS_HIDCONTROL: + break; + case HIDP_TRANS_DATA: + bte_process_data(bte,param,buf,len); + break; + default: + break; + } + return ERR_OK; +} + +void BTE_Init() +{ + u32 level; + struct timespec tb; + + LOG("BTE_Init()\n"); + + memset(&btstate,0,sizeof(struct bt_state)); + + hci_init(); + l2cap_init(); + physbusif_init(); + + LWP_InitQueue(&btstate.hci_cmdq); + SYS_CreateAlarm(&btstate.timer_svc); + + _CPU_ISR_Disable(level); + bte_reset_all(); + hci_reset_all(); + l2cap_reset_all(); + physbusif_reset_all(); + + hci_wlp_complete(acl_wlp_completed); + hci_connection_complete(acl_conn_complete); + _CPU_ISR_Restore(level); + + tb.tv_sec = 1; + tb.tv_nsec = 0; + SYS_SetPeriodicAlarm(btstate.timer_svc,&tb,&tb,bt_alarmhandler, NULL); +} + +void BTE_Shutdown() +{ + u32 level; + + if(btstate.hci_inited==0) return; + + LOG("BTE_Shutdown()\n"); + + _CPU_ISR_Disable(level); + SYS_RemoveAlarm(btstate.timer_svc); + btstate.cb = NULL; + btstate.usrdata = NULL; + btstate.hci_cmddone = 0; + hci_arg(&btstate); + hci_cmd_complete(__bte_shutdown_finished); + hci_reset(); + __bte_waitcmdfinish(&btstate); + _CPU_ISR_Restore(level); + + physbusif_shutdown(); +} + +s32 BTE_InitCore(btecallback cb) +{ + u32 level; + + _CPU_ISR_Disable(level); + btstate.cb = cb; + btstate.usrdata = NULL; + btstate.hci_cmddone = 0; + hci_arg(&btstate); + hci_cmd_complete(bte_hci_initcore_complete); + hci_reset(); + _CPU_ISR_Restore(level); + + return ERR_OK; +} + +s32 BTE_ApplyPatch(btecallback cb) +{ + u32 level; + u8 kick = 0; + + _CPU_ISR_Disable(level); + btstate.cb = cb; + btstate.usrdata = NULL; + btstate.hci_cmddone = 0; + hci_arg(&btstate); + hci_cmd_complete(bte_hci_apply_patch_complete); + hci_vendor_specific_command(HCI_VENDOR_PATCH_START_OCF,HCI_VENDOR_OGF,&kick,1); + _CPU_ISR_Restore(level); + + return ERR_OK; +} + +s32 BTE_InitSub(btecallback cb) +{ + u32 level; + + _CPU_ISR_Disable(level); + btstate.cb = cb; + btstate.usrdata = NULL; + btstate.hci_cmddone = 0; + hci_arg(&btstate); + hci_cmd_complete(bte_hci_initsub_complete); + hci_write_inquiry_mode(0x01); + _CPU_ISR_Restore(level); + + return ERR_OK; +} + +s32 BTE_ReadStoredLinkKey(struct linkkey_info *keys,u8 max_cnt,btecallback cb) +{ + u32 level; + + _CPU_ISR_Disable(level); + btstate.cb = cb; + btstate.usrdata = keys; + btstate.num_maxdevs = max_cnt; + btstate.hci_cmddone = 0; + hci_arg(&btstate); + hci_cmd_complete(bte_read_stored_link_key_complete); + hci_read_stored_link_key(); + _CPU_ISR_Restore(level); + + return ERR_OK; +} + +s32 BTE_ReadBdAddr(struct bd_addr *bdaddr, btecallback cb) +{ + u32 level; + + _CPU_ISR_Disable(level); + btstate.cb = cb; + btstate.usrdata = bdaddr; + btstate.hci_cmddone = 0; + hci_arg(&btstate); + hci_cmd_complete(bte_read_bd_addr_complete); + hci_read_bd_addr(); + _CPU_ISR_Restore(level); + + return ERR_OK; +} + +void (*BTE_SetDisconnectCallback(void (*callback)(struct bd_addr *bdaddr,u8 reason)))(struct bd_addr *bdaddr,u8 reason) +{ + return l2cap_disconnect_bb(callback); +} + +struct bte_pcb* bte_new() +{ + struct bte_pcb *pcb; + + if((pcb=btmemb_alloc(&bte_pcbs))==NULL) return NULL; + + memset(pcb,0,sizeof(struct bte_pcb)); + + pcb->state = (u32)STATE_NOTREADY; + LWP_InitQueue(&(pcb->cmdq)); + + return pcb; +} + +s32 bte_registerdeviceasync(struct bte_pcb *pcb,struct bd_addr *bdaddr,s32 (*conn_cfm)(void *arg,struct bte_pcb *pcb,u8 err)) +{ + u32 level; + s32 err = ERR_OK; + struct l2cap_pcb *l2capcb = NULL; + + //printf("bte_registerdeviceasync()\n"); + _CPU_ISR_Disable(level); + pcb->err = ERR_USE; + pcb->data_pcb = NULL; + pcb->ctl_pcb = NULL; + pcb->conn_cfm = conn_cfm; + pcb->state = (u32)STATE_CONNECTING; + + bd_addr_set(&(pcb->bdaddr),bdaddr); + if((l2capcb=l2cap_new())==NULL) { + err = ERR_MEM; + goto error; + } + l2cap_arg(l2capcb,pcb); + + err = l2cap_connect_ind(l2capcb,bdaddr,HIDP_CONTROL_CHANNEL,l2cap_accepted); + if(err!=ERR_OK) { + l2cap_close(l2capcb); + err = ERR_CONN; + goto error; + } + + if((l2capcb=l2cap_new())==NULL) { + err = ERR_MEM; + goto error; + } + l2cap_arg(l2capcb,pcb); + + err = l2cap_connect_ind(l2capcb,bdaddr,HIDP_DATA_CHANNEL,l2cap_accepted); + if(err!=ERR_OK) { + l2cap_close(l2capcb); + err = ERR_CONN; + } + +error: + _CPU_ISR_Restore(level); + //printf("bte_registerdeviceasync(%02x)\n",err); + return err; +} + +s32 bte_inquiry(struct inquiry_info *info,u8 max_cnt,u8 flush) +{ + s32_t i; + u32 level,fnd; + err_t last_err; + struct inquiry_info_ex *pinfo; + + last_err = ERR_OK; + + _CPU_ISR_Disable(level); + if(btstate.num_founddevs==0 || flush==1) { + btstate.hci_cmddone = 0; + btstate.num_maxdevs = max_cnt; + hci_inquiry(0x009E8B33,0x03,max_cnt,bte_inquiry_complete); + last_err = __bte_waitcmdfinish(&btstate); + } + fnd = btstate.num_founddevs; + pinfo = btstate.info; + _CPU_ISR_Restore(level); + + if(last_err==ERR_OK) { + for(i=0;istate = (u32)STATE_DISCONNECTING; + if(pcb->data_pcb!=NULL ) + err = l2ca_disconnect_req(pcb->data_pcb,l2cap_disconnect_cfm); + else if(pcb->ctl_pcb!=NULL) + err = l2ca_disconnect_req(pcb->ctl_pcb,l2cap_disconnect_cfm); + _CPU_ISR_Restore(level); + + return err; +} + +/* +s32 bte_connect(struct bte_pcb *pcb,struct bd_addr *bdaddr,u8 psm,s32 (*recv)(void *arg,void *buffer,u16 len)) +{ + u32 level; + err_t err = ERR_OK; + + if(pcb==NULL) return ERR_VAL; + + if((pcb->l2capcb=l2cap_new())==NULL) return ERR_MEM; + + pcb->psm = psm; + pcb->recv = recv; + bd_addr_set(&(pcb->bdaddr),bdaddr); + + _CPU_ISR_Disable(level); + pcb->err = ERR_CONN; + l2cap_arg(pcb->l2capcb,pcb); + err = l2ca_connect_req(pcb->l2capcb,bdaddr,psm,HCI_ALLOW_ROLE_SWITCH,l2cap_connected); + if(err==ERR_OK) { + LWP_ThreadSleep(pcb->cmdq); + err = pcb->err; + } + _CPU_ISR_Restore(level); + + return err; +} + +s32 bte_connect_ex(struct bte_pcb *pcb,struct inquiry_info_ex *info,u8 psm,s32 (*recv)(void *arg,void *buffer,u16 len)) +{ + err_t err; + + if((err=hci_reg_dev_info(&(info->bdaddr),info->cod,info->psrm,info->psm,info->co))!=ERR_OK) return err; + return bte_connect(pcb,&(info->bdaddr),psm,recv); +} + +s32 bte_listen(struct bte_pcb *pcb,struct bd_addr *bdaddr,u8 psm) +{ + s32 err; + u32 level; + struct l2cap_pcb *l2capcb = NULL; + + if(pcb==NULL) return ERR_VAL; + + if((l2capcb=l2cap_new())==NULL) return ERR_MEM; + pcb->l2capcb = NULL; + + pcb->psm = psm; + pcb->recv = NULL; + bd_addr_set(&(pcb->bdaddr),bdaddr); + + _CPU_ISR_Disable(level); + pcb->err = ERR_CONN; + l2cap_arg(l2capcb,pcb); + err = l2cap_connect_ind(l2capcb,psm,l2cap_accepted); + if(err!=ERR_OK) l2cap_close(l2capcb); + + _CPU_ISR_Restore(level); + return err; +} + +s32 bte_accept(struct bte_pcb *pcb,s32 (*recv)(void *arg,void *buffer,u16 len)) +{ + u32 level; + err_t err = ERR_OK; + + if(pcb==NULL) return ERR_VAL; + + _CPU_ISR_Disable(level); + pcb->recv = recv; + while(pcb->l2capcb==NULL) + LWP_ThreadSleep(pcb->cmdq); + err = pcb->err; + _CPU_ISR_Restore(level); + + return err; +} +*/ + +s32 bte_senddata(struct bte_pcb *pcb,void *message,u16 len) +{ + err_t err; + struct pbuf *p; + + if(pcb==NULL || message==NULL || len==0) return ERR_VAL; + if(pcb->state==STATE_DISCONNECTING || pcb->state==STATE_DISCONNECTED) return ERR_CLSD; + + if((p=btpbuf_alloc(PBUF_RAW,(1 + len),PBUF_RAM))==NULL) { + ERROR("bte_senddata: Could not allocate memory for pbuf\n"); + return ERR_MEM; + } + + ((u8*)p->payload)[0] = (HIDP_TRANS_DATA|HIDP_DATA_RTYPE_OUPUT); + memcpy(p->payload+1,message,len); + + err = l2ca_datawrite(pcb->data_pcb,p); + btpbuf_free(p); + + return err; +} + +s32 bte_sendmessageasync(struct bte_pcb *pcb,void *message,u16 len,s32 (*sent)(void *arg,struct bte_pcb *pcb,u8 err)) +{ + struct pbuf *p; + struct ctrl_req_t *req; + + //printf("bte_sendmessageasync()\n"); + + if(pcb==NULL || message==NULL || len==0) return ERR_VAL; + if(pcb->state==STATE_DISCONNECTING || pcb->state==STATE_DISCONNECTED) return ERR_CLSD; + + if((req=btmemb_alloc(&bte_ctrl_reqs))==NULL) { + ERROR("bte_sendmessageasync: Could not allocate memory for request\n"); + return ERR_MEM; + } + + if((p=btpbuf_alloc(PBUF_RAW,(1 + len),PBUF_RAM))==NULL) { + ERROR("bte_sendmessageasync: Could not allocate memory for pbuf\n"); + btmemb_free(&bte_ctrl_reqs,req); + return ERR_MEM; + } + + ((u8*)p->payload)[0] = (HIDP_TRANS_SETREPORT|HIDP_DATA_RTYPE_OUPUT); + memcpy(p->payload+1,message,len); + + req->p = p; + req->pcb = pcb; + req->sent = sent; + return __bte_send_request(req); +} + +s32 bte_sendmessage(struct bte_pcb *pcb,void *message,u16 len) +{ + s32 err = ERR_VAL; + struct pbuf *p; + struct ctrl_req_t *req; + + //printf("bte_sendmessage()\n"); + + if(pcb==NULL || message==NULL || len==0) return ERR_VAL; + if(pcb->state==STATE_DISCONNECTING || pcb->state==STATE_DISCONNECTED) return ERR_CLSD; + + if((req=btmemb_alloc(&bte_ctrl_reqs))==NULL) { + ERROR("bte_sendmessage: Could not allocate memory for request\n"); + return ERR_MEM; + } + + if((p=btpbuf_alloc(PBUF_RAW,(1 + len),PBUF_RAM))==NULL) { + ERROR("bte_sendmessage: Could not allocate memory for pbuf\n"); + btmemb_free(&bte_ctrl_reqs,req); + return ERR_MEM; + } + + ((u8*)p->payload)[0] = (HIDP_TRANS_SETREPORT|HIDP_DATA_RTYPE_OUPUT); + memcpy(p->payload+1,message,len); + + req->p = p; + req->pcb = pcb; + req->sent = NULL; + err = __bte_send_request(req); + if(err==ERR_OK) err = __bte_waitrequest(req); + + btmemb_free(&bte_ctrl_reqs,req); + return err; +} + +void bte_arg(struct bte_pcb *pcb,void *arg) +{ + u32 level; + _CPU_ISR_Disable(level); + pcb->cbarg = arg; + _CPU_ISR_Restore(level); +} + +void bte_received(struct bte_pcb *pcb, s32 (*recv)(void *arg,void *buffer,u16 len)) +{ + u32 level; + _CPU_ISR_Disable(level); + pcb->recv = recv; + _CPU_ISR_Restore(level); +} + +void bte_disconnected(struct bte_pcb *pcb,s32 (disconn_cfm)(void *arg,struct bte_pcb *pcb,u8 err)) +{ + u32 level; + _CPU_ISR_Disable(level); + pcb->disconn_cfm = disconn_cfm; + _CPU_ISR_Restore(level); +} + +err_t acl_wlp_completed(void *arg,struct bd_addr *bdaddr) +{ + //hci_sniff_mode(bdaddr,200,100,10,10); + return ERR_OK; +} + +err_t acl_conn_complete(void *arg,struct bd_addr *bdaddr) +{ + //printf("acl_conn_complete\n"); + //memcpy(&(btstate.acl_bdaddr),bdaddr,6); + + hci_write_link_policy_settings(bdaddr,0x0005); + return ERR_OK; +} + +err_t pin_req(void *arg,struct bd_addr *bdaddr) +{ + //printf("pin_req\n"); + return ERR_OK; +} + +err_t l2cap_disconnected_ind(void *arg, struct l2cap_pcb *pcb, err_t err) +{ + struct bte_pcb *bte = (struct bte_pcb*)arg; + + if(bte==NULL) return ERR_OK; + + bte->state = (u32)STATE_DISCONNECTING; + switch(l2cap_psm(pcb)) { + case HIDP_CONTROL_CHANNEL: + l2cap_close(bte->ctl_pcb); + bte->ctl_pcb = NULL; + break; + case HIDP_DATA_CHANNEL: + l2cap_close(bte->data_pcb); + bte->data_pcb = NULL; + break; + } + if(bte->data_pcb==NULL && bte->ctl_pcb==NULL) { + bte->err = ERR_OK; + bte->state = (u32)STATE_DISCONNECTED; + __bte_close_ctrl_queue(bte); + if(bte->disconn_cfm!=NULL) bte->disconn_cfm(bte->cbarg,bte,ERR_OK); + } + return ERR_OK; +} + +err_t l2cap_disconnect_cfm(void *arg, struct l2cap_pcb *pcb) +{ + struct bte_pcb *bte = (struct bte_pcb*)arg; + + if(bte==NULL) return ERR_OK; + + switch(l2cap_psm(pcb)) { + case HIDP_CONTROL_CHANNEL: + l2cap_close(bte->ctl_pcb); + bte->ctl_pcb = NULL; + if(bte->data_pcb!=NULL) + l2ca_disconnect_req(bte->data_pcb,l2cap_disconnect_cfm); + break; + case HIDP_DATA_CHANNEL: + l2cap_close(bte->data_pcb); + bte->data_pcb = NULL; + if(bte->ctl_pcb!=NULL) + l2ca_disconnect_req(bte->ctl_pcb,l2cap_disconnect_cfm); + break; + } + if(bte->data_pcb==NULL && bte->ctl_pcb==NULL) { + bte->err = ERR_OK; + bte->state = (u32)STATE_DISCONNECTED; + __bte_close_ctrl_queue(bte); + if(bte->disconn_cfm!=NULL) bte->disconn_cfm(bte->cbarg,bte,ERR_OK); + + hci_cmd_complete(NULL); + hci_disconnect(&(bte->bdaddr),HCI_OTHER_END_TERMINATED_CONN_USER_ENDED); + } + + return ERR_OK; +} + +err_t link_key_not(void *arg,struct bd_addr *bdaddr,u8_t *key) +{ + //printf("link_key_not\n"); + return hci_write_stored_link_key(bdaddr,key); +} + +/* +err_t l2cap_connected(void *arg,struct l2cap_pcb *l2cappcb,u16_t result,u16_t status) +{ + struct bte_pcb *btepcb = (struct bte_pcb*)arg; + + printf("l2cap_connected(%02x)\n",result); + if(result==L2CAP_CONN_SUCCESS) { + l2cap_recv(l2cappcb,bte_input); + l2cap_disconnect_ind(l2cappcb,l2cap_disconnected_ind); + btepcb->err = ERR_OK; + } else { + l2cap_close(l2cappcb); + btepcb->err = ERR_CONN; + } + + if(btepcb->conn_cfm) btepcb->conn_cfm(btepcb->cbarg,btepcb,btepcb->err); + LWP_ThreadSignal(btepcb->cmdq); + return ERR_OK; +} +*/ +err_t l2cap_accepted(void *arg,struct l2cap_pcb *l2cappcb,err_t err) +{ + struct bte_pcb *btepcb = (struct bte_pcb*)arg; + + //printf("l2cap_accepted(%02x)\n",err); + if(err==ERR_OK) { + l2cap_recv(l2cappcb,bte_process_input); + l2cap_disconnect_ind(l2cappcb,l2cap_disconnected_ind); + switch(l2cap_psm(l2cappcb)) { + case HIDP_CONTROL_CHANNEL: + btepcb->ctl_pcb = l2cappcb; + break; + case HIDP_DATA_CHANNEL: + btepcb->data_pcb = l2cappcb; + break; + } + if(btepcb->data_pcb && btepcb->ctl_pcb) { + btepcb->err = ERR_OK; + btepcb->state = (u32)STATE_CONNECTED; + if(btepcb->conn_cfm) btepcb->conn_cfm(btepcb->cbarg,btepcb,ERR_OK); + } + } else { + l2cap_close(l2cappcb); + btepcb->err = ERR_CONN; + btepcb->conn_cfm(btepcb->cbarg,btepcb,ERR_CONN); + } + + return ERR_OK; +} + +err_t bte_inquiry_complete(void *arg,struct hci_pcb *pcb,struct hci_inq_res *ires,u16_t result) +{ + u8_t i; + struct hci_inq_res *p; + struct bt_state *state = (struct bt_state*)arg; + + if(result==HCI_SUCCESS) { + if(ires!=NULL) { + + if(btstate.info!=NULL) free(btstate.info); + btstate.info = NULL; + btstate.num_maxdevs = 0; + btstate.num_founddevs = 0; + + p = ires; + while(p!=NULL) { + btstate.num_founddevs++; + p = p->next; + } + + p = ires; + btstate.info = (struct inquiry_info_ex*)malloc(sizeof(struct inquiry_info_ex)*btstate.num_founddevs); + for(i=0;ibdaddr)); + memcpy(btstate.info[i].cod,p->cod,3); + btstate.info[i].psrm = p->psrm; + btstate.info[i].psm = p->psm; + btstate.info[i].co = p->co; + + printf("bdaddr: %02x:%02x:%02x:%02x:%02x:%02x\n",p->bdaddr.addr[0],p->bdaddr.addr[1],p->bdaddr.addr[2],p->bdaddr.addr[3],p->bdaddr.addr[4],p->bdaddr.addr[5]); + printf("cod: %02x%02x%02x\n",p->cod[0],p->cod[1],p->cod[2]); + printf("psrm: %02x\n",p->psrm); + printf("psm: %02x\n",p->psm); + printf("co: %04x\n",p->co); + p = p->next; + } + __bte_cmdfinish(state,ERR_OK); + } else + hci_inquiry(0x009E8B33,0x03,btstate.num_maxdevs,bte_inquiry_complete); + } + return ERR_OK; +} + +err_t bte_read_stored_link_key_complete(void *arg,struct hci_pcb *pcb,u8_t ogf,u8_t ocf,u8_t result) +{ + u8_t i = 0; + struct hci_link_key *p; + struct linkkey_info *keys; + struct bt_state *state = (struct bt_state*)arg; + + if(!pcb) return ERR_CONN; + + LOG("bte_read_stored_link_key_complete(%02x,%p)\n",result,pcb->keyres); + + if(state==NULL) return ERR_VAL; + if(!(ogf==HCI_HC_BB_OGF && ocf==HCI_R_STORED_LINK_KEY_OCF)) return __bte_cmdfinish(state,ERR_CONN); + + if(result==HCI_SUCCESS) { + keys = (struct linkkey_info*)state->usrdata; + if(pcb->keyres!=NULL && keys!=NULL) { + for(i=0,p=pcb->keyres;inum_maxdevs && p!=NULL;i++) { + bd_addr_set(&(keys[i].bdaddr),&(p->bdaddr)); + memcpy(keys[i].key,p->key,16); + + p = p->next; + } + } + LOG("bte_read_stored_link_key_complete(%02x,%p,%d)\n",result,pcb->keyres,i); + __bte_cmdfinish(state,i); + return ERR_OK; + } + + return __bte_cmdfinish(state,ERR_VAL); +} + +err_t bte_read_bd_addr_complete(void *arg,struct hci_pcb *pcb,u8_t ogf,u8_t ocf,u8_t result) +{ + struct bd_addr *bdaddr; + struct bt_state *state = (struct bt_state*)arg; + + if(!pcb) return ERR_CONN; + + LOG("bte_read_bd_addr_complete(%02x,%p)\n", result, &pcb->bdaddr); + + if(state==NULL) return ERR_VAL; + + if(!(ogf==HCI_INFO_PARAM_OGF && ocf==HCI_R_BD_ADDR_OCF)) return __bte_cmdfinish(state,ERR_CONN); + + if(result == HCI_SUCCESS) { + bdaddr = (struct bd_addr *)state->usrdata; + if (bdaddr != NULL) { + bdaddr->addr[0] = pcb->bdaddr.addr[5]; + bdaddr->addr[1] = pcb->bdaddr.addr[4]; + bdaddr->addr[2] = pcb->bdaddr.addr[3]; + bdaddr->addr[3] = pcb->bdaddr.addr[2]; + bdaddr->addr[4] = pcb->bdaddr.addr[1]; + bdaddr->addr[5] = pcb->bdaddr.addr[0]; + } + LOG("bte_read_bd_addr_complete(%02x,%p,%d)\n",result,bdaddr,i); + __bte_cmdfinish(state,ERR_OK); + return ERR_OK; + } + + return __bte_cmdfinish(state,ERR_VAL); +} + +/* new init with patching */ +err_t bte_hci_initcore_complete2(void *arg,struct hci_pcb *pcb,u8_t ogf,u8_t ocf,u8_t result) +{ + err_t err = ERR_OK; + u8_t dev_cod[] = {0x04, 0x02,0x40}; + struct bt_state *state = (struct bt_state*)arg; + + LOG("bte_hci_initcore_complete2(%02x,%02x)\n",ogf,ocf); + switch(ogf) { + case HCI_HC_BB_OGF: + if(ocf==HCI_WRITE_INQUIRY_MODE) { + if(result==HCI_SUCCESS) { + hci_write_page_scan_type(0x01); + } else + err = ERR_CONN; + } else if(ocf==HCI_WRITE_PAGE_SCAN_TYPE) { + if(result==HCI_SUCCESS) { + hci_write_inquiry_scan_type(0x01); + } else + err = ERR_CONN; + } else if(ocf==HCI_WRITE_INQUIRY_SCAN_TYPE) { + if(result==HCI_SUCCESS) { + hci_write_cod(dev_cod); + } else + err = ERR_CONN; + } else if(ocf==HCI_WRITE_COD) { + if(result==HCI_SUCCESS) { + hci_write_page_timeout(0x2000); + } else + err = ERR_CONN; + } else if(ocf==HCI_WRITE_PAGE_TIMEOUT) { + if(result==HCI_SUCCESS) { + state->hci_inited = 1; + hci_cmd_complete(NULL); + return __bte_cmdfinish(state,ERR_OK); + } else + err = ERR_CONN; + } + break; + default: + LOG("Unknown command complete event. OGF = 0x%x OCF = 0x%x\n", ogf, ocf); + err = ERR_CONN; + break; + } + + if(err!=ERR_OK) __bte_cmdfinish(state,err); + return err; +} + +err_t bte_hci_initcore_complete(void *arg,struct hci_pcb *pcb,u8_t ogf,u8_t ocf,u8_t result) +{ + err_t err = ERR_OK; + u8_t dev_cod[] = {0x00, 0x1f,0x00}; + struct bt_state *state = (struct bt_state*)arg; + + LOG("bte_hci_initcore_complete(%02x,%02x)\n",ogf,ocf); + switch(ogf) { + case HCI_INFO_PARAM: + if(ocf==HCI_READ_BUFFER_SIZE) { + if(result==HCI_SUCCESS) { + hci_write_cod(dev_cod); + } else + err = ERR_CONN; + } else if(ocf==HCI_READ_LOCAL_VERSION) { + if(result==HCI_SUCCESS) { + hci_read_bd_addr(); + } else + err = ERR_CONN; + } else if(ocf==HCI_READ_BD_ADDR) { + if(result==HCI_SUCCESS) { + hci_read_local_features(); + } else + err = ERR_CONN; + } else if(ocf==HCI_READ_LOCAL_FEATURES) { + if(result==HCI_SUCCESS) { + hci_cmd_complete(bte_hci_initcore_complete2); + hci_write_inquiry_mode(0x01); + } else + err = ERR_CONN; + } + break; + case HCI_HC_BB_OGF: + if(ocf==HCI_RESET) { + if(result==HCI_SUCCESS) { + hci_read_buffer_size(); + } else + err = ERR_CONN; + } else if(ocf==HCI_WRITE_COD) { + if(result==HCI_SUCCESS) { + hci_write_local_name((u8_t*)"",1); + } else + err = ERR_CONN; + } else if(ocf==HCI_WRITE_LOCAL_NAME) { + if(result==HCI_SUCCESS) { + hci_write_pin_type(0x00); + } else + err = ERR_CONN; + } else if(ocf==HCI_WRITE_PIN_TYPE) { + if(result==HCI_SUCCESS) { + hci_host_buffer_size(); + } else + err = ERR_CONN; + } else if(ocf==HCI_HOST_BUF_SIZE) { + if(result==HCI_SUCCESS) { + hci_read_local_version(); + } else + err = ERR_CONN; + } + break; + default: + LOG("Unknown command complete event. OGF = 0x%x OCF = 0x%x\n", ogf, ocf); + err = ERR_CONN; + break; + } + + if(err!=ERR_OK) __bte_cmdfinish(state,err); + return err; +} + +err_t bte_hci_apply_patch_complete(void *arg,struct hci_pcb *pcb,u8_t ogf,u8_t ocf,u8_t result) +{ + err_t err = ERR_OK; + struct bt_state *state = (struct bt_state*)arg; + + LOG("bte_hci_apply_patch_complete(%02x,%02x,%02x)\n",ogf,ocf,result); + switch(ogf) { + case HCI_VENDOR_OGF: + if(ocf==HCI_VENDOR_PATCH_START_OCF) { + if(result==HCI_SUCCESS) { + err = hci_vendor_specific_command(HCI_VENDOR_PATCH_CONT_OCF,HCI_VENDOR_OGF,bte_patch0,184); + } else + err = ERR_CONN; + } else if(ocf==HCI_VENDOR_PATCH_CONT_OCF) { + if(result==HCI_SUCCESS) { + hci_cmd_complete(bte_hci_patch_complete); + err = hci_vendor_specific_command(HCI_VENDOR_PATCH_END_OCF,HCI_VENDOR_OGF,bte_patch1,92); + } else + err = ERR_CONN; + } + break; + default: + LOG("Unknown command complete event. OGF = 0x%x OCF = 0x%x\n", ogf, ocf); + err = ERR_CONN; + break; + } + + if(err!=ERR_OK) __bte_cmdfinish(state,err); + return err; +} + +err_t bte_hci_patch_complete(void *arg,struct hci_pcb *pcb,u8_t ogf,u8_t ocf,u8_t result) +{ + err_t err = ERR_OK; + u8_t dev_cod[] = {0x04, 0x02,0x40}; + struct bt_state *state = (struct bt_state*)arg; + + LOG("bte_hci_patch_complete(%02x,%02x,%02x)\n",ogf,ocf,result); + switch(ogf) { + case HCI_INFO_PARAM: + if(ocf==HCI_READ_BUFFER_SIZE) { + if(result==HCI_SUCCESS) { + hci_write_cod(dev_cod); + } else + err = ERR_CONN; + } else if(ocf==HCI_READ_LOCAL_VERSION) { + if(result==HCI_SUCCESS) { + hci_read_bd_addr(); + } else + err = ERR_CONN; + } else if(ocf==HCI_READ_BD_ADDR) { + if(result==HCI_SUCCESS) { + hci_read_local_features(); + } else + err = ERR_CONN; + } else if(ocf==HCI_READ_LOCAL_FEATURES) { + if(result==HCI_SUCCESS) { + hci_cmd_complete(NULL); + return __bte_cmdfinish(state,ERR_OK); + } else + err = ERR_CONN; + } + break; + case HCI_HC_BB_OGF: + if(ocf==HCI_RESET) { + if(result==HCI_SUCCESS) { + hci_read_buffer_size(); + } else + err = ERR_CONN; + } else if(ocf==HCI_WRITE_COD) { + if(result==HCI_SUCCESS) { + hci_write_local_name((u8_t*)"",1); + } else + err = ERR_CONN; + } else if(ocf==HCI_WRITE_LOCAL_NAME) { + if(result==HCI_SUCCESS) { + hci_write_pin_type(0x00); + } else + err = ERR_CONN; + } else if(ocf==HCI_WRITE_PIN_TYPE) { + if(result==HCI_SUCCESS) { + hci_host_buffer_size(); + } else + err = ERR_CONN; + } else if(ocf==HCI_HOST_BUF_SIZE) { + if(result==HCI_SUCCESS) { + hci_read_local_version(); + } else + err = ERR_CONN; + } + break; + case HCI_VENDOR_OGF: + if(ocf==HCI_VENDOR_PATCH_END_OCF) { + if(result==HCI_SUCCESS) { + err = hci_reset(); + } else + err = ERR_CONN; + } + break; + default: + LOG("Unknown command complete event. OGF = 0x%x OCF = 0x%x\n", ogf, ocf); + err = ERR_CONN; + break; + } + + if(err!=ERR_OK) __bte_cmdfinish(state,err); + return err; +} + +err_t bte_hci_initsub_complete(void *arg,struct hci_pcb *pcb,u8_t ogf,u8_t ocf,u8_t result) +{ + err_t err = ERR_OK; + u8_t dev_cod[] = {0x00, 0x04,0x48}; + struct bt_state *state = (struct bt_state*)arg; + + LOG("bte_hci_initsub_complete(%02x,%02x)\n",ogf,ocf); + switch(ogf) { + case HCI_HC_BB_OGF: + if(ocf==HCI_WRITE_INQUIRY_MODE) { + if(result==HCI_SUCCESS) { + hci_write_page_scan_type(0x01); + } else + err = ERR_CONN; + } else if(ocf==HCI_WRITE_PAGE_SCAN_TYPE) { + if(result==HCI_SUCCESS) { + hci_write_inquiry_scan_type(0x01); + } else + err = ERR_CONN; + } else if(ocf==HCI_WRITE_INQUIRY_SCAN_TYPE) { + if(result==HCI_SUCCESS) { + hci_write_cod(dev_cod); + } else + err = ERR_CONN; + } else if(ocf==HCI_WRITE_COD) { + if(result==HCI_SUCCESS) { + hci_write_page_timeout(0x8000); + } else + err = ERR_CONN; + } else if(ocf==HCI_WRITE_PAGE_TIMEOUT) { + if(result==HCI_SUCCESS) { + hci_write_local_name((u8_t*)"Wii",4); + } else + err = ERR_CONN; + } else if(ocf==HCI_WRITE_LOCAL_NAME) { + if(result==HCI_SUCCESS) { + hci_write_scan_enable(0x02); + } else + err = ERR_CONN; + } else if(ocf==HCI_WRITE_SCAN_ENABLE) { + if(result==HCI_SUCCESS) { + hci_cmd_complete(NULL); + return __bte_cmdfinish(state,ERR_OK); + } else + err = ERR_CONN; + } + break; + default: + LOG("Unknown command complete event. OGF = 0x%x OCF = 0x%x\n", ogf, ocf); + err = ERR_CONN; + break; + + } + + if(err!=ERR_OK) __bte_cmdfinish(state,err); + return err; +} + diff --git a/wii/libogc/lwbt/btmemb.c b/wii/libogc/lwbt/btmemb.c new file mode 100644 index 0000000000..899a3359e5 --- /dev/null +++ b/wii/libogc/lwbt/btmemb.c @@ -0,0 +1,70 @@ +#include +#include + +#include "asm.h" +#include "processor.h" + +#include "bt.h" +#include "btmemb.h" + +void btmemb_init(struct memb_blks *blk) +{ + MEMSET(blk->mem,0,(MEM_ALIGN_SIZE(blk->size)+sizeof(u32))*blk->num); +} + +void* btmemb_alloc(struct memb_blks *blk) +{ + s32 i; + u32 *ptr; + u32 level; + void *p; + + _CPU_ISR_Disable(level); + ptr = (u32*)blk->mem; + for(i=0;inum;i++) { + if(*ptr==0) { + ++(*ptr); + p = (ptr+1); + _CPU_ISR_Restore(level); + return p; + } + ptr = (u32*)((u8*)ptr+(MEM_ALIGN_SIZE(blk->size)+sizeof(u32))); + } + _CPU_ISR_Restore(level); + return NULL; +} + +u8 btmemb_free(struct memb_blks *blk,void *ptr) +{ + u8 ref; + s32 i; + u32 level; + u32 *ptr2,*ptr1; + + _CPU_ISR_Disable(level); + ptr1 = ptr; + ptr2 = (u32*)blk->mem; + for(i=0;inum;i++) { + if(ptr2==(ptr1 - 1)) { + ref = --(*ptr2); + _CPU_ISR_Restore(level); + return ref; + } + ptr2 = (u32*)((u8*)ptr2+(MEM_ALIGN_SIZE(blk->size)+sizeof(u32))); + } + _CPU_ISR_Restore(level); + return -1; +} + +u8 btmemb_ref(struct memb_blks *blk,void *ptr) +{ + u8 ref; + u32 *pref; + u32 level; + + _CPU_ISR_Disable(level); + pref = ptr-sizeof(u32); + ref = ++(*pref); + _CPU_ISR_Restore(level); + return ref; +} diff --git a/wii/libogc/lwbt/btmemb.h b/wii/libogc/lwbt/btmemb.h new file mode 100644 index 0000000000..863456acda --- /dev/null +++ b/wii/libogc/lwbt/btmemb.h @@ -0,0 +1,21 @@ +#ifndef __BTMEMB_H__ +#define __BTMEMB_H__ + +#include + +#define MEMB(name,size,num) \ + static u8 memb_mem_##name[(MEM_ALIGN_SIZE(size)+sizeof(u32))*num]; \ + static struct memb_blks name = {size,num,memb_mem_##name} + +struct memb_blks { + u16 size; + u16 num; + u8 *mem; +}; + +void btmemb_init(struct memb_blks *blk); +void* btmemb_alloc(struct memb_blks *blk); +u8 btmemb_free(struct memb_blks *blk,void *ptr); +u8 btmemb_ref(struct memb_blks *blk,void *ptr); + +#endif diff --git a/wii/libogc/lwbt/btmemr.c b/wii/libogc/lwbt/btmemr.c new file mode 100644 index 0000000000..cd23473596 --- /dev/null +++ b/wii/libogc/lwbt/btmemr.c @@ -0,0 +1,166 @@ +#include +#include + +#include "asm.h" +#include "processor.h" + +#include "bt.h" +#include "btmemr.h" + +#define MIN_SIZE 12 +#define SIZEOF_STRUCT_MEM (sizeof(struct mem)+(((sizeof(struct mem)%MEM_ALIGNMENT)==0)?0:(4-(sizeof(struct mem)%MEM_ALIGNMENT)))) + +struct mem { + u32 next,prev; + u32 used; +}; + +static struct mem *ram_free; +static struct mem *ram_end; +static u8 ram_block[sizeof(struct mem)+MEM_SIZE+MEM_ALIGNMENT]; + +static void plug_holes(struct mem *rmem) +{ + struct mem *nmem; + struct mem *pmem; + + nmem = (struct mem*)&ram_block[rmem->next]; + if(rmem!=nmem && nmem->used==0 && (u8_t*)nmem!=(u8_t*)ram_end) { + if(ram_free==nmem) ram_free = rmem; + + rmem->next = nmem->next; + ((struct mem*)&ram_block[nmem->next])->prev = (u8_t*)rmem - ram_block; + } + + pmem = (struct mem*)&ram_block[rmem->prev]; + if(pmem!=rmem && pmem->used==0) { + if(ram_free==rmem) ram_free = pmem; + pmem->next = rmem->next; + ((struct mem*)&ram_block[rmem->next])->prev = (u8_t*)pmem - ram_block; + } +} + +void btmemr_init() +{ + u32 level; + struct mem *rmem; + + MEMSET(ram_block,0,MEM_SIZE); + + _CPU_ISR_Disable(level); + rmem = (struct mem*)ram_block; + rmem->next = MEM_SIZE; + rmem->prev = 0; + rmem->used = 0; + + ram_end = (struct mem*)&ram_block[MEM_SIZE]; + ram_end->used = 1; + ram_end->prev = MEM_SIZE; + ram_end->next = MEM_SIZE; + + ram_free = (struct mem*)ram_block; + _CPU_ISR_Restore(level); +} + +void* btmemr_malloc(u32 size) +{ + u32 level; + u32 ptr,ptr2; + struct mem *rmem,*rmem2; + + if(size==0) return NULL; + + if(size%MEM_ALIGNMENT) size += MEM_ALIGNMENT - ((size+SIZEOF_STRUCT_MEM)%SIZEOF_STRUCT_MEM); + if(size>MEM_SIZE) return NULL; + + _CPU_ISR_Disable(level); + for(ptr = (u8_t*)ram_free - ram_block;ptrnext) { + rmem = (struct mem*)&ram_block[ptr]; + if(!rmem->used && rmem->next - (ptr + SIZEOF_STRUCT_MEM)>=size + SIZEOF_STRUCT_MEM) { + ptr2 = ptr + SIZEOF_STRUCT_MEM + size; + rmem2 = (struct mem*)&ram_block[ptr2]; + + rmem2->prev = ptr; + rmem2->next = rmem->next; + rmem->next = ptr2; + if(rmem->next!=MEM_SIZE) ((struct mem*)&ram_block[rmem2->next])->prev = ptr2; + + rmem2->used = 0; + rmem->used = 1; + + if(rmem==ram_free) { + while(ram_free->used && ram_free!=ram_end) ram_free = (struct mem*)&ram_block[ram_free->next]; + } + + _CPU_ISR_Restore(level); + return (u8_t*)rmem+SIZEOF_STRUCT_MEM; + } + } + _CPU_ISR_Restore(level); + return NULL; +} + +void btmemr_free(void *ptr) +{ + u32 level; + struct mem *rmem; + + if(ptr==NULL) return; + if((u8_t*)ptr<(u8_t*)ram_block || (u8_t*)ptr>=(u8_t*)ram_end) return; + + _CPU_ISR_Disable(level); + rmem = (struct mem*)((u8_t*)ptr - SIZEOF_STRUCT_MEM); + rmem->used = 0; + + if(rmemMEM_SIZE) return NULL; + if((u8_t*)ptr<(u8_t*)ram_block || (u8_t*)ptr>=(u8_t*)ram_end) { + ERROR("memr_realloc: illegal memory.\n"); + return ptr; + } + + _CPU_ISR_Disable(level); + rmem = (struct mem*)((u8_t*)ptr - SIZEOF_STRUCT_MEM); + ptr1 = (u8_t*)rmem - ram_block; + size = rmem->next - ptr1 - SIZEOF_STRUCT_MEM; + + if(newsize+SIZEOF_STRUCT_MEM+MIN_SIZEused = 0; + rmem2->next = rmem->next; + rmem2->prev = ptr1; + rmem->next = ptr2; + if(rmem2->next!=MEM_SIZE) ((struct mem*)&ram_block[rmem2->next])->prev = ptr2; + + plug_holes(rmem2); + } + _CPU_ISR_Restore(level); + + return ptr; +} + +void* btmemr_reallocm(void *ptr,u32 newsize) +{ + void *nmem; + + nmem = btmemr_malloc(newsize); + if(nmem==NULL) return btmemr_realloc(ptr,newsize); + + MEMCPY(nmem,ptr,newsize); + btmemr_free(ptr); + + return nmem; +} diff --git a/wii/libogc/lwbt/btmemr.h b/wii/libogc/lwbt/btmemr.h new file mode 100644 index 0000000000..f9c71523ae --- /dev/null +++ b/wii/libogc/lwbt/btmemr.h @@ -0,0 +1,12 @@ +#ifndef __BTMEMR_H__ +#define __BTMEMR_H__ + +#include + +void btmemr_init(); +void* btmemr_malloc(u32 size); +void btmemr_free(void *ptr); +void* btmemr_realloc(void *ptr,u32 newsize); +void* btmemr_reallocm(void *ptr,u32 newsize); + +#endif diff --git a/wii/libogc/lwbt/btopt.h b/wii/libogc/lwbt/btopt.h new file mode 100644 index 0000000000..28485f10b1 --- /dev/null +++ b/wii/libogc/lwbt/btopt.h @@ -0,0 +1,352 @@ +/** + * \defgroup uipopt Configuration options for uIP + * @{ + * + * uIP is configured using the per-project configuration file + * "uipopt.h". This file contains all compile-time options for uIP and + * should be tweaked to match each specific project. The uIP + * distribution contains a documented example "uipopt.h" that can be + * copied and modified for each project. + */ + +/** + * \file + * Configuration options for uIP. + * \author Adam Dunkels + * + * This file is used for tweaking various configuration options for + * uIP. You should make a copy of this file into one of your project's + * directories instead of editing this example "uipopt.h" file that + * comes with the uIP distribution. + */ + +/* + * Copyright (c) 2001-2003, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * + */ + +#ifndef __BTOPT_H__ +#define __BTOPT_H__ + +#include +#include +#include + +/*------------------------------------------------------------------------------*/ +/** + * \defgroup uipopttypedef uIP type definitions + * @{ + */ + +/** + * The 8-bit unsigned data type. + * + * This may have to be tweaked for your particular compiler. "unsigned + * char" works for most compilers. + */ +typedef u8 u8_t; + +/** + * The 8-bit signed data type. + * + * This may have to be tweaked for your particular compiler. "unsigned + * char" works for most compilers. + */ +typedef s8 s8_t; + +/** + * The 16-bit unsigned data type. + * + * This may have to be tweaked for your particular compiler. "unsigned + * short" works for most compilers. + */ +typedef u16 u16_t; + +/** + * The 16-bit signed data type. + * + * This may have to be tweaked for your particular compiler. "unsigned + * short" works for most compilers. + */ +typedef s16 s16_t; + +/** + * The 32-bit signed data type. + * + * This may have to be tweaked for your particular compiler. "unsigned + * short" works for most compilers. + */ +typedef s32 s32_t; + +/** + * The 32-bit unsigned data type. + * + * This may have to be tweaked for your particular compiler. "unsigned + * short" works for most compilers. + */ +typedef u32 u32_t; + +/** + * The 64-bit unsigned data type. + * + * This may have to be tweaked for your particular compiler. "unsigned + * short" works for most compilers. + */ +typedef u64 u64_t; + +/** + * The 64-bit signed data type. + * + * This may have to be tweaked for your particular compiler. "unsigned + * short" works for most compilers. + */ +typedef s64 s64_t; + +/** + * The statistics data type. + * + * This datatype determines how high the statistics counters are able + * to count. + */ +typedef s8 err_t; + +/*------------------------------------------------------------------------------*/ + +/** + * \defgroup btopt general configuration options + * @{ + */ + +/** + * The size of the uIP packet buffer. + * + * The uIP packet buffer should not be smaller than 60 bytes, and does + * not need to be larger than 1500 bytes. Lower size results in lower + * TCP throughput, larger size results in higher TCP throughput. + * + * \hideinitializer + */ +#define MEM_SIZE (64*1024) + +#define PBUF_POOL_NUM (HCI_HOST_MAX_NUM_ACL*MAX_NUM_CLIENTS) +#define PBUF_POOL_BUFSIZE HCI_HOST_ACL_MAX_LEN + +#define PBUF_ROM_NUM 45 + + +/** + * Determines if statistics support should be compiled in. + * + * The statistics is useful for debugging and to show the user. + * + * \hideinitializer + */ +#define STATISTICS 0 + +/** + * Determines if logging of certain events should be compiled in. + * + * This is useful mostly for debugging. The function uip_log() + * must be implemented to suit the architecture of the project, if + * logging is turned on. + * + * \hideinitializer + */ +#define LOGGING 0 +#define ERRORING 0 + +/** + * Print out a uIP log message. + * + * This function must be implemented by the module that uses uIP, and + * is called by uIP whenever a log message is generated. + */ +void bt_log(const char *filename,int line_nb,char *msg); + +/** + * The link level header length. + * + * This is the offset into the uip_buf where the IP header can be + * found. For Ethernet, this should be set to 14. For SLIP, this + * should be set to 0. + * + * \hideinitializer + */ +#define LL_HLEN 16 + +#define TCPIP_HLEN 40 +/** @} */ +/*------------------------------------------------------------------------------*/ +/** + * \defgroup uipoptcpu CPU architecture configuration + * @{ + * + * The CPU architecture configuration is where the endianess of the + * CPU on which uIP is to be run is specified. Most CPUs today are + * little endian, and the most notable exception are the Motorolas + * which are big endian. The BYTE_ORDER macro should be changed to + * reflect the CPU architecture on which uIP is to be run. + */ +#ifndef LITTLE_ENDIAN +#define LITTLE_ENDIAN 3412 +#endif /* LITTLE_ENDIAN */ +#ifndef BIG_ENDIAN +#define BIG_ENDIAN 1234 +#endif /* BIGE_ENDIAN */ + +/** + * The byte order of the CPU architecture on which uIP is to be run. + * + * This option can be either BIG_ENDIAN (Motorola byte order) or + * LITTLE_ENDIAN (Intel byte order). + * + * \hideinitializer + */ +#ifndef BYTE_ORDER +#define BYTE_ORDER BIG_ENDIAN +#endif /* BYTE_ORDER */ + +/** @} */ +/*------------------------------------------------------------------------------*/ + +#define LIBC_MEMFUNCREPLACE 0 + +/* ---------- Memory options ---------- */ +#define MAX_NUM_CLIENTS 6 /* Maximum number of connected Bluetooth clients. No more than 6 */ +#define MAX_NUM_OPT_CLIENTS 10 /* Maximum number of possible Bluetooth clients we might listen to */ + +#define MEMB_NUM_HCI_PCB 1 /* Always set to one */ +#define MEMB_NUM_HCI_LINK MAX_NUM_CLIENTS /* One for DT + One per ACL connection */ +#define MEMB_NUM_HCI_INQ 256 /* One per max number of returned results from an inquiry */ +#define MEMB_NUM_HCI_LINK_KEY 256 /* One per max number of returned results from an read stored link key */ + +/* MEMP_NUM_L2CAP_PCB: the number of simulatenously active L2CAP + connections. */ +#define MEMB_NUM_L2CAP_PCB (2 + 2 * MAX_NUM_CLIENTS) /* One for a closing connection + one for DT + one per number of connected Bluetooth clients */ +/* MEMP_NUM_L2CAP_PCB_LISTEN: the number of listening L2CAP + connections. */ +#define MEMB_NUM_L2CAP_PCB_LISTEN (2 * MAX_NUM_OPT_CLIENTS) /* One per listening PSM */ +/* MEMP_NUM_L2CAP_SIG: the number of simultaneously unresponded + L2CAP signals */ +#define MEMB_NUM_L2CAP_SIG (2 * MAX_NUM_CLIENTS)/* Two per number of connected Bluetooth clients but min 2 */ +#define MEMB_NUM_L2CAP_SEG (2 + 2 * MAX_NUM_CLIENTS) /* One per number of L2CAP connections */ + +#define MEMB_NUM_SDP_PCB MAX_NUM_CLIENTS /* One per number of connected Bluetooth clients */ +#define MEMB_NUM_SDP_RECORD 1 /* One per registered service record */ + +#define MEMP_NUM_RFCOMM_PCB (2 + 2 * MAX_NUM_CLIENTS) /* Two for DT + Two per number of connected Bluetooth clients */ +#define MEMP_NUM_RFCOMM_PCB_LISTEN (2 * MAX_NUM_CLIENTS) /* Two per number of connected Bluetooth clients */ + +#define MEMP_NUM_HIDP_PCB (2 + 2 * MAX_NUM_CLIENTS) /* Two for DT + Two per number of connected Bluetooth clients */ +#define MEMP_NUM_HIDP_PCB_LISTEN (2 * MAX_NUM_CLIENTS) /* Two per number of connected Bluetooth clients */ + +#define MEMP_NUM_PPP_PCB (1 + MAX_NUM_CLIENTS) /* One for DT + One per number of connected Bluetooth clients */ +#define MEMP_NUM_PPP_REQ MAX_NUM_CLIENTS /* One per number of connected Bluetooth clients but min 1 */ + +#define MEMP_NUM_BTE_PCB (2 + 2 * MAX_NUM_CLIENTS) /* Two for DT + Two per number of connected Bluetooth clients */ +#define MEMP_NUM_BTE_PCB_LISTEN (2 * MAX_NUM_CLIENTS) /* Two per number of connected Bluetooth clients */ + +#define MEMP_NUM_BTE_CTRLS 256 + +/* ---------- HCI options ---------- */ +/* HCI: Defines if we have lower layers of the Bluetooth stack running on a separate host + controller */ +#define HCI 1 + +#if HCI +/* HCI_HOST_MAX_NUM_ACL: The maximum number of ACL packets that the host can buffer */ +#define HCI_HOST_MAX_NUM_ACL 20 //TODO: Should be equal to PBUF_POOL_SIZE/2??? */ +/* HCI_HOST_ACL_MAX_LEN: The maximum size of an ACL packet that the host can buffer */ +#define HCI_HOST_ACL_MAX_LEN 1691 /* Default: RFCOMM MFS + ACL header size, L2CAP header size, + RFCOMM header size and RFCOMM FCS size */ +/* HCI_PACKET_TYPE: The set of packet types which may be used on the connection. In order to + maximize packet throughput, it is recommended that RFCOMM should make use of the 3 and 5 + slot baseband packets.*/ +#define HCI_PACKET_TYPE 0xCC18 /* Default DM1, DH1, DM3, DH3, DM5, DH5 */ +/* HCI_ALLOW_ROLE_SWITCH: Tells the host controller whether to accept a Master/Slave switch + during establishment of a connection */ +#define HCI_ALLOW_ROLE_SWITCH 1 /* Default 1 */ +/* HCI_FLOW_QUEUEING: Control if a packet should be queued if the host controller is out of + bufferspace for outgoing packets. Only the first packet sent when out of credits will be + queued */ +#define HCI_FLOW_QUEUEING 0 /* Default: 0 */ + +#endif /* HCI */ + +/* ---------- L2CAP options ---------- */ +/* L2CAP_HCI: Option for including HCI to access the Bluetooth baseband capabilities */ +#define L2CAP_HCI 1 //TODO: NEEDED? +/* L2CAP_CFG_QOS: Control if a flow specification similar to RFC 1363 should be used */ +#define L2CAP_CFG_QOS 0 +/* L2CAP_MTU: Maximum transmission unit for L2CAP packet payload (min 48) */ +#define L2CAP_MTU (HIDD_N + 1)/* Default for this implementation is RFCOMM MFS + RFCOMM header size and + RFCOMM FCS size while the L2CAP default is 672 */ +/* L2CAP_OUT_FLUSHTO: For some networking protocols, such as many real-time protocols, guaranteed delivery + is undesirable. The flush time-out value SHALL be set to its default value 0xffff for a reliable L2CAP + channel, and MAY be set to other values if guaranteed delivery is not desired. (min 1) */ +#define L2CAP_OUT_FLUSHTO 0xFFFF /* Default: 0xFFFF. Infinite number of retransmissions (reliable channel) + The value of 1 implies no retransmissions at the Baseband level + should be performed since the minimum polling interval is 1.25 ms.*/ +/* L2CAP_RTX: The Responsive Timeout eXpired timer is used to terminate + the channel when the remote endpoint is unresponsive to signalling + requests (min 1s, max 60s) */ +#define L2CAP_RTX 60 +/* L2CAP_ERTX: The Extended Response Timeout eXpired timer is used in + place of the RTC timer when a L2CAP_ConnectRspPnd event is received + (min 60s, max 300s) */ +#define L2CAP_ERTX 300 +/* L2CAP_MAXRTX: Maximum number of Request retransmissions before + terminating the channel identified by the request. The decision + should be based on the flush timeout of the signalling link. If the + flush timeout is infinite, no retransmissions should be performed */ +#define L2CAP_MAXRTX 0 +/* L2CAP_CFG_TO: Amount of time spent arbitrating the channel parameters + before terminating the connection (max 120s) */ +#define L2CAP_CFG_TO 30 + +/* ---------- BTE options ---------- */ + +/* ---------- HIDD options ---------- */ +/* RFCOMM_N: Maximum frame size for RFCOMM segments (min 23, max 32767)*/ +#define HIDD_N 672 /* Default: Worst case byte stuffed PPP packet size + + non-compressed PPP header size and FCS size */ +/* RFCOMM_K: Initial amount of credits issued to the peer (min 0, max 7) */ +#define RFCOMM_K 0 +/* RFCOMM_TO: Acknowledgement timer (T1) and response timer for multiplexer control channel (T2). + T1 is the timeout for frames sent with the P/F bit set to 1 (SABM and DISC) and T2 is the timeout + for commands sent in UIH frames on DLCI 0 (min 10s, max 60s) */ +#define RFCOMM_TO 20 +/* RFCOMM_FLOW_QUEUEING: Control if a packet should be queued if a channel is out of credits for + outgoing packets. Only the first packet sent when out of credits will be queued */ +#define RFCOMM_FLOW_QUEUEING 0 /* Default: 0 */ + + +#endif /* __BTOPT_H__ */ diff --git a/wii/libogc/lwbt/btpbuf.c b/wii/libogc/lwbt/btpbuf.c new file mode 100644 index 0000000000..5afa2ce741 --- /dev/null +++ b/wii/libogc/lwbt/btpbuf.c @@ -0,0 +1,358 @@ +#include +#include + +#include "btmemb.h" +#include "btmemr.h" +#include "btpbuf.h" + +#if STATISTICS == 1 +#define STAT(s) +#else +#define STAT(s) +#endif /* STATISTICS == 1 */ + +MEMB(pool_pbufs,sizeof(struct pbuf)+PBUF_POOL_BUFSIZE,PBUF_POOL_NUM); +MEMB(rom_pbufs,sizeof(struct pbuf),PBUF_ROM_NUM); + +void btpbuf_init() +{ + btmemb_init(&pool_pbufs); + btmemb_init(&rom_pbufs); +} + +struct pbuf* btpbuf_alloc(pbuf_layer layer,u16_t len,pbuf_flag flag) +{ + u16_t offset; + s32_t rem_len; + struct pbuf *p,*q,*r; + + offset = 0; + switch(layer) { + case PBUF_TRANSPORT: + offset += TRANSPORT_HLEN; + case PBUF_LINK: + offset += LL_HLEN; + break; + case PBUF_RAW: + break; + default: + ERROR("btpbuf_alloc: bad pbuf layer.\n"); + return NULL; + } + + switch(flag) { + case PBUF_POOL: + p = btmemb_alloc(&pool_pbufs); + if(p==NULL) { + ERROR("btbtpbuf_alloc: couldn't allocate pbuf(p) from pool\n"); + return NULL; + } + + p->next = NULL; + p->payload = MEM_ALIGN((void*)((u8_t*)p+(sizeof(struct pbuf)+offset))); + p->tot_len = len; + p->len = (len>(PBUF_POOL_BUFSIZE-offset)?(PBUF_POOL_BUFSIZE-offset):len); + p->flags = PBUF_FLAG_POOL; + p->ref = 1; + + r = p; + rem_len = len - p->len; + while(rem_len>0) { + q = btmemb_alloc(&pool_pbufs); + if(q==NULL) { + ERROR("btpbuf_alloc: couldn't allocate pbuf(q) from pool\n"); + btpbuf_free(p); + return NULL; + } + + q->next = NULL; + r->next = q; + q->tot_len = rem_len; + q->len = (rem_len>PBUF_POOL_BUFSIZE?PBUF_POOL_BUFSIZE:rem_len); + q->payload = (void*)((u8_t*)q+sizeof(struct pbuf)); + q->flags = PBUF_FLAG_POOL; + q->ref = 1; + + rem_len -= q->len; + r = q; + } + break; + case PBUF_RAM: + p = btmemr_malloc(MEM_ALIGN_SIZE(sizeof(struct pbuf)+offset)+MEM_ALIGN_SIZE(len)); + if(p==NULL) { + ERROR("btpbuf_alloc: couldn't allocate pbuf from ram\n"); + return NULL; + } + p->payload = MEM_ALIGN((u8_t*)p+sizeof(struct pbuf)+offset); + p->len = p->tot_len = len; + p->next = NULL; + p->flags = PBUF_FLAG_RAM; + break; + case PBUF_ROM: + case PBUF_REF: + p = btmemb_alloc(&rom_pbufs); + if(p==NULL) { + ERROR("btpbuf_alloc: couldn't allocate pbuf from rom/ref\n"); + return NULL; + } + p->payload = NULL; + p->next = NULL; + p->len = p->tot_len = len; + p->flags = (flag==PBUF_ROM?PBUF_FLAG_ROM:PBUF_FLAG_REF); + break; + default: + ERROR("btpbuf_alloc: bad flag value.\n"); + return NULL; + } + + p->ref = 1; + return p; +} + +u8_t btpbuf_free(struct pbuf *p) +{ + u8_t cnt; + u32 level; + struct pbuf *q; + + if(p==NULL) return 0; + + cnt = 0; + + _CPU_ISR_Disable(level); + while(p!=NULL) { + p->ref--; + if(p->ref==0) { + q = p->next; + if(p->flags==PBUF_FLAG_POOL) { + btmemb_free(&pool_pbufs,p); + } else if(p->flags==PBUF_FLAG_ROM || p->flags==PBUF_FLAG_REF) { + btmemb_free(&rom_pbufs,p); + } else { + btmemr_free(p); + } + cnt++; + p = q; + } else + p = NULL; + } + _CPU_ISR_Restore(level); + + return cnt; +} + +void btpbuf_realloc(struct pbuf *p,u16_t new_len) +{ + u16_t rem_len; + s16_t grow; + struct pbuf *q; + + if(new_len>=p->tot_len) return; + + grow = new_len - p->tot_len; + rem_len = new_len; + q = p; + while(rem_len>q->len) { + rem_len -= q->len; + q->tot_len += grow; + q = q->next; + } + + if(q->flags==PBUF_FLAG_RAM && rem_len!=q->len) + btmemr_realloc(q,(u8_t*)q->payload-(u8_t*)q+rem_len); + + q->len = rem_len; + q->tot_len = q->len; + + if(q->next!=NULL) btpbuf_free(q->next); + q->next = NULL; +} + +u8_t btpbuf_header(struct pbuf *p,s16_t hdr_size_inc) +{ + void *payload; + + if(hdr_size_inc==0 || p==NULL) return 0; + + + payload = p->payload; + if(p->flags==PBUF_FLAG_POOL || p->flags==PBUF_FLAG_RAM) { + p->payload = (u8_t*)p->payload-hdr_size_inc; + if((u8_t*)p->payload<(u8_t*)p+sizeof(struct pbuf)) { + p->payload = payload; + return 1; + } + } else if(p->flags==PBUF_FLAG_ROM || p->flags==PBUF_FLAG_REF) { + if(hdr_size_inc<0 && hdr_size_inc-p->len<=0) p->payload = (u8_t*)p->payload-hdr_size_inc; + else return 1; + } + p->tot_len += hdr_size_inc; + p->len += hdr_size_inc; + + return 0; +} + +u8_t btpbuf_clen(struct pbuf *p) +{ + u8_t len; + + len = 0; + while(p!=NULL) { + len++; + p = p->next; + } + return len; +} + +void btpbuf_ref(struct pbuf *p) +{ + u32 level; + + if(p!=NULL) { + _CPU_ISR_Disable(level); + ++(p->ref); + _CPU_ISR_Restore(level); + } +} + +void btpbuf_cat(struct pbuf *h,struct pbuf *t) +{ + struct pbuf *p; + + if(h==NULL || t==NULL) return; + + for(p=h;p->next!=NULL;p=p->next) { + p->tot_len += t->tot_len; + } + p->tot_len += t->tot_len; + p->next = t; +} + +void btpbuf_queue(struct pbuf *p,struct pbuf *n) +{ + if(p==NULL || n==NULL || p==n) return; + + while(p->next!=NULL) p = p->next; + + p->next = n; + btpbuf_ref(n); +} + +struct pbuf* btpbuf_dequeue(struct pbuf *p) +{ + struct pbuf *q; + + if(p==NULL) return NULL; + + while(p->tot_len!=p->len) p = p->next; + + q = p->next; + p->next = NULL; + + return q; +} + +void btpbuf_chain(struct pbuf *h,struct pbuf *t) +{ + btpbuf_cat(h,t); + btpbuf_ref(t); +} + +struct pbuf* btpbuf_dechain(struct pbuf *p) +{ + struct pbuf *q; + u8_t tail_gone = 1; + + q = p->next; + if(q!=NULL) { + q->tot_len = p->tot_len - p->len; + p->next = NULL; + p->tot_len = p->len; + + tail_gone = btpbuf_free(q); + } + + return (tail_gone>0?NULL:q); +} + +struct pbuf* btpbuf_take(struct pbuf *p) +{ + struct pbuf *q , *prev, *head; + + prev = NULL; + head = p; + /* iterate through pbuf chain */ + do + { + /* pbuf is of type PBUF_REF? */ + if (p->flags == PBUF_FLAG_REF) { + LOG("pbuf_take: encountered PBUF_REF %p\n", (void *)p); + /* allocate a pbuf (w/ payload) fully in RAM */ + /* PBUF_POOL buffers are faster if we can use them */ + if (p->len <= PBUF_POOL_BUFSIZE) { + q = btpbuf_alloc(PBUF_RAW, p->len, PBUF_POOL); + if (q == NULL) { + LOG("pbuf_take: Could not allocate PBUF_POOL\n"); + } + } else { + /* no replacement pbuf yet */ + q = NULL; + LOG("pbuf_take: PBUF_POOL too small to replace PBUF_REF\n"); + } + /* no (large enough) PBUF_POOL was available? retry with PBUF_RAM */ + if (q == NULL) { + q = btpbuf_alloc(PBUF_RAW, p->len, PBUF_RAM); + if (q == NULL) { + LOG("pbuf_take: Could not allocate PBUF_RAM\n"); + } + } + /* replacement pbuf could be allocated? */ + if (q != NULL) + { + /* copy p to q */ + /* copy successor */ + q->next = p->next; + /* remove linkage from original pbuf */ + p->next = NULL; + /* remove linkage to original pbuf */ + if (prev != NULL) { + /* break chain and insert new pbuf instead */ + prev->next = q; + /* prev == NULL, so we replaced the head pbuf of the chain */ + } else { + head = q; + } + /* copy pbuf payload */ + memcpy(q->payload, p->payload, p->len); + q->tot_len = p->tot_len; + q->len = p->len; + /* in case p was the first pbuf, it is no longer refered to by + * our caller, as the caller MUST do p = pbuf_take(p); + * in case p was not the first pbuf, it is no longer refered to + * by prev. we can safely free the pbuf here. + * (note that we have set p->next to NULL already so that + * we will not free the rest of the chain by accident.) + */ + btpbuf_free(p); + /* do not copy ref, since someone else might be using the old buffer */ + LOG("pbuf_take: replaced PBUF_REF %p with %p\n", (void *)p, (void *)q); + p = q; + } else { + /* deallocate chain */ + btpbuf_free(head); + LOG("pbuf_take: failed to allocate replacement pbuf for %p\n", (void *)p); + return NULL; + } + /* p->flags != PBUF_FLAG_REF */ + } else { + LOG("pbuf_take: skipping pbuf not of type PBUF_REF\n"); + } + /* remember this pbuf */ + prev = p; + /* proceed to next pbuf in original chain */ + p = p->next; + } while (p); + LOG("pbuf_take: end of chain reached.\n"); + + return head; +} diff --git a/wii/libogc/lwbt/btpbuf.h b/wii/libogc/lwbt/btpbuf.h new file mode 100644 index 0000000000..924b99c0cf --- /dev/null +++ b/wii/libogc/lwbt/btpbuf.h @@ -0,0 +1,49 @@ +#ifndef __BTPBUF_H__ +#define __BTPBUF_H__ + +#include "bt.h" + +/* Definitions for the pbuf flag field. These are NOT the flags that + * are passed to pbuf_alloc(). */ +#define PBUF_FLAG_RAM 0x00U /* Flags that pbuf data is stored in RAM */ +#define PBUF_FLAG_ROM 0x01U /* Flags that pbuf data is stored in ROM */ +#define PBUF_FLAG_POOL 0x02U /* Flags that the pbuf comes from the pbuf pool */ +#define PBUF_FLAG_REF 0x04U /* Flags thet the pbuf payload refers to RAM */ + +typedef enum { + PBUF_TRANSPORT, + PBUF_LINK, + PBUF_RAW +} pbuf_layer; + +typedef enum { + PBUF_POOL, + PBUF_RAM, + PBUF_ROM, + PBUF_REF +} pbuf_flag; + +struct pbuf { + struct pbuf *next; + void *payload; + u16_t tot_len; + u16_t len; + u16_t flags; + u16_t ref; +}; + +void btpbuf_init(); +struct pbuf* btpbuf_alloc(pbuf_layer layer,u16_t len,pbuf_flag flag); +u8_t btpbuf_free(struct pbuf *p); +void btpbuf_realloc(struct pbuf *p,u16_t new_len); +u8_t btpbuf_header(struct pbuf *p,s16_t hdr_size_inc); +void btpbuf_cat(struct pbuf *h,struct pbuf *t); +u8_t btpbuf_clen(struct pbuf *p); +void btpbuf_queue(struct pbuf *p,struct pbuf *n); +void btpbuf_ref(struct pbuf *p); +void btpbuf_chain(struct pbuf *h,struct pbuf *t); +struct pbuf* btpbuf_dequeue(struct pbuf *p); +struct pbuf* btpbuf_dechain(struct pbuf *p); +struct pbuf* btpbuf_take(struct pbuf *p); + +#endif diff --git a/wii/libogc/lwbt/hci.c b/wii/libogc/lwbt/hci.c new file mode 100644 index 0000000000..fa0a1e8378 --- /dev/null +++ b/wii/libogc/lwbt/hci.c @@ -0,0 +1,1772 @@ +/* + * Copyright (c) 2003 EISLAB, Lulea University of Technology. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwBT Bluetooth stack. + * + * Author: Conny Ohult + * + */ + +/*-----------------------------------------------------------------------------------*/ +/* hci.c + * + * Implementation of the Host Controller Interface (HCI). A command interface to the + * baseband controller and link manager, and gives access to hardware status and + * control registers. + * + */ +/*-----------------------------------------------------------------------------------*/ + +#include +#include +#include +#include +#include +#include + +#include "hci.h" +#include "l2cap.h" +#include "btmemr.h" +#include "btmemb.h" +#include "btpbuf.h" +#include "physbusif.h" + +struct hci_pcb *hci_dev = NULL; +struct hci_link *hci_active_links = NULL; +struct hci_link *hci_tmp_link = NULL; +struct hci_link_key *hci_tmp_key = NULL; + +MEMB(hci_pcbs,sizeof(struct hci_pcb),MEMB_NUM_HCI_PCB); +MEMB(hci_links,sizeof(struct hci_link),MEMB_NUM_HCI_LINK); +MEMB(hci_inq_results,sizeof(struct hci_inq_res),MEMB_NUM_HCI_INQ); +MEMB(hci_link_key_results,sizeof(struct hci_link_key),MEMB_NUM_HCI_LINK_KEY); + +err_t hci_init(void) +{ + btmemr_init(); + btpbuf_init(); + + btmemb_init(&hci_pcbs); + btmemb_init(&hci_links); + btmemb_init(&hci_inq_results); + btmemb_init(&hci_link_key_results); + + if((hci_dev=btmemb_alloc(&hci_pcbs))==NULL) { + ERROR("hci_init: Could not allocate memory for hci_dev\n"); + return ERR_MEM; + } + memset(hci_dev,0,sizeof(struct hci_pcb)); + + hci_active_links = NULL; + hci_tmp_link = NULL; + + return ERR_OK; +} + +struct hci_link* hci_new(void) +{ + struct hci_link *link; + + link = btmemb_alloc(&hci_links); + if(link==NULL) return NULL; + + memset(link,0,sizeof(struct hci_link)); + return link; +} + +struct hci_link* hci_get_link(struct bd_addr *bdaddr) +{ + struct hci_link *link; + + for(link=hci_active_links;link!=NULL;link=link->next) { + if(bd_addr_cmp(&(link->bdaddr),bdaddr)) break; + } + return link; +} + +/*-----------------------------------------------------------------------------------*/ +/* + * hci_close(): + * + * Close the link control block. + */ +/*-----------------------------------------------------------------------------------*/ +err_t hci_close(struct hci_link *link) +{ + if(link->p != NULL) { + btpbuf_free(link->p); + } + + HCI_RMV(&(hci_active_links), link); + btmemb_free(&hci_links, link); + link = NULL; + return ERR_OK; +} + +/*-----------------------------------------------------------------------------------*/ +/* + * hci_reset_all(): + * + * Closes all active link control blocks. + */ +/*-----------------------------------------------------------------------------------*/ +void hci_reset_all(void) +{ + struct hci_link *link,*tlink; + struct hci_inq_res *ires,*tires; + struct hci_link_key *ikeys,*tikeys; + + for(link=hci_active_links;link!=NULL;) { + tlink = link->next; + hci_close(link); + link = tlink; + } + hci_active_links = NULL; + + for(ires=hci_dev->ires;ires!=NULL;) { + tires = ires->next; + btmemb_free(&hci_inq_results,ires); + ires = tires; + } + + for(ikeys=hci_dev->keyres;ikeys!=NULL;) { + tikeys = ikeys->next; + btmemb_free(&hci_inq_results,ikeys); + ikeys = tikeys; + } + btmemb_free(&hci_pcbs,hci_dev); + + hci_init(); +} + +void hci_arg(void *arg) +{ + hci_dev->cbarg = arg; +} + +void hci_cmd_complete(err_t (*cmd_complete)(void *arg,struct hci_pcb *pcb,u8_t ogf,u8_t ocf,u8_t result)) +{ + hci_dev->cmd_complete = cmd_complete; +} + +/*-----------------------------------------------------------------------------------*/ +/* + * hci_pin_req(): + * + * Used to specify the function that should be called when HCI has received a + * PIN code request event. + */ +/*-----------------------------------------------------------------------------------*/ +void hci_pin_req(err_t (* pin_req)(void *arg, struct bd_addr *bdaddr)) +{ + hci_dev->pin_req = pin_req; +} +/*-----------------------------------------------------------------------------------*/ +/* + * hci_link_key_req(): + * + * Used to specify the function that should be called when HCI has received a + * Link Key request event. + */ +/*-----------------------------------------------------------------------------------*/ +void hci_link_key_req(err_t (* link_key_req)(void *arg, struct bd_addr *bdaddr)) +{ + hci_dev->link_key_req = link_key_req; +} +/*-----------------------------------------------------------------------------------*/ +/* + * hci_link_key_not(): + * + * Used to specify the function that should be called when HCI has received a + * link key notification event. + */ +/*-----------------------------------------------------------------------------------*/ +void hci_link_key_not(err_t (* link_key_not)(void *arg, struct bd_addr *bdaddr, u8_t *key)) +{ + hci_dev->link_key_not = link_key_not; +} + +/*-----------------------------------------------------------------------------------*/ +/* + * hci_connection_complete(): + * + * Used to specify the function that should be called when HCI has received a + * connection complete event. + */ +/*-----------------------------------------------------------------------------------*/ +void hci_connection_complete(err_t (* conn_complete)(void *arg, struct bd_addr *bdaddr)) +{ + hci_dev->conn_complete = conn_complete; +} + +/*-----------------------------------------------------------------------------------*/ +/* + * hci_wlp_complete(): + * + * Used to specify the function that should be called when HCI has received a + * successful write link policy complete event. + */ +/*-----------------------------------------------------------------------------------*/ +void hci_wlp_complete(err_t (* wlp_complete)(void *arg, struct bd_addr *bdaddr)) +{ + hci_dev->wlp_complete = wlp_complete; +} + +void hci_conn_req(err_t (*conn_req)(void *arg,struct bd_addr *bdaddr,u8_t *cod,u8_t link_type)) +{ + hci_dev->conn_req = conn_req; +} + +err_t hci_reg_dev_info(struct bd_addr *bdaddr,u8_t *cod,u8_t psrm,u8_t psm,u16_t co) +{ + struct hci_inq_res *ires; + + if(hci_dev==NULL) return ERR_VAL; + + if((ires=btmemb_alloc(&hci_inq_results))!=NULL) { + bd_addr_set(&(ires->bdaddr),bdaddr); + memcpy(ires->cod,cod,3); + ires->psrm = psrm; + ires->psm = psm; + ires->co = co; + ires->next = NULL; + + HCI_REG(&(hci_dev->ires),ires); + return ERR_OK; + } + return ERR_MEM; +} + +struct pbuf* hci_cmd_ass(struct pbuf *p,u8_t ocf,u8_t ogf,u8_t len) +{ + ((u8_t*)p->payload)[0] = HCI_COMMAND_DATA_PACKET; /* cmd packet type */ + ((u8_t*)p->payload)[1] = (ocf&0xff); /* OCF & OGF */ + ((u8_t*)p->payload)[2] = ((ocf>>8)|(ogf<<2)); + ((u8_t*)p->payload)[3] = len-HCI_CMD_HDR_LEN-1; /* Param len = plen - cmd hdr - ptype */ + + if(hci_dev->num_cmd>0) hci_dev->num_cmd--; + return p; +} + +err_t hci_reset(void) +{ + struct pbuf *p = NULL; + + if((p=btpbuf_alloc(PBUF_RAW,HCI_RESET_PLEN,PBUF_RAM))==NULL) { + ERROR("hci_reset: Could not allocate memory for pbuf\n"); + return ERR_MEM; + } + + p = hci_cmd_ass(p,HCI_RESET_OCF,HCI_HC_BB_OGF,HCI_RESET_PLEN); + + physbusif_output(p,p->tot_len); + btpbuf_free(p); + + return ERR_OK; +} + +err_t hci_read_buffer_size(void) +{ + struct pbuf *p = NULL; + + if((p=btpbuf_alloc(PBUF_RAW,HCI_R_BUF_SIZE_PLEN,PBUF_RAM))==NULL) { + ERROR("hci_read_buffer_size: Could not allocate memory for pbuf\n"); + return ERR_MEM; + } + + p = hci_cmd_ass(p,HCI_R_BUF_SIZE_OCF,HCI_INFO_PARAM_OGF,HCI_R_BUF_SIZE_PLEN); + + physbusif_output(p,p->tot_len); + btpbuf_free(p); + + return ERR_OK; +} + +err_t hci_read_bd_addr(void) +{ + struct pbuf *p = NULL; + + if((p=btpbuf_alloc(PBUF_RAW,HCI_R_BD_ADDR_PLEN,PBUF_RAM))==NULL) { + ERROR("hci_read_bd_addr: Could not allocate memory for pbuf\n"); + return ERR_MEM; + } + + p = hci_cmd_ass(p,HCI_R_BD_ADDR_OCF,HCI_INFO_PARAM_OGF,HCI_R_BD_ADDR_PLEN); + + physbusif_output(p,p->tot_len); + btpbuf_free(p); + + return ERR_OK; +} + +err_t hci_read_local_version(void) +{ + struct pbuf *p = NULL; + + if((p=btpbuf_alloc(PBUF_RAW,HCI_R_LOC_VERS_SIZE_PLEN,PBUF_RAM))==NULL) { + ERROR("hci_read_local_version: Could not allocate memory for pbuf\n"); + return ERR_MEM; + } + + p = hci_cmd_ass(p,HCI_R_LOC_VERSION_OCF,HCI_INFO_PARAM_OGF,HCI_R_LOC_VERS_SIZE_PLEN); + + physbusif_output(p,p->tot_len); + btpbuf_free(p); + + return ERR_OK; +} + +err_t hci_read_local_features(void) +{ + struct pbuf *p = NULL; + + if((p=btpbuf_alloc(PBUF_RAW,HCI_R_LOC_FEAT_SIZE_PLEN,PBUF_RAM))==NULL) { + ERROR("hci_read_local_features: Could not allocate memory for pbuf\n"); + return ERR_MEM; + } + + p = hci_cmd_ass(p,HCI_R_LOC_FEATURES_OCF,HCI_INFO_PARAM_OGF,HCI_R_LOC_FEAT_SIZE_PLEN); + + physbusif_output(p,p->tot_len); + btpbuf_free(p); + + return ERR_OK; +} + +err_t hci_read_stored_link_key() +{ + struct pbuf *p = NULL; + struct hci_link_key *tmpres; + + /* Free any previous link key result list */ + while(hci_dev->keyres != NULL) { + tmpres = hci_dev->keyres; + hci_dev->keyres = hci_dev->keyres->next; + btmemb_free(&hci_link_key_results,tmpres); + } + + + if((p=btpbuf_alloc(PBUF_RAW,HCI_R_STORED_LINK_KEY_PLEN,PBUF_RAM))==NULL) { + ERROR("hci_read_stored_link_keys: Could not allocate memory for pbuf\n"); + return ERR_MEM; + } + + p = hci_cmd_ass(p,HCI_R_STORED_LINK_KEY_OCF,HCI_HC_BB_OGF,HCI_R_STORED_LINK_KEY_PLEN); + + memcpy((void*)((u8_t*)p->payload + 4),hci_dev->bdaddr.addr,6); + ((u8_t*)p->payload)[10] = 1; + + physbusif_output(p,p->tot_len); + btpbuf_free(p); + + return ERR_OK; +} + +err_t hci_set_event_filter(u8_t filter_type,u8_t filter_cond_type,u8_t *cond) +{ + u32 cond_len = 0; + struct pbuf *p = NULL; + + switch(filter_type) { + case 0x00: + cond_len = 0x00; + break; + case 0x01: + switch(filter_cond_type) { + case 0x00: + cond_len = 0x00; + break; + case 0x01: + cond_len = 0x06; + break; + case 0x02: + cond_len = 0x06; + break; + default: + break; + } + break; + case 0x02: + switch(filter_cond_type) { + case 0x00: + cond_len = 0x01; + break; + case 0x01: + cond_len = 0x07; + break; + case 0x02: + cond_len = 0x07; + break; + default: + break; + } + break; + default: + break; + } + + if((p=btpbuf_alloc(PBUF_RAW,HCI_SET_EV_FILTER_PLEN+cond_len,PBUF_RAM))==NULL) { + ERROR("hci_set_event_filter: Could not allocate memory for pbuf\n"); + return ERR_MEM; + } + + p = hci_cmd_ass(p,HCI_SET_EV_FILTER_OCF,HCI_HC_BB_OGF,HCI_SET_EV_FILTER_PLEN+cond_len); + ((u8_t*)p->payload)[4] = filter_type; + ((u8_t*)p->payload)[5] = filter_cond_type; + if(cond_len>0) memcpy(p->payload+6,cond,cond_len); + + physbusif_output(p,p->tot_len); + btpbuf_free(p); + + return ERR_OK; +} + +err_t hci_write_page_timeout(u16_t timeout) +{ + struct pbuf *p = NULL; + + if((p=btpbuf_alloc(PBUF_RAW,HCI_W_PAGE_TIMEOUT_PLEN,PBUF_RAM))==NULL) { + ERROR("hci_set_write_page_timeout: Could not allocate memory for pbuf\n"); + return ERR_MEM; + } + + p = hci_cmd_ass(p,HCI_W_PAGE_TIMEOUT_OCF,HCI_HC_BB_OGF,HCI_W_PAGE_TIMEOUT_PLEN); + ((u16_t*)p->payload)[2] = htole16(timeout); + + physbusif_output(p,p->tot_len); + btpbuf_free(p); + + return ERR_OK; +} + +err_t hci_write_scan_enable(u8_t scan_enable) +{ + struct pbuf *p = NULL; + + if((p=btpbuf_alloc(PBUF_RAW,HCI_W_SCAN_EN_PLEN,PBUF_RAM))==NULL) { + ERROR("hci_set_write_page_timeout: Could not allocate memory for pbuf\n"); + return ERR_MEM; + } + + p = hci_cmd_ass(p,HCI_W_SCAN_EN_OCF,HCI_HC_BB_OGF,HCI_W_SCAN_EN_PLEN); + ((u8_t*)p->payload)[4] = scan_enable; + + physbusif_output(p,p->tot_len); + btpbuf_free(p); + + return ERR_OK; +} + +err_t hci_inquiry(u32_t lap,u8_t inq_len,u8_t num_resp,err_t (*inq_complete)(void *arg,struct hci_pcb *pcb,struct hci_inq_res *ires,u16_t result)) +{ + struct pbuf *p = NULL; + struct hci_inq_res *tmpres; + + /* Free any previous inquiry result list */ + while(hci_dev->ires != NULL) { + tmpres = hci_dev->ires; + hci_dev->ires = hci_dev->ires->next; + btmemb_free(&hci_inq_results,tmpres); + } + + hci_dev->inq_complete = inq_complete; + if((p=btpbuf_alloc(PBUF_RAW,HCI_INQUIRY_PLEN,PBUF_RAM))==NULL) { + ERROR("hci_inquiry: Could not allocate memory for pbuf\n"); + return ERR_MEM; + } + + p = hci_cmd_ass(p,HCI_INQUIRY_OCF,HCI_LINK_CTRL_OGF,HCI_INQUIRY_PLEN); + ((u8_t*)p->payload)[4] = (lap&0xff); + ((u8_t*)p->payload)[5] = (lap>>8); + ((u8_t*)p->payload)[6] = (lap>>16); + + ((u8_t*)p->payload)[7] = inq_len; + ((u8_t*)p->payload)[8] = num_resp; + + physbusif_output(p,p->tot_len); + btpbuf_free(p); + + return ERR_OK; +} + +err_t hci_periodic_inquiry(u32_t lap,u16_t min_period,u16_t max_period,u8_t inq_len,u8_t num_resp,err_t (*inq_complete)(void *arg,struct hci_pcb *pcb,struct hci_inq_res *ires,u16_t result)) +{ + struct pbuf *p = NULL; + struct hci_inq_res *tmpres; + + /* Free any previous inquiry result list */ + while(hci_dev->ires != NULL) { + tmpres = hci_dev->ires; + hci_dev->ires = hci_dev->ires->next; + btmemb_free(&hci_inq_results,tmpres); + } + + hci_dev->inq_complete = inq_complete; + if((p=btpbuf_alloc(PBUF_RAW,HCI_PERIODIC_INQUIRY_PLEN,PBUF_RAM))==NULL) { + ERROR("hci_periodic_inquiry: Could not allocate memory for pbuf\n"); + return ERR_MEM; + } + + /* Assembling command packet */ + p = hci_cmd_ass(p,HCI_PERIODIC_INQUIRY_OCF,HCI_LINK_CTRL_OGF,HCI_PERIODIC_INQUIRY_PLEN); + + /* Assembling cmd prameters */ + ((u16_t*)p->payload)[2] = htole16(max_period); + ((u16_t*)p->payload)[3] = htole16(min_period); + ((u8_t*)p->payload)[8] = (lap&0xff); + ((u8_t*)p->payload)[9] = (lap>>8); + ((u8_t*)p->payload)[10] = (lap>>16); + + ((u8_t*)p->payload)[11] = inq_len; + ((u8_t*)p->payload)[12] = num_resp; + + physbusif_output(p,p->tot_len); + btpbuf_free(p); + + return ERR_OK; +} + +err_t hci_exit_periodic_inquiry() +{ + struct pbuf *p = NULL; + + if((p=btpbuf_alloc(PBUF_RAW,HCI_EXIT_PERIODIC_INQUIRY_PLEN,PBUF_RAM))==NULL) { + ERROR("hci_exit_periodic_inquiry: Could not allocate memory for pbuf\n"); + return ERR_MEM; + } + + /* Assembling command packet */ + p = hci_cmd_ass(p,HCI_EXIT_PERIODIC_INQUIRY_OCF,HCI_LINK_CTRL_OGF,HCI_EXIT_PERIODIC_INQUIRY_PLEN); + + physbusif_output(p,p->tot_len); + btpbuf_free(p); + + return ERR_OK; +} + +err_t hci_accecpt_conn_request(struct bd_addr *bdaddr,u8_t role) +{ + struct pbuf *p = NULL; + + if((p=btpbuf_alloc(PBUF_RAW,HCI_ACCEPT_CONN_REQ_PLEN,PBUF_RAM))==NULL) { + ERROR("hci_exit_periodic_inquiry: Could not allocate memory for pbuf\n"); + return ERR_MEM; + } + + /* Assembling command packet */ + p = hci_cmd_ass(p,HCI_ACCEPT_CONN_REQ_OCF,HCI_LINK_CTRL_OGF,HCI_ACCEPT_CONN_REQ_PLEN); + + /* Assembling cmd prameters */ + memcpy((void*)(((u8_t*)p->payload)+4),bdaddr,6); + ((u8_t*)p->payload)[10] = role; + + physbusif_output(p,p->tot_len); + btpbuf_free(p); + + return ERR_OK; +} + +err_t hci_set_event_mask(u64_t ev_mask) +{ + u64_t mask; + struct pbuf *p = NULL; + + if((p=btpbuf_alloc(PBUF_RAW,HCI_SET_EV_MASK_PLEN,PBUF_RAM))==NULL) { + ERROR("hci_set_event_mask: Could not allocate memory for pbuf\n"); + return ERR_MEM; + } + + /* Assembling command packet */ + p = hci_cmd_ass(p,HCI_SET_EV_MASK_OCF,HCI_HC_BB_OGF,HCI_SET_EV_MASK_PLEN); + + mask = htole64(ev_mask); + memcpy(((u8_t*)p->payload)+4,&mask,8); + + physbusif_output(p,p->tot_len); + btpbuf_free(p); + + return ERR_OK; +} + +err_t hci_write_local_name(u8_t *name,u8_t len) +{ + struct pbuf *p = NULL; + + if((p=btpbuf_alloc(PBUF_RAW,HCI_W_LOCAL_NAME_PLEN,PBUF_RAM))==NULL) { + ERROR("hci_write_local_name: Could not allocate memory for pbuf\n"); + return ERR_MEM; + } + + /* Assembling command packet */ + p = hci_cmd_ass(p,HCI_W_LOCAL_NAME_OCF,HCI_HC_BB_OGF,HCI_W_LOCAL_NAME_PLEN); + /* Assembling cmd prameters */ + memcpy(((u8_t *)p->payload) + 4, name, len); + + physbusif_output(p, p->tot_len); + btpbuf_free(p); + + return ERR_OK; +} + +err_t hci_write_pin_type(u8_t type) +{ + struct pbuf *p = NULL; + + if((p=btpbuf_alloc(PBUF_RAW,HCI_W_PIN_TYPE_PLEN,PBUF_RAM))==NULL) { + ERROR("hci_write_local_name: Could not allocate memory for pbuf\n"); + return ERR_MEM; + } + + /* Assembling command packet */ + p = hci_cmd_ass(p,HCI_W_PIN_TYPE_OCF,HCI_HC_BB_OGF,HCI_W_PIN_TYPE_PLEN); + /* Assembling cmd prameters */ + ((u8_t *)p->payload)[4] = type; + + physbusif_output(p, p->tot_len); + btpbuf_free(p); + + return ERR_OK; +} + +err_t hci_read_remote_name(struct bd_addr *bdaddr) +{ + u16_t clock_offset; + struct pbuf *p = NULL; + struct hci_inq_res *ires; + u8_t page_scan_repetition_mode, page_scan_mode; + + for(ires=hci_dev->ires;ires!=NULL;ires=ires->next) { + if(bd_addr_cmp(&(ires->bdaddr),bdaddr)) { + page_scan_repetition_mode = ires->psrm; + page_scan_mode = ires->psm; + clock_offset = ires->co; + break; + } + } + + if(ires==NULL) { + page_scan_repetition_mode = 0x01; + page_scan_mode = 0x00; + clock_offset = 0x00; + } + + if((p=btpbuf_alloc(PBUF_RAW,HCI_R_REMOTE_NAME_PLEN,PBUF_RAM))==NULL) { + ERROR("hci_read_remote_name: Could not allocate memory for pbuf\n"); + return ERR_MEM; + } + + /* Assembling command packet */ + p = hci_cmd_ass(p,HCI_R_REMOTE_NAME_OCF,HCI_LINK_CTRL_OGF,HCI_R_REMOTE_NAME_PLEN); + /* Assembling cmd prameters */ + memcpy(((u8_t *)p->payload+4),bdaddr->addr,6); + ((u8_t*)p->payload)[10] = page_scan_repetition_mode; + ((u8_t*)p->payload)[11] = page_scan_mode; + ((u16_t*)p->payload)[6] = htole16(clock_offset); + + physbusif_output(p, p->tot_len); + btpbuf_free(p); + + return ERR_OK; + +} + +err_t hci_write_inquiry_mode(u8_t mode) +{ + struct pbuf *p = NULL; + + if((p=btpbuf_alloc(PBUF_RAW,HCI_W_INQUIRY_MODE_PLEN,PBUF_RAM))==NULL) { + ERROR("hci_write_inquiry_mode: Could not allocate memory for pbuf\n"); + return ERR_MEM; + } + + /* Assembling command packet */ + p = hci_cmd_ass(p,HCI_W_INQUIRY_MODE_OCF,HCI_HC_BB_OGF,HCI_W_INQUIRY_MODE_PLEN); + /* Assembling cmd prameters */ + ((u8_t*)p->payload)[4] = mode; + + physbusif_output(p, p->tot_len); + btpbuf_free(p); + + return ERR_OK; +} + +err_t hci_write_page_scan_type(u8_t type) +{ + struct pbuf *p = NULL; + + if((p=btpbuf_alloc(PBUF_RAW,HCI_W_PAGE_SCAN_TYPE_PLEN,PBUF_RAM))==NULL) { + ERROR("hci_write_inquiry_mode: Could not allocate memory for pbuf\n"); + return ERR_MEM; + } + + /* Assembling command packet */ + p = hci_cmd_ass(p,HCI_W_PAGE_SCAN_TYPE_OCF,HCI_HC_BB_OGF,HCI_W_PAGE_SCAN_TYPE_PLEN); + /* Assembling cmd prameters */ + ((u8_t*)p->payload)[4] = type; + + physbusif_output(p, p->tot_len); + btpbuf_free(p); + + return ERR_OK; +} + +err_t hci_write_inquiry_scan_type(u8_t type) +{ + struct pbuf *p = NULL; + + if((p=btpbuf_alloc(PBUF_RAW,HCI_W_INQUIRY_SCAN_TYPE_PLEN,PBUF_RAM))==NULL) { + ERROR("hci_write_inquiry_mode: Could not allocate memory for pbuf\n"); + return ERR_MEM; + } + + /* Assembling command packet */ + p = hci_cmd_ass(p,HCI_W_INQUIRY_SCAN_TYPE_OCF,HCI_HC_BB_OGF,HCI_W_INQUIRY_SCAN_TYPE_PLEN); + /* Assembling cmd prameters */ + ((u8_t*)p->payload)[4] = type; + + physbusif_output(p, p->tot_len); + btpbuf_free(p); + + return ERR_OK; +} + +err_t hci_vendor_specific_command(u8_t ocf,u8_t ogf,void *data,u8_t len) +{ + struct pbuf *p = NULL; + + if((p=btpbuf_alloc(PBUF_RAW,HCI_W_VENDOR_CMD_PLEN + len,PBUF_RAM))==NULL) { + ERROR("hci_vendor_specific_patch: Could not allocate memory for pbuf\n"); + return ERR_MEM; + } + + /* Assembling command packet */ + p = hci_cmd_ass(p,ocf,ogf,HCI_W_VENDOR_CMD_PLEN + len); + /* Assembling cmd prameters */ + memcpy(((u8_t*)p->payload + 4),data,len); + + physbusif_output(p, p->tot_len); + btpbuf_free(p); + + return ERR_OK; +} +/*-----------------------------------------------------------------------------------*/ +/* hci_sniff_mode(): + * + * Sets an ACL connection to low power Sniff mode. + */ +/*-----------------------------------------------------------------------------------*/ +err_t hci_sniff_mode(struct bd_addr *bdaddr, u16_t max_interval, u16_t min_interval, u16_t attempt, u16_t timeout) +{ + struct pbuf *p; + struct hci_link *link; + + /* Check if an ACL connection exists */ + link = hci_get_link(bdaddr); + + if(link == NULL) { + ERROR("hci_sniff_mode: ACL connection does not exist\n"); + return ERR_CONN; + } + + if((p = btpbuf_alloc(PBUF_TRANSPORT, HCI_SNIFF_PLEN, PBUF_RAM)) == NULL) { /* Alloc len of packet */ + ERROR("hci_sniff_mode: Could not allocate memory for pbuf\n"); + return ERR_MEM; + } + + /* Assembling command packet */ + p = hci_cmd_ass(p, HCI_SNIFF_MODE_OCF, HCI_LINK_POLICY_OGF, HCI_SNIFF_PLEN); + /* Assembling cmd prameters */ + ((u16_t *)p->payload)[2] = htole16(link->connhdl); + ((u16_t *)p->payload)[3] = htole16(max_interval); + ((u16_t *)p->payload)[4] = htole16(min_interval); + ((u16_t *)p->payload)[5] = htole16(attempt); + ((u16_t *)p->payload)[6] = htole16(timeout); + + physbusif_output(p, p->tot_len); + btpbuf_free(p); + + return ERR_OK; +} +/*-----------------------------------------------------------------------------------*/ +/* hci_write_link_policy_settings(): + * + * Control the modes (park, sniff, hold) that an ACL connection can take. + * + */ +/*-----------------------------------------------------------------------------------*/ +err_t hci_write_link_policy_settings(struct bd_addr *bdaddr, u16_t link_policy) +{ + struct pbuf *p; + struct hci_link *link; + + /* Check if an ACL connection exists */ + link = hci_get_link(bdaddr); + + if(link == NULL) { + ERROR("hci_write_link_policy_settings: ACL connection does not exist\n"); + return ERR_CONN; + } + + if( (p = btpbuf_alloc(PBUF_TRANSPORT, HCI_W_LINK_POLICY_PLEN, PBUF_RAM)) == NULL) { /* Alloc len of packet */ + ERROR("hci_write_link_policy_settings: Could not allocate memory for pbuf\n"); + return ERR_MEM; + } + /* Assembling command packet */ + p = hci_cmd_ass(p, HCI_W_LINK_POLICY_OCF, HCI_LINK_POLICY_OGF, HCI_W_LINK_POLICY_PLEN); + + /* Assembling cmd prameters */ + ((u16_t *)p->payload)[2] = htole16(link->connhdl); + ((u16_t *)p->payload)[3] = htole16(link_policy); + + physbusif_output(p, p->tot_len); + btpbuf_free(p); + return ERR_OK; +} + +/*-----------------------------------------------------------------------------------*/ +/* hci_pin_code_request_reply(): + * + * Used to reply to a PIN Code Request event from the Host Controller and specifies + * the PIN code to use for a connection. + */ + /*-----------------------------------------------------------------------------------*/ +err_t hci_pin_code_request_reply(struct bd_addr *bdaddr, u8_t pinlen, u8_t *pincode) +{ + struct pbuf *p; + + if((p = btpbuf_alloc(PBUF_RAW, HCI_PIN_CODE_REQ_REP_PLEN, PBUF_RAM)) == NULL) { + ERROR("hci_pin_code_request_reply: Could not allocate memory for pbuf\n"); + return ERR_MEM; + } + + /* Reset buffer content just to make sure */ + memset((u8_t *)p->payload, 0, HCI_PIN_CODE_REQ_REP_PLEN); + + /* Assembling command packet */ + p = hci_cmd_ass(p, HCI_PIN_CODE_REQ_REP, HCI_LINK_CTRL_OGF, HCI_PIN_CODE_REQ_REP_PLEN); + /* Assembling cmd prameters */ + memcpy(((u8_t *)p->payload) + 4, bdaddr->addr, 6); + ((u8_t *)p->payload)[10] = pinlen; + memcpy(((u8_t *)p->payload) + 11, pincode, pinlen); + + physbusif_output(p, p->tot_len); + btpbuf_free(p); + + return ERR_OK; +} + +/*-----------------------------------------------------------------------------------*/ +/* hci_link_key_req_reply(): + * + * Used to reply to a Link Key Code Request event from the Host Controller and specifies + * the Link Key to use for a connection. + */ + /*-----------------------------------------------------------------------------------*/ +err_t hci_link_key_req_reply(struct bd_addr *bdaddr, unsigned char *link_key) +{ + struct pbuf *p; + if ((p = btpbuf_alloc(PBUF_RAW, HCI_LINK_KEY_REQ_REP_PLEN, PBUF_RAM)) == NULL) { + ERROR("hci_link_key_req_reply: Could not allocate memory for pbuf\n"); + return ERR_MEM; + } + + p = hci_cmd_ass(p, HCI_LINK_KEY_REQ_REP, HCI_LINK_CTRL_OGF, HCI_LINK_KEY_REQ_REP_PLEN); + //copy bdaddr to offset 0x4 + memcpy(((u8_t *)p->payload)+4, bdaddr->addr, 6); + //copy Link Key (16 bytes long) to offset 10 (0xA) + memcpy(((u8_t *)p->payload)+10, link_key, 16); + //send command + physbusif_output(p,p->tot_len); + btpbuf_free(p); + + return ERR_OK; +} + + +/*-----------------------------------------------------------------------------------*/ +/* hci_pin_code_request_neg_reply(): + * + * Used to reply to a PIN Code Request event from the Host Controller when the Host + * cannot specify a PIN code to use for a connection. + */ + /*-----------------------------------------------------------------------------------*/ +err_t hci_pin_code_request_neg_reply(struct bd_addr *bdaddr) +{ + struct pbuf *p; + + if((p=btpbuf_alloc(PBUF_RAW,HCI_PIN_CODE_REQ_NEG_REP_PLEN,PBUF_RAM)) == NULL) { + ERROR("hci_pin_code_request_neg_reply: Could not allocate memory for pbuf\n"); + return ERR_MEM; + } + + p = hci_cmd_ass(p,HCI_PIN_CODE_REQ_NEG_REP,HCI_LINK_CTRL_OGF,HCI_PIN_CODE_REQ_NEG_REP_PLEN); + memcpy(((u8_t *)p->payload)+4, bdaddr->addr, 6); + + physbusif_output(p,p->tot_len); + btpbuf_free(p); + + return ERR_OK; +} + +/*-----------------------------------------------------------------------------------*/ +/* hci_link_key_req_neg_reply(): + * + * Used to reply to a Link Key Request event from the Host Controller when the Host + * cannot specify a Link Key to use for a connection. + */ + /*-----------------------------------------------------------------------------------*/ +err_t hci_link_key_req_neg_reply(struct bd_addr *bdaddr) +{ + struct pbuf *p; + + if ((p = btpbuf_alloc(PBUF_RAW, HCI_LINK_KEY_REQ_REP_NEG_PLEN, PBUF_RAM)) == NULL) { + ERROR("hci_link_key_req_neg_repl: Could not allocate memory for pbuf\n"); + return ERR_MEM; + } + + p = hci_cmd_ass(p, HCI_LINK_KEY_REQ_REP_NEG, HCI_LINK_CTRL_OGF, HCI_LINK_KEY_REQ_REP_NEG_PLEN); + memcpy(((u8_t *)p->payload)+4, bdaddr->addr, 6); + + physbusif_output(p,p->tot_len); + btpbuf_free(p); + + return ERR_OK; +} + +/*-----------------------------------------------------------------------------------*/ +/* hci_disconnect(): + * + * Used to terminate an existing connection. + */ + /*-----------------------------------------------------------------------------------*/ +err_t hci_disconnect(struct bd_addr *bdaddr, u8_t reason) +{ + struct pbuf *p; + struct hci_link *link; + + link = hci_get_link(bdaddr); + + if(link == NULL) { + ERROR("hci_disconnect: Connection does not exist\n"); + return ERR_CONN; /* Connection does not exist */ + } + if((p = btpbuf_alloc(PBUF_RAW, HCI_DISCONN_PLEN, PBUF_RAM)) == NULL) { + ERROR("hci_disconnect: Could not allocate memory for pbuf\n"); + return ERR_MEM; /* Could not allocate memory for pbuf */ + } + /* Assembling command packet */ + p = hci_cmd_ass(p, HCI_DISCONN_OCF, HCI_LINK_CTRL_OGF, HCI_DISCONN_PLEN); + + /* Assembling cmd prameters */ + ((u16_t *)p->payload)[2] = htole16(link->connhdl); + ((u8_t *)p->payload)[6] = reason; + + physbusif_output(p, p->tot_len); + btpbuf_free(p); + + return ERR_OK; +} + +/*-----------------------------------------------------------------------------------*/ +/* hci_reject_connection_request(): + * + * Used to decline a new incoming connection request. + */ + /*-----------------------------------------------------------------------------------*/ +err_t hci_reject_connection_request(struct bd_addr *bdaddr, u8_t reason) +{ + struct pbuf *p; + + if((p = btpbuf_alloc(PBUF_RAW, HCI_REJECT_CONN_REQ_PLEN, PBUF_RAM)) == NULL) { + ERROR("hci_reject_connection_request: Could not allocate memory for pbuf\n"); + return ERR_MEM; + } + /* Assembling command packet */ + p = hci_cmd_ass(p, HCI_REJECT_CONN_REQ_OCF, HCI_LINK_CTRL_OGF, HCI_REJECT_CONN_REQ_PLEN); + /* Assembling cmd prameters */ + memcpy(((u8_t *)p->payload) + 4, bdaddr->addr, 6); + ((u8_t *)p->payload)[10] = reason; + + physbusif_output(p, p->tot_len); + btpbuf_free(p); + + return ERR_OK; +} + +/*-----------------------------------------------------------------------------------*/ +/* hci_write_stored_link_key(): + * + * Writes a link key to be stored in the Bluetooth host controller. + */ + /*-----------------------------------------------------------------------------------*/ +err_t hci_write_stored_link_key(struct bd_addr *bdaddr, u8_t *link) +{ + struct pbuf *p; + + if((p = btpbuf_alloc(PBUF_RAW, HCI_WRITE_STORED_LINK_KEY_PLEN, PBUF_RAM)) == NULL) { + ERROR("hci_write_stored_link_key: Could not allocate memory for pbuf\n"); + return ERR_MEM; + } + /* Assembling command packet */ + p = hci_cmd_ass(p, HCI_WRITE_STORED_LINK_KEY, HCI_HC_BB_OGF, HCI_WRITE_STORED_LINK_KEY_PLEN); + /* Assembling cmd prameters */ + ((u8_t *)p->payload)[4] = 0x01; + memcpy(((u8_t *)p->payload) + 5, bdaddr->addr, 6); + memcpy(((u8_t *)p->payload) + 11, link, 16); + + physbusif_output(p, p->tot_len); + btpbuf_free(p); + + return ERR_OK; +} + +/*-----------------------------------------------------------------------------------*/ +/* hci_write_cod(): + * + * Write the value for the Class_of_Device parameter, which is used to indicate its + * capabilities to other devices. + */ + /*-----------------------------------------------------------------------------------*/ +err_t hci_write_cod(u8_t *cod) +{ + struct pbuf *p; + + if((p = btpbuf_alloc(PBUF_RAW, HCI_W_COD_PLEN, PBUF_RAM)) == NULL) { + ERROR("hci_write_cod: Could not allocate memory for pbuf\n"); + return ERR_MEM; + } + /* Assembling command packet */ + p = hci_cmd_ass(p, HCI_W_COD_OCF, HCI_HC_BB_OGF, HCI_W_COD_PLEN); + /* Assembling cmd prameters */ + memcpy(((u8_t *)p->payload)+4, cod, 3); + + physbusif_output(p, p->tot_len); + btpbuf_free(p); + + return ERR_OK; +} + +err_t hci_read_current_lap(void) +{ + struct pbuf *p; + + if((p = btpbuf_alloc(PBUF_RAW, HCI_R_CUR_IACLAP_PLEN, PBUF_RAM)) == NULL) { + ERROR("hci_read_current_lap: Could not allocate memory for pbuf\n"); + return ERR_MEM; + } + /* Assembling command packet */ + p = hci_cmd_ass(p, HCI_R_CUR_IACLAP_OCF, HCI_HC_BB_OGF, HCI_R_CUR_IACLAP_PLEN); + + physbusif_output(p, p->tot_len); + btpbuf_free(p); + + return ERR_OK; +} + +/*-----------------------------------------------------------------------------------*/ +/* hci_set_hc_to_h_fc(): + * + * Used by the Host to turn flow control on or off in the direction from the Host + * Controller to the Host. + */ + /*-----------------------------------------------------------------------------------*/ +err_t hci_set_hc_to_h_fc(void) +{ + struct pbuf *p; + + if((p = btpbuf_alloc(PBUF_RAW, HCI_SET_HC_TO_H_FC_PLEN, PBUF_RAM)) == NULL) { + ERROR("hci_set_hc_to_h_fc: Could not allocate memory for pbuf\n"); + return ERR_MEM; + } + /* Assembling command packet */ + p = hci_cmd_ass(p, HCI_SET_HC_TO_H_FC_OCF, HCI_HC_BB_OGF, HCI_SET_HC_TO_H_FC_PLEN); + /* Assembling cmd prameters */ + ((u8_t *)p->payload)[4] = 0x01; /* Flow control on for HCI ACL Data Packets and off for HCI + SCO Data Packets in direction from Host Controller to + Host */ + physbusif_output(p, p->tot_len); + btpbuf_free(p); + + return ERR_OK; +} + +/*-----------------------------------------------------------------------------------*/ +/* hci_host_buffer_size(): + * + * Used by the Host to notify the Host Controller about the maximum size of the data + * portion of HCI ACL Data Packets sent from the Host Controller to the Host. + */ + /*-----------------------------------------------------------------------------------*/ +err_t hci_host_buffer_size(void) +{ + struct pbuf *p; + if((p = btpbuf_alloc(PBUF_RAW, HCI_H_BUF_SIZE_PLEN, PBUF_RAM)) == NULL) { + ERROR("hci_host_buffer_size: Could not allocate memory for pbuf\n"); + return ERR_MEM; + } + /* Assembling command packet */ + p = hci_cmd_ass(p, HCI_H_BUF_SIZE_OCF, HCI_HC_BB_OGF, HCI_H_BUF_SIZE_PLEN); + ((u16_t *)p->payload)[2] = htole16(HCI_HOST_ACL_MAX_LEN); /* Host ACL data packet maximum length */ + ((u8_t *)p->payload)[6] = 255; /* Host SCO Data Packet Length */ + *((u16_t *)(((u8_t *)p->payload)+7)) = htole16(HCI_HOST_MAX_NUM_ACL); /* Host max total num ACL data packets */ + ((u16_t *)p->payload)[4] = htole16(1); /* Host Total Num SCO Data Packets */ + physbusif_output(p, p->tot_len); + btpbuf_free(p); + + hci_dev->host_num_acl = HCI_HOST_MAX_NUM_ACL; + + return ERR_OK; +} + +/*-----------------------------------------------------------------------------------*/ +/* hci_host_num_comp_packets(): + * + * Used by the Host to indicate to the Host Controller the number of HCI Data Packets + * that have been completed for each Connection Handle since the previous + * Host_Number_Of_Completed_Packets command was sent to the Host Controller. + */ + /*-----------------------------------------------------------------------------------*/ +err_t hci_host_num_comp_packets(u16_t conhdl, u16_t num_complete) +{ + struct pbuf *p; + + if((p = btpbuf_alloc(PBUF_RAW, HCI_H_NUM_COMPL_PLEN, PBUF_RAM)) == NULL) { + ERROR("hci_host_num_comp_packets: Could not allocate memory for pbuf\n"); + return ERR_MEM; + } + /* Assembling command packet */ + p = hci_cmd_ass(p, HCI_H_NUM_COMPL_OCF, HCI_HC_BB_OGF, HCI_H_NUM_COMPL_PLEN); + ((u8_t*)p->payload)[4] = 1; + *(u16_t*)(p->payload+5) = htole16(conhdl); + *(u16_t*)(p->payload+7) = htole16(num_complete); /* Number of completed acl packets */ + + physbusif_output(p, p->tot_len); + btpbuf_free(p); + + hci_dev->host_num_acl += num_complete; + + return ERR_OK; +} + +/*-----------------------------------------------------------------------------------*/ +/* lp_pdu_maxsize(): + * + * Called by L2CAP to check the maxsize of the PDU. In this case it is the largest + * ACL packet that the Host Controller can buffer. + */ +/*-----------------------------------------------------------------------------------*/ +u16_t lp_pdu_maxsize() +{ + return hci_dev->acl_mtu; +} + +/*-----------------------------------------------------------------------------------*/ +/* lp_is_connected(): + * + * Called by L2CAP to check if an active ACL connection exists for the specified + * Bluetooth address. + */ +/*-----------------------------------------------------------------------------------*/ +u8_t lp_is_connected(struct bd_addr *bdaddr) +{ + struct hci_link *link; + + link = hci_get_link(bdaddr); + + if(link == NULL) { + return 0; + } + return 1; +} + +/*-----------------------------------------------------------------------------------*/ +/* lp_acl_write(): + * + * Called by L2CAP to send data to the Host Controller that will be transfered over + * the ACL link from there. + */ +/*-----------------------------------------------------------------------------------*/ +err_t lp_acl_write(struct bd_addr *bdaddr,struct pbuf *p,u16_t len,u8_t pb) +{ + u16_t connhdlpbbc; + struct hci_link *link; + struct hci_acl_hdr *aclhdr; + struct pbuf *q; + + link = hci_get_link(bdaddr); + if(link==NULL) { + ERROR("lp_acl_write: ACL connection does not exist\n"); + return ERR_CONN; + } + + if(hci_dev->acl_max_pkt==0) { + if(p != NULL) { + /* Packet can be queued? */ + if(link->p != NULL) { + LOG("lp_acl_write: Host buffer full. Dropped packet\n"); + return ERR_OK; /* Drop packet */ + } else { + /* Copy PBUF_REF referenced payloads into PBUF_RAM */ + p = btpbuf_take(p); + /* Remember pbuf to queue, if any */ + link->p = p; + link->len = len; + link->pb = pb; + /* Pbufs are queued, increase the reference count */ + btpbuf_ref(p); + LOG("lp_acl_write: Host queued packet %p\n", (void *)p); + } + } + } + + if((q=btpbuf_alloc(PBUF_RAW,HCI_ACL_HDR_LEN+1,PBUF_RAM))==NULL) { + ERROR("lp_acl_write: Could not allocate memory for pbuf\n"); + return ERR_MEM; + } + + btpbuf_chain(q,p); + ((u8_t*)q->payload)[0] = HCI_ACL_DATA_PACKET; + + aclhdr = (void*)((u8_t*)q->payload+1); + //aclhdr->connhdl_pb_bc = CONNPBBC(link->connhdl,pb,0); + connhdlpbbc = link->connhdl; /* Received from connection complete event */ + connhdlpbbc |= (pb<<12); /* Packet boundary flag */ + connhdlpbbc &= 0x3FFF; /* Point-to-point */ + aclhdr->connhdl_pb_bc = htole16(connhdlpbbc); + aclhdr->len = htole16(len); + + physbusif_output(q,(q->len+len)); + --hci_dev->acl_max_pkt; + + p = btpbuf_dechain(q); + btpbuf_free(q); + return ERR_OK; +} + +/*-----------------------------------------------------------------------------------*/ +/* lp_write_flush_timeout(): + * + * Called by L2CAP to set the flush timeout for the ACL link. + */ +/*-----------------------------------------------------------------------------------*/ +err_t lp_write_flush_timeout(struct bd_addr *bdaddr, u16_t flushto) +{ + struct hci_link *link; + struct pbuf *p; + + /* Check if an ACL connection exists */ + link = hci_get_link(bdaddr); + + if(link == NULL) { + ERROR("lp_write_flush_timeout: ACL connection does not exist\n"); + return ERR_CONN; + } + + if((p = btpbuf_alloc(PBUF_TRANSPORT, HCI_W_FLUSHTO_PLEN, PBUF_RAM)) == NULL) { /* Alloc len of packet */ + ERROR("lp_write_flush_timeout: Could not allocate memory for pbuf\n"); + return ERR_MEM; + } + + /* Assembling command packet */ + p = hci_cmd_ass(p, HCI_W_FLUSHTO, HCI_HC_BB_OGF, HCI_W_FLUSHTO_PLEN); + /* Assembling cmd prameters */ + ((u16_t *)p->payload)[2] = htole16(link->connhdl); + ((u16_t *)p->payload)[3] = htole16(flushto); + + physbusif_output(p, p->tot_len); + btpbuf_free(p); + return ERR_OK; +} + +/*-----------------------------------------------------------------------------------*/ +/* lp_connect_req(): + * + * Called by L2CAP to cause the Link Manager to create a connection to the + * Bluetooth device with the BD_ADDR specified by the command parameters. + */ +/*-----------------------------------------------------------------------------------*/ +err_t lp_connect_req(struct bd_addr *bdaddr, u8_t allow_role_switch) +{ + u8_t page_scan_repetition_mode, page_scan_mode; + u16_t clock_offset; + struct pbuf *p; + struct hci_link *link = hci_new(); + struct hci_inq_res *inqres; + + if(link == NULL) { + ERROR("lp_connect_req: Could not allocate memory for link\n"); + return ERR_MEM; /* Could not allocate memory for link */ + } + + bd_addr_set(&(link->bdaddr), bdaddr); + HCI_REG(&(hci_active_links), link); + + + /* Check if module has been discovered in a recent inquiry */ + for(inqres = hci_dev->ires; inqres != NULL; inqres = inqres->next) { + if(bd_addr_cmp(&inqres->bdaddr, bdaddr)) { + page_scan_repetition_mode = inqres->psrm; + page_scan_mode = inqres->psm; + clock_offset = inqres->co; + break; + } + } + if(inqres == NULL) { + /* No information on parameters from an inquiry. Using default values */ + page_scan_repetition_mode = 0x01; /* Assuming worst case: time between + successive page scans starting + <= 2.56s */ + page_scan_mode = 0x00; /* Assumes the device uses mandatory scanning, most + devices use this. If no conn is established, try + again w this parm set to optional page scanning */ + clock_offset = 0x00; /* If the device was not found in a recent inquiry + this information is irrelevant */ + } + + if((p = btpbuf_alloc(PBUF_RAW, HCI_CREATE_CONN_PLEN, PBUF_RAM)) == NULL) { + ERROR("lp_connect_req: Could not allocate memory for pbuf\n"); + return ERR_MEM; /* Could not allocate memory for pbuf */ + } + + /* Assembling command packet */ + p = hci_cmd_ass(p, HCI_CREATE_CONN_OCF, HCI_LINK_CTRL_OGF, HCI_CREATE_CONN_PLEN); + /* Assembling cmd prameters */ + memcpy(((u8_t *)p->payload)+4, bdaddr->addr, 6); + ((u16_t *)p->payload)[5] = htole16(hci_dev->pkt_type); + ((u8_t *)p->payload)[12] = page_scan_repetition_mode; + ((u8_t *)p->payload)[13] = page_scan_mode; + ((u16_t *)p->payload)[7] = htole16(clock_offset); + ((u8_t *)p->payload)[16] = allow_role_switch; + + physbusif_output(p, p->tot_len); + btpbuf_free(p); + + return ERR_OK; +} + +static void hci_cc_info_param(u8_t ocf,struct pbuf *p) +{ + struct bd_addr *bdaddr; + + switch(ocf) { + case HCI_READ_LOCAL_VERSION: + if(((u8_t*)p->payload)[0]==HCI_SUCCESS) { + hci_dev->info.hci_version = *((u8_t*)p->payload + 1); + hci_dev->info.hci_revision = le16toh(*(u16_t*)((u8_t*)p->payload + 2)); + hci_dev->info.lmp_version = *((u8_t*)p->payload + 4); + hci_dev->info.manufacturer = le16toh(*(u16_t*)((u8_t*)p->payload + 5)); + hci_dev->info.lmp_subversion = le16toh(*(u16_t*)((u8_t*)p->payload + 7)); + LOG("hci_cc_info_param(HCI_READ_LOCAL_VERSION): hci_version = %02x, hci_revision = %04x, lmp_version = %02x, manufacturer = %04x, lmp_suversion = %04x\n",hci_dev->info.hci_version,hci_dev->info.hci_revision,hci_dev->info.lmp_version,hci_dev->info.manufacturer,hci_dev->info.lmp_subversion); + } + break; + case HCI_READ_LOCAL_FEATURES: + if(((u8_t*)p->payload)[0]==HCI_SUCCESS) { + memcpy(hci_dev->features,(void*)((u8_t*)p->payload+1),sizeof(hci_dev->features)); + + if(hci_dev->features[0]&LMP_3SLOT) + hci_dev->pkt_type |= (HCI_DM3|HCI_DH3); + if(hci_dev->features[0]&LMP_5SLOT) + hci_dev->pkt_type |= (HCI_DM5|HCI_DH5); + if(hci_dev->features[1]&LMP_HV2) + hci_dev->pkt_type |= HCI_HV2; + if(hci_dev->features[1]&LMP_HV3) + hci_dev->pkt_type |= HCI_HV3; + LOG("hci_cc_info_param(HCI_READ_LOCAL_FEATURES): %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n",hci_dev->features[0],hci_dev->features[1],hci_dev->features[2],hci_dev->features[3], + hci_dev->features[4],hci_dev->features[5],hci_dev->features[6],hci_dev->features[7]); + } + break; + case HCI_READ_BUFFER_SIZE: + if(((u8_t*)p->payload)[0]==HCI_SUCCESS) { + hci_dev->acl_mtu = le16toh(*(u16_t*)(((u8_t*)p->payload)+1)); + hci_dev->sco_mtu = *((u8_t*)p->payload+3); + hci_dev->acl_max_pkt = le16toh(*(u16_t*)(((u8_t*)p->payload)+4)); + hci_dev->sco_max_pkt = le16toh(*(u16_t*)(((u8_t*)p->payload)+5)); + LOG("hci_cc_info_param(HCI_READ_BUFFER_SIZE): acl_mt = %d, sco_mt = %d, acl_max_pkt = %d, sco_max_pkt = %d\n",hci_dev->acl_mtu,hci_dev->sco_mtu,hci_dev->acl_max_pkt,hci_dev->sco_max_pkt); + } + break; + case HCI_READ_BD_ADDR: + if(((u8_t*)p->payload)[0]==HCI_SUCCESS) { + bdaddr = (void*)((u8_t*)p->payload+1); + LOG("hci_cc_info_param(HCI_READ_BD_ADDR): %02x:%02x:%02x:%02x:%02x:%02x",bdaddr->addr[0],bdaddr->addr[1],bdaddr->addr[2],bdaddr->addr[3],bdaddr->addr[4],bdaddr->addr[5]); + bd_addr_set(&(hci_dev->bdaddr),bdaddr); + } + break; + } +} + +static void hci_cc_host_ctrl(u8_t ocf,struct pbuf *p) +{ + u8_t *lap; + u8_t i,resp_off; + + //printf("hci_cc_host_ctrl(%02x)\n",ocf); + switch(ocf) { + case HCI_SET_HC_TO_H_FC: + if(((u8_t*)p->payload)[0]==HCI_SUCCESS) hci_dev->flow = 1; + break; + case HCI_READ_CUR_IACLAP: + if(((u8_t*)p->payload)[0]==HCI_SUCCESS) { + for(i=0;i<((u8_t*)p->payload)[1];i++) { + resp_off = (i*3); + lap = (void*)(((u8_t*)p->payload)+(2+resp_off)); + printf("lap = 00%02x%02x%02x\n",lap[2],lap[1],lap[0]); + } + } + break; + } +} + +static void hci_cc_link_policy(u8_t ocf,struct pbuf *p) +{ + err_t ret; + struct hci_link *link; + + (void)ret; + + switch(ocf) { + case HCI_W_LINK_POLICY: + if(((u8_t*)p->payload)[0]==HCI_SUCCESS) { + for(link=hci_active_links;link!=NULL;link=link->next) { + if(link->connhdl==le16toh(*((u16_t*)(((u8_t*)p->payload)+1)))) break; + } + if(link==NULL) { + LOG("hci_cc_link_policy: Connection does not exist\n"); + break; + } + HCI_EVENT_WLP_COMPLETE(hci_dev,&link->bdaddr,ret); + } else { + LOG("Unsuccessful HCI_W_LINK_POLICY.\n"); + } + break; + } +} + +static void hci_conn_request_evt(struct pbuf *p) +{ + u8_t *cod; + u8_t link_type; + err_t ret = ERR_OK; + struct bd_addr *bdaddr; + struct hci_link *link; + + LOG("hci_conn_request_evt()\n"); + bdaddr = (void*)((u8_t*)p->payload); + cod = (((u8_t*)p->payload)+6); + link_type = *(((u8_t*)p->payload)+9); + + HCI_EVENT_CONN_REQ(hci_dev,bdaddr,cod,link_type,ret); + if(ret==ERR_OK) { + link = hci_get_link(bdaddr); + if(link==NULL) { + if((link=hci_new())==NULL) { + ERROR("hci_conn_request_evt: Could not allocate memory for link. Disconnect\n"); + return; + } + + bd_addr_set(&(link->bdaddr),bdaddr); + HCI_REG(&(hci_active_links),link); + } + hci_accecpt_conn_request(bdaddr,0x00); + } else { + } +} + +static void hci_conn_complete_evt(struct pbuf *p) +{ + err_t ret; + struct bd_addr *bdaddr; + struct hci_link *link; + + (void)ret; + + bdaddr = (void*)(((u8_t*)p->payload)+3); + link = hci_get_link(bdaddr); + LOG("hci_conn_complete_evt(%p,%02x - %02x:%02x:%02x:%02x:%02x:%02x)\n",link,((u8_t*)p->payload)[0],bdaddr->addr[0],bdaddr->addr[1],bdaddr->addr[2],bdaddr->addr[3],bdaddr->addr[4],bdaddr->addr[5]); + switch(((u8_t*)p->payload)[0]) { + case HCI_SUCCESS: + if(link==NULL) { + if((link=hci_new())==NULL) { + ERROR("hci_conn_complete_evt: Could not allocate memory for link. Disconnect\n"); + hci_disconnect(bdaddr, HCI_OTHER_END_TERMINATED_CONN_LOW_RESOURCES); + lp_disconnect_ind(bdaddr,HCI_CONN_TERMINATED_BY_LOCAL_HOST); + break; + } + bd_addr_set(&(link->bdaddr),bdaddr); + link->connhdl = le16toh(*((u16_t*)(((u8_t*)p->payload)+1))); + HCI_REG(&(hci_active_links),link); + HCI_EVENT_CONN_COMPLETE(hci_dev,bdaddr,ret); + lp_connect_ind(&(link->bdaddr)); + } else { + link->connhdl = le16toh(*((u16_t*)(((u8_t*)p->payload)+1))); + HCI_EVENT_CONN_COMPLETE(hci_dev,bdaddr,ret); + lp_connect_cfm(&(link->bdaddr),((u8_t*)p->payload)[10],ERR_OK); + } + break; + case HCI_PAGE_TIMEOUT: + break; + default: + if(link!=NULL) { + hci_close(link); + lp_connect_cfm(bdaddr,((u8_t*)p->payload)[10],ERR_CONN); + } + break; + } +} + +static void hci_inquiry_result_evt(struct pbuf *p) +{ + u8_t num_resp; + u32_t i,resp_off; + struct bd_addr *bdaddr; + struct hci_inq_res *ires; + + num_resp = ((u8_t*)p->payload)[0]; + //printf("hci_inquriy_result_evt(%d)\n",num_resp); + for(i=0;ipayload)+(1+resp_off)); + if((ires=btmemb_alloc(&hci_inq_results))!=NULL) { + bd_addr_set(&(ires->bdaddr),bdaddr); + ires->psrm = ((u8_t*)p->payload)[7+resp_off]; + ires->psm = ((u8_t*)p->payload)[8+resp_off]; + memcpy(ires->cod,((u8_t*)p->payload)+10+resp_off,3); + ires->co = le16toh(*((u16_t*)(((u8_t*)p->payload)+13+resp_off))); + ires->next = NULL; + + HCI_REG(&(hci_dev->ires),ires); + } else + ERROR("hci_inquriy_result_evt: Could not allocate memory for inquiry result\n"); + } + +} + +static void hci_return_link_key_evt(struct pbuf *p) +{ + u8_t num_keys; + u32_t i,resp_off; + struct bd_addr *bdaddr; + struct hci_link_key *keyres; + + num_keys = ((u8_t*)p->payload)[0]; + //printf("hci_return_link_key_evt(%d)\n",num_keys); + for(i=0;ipayload)+1+resp_off); + if((keyres=btmemb_alloc(&hci_link_key_results))!=NULL) { + bd_addr_set(&(keyres->bdaddr),bdaddr); + memcpy(keyres->key,((u8_t*)p->payload)+7+resp_off,16); + keyres->next = NULL; + + //printf("link key evt: %02x:%02x:%02x:%02x:%02x:%02x\n",bdaddr->addr[0],bdaddr->addr[1],bdaddr->addr[2],bdaddr->addr[3],bdaddr->addr[4],bdaddr->addr[5]); + HCI_REG(&(hci_dev->keyres),keyres); + } else + ERROR("hci_return_link_key_evt: Could not allocate memory for link key result\n"); + } + +} + +void hci_event_handler(struct pbuf *p) +{ + err_t ret; + u8_t i,resp_off; + u16_t ogf,ocf,opc; + u16_t connhdl; + struct pbuf *q; + struct hci_link *link; + struct bd_addr *bdaddr; + struct hci_evt_hdr *evthdr; + + (void)ret; + + evthdr = p->payload; + btpbuf_header(p,-HCI_EVENT_HDR_LEN); + + switch(evthdr->code) { + case HCI_INQUIRY_COMPLETE: + //printf("HCI_INQUIRY_COMPLETE\n"); + HCI_EVENT_INQ_COMPLETE(hci_dev,((u8_t*)p->payload)[0],ret); + break; + case HCI_INQUIRY_RESULT: + hci_inquiry_result_evt(p); + break; + case HCI_CONNECTION_COMPLETE: + hci_conn_complete_evt(p); + break; + case HCI_CONNECTION_REQUEST: + hci_conn_request_evt(p); + break; + case HCI_DISCONNECTION_COMPLETE: + switch(((u8_t*)p->payload)[0]) { + case HCI_SUCCESS: + for(link=hci_active_links;link!=NULL;link=link->next) { + if(link->connhdl==le16toh(*((u16_t*)(((u8_t*)p->payload)+1)))) break; + } + if(link!=NULL) { + lp_disconnect_ind(&(link->bdaddr),((u8_t*)p->payload)[3]); + hci_close(link); + } + break; + default: + return; + } + break; + case HCI_ENCRYPTION_CHANGE: + break; + case HCI_QOS_SETUP_COMPLETE: + break; + case HCI_COMMAND_COMPLETE: + hci_dev->num_cmd += ((u8_t*)p->payload)[0]; + btpbuf_header(p,-1); + + opc = le16toh(((u16_t*)p->payload)[0]); + ocf = (opc&0x03ff); + ogf = (opc>>10); + btpbuf_header(p,-2); + + switch(ogf) { + case HCI_INFO_PARAM: + hci_cc_info_param(ocf,p); + break; + case HCI_HOST_C_N_BB: + hci_cc_host_ctrl(ocf,p); + break; + case HCI_LINK_POLICY: + hci_cc_link_policy(ocf,p); + break; + } + HCI_EVENT_CMD_COMPLETE(hci_dev,ogf,ocf,((u8_t*)p->payload)[0],ret); + break; + case HCI_COMMAND_STATUS: + if(((u8_t*)p->payload)[0]!=HCI_SUCCESS) { + btpbuf_header(p,-2); + + opc = le16toh(((u16_t*)p->payload)[0]); + ocf = (opc&0x03ff); + ogf = (opc>>10); + btpbuf_header(p,-2); + + HCI_EVENT_CMD_COMPLETE(hci_dev,ogf,ocf,((u8_t*)p->payload)[0],ret); + btpbuf_header(p,4); + } + hci_dev->num_cmd += ((u8_t*)p->payload)[1]; + break; + case HCI_HARDWARE_ERROR: + //TODO: IS THIS FATAL?? + break; + case HCI_ROLE_CHANGE: + break; + case HCI_NBR_OF_COMPLETED_PACKETS: + for(i=0;i<((u8_t *)p->payload)[0];i++) { + resp_off = i*4; + hci_dev->acl_max_pkt += le16toh(*((u16_t *)(((u8_t *)p->payload) + 3 + resp_off))); + connhdl = le16toh(*((u16_t *)(((u8_t *)p->payload) + 1 + resp_off))); + + for(link = hci_active_links; link != NULL; link = link->next) { + if(link->connhdl == connhdl) break; + } + + q = link == NULL ? NULL : link->p; + /* Queued packet present? */ + if (q != NULL) { + /* NULL attached buffer immediately */ + link->p = NULL; + /* Send the queued packet */ + lp_acl_write(&link->bdaddr, q, link->len, link->pb); + /* Free the queued packet */ + btpbuf_free(q); + } + } + break; + case HCI_MODE_CHANGE: + printf("HCI_MODE_CHANGE\n"); + break; + case HCI_DATA_BUFFER_OVERFLOW: + //TODO: IS THIS FATAL???? + break; + case HCI_MAX_SLOTS_CHANGE: + break; + case HCI_RETURN_LINK_KEYS: + hci_return_link_key_evt(p); + break; + case HCI_PIN_CODE_REQUEST: + bdaddr = (void *)((u8_t *)p->payload); /* Get the Bluetooth address */ + HCI_EVENT_PIN_REQ(hci_dev, bdaddr, ret); /* Notify application. If event is not registered, + send a negative reply */ + break; + case HCI_LINK_KEY_REQUEST: + bdaddr = (void *)((u8_t *)p->payload); /* Get the Bluetooth address */ + HCI_EVENT_LINK_KEY_REQ(hci_dev, bdaddr, ret); + break; + case HCI_LINK_KEY_NOTIFICATION: + bdaddr = (void *)((u8_t *)p->payload); /* Get the Bluetooth address */ + + HCI_EVENT_LINK_KEY_NOT(hci_dev, bdaddr, ((u8_t *)p->payload) + 6, ret); /* Notify application.*/ + break; + default: + LOG("hci_event_input: Undefined event code 0x%x\n", evthdr->code); + break; + } +} + +void hci_acldata_handler(struct pbuf *p) +{ + struct hci_acl_hdr *aclhdr; + struct hci_link *link; + u16_t conhdl; + + aclhdr = p->payload; + btpbuf_header(p, -HCI_ACL_HDR_LEN); + + conhdl = le16toh(aclhdr->connhdl_pb_bc) & 0x0FFF; /* Get the connection handle from the first + 12 bits */ + if(hci_dev->flow) { + //TODO: XXX??? DO WE SAVE NUMACL PACKETS COMPLETED IN LINKS LIST?? SHOULD WE CALL + //hci_host_num_comp_packets from the main loop when no data has been received from the + //serial port??? + --hci_dev->host_num_acl; + if(hci_dev->host_num_acl == 0) { + hci_host_num_comp_packets(conhdl, HCI_HOST_MAX_NUM_ACL); + hci_dev->host_num_acl = HCI_HOST_MAX_NUM_ACL; + } + } + + for(link = hci_active_links; link != NULL; link = link->next) { + if(link->connhdl == conhdl) { + break; + } + } + + if(link != NULL) { + if(le16toh(aclhdr->len)) { + //LOG("hci_acl_input: Forward ACL packet to higher layer p->tot_len = %d\n", p->tot_len); + l2cap_input(p, &(link->bdaddr)); + } else { + btpbuf_free(p); /* If length of ACL packet is zero, we silently discard it */ + } + } else { + btpbuf_free(p); /* If no acitve ACL link was found, we silently discard the packet */ + } +} diff --git a/wii/libogc/lwbt/hci.h b/wii/libogc/lwbt/hci.h new file mode 100644 index 0000000000..3a3a98cf61 --- /dev/null +++ b/wii/libogc/lwbt/hci.h @@ -0,0 +1,482 @@ +#ifndef __HCI_H__ +#define __HCI_H__ + +#include "bt.h" +#include "bd_addr.h" + +/* HCI packet indicators */ +#define HCI_COMMAND_DATA_PACKET 0x01 +#define HCI_ACL_DATA_PACKET 0x02 +#define HCI_SCO_DATA_PACKET 0x03 +#define HCI_EVENT_PACKET 0x04 +#define HCI_VENDOR_PACKET 0xff + +/* HCI packet types */ +#define HCI_DM1 0x0008 +#define HCI_DM3 0x0400 +#define HCI_DM5 0x4000 +#define HCI_DH1 0x0010 +#define HCI_DH3 0x0800 +#define HCI_DH5 0x8000 + +#define HCI_HV1 0x0020 +#define HCI_HV2 0x0040 +#define HCI_HV3 0x0080 + +#define SCO_PTYPE_MASK (HCI_HV1 | HCI_HV2 | HCI_HV3) +#define ACL_PTYPE_MASK (~SCO_PTYPE_MASK) + +#define HCI_EVENT_HDR_LEN 2 +#define HCI_ACL_HDR_LEN 4 +#define HCI_SCO_HDR_LEN 3 +#define HCI_CMD_HDR_LEN 3 + +/* LMP features */ +#define LMP_3SLOT 0x01 +#define LMP_5SLOT 0x02 +#define LMP_ENCRYPT 0x04 +#define LMP_SOFFSET 0x08 +#define LMP_TACCURACY 0x10 +#define LMP_RSWITCH 0x20 +#define LMP_HOLD 0x40 +#define LMP_SNIFF 0x80 + +#define LMP_PARK 0x01 +#define LMP_RSSI 0x02 +#define LMP_QUALITY 0x04 +#define LMP_SCO 0x08 +#define LMP_HV2 0x10 +#define LMP_HV3 0x20 +#define LMP_ULAW 0x40 +#define LMP_ALAW 0x80 + +#define LMP_CVSD 0x01 +#define LMP_PSCHEME 0x02 +#define LMP_PCONTROL 0x04 + +/* Opcode Group Field (OGF) values */ +#define HCI_LINK_CONTROL 0x01 /* Link Control Commands */ +#define HCI_LINK_POLICY 0x02 /* Link Policy Commands */ +#define HCI_HOST_C_N_BB 0x03 /* Host Controller & Baseband Commands */ +#define HCI_INFO_PARAM 0x04 /* Informational Parameters */ +#define HCI_STATUS_PARAM 0x05 /* Status Parameters */ +#define HCI_TESTING 0x06 /* Testing Commands */ + +/* Opcode Command Field (OCF) values */ + +/* Link control commands */ +#define HCI_INQUIRY 0x01 +#define HCI_PERIODIC_INQUIRY 0x03 +#define HCI_CREATE_CONNECTION 0x05 +#define HCI_REJECT_CONNECTION_REQUEST 0x0A +#define HCI_DISCONNECT 0x06 +#define HCI_PIN_CODE_REQ_REP 0x0D +#define HCI_PIN_CODE_REQ_NEG_REP 0x0E +#define HCI_LINK_KEY_REQ_REP 0x0B +#define HCI_LINK_KEY_REQ_REP_NEG 0x0C +#define HCI_SET_CONN_ENCRYPT 0x13 + +/* Link Policy commands */ +#define HCI_HOLD_MODE 0x01 +#define HCI_SNIFF_MODE 0x03 +#define HCI_EXIT_SNIFF_MODE 0x04 +#define HCI_PARK_MODE 0x05 +#define HCI_EXIT_PARK_MODE 0x06 +#define HCI_W_LINK_POLICY 0x0D + +/* Host-Controller and Baseband Commands */ +#define HCI_SET_EVENT_MASK 0x01 +#define HCI_RESET 0x03 +#define HCI_SET_EVENT_FILTER 0x05 +#define HCI_WRITE_STORED_LINK_KEY 0x11 +#define HCI_ROLE_CHANGE 0x12 +#define HCI_WRITE_LOCAL_NAME 0x13 + +#define HCI_WRITE_PAGE_TIMEOUT 0x18 +#define HCI_WRITE_SCAN_ENABLE 0x1A +#define HCI_WRITE_COD 0x24 +#define HCI_W_FLUSHTO 0x28 +#define HCI_SET_HC_TO_H_FC 0x31 +#define HCI_READ_CUR_IACLAP 0x39 +#define HCI_WRITE_PIN_TYPE 0x0A +#define HCI_R_STORED_LINK_KEY 0x0D +#define HCI_HOST_BUF_SIZE 0x33 +#define HCI_WRITE_INQUIRY_SCAN_TYPE 0x43 +#define HCI_WRITE_INQUIRY_MODE 0x45 +#define HCI_WRITE_PAGE_SCAN_TYPE 0x47 + +/* Informational Parameters */ +#define HCI_READ_LOCAL_VERSION 0x01 +#define HCI_READ_LOCAL_FEATURES 0x03 +#define HCI_READ_BUFFER_SIZE 0x05 +#define HCI_READ_BD_ADDR 0x09 + +/* Status Parameters */ +#define HCI_READ_FAILED_CONTACT_COUNTER 0x01 +#define HCI_RESET_FAILED_CONTACT_COUNTER 0x02 +#define HCI_GET_LINK_QUALITY 0x03 +#define HCI_READ_RSSI 0x05 + +/* Testing commands */ + +/* Possible event codes */ +#define HCI_INQUIRY_COMPLETE 0x01 +#define HCI_INQUIRY_RESULT 0x02 +#define HCI_CONNECTION_COMPLETE 0x03 +#define HCI_CONNECTION_REQUEST 0x04 +#define HCI_DISCONNECTION_COMPLETE 0x05 +#define HCI_ENCRYPTION_CHANGE 0x08 +#define HCI_QOS_SETUP_COMPLETE 0x0D +#define HCI_COMMAND_COMPLETE 0x0E +#define HCI_COMMAND_STATUS 0x0F +#define HCI_HARDWARE_ERROR 0x10 +#define HCI_ROLE_CHANGE 0x12 +#define HCI_NBR_OF_COMPLETED_PACKETS 0x13 +#define HCI_MODE_CHANGE 0x14 +#define HCI_RETURN_LINK_KEYS 0x15 +#define HCI_PIN_CODE_REQUEST 0x16 +#define HCI_LINK_KEY_REQUEST 0x17 +#define HCI_LINK_KEY_NOTIFICATION 0x18 +#define HCI_DATA_BUFFER_OVERFLOW 0x1A +#define HCI_MAX_SLOTS_CHANGE 0x1B + +/* Success code */ +#define HCI_SUCCESS 0x00 +/* Possible error codes */ +#define HCI_UNKNOWN_HCI_COMMAND 0x01 +#define HCI_NO_CONNECTION 0x02 +#define HCI_HW_FAILURE 0x03 +#define HCI_PAGE_TIMEOUT 0x04 +#define HCI_AUTHENTICATION_FAILURE 0x05 +#define HCI_KEY_MISSING 0x06 +#define HCI_MEMORY_FULL 0x07 +#define HCI_CONN_TIMEOUT 0x08 +#define HCI_MAX_NUMBER_OF_CONNECTIONS 0x09 +#define HCI_MAX_NUMBER_OF_SCO_CONNECTIONS_TO_DEVICE 0x0A +#define HCI_ACL_CONNECTION_EXISTS 0x0B +#define HCI_COMMAND_DISSALLOWED 0x0C +#define HCI_HOST_REJECTED_DUE_TO_LIMITED_RESOURCES 0x0D +#define HCI_HOST_REJECTED_DUE_TO_SECURITY_REASONS 0x0E +#define HCI_HOST_REJECTED_DUE_TO_REMOTE_DEVICE_ONLY_PERSONAL_SERVICE 0x0F +#define HCI_HOST_TIMEOUT 0x10 +#define HCI_UNSUPPORTED_FEATURE_OR_PARAMETER_VALUE 0x11 +#define HCI_INVALID_HCI_COMMAND_PARAMETERS 0x12 +#define HCI_OTHER_END_TERMINATED_CONN_USER_ENDED 0x13 +#define HCI_OTHER_END_TERMINATED_CONN_LOW_RESOURCES 0x14 +#define HCI_OTHER_END_TERMINATED_CONN_ABOUT_TO_POWER_OFF 0x15 +#define HCI_CONN_TERMINATED_BY_LOCAL_HOST 0x16 +#define HCI_REPETED_ATTEMPTS 0x17 +#define HCI_PAIRING_NOT_ALLOWED 0x18 +#define HCI_UNKNOWN_LMP_PDU 0x19 +#define HCI_UNSUPPORTED_REMOTE_FEATURE 0x1A +#define HCI_SCO_OFFSET_REJECTED 0x1B +#define HCI_SCO_INTERVAL_REJECTED 0x1C +#define HCI_SCO_AIR_MODE_REJECTED 0x1D +#define HCI_INVALID_LMP_PARAMETERS 0x1E +#define HCI_UNSPECIFIED_ERROR 0x1F +#define HCI_UNSUPPORTED_LMP_PARAMETER_VALUE 0x20 +#define HCI_ROLE_CHANGE_NOT_ALLOWED 0x21 +#define HCI_LMP_RESPONSE_TIMEOUT 0x22 +#define HCI_LMP_ERROR_TRANSACTION_COLLISION 0x23 +#define HCI_LMP_PDU_NOT_ALLOWED 0x24 +#define HCI_ENCRYPTION_MODE_NOT_ACCEPTABLE 0x25 +#define HCI_UNIT_KEY_USED 0x26 +#define HCI_QOS_NOT_SUPPORTED 0x27 +#define HCI_INSTANT_PASSED 0x28 +#define HCI_PAIRING_UNIT_KEY_NOT_SUPPORTED 0x29 + +/* Specification specific parameters */ +#define HCI_BD_ADDR_LEN 6 +#define HCI_LMP_FEATURES_LEN 8 +#define HCI_LINK_KEY_LEN 16 +#define HCI_LMP_FEAT_LEN 8 + +/* Command OGF */ +#define HCI_LINK_CTRL_OGF 0x01 /* Link ctrl cmds */ +#define HCI_LINK_POLICY_OGF 0x02 /* Link Policy Commands */ +#define HCI_HC_BB_OGF 0x03 /* Host controller and baseband commands */ +#define HCI_INFO_PARAM_OGF 0x04 /* Informal parameters */ + +/* Command OCF */ +#define HCI_INQUIRY_OCF 0x01 +#define HCI_SNIFF_MODE_OCF 0x03 +#define HCI_EXIT_SNIFF_MODE_OCF 0x04 +#define HCI_PARK_MODE_OCF 0x05 +#define HCI_EXIT_PARK_MODE_OCF 0x06 +#define HCI_PERIODIC_INQUIRY_OCF 0x03 +#define HCI_EXIT_PERIODIC_INQUIRY_OCF 0x04 +#define HCI_CREATE_CONN_OCF 0x05 +#define HCI_DISCONN_OCF 0x06 +#define HCI_W_LOCAL_NAME_OCF 0x13 +#define HCI_W_LINK_POLICY_OCF 0x0D +#define HCI_ACCEPT_CONN_REQ_OCF 0x09 +#define HCI_REJECT_CONN_REQ_OCF 0x0A +#define HCI_SET_EV_MASK_OCF 0x01 +#define HCI_RESET_OCF 0x03 +#define HCI_SET_EV_FILTER_OCF 0x05 +#define HCI_R_STORED_LINK_KEY_OCF 0x0D +#define HCI_W_PAGE_TIMEOUT_OCF 0x18 +#define HCI_W_SCAN_EN_OCF 0x1A +#define HCI_R_COD_OCF 0x23 +#define HCI_W_COD_OCF 0x24 +#define HCI_SET_HC_TO_H_FC_OCF 0x31 +#define HCI_H_BUF_SIZE_OCF 0x33 +#define HCI_H_NUM_COMPL_OCF 0x35 +#define HCI_R_CUR_IACLAP_OCF 0x39 +#define HCI_R_LOC_VERSION_OCF 0x01 +#define HCI_R_LOC_FEATURES_OCF 0x03 +#define HCI_R_BUF_SIZE_OCF 0x05 +#define HCI_R_BD_ADDR_OCF 0x09 +#define HCI_R_REMOTE_NAME_OCF 0x19 +#define HCI_W_PIN_TYPE_OCF 0x0A +#define HCI_W_INQUIRY_SCAN_TYPE_OCF 0x43 +#define HCI_W_INQUIRY_MODE_OCF 0x45 +#define HCI_W_PAGE_SCAN_TYPE_OCF 0x47 +#define HCI_W_PAGE_SCAN_TYPE_OCF 0x47 + +/* Command packet length (including ACL header)*/ +#define HCI_INQUIRY_PLEN 9 +#define HCI_PERIODIC_INQUIRY_PLEN 13 +#define HCI_EXIT_PERIODIC_INQUIRY_PLEN 4 +#define HCI_CREATE_CONN_PLEN 17 +#define HCI_DISCONN_PLEN 7 +#define HCI_REJECT_CONN_REQ_PLEN 11 +#define HCI_ACCEPT_CONN_REQ_PLEN 11 +#define HCI_PIN_CODE_REQ_REP_PLEN 27 +#define HCI_PIN_CODE_REQ_NEG_REP_PLEN 10 +#define HCI_LINK_KEY_REQ_REP_PLEN 26 +#define HCI_LINK_KEY_REQ_REP_NEG_PLEN 10 +#define HCI_SET_CONN_ENCRYPT_PLEN 7 +#define HCI_WRITE_STORED_LINK_KEY_PLEN 27 +#define HCI_SET_EV_MASK_PLEN 12 +#define HCI_SNIFF_PLEN 14 +#define HCI_W_LINK_POLICY_PLEN 8 +#define HCI_RESET_PLEN 4 +#define HCI_SET_EV_FILTER_PLEN 6 +#define HCI_W_PAGE_TIMEOUT_PLEN 6 +#define HCI_W_SCAN_EN_PLEN 5 +#define HCI_R_COD_PLEN 4 +#define HCI_W_COD_PLEN 7 +#define HCI_W_FLUSHTO_PLEN 8 +#define HCI_W_LOCAL_NAME_PLEN 252 +#define HCI_SET_HC_TO_H_FC_PLEN 5 +#define HCI_H_BUF_SIZE_PLEN 11 +#define HCI_H_NUM_COMPL_PLEN 9 +#define HCI_R_LOC_FEAT_SIZE_PLEN 4 +#define HCI_R_LOC_VERS_SIZE_PLEN 4 +#define HCI_R_BUF_SIZE_PLEN 4 +#define HCI_R_BD_ADDR_PLEN 4 +#define HCI_R_CUR_IACLAP_PLEN 4 +#define HCI_R_STORED_LINK_KEY_PLEN 11 +#define HCI_R_REMOTE_NAME_PLEN 14 +#define HCI_W_PIN_TYPE_PLEN 5 +#define HCI_W_INQUIRY_MODE_PLEN 5 +#define HCI_W_INQUIRY_SCAN_TYPE_PLEN 5 +#define HCI_W_PAGE_SCAN_TYPE_PLEN 5 +#define HCI_W_VENDOR_CMD_PLEN 4 + +struct hci_evt_hdr +{ + u8_t code; + u8_t len; +} ATTRIBUTE_PACKED; + +struct hci_acl_hdr +{ + u16_t connhdl_pb_bc; + u16_t len; +} ATTRIBUTE_PACKED; + +struct hci_inq_res +{ + struct hci_inq_res *next; + struct bd_addr bdaddr; + u8_t cod[3]; + u8_t psrm; + u8_t psm; + u16_t co; +}; + +struct hci_link_key +{ + struct bd_addr bdaddr; + u8_t key[16]; + + struct hci_link_key *next; +}; + +struct hci_link +{ + struct hci_link *next; + struct bd_addr bdaddr; + u16_t connhdl; + struct pbuf *p; + u16_t len; + u8_t pb; + u32_t link_mode; +}; + +struct hci_version_info +{ + u8_t hci_version; + u16_t hci_revision; + u8_t lmp_version; + u16_t manufacturer; + u16_t lmp_subversion; +}; + +struct hci_pcb +{ + void *cbarg; + s8_t num_cmd; + + u16_t acl_mtu; + u8_t sco_mtu; + u16_t acl_max_pkt; + u16_t sco_max_pkt; + + u32_t flags; + + u8_t flow; + u16_t host_num_acl; + + u16_t pkt_type; + u8_t features[8]; + + struct bd_addr bdaddr; + struct hci_version_info info; + + struct hci_inq_res *ires; + struct hci_link_key *keyres; + + err_t (*pin_req)(void *arg,struct bd_addr *bdaddr); + err_t (*link_key_req)(void *arg,struct bd_addr *bdaddr); + err_t (*cmd_complete)(void *arg,struct hci_pcb *pcb,u8_t ogf,u8_t ocf,u8_t result); + err_t (*link_key_not)(void *arg, struct bd_addr *bdaddr, u8_t *key); + err_t (*conn_complete)(void *arg,struct bd_addr *bdaddr); + err_t (*inq_complete)(void *arg,struct hci_pcb *pcb,struct hci_inq_res *ires,u16_t result); + err_t (*wlp_complete)(void *arg, struct bd_addr *bdaddr); + err_t (*conn_req)(void *arg,struct bd_addr *bdaddr,u8_t *cod,u8_t link_type); +}; + +err_t hci_init(void); +struct hci_link* hci_new(void); +void hci_reset_all(void); +void hci_event_handler(struct pbuf *p); +void hci_acldata_handler(struct pbuf *p); + +err_t hci_reset(); +err_t hci_read_bd_addr(void); +err_t hci_set_hc_to_h_fc(void); +err_t hci_read_buffer_size(void); +err_t hci_host_buffer_size(void); +err_t hci_read_current_lap(void); +err_t hci_write_cod(u8_t *cod); +err_t hci_close(struct hci_link *link); +err_t hci_write_inquiry_mode(u8_t mode); +err_t hci_write_page_scan_type(u8_t type); +err_t hci_write_inquiry_scan_type(u8_t type); +err_t hci_disconnect(struct bd_addr *bdaddr, u8_t reason); +err_t hci_reject_connection_request(struct bd_addr *bdaddr, u8_t reason); +err_t hci_pin_code_request_reply(struct bd_addr *bdaddr, u8_t pinlen, u8_t *pincode); +err_t hci_link_key_req_reply(struct bd_addr *bdaddr, u8_t *link_key); +err_t hci_write_stored_link_key(struct bd_addr *bdaddr, u8_t *link); +err_t hci_set_event_filter(u8_t filter_type,u8_t filter_cond_type,u8_t *cond); +err_t hci_write_page_timeout(u16_t timeout); +err_t hci_inquiry(u32_t lap,u8_t inq_len,u8_t num_resp,err_t (*inq_complete)(void *arg,struct hci_pcb *pcb,struct hci_inq_res *ires,u16_t result)); +err_t hci_pin_code_request_neg_reply(struct bd_addr *bdaddr); +err_t hci_link_key_req_neg_reply(struct bd_addr *bdaddr); +err_t hci_write_scan_enable(u8_t scan_enable); +err_t hci_host_num_comp_packets(u16_t conhdl, u16_t num_complete); +err_t hci_sniff_mode(struct bd_addr *bdaddr, u16_t max_interval, u16_t min_interval, u16_t attempt, u16_t timeout); +err_t hci_write_link_policy_settings(struct bd_addr *bdaddr, u16_t link_policy); +err_t hci_periodic_inquiry(u32_t lap,u16_t min_period,u16_t max_period,u8_t inq_len,u8_t num_resp,err_t (*inq_complete)(void *arg,struct hci_pcb *pcb,struct hci_inq_res *ires,u16_t result)); +err_t hci_exit_periodic_inquiry(); +err_t hci_accecpt_conn_request(struct bd_addr *bdaddr,u8_t role); +err_t hci_set_event_mask(u64_t ev_mask); +err_t hci_read_local_version(void); +err_t hci_read_local_features(void); +err_t hci_write_local_name(u8_t *name,u8_t len); +err_t hci_write_pin_type(u8_t type); +err_t hci_read_stored_link_key(); +err_t hci_read_remote_name(struct bd_addr *bdaddr); +err_t hci_vendor_specific_command(u8_t ocf,u8_t ogf,void *data,u8_t len); + +err_t hci_reg_dev_info(struct bd_addr *bdaddr,u8_t *cod,u8_t psrm,u8_t psm,u16_t co); + +void hci_arg(void *arg); +void hci_cmd_complete(err_t (*cmd_complete)(void *arg,struct hci_pcb *pcb,u8_t ogf,u8_t ocf,u8_t result)); +void hci_connection_complete(err_t (* conn_complete)(void *arg, struct bd_addr *bdaddr)); +void hci_pin_req(err_t (* pin_req)(void *arg, struct bd_addr *bdaddr)); +void hci_link_key_req(err_t (* link_key_req)(void *arg, struct bd_addr *bdaddr)); +void hci_link_key_not(err_t (* link_key_not)(void *arg, struct bd_addr *bdaddr, u8_t *key)); +void hci_wlp_complete(err_t (* wlp_complete)(void *arg, struct bd_addr *bdaddr)); +void hci_conn_req(err_t (*conn_req)(void *arg,struct bd_addr *bdaddr,u8_t *cod,u8_t link_type)); + +u16_t lp_pdu_maxsize(); +u8_t lp_is_connected(struct bd_addr *bdaddr); +err_t lp_acl_write(struct bd_addr *bdaddr,struct pbuf *p,u16_t len,u8_t pb); +err_t lp_connect_req(struct bd_addr *bdaddr, u8_t allow_role_switch); +err_t lp_write_flush_timeout(struct bd_addr *bdaddr, u16_t flushto); + + +#define HCI_EVENT_PIN_REQ(pcb,bdaddr,ret) \ + if((pcb)->pin_req != NULL) { \ + (ret = (pcb)->pin_req((pcb)->cbarg,(bdaddr))); \ + } else { \ + ret = hci_pin_code_request_neg_reply(bdaddr); \ + } +#define HCI_EVENT_LINK_KEY_REQ(pcb,bdaddr,ret) \ + if((pcb)->link_key_req != NULL) { \ + (ret = (pcb)->link_key_req((pcb)->cbarg,(bdaddr))); \ + } else { \ + ret = hci_link_key_req_neg_reply(bdaddr); \ + } +#define HCI_EVENT_CONN_REQ(pcb,bdaddr,cod,linktype,ret) \ + if((pcb)->conn_req!=NULL) \ + (ret = (pcb)->conn_req((pcb)->cbarg,(bdaddr),(cod),(linktype))) +#define HCI_EVENT_LINK_KEY_NOT(pcb,bdaddr,key,ret) \ + if((pcb)->link_key_not != NULL) { \ + (ret = (pcb)->link_key_not((pcb)->cbarg,(bdaddr),(key))); \ + } +#define HCI_EVENT_INQ_COMPLETE(pcb,result,ret) \ + if((pcb)->inq_complete != NULL) \ + (ret = (pcb)->inq_complete((pcb)->cbarg,(pcb),(pcb)->ires,(result))) +#define HCI_EVENT_WLP_COMPLETE(pcb,bdaddr,ret) \ + if((pcb)->wlp_complete != NULL) \ + (ret = (pcb)->wlp_complete((pcb)->cbarg,(bdaddr))); +#define HCI_EVENT_CONN_COMPLETE(pcb,bdaddr,ret) \ + if((pcb)->conn_complete != NULL) \ + (ret = (pcb)->conn_complete((pcb)->cbarg,(bdaddr))); +#define HCI_EVENT_CMD_COMPLETE(pcb,ogf,ocf,result,ret) \ + if((pcb)->cmd_complete != NULL) \ + (ret = (pcb)->cmd_complete((pcb)->cbarg,(pcb),(ogf),(ocf),(result))) + +/* The HCI LINK lists. */ +extern struct hci_link *hci_active_links; /* List of all active HCI LINKs */ +extern struct hci_link *hci_tmp_link; /* Only used for temporary storage. */ +extern struct hci_link_key *hci_tmp_key; + +#define HCI_REG(links, nlink) do { \ + u32 level; \ + _CPU_ISR_Disable(level); \ + nlink->next = *links; \ + *links = nlink; \ + _CPU_ISR_Restore(level); \ + } while(0) +#define HCI_RMV(links, nlink) do { \ + u32 level; \ + _CPU_ISR_Disable(level);\ + if(*links == nlink) { \ + *links = (*links)->next; \ + } else for(hci_tmp_link = *links; hci_tmp_link != NULL; hci_tmp_link = hci_tmp_link->next) { \ + if(hci_tmp_link->next != NULL && hci_tmp_link->next == nlink) { \ + hci_tmp_link->next = nlink->next; \ + break; \ + } \ + } \ + nlink->next = NULL; \ + _CPU_ISR_Restore(level); \ + } while(0) + +#endif diff --git a/wii/libogc/lwbt/l2cap.c b/wii/libogc/lwbt/l2cap.c new file mode 100644 index 0000000000..0496834569 --- /dev/null +++ b/wii/libogc/lwbt/l2cap.c @@ -0,0 +1,1555 @@ +#include +#include +#include +#include +#include +#include + +#include "hci.h" +#include "l2cap.h" +#include "btmemb.h" +#include "btpbuf.h" + +/* Next Identifier to be sent */ +u8_t sigid_nxt; + +/* The L2CAP PCB lists. */ +struct l2cap_pcb_listen *l2cap_listen_pcbs = NULL; /* List of all L2CAP PCBs in CLOSED state + but awaiting an incoming conn req */ +struct l2cap_pcb *l2cap_active_pcbs; /* List of all L2CAP PCBs that are in a + state in which they accept or send + data */ +struct l2cap_pcb *l2cap_tmp_pcb = NULL; + +/* Temp signal */ +struct l2cap_sig *l2cap_tmp_sig = NULL; + +/* Global variable involved in input processing of l2cap data segements */ +struct l2cap_seg *l2cap_insegs = NULL; +struct l2cap_seg *l2cap_tmp_inseg = NULL; + +/* Global Baseband disconnect callback. */ +static void (*l2cap_disconnect_bb_cb)(struct bd_addr *bdaddr,u8_t reason) = NULL; + +/* Forward declarations */ +static u16_t l2cap_cid_alloc(void); + +MEMB(l2cap_pcbs,sizeof(struct l2cap_pcb),MEMB_NUM_L2CAP_PCB); +MEMB(l2cap_listenpcbs,sizeof(struct l2cap_pcb_listen),MEMB_NUM_L2CAP_PCB_LISTEN); +MEMB(l2cap_sigs,sizeof(struct l2cap_sig),MEMB_NUM_L2CAP_SIG); +MEMB(l2cap_segs,sizeof(struct l2cap_seg),MEMB_NUM_L2CAP_SEG); + +/*-----------------------------------------------------------------------------------*/ +/* + * l2cap_init(): + * + * Initializes the L2CAP layer. + */ +/*-----------------------------------------------------------------------------------*/ +void l2cap_init() +{ + btmemb_init(&l2cap_pcbs); + btmemb_init(&l2cap_listenpcbs); + btmemb_init(&l2cap_sigs); + btmemb_init(&l2cap_segs); + + /* Clear globals */ + l2cap_listen_pcbs = NULL; + l2cap_active_pcbs = NULL; + l2cap_tmp_pcb = NULL; + l2cap_tmp_sig = NULL; + l2cap_insegs = NULL; + l2cap_tmp_inseg = NULL; + l2cap_disconnect_bb_cb = NULL; + + /* Initialize the signal identifier (0x00 shall never be used) */ + sigid_nxt = 0x00; +} + +/*-----------------------------------------------------------------------------------*/ +/* + * l2cap_tmr(): + * + * Called every 1s and implements the retransmission timer that + * removes a channel if it has been waiting for a request enough + * time. It also includes a configuration timer. + */ +/*-----------------------------------------------------------------------------------*/ +void l2cap_tmr() +{ + struct l2cap_sig *sig; + struct l2cap_pcb *pcb; + err_t ret; + + (void) ret; + + /* Step through all of the active pcbs */ + for(pcb = l2cap_active_pcbs; pcb != NULL; pcb = pcb->next) { + /* Step through any unresponded signals */ + for(sig = pcb->unrsp_sigs; sig != NULL; sig = sig->next) { + /* Check if channel is not reliable */ + if(pcb->cfg.outflushto < 0xFFFF) { + /* Check if rtx is active. Otherwise ertx is active */ + if(sig->rtx > 0) { + /* Adjust rtx timer */ + --sig->rtx; + /* Check if rtx has expired */ + if(sig->rtx == 0) { + if(sig->nrtx == 0) { + /* Move pcb to closed state */ + pcb->state = L2CAP_CLOSED; + /* Indicate disconnect to upper layer */ + LOG("l2cap_tmr: Max number of retransmissions (rtx) has expired\n"); + L2CA_ACTION_DISCONN_IND(pcb,ERR_OK,ret); + } else { + --sig->nrtx; + /* Indicate timeout to upper layer */ + L2CA_ACTION_TO_IND(pcb,ERR_OK,ret); + /* Retransmitt signal w timeout doubled */ + sig->rtx += sig->rtx; + ret = l2cap_rexmit_signal(pcb, sig); + } + } /* if */ + } else { + /* Adjust ertx timer */ + --sig->ertx; + /* Check if ertx has expired */ + if(sig->ertx == 0) { + if(sig->nrtx == 0) { + /* Move pcb to closed state */ + pcb->state = L2CAP_CLOSED; + /* Indicate disconnect to upper layer */ + LOG("l2cap_tmr: Max number of retransmissions (ertx) has expired\n"); + L2CA_ACTION_DISCONN_IND(pcb,ERR_OK,ret); + } else { + --sig->nrtx; + /* Indicate timeout to upper layer */ + L2CA_ACTION_TO_IND(pcb,ERR_OK,ret); + /* Disable ertx, activate rtx and retransmitt signal */ + sig->ertx = 0; + sig->rtx = L2CAP_RTX; + ret = l2cap_rexmit_signal(pcb, sig); + } + } /* if */ + } /* else */ + } /* if */ + } /* for */ + + /* Check configuration timer */ + if(pcb->state == L2CAP_CONFIG) { + /* Check if configuration timer is active */ + if(pcb->cfg.cfgto > 0) { + --pcb->cfg.cfgto; + //LOG("l2cap_tmr: Configuration timer = %d\n", pcb->cfg.cfgto); + /* Check if config timer has expired */ + if(pcb->cfg.cfgto == 0) { + /* Connection attempt failed. Disconnect */ + l2ca_disconnect_req(pcb, NULL); + /* Notify the application that the connection attempt failed */ + if(pcb->cfg.l2capcfg & L2CAP_CFG_IR) { + L2CA_ACTION_CONN_CFM(pcb, L2CAP_CONN_CFG_TO, 0x0000, ret); + } else { + L2CA_ACTION_CONN_IND(pcb, ERR_OK, ret); + } + pcb->cfg.cfgto = L2CAP_CFG_TO; /* Reset timer */ + } + } + } + } /* for */ +} + +/*-----------------------------------------------------------------------------------*/ +/* + * l2cap_write(): + * + * Output L2CAP data to the lower layers. Segments the packet in to PDUs. + */ +/*-----------------------------------------------------------------------------------*/ +err_t l2cap_write(struct bd_addr *bdaddr, struct pbuf *p, u16_t len) +{ + u8_t pb = L2CAP_ACL_START; + u16_t maxsize; + u16_t outsize; + err_t ret = ERR_OK; + struct pbuf *q; + u16_t i = 0; + + /*u16_t i; + struct pbuf *q; + for(q = p; q != NULL; q = q->next) { + for(i = 0; i < q->len; ++i) { + LWIP_DEBUGF(L2CAP_DEBUG, ("l2cap_write: 0x%x\n", ((u8_t *)q->payload)[i])); + } + LWIP_DEBUGF(L2CAP_DEBUG, ("l2cap_write: *\n")); + } + */ + + maxsize = lp_pdu_maxsize(); + q = p; + + while(len && ret == ERR_OK) { + //LOG("l2cap_write: len %d maxsize %d p->len %d\n", len, maxsize, p->len); + if(len > maxsize) { + ret = lp_acl_write(bdaddr, q, maxsize, pb); + len -= maxsize; + outsize = maxsize; + //LOG("l2cap_write: Outsize before %d\n", outsize); + while(q->len < outsize) { + outsize -= q->len; + q = q->next; + } + //LOG("l2cap_write: Outsize after %d\n", outsize); + if(outsize) { + btpbuf_header(q, -outsize); + i += outsize; + } + pb = L2CAP_ACL_CONT; + LOG("l2cap_write: FRAG\n"); + } else { + ret = lp_acl_write(bdaddr, q, len, pb); + len = 0; + } + } + btpbuf_header(q, i); + LOG("l2cap_write: DONE\n"); + return ret; +} + +/*-----------------------------------------------------------------------------------*/ +/* + * l2cap_process_sig(): + * + * Parses the received message handles it. + */ +/*-----------------------------------------------------------------------------------*/ +void l2cap_process_sig(struct pbuf *q, struct l2cap_hdr *l2caphdr, struct bd_addr *bdaddr) +{ + struct l2cap_sig_hdr *sighdr; + struct l2cap_sig *sig = NULL; + struct l2cap_pcb *pcb = NULL; + struct l2cap_pcb_listen *lpcb; + struct l2cap_cfgopt_hdr *opthdr; + u16_t result, status, flags, psm, dcid; + u16_t len; + u16_t siglen; + struct pbuf *p, *r = NULL, *s = NULL, *data; + err_t ret; + u8_t i; + u16_t rspstate = L2CAP_CFG_SUCCESS; + + (void)ret; + + if(q->len != q->tot_len) { + LOG("l2cap_process_sig: Fragmented packet received. Reassemble into one buffer\n"); + if((p = btpbuf_alloc(PBUF_RAW, q->tot_len, PBUF_RAM)) != NULL) { + i = 0; + for(r = q; r != NULL; r = r->next) { + memcpy(((u8_t *)p->payload) + i, r->payload, r->len); + i += r->len; + } + } else { + ERROR("l2cap_process_sig: Could not allocate buffer for fragmented packet\n"); + return; + } + } else { + p = q; + } + + len = l2caphdr->len; + + while(len > 0) { + /* Set up signal header */ + sighdr = p->payload; + btpbuf_header(p, -L2CAP_SIGHDR_LEN); + + /* Check if this is a response/reject signal, and if so, find the matching request */ + if(sighdr->code % 2) { /* if odd this is a resp/rej signal */ + LOG("l2cap_process_sig: Response/reject signal received id = %d code = %d\n", sighdr->id, sighdr->code); + for(pcb = l2cap_active_pcbs; pcb != NULL; pcb = pcb->next) { + for(sig = pcb->unrsp_sigs; sig != NULL; sig = sig->next) { + if(sig->sigid == sighdr->id) { + break; /* found */ + } + } + if(sig != NULL) { + break; + } + } + } else { + LOG("l2cap_process_sig: Request signal received id = %d code = %d\n", sighdr->id, sighdr->code); + } + + /* Reject packet if length exceeds MTU */ + if(l2caphdr->len > L2CAP_MTU) { + /* Alloc size of reason in cmd rej + MTU */ + if((data = btpbuf_alloc(PBUF_RAW, L2CAP_CMD_REJ_SIZE+2, PBUF_RAM)) != NULL) { + ((u16_t *)data->payload)[0] = htole16(L2CAP_MTU_EXCEEDED); + ((u16_t *)data->payload)[1] = htole16(L2CAP_MTU); + + l2cap_signal(NULL, L2CAP_CMD_REJ, sighdr->id, bdaddr, data); + } + break; + } + + switch(sighdr->code) { + case L2CAP_CMD_REJ: + /* Remove signal from unresponded list and deallocate it */ + L2CAP_SIG_RMV(&(pcb->unrsp_sigs), sig); + btpbuf_free(sig->p); + btmemb_free(&l2cap_sigs, sig); + LOG("l2cap_process_sig: Our command was rejected so we disconnect\n"); + l2ca_disconnect_req(pcb, NULL); + break; + case L2CAP_CONN_REQ: + psm = le16toh(((u16_t *)p->payload)[0]); + /* Search for a listening pcb */ + for(lpcb = l2cap_listen_pcbs; lpcb != NULL; lpcb = lpcb->next) { + if(bd_addr_cmp(&(lpcb->bdaddr),bdaddr) && lpcb->psm == psm) { + /* Found a listening pcb with the correct PSM & BD Address */ + break; + } + } + + //printf("l2cap_process_sig(L2CAP_CONN_REQ): psm = %04x, lpcb = %p\n",psm,lpcb); + /* If no matching pcb was found, send a connection rsp neg (PSM) */ + if(lpcb == NULL) { + /* Alloc size of data in conn rsp signal */ + if((data = btpbuf_alloc(PBUF_RAW, L2CAP_CONN_RSP_SIZE, PBUF_RAM)) != NULL) { + ((u16_t *)data->payload)[0] = htole16(L2CAP_CONN_REF_PSM); + ((u16_t *)data->payload)[1] = 0; /* No further info available */ + ret = l2cap_signal(NULL, L2CAP_CONN_RSP, sighdr->id, bdaddr, data); + } + } else { + /* Initiate a new active pcb */ + pcb = l2cap_new(); + if(pcb == NULL) { + LOG("l2cap_process_sig: could not allocate PCB\n"); + /* Send a connection rsp neg (no resources available) and alloc size of data in conn rsp + signal */ + if((data = btpbuf_alloc(PBUF_RAW, L2CAP_CONN_RSP_SIZE, PBUF_RAM)) != NULL) { + ((u16_t *)data->payload)[0] = htole16(L2CAP_CONN_REF_RES); + ((u16_t *)data->payload)[1] = 0; /* No further info available */ + ret = l2cap_signal(NULL, L2CAP_CONN_RSP, sighdr->id, bdaddr, data); + } + } + bd_addr_set(&(pcb->remote_bdaddr),bdaddr); + + pcb->scid = l2cap_cid_alloc(); + pcb->dcid = le16toh(((u16_t *)p->payload)[1]); + pcb->psm = psm; + pcb->callback_arg = lpcb->callback_arg; + pcb->l2ca_connect_ind = lpcb->l2ca_connect_ind; + + pcb->state = L2CAP_CONFIG; + L2CAP_REG(&l2cap_active_pcbs, pcb); + + LOG("l2cap_process_sig: A connection request was received. Send a response\n"); + data = btpbuf_alloc(PBUF_RAW, L2CAP_CONN_RSP_SIZE, PBUF_RAM); + if(data == NULL) { + ERROR("l2cap_connect_rsp: Could not allocate memory for pbuf\n"); + break; + } + ((u16_t *)data->payload)[0] = htole16(pcb->scid); + ((u16_t *)data->payload)[1] = htole16(pcb->dcid); + ((u16_t *)data->payload)[2] = htole16(L2CAP_CONN_SUCCESS); + ((u16_t *)data->payload)[3] = 0x0000; /* No further information available */ + + /* Send the response */ + ret = l2cap_signal(pcb, L2CAP_CONN_RSP, sighdr->id, &(pcb->remote_bdaddr), data); + } + break; + case L2CAP_CONN_RSP: + if(pcb == NULL) { + /* A response without a matching request is silently discarded */ + break; + } + LOG("l2cap_process_sig: conn rsp, active pcb->state == W4_L2CAP_CONNECT_RSP\n"); + result = le16toh(((u16_t *)p->payload)[2]); + status = le16toh(((u16_t *)p->payload)[3]); + switch(result) { + case L2CAP_CONN_SUCCESS: + LOG("l2cap_process_sig: Conn_rsp_sucess, status %d\n", status); + LOG("l2cap_process_sig: conn rsp success, pcb->scid == %04x\n", ((u16_t *)p->payload)[1]); + + /* Set destination connection id */ + pcb->dcid = le16toh(((u16_t *)p->payload)[0]); + + /* Remove signal from unresponded list and deallocate it */ + L2CAP_SIG_RMV(&(pcb->unrsp_sigs), sig); + btpbuf_free(sig->p); + btmemb_free(&l2cap_sigs, sig); + + /* Configure connection */ + pcb->state = L2CAP_CONFIG; + + /* If initiator send a configuration request */ + if(pcb->cfg.l2capcfg & L2CAP_CFG_IR) { + l2ca_config_req(pcb); + pcb->cfg.l2capcfg |= L2CAP_CFG_OUT_REQ; + } + break; + case L2CAP_CONN_PND: + LOG("l2cap_process_sig: Conn_rsp_pnd, status %d\n", status); + + /* Disable rtx and enable ertx */ + sig->rtx = 0; + sig->ertx = L2CAP_ERTX; + break; + default: + LOG("l2cap_process_sig: Conn_rsp_neg, result %d\n", result); + /* Remove signal from unresponded list and deallocate it */ + L2CAP_SIG_RMV(&(pcb->unrsp_sigs), sig); + btpbuf_free(sig->p); + btmemb_free(&l2cap_sigs, sig); + + L2CA_ACTION_CONN_CFM(pcb,result,status,ret); + break; + } + break; + case L2CAP_CFG_REQ: + siglen = le16toh(sighdr->len); + dcid = le16toh(((u16_t *)p->payload)[0]); + flags = le16toh(((u16_t *)p->payload)[1]); + siglen -= 4; + btpbuf_header(p, -4); + + + LOG("l2cap_process_sig: Congfiguration request, flags = %d\n", flags); + + /* Find PCB with matching cid */ + for(pcb = l2cap_active_pcbs; pcb != NULL; pcb = pcb->next) { + //LOG("l2cap_process_sig: dcid = 0x%x, pcb->scid = 0x%x, pcb->dcid = 0x%x\n\n", dcid, pcb->scid, pcb->dcid); + if(pcb->scid == dcid) { + /* Matching cid found */ + break; + } + } + /* If no matching cid was found, send a cmd reject (Invalid cid) */ + if(pcb == NULL) { + LOG("l2cap_process_sig: Cfg req: no matching cid was found\n"); + /* Alloc size of reason in cmd rej + data (dcid + scid) */ + if((data = btpbuf_alloc(PBUF_RAW, L2CAP_CMD_REJ_SIZE+4, PBUF_RAM)) != NULL) { + ((u16_t *)data->payload)[0] = htole16(L2CAP_INVALID_CID); + ((u16_t *)data->payload)[1] = htole16(dcid); /* Requested local cid */ + ((u16_t *)data->payload)[2] = htole16(L2CAP_NULL_CID); /* Remote cid not known */ + + ret = l2cap_signal(NULL, L2CAP_CMD_REJ, sighdr->id, bdaddr, data); + } + } else { /* Handle config request */ + LOG("l2cap_process_sig: Handle configuration request\n"); + pcb->ursp_id = sighdr->id; /* Set id of request to respond to */ + + /* Parse options and add to pcb */ + while(siglen > 0) { + LOG("l2cap_process_sig: Siglen = %d\n", siglen); + opthdr = p->payload; + /* Check if type of action bit indicates a non-hint. Hints are ignored */ + LOG("l2cap_process_sig: Type of action bit = %d\n", L2CAP_OPTH_TOA(opthdr)); + if(L2CAP_OPTH_TOA(opthdr) == 0) { + LOG("l2cap_process_sig: Type = %d\n", L2CAP_OPTH_TYPE(opthdr)); + LOG("l2cap_process_sig: Length = %d\n", opthdr->len); + switch(L2CAP_OPTH_TYPE(opthdr)) { + case L2CAP_CFG_MTU: + LOG("l2cap_process_sig: Out MTU = %d\n", le16toh(((u16_t *)p->payload)[1])); + pcb->cfg.outmtu = le16toh(((u16_t *)p->payload)[1]); + break; + case L2CAP_FLUSHTO: + LOG("l2cap_process_sig: In flush timeout = %d\n", ((u16_t *)p->payload)[1]); + pcb->cfg.influshto = le16toh(((u16_t *)p->payload)[1]); + break; + case L2CAP_QOS: + /* If service type is Best Effort or No Traffic the remainder fields will be ignored */ + if(((u8_t *)p->payload)[3] == L2CAP_QOS_GUARANTEED) { + /*LOG("l2cap_process_sig: This implementation does not support the guaranteed QOS service type"); + if(rspstate == L2CAP_CFG_SUCCESS) { + rspstate = L2CAP_CFG_UNACCEPT; + if(pcb->cfg.opt != NULL) { + btpbuf_free(pcb->cfg.opt); + pcb->cfg.opt = NULL; + } + }*/ + s = btpbuf_alloc(PBUF_RAW, L2CAP_CFGOPTHDR_LEN + opthdr->len, PBUF_RAM); + memcpy((u8_t *)s->payload, (u8_t *)p->payload, L2CAP_CFGOPTHDR_LEN + opthdr->len); + if(pcb->cfg.opt == NULL) { + pcb->cfg.opt = s; + } else { + btpbuf_chain(pcb->cfg.opt, s); + btpbuf_free(s); + } + } + break; + default: + if(rspstate != L2CAP_CFG_REJ) { + /* Unknown option. Add to unknown option type buffer */ + if(rspstate != L2CAP_CFG_UNKNOWN) { + rspstate = L2CAP_CFG_UNKNOWN; + if(pcb->cfg.opt != NULL) { + btpbuf_free(pcb->cfg.opt); + pcb->cfg.opt = NULL; + } + } + s = btpbuf_alloc(PBUF_RAW, L2CAP_CFGOPTHDR_LEN + opthdr->len, PBUF_RAM); + memcpy((u8_t *)s->payload, (u8_t *)p->payload, L2CAP_CFGOPTHDR_LEN + opthdr->len); + if(pcb->cfg.opt == NULL) { + pcb->cfg.opt = s; + } else { + btpbuf_chain(pcb->cfg.opt, s); + btpbuf_free(s); + } + } + break; + } /* switch */ + } /* if(L2CAP_OPTH_TOA(opthdr) == 0) */ + btpbuf_header(p, -(L2CAP_CFGOPTHDR_LEN + opthdr->len)); + siglen -= L2CAP_CFGOPTHDR_LEN + opthdr->len; + } /* while */ + + /* If continuation flag is set we don't send the final response just yet */ + if((flags & 0x0001) == 1) { + /* Send success result with no options until the full request has been received */ + if((data = btpbuf_alloc(PBUF_RAW, L2CAP_CFG_RSP_SIZE, PBUF_RAM)) == NULL) { + ERROR("l2cap_process_sig: Could not allocate memory for pbuf\n"); + break; + } + ((u16_t *)data->payload)[0] = htole16(pcb->dcid); + ((u16_t *)data->payload)[1] = 0; + ((u16_t *)data->payload)[2] = htole16(L2CAP_CFG_SUCCESS); + ret = l2cap_signal(pcb, L2CAP_CFG_RSP, pcb->ursp_id, &(pcb->remote_bdaddr), data); + break; + } + + /* Send a configure request for outgoing link if it hasnt been configured */ + if(!(pcb->cfg.l2capcfg & L2CAP_CFG_IR) && !(pcb->cfg.l2capcfg & L2CAP_CFG_OUT_REQ)) { + l2ca_config_req(pcb); + pcb->cfg.l2capcfg |= L2CAP_CFG_OUT_REQ; + } + + /* Send response to configuration request */ + LOG("l2cap_process_sig: Send response to configuration request\n"); + if((data = btpbuf_alloc(PBUF_RAW, L2CAP_CFG_RSP_SIZE, PBUF_RAM)) != NULL) { + ((u16_t *)data->payload)[0] = htole16(pcb->dcid); + ((u16_t *)data->payload)[1] = 0; /* Flags (No continuation) */ + ((u16_t *)data->payload)[2] = htole16(rspstate); /* Result */ + if(pcb->cfg.opt != NULL) { + LOG("l2cap_process_sig: pcb->cfg.opt->len = %d\n", pcb->cfg.opt->len); + btpbuf_chain(data, pcb->cfg.opt); /* Add option type buffer to data buffer */ + btpbuf_free(pcb->cfg.opt); + pcb->cfg.opt = NULL; + } + ret = l2cap_signal(pcb, L2CAP_CFG_RSP, pcb->ursp_id, &(pcb->remote_bdaddr), data); + } + + if(rspstate == L2CAP_CFG_SUCCESS) { + pcb->cfg.l2capcfg |= L2CAP_CFG_OUT_SUCCESS; + /* L2CAP connection established if a successful configuration response has been sent */ + if(pcb->cfg.l2capcfg & L2CAP_CFG_IN_SUCCESS) { + /* IPCP connection established, notify upper layer that connection is open */ + pcb->state = L2CAP_OPEN; + if(pcb->cfg.l2capcfg & L2CAP_CFG_IR) { + L2CA_ACTION_CONN_CFM(pcb, L2CAP_CONN_SUCCESS, 0x0000, ret); + } else { + L2CA_ACTION_CONN_IND(pcb, ERR_OK, ret); + } + } + } + } /* else */ + break; + case L2CAP_CFG_RSP: + if(pcb == NULL) { + /* A response without a matching request is silently discarded */ + LOG("l2cap_process_sig: discarded response without matching request\n"); + break; + } + + /* Remove signal from unresponded list and deallocate it */ + L2CAP_SIG_RMV(&(pcb->unrsp_sigs), sig); + btpbuf_free(sig->p); + btmemb_free(&l2cap_sigs, sig); + + siglen = le16toh(sighdr->len); + //scid = le16toh(((u16_t *)p->payload)[0]); + flags = le16toh(((u16_t *)p->payload)[1]); + result = le16toh(((u16_t *)p->payload)[2]); + siglen -= 6; + btpbuf_header(p, -6); + + LOG("l2cap_process_sig: Outgoing configuration result == %d continuation flag == %d\n", result, flags); + + /* Handle config request */ + switch(result) { + case L2CAP_CFG_SUCCESS: + LOG("l2cap_process_sig: Successfull outgoing configuration\n"); + pcb->cfg.l2capcfg |= L2CAP_CFG_IN_SUCCESS; /* Local side of the connection + has been configured for outgoing data */ + pcb->cfg.cfgto = L2CAP_CFG_TO; /* Reset configuration timeout */ + + if(pcb->cfg.outflushto != L2CAP_CFG_DEFAULT_OUTFLUSHTO) { + lp_write_flush_timeout(&pcb->remote_bdaddr, pcb->cfg.outflushto); + } + + /* L2CAP connection established if a successful configuration response has been sent */ + if(pcb->cfg.l2capcfg & L2CAP_CFG_OUT_SUCCESS) { + pcb->state = L2CAP_OPEN; + if(pcb->cfg.l2capcfg & L2CAP_CFG_IR) { + L2CA_ACTION_CONN_CFM(pcb, L2CAP_CONN_SUCCESS, 0x0000, ret); + } else { + L2CA_ACTION_CONN_IND(pcb, ERR_OK, ret); + } + } + break; + case L2CAP_CFG_UNACCEPT: + /* Parse and add options to pcb */ + while(siglen > 0) { + opthdr = p->payload; + /* Check if type of action bit indicates a non-hint. Hints are ignored */ + if(L2CAP_OPTH_TOA(opthdr) == 0) { + switch(L2CAP_OPTH_TYPE(opthdr)) { + case L2CAP_CFG_MTU: + if(L2CAP_MTU > le16toh(((u16_t *)p->payload)[1])) { + pcb->cfg.outmtu = le16toh(((u16_t *)p->payload)[1]); + } else { + ERROR("l2cap_process_sig: Configuration of MTU failed\n"); + l2ca_disconnect_req(pcb, NULL); + return; + } + break; + case L2CAP_FLUSHTO: + pcb->cfg.influshto = le16toh(((u16_t *)p->payload)[1]); + break; + case L2CAP_QOS: + /* If service type Best Effort is not accepted we will close the connection */ + if(((u8_t *)p->payload)[3] != L2CAP_QOS_BEST_EFFORT) { + ERROR("l2cap_process_sig: Unsupported service type\n"); + l2ca_disconnect_req(pcb, NULL); + return; + } + break; + default: + /* Should not happen, skip option */ + break; + } /* switch */ + } /* if(L2CAP_OPTH_TOA(opthdr) == 0) */ + btpbuf_header(p, -(L2CAP_CFGOPTHDR_LEN + opthdr->len)); + siglen -= L2CAP_CFGOPTHDR_LEN + opthdr->len; + } /* while */ + + /* Send out a new configuration request if the continuation flag isn't set */ + if((flags & 0x0001) == 0) { + l2ca_config_req(pcb); + } + break; + case L2CAP_CFG_REJ: + /* Fallthrough */ + case L2CAP_CFG_UNKNOWN: + /* Fallthrough */ + default: + if((flags & 0x0001) == 0) { + LOG("l2cap_process_sig: Configuration failed\n"); + l2ca_disconnect_req(pcb, NULL); + return; + } + break; + } /* switch(result) */ + + /* If continuation flag is set we must send a NULL configuration request */ + if((flags & 0x0001) == 1) { + LOG("l2cap_process_sig: Continuation flag is set. Send empty (default) config request signal\n"); + if((data = btpbuf_alloc(PBUF_RAW, L2CAP_CFG_REQ_SIZE, PBUF_RAM)) == NULL) { + ERROR("l2cap_process_sig: Could not allocate memory for pbuf\n"); + return; + } + /* Assemble config request packet */ + ((u16_t *)data->payload)[0] = htole16(pcb->scid); + ((u16_t *)data->payload)[2] = 0; + l2cap_signal(pcb, L2CAP_CFG_REQ, 0, &(pcb->remote_bdaddr), data); + } + break; + case L2CAP_DISCONN_REQ: + siglen = le16toh(sighdr->len); + dcid = le16toh(((u16_t *)p->payload)[0]); + siglen = siglen - 2; + flags = le16toh(((u16_t *)p->payload)[1]); + siglen = siglen - 2; + btpbuf_header(p, -4); + + /* Find PCB with matching cid */ + for(pcb = l2cap_active_pcbs; pcb != NULL; pcb = pcb->next) { + if(pcb->scid == dcid) { + /* Matching cid found */ + break; + } + } + /* If no matching cid was found, send a cmd reject (Invalid cid) */ + if(pcb == NULL) { + /* Alloc size of reason in cmd rej + data (dcid + scid) */ + if((data = btpbuf_alloc(PBUF_RAW, L2CAP_CMD_REJ_SIZE+4, PBUF_RAM)) != NULL) { + ((u16_t *)data->payload)[0] = htole16(L2CAP_INVALID_CID); + ((u16_t *)data->payload)[1] = htole16(dcid); /* Requested local cid */ + ((u16_t *)data->payload)[2] = htole16(L2CAP_NULL_CID); /* Remote cid not known */ + + ret = l2cap_signal(NULL, L2CAP_CMD_REJ, sighdr->id, bdaddr, data); + } + } else { /* Handle disconnection request */ + if((data = btpbuf_alloc(PBUF_RAW, L2CAP_DISCONN_RSP_SIZE, PBUF_RAM)) != NULL) { + ((u16_t *)data->payload)[0] = htole16(pcb->scid); + ((u16_t *)data->payload)[1] = htole16(pcb->dcid); + ret = l2cap_signal(pcb, L2CAP_DISCONN_RSP, sighdr->id, &(pcb->remote_bdaddr), data); + + /* Give upper layer indication */ + pcb->state = L2CAP_CLOSED; + LOG("l2cap_process_sig: Disconnection request\n"); + L2CA_ACTION_DISCONN_IND(pcb,ERR_OK,ret); + } + } + break; + case L2CAP_DISCONN_RSP: + if(pcb == NULL) { + /* A response without a matching request is silently discarded */ + break; + } + /* Remove signal from unresponded list and deallocate it */ + L2CAP_SIG_RMV(&(pcb->unrsp_sigs), sig); + btpbuf_free(sig->p); + btmemb_free(&l2cap_sigs, sig); + + L2CA_ACTION_DISCONN_CFM(pcb,ret); /* NOTE: Application should + now close the connection */ + break; + case L2CAP_ECHO_REQ: + pcb->ursp_id = sighdr->id; + ret = l2cap_signal(pcb, L2CAP_ECHO_RSP, sighdr->id, &(pcb->remote_bdaddr), NULL); + break; + case L2CAP_ECHO_RSP: + if(pcb == NULL) { + /* A response without a matching request is silently discarded */ + break; + } + /* Remove signal from unresponded list and deallocate it */ + L2CAP_SIG_RMV(&(pcb->unrsp_sigs), sig); + btpbuf_free(sig->p); + btmemb_free(&l2cap_sigs, sig); + + /* Remove temporary pcb from active list */ + L2CAP_RMV(&l2cap_active_pcbs, pcb); + L2CA_ACTION_PING_CFM(pcb,L2CAP_ECHO_RCVD,ret); + break; + default: + /* Alloc size of reason in cmd rej */ + if((data = btpbuf_alloc(PBUF_RAW, L2CAP_CMD_REJ_SIZE, PBUF_RAM)) != NULL) { + ((u16_t *)data->payload)[0] = htole16(L2CAP_CMD_NOT_UNDERSTOOD); + + ret = l2cap_signal(NULL, L2CAP_CMD_REJ, sighdr->id, bdaddr, data); + } + break; + } /* switch */ + len = len - (le16toh(sighdr->len) + L2CAP_SIGHDR_LEN); + btpbuf_header(p, -(le16toh(sighdr->len))); + } /* while */ +} + +/*-----------------------------------------------------------------------------------*/ +/* + * l2cap_input(): + * + * Called by the lower layer. Reassembles the packet, parses the header and forward + * it to the upper layer or the signal handler. + */ +/*-----------------------------------------------------------------------------------*/ +void l2cap_input(struct pbuf *p, struct bd_addr *bdaddr) +{ + struct l2cap_seg *inseg; + struct hci_acl_hdr *aclhdr; + struct pbuf *data; + err_t ret; + + (void)ret; + + btpbuf_header(p, HCI_ACL_HDR_LEN); + aclhdr = p->payload; + btpbuf_header(p, -HCI_ACL_HDR_LEN); + + btpbuf_realloc(p, aclhdr->len); + + for(inseg = l2cap_insegs; inseg != NULL; inseg = inseg->next) { + if(bd_addr_cmp(bdaddr, &(inseg->bdaddr))) { + break; + } + } + + aclhdr->connhdl_pb_bc = le16toh(aclhdr->connhdl_pb_bc); + aclhdr->len = le16toh(aclhdr->len); + /* Reassembly procedures */ + /* Check if continuing fragment or start of L2CAP packet */ + if(((aclhdr->connhdl_pb_bc >> 12) & 0x03)== L2CAP_ACL_CONT) { /* Continuing fragment */ + if(inseg == NULL) { + /* Discard packet */ + LOG("l2cap_input: Continuing fragment. Discard packet\n"); + btpbuf_free(p); + return; + } else if(inseg->p->tot_len + p->tot_len > inseg->len) { /* Check if length of + segment exceeds + l2cap header length */ + /* Discard packet */ + LOG("l2cap_input: Continuing fragment. Length exceeds L2CAP hdr length. Discard packet\n"); + btpbuf_free(inseg->p); + L2CAP_SEG_RMV(&(l2cap_insegs), inseg); + btmemb_free(&l2cap_segs, inseg); + + btpbuf_free(p); + return; + } + /* Add pbuf to segement */ + btpbuf_chain(inseg->p, p); + btpbuf_free(p); + + } else if(((aclhdr->connhdl_pb_bc >> 12) & 0x03) == L2CAP_ACL_START) { /* Start of L2CAP packet */ + //LOG("l2cap_input: Start of L2CAP packet p->len = %d, p->tot_len = %d\n", p->len, p->tot_len); + if(inseg != NULL) { /* Check if there are segments missing in a previous packet */ + /* Discard previous packet */ + LOG("l2cap_input: Start of L2CAP packet. Discard previous packet\n"); + btpbuf_free(inseg->p); + } else { + inseg = btmemb_alloc(&l2cap_segs); + bd_addr_set(&(inseg->bdaddr), bdaddr); + L2CAP_SEG_REG(&(l2cap_insegs), inseg); + } + inseg->p = p; + inseg->l2caphdr = p->payload; + inseg->l2caphdr->cid = le16toh(inseg->l2caphdr->cid); + inseg->l2caphdr->len = le16toh(inseg->l2caphdr->len); + + inseg->len = inseg->l2caphdr->len + L2CAP_HDR_LEN; + for(inseg->pcb = l2cap_active_pcbs; inseg->pcb != NULL; inseg->pcb = inseg->pcb->next) { + if(inseg->pcb->scid == inseg->l2caphdr->cid) { + break; /* found */ + } + } + } else { + /* Discard packet */ + LOG("l2cap_input: Discard packet\n"); + btpbuf_free(inseg->p); + L2CAP_SEG_RMV(&(l2cap_insegs), inseg); + btmemb_free(&l2cap_segs, inseg); + + btpbuf_free(p); + return; + } + if(inseg->p->tot_len < inseg->len) { + LOG("l2cap_input: Get continuing segments\n"); + return; /* Get continuing segments */ + } + + /* Handle packet */ + switch(inseg->l2caphdr->cid) { + case L2CAP_NULL_CID: + /* Illegal */ + LOG("l2cap_input: Illegal null cid\n"); + btpbuf_free(inseg->p); + break; + case L2CAP_SIG_CID: + btpbuf_header(inseg->p, -L2CAP_HDR_LEN); + l2cap_process_sig(inseg->p, inseg->l2caphdr, bdaddr); + btpbuf_free(inseg->p); + break; + case L2CAP_CONNLESS_CID: + /* Not needed by PAN, LAN access or DUN profiles */ + btpbuf_free(inseg->p); + break; + default: + if(inseg->l2caphdr->cid < 0x0040 || inseg->pcb == NULL) { + /* Reserved for specific L2CAP functions or channel does not exist */ + /* Alloc size of reason in cmd rej */ + if((data = btpbuf_alloc(PBUF_RAW, L2CAP_CMD_REJ_SIZE+4, PBUF_RAM)) != NULL) { + ((u16_t *)data->payload)[0] = htole16(L2CAP_INVALID_CID); + ((u16_t *)data->payload)[1] = htole16(inseg->l2caphdr->cid); + ((u16_t *)data->payload)[2] = htole16(L2CAP_NULL_CID); + + ret = l2cap_signal(NULL, L2CAP_CMD_REJ, l2cap_next_sigid(), bdaddr, data); + } + btpbuf_free(inseg->p); + break; + } + + btpbuf_header(inseg->p, -L2CAP_HDR_LEN); + + /* Forward packet to higher layer */ + LOG("l2cap_input: Forward packet to higher layer\n"); + /* + LOG("l2cap_input: Remote BD address: 0x%x:0x%x:0x%x:0x%x:0x%x:0x%x\n", + inseg->pcb->remote_bdaddr.addr[5], + inseg->pcb->remote_bdaddr.addr[4], + inseg->pcb->remote_bdaddr.addr[3], + inseg->pcb->remote_bdaddr.addr[2], + inseg->pcb->remote_bdaddr.addr[1], + inseg->pcb->remote_bdaddr.addr[0])); + */ + L2CA_ACTION_RECV(inseg->pcb,inseg->p,ERR_OK,ret); + break; + } + + /* Remove input segment */ + L2CAP_SEG_RMV(&(l2cap_insegs), inseg); + btmemb_free(&l2cap_segs, inseg); +} + +/*-----------------------------------------------------------------------------------*/ +/* + * l2cap_cid_alloc(): + * + * Allocates a channel identifier (CID). They are local names representing a logical + * channel endpoint on the device. + */ +/*-----------------------------------------------------------------------------------*/ +static u16_t l2cap_cid_alloc(void) +{ + u16_t cid; + struct l2cap_pcb *pcb; + + for (cid = L2CAP_MIN_CID; cid < L2CAP_MAX_CID; ++cid) { + for(pcb = l2cap_active_pcbs; pcb != NULL; pcb = pcb->next) { + if(pcb->scid == cid) { + break; + } + } + if(pcb == NULL) { + return cid; + } + } + return 0; +} + +/*-----------------------------------------------------------------------------------*/ +/* + * l2cap_new(): + * + * Creates a new L2CAP protocol control block but doesn't place it on + * any of the L2CAP PCB lists. + */ +/*-----------------------------------------------------------------------------------*/ +struct l2cap_pcb* l2cap_new(void) +{ + struct l2cap_pcb *pcb; + + pcb = btmemb_alloc(&l2cap_pcbs); + if(pcb != NULL) { + memset(pcb, 0, sizeof(struct l2cap_pcb)); + pcb->state = L2CAP_CLOSED; + + /* Initialize configuration parameter options with default values */ + + /* Maximum Transmission Unit */ + pcb->cfg.inmtu = L2CAP_MTU; /* The MTU that this implementation support */ + pcb->cfg.outmtu = 672; /* Default MTU. Two Baseband DH5 packets minus the Baseband ACL headers and + L2CAP header. This can be set here since we will never send any signals + larger than the L2CAP sig MTU (48 bytes) before L2CAP has been configured + */ + + /* Flush Timeout */ + pcb->cfg.influshto = 0xFFFF; + pcb->cfg.outflushto = 0xFFFF; + + pcb->cfg.cfgto = L2CAP_CFG_TO; /* Maximum time before terminating a negotiation. + Cfg shall not last more than 120s */ + pcb->cfg.opt = NULL; + return pcb; + } + ERROR("l2cap_new: Could not allocate memory for pcb\n"); + return NULL; +} + +/*-----------------------------------------------------------------------------------*/ +/* + * l2cap_close(): + * + * Closes the L2CAP protocol control block. + */ +/*-----------------------------------------------------------------------------------*/ +err_t l2cap_close(struct l2cap_pcb *pcb) +{ + struct l2cap_sig *tmpsig; + + if(pcb->state == L2CAP_LISTEN) { + L2CAP_RMV((struct l2cap_pcb**)((void*)&(l2cap_listen_pcbs)), pcb); + btmemb_free(&l2cap_listenpcbs, pcb); + } else { + L2CAP_RMV(&(l2cap_active_pcbs), pcb); + /* Free any unresponded signals */ + while(pcb->unrsp_sigs != NULL) { + tmpsig = pcb->unrsp_sigs; + pcb->unrsp_sigs = pcb->unrsp_sigs->next; + btmemb_free(&l2cap_sigs, tmpsig); + } + + btmemb_free(&l2cap_pcbs, pcb); + } + pcb = NULL; + return ERR_OK; +} +/*-----------------------------------------------------------------------------------*/ +/* + * l2cap_reset_all(): + * + * Closes all active and listening L2CAP protocol control blocks. + */ +/*-----------------------------------------------------------------------------------*/ +void l2cap_reset_all(void) +{ + struct l2cap_pcb *pcb, *tpcb; + struct l2cap_pcb_listen *lpcb, *tlpcb; + struct l2cap_seg *seg, *tseg; + + for(pcb = l2cap_active_pcbs; pcb != NULL;) { + tpcb = pcb->next; + l2cap_close(pcb); + pcb = tpcb; + } + + for(lpcb = l2cap_listen_pcbs; lpcb != NULL;) { + tlpcb = lpcb->next; + l2cap_close((struct l2cap_pcb *)lpcb); + lpcb = tlpcb; + } + + for(seg = l2cap_insegs; seg != NULL;) { + tseg = seg->next; + L2CAP_SEG_RMV(&(l2cap_insegs), seg); + btmemb_free(&l2cap_segs, seg); + seg = tseg; + } + + l2cap_init(); +} + +/*-----------------------------------------------------------------------------------*/ +/* L2CAP to L2CAP signalling events + */ +/*-----------------------------------------------------------------------------------*/ +/*-----------------------------------------------------------------------------------*/ +/* + * l2cap_signal(): + * + * Assembles the signalling packet and passes it to the lower layer. + */ +/*-----------------------------------------------------------------------------------*/ +err_t l2cap_signal(struct l2cap_pcb *pcb, u8_t code, u16_t ursp_id, struct bd_addr *remote_bdaddr, struct pbuf *data) +{ + struct l2cap_sig *sig; + struct l2cap_sig_hdr *sighdr; + struct l2cap_hdr *hdr; + err_t ret; + + /* Alloc a new signal */ + LOG("l2cap_signal: Allocate memory for l2cap_sig. Code = 0x%x\n", code); + if((sig = btmemb_alloc(&l2cap_sigs)) == NULL) { + ERROR("l2cap_signal: could not allocate memory for l2cap_sig\n"); + return ERR_MEM; + } + + /* Alloc a pbuf for signal */ + if((sig->p = btpbuf_alloc(PBUF_RAW, L2CAP_HDR_LEN+L2CAP_SIGHDR_LEN, PBUF_RAM)) == NULL) { + ERROR("l2cap_signal: could not allocate memory for pbuf\n"); + return ERR_MEM; + } + + /* Setup signal header and leave room for l2cap hdr */ + sighdr = (struct l2cap_sig_hdr *)(((u8_t *)sig->p->payload)+L2CAP_HDR_LEN); + + /* Chain data to signal and set length of signal data */ + if(data == NULL) { + sighdr->len = 0; + } else { + btpbuf_chain(sig->p, data); + btpbuf_free(data); + sighdr->len = htole16(data->tot_len); + } + + sighdr->code = code; + + if(sighdr->code % 2) { /* If odd this is a resp/rej signal */ + sig->sigid = ursp_id; /* Get id */ + LOG("l2cap_signal: Sending response/reject signal with id = %d code = %d\n", sig->sigid, sighdr->code); + } else { + sig->sigid = l2cap_next_sigid(); /* Alloc id */ + sig->rtx = L2CAP_RTX; /* Set Response Timeout Expired timer (in seconds) + should be at least as large as the BB flush timeout */ + sig->nrtx = L2CAP_MAXRTX; /* Set max number of retransmissions */ + LOG("l2cap_signal: Sending request signal with id = %d code = %d\n", sig->sigid, sighdr->code); + } + sighdr->id = sig->sigid; /* Set id */ + + /* Set up L2CAP hdr */ + hdr = sig->p->payload; + hdr->len = htole16((sig->p->tot_len - L2CAP_HDR_LEN)); + hdr->cid = htole16(L2CAP_SIG_CID); /* 0x0001 */ + + ret = l2cap_write(remote_bdaddr, sig->p, sig->p->tot_len); /* Send peer L2CAP signal */ + + /* Put signal on unresponded list if it's a request signal, else deallocate it */ + if(ret == ERR_OK && (sighdr->code % 2) == 0) { + LOG("l2cap_signal: Registering sent request signal with id = %d code = %d\n", sig->sigid, sighdr->code); + L2CAP_SIG_REG(&(pcb->unrsp_sigs), sig); + } else { + LOG("l2cap_signal: Deallocating sent response/reject signal with id = %d code = %d\n", sig->sigid, sighdr->code); + btpbuf_free(sig->p); + sig->p = NULL; + btmemb_free(&l2cap_sigs, sig); + } + + return ret; +} + +/*-----------------------------------------------------------------------------------*/ +/* + * l2cap_rexmit_signal(): + * + * Called by the l2cap timer. Retransmitts a signal. + */ +/*-----------------------------------------------------------------------------------*/ +err_t l2cap_rexmit_signal(struct l2cap_pcb *pcb, struct l2cap_sig *sig) +{ + err_t ret; + + /* Set up L2CAP hdr */ + ret = l2cap_write(&(pcb->remote_bdaddr), sig->p, sig->p->tot_len); /* Send peer L2CAP signal */ + + return ret; +} +/*-----------------------------------------------------------------------------------*/ +/* Upper-Layer to L2CAP signaling events + */ +/*-----------------------------------------------------------------------------------*/ +/*-----------------------------------------------------------------------------------*/ +/* + * l2ca_connect_req(): + * + * Initiates the sending of a connect request message. Requests the creation of a + * channel representing a logicalconnection to a physical address. Input parameters + * are the target protocol(PSM) and remote devices 48-bit address (BD_ADDR). Also + * specify the function to be called when a confirm has been received. + */ +/*-----------------------------------------------------------------------------------*/ +err_t l2ca_connect_req(struct l2cap_pcb *pcb, struct bd_addr *bdaddr, u16_t psm, + u8_t role_switch, err_t (* l2ca_connect_cfm)(void *arg, struct l2cap_pcb *lpcb, + u16_t result, u16_t status)) +{ + err_t ret; + struct pbuf *data; + + if(bdaddr != NULL) { + bd_addr_set(&(pcb->remote_bdaddr),bdaddr); + } else { + return ERR_VAL; + } + + pcb->psm = psm; + pcb->l2ca_connect_cfm = l2ca_connect_cfm; + pcb->scid = l2cap_cid_alloc(); + + pcb->cfg.l2capcfg |= L2CAP_CFG_IR; /* We are the initiator of this connection */ + + if(!lp_is_connected(bdaddr)) { + ret = lp_connect_req(bdaddr, role_switch); /* Create ACL link w pcb state == CLOSED */ + } else { + if((data = btpbuf_alloc(PBUF_RAW, L2CAP_CONN_REQ_SIZE, PBUF_RAM)) == NULL) { + ERROR("l2cap_connect_req: Could not allocate memory for pbuf\n"); + return ERR_MEM; + } + ((u16_t *)data->payload)[0] = htole16(psm); + ((u16_t *)data->payload)[1] = htole16(pcb->scid); + ret = l2cap_signal(pcb, L2CAP_CONN_REQ, 0, &(pcb->remote_bdaddr), data); /* Send l2cap_conn_req signal */ + + pcb->state = W4_L2CAP_CONNECT_RSP; + } + + L2CAP_REG(&(l2cap_active_pcbs), pcb); + + return ret; +} + +/*-----------------------------------------------------------------------------------*/ +/* + * l2ca_config_req(): + * + * Requests the initial configuration (or reconfiguration) of a channel to a new set + * of channel parameters. Input parameters are the local CID endpoint, new incoming + * receivable MTU (InMTU), new outgoing flow specification, and flush and link + * timeouts. Also specify the function to be called when a confirm has been received. + */ +/*-----------------------------------------------------------------------------------*/ +err_t l2ca_config_req(struct l2cap_pcb *pcb) +{ + struct pbuf *p, *q; + struct l2cap_cfgopt_hdr *opthdr; + err_t ret; + + switch(pcb->state) { + case L2CAP_OPEN: + LOG("l2cap_config_req: state = L2CAP_OPEN. Suspend transmission\n"); + /* Note: Application should have suspended data transmission, otherwise outgoing data will be + dropped */ + pcb->state = L2CAP_CONFIG; + /* Fallthrough */ + case L2CAP_CONFIG: + LOG("l2cap_config_req: state = L2CAP_CONFIG\n"); + + if((p = btpbuf_alloc(PBUF_RAW, L2CAP_CFG_REQ_SIZE, PBUF_RAM)) == NULL) { + ERROR("l2cap_config_req: Could not allocate memory for pbuf\n"); + return ERR_MEM; + } + + /* Assemble config request packet. Only options that has to be changed will be + sent */ + ((u16_t *)p->payload)[0] = htole16(pcb->dcid); + /* In this implementation we do not send multiple cmds in one + signal packet. Therefore we will never send a config_req packet + that will cause the signal to be larger than the minimum L2CAP MTU + 48 bytes. Hence, this flag will always be cleared */ + ((u16_t *)p->payload)[1] = 0; + + /* Add MTU and out flush timeout to cfg packet if not default value. QoS (Best effort) is always + set to default and can be skipped */ + if(pcb->cfg.inmtu != L2CAP_CFG_DEFAULT_INMTU) { + if((q = btpbuf_alloc(PBUF_RAW, L2CAP_CFGOPTHDR_LEN + L2CAP_MTU_LEN, PBUF_RAM)) == NULL) { + ERROR("l2cap_config_req: Could not allocate memory for pbuf\n"); + btpbuf_free(p); + return ERR_MEM; + } + opthdr = q->payload; + opthdr->type = L2CAP_CFG_MTU; + opthdr->len = L2CAP_MTU_LEN; + ((u16_t *)q->payload)[1] = htole16(pcb->cfg.inmtu); + btpbuf_chain(p, q); + btpbuf_free(q); + } + + if(L2CAP_OUT_FLUSHTO != L2CAP_CFG_DEFAULT_OUTFLUSHTO) { + if((q = btpbuf_alloc(PBUF_RAW, L2CAP_CFGOPTHDR_LEN + L2CAP_FLUSHTO_LEN, PBUF_RAM)) == NULL) { + ERROR("l2cap_config_req: Could not allocate memory for pbuf\n"); + btpbuf_free(p); + return ERR_MEM; + } + opthdr = q->payload; + opthdr->type = L2CAP_FLUSHTO; + opthdr->len = L2CAP_FLUSHTO_LEN; + pcb->cfg.outflushto = L2CAP_OUT_FLUSHTO; + ((u16_t *)q->payload)[1] = htole16(pcb->cfg.outflushto); + btpbuf_chain(p, q); + btpbuf_free(q); + } + + /* Send config request signal */ + ret = l2cap_signal(pcb, L2CAP_CFG_REQ, 0, &(pcb->remote_bdaddr), p); + break; + default: + ERROR("l2cap_config_req: state = L2CAP_?. Invalid state\n"); + return ERR_CONN; /* Invalid state. Connection is not in OPEN or CONFIG state */ + } + return ret; +} +/*-----------------------------------------------------------------------------------*/ +/* + * l2ca_disconnect_req(): + * + * Requests the disconnection of the channel. Also specify the function to be called + * when a confirm is received + */ +/*-----------------------------------------------------------------------------------*/ +err_t l2ca_disconnect_req(struct l2cap_pcb *pcb, err_t (* l2ca_disconnect_cfm)(void *arg, struct l2cap_pcb *pcb)) +{ + struct pbuf *data; + err_t ret; + + if(pcb->state == L2CAP_OPEN || pcb->state == L2CAP_CONFIG) { + if((data = btpbuf_alloc(PBUF_RAW, L2CAP_DISCONN_REQ_SIZE, PBUF_RAM)) == NULL) { + ERROR("l2cap_disconnect_req: Could not allocate memory for pbuf\n"); + return ERR_MEM; + } + pcb->l2ca_disconnect_cfm = l2ca_disconnect_cfm; + + ((u16_t *)data->payload)[0] = htole16(pcb->dcid); + ((u16_t *)data->payload)[1] = htole16(pcb->scid); + + ret = l2cap_signal(pcb, L2CAP_DISCONN_REQ, 0, &(pcb->remote_bdaddr), data); + + if(ret == ERR_OK) { + pcb->state = W4_L2CAP_DISCONNECT_RSP; + } + } else { + return ERR_CONN; /* Signal not supported in this state */ + } + + return ret; +} +/*-----------------------------------------------------------------------------------*/ +/* + * l2ca_datawrite(): + * + * Transfers data across the channel. + */ +/*-----------------------------------------------------------------------------------*/ +err_t l2ca_datawrite(struct l2cap_pcb *pcb, struct pbuf *p) +{ + err_t ret; + struct l2cap_hdr *l2caphdr; + struct pbuf *q; + + if(pcb->state != L2CAP_OPEN) { + ERROR("l2cap_datawrite: State != L2CAP_OPEN. Dropping data\n"); + return ERR_CONN; + } + + /* Build L2CAP header */ + if((q = btpbuf_alloc(PBUF_RAW, L2CAP_HDR_LEN, PBUF_RAM)) == NULL) { + ERROR("l2cap_datawrite: Could not allocate memory for pbuf\n"); + return ERR_MEM; + } + btpbuf_chain(q, p); + + l2caphdr = q->payload; + l2caphdr->cid = htole16(pcb->dcid); + + /* If length of the data exceeds the OutMTU then only the first OutMTU bytes are sent */ + if(p->tot_len > pcb->cfg.outmtu) { + /* Send peer L2CAP data */ + l2caphdr->len = htole16(pcb->cfg.outmtu); + if((ret = l2cap_write(&(pcb->remote_bdaddr), q, pcb->cfg.outmtu + L2CAP_HDR_LEN)) == ERR_OK) { + //LOG("l2cap_datawrite: Length of data exceeds the OutMTU p->tot_len = %d\n", p->tot_len); + ret = ERR_BUF; /* Length of data exceeds the OutMTU */ + } + } else { + /* Send peer L2CAP data */ + l2caphdr->len = htole16(p->tot_len); + //LOG("l2cap_datawrite: q->tot_len = %d\n", q->tot_len); + ret = l2cap_write(&(pcb->remote_bdaddr), q, q->tot_len); + } + + /* Free L2CAP header. Higher layers will handle rest of packet */ + p = btpbuf_dechain(q); + btpbuf_free(q); + + return ret; +} +/*-----------------------------------------------------------------------------------*/ +/* + * l2ca_ping(): + * + * Sends an empty L2CAP echo request message. Also specify the function that should + * be called when a L2CAP echo reply has been received. + */ +/*-----------------------------------------------------------------------------------*/ +err_t l2ca_ping(struct bd_addr *bdaddr, struct l2cap_pcb *tpcb, + err_t (* l2ca_pong)(void *arg, struct l2cap_pcb *pcb, u8_t result)) +{ + err_t ret; + + if(!lp_is_connected(bdaddr)) { + return ERR_CONN; + } + + bd_addr_set(&(tpcb->remote_bdaddr), bdaddr); + tpcb->l2ca_pong = l2ca_pong; + + L2CAP_REG(&(l2cap_active_pcbs), tpcb); + + ret = l2cap_signal(tpcb, L2CAP_ECHO_REQ, 0, &(tpcb->remote_bdaddr), NULL); /* Send l2cap_echo_req signal */ + + return ret; +} +/*-----------------------------------------------------------------------------------*/ +/* Lower-Layer to L2CAP signaling events + */ +/*-----------------------------------------------------------------------------------*/ +/*-----------------------------------------------------------------------------------*/ +/* + * lp_connect_cfm(): + * + * Confirms the request to establish a lower layer (Baseband) connection. + */ +/*-----------------------------------------------------------------------------------*/ +void lp_connect_cfm(struct bd_addr *bdaddr, u8_t encrypt_mode, err_t err) +{ + struct l2cap_pcb *pcb; + struct pbuf *data; + err_t ret; + + for(pcb = l2cap_active_pcbs; pcb != NULL; pcb = pcb->next) { + if(bd_addr_cmp(&(pcb->remote_bdaddr), bdaddr)) { + break; + } + } + if(pcb == NULL) { + /* Silently discard */ + LOG("lp_connect_cfm: Silently discard\n"); + } else { + if(err == ERR_OK) { + pcb->encrypt = encrypt_mode; + /* Send l2cap_conn_req signal if no error */ + if((data = btpbuf_alloc(PBUF_RAW, L2CAP_CONN_REQ_SIZE, PBUF_RAM)) != NULL) { + ((u16_t *)data->payload)[0] = htole16(pcb->psm); + ((u16_t *)data->payload)[1] = htole16(pcb->scid); + if((ret = l2cap_signal(pcb, L2CAP_CONN_REQ, 0, &(pcb->remote_bdaddr), data)) == ERR_OK) { + pcb->state = W4_L2CAP_CONNECT_RSP; + } else { + L2CA_ACTION_CONN_CFM(pcb,L2CAP_CONN_REF_RES,0x0000,ret); /* No resources available? */ + } + //LOG("lp_connect_cfm: l2cap_conn_req signal sent. err = %d\nPSM = 0x%x\nscid = 0x%x\nencrypt mode = 0x%x\n", err, pcb->psm, pcb->scid, pcb->encrypt); + } else { + ERROR("lp_connect_cfm: No resources available\n"); + L2CA_ACTION_CONN_CFM(pcb,L2CAP_CONN_REF_RES,0x0000,ret); /* No resources available */ + } + } else { + ERROR("lp_connect_cfm: Connection falied\n"); + L2CA_ACTION_CONN_CFM(pcb,L2CAP_CONN_REF_RES,0x0000,ret); /* No resources available */ + } + } +} +/*-----------------------------------------------------------------------------------*/ +/* + * lp_connect_ind(): + * + * Indicates the lower protocol has successfully established a connection. + */ +/*-----------------------------------------------------------------------------------*/ +void lp_connect_ind(struct bd_addr *bdaddr) +{ + LOG("lp_connect_ind\n"); +} +/*-----------------------------------------------------------------------------------*/ +/* + * lp_disconnect_ind(): + * + * Indicates the lower protocol (Baseband) has been shut down by LMP commands or a + * timeout event.. + */ +/*-----------------------------------------------------------------------------------*/ +void lp_disconnect_ind(struct bd_addr *bdaddr,u8_t reason) +{ + struct l2cap_pcb *pcb, *tpcb; + err_t ret; + + (void)ret; + + for(pcb = l2cap_active_pcbs; pcb != NULL;) { + tpcb = pcb->next; + LOG("lp_disconnect_ind: Find a pcb with a matching Bluetooth address\n"); + /* All PCBs with matching Bluetooth address have been disconnected */ + if(bd_addr_cmp(&(pcb->remote_bdaddr), bdaddr)) {// && pcb->state != L2CAP_CLOSED) { + pcb->state = L2CAP_CLOSED; + LOG("lp_disconnect_ind: Notify application\n"); + L2CA_ACTION_DISCONN_IND(pcb,ERR_OK,ret); + } + pcb = tpcb; + } + if(l2cap_disconnect_bb_cb) l2cap_disconnect_bb_cb(bdaddr,reason); +} + +/*-----------------------------------------------------------------------------------*/ +/* + * l2cap_disconnect_bb(): + * + * Register a callback to obtain the disconnection reason from the baseband + */ +/*-----------------------------------------------------------------------------------*/ +void (*l2cap_disconnect_bb(void (*l2ca_disconnect_bb)(struct bd_addr *bdaddr,u8_t reason)))(struct bd_addr *bdaddr,u8_t reason) +{ + void (*oldcb)(struct bd_addr *bdaddr,u8_t reason) = NULL; + oldcb = l2cap_disconnect_bb_cb; + l2cap_disconnect_bb_cb = l2ca_disconnect_bb; + return oldcb; +} + +/*-----------------------------------------------------------------------------------*/ +/* + * l2cap_next_sigid(): + * + * Issues a signal identifier that helps matching a request with the reply. + */ +/*-----------------------------------------------------------------------------------*/ +u8_t l2cap_next_sigid(void) +{ + ++sigid_nxt; + if(sigid_nxt == 0) { + sigid_nxt = 1; + } + return sigid_nxt; +} +/*-----------------------------------------------------------------------------------*/ +/* + * l2cap_arg(): + * + * Used to specify the argument that should be passed callback functions. + */ +/*-----------------------------------------------------------------------------------*/ +void l2cap_arg(struct l2cap_pcb *pcb, void *arg) +{ + pcb->callback_arg = arg; +} + +/*-----------------------------------------------------------------------------------*/ +/* + * l2cap_connect_ind(): + * + * Set the state of the connection to be LISTEN, which means that it is able to accept + * incoming connections. The protocol control block is reallocated in order to consume + * less memory. Setting the connection to LISTEN is an irreversible process. Also + * specify the function that should be called when the channel has received a + * connection request. + */ +/*-----------------------------------------------------------------------------------*/ +err_t l2cap_connect_ind(struct l2cap_pcb *npcb, struct bd_addr *bdaddr, u16_t psm,err_t (* l2ca_connect_ind)(void *arg, struct l2cap_pcb *pcb, err_t err)) +{ + struct l2cap_pcb_listen *lpcb; + + lpcb = btmemb_alloc(&l2cap_listenpcbs); + if(lpcb == NULL) { + ERROR("l2cap_connect_ind: Could not allocate memory for lpcb\n"); + return ERR_MEM; + } + + bd_addr_set(&(lpcb->bdaddr),bdaddr); + lpcb->psm = psm; + lpcb->l2ca_connect_ind = l2ca_connect_ind; + lpcb->state = L2CAP_LISTEN; + lpcb->callback_arg = npcb->callback_arg; + btmemb_free(&l2cap_pcbs, npcb); + L2CAP_REG(&(l2cap_listen_pcbs), lpcb); + return ERR_OK; +} + +/*-----------------------------------------------------------------------------------*/ +/* + * l2cap_disconnect_ind(): + * + * Used to specify the a function to be called when a disconnection request has been + * received from a remote device or the remote device has been disconnected because it + * has failed to respond to a signalling request. + */ +/*-----------------------------------------------------------------------------------*/ +void l2cap_disconnect_ind(struct l2cap_pcb *pcb, err_t (* l2ca_disconnect_ind)(void *arg, struct l2cap_pcb *newpcb, err_t err)) +{ + pcb->l2ca_disconnect_ind = l2ca_disconnect_ind; +} +/*-----------------------------------------------------------------------------------*/ +/* + * l2cap_timeout_ind(): + * + * Used to specify the function to be called when RTX or ERTX timer has expired. + */ +/*-----------------------------------------------------------------------------------*/ +void l2cap_timeout_ind(struct l2cap_pcb *pcb,err_t (* l2ca_timeout_ind)(void *arg, struct l2cap_pcb *newpcb, err_t err)) +{ + pcb->l2ca_timeout_ind = l2ca_timeout_ind; +} +/*-----------------------------------------------------------------------------------*/ +/* + * l2cap_recv(): + * + * Used to specify the function that should be called when a L2CAP connection receives + * data. + */ +/*-----------------------------------------------------------------------------------*/ +void l2cap_recv(struct l2cap_pcb *pcb, err_t (* l2ca_recv)(void *arg, struct l2cap_pcb *pcb, struct pbuf *p, err_t err)) +{ + pcb->l2ca_recv = l2ca_recv; +} +/*-----------------------------------------------------------------------------------*/ diff --git a/wii/libogc/lwbt/l2cap.h b/wii/libogc/lwbt/l2cap.h new file mode 100644 index 0000000000..6ba450d7f1 --- /dev/null +++ b/wii/libogc/lwbt/l2cap.h @@ -0,0 +1,356 @@ +#ifndef __L2CAP_H__ +#define __L2CAP_H__ + +#include "bt.h" +#include "bd_addr.h" + +/* Protocol and service multiplexor */ +#define HIDP_PSM 0x0011 +#define INTR_PSM 0x0013 + +/* Packet header lengths */ +#define L2CAP_HDR_LEN 4 +#define L2CAP_SIGHDR_LEN 4 +#define L2CAP_CFGOPTHDR_LEN 2 + +/* Signals sizes */ +#define L2CAP_CONN_REQ_SIZE 4 +#define L2CAP_CONN_RSP_SIZE 8 +#define L2CAP_CFG_RSP_SIZE 6 +#define L2CAP_DISCONN_RSP_SIZE 4 + +#define L2CAP_CFG_REQ_SIZE 4 + +#define L2CAP_DISCONN_REQ_SIZE 4 +#define L2CAP_CMD_REJ_SIZE 2 + +/* Signal codes */ +#define L2CAP_CMD_REJ 0x01 +#define L2CAP_CONN_REQ 0x02 +#define L2CAP_CONN_RSP 0x03 +#define L2CAP_CFG_REQ 0x04 +#define L2CAP_CFG_RSP 0x05 +#define L2CAP_DISCONN_REQ 0x06 +#define L2CAP_DISCONN_RSP 0x07 +#define L2CAP_ECHO_REQ 0x08 +#define L2CAP_ECHO_RSP 0x09 +#define L2CAP_INFO_REQ 0x0A +#define L2CAP_INFO_RSP 0x0B + +/* Permanent channel identifiers */ +#define L2CAP_NULL_CID 0x0000 +#define L2CAP_SIG_CID 0x0001 +#define L2CAP_CONNLESS_CID 0x0002 + +/* Channel identifiers values */ +#define L2CAP_MIN_CID 0x0040 +#define L2CAP_MAX_CID 0xFFFF + +/* Configuration types */ +#define L2CAP_CFG_MTU 0x01 +#define L2CAP_FLUSHTO 0x02 +#define L2CAP_QOS 0x03 + +/* Configuration types length */ +#define L2CAP_MTU_LEN 2 +#define L2CAP_FLUSHTO_LEN 2 +#define L2CAP_QOS_LEN 22 + +/* Configuration response types */ +#define L2CAP_CFG_SUCCESS 0x0000 +#define L2CAP_CFG_UNACCEPT 0x0001 +#define L2CAP_CFG_REJ 0x0002 +#define L2CAP_CFG_UNKNOWN 0x0003 +#define L2CAP_CFG_TIMEOUT 0xEEEE + +/* QoS types */ +#define L2CAP_QOS_NO_TRAFFIC 0x00 +#define L2CAP_QOS_BEST_EFFORT 0x01 +#define L2CAP_QOS_GUARANTEED 0x02 + +/* Command reject reasons */ +#define L2CAP_CMD_NOT_UNDERSTOOD 0x0000 +#define L2CAP_MTU_EXCEEDED 0x0001 +#define L2CAP_INVALID_CID 0x0002 + +/* Connection response results */ +#define L2CAP_CONN_SUCCESS 0x0000 +#define L2CAP_CONN_PND 0x0001 +#define L2CAP_CONN_REF_PSM 0x0002 +#define L2CAP_CONN_REF_SEC 0x0003 +#define L2CAP_CONN_REF_RES 0x0004 +#define L2CAP_CONN_CFG_TO 0x0005 /* Implementation specific result */ + +/* Echo response results */ +#define L2CAP_ECHO_RCVD 0x00 +#define L2CAP_ECHO_TO 0x01 + +/* L2CAP segmentation */ +#define L2CAP_ACL_START 0x02 +#define L2CAP_ACL_CONT 0x01 + +/* L2CAP config default parameters */ +#define L2CAP_CFG_DEFAULT_INMTU 672 /* Two Baseband DH5 packets (2*341=682) minus the Baseband ACL + headers (2*2=4) and L2CAP header (6) */ +#define L2CAP_CFG_DEFAULT_OUTFLUSHTO 0xFFFF + +/* L2CAP configuration parameter masks */ +#define L2CAP_CFG_IR 0x01 +#define L2CAP_CFG_IN_SUCCESS 0x02 +#define L2CAP_CFG_OUT_SUCCESS 0x04 +#define L2CAP_CFG_OUT_REQ 0x08 + +enum l2cap_state { + L2CAP_CLOSED, L2CAP_LISTEN, W4_L2CAP_CONNECT_RSP, W4_L2CA_CONNECT_RSP, L2CAP_CONFIG, + L2CAP_OPEN, W4_L2CAP_DISCONNECT_RSP, W4_L2CA_DISCONNECT_RSP +}; + +struct l2cap_hdr +{ + u16_t len; + u16_t cid; +} ATTRIBUTE_PACKED; + +struct l2cap_sig_hdr +{ + u8_t code; + u8_t id; + u16_t len; +} ATTRIBUTE_PACKED; + +struct l2cap_cfgopt_hdr +{ + u8_t type; + u8_t len; +} ATTRIBUTE_PACKED; + +/* This structure is used to represent L2CAP signals. */ +struct l2cap_sig { + struct l2cap_sig *next; /* for the linked list, used when putting signals + on a queue */ + struct pbuf *p; /* buffer containing data + L2CAP header */ + u16_t sigid; /* Identification */ + u16_t ertx; /* extended response timeout expired */ + u8_t rtx; /* response timeout expired */ + u8_t nrtx; /* number of retransmissions */ +}; + +struct l2cap_cfg +{ + u16_t inmtu; + u16_t outmtu; + u16_t influshto; + u16_t outflushto; + + struct pbuf *opt; + + u8_t cfgto; + u8_t l2capcfg; +}; + +struct l2cap_seg +{ + struct l2cap_seg *next; + struct bd_addr bdaddr; + struct pbuf *p; + u16_t len; + struct l2cap_hdr *l2caphdr; + struct l2cap_pcb *pcb; /* The L2CAP Protocol Control Block */ +}; + +struct l2cap_pcb { + struct l2cap_pcb *next; /* For the linked list */ + + enum l2cap_state state; /* L2CAP state */ + + void *callback_arg; + + u16_t scid; /* Source CID */ + u16_t dcid; /* Destination CID */ + + u16_t psm; /* Protocol/Service Multiplexer */ + + u16_t ursp_id; /* Signal id to respond to */ + u8_t encrypt; /* encryption mode */ + + struct l2cap_sig *unrsp_sigs; /* List of sent but unresponded signals */ + + struct bd_addr remote_bdaddr; + + struct l2cap_cfg cfg; /* Configuration parameters */ + + /* Upper layer to L2CAP confirmation functions */ + + /* Function to be called when a connection has been set up */ + err_t (* l2ca_connect_cfm)(void *arg, struct l2cap_pcb *pcb, u16_t result, u16_t status); + /* Function to be called when a connection has been closed */ + err_t (* l2ca_disconnect_cfm)(void *arg, struct l2cap_pcb *pcb); + /* Function to be called when a echo reply has been received */ + err_t (* l2ca_pong)(void *arg, struct l2cap_pcb *pcb, u8_t result); + + /* L2CAP to upper layer indication functions */ + + /* Function to be called when a connection indication event occurs */ + err_t (* l2ca_connect_ind)(void *arg, struct l2cap_pcb *pcb, err_t err); + /* Function to be called when a disconnection indication event occurs */ + err_t (* l2ca_disconnect_ind)(void *arg, struct l2cap_pcb *pcb, err_t err); + /* Function to be called when a timeout indication event occurs */ + err_t (* l2ca_timeout_ind)(void *arg, struct l2cap_pcb *newpcb, err_t err); + /* Function to be called when a L2CAP connection receives data */ + err_t (* l2ca_recv)(void *arg, struct l2cap_pcb *pcb, struct pbuf *p, err_t err); +}; + +struct l2cap_pcb_listen { + struct l2cap_pcb_listen *next; /* for the linked list */ + + enum l2cap_state state; /* L2CAP state */ + + void *callback_arg; + + u16_t psm; /* Protocol/Service Multiplexer */ + struct bd_addr bdaddr; /* Device Address */ + + /* Function to call when a connection request has been received + from a remote device. */ + err_t (* l2ca_connect_ind)(void *arg, struct l2cap_pcb *pcb, err_t err); +}; + +#define l2cap_psm(pcb) ((pcb)->psm) + +void l2cap_init(); +struct l2cap_pcb* l2cap_new(void); + +void lp_connect_ind(struct bd_addr *bdaddr); +void lp_connect_cfm(struct bd_addr *bdaddr, u8_t encrypt_mode, err_t err); +void lp_disconnect_ind(struct bd_addr *bdaddr,u8_t reason); + +err_t l2ca_config_req(struct l2cap_pcb *pcb); +err_t l2ca_disconnect_req(struct l2cap_pcb *pcb, err_t (* l2ca_disconnect_cfm)(void *arg, struct l2cap_pcb *pcb)); +err_t l2ca_datawrite(struct l2cap_pcb *pcb, struct pbuf *p); +err_t l2ca_ping(struct bd_addr *bdaddr, struct l2cap_pcb *tpcb,err_t (* l2ca_pong)(void *arg, struct l2cap_pcb *pcb, u8_t result)); +err_t l2ca_connect_req(struct l2cap_pcb *pcb, struct bd_addr *bdaddr, u16_t psm, u8_t role_switch, err_t (* l2ca_connect_cfm)(void *arg, struct l2cap_pcb *lpcb,u16_t result, u16_t status)); + +void l2cap_tmr(); +void l2cap_input(struct pbuf *p, struct bd_addr *bdaddr); +err_t l2cap_close(struct l2cap_pcb *pcb); +void l2cap_reset_all(void); +u8_t l2cap_next_sigid(void); +err_t l2cap_write(struct bd_addr *bdaddr, struct pbuf *p, u16_t len); +void l2cap_arg(struct l2cap_pcb *pcb, void *arg); +void l2cap_disconnect_ind(struct l2cap_pcb *pcb, err_t (* l2ca_disconnect_ind)(void *arg, struct l2cap_pcb *newpcb, err_t err)); +void l2cap_timeout_ind(struct l2cap_pcb *pcb,err_t (* l2ca_timeout_ind)(void *arg, struct l2cap_pcb *newpcb, err_t err)); +void l2cap_recv(struct l2cap_pcb *pcb, err_t (* l2ca_recv)(void *arg, struct l2cap_pcb *pcb, struct pbuf *p, err_t err)); +err_t l2cap_signal(struct l2cap_pcb *pcb, u8_t code, u16_t ursp_id, struct bd_addr *remote_bdaddr, struct pbuf *data); +void l2cap_process_sig(struct pbuf *q, struct l2cap_hdr *l2caphdr, struct bd_addr *bdaddr); + +err_t l2cap_rexmit_signal(struct l2cap_pcb *pcb, struct l2cap_sig *sig); +err_t l2cap_connect_ind(struct l2cap_pcb *npcb, struct bd_addr *bdaddr, u16_t psm,err_t (* l2ca_connect_ind)(void *arg, struct l2cap_pcb *pcb, err_t err)); + +void (*l2cap_disconnect_bb(void (*l2ca_disconnect_bb)(struct bd_addr *bdaddr,u8_t reason)))(struct bd_addr *bdaddr,u8_t reason); + +/* Internal functions and global variables */ +#define L2CA_ACTION_CONN_CFM(pcb,result,status,ret) if((pcb)->l2ca_connect_cfm != NULL) (ret = (pcb)->l2ca_connect_cfm((pcb)->callback_arg,(pcb),(result),(status))) +#define L2CA_ACTION_DISCONN_CFM(pcb,ret) if((pcb)->l2ca_disconnect_cfm != NULL) (ret = (pcb)->l2ca_disconnect_cfm((pcb)->callback_arg,(pcb))) +#define L2CA_ACTION_PING_CFM(pcb,result,ret) if((pcb)->l2ca_pong != NULL) (ret = (pcb)->l2ca_pong((pcb)->callback_arg,(pcb),(result))) + +#define L2CA_ACTION_CONN_IND(pcb,err,ret) if((pcb)->l2ca_connect_ind != NULL) (ret = (pcb)->l2ca_connect_ind((pcb)->callback_arg,(pcb),(err))) +#define L2CA_ACTION_DISCONN_IND(pcb,err,ret) \ + if((pcb)->l2ca_disconnect_ind != NULL) { \ + LOG("l2cap_disconnect_ind called\n"); \ + (ret = (pcb)->l2ca_disconnect_ind((pcb)->callback_arg,(pcb),(err))); \ + } else { \ + l2cap_close(pcb); \ + } +#define L2CA_ACTION_TO_IND(pcb,err,ret) if((pcb)->l2ca_timeout_ind != NULL) (ret = (pcb)->l2ca_timeout_ind((pcb)->callback_arg,(pcb),(err))) +#define L2CA_ACTION_RECV(pcb,p,err,ret) \ + if((pcb)->l2ca_recv != NULL) { \ + (ret = (pcb)->l2ca_recv((pcb)->callback_arg,(pcb),(p),(err))); \ + } else { \ + btpbuf_free(p); \ + } + +#define L2CAP_OPTH_TYPE(hdr) (((hdr)->type) & 0x7f) +#define L2CAP_OPTH_TOA(hdr) (((hdr)->type) >> 7) + +/* The L2CAP PCB lists. */ +extern struct l2cap_pcb_listen *l2cap_listen_pcbs; /* List of all L2CAP PCBs in CLOSED state + but awaing an incoming conn req. */ +extern struct l2cap_pcb *l2cap_active_pcbs; /* List of all L2CAP PCBs that has + established or is about to establish + an ACL link */ + +extern struct l2cap_pcb *l2cap_tmp_pcb; /* Only used for temporary storage. */ + +#define L2CAP_REG(pcbs, npcb) do { \ + u32 level; \ + _CPU_ISR_Disable(level); \ + npcb->next = *pcbs; \ + *pcbs = npcb; \ + _CPU_ISR_Restore(level); \ + } while(0) +#define L2CAP_RMV(pcbs, npcb) do { \ + u32 level; \ + _CPU_ISR_Disable(level); \ + if(*pcbs == npcb) { \ + *pcbs = (*pcbs)->next; \ + } else for(l2cap_tmp_pcb = *pcbs; l2cap_tmp_pcb != NULL; l2cap_tmp_pcb = l2cap_tmp_pcb->next) { \ + if(l2cap_tmp_pcb->next != NULL && l2cap_tmp_pcb->next == npcb) { \ + l2cap_tmp_pcb->next = npcb->next; \ + break; \ + } \ + } \ + npcb->next = NULL; \ + _CPU_ISR_Restore(level); \ + } while(0) + +/* The L2CAP SIG list macros */ +extern struct l2cap_sig *l2cap_tmp_sig; /* Only used for temporary storage. */ + +#define L2CAP_SIG_REG(ursp_sigs, nsig) do { \ + u32 level; \ + _CPU_ISR_Disable(level); \ + nsig->next = *ursp_sigs; \ + *ursp_sigs = nsig; \ + _CPU_ISR_Restore(level); \ + } while(0) +#define L2CAP_SIG_RMV(ursp_sigs, nsig) do { \ + u32 level; \ + _CPU_ISR_Disable(level); \ + if(*ursp_sigs == nsig) { \ + *ursp_sigs = (*ursp_sigs)->next; \ + } else for(l2cap_tmp_sig = *ursp_sigs; l2cap_tmp_sig != NULL; l2cap_tmp_sig = l2cap_tmp_sig->next) { \ + if(l2cap_tmp_sig->next != NULL && l2cap_tmp_sig->next == nsig) { \ + l2cap_tmp_sig->next = nsig->next; \ + break; \ + } \ + } \ + nsig->next = NULL; \ + _CPU_ISR_Restore(level); \ + } while(0) + +/* The L2CAP incoming segments list macros */ +extern struct l2cap_seg *l2cap_tmp_inseg; /* Only used for temporary storage. */ + +#define L2CAP_SEG_REG(segs, nseg) do { \ + u32 level; \ + _CPU_ISR_Disable(level); \ + nseg->next = *segs; \ + *segs = nseg; \ + _CPU_ISR_Restore(level); \ + } while(0) +#define L2CAP_SEG_RMV(segs, nseg) do { \ + u32 level; \ + _CPU_ISR_Disable(level); \ + if(*segs == nseg) { \ + *segs = (*segs)->next; \ + } else for(l2cap_tmp_inseg = *segs; l2cap_tmp_inseg != NULL; l2cap_tmp_inseg = l2cap_tmp_inseg->next) { \ + if(l2cap_tmp_inseg->next != NULL && l2cap_tmp_inseg->next == nseg) { \ + l2cap_tmp_inseg->next = nseg->next; \ + break; \ + } \ + } \ + nseg->next = NULL; \ + _CPU_ISR_Restore(level); \ + } while(0) + +#endif diff --git a/wii/libogc/lwbt/physbusif.c b/wii/libogc/lwbt/physbusif.c new file mode 100644 index 0000000000..669b6a6548 --- /dev/null +++ b/wii/libogc/lwbt/physbusif.c @@ -0,0 +1,342 @@ +#include +#include +#include +#include +#include +#include +#include + +#include "hci.h" +#include "btmemb.h" +#include "physbusif.h" + +#define STACKSIZE 32768 + +#define NUM_ACL_BUFS 30 +#define NUM_CTRL_BUFS 45 + +#define ACL_BUF_SIZE 1800 +#define CTRL_BUF_SIZE 660 + +#define ROUNDUP32(v) (((u32)(v)+0x1f)&~0x1f) +#define ROUNDDOWN32(v) (((u32)(v)-0x1f)&~0x1f) + +struct usbtxbuf +{ + u32 txsize; + void *rpData; +}; + +static u32 __ntd_ohci = 0; +static u32 __ntd_ohci_initflag = 0; +static u16 __ntd_vid = 0; +static u16 __ntd_pid = 0; +static u32 __ntd_vid_pid_specified = 0; +static s32 __ntd_usb_fd = -1; +static u32 __wait4hci = 1; +static struct _usb_p __usbdev; + +static struct memb_blks ctrlbufs; +static struct memb_blks aclbufs; + +static u8 __ppc_btstack1[STACKSIZE] ATTRIBUTE_ALIGN(8); +static u8 __ppc_btstack2[STACKSIZE] ATTRIBUTE_ALIGN(8); + +static s32 __issue_bulkread(); +static s32 __issue_intrread(); + +extern u32 __IPC_ClntInit(); + +static s32 __usb_closeCB(s32 result,void *usrdata) +{ + __usbdev.fd = -1; + return result; +} + +static s32 __writectrlmsgCB(s32 result,void *usrdata) +{ + if(usrdata!=NULL) btmemb_free(&ctrlbufs,usrdata); + return result; +} + +static s32 __writebulkmsgCB(s32 result,void *usrdata) +{ + if(usrdata!=NULL) btmemb_free(&aclbufs,usrdata); + return result; +} + +static s32 __readbulkdataCB(s32 result,void *usrdata) +{ + u8 *ptr; + u32 len; + struct pbuf *p,*q; + struct usbtxbuf *buf = (struct usbtxbuf*)usrdata; + + if(__usbdev.openstate!=0x0002) return 0; + + if(result>0) { + len = result; + p = btpbuf_alloc(PBUF_RAW,len,PBUF_POOL); + if(p!=NULL) { + ptr = buf->rpData; + for(q=p;q!=NULL && len>0;q=q->next) { + memcpy(q->payload,ptr,q->len); + ptr += q->len; + len -= q->len; + } + + SYS_SwitchFiber((u32)p,0,0,0,(u32)hci_acldata_handler,(u32)(&__ppc_btstack2[STACKSIZE])); + btpbuf_free(p); + } else + ERROR("__readbulkdataCB: Could not allocate memory for pbuf.\n"); + } + btmemb_free(&aclbufs,buf); + + return __issue_bulkread(); +} + +static s32 __readintrdataCB(s32 result,void *usrdata) +{ + u8 *ptr; + u32 len; + struct pbuf *p,*q; + struct usbtxbuf *buf = (struct usbtxbuf*)usrdata; + + if(__usbdev.openstate!=0x0002) return 0; + + if(result>0) { + len = result; + p = btpbuf_alloc(PBUF_RAW,len,PBUF_POOL); + if(p!=NULL) { + ptr = buf->rpData; + for(q=p;q!=NULL && len>0;q=q->next) { + memcpy(q->payload,ptr,q->len); + ptr += q->len; + len -= q->len; + } + + SYS_SwitchFiber((u32)p,0,0,0,(u32)hci_event_handler,(u32)(&__ppc_btstack1[STACKSIZE])); + btpbuf_free(p); + } else + ERROR("__readintrdataCB: Could not allocate memory for pbuf.\n"); + } + btmemb_free(&ctrlbufs,buf); + + return __issue_intrread(); +} + +static s32 __issue_intrread() +{ + s32 ret; + u32 len; + u8 *ptr; + struct usbtxbuf *buf; + + if(__usbdev.openstate!=0x0002) return IPC_OK; + + buf = (struct usbtxbuf*)btmemb_alloc(&ctrlbufs); + if(buf!=NULL) { + ptr = (u8*)((u32)buf + sizeof(struct usbtxbuf)); + buf->rpData = (void*)ROUNDUP32(ptr); + len = (ctrlbufs.size - ((u32)buf->rpData - (u32)buf)); + buf->txsize = ROUNDDOWN32(len); + ret = USB_ReadIntrMsgAsync(__usbdev.fd,__usbdev.hci_evt,buf->txsize,buf->rpData,__readintrdataCB,buf); + } else + ret = IPC_ENOMEM; + + return ret; +} + +static s32 __issue_bulkread() +{ + s32 ret; + u32 len; + u8 *ptr; + struct usbtxbuf *buf; + + if(__usbdev.openstate!=0x0002) return IPC_OK; + + buf = (struct usbtxbuf*)btmemb_alloc(&aclbufs); + if(buf!=NULL) { + ptr = (u8*)((u32)buf + sizeof(struct usbtxbuf)); + buf->rpData = (void*)ROUNDUP32(ptr); + len = (aclbufs.size - ((u32)buf->rpData - (u32)buf)); + buf->txsize = ROUNDDOWN32(len); + ret = USB_ReadBlkMsgAsync(__usbdev.fd,__usbdev.acl_in,buf->txsize,buf->rpData,__readbulkdataCB,buf); + } else + ret = IPC_ENOMEM; + + return ret; +} + +static s32 __initUsbIOBuffer(struct memb_blks *blk,u32 buf_size,u32 num_bufs) +{ + u32 len; + u8 *ptr = NULL; + + len = ((MEM_ALIGN_SIZE(buf_size)+sizeof(u32))*num_bufs); + ptr = (u8*)ROUNDDOWN32(((u32)SYS_GetArena2Hi() - len)); + if((u32)ptr<(u32)SYS_GetArena2Lo()) return -4; + + SYS_SetArena2Hi(ptr); + + blk->size = buf_size; + blk->num = num_bufs; + blk->mem = ptr; + + btmemb_init(blk); + return 0; +} + +static s32 __getDeviceId(u16 vid,u16 pid) +{ + s32 ret = 0; + + if(__ntd_ohci_initflag==0x0001) { + if(__ntd_ohci==0x0000) + ret = USB_OpenDevice(USB_OH0_DEVICE_ID,vid,pid,&__usbdev.fd); + else if(__ntd_ohci==0x0001) + ret = USB_OpenDevice(USB_OH1_DEVICE_ID,vid,pid,&__usbdev.fd); + } else + ret = USB_OpenDevice(USB_OH1_DEVICE_ID,vid,pid,&__usbdev.fd); + + //printf("__getDeviceId(%04x,%04x,%d)\n",vid,pid,__usbdev.fd); + if(ret==0) __ntd_usb_fd = __usbdev.fd; + return ret; +} + +static s32 __usb_register(pbcallback cb) +{ + s32 ret = 0; + + memset(&__usbdev,0,sizeof(struct _usb_p)); + __usbdev.openstate = 5; + + ret = __IPC_ClntInit(); + if(ret<0) return ret; + + ret = USB_Initialize(); + if(ret<0) return ret; + + __usbdev.fd = -1; + __usbdev.unregcb = cb; + if(__ntd_vid_pid_specified) { + __usbdev.vid = __ntd_vid; + __usbdev.pid = __ntd_pid; + } else { + __usbdev.vid = 0x057E; + __usbdev.pid = 0x0305; + } + + ret = __getDeviceId(__usbdev.vid,__usbdev.pid); + if(ret<0) return ret; + + __usbdev.acl_out = 0x02; + __usbdev.acl_in = 0x82; + __usbdev.hci_evt = 0x81; + __usbdev.hci_ctrl = 0x00; + + __initUsbIOBuffer(&ctrlbufs,CTRL_BUF_SIZE,NUM_CTRL_BUFS); + __initUsbIOBuffer(&aclbufs,ACL_BUF_SIZE,NUM_ACL_BUFS); + + __usbdev.openstate = 4; + __wait4hci = 1; + + return ret; +} + +static s32 __usb_open(pbcallback cb) +{ + if(__usbdev.openstate!=0x0004) return -1; + + __usbdev.closecb = cb; + __usbdev.openstate = 2; + + __issue_intrread(); + __issue_bulkread(); + + __wait4hci = 0; + return 0; +} + +void __ntd_set_ohci(u8 hci) +{ + if(hci==0x0000) { + __ntd_ohci = 0; + __ntd_ohci_initflag = 1; + } else if(hci==0x0001) { + __ntd_ohci = 1; + __ntd_ohci_initflag = 1; + } +} + +void __ntd_set_pid_vid(u16 vid,u16 pid) +{ + __ntd_vid = vid; + __ntd_pid = pid; + __ntd_vid_pid_specified = 1; +} + + +void physbusif_init() +{ + s32 ret; + + ret = __usb_register(NULL); + if(ret<0) return; + + __usb_open(NULL); +} + +void physbusif_close() +{ + if(__usbdev.openstate!=0x0002) return; + + __usbdev.openstate = 4; + __wait4hci = 1; +} + +void physbusif_shutdown() +{ + if(__usbdev.openstate!=0x0004) return; + USB_CloseDeviceAsync(&__usbdev.fd,__usb_closeCB,NULL); +} + +void physbusif_reset_all() +{ + return; +} + +void physbusif_output(struct pbuf *p,u16_t len) +{ + u32 pos; + u8 *ptr; + struct pbuf *q; + struct memb_blks *mblks; + struct usbtxbuf *blkbuf; + + if(__usbdev.openstate!=0x0002) return; + + if(((u8*)p->payload)[0]==HCI_COMMAND_DATA_PACKET) mblks = &ctrlbufs; + else if(((u8*)p->payload)[0]==HCI_ACL_DATA_PACKET) mblks = &aclbufs; + else return; + + blkbuf = btmemb_alloc(mblks); + if(blkbuf!=NULL) { + blkbuf->txsize = --len; + blkbuf->rpData = (void*)ROUNDUP32(((u32)blkbuf+sizeof(struct usbtxbuf))); + + ptr = blkbuf->rpData; + for(q=p,pos=1;q!=NULL && len>0;q=q->next,pos=0) { + memcpy(ptr,q->payload+pos,(q->len-pos)); + ptr += (q->len-pos); + len -= (q->len-pos); + } + + if(((u8*)p->payload)[0]==HCI_COMMAND_DATA_PACKET) { + USB_WriteCtrlMsgAsync(__usbdev.fd,0x20,0,0,0,blkbuf->txsize,blkbuf->rpData,__writectrlmsgCB,blkbuf); + } else if(((u8*)p->payload)[0]==HCI_ACL_DATA_PACKET) { + USB_WriteBlkMsgAsync(__usbdev.fd,__usbdev.acl_out,blkbuf->txsize,blkbuf->rpData,__writebulkmsgCB,blkbuf); + } + } +} diff --git a/wii/libogc/lwbt/physbusif.h b/wii/libogc/lwbt/physbusif.h new file mode 100644 index 0000000000..8565c5a690 --- /dev/null +++ b/wii/libogc/lwbt/physbusif.h @@ -0,0 +1,29 @@ +#ifndef __PHYSBUSIF_H__ +#define __PHYSBUSIF_H__ + +#include "btpbuf.h" + +typedef struct _usb_p usb_p; +typedef s32 (*pbcallback)(s32 state,s32 result,usb_p *usb); + +struct _usb_p +{ + s32 fd; + u8 acl_out; + u8 acl_in; + u8 hci_evt; + u8 hci_ctrl; + u32 vid; + u32 pid; + u8 openstate; + pbcallback closecb; + pbcallback unregcb; +}; + +void physbusif_init(); +void physbusif_close(); +void physbusif_shutdown(); +void physbusif_reset_all(); +void physbusif_output(struct pbuf *p,u16_t len); + +#endif diff --git a/wii/libogc/lwip/arch/gc/netif/gcif.c b/wii/libogc/lwip/arch/gc/netif/gcif.c new file mode 100644 index 0000000000..31cbb90257 --- /dev/null +++ b/wii/libogc/lwip/arch/gc/netif/gcif.c @@ -0,0 +1,1042 @@ +#include +#include "asm.h" +#include "processor.h" +#include "spinlock.h" +#include "irq.h" +#include "exi.h" +#include "cache.h" +#include "ogcsys.h" +#include "lwp.h" +#include "lwp_threads.h" +#include "lwp_watchdog.h" +#include "lwip/debug.h" +#include "lwip/opt.h" +#include "lwip/def.h" +#include "lwip/mem.h" +#include "lwip/pbuf.h" +#include "lwip/sys.h" +#include "netif/etharp.h" + +#include "netif/gcif/gcif.h" + +//#define _BBA_DEBUG + +#define IFNAME0 'e' +#define IFNAME1 '0' + +#define GCIF_TX_TQ 8 +#define GCIF_EXI_TQ 9 + +#define BBA_MINPKTSIZE 60 + +#define BBA_CID 0x04020200 + +#define BBA_CMD_IRMASKALL 0x00 +#define BBA_CMD_IRMASKNONE 0xF8 + +#define BBA_NCRA 0x00 /* Network Control Register A, RW */ +#define BBA_NCRA_RESET (1<<0) /* RESET */ +#define BBA_NCRA_ST0 (1<<1) /* ST0, Start transmit command/status */ +#define BBA_NCRA_ST1 (1<<2) /* ST1, " */ +#define BBA_NCRA_SR (1<<3) /* SR, Start Receive */ + +#define BBA_NCRB 0x01 /* Network Control Register B, RW */ +#define BBA_NCRB_PR (1<<0) /* PR, Promiscuous Mode */ +#define BBA_NCRB_CA (1<<1) /* CA, Capture Effect Mode */ +#define BBA_NCRB_PM (1<<2) /* PM, Pass Multicast */ +#define BBA_NCRB_PB (1<<3) /* PB, Pass Bad Frame */ +#define BBA_NCRB_AB (1<<4) /* AB, Accept Broadcast */ +#define BBA_NCRB_HBD (1<<5) /* HBD, reserved */ +#define BBA_NCRB_RXINTC0 (1<<6) /* RXINTC, Receive Interrupt Counter */ +#define BBA_NCRB_RXINTC1 (1<<7) /* " */ +#define BBA_NCRB_1_PACKET_PER_INT (0<<6) /* 0 0 */ +#define BBA_NCRB_2_PACKETS_PER_INT (1<<6) /* 0 1 */ +#define BBA_NCRB_4_PACKETS_PER_INT (2<<6) /* 1 0 */ +#define BBA_NCRB_8_PACKETS_PER_INT (3<<6) /* 1 1 */ + +#define BBA_LTPS 0x04 /* Last Transmitted Packet Status, RO */ +#define BBA_LRPS 0x05 /* Last Received Packet Status, RO */ + +#define BBA_IMR 0x08 /* Interrupt Mask Register, RW, 00h */ +#define BBA_IMR_FRAGIM (1<<0) /* FRAGIM, Fragment Counter Int Mask */ +#define BBA_IMR_RIM (1<<1) /* RIM, Receive Interrupt Mask */ +#define BBA_IMR_TIM (1<<2) /* TIM, Transmit Interrupt Mask */ +#define BBA_IMR_REIM (1<<3) /* REIM, Receive Error Interrupt Mask */ +#define BBA_IMR_TEIM (1<<4) /* TEIM, Transmit Error Interrupt Mask */ +#define BBA_IMR_FIFOEIM (1<<5) /* FIFOEIM, FIFO Error Interrupt Mask */ +#define BBA_IMR_BUSEIM (1<<6) /* BUSEIM, BUS Error Interrupt Mask */ +#define BBA_IMR_RBFIM (1<<7) /* RBFIM, RX Buffer Full Interrupt Mask */ + +#define BBA_IR 0x09 /* Interrupt Register, RW, 00h */ +#define BBA_IR_FRAGI (1<<0) /* FRAGI, Fragment Counter Interrupt */ +#define BBA_IR_RI (1<<1) /* RI, Receive Interrupt */ +#define BBA_IR_TI (1<<2) /* TI, Transmit Interrupt */ +#define BBA_IR_REI (1<<3) /* REI, Receive Error Interrupt */ +#define BBA_IR_TEI (1<<4) /* TEI, Transmit Error Interrupt */ +#define BBA_IR_FIFOEI (1<<5) /* FIFOEI, FIFO Error Interrupt */ +#define BBA_IR_BUSEI (1<<6) /* BUSEI, BUS Error Interrupt */ +#define BBA_IR_RBFI (1<<7) /* RBFI, RX Buffer Full Interrupt */ + +#define BBA_BP 0x0a/*+0x0b*/ /* Boundary Page Pointer Register */ +#define BBA_TLBP 0x0c/*+0x0d*/ /* TX Low Boundary Page Pointer Register */ +#define BBA_TWP 0x0e/*+0x0f*/ /* Transmit Buffer Write Page Pointer Register */ +#define BBA_TRP 0x12/*+0x13*/ /* Transmit Buffer Read Page Pointer Register */ +#define BBA_RWP 0x16/*+0x17*/ /* Receive Buffer Write Page Pointer Register */ +#define BBA_RRP 0x18/*+0x19*/ /* Receive Buffer Read Page Pointer Register */ +#define BBA_RHBP 0x1a/*+0x1b*/ /* Receive High Boundary Page Pointer Register */ + +#define BBA_RXINTT 0x14/*+0x15*/ /* Receive Interrupt Timer Register */ + +#define BBA_NAFR_PAR0 0x20 /* Physical Address Register Byte 0 */ +#define BBA_NAFR_PAR1 0x21 /* Physical Address Register Byte 1 */ +#define BBA_NAFR_PAR2 0x22 /* Physical Address Register Byte 2 */ +#define BBA_NAFR_PAR3 0x23 /* Physical Address Register Byte 3 */ +#define BBA_NAFR_PAR4 0x24 /* Physical Address Register Byte 4 */ +#define BBA_NAFR_PAR5 0x25 /* Physical Address Register Byte 5 */ + +#define BBA_NWAYC 0x30 /* NWAY Configuration Register, RW, 84h */ +#define BBA_NWAYC_FD (1<<0) /* FD, Full Duplex Mode */ +#define BBA_NWAYC_PS100 (1<<1) /* PS100/10, Port Select 100/10 */ +#define BBA_NWAYC_ANE (1<<2) /* ANE, Autonegotiation Enable */ +#define BBA_NWAYC_ANS_RA (1<<3) /* ANS, Restart Autonegotiation */ +#define BBA_NWAYC_LTE (1<<7) /* LTE, Link Test Enable */ + +#define BBA_HALF_100 (BBA_NWAYC_PS100) +#define BBA_FULL_100 (BBA_NWAYC_PS100|BBA_NWAYC_FD) +#define BBA_HALF_10 (BBA_NWAYC_ANE) +#define BBA_FULL_10 (BBA_NWAYC_FD) + +#define BBA_NWAYS 0x31 +#define BBA_NWAYS_LS10 (1<<0) +#define BBA_NWAYS_LS100 (1<<1) +#define BBA_NWAYS_LPNWAY (1<<2) +#define BBA_NWAYS_ANCLPT (1<<3) +#define BBA_NWAYS_100TXF (1<<4) +#define BBA_NWAYS_100TXH (1<<5) +#define BBA_NWAYS_10TXF (1<<6) +#define BBA_NWAYS_10TXH (1<<7) + +#define BBA_GCA 0x32 /* GMAC Configuration A Register, RW, 00h */ +#define BBA_GCA_ARXERRB (1<<3) /* ARXERRB, Accept RX packet with error */ +#define BBA_GCA_TXFIFOCNTEN (1<<6) /* TX FIFO cnt enable */ + +#define BBA_MISC 0x3d /* MISC Control Register 1, RW, 3ch */ +#define BBA_MISC_BURSTDMA (1<<0) +#define BBA_MISC_DISLDMA (1<<1) + +#define BBA_TXFIFOCNT 0x3e/*0x3f*/ /* Transmit FIFO Counter Register */ +#define BBA_WRTXFIFOD 0x48/*-0x4b*/ /* Write TX FIFO Data Port Register */ + +#define BBA_MISC2 0x50 /* MISC Control Register 2, RW, 00h */ +#define BBA_MISC2_HBRLEN0 (1<<0) /* HBRLEN, Host Burst Read Length */ +#define BBA_MISC2_HBRLEN1 (1<<1) /* " */ +#define BBA_MISC2_RUNTSIZE (1<<2) /* " */ +#define BBA_MISC2_DREQBCTRL (1<<3) /* " */ +#define BBA_MISC2_RINTSEL (1<<4) /* " */ +#define BBA_MISC2_ITPSEL (3<<5) /* " */ +#define BBA_MISC2_AUTORCVR (1<<7) /* Auto RX Full Recovery */ + +#define BBA_RX_STATUS_BF (1<<0) +#define BBA_RX_STATUS_CRC (1<<1) +#define BBA_RX_STATUS_FAE (1<<2) +#define BBA_RX_STATUS_FO (1<<3) +#define BBA_RX_STATUS_RW (1<<4) +#define BBA_RX_STATUS_MF (1<<5) +#define BBA_RX_STATUS_RF (1<<6) +#define BBA_RX_STATUS_RERR (1<<7) + +#define BBA_TX_STATUS_CC0 (1<<0) +#define BBA_TX_STATUS_CC1 (1<<1) +#define BBA_TX_STATUS_CC2 (1<<2) +#define BBA_TX_STATUS_CC3 (1<<3) +#define BBA_TX_STATUS_CCMASK (0x0f) +#define BBA_TX_STATUS_CRSLOST (1<<4) +#define BBA_TX_STATUS_UF (1<<5) +#define BBA_TX_STATUS_OWC (1<<6) +#define BBA_TX_STATUS_OWN (1<<7) +#define BBA_TX_STATUS_TERR (1<<7) + +#define BBA_SI_ACTRL 0x5c +#define BBA_SI_STATUS 0x5d +#define BBA_SI_ACTRL2 0x60 + +#define BBA_INIT_TLBP 0x00 +#define BBA_INIT_BP 0x01 +#define BBA_INIT_RHBP 0x0f +#define BBA_INIT_RWP BBA_INIT_BP +#define BBA_INIT_RRP BBA_INIT_BP + +#define BBA_TX_MAX_PACKET_SIZE (1518) /* 14+1500+4 */ +#define BBA_RX_MAX_PACKET_SIZE (1536) /* 6 pages * 256 bytes */ + +#define BBA_NAPI_WEIGHT 16 + + +#define X(a,b) b,a +struct bba_descr { + u32 X(X(next_packet_ptr:12, packet_len:12), status:8); +} __attribute((packed)); + +#define _SHIFTL(v, s, w) \ + ((u32) (((u32)(v) & ((0x01 << (w)) - 1)) << (s))) +#define _SHIFTR(v, s, w) \ + ((u32)(((u32)(v) >> (s)) & ((0x01 << (w)) - 1))) + + +struct bba_priv { + u8 flag; + u8 revid; + u16 devid; + u8 acstart; + u8 linkstate; + lwpq_t tq_xmit; + err_t state; + struct eth_addr *ethaddr; + struct dev_stats { + u32 rx_errors,rx_overerrors,rx_crcerrors; + u32 rx_fifoerrors,rx_lengtherrors,rx_frameerrors; + u32 rx_bytes,rx_packets; + u32 tx_errors,tx_carriererrors,tx_fifoerrors; + u32 tx_windowerrors,tx_collisions; + } txrx_stats; +}; + +static lwpq_t wait_exi_queue; +static struct bba_descr cur_descr; +static struct netif *gc_netif = NULL; +static const struct eth_addr ethbroadcast = {{0xffU,0xffU,0xffU,0xffU,0xffU,0xffU}}; + +static err_t __bba_link_tx(struct netif *dev,struct pbuf *p); +static u32 __bba_rx_err(u8 status,struct bba_priv *priv); + +extern void udelay(int us); + +/* new functions */ +#define bba_select() EXI_Select(EXI_CHANNEL_0,EXI_DEVICE_2,EXI_SPEED32MHZ) +#define bba_deselect() EXI_Deselect(EXI_CHANNEL_0) +#define bba_sync() EXI_Sync(EXI_CHANNEL_0) + +#define bba_in12(reg) ((bba_in8((reg))&0xff)|((bba_in8(((reg)+1))&0x0f)<<8)) +#define bba_out12(reg,val) do { \ + bba_out8((reg),((val)&0xff)); \ + bba_out8(((reg)+1),(((val)&0x0f00)>>8)); \ + } while(0) +#define bba_in16(reg) ((bba_in8((reg))&0xff)|((bba_in8(((reg)+1))&0xff)<<8)) +#define bba_out16(reg,val) do { \ + bba_out8((reg),((val)&0xff)); \ + bba_out8(((reg)+1),(((val)&0xff00)>>8)); \ + } while(0) + +static __inline__ void bba_cmd_insnosel(u32 reg,void *val,u32 len) +{ + u16 req; + req = reg<<8; + EXI_Imm(EXI_CHANNEL_0,&req,sizeof(req),EXI_WRITE,NULL); + EXI_Sync(EXI_CHANNEL_0); + EXI_ImmEx(EXI_CHANNEL_0,val,len,EXI_READ); +} + +static __inline__ void bba_cmd_outsnosel(u32 reg,void *val,u32 len) +{ + u16 req; + req = (reg<<8)|0x4000; + EXI_Imm(EXI_CHANNEL_0,&req,sizeof(req),EXI_WRITE,NULL); + EXI_Sync(EXI_CHANNEL_0); + EXI_ImmEx(EXI_CHANNEL_0,val,len,EXI_WRITE); +} + +static __inline__ void bba_insnosel(u32 reg,void *val,u32 len) +{ + u32 req; + req = (reg<<8)|0x80000000; + EXI_Imm(EXI_CHANNEL_0,&req,sizeof(req),EXI_WRITE,NULL); + EXI_Sync(EXI_CHANNEL_0); + EXI_ImmEx(EXI_CHANNEL_0,val,len,EXI_READ); +} + +static __inline__ void bba_outsnosel(u32 reg,void *val,u32 len) +{ + u32 req; + req = (reg<<8)|0xC0000000; + EXI_Imm(EXI_CHANNEL_0,&req,sizeof(req),EXI_WRITE,NULL); + EXI_Sync(EXI_CHANNEL_0); + EXI_ImmEx(EXI_CHANNEL_0,val,len,EXI_WRITE); +} + +static __inline__ void bba_insregister(u32 reg) +{ + u32 req; + req = (reg<<8)|0x80000000; + EXI_Imm(EXI_CHANNEL_0,&req,sizeof(req),EXI_WRITE,NULL); + EXI_Sync(EXI_CHANNEL_0); +} + +static __inline__ void bba_insdata(void *val,u32 len) +{ + EXI_ImmEx(EXI_CHANNEL_0,val,len,EXI_READ); +} + +static __inline__ void bba_insdmadata(void *val,u32 len,s32 (*dmasubrcv)(s32 chn,s32 dev)) +{ + EXI_Dma(EXI_CHANNEL_0,val,len,EXI_READ,dmasubrcv); +} + +static void bba_insdata_fast(void *val,s32 len) +{ + u32 roundlen; + s32 missalign; + u8 *ptr = val; + + if(!val || len<=0) return; + + missalign = -((u32)val)&0x1f; + if((s32)(len-missalign)<32) { + bba_insdata(val,len); + return; + } + + if(missalign>0) { + bba_insdata(ptr,missalign); + len -= missalign; + ptr += missalign; + } + + roundlen = (len&~0x1f); + DCInvalidateRange(ptr,roundlen); + bba_insdmadata(ptr,roundlen,NULL); + bba_sync(); + + len -= roundlen; + ptr += roundlen; + if(len>0) bba_insdata(ptr,len); +} + +static __inline__ void bba_outsregister(u32 reg) +{ + u32 req; + req = (reg<<8)|0xC0000000; + EXI_Imm(EXI_CHANNEL_0,&req,sizeof(req),EXI_WRITE,NULL); + EXI_Sync(EXI_CHANNEL_0); +} + +static __inline__ void bba_outsdata(void *val,u32 len) +{ + EXI_ImmEx(EXI_CHANNEL_0,val,len,EXI_WRITE); +} + +static __inline__ void bba_outsdmadata(void *val,u32 len,s32 (*dmasubsnd)(s32 chn,s32 dev)) +{ + EXI_Dma(EXI_CHANNEL_0,val,len,EXI_WRITE,dmasubsnd); +} + +static void bba_outsdata_fast(void *val,s32 len) +{ + u32 roundlen; + s32 missalign; + u8 *ptr = val; + + if(!val || len<=0) return; + + missalign = -((u32)val)&0x1f; + if((s32)(len-missalign)<32) { + bba_outsdata(val,len); + return; + } + + if(missalign>0) { + bba_outsdata(ptr,missalign); + len -= missalign; + ptr += missalign; + } + + roundlen = (len&~0x1f); + DCStoreRange(ptr,roundlen); + bba_outsdmadata(ptr,roundlen,NULL); + bba_sync(); + + len -= roundlen; + ptr += roundlen; + if(len>0) bba_outsdata(ptr,len); +} + +static inline void bba_cmd_ins(u32 reg,void *val,u32 len) +{ + bba_select(); + bba_cmd_insnosel(reg,val,len); + bba_deselect(); +} + +static inline void bba_cmd_outs(u32 reg,void *val,u32 len) +{ + bba_select(); + bba_cmd_outsnosel(reg,val,len); + bba_deselect(); +} + +static inline u8 bba_cmd_in8(u32 reg) +{ + u8 val; + bba_cmd_ins(reg,&val,sizeof(val)); + return val; +} + +static inline u8 bba_cmd_in8_slow(u32 reg) +{ + u8 val; + bba_select(); + bba_cmd_insnosel(reg,&val,sizeof(val)); + udelay(200); //usleep doesn't work on this amount, decrementer is based on 10ms, wait is 200us + bba_deselect(); + return val; +} + +static inline void bba_cmd_out8(u32 reg,u8 val) +{ + bba_cmd_outs(reg,&val,sizeof(val)); +} + +static inline void bba_ins(u32 reg,void *val,u32 len) +{ + bba_select(); + bba_insnosel(reg,val,len); + bba_deselect(); +} + + +static inline void bba_outs(u32 reg,void *val,u32 len) +{ + bba_select(); + bba_outsnosel(reg,val,len); + bba_deselect(); +} + +static inline u8 bba_in8(u32 reg) +{ + u8 val; + bba_ins(reg,&val,sizeof(val)); + return val; +} + +static inline void bba_out8(u32 reg,u8 val) +{ + bba_outs(reg,&val,sizeof(val)); +} + +static s32 __bba_exi_unlockcb(s32 chn,s32 dev) +{ + LWP_ThreadBroadcast(wait_exi_queue); + return 1; +} + +static __inline__ void __bba_exi_stop(struct bba_priv *priv) +{ + u32 level; + + _CPU_ISR_Disable(level); + while(EXI_Lock(EXI_CHANNEL_0,EXI_DEVICE_2,__bba_exi_unlockcb)==0) { + LWIP_DEBUGF(NETIF_DEBUG|1,("__bba_exi_wait(exi locked)\n")); + LWP_ThreadSleep(wait_exi_queue); + } + _CPU_ISR_Restore(level); +} + +static __inline__ void __bba_exi_wake(struct bba_priv *priv) +{ + EXI_Unlock(EXI_CHANNEL_0); +} + +static __inline__ void __bba_tx_stop(struct bba_priv *priv) +{ + u32 level; + + _CPU_ISR_Disable(level); + while(priv->state==ERR_TXPENDING) { + LWIP_DEBUGF(NETIF_DEBUG,("__bba_tx_stop(pending tx)\n")); + LWP_ThreadSleep(priv->tq_xmit); + } + priv->state = ERR_TXPENDING; + _CPU_ISR_Restore(level); +} + +static __inline__ void __bba_tx_wake(struct bba_priv *priv) +{ + u32 level; + + _CPU_ISR_Disable(level); + if(priv->state==ERR_TXPENDING) { + priv->state = ERR_OK; + LWP_ThreadBroadcast(priv->tq_xmit); + } + _CPU_ISR_Restore(level); +} + +static __inline__ u8 __linkstate(struct bba_priv *priv) +{ + u8 nways = 0; + + nways = bba_in8(BBA_NWAYS); + priv->linkstate = nways; + if(nways&BBA_NWAYS_LS10 || nways&BBA_NWAYS_LS100) return nways; + return 0; +} + +static bool __bba_get_linkstateasync(struct bba_priv *priv) +{ + u32 ret,cnt,sec; + + for(cnt=0;cnt<10000;cnt++) { + udelay(500); + ret = __linkstate(priv); + + if(ret&0xf0 && ret&0x08) break; + } + + // only sleep for additional 2 seconds if linkstate is ok + if(cnt<10000) { + sec = 1; + if(!(ret&0x04)) sec = 2; + udelay(sec*TB_USPERSEC); + } + + return (cnt<10000); +} + +static u32 __bba_read_cid() +{ + u16 cmd = 0; + u32 cid = 0; + + bba_select(); + EXI_Imm(EXI_CHANNEL_0,&cmd,2,EXI_WRITE,NULL); + EXI_Sync(EXI_CHANNEL_0); + EXI_Imm(EXI_CHANNEL_0,&cid,4,EXI_READ,NULL); + EXI_Sync(EXI_CHANNEL_0); + bba_deselect(); + + return cid; +} + +static void __bba_reset() +{ + bba_out8(0x60,0x00); + udelay(10000); + bba_cmd_in8_slow(0x0F); + udelay(10000); + bba_out8(BBA_NCRA,BBA_NCRA_RESET); + udelay(100); + bba_out8(BBA_NCRA,0x00); + udelay(100); +} + +static void __bba_recv_init() +{ + bba_out8(BBA_NCRB,(BBA_NCRB_AB|BBA_NCRB_CA|BBA_NCRB_2_PACKETS_PER_INT)); + bba_out8(BBA_SI_ACTRL2,0x74); + bba_out8(BBA_RXINTT, 0x00); + bba_out8(BBA_RXINTT+1, 0x06); /* 0x0600 = 61us */ + + bba_out8(BBA_MISC2,BBA_MISC2_AUTORCVR); + + bba_out12(BBA_TLBP, BBA_INIT_TLBP); + bba_out12(BBA_BP,BBA_INIT_BP); + bba_out12(BBA_RHBP,BBA_INIT_RHBP); + bba_out12(BBA_RWP,BBA_INIT_RWP); + bba_out12(BBA_RRP,BBA_INIT_RRP); + + bba_out8(BBA_GCA,BBA_GCA_ARXERRB); + bba_out8(BBA_NCRA,BBA_NCRA_SR); +} + +static u32 __bba_tx_err(u8 status,struct bba_priv *priv) +{ + u32 last_errors = priv->txrx_stats.tx_errors; + + if(status&BBA_TX_STATUS_TERR) { + priv->txrx_stats.tx_errors++; + if(status&BBA_TX_STATUS_CCMASK) + priv->txrx_stats.tx_collisions += (status&BBA_TX_STATUS_CCMASK); + + if(status&BBA_TX_STATUS_CRSLOST) + priv->txrx_stats.tx_carriererrors++; + + if(status&BBA_TX_STATUS_UF) + priv->txrx_stats.tx_fifoerrors++; + + if(status&BBA_TX_STATUS_OWC) + priv->txrx_stats.tx_windowerrors++; + } + if(last_errors!=priv->txrx_stats.tx_errors) + LWIP_ERROR(("__bba_tx_err(%02x)\n",status)); + + return priv->txrx_stats.tx_errors; +} + +static u32 __bba_rx_err(u8 status,struct bba_priv *priv) +{ + u32 last_errors = priv->txrx_stats.tx_errors; + + if(status&0xff) { + priv->txrx_stats.rx_overerrors++; + priv->txrx_stats.rx_errors++; + } else { + if(status&BBA_RX_STATUS_RERR) { + priv->txrx_stats.rx_errors++; + if(status&BBA_RX_STATUS_BF) + priv->txrx_stats.rx_overerrors++; + + if(status&BBA_RX_STATUS_CRC) + priv->txrx_stats.rx_crcerrors++; + + if(status&BBA_RX_STATUS_FO) + priv->txrx_stats.rx_fifoerrors++; + + if(status&BBA_RX_STATUS_RW) + priv->txrx_stats.rx_lengtherrors++; + + if(status&BBA_RX_STATUS_RF) + priv->txrx_stats.rx_lengtherrors++; + + if(status&BBA_RX_STATUS_BF) + priv->txrx_stats.rx_overerrors++; + } + if(status&BBA_RX_STATUS_FAE) { + priv->txrx_stats.rx_errors++; + priv->txrx_stats.rx_frameerrors++; + } + } + if(last_errors!=priv->txrx_stats.rx_errors) + LWIP_ERROR(("__bba_rx_err(%02x)\n",status)); + + return priv->txrx_stats.rx_errors; +} + +void bba_process(struct pbuf *p,struct netif *dev) +{ + struct eth_hdr *ethhdr = NULL; + struct bba_priv *priv = (struct bba_priv*)dev->state; + const s32 hlen = sizeof(struct eth_hdr); + + if(p) { + ethhdr = p->payload; + switch(htons(ethhdr->type)) { + case ETHTYPE_IP: + LWIP_DEBUGF(NETIF_DEBUG,("bba_process: passing packet up to IP layer\n")); + + etharp_ip_input(dev,p); + pbuf_header(p,-(hlen)); + ip_input(p,dev); + break; + case ETHTYPE_ARP: + /* pass p to ARP module, get ARP reply or ARP queued packet */ + LWIP_DEBUGF(NETIF_DEBUG,("bba_process: passing packet up to ARP layer\n")); + etharp_arp_input(dev, priv->ethaddr, p); + break; + /* unsupported Ethernet packet type */ + default: + /* free pbuf */ + pbuf_free(p); + break; + } + } +} + +static err_t __bba_link_tx(struct netif *dev,struct pbuf *p) +{ + u8 tmpbuf[BBA_MINPKTSIZE]; + struct pbuf *tmp; + struct bba_priv *priv = (struct bba_priv*)dev->state; + + __bba_tx_stop(priv); + __bba_exi_stop(priv); + + if(p->tot_len>BBA_TX_MAX_PACKET_SIZE) { + LWIP_ERROR(("__bba_link_tx(%d,%p) pkt_size\n",p->tot_len,LWP_GetSelf())); + __bba_tx_wake(priv); + __bba_exi_wake(priv); + return ERR_PKTSIZE; + } + + if(!__linkstate(priv)) { + LWIP_ERROR(("__bba_link_tx(error link state)\n")); + __bba_tx_wake(priv); + __bba_exi_wake(priv); + return ERR_ABRT; + } + + LWIP_DEBUGF(NETIF_DEBUG,("__bba_link_tx(%d,%p)\n",p->tot_len,LWP_GetSelf())); + + bba_out12(BBA_TXFIFOCNT,p->tot_len); + + bba_select(); + bba_outsregister(BBA_WRTXFIFOD); + for(tmp=p;tmp!=NULL;tmp=tmp->next) { + bba_outsdata_fast(tmp->payload,tmp->len); + } + if(p->tot_lentot_len)); + bba_deselect(); + + bba_out8(BBA_NCRA,((bba_in8(BBA_NCRA)&~BBA_NCRA_ST0)|BBA_NCRA_ST1)); //&~BBA_NCRA_ST0 + __bba_exi_wake(priv); + return ERR_OK; +} + +static err_t __bba_start_tx(struct netif *dev,struct pbuf *p,struct ip_addr *ipaddr) +{ + LWIP_DEBUGF(NETIF_DEBUG,("__bba_start_tx(%p)\n",LWP_GetSelf())); + return etharp_output(dev,ipaddr,p); +} + +static err_t bba_start_rx(struct netif *dev,u32 budget) +{ + s32 size; + u16 top,pos,rrp,rwp; + u32 pkt_status,recvd; + struct pbuf *tmp,*p = NULL; + struct bba_priv *priv = (struct bba_priv*)dev->state; + + LWIP_DEBUGF(NETIF_DEBUG,("bba_start_rx()\n")); + + recvd = 0; + rwp = bba_in12(BBA_RWP); + rrp = bba_in12(BBA_RRP); + while(recvd(BBA_RX_MAX_PACKET_SIZE+4)) { + LWIP_DEBUGF(NETIF_DEBUG|2,("bba_start_rx(size>BBA_RX_MAX_PACKET_SIZE)\n")); + continue; + } + + if(pkt_status&(BBA_RX_STATUS_RERR|BBA_RX_STATUS_FAE)) { + LWIP_DEBUGF(NETIF_DEBUG|2,("bba_start_rx(pkt_status = 02x)\n",pkt_status)); + __bba_rx_err(pkt_status,priv); + rwp = bba_in12(BBA_RWP); + rrp = bba_in12(BBA_RRP); + continue; + } + + pos = ((rrp<<8)+4); + top = ((BBA_INIT_RHBP+1)<<8); + LWIP_DEBUGF(NETIF_DEBUG,("bba_start_rx(%04x,%d,%04x)\n",pos,size,top)); + + p = pbuf_alloc(PBUF_RAW,size,PBUF_POOL); + if(p) { + for(tmp=p;tmp!=NULL;tmp=tmp->next) { + size = tmp->len; + + bba_select(); + bba_insregister(pos); + if((pos+size)payload,size); + } else { + s32 chunk_size = (top-pos); + + size -= chunk_size; + pos = (BBA_INIT_RRP<<8); + bba_insdata_fast(tmp->payload,chunk_size); + bba_deselect(); + bba_select(); + bba_insregister(pos); + bba_insdata_fast(tmp->payload+chunk_size,size); + } + bba_deselect(); + pos += size; + } + dev->input(p,dev); + } else + break; + + recvd++; + bba_out12(BBA_RRP,(rrp=cur_descr.next_packet_ptr)); + rwp = bba_in12(BBA_RWP); + } + if(priv->flag&BBA_IR_RBFI) { + priv->flag &= ~BBA_IR_RBFI; + bba_out8(BBA_IMR,(bba_in8(BBA_IMR)|BBA_IMR_RBFIM)); + } + + LWIP_DEBUGF(NETIF_DEBUG,("bba_start_rx(rx interrupt close)\n")); + return ERR_OK; +} + +static inline void bba_interrupt(struct netif *dev) +{ + u8 ir,imr,status,lrps,ltps; + struct bba_priv *priv = (struct bba_priv*)dev->state; + + ir = bba_in8(BBA_IR); + imr = bba_in8(BBA_IMR); + status = ir&imr; + while(status) { + LWIP_DEBUGF(NETIF_DEBUG,("bba_interrupt(%02x)\n",status)); + bba_out8(BBA_IR,status); + if(status&BBA_IR_RBFI) { + bba_out8(BBA_IMR,(bba_in8(BBA_IMR)&~BBA_IMR_RBFIM)); + priv->flag |= BBA_IMR_RBFIM; + } + if(status&(BBA_IR_RI|BBA_IR_RBFI)) { + bba_start_rx(dev,0x20); + } + if(status&(BBA_IR_TI|BBA_IR_FIFOEI)) { + __bba_tx_wake(priv); + } + if(status&(BBA_IR_RBFI|BBA_IR_REI)) { + lrps = bba_in8(BBA_LRPS); + __bba_rx_err(lrps,priv); + } + if(status&BBA_IR_TEI) { + ltps = bba_in8(BBA_LTPS); + __bba_tx_err(ltps,priv); + __bba_tx_wake(priv); + } + if(status&BBA_IR_FRAGI) { + LWIP_DEBUGF(NETIF_DEBUG,("bba_interrupt(BBA_IR_FRAGI)\n")); + } + if(status&BBA_IR_FIFOEI) { + LWIP_DEBUGF(NETIF_DEBUG,("bba_interrupt(BBA_IR_FIFOEI)\n")); + } + if(status&BBA_IR_BUSEI) { + LWIP_DEBUGF(NETIF_DEBUG,("bba_interrupt(BBA_IR_BUSEI)\n")); + } + + ir = bba_in8(BBA_IR); + imr = bba_in8(BBA_IMR); + status = ir&imr; + } + LWIP_DEBUGF(NETIF_DEBUG,("bba_interrupt(exit)\n")); +} + +static err_t __bba_init(struct netif *dev) +{ + u8 nwayc; + struct bba_priv *priv = (struct bba_priv*)dev->state; + + if(!priv) return ERR_IF; + + LWIP_DEBUGF(NETIF_DEBUG,("initializing BBA...\n")); + bba_cmd_out8(0x02,BBA_CMD_IRMASKALL); + + __bba_reset(); + + priv->revid = bba_cmd_in8(0x01); + + bba_cmd_outs(0x04,&priv->devid,2); + bba_cmd_out8(0x05,priv->acstart); + + /* Assume you are being started by something which has fucked NWAY! + So reset to power on defaults for SIACTRL/SIACONN */ + bba_out8(0x58, 0x80); + bba_out8(0x59, 0x00); + bba_out8(0x5a, 0x03); + bba_out8(0x5b, 0x83); + bba_out8(0x5c, 0x32); + bba_out8(0x5d, 0xfe); + bba_out8(0x5e, 0x1f); + bba_out8(0x5f, 0x1f); + udelay(100); + + __bba_recv_init(); + + /* This doesn't set the speed anymore - it simple kicks off NWAY */ + nwayc = bba_in8(BBA_NWAYC)&0xc0; + bba_out8(BBA_NWAYC,nwayc); + udelay(100); + nwayc |= 0x04; + bba_out8(BBA_NWAYC,nwayc); + udelay(100); + nwayc |= 0x08; + bba_out8(BBA_NWAYC,nwayc); + udelay(100); + + bba_ins(BBA_NAFR_PAR0,priv->ethaddr->addr, 6); + LWIP_DEBUGF(NETIF_DEBUG,("MAC ADDRESS %02x:%02x:%02x:%02x:%02x:%02x\n", + priv->ethaddr->addr[0], priv->ethaddr->addr[1], priv->ethaddr->addr[2], + priv->ethaddr->addr[3], priv->ethaddr->addr[4], priv->ethaddr->addr[5])); + + bba_out8(BBA_IR,0xFF); + bba_out8(BBA_IMR,0xFF&~BBA_IMR_FIFOEIM); + + bba_cmd_out8(0x02,BBA_CMD_IRMASKNONE); + + return ERR_OK; +} + +static err_t bba_init_one(struct netif *dev) +{ + struct bba_priv *priv = (struct bba_priv*)dev->state; + + if(!priv) return ERR_IF; + + priv->revid = 0xf0; + priv->devid = 0xD107; + priv->acstart = 0x4E; + + __bba_init(dev); + + return ERR_OK; +} + +static err_t bba_probe(struct netif *dev) +{ + u32 cid; + err_t ret; + + cid = __bba_read_cid(); + if(cid!=BBA_CID) return ERR_NODEV; + + ret = bba_init_one(dev); + return ret; +} + +static u32 bba_calc_response(struct bba_priv *priv,u32 val) +{ + u8 i0,i1,i2,i3; + u8 c0,c1,c2,c3; + u8 revid_0,revid_eth_0,revid_eth_1; + + revid_0 = priv->revid; + revid_eth_0 = _SHIFTR(priv->devid,8,8); + revid_eth_1 = _SHIFTR(priv->devid,0,8); + + i0 = _SHIFTR(val,24,8); + i1 = _SHIFTR(val,16,8); + i2 = _SHIFTR(val, 8,8); + i3 = _SHIFTR(val, 0,8); + + c0 = ((i0+i1*0xc1+0x18+revid_0)^(i3*i2+0x90))&0xff; + c1 = ((i1+i2+0x90)^(c0+i0-0xc1))&0xff; + c2 = ((i2+0xc8)^(c0+((revid_eth_0+revid_0*0x23)^0x19)))&0xff; + c3 = ((i0+0xc1)^(i3+((revid_eth_1+0xc8)^0x90)))&0xff; + + return ((c0<<24)|(c1<<16)|(c2<<8)|c3); +} + +static s32 bba_event_handler(s32 nChn,s32 nDev) +{ + u8 status; + struct bba_priv *priv = (struct bba_priv*)gc_netif->state; + + if(EXI_Lock(EXI_CHANNEL_0,EXI_DEVICE_2,bba_event_handler)==0) { + LWIP_DEBUGF(NETIF_DEBUG|1,("bba_event_handler(exi locked)\n")); + return 1; + } + + status = bba_cmd_in8(0x03); + bba_cmd_out8(0x02,BBA_CMD_IRMASKALL); + + LWIP_DEBUGF(NETIF_DEBUG,("bba_event_handler(status(%02x))\n",status)); + + if(status&0x80) { + LWIP_DEBUGF(NETIF_DEBUG,("bba_event_handler(bba_interrupt(%02x))\n",status)); + bba_interrupt(gc_netif); + bba_cmd_out8(0x03,0x80); + bba_cmd_out8(0x02,BBA_CMD_IRMASKNONE); + EXI_Unlock(EXI_CHANNEL_0); + return 1; + } + if(status&0x40) { + LWIP_ERROR(("bba_event_handler(bba_reset(%02x))\n",status)); + __bba_init(gc_netif); + bba_cmd_out8(0x03, 0x40); + bba_cmd_out8(0x02, BBA_CMD_IRMASKNONE); + EXI_Unlock(EXI_CHANNEL_0); + return 1; + } + if(status&0x20) { + LWIP_DEBUGF(NETIF_DEBUG,("bba_event_handler(unknown(%02x))\n",status)); + bba_cmd_out8(0x03, 0x20); + bba_cmd_out8(0x02, BBA_CMD_IRMASKNONE); + EXI_Unlock(EXI_CHANNEL_0); + return 1; + } + if(status&0x10) { + u32 response,challange; + LWIP_DEBUGF(NETIF_DEBUG,("bba_event_handler(challange/response(%02x))\n",status)); + bba_cmd_out8(0x05,priv->acstart); + bba_cmd_ins(0x08,&challange,sizeof(challange)); + response = bba_calc_response(priv,challange); + bba_cmd_outs(0x09,&response,sizeof(response)); + + bba_cmd_out8(0x03, 0x10); + bba_cmd_out8(0x02, BBA_CMD_IRMASKNONE); + EXI_Unlock(EXI_CHANNEL_0); + return 1; + } + if(status&0x08) { + LWIP_DEBUGF(NETIF_DEBUG,("bba_event_handler(challange/response status(%02x))\n",bba_cmd_in8(0x0b))); + bba_cmd_out8(0x03, 0x08); + bba_cmd_out8(0x02, BBA_CMD_IRMASKNONE); + EXI_Unlock(EXI_CHANNEL_0); + return 1; + } + LWIP_ERROR(("GCIF - EXI - ?? %02x\n", status)); + bba_interrupt(gc_netif); + bba_cmd_out8(0x02,BBA_CMD_IRMASKNONE); + EXI_Unlock(EXI_CHANNEL_0); + return 1; +} + +err_t bba_init(struct netif *dev) +{ + err_t ret; + struct bba_priv *priv = (struct bba_priv*)dev->state; + + __bba_exi_stop(priv); + + LWIP_DEBUGF(NETIF_DEBUG, ("bba_init(call EXI_RegisterEXICallback())\n")); + EXI_RegisterEXICallback(EXI_CHANNEL_2,bba_event_handler); + + ret = bba_probe(dev); + if(ret!=ERR_OK) { + EXI_RegisterEXICallback(EXI_CHANNEL_2,NULL); + __bba_exi_wake(priv); + return ret; + } + + ret = __bba_get_linkstateasync(priv); + if(ret) { + dev->flags |= NETIF_FLAG_LINK_UP; + ret = ERR_OK; + } else { + EXI_RegisterEXICallback(EXI_CHANNEL_2,NULL); + ret = ERR_IF; + } + + __bba_exi_wake(priv); + return ret; +} + +dev_s bba_create(struct netif *dev) +{ + struct bba_priv *priv = NULL; + + LWIP_DEBUGF(NETIF_DEBUG, ("bba_create()\n")); + + priv = (struct bba_priv*)mem_malloc(sizeof(struct bba_priv)); + if(!priv) { + LWIP_ERROR(("bba_create: out of memory for bba_priv\n")); + return NULL; + } + memset(priv,0,sizeof(struct bba_priv)); + + LWP_InitQueue(&priv->tq_xmit); + LWP_InitQueue(&wait_exi_queue); + + dev->name[0] = IFNAME0; + dev->name[1] = IFNAME1; + dev->output = __bba_start_tx; + dev->linkoutput = __bba_link_tx; + dev->mtu = 1500; + dev->flags = NETIF_FLAG_BROADCAST; + dev->hwaddr_len = 6; + + priv->ethaddr = (struct eth_addr*)&(dev->hwaddr[0]); + priv->state = ERR_OK; + + gc_netif = dev; + return priv; +} diff --git a/wii/libogc/lwip/core/dhcp.c b/wii/libogc/lwip/core/dhcp.c new file mode 100644 index 0000000000..8cceeee34c --- /dev/null +++ b/wii/libogc/lwip/core/dhcp.c @@ -0,0 +1,1457 @@ +/** + * @file + * + * Dynamic Host Configuration Protocol client + */ + +/* + * + * Copyright (c) 2001-2004 Leon Woestenberg + * Copyright (c) 2001-2004 Axon Digital Design B.V., The Netherlands. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is a contribution to the lwIP TCP/IP stack. + * The Swedish Institute of Computer Science and Adam Dunkels + * are specifically granted permission to redistribute this + * source code. + * + * Author: Leon Woestenberg + * + * This is a DHCP client for the lwIP TCP/IP stack. It aims to conform + * with RFC 2131 and RFC 2132. + * + * TODO: + * - Proper parsing of DHCP messages exploiting file/sname field overloading. + * - Add JavaDoc style documentation (API, internals). + * - Support for interfaces other than Ethernet (SLIP, PPP, ...) + * + * Please coordinate changes and requests with Leon Woestenberg + * + * + * Integration with your code: + * + * In lwip/dhcp.h + * #define DHCP_COARSE_TIMER_SECS (recommended 60 which is a minute) + * #define DHCP_FINE_TIMER_MSECS (recommended 500 which equals TCP coarse timer) + * + * Then have your application call dhcp_coarse_tmr() and + * dhcp_fine_tmr() on the defined intervals. + * + * dhcp_start(struct netif *netif); + * starts a DHCP client instance which configures the interface by + * obtaining an IP address lease and maintaining it. + * + * Use dhcp_release(netif) to end the lease and use dhcp_stop(netif) + * to remove the DHCP client. + * + */ + +#include + +#include "lwip/stats.h" +#include "lwip/mem.h" +#include "lwip/udp.h" +#include "lwip/ip_addr.h" +#include "lwip/netif.h" +#include "lwip/inet.h" +#include "netif/etharp.h" + +#include "lwip/sys.h" +#include "lwip/opt.h" +#include "lwip/dhcp.h" + +#if LWIP_DHCP /* don't build if not configured for use in lwipopt.h */ + +/** global transaction identifier, must be + * unique for each DHCP request. We simply increment, starting + * with this value (easy to match with a packet analyzer) */ +static u32_t xid = 0xABCD0000; + +/** DHCP client state machine functions */ +static void dhcp_handle_ack(struct netif *netif); +static void dhcp_handle_nak(struct netif *netif); +static void dhcp_handle_offer(struct netif *netif); + +static err_t dhcp_discover(struct netif *netif); +static err_t dhcp_select(struct netif *netif); +static void dhcp_check(struct netif *netif); +static void dhcp_bind(struct netif *netif); +static err_t dhcp_decline(struct netif *netif); +static err_t dhcp_rebind(struct netif *netif); +static void dhcp_set_state(struct dhcp *dhcp, u8_t new_state); + +/** receive, unfold, parse and free incoming messages */ +static void dhcp_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, struct ip_addr *addr, u16_t port); +static err_t dhcp_unfold_reply(struct dhcp *dhcp); +static u8_t *dhcp_get_option_ptr(struct dhcp *dhcp, u8_t option_type); +static u8_t dhcp_get_option_byte(u8_t *ptr); +//static u16_t dhcp_get_option_short(u8_t *ptr); +static u32_t dhcp_get_option_long(u8_t *ptr); +static void dhcp_free_reply(struct dhcp *dhcp); + +/** set the DHCP timers */ +static void dhcp_timeout(struct netif *netif); +static void dhcp_t1_timeout(struct netif *netif); +static void dhcp_t2_timeout(struct netif *netif); + +/** build outgoing messages */ +/** create a DHCP request, fill in common headers */ +static err_t dhcp_create_request(struct netif *netif); +/** free a DHCP request */ +static void dhcp_delete_request(struct netif *netif); +/** add a DHCP option (type, then length in bytes) */ +static void dhcp_option(struct dhcp *dhcp, u8_t option_type, u8_t option_len); +/** add option values */ +static void dhcp_option_byte(struct dhcp *dhcp, u8_t value); +static void dhcp_option_short(struct dhcp *dhcp, u16_t value); +static void dhcp_option_long(struct dhcp *dhcp, u32_t value); +/** always add the DHCP options trailer to end and pad */ +static void dhcp_option_trailer(struct dhcp *dhcp); + +/** + * Back-off the DHCP client (because of a received NAK response). + * + * Back-off the DHCP client because of a received NAK. Receiving a + * NAK means the client asked for something non-sensible, for + * example when it tries to renew a lease obtained on another network. + * + * We back-off and will end up restarting a fresh DHCP negotiation later. + * + * @param state pointer to DHCP state structure + */ +static void dhcp_handle_nak(struct netif *netif) { + struct dhcp *dhcp = netif->dhcp; + u16_t msecs = 10 * 1000; + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 3, ("dhcp_handle_nak(netif=%p) %c%c%"U16_F"\n", + (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num)); + dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | DBG_STATE, ("dhcp_handle_nak(): set request timeout %"U16_F" msecs\n", msecs)); + dhcp_set_state(dhcp, DHCP_BACKING_OFF); +} + +/** + * Checks if the offered IP address is already in use. + * + * It does so by sending an ARP request for the offered address and + * entering CHECKING state. If no ARP reply is received within a small + * interval, the address is assumed to be free for use by us. + */ +static void dhcp_check(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + err_t result; + u16_t msecs; + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 3, ("dhcp_check(netif=%p) %c%c\n", (void *)netif, (s16_t)netif->name[0], + (s16_t)netif->name[1])); + /* create an ARP query for the offered IP address, expecting that no host + responds, as the IP address should not be in use. */ + result = etharp_query(netif, &dhcp->offered_ip_addr, NULL); + if (result != ERR_OK) { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 2, ("dhcp_check: could not perform ARP query\n")); + } + dhcp->tries++; + msecs = 500; + dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | DBG_STATE, ("dhcp_check(): set request timeout %"U16_F" msecs\n", msecs)); + dhcp_set_state(dhcp, DHCP_CHECKING); +} + +/** + * Remember the configuration offered by a DHCP server. + * + * @param state pointer to DHCP state structure + */ +static void dhcp_handle_offer(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + /* obtain the server address */ + u8_t *option_ptr = dhcp_get_option_ptr(dhcp, DHCP_OPTION_SERVER_ID); + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 3, ("dhcp_handle_offer(netif=%p) %c%c%"U16_F"\n", + (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num)); + if (option_ptr != NULL) + { + dhcp->server_ip_addr.addr = htonl(dhcp_get_option_long(&option_ptr[2])); + LWIP_DEBUGF(DHCP_DEBUG | DBG_STATE, ("dhcp_handle_offer(): server 0x%08"X32_F"\n", dhcp->server_ip_addr.addr)); + /* remember offered address */ + ip_addr_set(&dhcp->offered_ip_addr, (struct ip_addr *)&dhcp->msg_in->yiaddr); + LWIP_DEBUGF(DHCP_DEBUG | DBG_STATE, ("dhcp_handle_offer(): offer for 0x%08"X32_F"\n", dhcp->offered_ip_addr.addr)); + + dhcp_select(netif); + } +} + +/** + * Select a DHCP server offer out of all offers. + * + * Simply select the first offer received. + * + * @param netif the netif under DHCP control + * @return lwIP specific error (see error.h) + */ +static err_t dhcp_select(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + err_t result; + u32_t msecs; + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 3, ("dhcp_select(netif=%p) %c%c%"U16_F"\n", (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num)); + + /* create and initialize the DHCP message header */ + result = dhcp_create_request(netif); + if (result == ERR_OK) + { + dhcp_option(dhcp, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN); + dhcp_option_byte(dhcp, DHCP_REQUEST); + + dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); + dhcp_option_short(dhcp, 576); + + /* MUST request the offered IP address */ + dhcp_option(dhcp, DHCP_OPTION_REQUESTED_IP, 4); + dhcp_option_long(dhcp, ntohl(dhcp->offered_ip_addr.addr)); + + dhcp_option(dhcp, DHCP_OPTION_SERVER_ID, 4); + dhcp_option_long(dhcp, ntohl(dhcp->server_ip_addr.addr)); + + dhcp_option(dhcp, DHCP_OPTION_PARAMETER_REQUEST_LIST, 4/*num options*/); + dhcp_option_byte(dhcp, DHCP_OPTION_SUBNET_MASK); + dhcp_option_byte(dhcp, DHCP_OPTION_ROUTER); + dhcp_option_byte(dhcp, DHCP_OPTION_BROADCAST); + dhcp_option_byte(dhcp, DHCP_OPTION_DNS_SERVER); + + dhcp_option_trailer(dhcp); + /* shrink the pbuf to the actual content length */ + pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); + + /* TODO: we really should bind to a specific local interface here + but we cannot specify an unconfigured netif as it is addressless */ + udp_bind(dhcp->pcb, IP_ADDR_ANY, DHCP_CLIENT_PORT); + /* send broadcast to any DHCP server */ + udp_connect(dhcp->pcb, IP_ADDR_BROADCAST, DHCP_SERVER_PORT); + udp_send(dhcp->pcb, dhcp->p_out); + /* reconnect to any (or to server here?!) */ + udp_connect(dhcp->pcb, IP_ADDR_ANY, DHCP_SERVER_PORT); + dhcp_delete_request(netif); + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | DBG_STATE, ("dhcp_select: REQUESTING\n")); + dhcp_set_state(dhcp, DHCP_REQUESTING); + } else { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 2, ("dhcp_select: could not allocate DHCP request\n")); + } + dhcp->tries++; + msecs = dhcp->tries < 4 ? dhcp->tries * 1000 : 4 * 1000; + dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; + LWIP_DEBUGF(DHCP_DEBUG | DBG_STATE, ("dhcp_select(): set request timeout %"U32_F" msecs\n", msecs)); + return result; +} + +/** + * The DHCP timer that checks for lease renewal/rebind timeouts. + * + */ +void dhcp_coarse_tmr() +{ + struct netif *netif = netif_list; + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE, ("dhcp_coarse_tmr()\n")); + /* iterate through all network interfaces */ + while (netif != NULL) { + /* only act on DHCP configured interfaces */ + if (netif->dhcp != NULL) { + /* timer is active (non zero), and triggers (zeroes) now? */ + if (netif->dhcp->t2_timeout-- == 1) { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | DBG_STATE, ("dhcp_coarse_tmr(): t2 timeout\n")); + /* this clients' rebind timeout triggered */ + dhcp_t2_timeout(netif); + /* timer is active (non zero), and triggers (zeroes) now */ + } else if (netif->dhcp->t1_timeout-- == 1) { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | DBG_STATE, ("dhcp_coarse_tmr(): t1 timeout\n")); + /* this clients' renewal timeout triggered */ + dhcp_t1_timeout(netif); + } + } + /* proceed to next netif */ + netif = netif->next; + } +} + +/** + * DHCP transaction timeout handling + * + * A DHCP server is expected to respond within a short period of time. + * This timer checks whether an outstanding DHCP request is timed out. + * + */ +void dhcp_fine_tmr() +{ + struct netif *netif = netif_list; + /* loop through netif's */ + while (netif != NULL) { + /* only act on DHCP configured interfaces */ + if (netif->dhcp != NULL) { + /* timer is active (non zero), and is about to trigger now */ + if (netif->dhcp->request_timeout-- == 1) { + /* { netif->dhcp->request_timeout == 0 } */ + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | DBG_STATE, ("dhcp_fine_tmr(): request timeout\n")); + /* this clients' request timeout triggered */ + dhcp_timeout(netif); + } + } + /* proceed to next network interface */ + netif = netif->next; + } +} + +/** + * A DHCP negotiation transaction, or ARP request, has timed out. + * + * The timer that was started with the DHCP or ARP request has + * timed out, indicating no response was received in time. + * + * @param netif the netif under DHCP control + * + */ +static void dhcp_timeout(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 3, ("dhcp_timeout()\n")); + /* back-off period has passed, or server selection timed out */ + if ((dhcp->state == DHCP_BACKING_OFF) || (dhcp->state == DHCP_SELECTING)) { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE, ("dhcp_timeout(): restarting discovery\n")); + dhcp_discover(netif); + /* receiving the requested lease timed out */ + } else if (dhcp->state == DHCP_REQUESTING) { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | DBG_STATE, ("dhcp_timeout(): REQUESTING, DHCP request timed out\n")); + if (dhcp->tries <= 5) { + dhcp_select(netif); + } else { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | DBG_STATE, ("dhcp_timeout(): REQUESTING, releasing, restarting\n")); + dhcp_release(netif); + dhcp_discover(netif); + } + /* received no ARP reply for the offered address (which is good) */ + } else if (dhcp->state == DHCP_CHECKING) { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | DBG_STATE, ("dhcp_timeout(): CHECKING, ARP request timed out\n")); + if (dhcp->tries <= 1) { + dhcp_check(netif); + /* no ARP replies on the offered address, + looks like the IP address is indeed free */ + } else { + /* bind the interface to the offered address */ + dhcp_bind(netif); + } + } + /* did not get response to renew request? */ + else if (dhcp->state == DHCP_RENEWING) { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | DBG_STATE, ("dhcp_timeout(): RENEWING, DHCP request timed out\n")); + /* just retry renewal */ + /* note that the rebind timer will eventually time-out if renew does not work */ + dhcp_renew(netif); + /* did not get response to rebind request? */ + } else if (dhcp->state == DHCP_REBINDING) { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | DBG_STATE, ("dhcp_timeout(): REBINDING, DHCP request timed out\n")); + if (dhcp->tries <= 8) { + dhcp_rebind(netif); + } else { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | DBG_STATE, ("dhcp_timeout(): RELEASING, DISCOVERING\n")); + dhcp_release(netif); + dhcp_discover(netif); + } + } +} + +/** + * The renewal period has timed out. + * + * @param netif the netif under DHCP control + */ +static void dhcp_t1_timeout(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + LWIP_DEBUGF(DHCP_DEBUG | DBG_STATE, ("dhcp_t1_timeout()\n")); + if ((dhcp->state == DHCP_REQUESTING) || (dhcp->state == DHCP_BOUND) || (dhcp->state == DHCP_RENEWING)) { + /* just retry to renew - note that the rebind timer (t2) will + * eventually time-out if renew tries fail. */ + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | DBG_STATE, ("dhcp_t1_timeout(): must renew\n")); + dhcp_renew(netif); + } +} + +/** + * The rebind period has timed out. + * + */ +static void dhcp_t2_timeout(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | DBG_STATE, ("dhcp_t2_timeout()\n")); + if ((dhcp->state == DHCP_REQUESTING) || (dhcp->state == DHCP_BOUND) || (dhcp->state == DHCP_RENEWING)) { + /* just retry to rebind */ + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | DBG_STATE, ("dhcp_t2_timeout(): must rebind\n")); + dhcp_rebind(netif); + } +} + +/** + * + * @param netif the netif under DHCP control + */ +static void dhcp_handle_ack(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + u8_t *option_ptr; + /* clear options we might not get from the ACK */ + dhcp->offered_sn_mask.addr = 0; + dhcp->offered_gw_addr.addr = 0; + dhcp->offered_bc_addr.addr = 0; + + /* lease time given? */ + option_ptr = dhcp_get_option_ptr(dhcp, DHCP_OPTION_LEASE_TIME); + if (option_ptr != NULL) { + /* remember offered lease time */ + dhcp->offered_t0_lease = dhcp_get_option_long(option_ptr + 2); + } + /* renewal period given? */ + option_ptr = dhcp_get_option_ptr(dhcp, DHCP_OPTION_T1); + if (option_ptr != NULL) { + /* remember given renewal period */ + dhcp->offered_t1_renew = dhcp_get_option_long(option_ptr + 2); + } else { + /* calculate safe periods for renewal */ + dhcp->offered_t1_renew = dhcp->offered_t0_lease / 2; + } + + /* renewal period given? */ + option_ptr = dhcp_get_option_ptr(dhcp, DHCP_OPTION_T2); + if (option_ptr != NULL) { + /* remember given rebind period */ + dhcp->offered_t2_rebind = dhcp_get_option_long(option_ptr + 2); + } else { + /* calculate safe periods for rebinding */ + dhcp->offered_t2_rebind = dhcp->offered_t0_lease; + } + + /* (y)our internet address */ + ip_addr_set(&dhcp->offered_ip_addr, &dhcp->msg_in->yiaddr); + +/** + * Patch #1308 + * TODO: we must check if the file field is not overloaded by DHCP options! + */ +#if 0 + /* boot server address */ + ip_addr_set(&dhcp->offered_si_addr, &dhcp->msg_in->siaddr); + /* boot file name */ + if (dhcp->msg_in->file[0]) { + dhcp->boot_file_name = mem_malloc(strlen(dhcp->msg_in->file) + 1); + strcpy(dhcp->boot_file_name, dhcp->msg_in->file); + } +#endif + + /* subnet mask */ + option_ptr = dhcp_get_option_ptr(dhcp, DHCP_OPTION_SUBNET_MASK); + /* subnet mask given? */ + if (option_ptr != NULL) { + dhcp->offered_sn_mask.addr = htonl(dhcp_get_option_long(&option_ptr[2])); + } + + /* gateway router */ + option_ptr = dhcp_get_option_ptr(dhcp, DHCP_OPTION_ROUTER); + if (option_ptr != NULL) { + dhcp->offered_gw_addr.addr = htonl(dhcp_get_option_long(&option_ptr[2])); + } + + /* broadcast address */ + option_ptr = dhcp_get_option_ptr(dhcp, DHCP_OPTION_BROADCAST); + if (option_ptr != NULL) { + dhcp->offered_bc_addr.addr = htonl(dhcp_get_option_long(&option_ptr[2])); + } + + /* DNS servers */ + option_ptr = dhcp_get_option_ptr(dhcp, DHCP_OPTION_DNS_SERVER); + if (option_ptr != NULL) { + u8_t n; + dhcp->dns_count = dhcp_get_option_byte(&option_ptr[1]); + /* limit to at most DHCP_MAX_DNS DNS servers */ + if (dhcp->dns_count > DHCP_MAX_DNS) dhcp->dns_count = DHCP_MAX_DNS; + for (n = 0; n < dhcp->dns_count; n++) + { + dhcp->offered_dns_addr[n].addr = htonl(dhcp_get_option_long(&option_ptr[2+(n<<2)])); + } + } +} + +/** + * Start DHCP negotiation for a network interface. + * + * If no DHCP client instance was attached to this interface, + * a new client is created first. If a DHCP client instance + * was already present, it restarts negotiation. + * + * @param netif The lwIP network interface + * @return lwIP error code + * - ERR_OK - No error + * - ERR_MEM - Out of memory + * + */ +err_t dhcp_start(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + err_t result = ERR_OK; + + LWIP_ASSERT("netif != NULL", netif != NULL); + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | DBG_STATE, ("dhcp_start(netif=%p) %c%c%"U16_F"\n", (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num)); + netif->flags &= ~NETIF_FLAG_DHCP; + + /* no DHCP client attached yet? */ + if (dhcp == NULL) { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE, ("dhcp_start(): starting new DHCP client\n")); + dhcp = mem_malloc(sizeof(struct dhcp)); + if (dhcp == NULL) { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE, ("dhcp_start(): could not allocate dhcp\n")); + return ERR_MEM; + } + /* store this dhcp client in the netif */ + netif->dhcp = dhcp; + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE, ("dhcp_start(): allocated dhcp")); + /* already has DHCP client attached */ + } else { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | DBG_STATE | 3, ("dhcp_start(): restarting DHCP configuration\n")); + } + + /* clear data structure */ + memset(dhcp, 0, sizeof(struct dhcp)); + /* allocate UDP PCB */ + dhcp->pcb = udp_new(); + if (dhcp->pcb == NULL) { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE, ("dhcp_start(): could not obtain pcb\n")); + mem_free((void *)dhcp); + netif->dhcp = dhcp = NULL; + return ERR_MEM; + } + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE, ("dhcp_start(): starting DHCP configuration\n")); + /* (re)start the DHCP negotiation */ + result = dhcp_discover(netif); + if (result != ERR_OK) { + /* free resources allocated above */ + dhcp_stop(netif); + return ERR_MEM; + } + netif->flags |= NETIF_FLAG_DHCP; + return result; +} + +/** + * Inform a DHCP server of our manual configuration. + * + * This informs DHCP servers of our fixed IP address configuration + * by sending an INFORM message. It does not involve DHCP address + * configuration, it is just here to be nice to the network. + * + * @param netif The lwIP network interface + * + */ +void dhcp_inform(struct netif *netif) +{ + struct dhcp *dhcp; + err_t result = ERR_OK; + dhcp = mem_malloc(sizeof(struct dhcp)); + if (dhcp == NULL) { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 2, ("dhcp_inform(): could not allocate dhcp\n")); + return; + } + netif->dhcp = dhcp; + memset(dhcp, 0, sizeof(struct dhcp)); + + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE, ("dhcp_inform(): allocated dhcp\n")); + dhcp->pcb = udp_new(); + if (dhcp->pcb == NULL) { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 2, ("dhcp_inform(): could not obtain pcb")); + mem_free((void *)dhcp); + return; + } + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE, ("dhcp_inform(): created new udp pcb\n")); + /* create and initialize the DHCP message header */ + result = dhcp_create_request(netif); + if (result == ERR_OK) { + + dhcp_option(dhcp, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN); + dhcp_option_byte(dhcp, DHCP_INFORM); + + dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); + /* TODO: use netif->mtu ?! */ + dhcp_option_short(dhcp, 576); + + dhcp_option_trailer(dhcp); + + pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); + + udp_bind(dhcp->pcb, IP_ADDR_ANY, DHCP_CLIENT_PORT); + udp_connect(dhcp->pcb, IP_ADDR_BROADCAST, DHCP_SERVER_PORT); + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | DBG_STATE, ("dhcp_inform: INFORMING\n")); + udp_send(dhcp->pcb, dhcp->p_out); + udp_connect(dhcp->pcb, IP_ADDR_ANY, DHCP_SERVER_PORT); + dhcp_delete_request(netif); + } else { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 2, ("dhcp_inform: could not allocate DHCP request\n")); + } + + if (dhcp != NULL) + { + if (dhcp->pcb != NULL) udp_remove(dhcp->pcb); + dhcp->pcb = NULL; + mem_free((void *)dhcp); + netif->dhcp = NULL; + } +} + +#if DHCP_DOES_ARP_CHECK +/** + * Match an ARP reply with the offered IP address. + * + * @param addr The IP address we received a reply from + * + */ +void dhcp_arp_reply(struct netif *netif, struct ip_addr *addr) +{ + LWIP_ASSERT("netif != NULL", netif != NULL); + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 3, ("dhcp_arp_reply()\n")); + /* is a DHCP client doing an ARP check? */ + if ((netif->dhcp != NULL) && (netif->dhcp->state == DHCP_CHECKING)) { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | DBG_STATE, ("dhcp_arp_reply(): CHECKING, arp reply for 0x%08"X32_F"\n", addr->addr)); + /* did a host respond with the address we + were offered by the DHCP server? */ + if (ip_addr_cmp(addr, &netif->dhcp->offered_ip_addr)) { + /* we will not accept the offered address */ + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | DBG_STATE | 1, ("dhcp_arp_reply(): arp reply matched with offered address, declining\n")); + dhcp_decline(netif); + } + } +} + +/** + * Decline an offered lease. + * + * Tell the DHCP server we do not accept the offered address. + * One reason to decline the lease is when we find out the address + * is already in use by another host (through ARP). + */ +static err_t dhcp_decline(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + err_t result = ERR_OK; + u16_t msecs; + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 3, ("dhcp_decline()\n")); + dhcp_set_state(dhcp, DHCP_BACKING_OFF); + /* create and initialize the DHCP message header */ + result = dhcp_create_request(netif); + if (result == ERR_OK) + { + dhcp_option(dhcp, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN); + dhcp_option_byte(dhcp, DHCP_DECLINE); + + dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); + dhcp_option_short(dhcp, 576); + + dhcp_option(dhcp, DHCP_OPTION_REQUESTED_IP, 4); + dhcp_option_long(dhcp, ntohl(dhcp->offered_ip_addr.addr)); + + dhcp_option_trailer(dhcp); + /* resize pbuf to reflect true size of options */ + pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); + + udp_bind(dhcp->pcb, IP_ADDR_ANY, DHCP_CLIENT_PORT); + /* @todo: should we really connect here? we are performing sendto() */ + udp_connect(dhcp->pcb, IP_ADDR_ANY, DHCP_SERVER_PORT); + /* per section 4.4.4, broadcast DECLINE messages */ + udp_sendto(dhcp->pcb, dhcp->p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT); + dhcp_delete_request(netif); + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | DBG_STATE, ("dhcp_decline: BACKING OFF\n")); + } else { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 2, ("dhcp_decline: could not allocate DHCP request\n")); + } + dhcp->tries++; + msecs = 10*1000; + dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE, ("dhcp_decline(): set request timeout %"U16_F" msecs\n", msecs)); + return result; +} +#endif + + +/** + * Start the DHCP process, discover a DHCP server. + * + */ +static err_t dhcp_discover(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + err_t result = ERR_OK; + u16_t msecs; + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 3, ("dhcp_discover()\n")); + ip_addr_set(&dhcp->offered_ip_addr, IP_ADDR_ANY); + /* create and initialize the DHCP message header */ + result = dhcp_create_request(netif); + if (result == ERR_OK) + { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE, ("dhcp_discover: making request\n")); + dhcp_option(dhcp, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN); + dhcp_option_byte(dhcp, DHCP_DISCOVER); + + dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); + dhcp_option_short(dhcp, 576); + + dhcp_option(dhcp, DHCP_OPTION_PARAMETER_REQUEST_LIST, 4/*num options*/); + dhcp_option_byte(dhcp, DHCP_OPTION_SUBNET_MASK); + dhcp_option_byte(dhcp, DHCP_OPTION_ROUTER); + dhcp_option_byte(dhcp, DHCP_OPTION_BROADCAST); + dhcp_option_byte(dhcp, DHCP_OPTION_DNS_SERVER); + + dhcp_option_trailer(dhcp); + + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE, ("dhcp_discover: realloc()ing\n")); + pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); + + /* set receive callback function with netif as user data */ + udp_recv(dhcp->pcb, dhcp_recv, netif); + udp_bind(dhcp->pcb, IP_ADDR_ANY, DHCP_CLIENT_PORT); + udp_connect(dhcp->pcb, IP_ADDR_ANY, DHCP_SERVER_PORT); + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE, ("dhcp_discover: sendto(DISCOVER, IP_ADDR_BROADCAST, DHCP_SERVER_PORT)\n")); + udp_sendto(dhcp->pcb, dhcp->p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT); + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE, ("dhcp_discover: deleting()ing\n")); + dhcp_delete_request(netif); + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | DBG_STATE, ("dhcp_discover: SELECTING\n")); + dhcp_set_state(dhcp, DHCP_SELECTING); + } else { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 2, ("dhcp_discover: could not allocate DHCP request\n")); + } + dhcp->tries++; + msecs = dhcp->tries < 4 ? (dhcp->tries + 1) * 1000 : 10 * 1000; + dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | DBG_STATE, ("dhcp_discover(): set request timeout %"U16_F" msecs\n", msecs)); + return result; +} + + +/** + * Bind the interface to the offered IP address. + * + * @param netif network interface to bind to the offered address + */ +static void dhcp_bind(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + struct ip_addr sn_mask, gw_addr; + LWIP_ASSERT("dhcp_bind: netif != NULL", netif != NULL); + LWIP_ASSERT("dhcp_bind: dhcp != NULL", dhcp != NULL); + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 3, ("dhcp_bind(netif=%p) %c%c%"U16_F"\n", (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num)); + + /* temporary DHCP lease? */ + if (dhcp->offered_t1_renew != 0xffffffffUL) { + /* set renewal period timer */ + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE, ("dhcp_bind(): t1 renewal timer %"U32_F" secs\n", dhcp->offered_t1_renew)); + dhcp->t1_timeout = (dhcp->offered_t1_renew + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS; + if (dhcp->t1_timeout == 0) dhcp->t1_timeout = 1; + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | DBG_STATE, ("dhcp_bind(): set request timeout %"U32_F" msecs\n", dhcp->offered_t1_renew*1000)); + } + /* set renewal period timer */ + if (dhcp->offered_t2_rebind != 0xffffffffUL) { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE, ("dhcp_bind(): t2 rebind timer %"U32_F" secs\n", dhcp->offered_t2_rebind)); + dhcp->t2_timeout = (dhcp->offered_t2_rebind + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS; + if (dhcp->t2_timeout == 0) dhcp->t2_timeout = 1; + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | DBG_STATE, ("dhcp_bind(): set request timeout %"U32_F" msecs\n", dhcp->offered_t2_rebind*1000)); + } + /* copy offered network mask */ + ip_addr_set(&sn_mask, &dhcp->offered_sn_mask); + + /* subnet mask not given? */ + /* TODO: this is not a valid check. what if the network mask is 0? */ + if (sn_mask.addr == 0) { + /* choose a safe subnet mask given the network class */ + u8_t first_octet = ip4_addr1(&sn_mask); + if (first_octet <= 127) sn_mask.addr = htonl(0xff000000); + else if (first_octet >= 192) sn_mask.addr = htonl(0xffffff00); + else sn_mask.addr = htonl(0xffff0000); + } + + ip_addr_set(&gw_addr, &dhcp->offered_gw_addr); + /* gateway address not given? */ + if (gw_addr.addr == 0) { + /* copy network address */ + gw_addr.addr = (dhcp->offered_ip_addr.addr & sn_mask.addr); + /* use first host address on network as gateway */ + gw_addr.addr |= htonl(0x00000001); + } + + LWIP_DEBUGF(DHCP_DEBUG | DBG_STATE, ("dhcp_bind(): IP: 0x%08"X32_F"\n", dhcp->offered_ip_addr.addr)); + netif_set_ipaddr(netif, &dhcp->offered_ip_addr); + LWIP_DEBUGF(DHCP_DEBUG | DBG_STATE, ("dhcp_bind(): SN: 0x%08"X32_F"\n", sn_mask.addr)); + netif_set_netmask(netif, &sn_mask); + LWIP_DEBUGF(DHCP_DEBUG | DBG_STATE, ("dhcp_bind(): GW: 0x%08"X32_F"\n", gw_addr.addr)); + netif_set_gw(netif, &gw_addr); + /* bring the interface up */ + netif_set_up(netif); + /* netif is now bound to DHCP leased address */ + dhcp_set_state(dhcp, DHCP_BOUND); +} + +/** + * Renew an existing DHCP lease at the involved DHCP server. + * + * @param netif network interface which must renew its lease + */ +err_t dhcp_renew(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + err_t result; + u16_t msecs; + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 3, ("dhcp_renew()\n")); + dhcp_set_state(dhcp, DHCP_RENEWING); + + /* create and initialize the DHCP message header */ + result = dhcp_create_request(netif); + if (result == ERR_OK) { + + dhcp_option(dhcp, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN); + dhcp_option_byte(dhcp, DHCP_REQUEST); + + dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); + /* TODO: use netif->mtu in some way */ + dhcp_option_short(dhcp, 576); + +#if 0 + dhcp_option(dhcp, DHCP_OPTION_REQUESTED_IP, 4); + dhcp_option_long(dhcp, ntohl(dhcp->offered_ip_addr.addr)); +#endif + +#if 0 + dhcp_option(dhcp, DHCP_OPTION_SERVER_ID, 4); + dhcp_option_long(dhcp, ntohl(dhcp->server_ip_addr.addr)); +#endif + /* append DHCP message trailer */ + dhcp_option_trailer(dhcp); + + pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); + + udp_bind(dhcp->pcb, IP_ADDR_ANY, DHCP_CLIENT_PORT); + udp_connect(dhcp->pcb, &dhcp->server_ip_addr, DHCP_SERVER_PORT); + udp_send(dhcp->pcb, dhcp->p_out); + dhcp_delete_request(netif); + + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | DBG_STATE, ("dhcp_renew: RENEWING\n")); + } else { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 2, ("dhcp_renew: could not allocate DHCP request\n")); + } + dhcp->tries++; + /* back-off on retries, but to a maximum of 20 seconds */ + msecs = dhcp->tries < 10 ? dhcp->tries * 2000 : 20 * 1000; + dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | DBG_STATE, ("dhcp_renew(): set request timeout %"U16_F" msecs\n", msecs)); + return result; +} + +/** + * Rebind with a DHCP server for an existing DHCP lease. + * + * @param netif network interface which must rebind with a DHCP server + */ +static err_t dhcp_rebind(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + err_t result; + u16_t msecs; + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | DBG_STATE, ("dhcp_rebind()\n")); + dhcp_set_state(dhcp, DHCP_REBINDING); + + /* create and initialize the DHCP message header */ + result = dhcp_create_request(netif); + if (result == ERR_OK) + { + + dhcp_option(dhcp, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN); + dhcp_option_byte(dhcp, DHCP_REQUEST); + + dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); + dhcp_option_short(dhcp, 576); + +#if 0 + dhcp_option(dhcp, DHCP_OPTION_REQUESTED_IP, 4); + dhcp_option_long(dhcp, ntohl(dhcp->offered_ip_addr.addr)); + + dhcp_option(dhcp, DHCP_OPTION_SERVER_ID, 4); + dhcp_option_long(dhcp, ntohl(dhcp->server_ip_addr.addr)); +#endif + + dhcp_option_trailer(dhcp); + + pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); + + /* set remote IP association to any DHCP server */ + udp_bind(dhcp->pcb, IP_ADDR_ANY, DHCP_CLIENT_PORT); + udp_connect(dhcp->pcb, IP_ADDR_ANY, DHCP_SERVER_PORT); + /* broadcast to server */ + udp_sendto(dhcp->pcb, dhcp->p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT); + dhcp_delete_request(netif); + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | DBG_STATE, ("dhcp_rebind: REBINDING\n")); + } else { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 2, ("dhcp_rebind: could not allocate DHCP request\n")); + } + dhcp->tries++; + msecs = dhcp->tries < 10 ? dhcp->tries * 1000 : 10 * 1000; + dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | DBG_STATE, ("dhcp_rebind(): set request timeout %"U16_F" msecs\n", msecs)); + return result; +} + +/** + * Release a DHCP lease. + * + * @param netif network interface which must release its lease + */ +err_t dhcp_release(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + err_t result; + u16_t msecs; + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 3, ("dhcp_release()\n")); + + /* idle DHCP client */ + dhcp_set_state(dhcp, DHCP_OFF); + /* clean old DHCP offer */ + dhcp->server_ip_addr.addr = 0; + dhcp->offered_ip_addr.addr = dhcp->offered_sn_mask.addr = 0; + dhcp->offered_gw_addr.addr = dhcp->offered_bc_addr.addr = 0; + dhcp->offered_t0_lease = dhcp->offered_t1_renew = dhcp->offered_t2_rebind = 0; + dhcp->dns_count = 0; + + /* create and initialize the DHCP message header */ + result = dhcp_create_request(netif); + if (result == ERR_OK) { + dhcp_option(dhcp, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN); + dhcp_option_byte(dhcp, DHCP_RELEASE); + + dhcp_option_trailer(dhcp); + + pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); + + udp_bind(dhcp->pcb, IP_ADDR_ANY, DHCP_CLIENT_PORT); + udp_connect(dhcp->pcb, &dhcp->server_ip_addr, DHCP_SERVER_PORT); + udp_send(dhcp->pcb, dhcp->p_out); + dhcp_delete_request(netif); + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | DBG_STATE, ("dhcp_release: RELEASED, DHCP_OFF\n")); + } else { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 2, ("dhcp_release: could not allocate DHCP request\n")); + } + dhcp->tries++; + msecs = dhcp->tries < 10 ? dhcp->tries * 1000 : 10 * 1000; + dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | DBG_STATE, ("dhcp_release(): set request timeout %"U16_F" msecs\n", msecs)); + /* bring the interface down */ + netif_set_down(netif); + /* remove IP address from interface */ + netif_set_ipaddr(netif, IP_ADDR_ANY); + netif_set_gw(netif, IP_ADDR_ANY); + netif_set_netmask(netif, IP_ADDR_ANY); + + /* TODO: netif_down(netif); */ + return result; +} +/** + * Remove the DHCP client from the interface. + * + * @param netif The network interface to stop DHCP on + */ +void dhcp_stop(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + LWIP_ASSERT("dhcp_stop: netif != NULL", netif != NULL); + + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 3, ("dhcp_stop()\n")); + /* netif is DHCP configured? */ + if (dhcp != NULL) + { + if (dhcp->pcb != NULL) + { + udp_remove(dhcp->pcb); + dhcp->pcb = NULL; + } + if (dhcp->p != NULL) + { + pbuf_free(dhcp->p); + dhcp->p = NULL; + } + /* free unfolded reply */ + dhcp_free_reply(dhcp); + mem_free((void *)dhcp); + netif->dhcp = NULL; + } +} + +/* + * Set the DHCP state of a DHCP client. + * + * If the state changed, reset the number of tries. + * + * TODO: we might also want to reset the timeout here? + */ +static void dhcp_set_state(struct dhcp *dhcp, u8_t new_state) +{ + if (new_state != dhcp->state) + { + dhcp->state = new_state; + dhcp->tries = 0; + } +} + +/* + * Concatenate an option type and length field to the outgoing + * DHCP message. + * + */ +static void dhcp_option(struct dhcp *dhcp, u8_t option_type, u8_t option_len) +{ + LWIP_ASSERT("dhcp_option_short: dhcp->options_out_len + 2 + option_len <= DHCP_OPTIONS_LEN", dhcp->options_out_len + 2 + option_len <= DHCP_OPTIONS_LEN); + dhcp->msg_out->options[dhcp->options_out_len++] = option_type; + dhcp->msg_out->options[dhcp->options_out_len++] = option_len; +} +/* + * Concatenate a single byte to the outgoing DHCP message. + * + */ +static void dhcp_option_byte(struct dhcp *dhcp, u8_t value) +{ + LWIP_ASSERT("dhcp_option_short: dhcp->options_out_len < DHCP_OPTIONS_LEN", dhcp->options_out_len < DHCP_OPTIONS_LEN); + dhcp->msg_out->options[dhcp->options_out_len++] = value; +} +static void dhcp_option_short(struct dhcp *dhcp, u16_t value) +{ + LWIP_ASSERT("dhcp_option_short: dhcp->options_out_len + 2 <= DHCP_OPTIONS_LEN", dhcp->options_out_len + 2 <= DHCP_OPTIONS_LEN); + dhcp->msg_out->options[dhcp->options_out_len++] = (value & 0xff00U) >> 8; + dhcp->msg_out->options[dhcp->options_out_len++] = value & 0x00ffU; +} +static void dhcp_option_long(struct dhcp *dhcp, u32_t value) +{ + LWIP_ASSERT("dhcp_option_long: dhcp->options_out_len + 4 <= DHCP_OPTIONS_LEN", dhcp->options_out_len + 4 <= DHCP_OPTIONS_LEN); + dhcp->msg_out->options[dhcp->options_out_len++] = (value & 0xff000000UL) >> 24; + dhcp->msg_out->options[dhcp->options_out_len++] = (value & 0x00ff0000UL) >> 16; + dhcp->msg_out->options[dhcp->options_out_len++] = (value & 0x0000ff00UL) >> 8; + dhcp->msg_out->options[dhcp->options_out_len++] = (value & 0x000000ffUL); +} + +/** + * Extract the DHCP message and the DHCP options. + * + * Extract the DHCP message and the DHCP options, each into a contiguous + * piece of memory. As a DHCP message is variable sized by its options, + * and also allows overriding some fields for options, the easy approach + * is to first unfold the options into a conitguous piece of memory, and + * use that further on. + * + */ +static err_t dhcp_unfold_reply(struct dhcp *dhcp) +{ + struct pbuf *p = dhcp->p; + u8_t *ptr; + u16_t i; + u16_t j = 0; + LWIP_ASSERT("dhcp->p != NULL", dhcp->p != NULL); + /* free any left-overs from previous unfolds */ + dhcp_free_reply(dhcp); + /* options present? */ + if (dhcp->p->tot_len > (sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN)) + { + dhcp->options_in_len = dhcp->p->tot_len - (sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN); + dhcp->options_in = mem_malloc(dhcp->options_in_len); + if (dhcp->options_in == NULL) + { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 2, ("dhcp_unfold_reply(): could not allocate dhcp->options\n")); + return ERR_MEM; + } + } + dhcp->msg_in = mem_malloc(sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN); + if (dhcp->msg_in == NULL) + { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 2, ("dhcp_unfold_reply(): could not allocate dhcp->msg_in\n")); + mem_free((void *)dhcp->options_in); + dhcp->options_in = NULL; + return ERR_MEM; + } + + ptr = (u8_t *)dhcp->msg_in; + /* proceed through struct dhcp_msg */ + for (i = 0; i < sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN; i++) + { + *ptr++ = ((u8_t *)p->payload)[j++]; + /* reached end of pbuf? */ + if (j == p->len) + { + /* proceed to next pbuf in chain */ + p = p->next; + j = 0; + } + } + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE, ("dhcp_unfold_reply(): copied %"U16_F" bytes into dhcp->msg_in[]\n", i)); + if (dhcp->options_in != NULL) { + ptr = (u8_t *)dhcp->options_in; + /* proceed through options */ + for (i = 0; i < dhcp->options_in_len; i++) { + *ptr++ = ((u8_t *)p->payload)[j++]; + /* reached end of pbuf? */ + if (j == p->len) { + /* proceed to next pbuf in chain */ + p = p->next; + j = 0; + } + } + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE, ("dhcp_unfold_reply(): copied %"U16_F" bytes to dhcp->options_in[]\n", i)); + } + return ERR_OK; +} + +/** + * Free the incoming DHCP message including contiguous copy of + * its DHCP options. + * + */ +static void dhcp_free_reply(struct dhcp *dhcp) +{ + if (dhcp->msg_in != NULL) { + mem_free((void *)dhcp->msg_in); + dhcp->msg_in = NULL; + } + if (dhcp->options_in) { + mem_free((void *)dhcp->options_in); + dhcp->options_in = NULL; + dhcp->options_in_len = 0; + } + LWIP_DEBUGF(DHCP_DEBUG, ("dhcp_free_reply(): free'd\n")); +} + + +/** + * If an incoming DHCP message is in response to us, then trigger the state machine + */ +static void dhcp_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, struct ip_addr *addr, u16_t port) +{ + struct netif *netif = (struct netif *)arg; + struct dhcp *dhcp = netif->dhcp; + struct dhcp_msg *reply_msg = (struct dhcp_msg *)p->payload; + u8_t *options_ptr; + u8_t msg_type; + u8_t i; + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 3, ("dhcp_recv(pbuf = %p) from DHCP server %"U16_F".%"U16_F".%"U16_F".%"U16_F" port %"U16_F"\n", (void*)p, + (u16_t)(ntohl(addr->addr) >> 24 & 0xff), (u16_t)(ntohl(addr->addr) >> 16 & 0xff), + (u16_t)(ntohl(addr->addr) >> 8 & 0xff), (u16_t)(ntohl(addr->addr) & 0xff), port)); + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE, ("pbuf->len = %"U16_F"\n", p->len)); + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE, ("pbuf->tot_len = %"U16_F"\n", p->tot_len)); + /* prevent warnings about unused arguments */ + (void)pcb; (void)addr; (void)port; + dhcp->p = p; + /* TODO: check packet length before reading them */ + if (reply_msg->op != DHCP_BOOTREPLY) { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 1, ("not a DHCP reply message, but type %"U16_F"\n", (u16_t)reply_msg->op)); + pbuf_free(p); + dhcp->p = NULL; + return; + } + /* iterate through hardware address and match against DHCP message */ + for (i = 0; i < netif->hwaddr_len; i++) { + if (netif->hwaddr[i] != reply_msg->chaddr[i]) { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 2, ("netif->hwaddr[%"U16_F"]==%02"X16_F" != reply_msg->chaddr[%"U16_F"]==%02"X16_F"\n", + (u16_t)i, (u16_t)netif->hwaddr[i], (u16_t)i, (u16_t)reply_msg->chaddr[i])); + pbuf_free(p); + dhcp->p = NULL; + return; + } + } + /* match transaction ID against what we expected */ + if (ntohl(reply_msg->xid) != dhcp->xid) { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 2, ("transaction id mismatch\n")); + pbuf_free(p); + dhcp->p = NULL; + return; + } + /* option fields could be unfold? */ + if (dhcp_unfold_reply(dhcp) != ERR_OK) { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 2, ("problem unfolding DHCP message - too short on memory?\n")); + pbuf_free(p); + dhcp->p = NULL; + return; + } + + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE, ("searching DHCP_OPTION_MESSAGE_TYPE\n")); + /* obtain pointer to DHCP message type */ + options_ptr = dhcp_get_option_ptr(dhcp, DHCP_OPTION_MESSAGE_TYPE); + if (options_ptr == NULL) { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 1, ("DHCP_OPTION_MESSAGE_TYPE option not found\n")); + pbuf_free(p); + dhcp->p = NULL; + return; + } + + /* read DHCP message type */ + msg_type = dhcp_get_option_byte(options_ptr + 2); + /* message type is DHCP ACK? */ + if (msg_type == DHCP_ACK) { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 1, ("DHCP_ACK received\n")); + /* in requesting state? */ + if (dhcp->state == DHCP_REQUESTING) { + dhcp_handle_ack(netif); + dhcp->request_timeout = 0; +#if DHCP_DOES_ARP_CHECK + /* check if the acknowledged lease address is already in use */ + dhcp_check(netif); +#else + /* bind interface to the acknowledged lease address */ + dhcp_bind(netif); +#endif + } + /* already bound to the given lease address? */ + else if ((dhcp->state == DHCP_REBOOTING) || (dhcp->state == DHCP_REBINDING) || (dhcp->state == DHCP_RENEWING)) { + dhcp->request_timeout = 0; + dhcp_bind(netif); + } + } + /* received a DHCP_NAK in appropriate state? */ + else if ((msg_type == DHCP_NAK) && + ((dhcp->state == DHCP_REBOOTING) || (dhcp->state == DHCP_REQUESTING) || + (dhcp->state == DHCP_REBINDING) || (dhcp->state == DHCP_RENEWING ))) { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 1, ("DHCP_NAK received\n")); + dhcp->request_timeout = 0; + dhcp_handle_nak(netif); + } + /* received a DHCP_OFFER in DHCP_SELECTING state? */ + else if ((msg_type == DHCP_OFFER) && (dhcp->state == DHCP_SELECTING)) { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 1, ("DHCP_OFFER received in DHCP_SELECTING state\n")); + dhcp->request_timeout = 0; + /* remember offered lease */ + dhcp_handle_offer(netif); + } + pbuf_free(p); + dhcp->p = NULL; +} + + +static err_t dhcp_create_request(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + u16_t i; + LWIP_ASSERT("dhcp_create_request: dhcp->p_out == NULL", dhcp->p_out == NULL); + LWIP_ASSERT("dhcp_create_request: dhcp->msg_out == NULL", dhcp->msg_out == NULL); + dhcp->p_out = pbuf_alloc(PBUF_TRANSPORT, sizeof(struct dhcp_msg), PBUF_RAM); + if (dhcp->p_out == NULL) { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 2, ("dhcp_create_request(): could not allocate pbuf\n")); + return ERR_MEM; + } + /* give unique transaction identifier to this request */ + dhcp->xid = xid++; + + dhcp->msg_out = (struct dhcp_msg *)dhcp->p_out->payload; + + dhcp->msg_out->op = DHCP_BOOTREQUEST; + /* TODO: make link layer independent */ + dhcp->msg_out->htype = DHCP_HTYPE_ETH; + /* TODO: make link layer independent */ + dhcp->msg_out->hlen = DHCP_HLEN_ETH; + dhcp->msg_out->hops = 0; + dhcp->msg_out->xid = htonl(dhcp->xid); + dhcp->msg_out->secs = 0; + dhcp->msg_out->flags = 0; + dhcp->msg_out->ciaddr.addr = netif->ip_addr.addr; + dhcp->msg_out->yiaddr.addr = 0; + dhcp->msg_out->siaddr.addr = 0; + dhcp->msg_out->giaddr.addr = 0; + for (i = 0; i < DHCP_CHADDR_LEN; i++) { + /* copy netif hardware address, pad with zeroes */ + dhcp->msg_out->chaddr[i] = (i < netif->hwaddr_len) ? netif->hwaddr[i] : 0/* pad byte*/; + } + for (i = 0; i < DHCP_SNAME_LEN; i++) dhcp->msg_out->sname[i] = 0; + for (i = 0; i < DHCP_FILE_LEN; i++) dhcp->msg_out->file[i] = 0; + dhcp->msg_out->cookie = htonl(0x63825363UL); + dhcp->options_out_len = 0; + /* fill options field with an incrementing array (for debugging purposes) */ + for (i = 0; i < DHCP_OPTIONS_LEN; i++) dhcp->msg_out->options[i] = i; + return ERR_OK; +} + +static void dhcp_delete_request(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + LWIP_ASSERT("dhcp_free_msg: dhcp->p_out != NULL", dhcp->p_out != NULL); + LWIP_ASSERT("dhcp_free_msg: dhcp->msg_out != NULL", dhcp->msg_out != NULL); + pbuf_free(dhcp->p_out); + dhcp->p_out = NULL; + dhcp->msg_out = NULL; +} + +/** + * Add a DHCP message trailer + * + * Adds the END option to the DHCP message, and if + * necessary, up to three padding bytes. + */ + +static void dhcp_option_trailer(struct dhcp *dhcp) +{ + LWIP_ASSERT("dhcp_option_trailer: dhcp->msg_out != NULL\n", dhcp->msg_out != NULL); + LWIP_ASSERT("dhcp_option_trailer: dhcp->options_out_len < DHCP_OPTIONS_LEN\n", dhcp->options_out_len < DHCP_OPTIONS_LEN); + dhcp->msg_out->options[dhcp->options_out_len++] = DHCP_OPTION_END; + /* packet is too small, or not 4 byte aligned? */ + while ((dhcp->options_out_len < DHCP_MIN_OPTIONS_LEN) || (dhcp->options_out_len & 3)) { + /* LWIP_DEBUGF(DHCP_DEBUG,("dhcp_option_trailer:dhcp->options_out_len=%"U16_F", DHCP_OPTIONS_LEN=%"U16_F, dhcp->options_out_len, DHCP_OPTIONS_LEN)); */ + LWIP_ASSERT("dhcp_option_trailer: dhcp->options_out_len < DHCP_OPTIONS_LEN\n", dhcp->options_out_len < DHCP_OPTIONS_LEN); + /* add a fill/padding byte */ + dhcp->msg_out->options[dhcp->options_out_len++] = 0; + } +} + +/** + * Find the offset of a DHCP option inside the DHCP message. + * + * @param client DHCP client + * @param option_type + * + * @return a byte offset into the UDP message where the option was found, or + * zero if the given option was not found. + */ +static u8_t *dhcp_get_option_ptr(struct dhcp *dhcp, u8_t option_type) +{ + u8_t overload = DHCP_OVERLOAD_NONE; + + /* options available? */ + if ((dhcp->options_in != NULL) && (dhcp->options_in_len > 0)) { + /* start with options field */ + u8_t *options = (u8_t *)dhcp->options_in; + u16_t offset = 0; + /* at least 1 byte to read and no end marker, then at least 3 bytes to read? */ + while ((offset < dhcp->options_in_len) && (options[offset] != DHCP_OPTION_END)) { + /* LWIP_DEBUGF(DHCP_DEBUG, ("msg_offset=%"U16_F", q->len=%"U16_F, msg_offset, q->len)); */ + /* are the sname and/or file field overloaded with options? */ + if (options[offset] == DHCP_OPTION_OVERLOAD) { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 2, ("overloaded message detected\n")); + /* skip option type and length */ + offset += 2; + overload = options[offset++]; + } + /* requested option found */ + else if (options[offset] == option_type) { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE, ("option found at offset %"U16_F" in options\n", offset)); + return &options[offset]; + /* skip option */ + } else { + LWIP_DEBUGF(DHCP_DEBUG, ("skipping option %"U16_F" in options\n", options[offset])); + /* skip option type */ + offset++; + /* skip option length, and then length bytes */ + offset += 1 + options[offset]; + } + } + /* is this an overloaded message? */ + if (overload != DHCP_OVERLOAD_NONE) { + u16_t field_len; + if (overload == DHCP_OVERLOAD_FILE) { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 1, ("overloaded file field\n")); + options = (u8_t *)&dhcp->msg_in->file; + field_len = DHCP_FILE_LEN; + } else if (overload == DHCP_OVERLOAD_SNAME) { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 1, ("overloaded sname field\n")); + options = (u8_t *)&dhcp->msg_in->sname; + field_len = DHCP_SNAME_LEN; + /* TODO: check if else if () is necessary */ + } else { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE | 1, ("overloaded sname and file field\n")); + options = (u8_t *)&dhcp->msg_in->sname; + field_len = DHCP_FILE_LEN + DHCP_SNAME_LEN; + } + offset = 0; + + /* at least 1 byte to read and no end marker */ + while ((offset < field_len) && (options[offset] != DHCP_OPTION_END)) { + if (options[offset] == option_type) { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE, ("option found at offset=%"U16_F"\n", offset)); + return &options[offset]; + /* skip option */ + } else { + LWIP_DEBUGF(DHCP_DEBUG | DBG_TRACE, ("skipping option %"U16_F"\n", options[offset])); + /* skip option type */ + offset++; + offset += 1 + options[offset]; + } + } + } + } + return 0; +} + +/** + * Return the byte of DHCP option data. + * + * @param client DHCP client. + * @param ptr pointer obtained by dhcp_get_option_ptr(). + * + * @return byte value at the given address. + */ +static u8_t dhcp_get_option_byte(u8_t *ptr) +{ + LWIP_DEBUGF(DHCP_DEBUG, ("option byte value=%"U16_F"\n", (u16_t)(*ptr))); + return *ptr; +} + +/** + * Return the 16-bit value of DHCP option data. + * + * @param client DHCP client. + * @param ptr pointer obtained by dhcp_get_option_ptr(). + * + * @return byte value at the given address. + */ +#if 0 +static u16_t dhcp_get_option_short(u8_t *ptr) +{ + u16_t value; + value = *ptr++ << 8; + value |= *ptr; + LWIP_DEBUGF(DHCP_DEBUG, ("option short value=%"U16_F"\n", value)); + return value; +} +#endif + +/** + * Return the 32-bit value of DHCP option data. + * + * @param client DHCP client. + * @param ptr pointer obtained by dhcp_get_option_ptr(). + * + * @return byte value at the given address. + */ +static u32_t dhcp_get_option_long(u8_t *ptr) +{ + u32_t value; + value = (u32_t)(*ptr++) << 24; + value |= (u32_t)(*ptr++) << 16; + value |= (u32_t)(*ptr++) << 8; + value |= (u32_t)(*ptr++); + LWIP_DEBUGF(DHCP_DEBUG, ("option long value=%"U32_F"\n", value)); + return value; +} + +#endif /* LWIP_DHCP */ diff --git a/wii/libogc/lwip/core/inet.c b/wii/libogc/lwip/core/inet.c new file mode 100644 index 0000000000..33a353eb02 --- /dev/null +++ b/wii/libogc/lwip/core/inet.c @@ -0,0 +1,330 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + + +/* inet.c + * + * Functions common to all TCP/IP modules, such as the Internet checksum and the + * byte order functions. + * + */ + + +#include "lwip/opt.h" + +#include "lwip/arch.h" + +#include "lwip/def.h" +#include "lwip/inet.h" + +#include "lwip/sys.h" + +/* This is a reference implementation of the checksum algorithm, with the + * aim of being simple, correct and fully portable. Checksumming is the + * first thing you would want to optimize for your platform. You will + * need to port it to your architecture and in your sys_arch.h: + * + * #define LWIP_CHKSUM +*/ +#ifndef LWIP_CHKSUM +#define LWIP_CHKSUM lwip_standard_chksum + +/** + * lwip checksum + * + * @param dataptr points to start of data to be summed at any boundary + * @param len length of data to be summed + * @return host order (!) lwip checksum (non-inverted Internet sum) + * + * @note accumulator size limits summable lenght to 64k + * @note host endianess is irrelevant (p3 RFC1071) + */ +static u16_t +lwip_standard_chksum(void *dataptr, u16_t len) +{ + u32_t acc; + u16_t src; + u8_t *octetptr; + + acc = 0; + /* dataptr may be at odd or even addresses */ + octetptr = (u8_t*)dataptr; + while (len > 1) + { + /* declare first octet as most significant + thus assume network order, ignoring host order */ + src = (*octetptr) << 8; + octetptr++; + /* declare second octet as least significant */ + src |= (*octetptr); + octetptr++; + acc += src; + len -= 2; + } + if (len > 0) + { + /* accumulate remaining octet */ + src = (*octetptr) << 8; + acc += src; + } + /* add deferred carry bits */ + acc = (acc >> 16) + (acc & 0x0000ffffUL); + if ((acc & 0xffff0000) != 0) { + acc = (acc >> 16) + (acc & 0x0000ffffUL); + } + /* This maybe a little confusing: reorder sum using htons() + instead of ntohs() since it has a little less call overhead. + The caller must invert bits for Internet sum ! */ + return htons((u16_t)acc); +} + +#endif + +#if 0 +/* + * Curt McDowell + * Broadcom Corp. + * csm@broadcom.com + * + * IP checksum two bytes at a time with support for + * unaligned buffer. + * Works for len up to and including 0x20000. + * by Curt McDowell, Broadcom Corp. 12/08/2005 + */ + +static u16_t +lwip_standard_chksum2(void *dataptr, int len) +{ + u8_t *pb = dataptr; + u16_t *ps, t = 0; + u32_t sum = 0; + int odd = ((u32_t)pb & 1); + + /* Get aligned to u16_t */ + if (odd && len > 0) { + ((u8_t *)&t)[1] = *pb++; + len--; + } + + /* Add the bulk of the data */ + ps = (u16_t *)pb; + while (len > 1) { + sum += *ps++; + len -= 2; + } + + /* Consume left-over byte, if any */ + if (len > 0) + ((u8_t *)&t)[0] = *(u8_t *)ps;; + + /* Add end bytes */ + sum += t; + + /* Fold 32-bit sum to 16 bits */ + while (sum >> 16) + sum = (sum & 0xffff) + (sum >> 16); + + /* Swap if alignment was odd */ + if (odd) + sum = ((sum & 0xff) << 8) | ((sum & 0xff00) >> 8); + + return sum; +} + +/** + * An optimized checksum routine. Basically, it uses loop-unrolling on + * the checksum loop, treating the head and tail bytes specially, whereas + * the inner loop acts on 8 bytes at a time. + * + * @arg start of buffer to be checksummed. May be an odd byte address. + * @len number of bytes in the buffer to be checksummed. + * + * @todo First argument type conflicts with generic checksum routine. + * + * by Curt McDowell, Broadcom Corp. December 8th, 2005 + */ + +static u16_t +lwip_standard_chksum4(u8_t *pb, int len) +{ + u16_t *ps, t = 0; + u32_t *pl; + u32_t sum = 0, tmp; + /* starts at odd byte address? */ + int odd = ((u32_t)pb & 1); + + if (odd && len > 0) { + ((u8_t *)&t)[1] = *pb++; + len--; + } + + ps = (u16_t *)pb; + + if (((u32_t)ps & 3) && len > 1) { + sum += *ps++; + len -= 2; + } + + pl = (u32_t *)ps; + + while (len > 7) { + tmp = sum + *pl++; /* ping */ + if (tmp < sum) + tmp++; /* add back carry */ + + sum = tmp + *pl++; /* pong */ + if (sum < tmp) + sum++; /* add back carry */ + + len -= 8; + } + + /* make room in upper bits */ + sum = (sum >> 16) + (sum & 0xffff); + + ps = (u16_t *)pl; + + /* 16-bit aligned word remaining? */ + while (len > 1) { + sum += *ps++; + len -= 2; + } + + /* dangling tail byte remaining? */ + if (len > 0) /* include odd byte */ + ((u8_t *)&t)[0] = *(u8_t *)ps; + + sum += t; /* add end bytes */ + + while (sum >> 16) /* combine halves */ + sum = (sum >> 16) + (sum & 0xffff); + + if (odd) + sum = ((sum & 0xff) << 8) | ((sum & 0xff00) >> 8); + + return sum; +} +#endif + +/* inet_chksum_pseudo: + * + * Calculates the pseudo Internet checksum used by TCP and UDP for a pbuf chain. + */ + +u16_t +inet_chksum_pseudo(struct pbuf *p, + struct ip_addr *src, struct ip_addr *dest, + u8_t proto, u16_t proto_len) +{ + u32_t acc; + struct pbuf *q; + u8_t swapped; + + acc = 0; + swapped = 0; + /* iterate through all pbuf in chain */ + for(q = p; q != NULL; q = q->next) { + LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): checksumming pbuf %p (has next %p) \n", + (void *)q, (void *)q->next)); + acc += LWIP_CHKSUM(q->payload, q->len); + /*LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): unwrapped lwip_chksum()=%"X32_F" \n", acc));*/ + while (acc >> 16) { + acc = (acc & 0xffffUL) + (acc >> 16); + } + if (q->len % 2 != 0) { + swapped = 1 - swapped; + acc = ((acc & 0xff) << 8) | ((acc & 0xff00UL) >> 8); + } + /*LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): wrapped lwip_chksum()=%"X32_F" \n", acc));*/ + } + + if (swapped) { + acc = ((acc & 0xff) << 8) | ((acc & 0xff00UL) >> 8); + } + acc += (src->addr & 0xffffUL); + acc += ((src->addr >> 16) & 0xffffUL); + acc += (dest->addr & 0xffffUL); + acc += ((dest->addr >> 16) & 0xffffUL); + acc += (u32_t)htons((u16_t)proto); + acc += (u32_t)htons(proto_len); + + while (acc >> 16) { + acc = (acc & 0xffffUL) + (acc >> 16); + } + LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): pbuf chain lwip_chksum()=%"X32_F"\n", acc)); + return (u16_t)~(acc & 0xffffUL); +} + +/* inet_chksum: + * + * Calculates the Internet checksum over a portion of memory. Used primarely for IP + * and ICMP. + */ + +u16_t +inet_chksum(void *dataptr, u16_t len) +{ + u32_t acc; + + acc = LWIP_CHKSUM(dataptr, len); + while (acc >> 16) { + acc = (acc & 0xffff) + (acc >> 16); + } + return (u16_t)~(acc & 0xffff); +} + +u16_t +inet_chksum_pbuf(struct pbuf *p) +{ + u32_t acc; + struct pbuf *q; + u8_t swapped; + + acc = 0; + swapped = 0; + for(q = p; q != NULL; q = q->next) { + acc += LWIP_CHKSUM(q->payload, q->len); + while (acc >> 16) { + acc = (acc & 0xffffUL) + (acc >> 16); + } + if (q->len % 2 != 0) { + swapped = 1 - swapped; + acc = (acc & 0x00ffUL << 8) | (acc & 0xff00UL >> 8); + } + } + + if (swapped) { + acc = ((acc & 0x00ffUL) << 8) | ((acc & 0xff00UL) >> 8); + } + return (u16_t)~(acc & 0xffffUL); +} + diff --git a/wii/libogc/lwip/core/inet6.c b/wii/libogc/lwip/core/inet6.c new file mode 100644 index 0000000000..c04915b73d --- /dev/null +++ b/wii/libogc/lwip/core/inet6.c @@ -0,0 +1,168 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + + +/* inet6.c + * + * Functions common to all TCP/IP modules, such as the Internet checksum and the + * byte order functions. + * + */ + + +#include "lwip/opt.h" + +#include "lwip/def.h" +#include "lwip/inet.h" + + + +/* chksum: + * + * Sums up all 16 bit words in a memory portion. Also includes any odd byte. + * This function is used by the other checksum functions. + * + * For now, this is not optimized. Must be optimized for the particular processor + * arcitecture on which it is to run. Preferebly coded in assembler. + */ + +static u32_t +chksum(void *dataptr, u16_t len) +{ + u16_t *sdataptr = dataptr; + u32_t acc; + + + for(acc = 0; len > 1; len -= 2) { + acc += *sdataptr++; + } + + /* add up any odd byte */ + if (len == 1) { + acc += htons((u16_t)(*(u8_t *)dataptr) << 8); + } + + return acc; + +} + +/* inet_chksum_pseudo: + * + * Calculates the pseudo Internet checksum used by TCP and UDP for a pbuf chain. + */ + +u16_t +inet_chksum_pseudo(struct pbuf *p, + struct ip_addr *src, struct ip_addr *dest, + u8_t proto, u32_t proto_len) +{ + u32_t acc; + struct pbuf *q; + u8_t swapped, i; + + acc = 0; + swapped = 0; + for(q = p; q != NULL; q = q->next) { + acc += chksum(q->payload, q->len); + while (acc >> 16) { + acc = (acc & 0xffff) + (acc >> 16); + } + if (q->len % 2 != 0) { + swapped = 1 - swapped; + acc = ((acc & 0xff) << 8) | ((acc & 0xff00) >> 8); + } + } + + if (swapped) { + acc = ((acc & 0xff) << 8) | ((acc & 0xff00) >> 8); + } + + for(i = 0; i < 8; i++) { + acc += ((u16_t *)src->addr)[i] & 0xffff; + acc += ((u16_t *)dest->addr)[i] & 0xffff; + while (acc >> 16) { + acc = (acc & 0xffff) + (acc >> 16); + } + } + acc += (u16_t)htons((u16_t)proto); + acc += ((u16_t *)&proto_len)[0] & 0xffff; + acc += ((u16_t *)&proto_len)[1] & 0xffff; + + while (acc >> 16) { + acc = (acc & 0xffff) + (acc >> 16); + } + return ~(acc & 0xffff); +} + +/* inet_chksum: + * + * Calculates the Internet checksum over a portion of memory. Used primarely for IP + * and ICMP. + */ + +u16_t +inet_chksum(void *dataptr, u16_t len) +{ + u32_t acc, sum; + + acc = chksum(dataptr, len); + sum = (acc & 0xffff) + (acc >> 16); + sum += (sum >> 16); + return ~(sum & 0xffff); +} + +u16_t +inet_chksum_pbuf(struct pbuf *p) +{ + u32_t acc; + struct pbuf *q; + u8_t swapped; + + acc = 0; + swapped = 0; + for(q = p; q != NULL; q = q->next) { + acc += chksum(q->payload, q->len); + while (acc >> 16) { + acc = (acc & 0xffff) + (acc >> 16); + } + if (q->len % 2 != 0) { + swapped = 1 - swapped; + acc = (acc & 0xff << 8) | (acc & 0xff00 >> 8); + } + } + + if (swapped) { + acc = ((acc & 0xff) << 8) | ((acc & 0xff00) >> 8); + } + return ~(acc & 0xffff); +} + diff --git a/wii/libogc/lwip/core/ipv4/icmp.c b/wii/libogc/lwip/core/ipv4/icmp.c new file mode 100644 index 0000000000..02d467e43c --- /dev/null +++ b/wii/libogc/lwip/core/ipv4/icmp.c @@ -0,0 +1,203 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +/* Some ICMP messages should be passed to the transport protocols. This + is not implemented. */ + +#include + +#include "lwip/opt.h" +#include "lwip/icmp.h" +#include "lwip/inet.h" +#include "lwip/ip.h" +#include "lwip/def.h" +#include "lwip/stats.h" +#include "lwip/snmp.h" + +void +icmp_input(struct pbuf *p, struct netif *inp) +{ + u8_t type; + u8_t code; + struct icmp_echo_hdr *iecho; + struct ip_hdr *iphdr; + struct ip_addr tmpaddr; + u16_t hlen; + + ICMP_STATS_INC(icmp.recv); + snmp_inc_icmpinmsgs(); + + + iphdr = p->payload; + hlen = IPH_HL(iphdr) * 4; + if (pbuf_header(p, -((s16_t)hlen)) || (p->tot_len < sizeof(u16_t)*2)) { + LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: short ICMP (%"U16_F" bytes) received\n", p->tot_len)); + pbuf_free(p); + ICMP_STATS_INC(icmp.lenerr); + snmp_inc_icmpinerrors(); + return; + } + + type = *((u8_t *)p->payload); + code = *(((u8_t *)p->payload)+1); + (void)code; + switch (type) { + case ICMP_ECHO: + /* broadcast or multicast destination address? */ + if (ip_addr_isbroadcast(&iphdr->dest, inp) || ip_addr_ismulticast(&iphdr->dest)) { + LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: Not echoing to multicast or broadcast pings\n")); + ICMP_STATS_INC(icmp.err); + pbuf_free(p); + return; + } + LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: ping\n")); + if (p->tot_len < sizeof(struct icmp_echo_hdr)) { + LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: bad ICMP echo received\n")); + pbuf_free(p); + ICMP_STATS_INC(icmp.lenerr); + snmp_inc_icmpinerrors(); + + return; + } + iecho = p->payload; + if (inet_chksum_pbuf(p) != 0) { + LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: checksum failed for received ICMP echo\n")); + pbuf_free(p); + ICMP_STATS_INC(icmp.chkerr); + snmp_inc_icmpinerrors(); + return; + } + tmpaddr.addr = iphdr->src.addr; + iphdr->src.addr = iphdr->dest.addr; + iphdr->dest.addr = tmpaddr.addr; + ICMPH_TYPE_SET(iecho, ICMP_ER); + /* adjust the checksum */ + if (iecho->chksum >= htons(0xffff - (ICMP_ECHO << 8))) { + iecho->chksum += htons(ICMP_ECHO << 8) + 1; + } else { + iecho->chksum += htons(ICMP_ECHO << 8); + } + ICMP_STATS_INC(icmp.xmit); + /* increase number of messages attempted to send */ + snmp_inc_icmpoutmsgs(); + /* increase number of echo replies attempted to send */ + snmp_inc_icmpoutechoreps(); + + pbuf_header(p, hlen); + ip_output_if(p, &(iphdr->src), IP_HDRINCL, + IPH_TTL(iphdr), 0, IP_PROTO_ICMP, inp); + break; + default: + LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: ICMP type %"S16_F" code %"S16_F" not supported.\n", (s16_t)type, (s16_t)code)); + ICMP_STATS_INC(icmp.proterr); + ICMP_STATS_INC(icmp.drop); + } + pbuf_free(p); +} + +void +icmp_dest_unreach(struct pbuf *p, enum icmp_dur_type t) +{ + struct pbuf *q; + struct ip_hdr *iphdr; + struct icmp_dur_hdr *idur; + + q = pbuf_alloc(PBUF_IP, 8 + IP_HLEN + 8, PBUF_RAM); + /* ICMP header + IP header + 8 bytes of data */ + + iphdr = p->payload; + + idur = q->payload; + ICMPH_TYPE_SET(idur, ICMP_DUR); + ICMPH_CODE_SET(idur, t); + + memcpy((u8_t *)q->payload + 8, p->payload, IP_HLEN + 8); + + /* calculate checksum */ + idur->chksum = 0; + idur->chksum = inet_chksum(idur, q->len); + ICMP_STATS_INC(icmp.xmit); + /* increase number of messages attempted to send */ + snmp_inc_icmpoutmsgs(); + /* increase number of destination unreachable messages attempted to send */ + snmp_inc_icmpoutdestunreachs(); + + ip_output(q, NULL, &(iphdr->src), + ICMP_TTL, 0, IP_PROTO_ICMP); + pbuf_free(q); +} + +#if IP_FORWARD +void +icmp_time_exceeded(struct pbuf *p, enum icmp_te_type t) +{ + struct pbuf *q; + struct ip_hdr *iphdr; + struct icmp_te_hdr *tehdr; + + q = pbuf_alloc(PBUF_IP, 8 + IP_HLEN + 8, PBUF_RAM); + + iphdr = p->payload; + LWIP_DEBUGF(ICMP_DEBUG, ("icmp_time_exceeded from ")); + ip_addr_debug_print(ICMP_DEBUG, &(iphdr->src)); + LWIP_DEBUGF(ICMP_DEBUG, (" to ")); + ip_addr_debug_print(ICMP_DEBUG, &(iphdr->dest)); + LWIP_DEBUGF(ICMP_DEBUG, ("\n")); + + tehdr = q->payload; + ICMPH_TYPE_SET(tehdr, ICMP_TE); + ICMPH_CODE_SET(tehdr, t); + + /* copy fields from original packet */ + memcpy((u8_t *)q->payload + 8, (u8_t *)p->payload, IP_HLEN + 8); + + /* calculate checksum */ + tehdr->chksum = 0; + tehdr->chksum = inet_chksum(tehdr, q->len); + ICMP_STATS_INC(icmp.xmit); + /* increase number of messages attempted to send */ + snmp_inc_icmpoutmsgs(); + /* increase number of destination unreachable messages attempted to send */ + snmp_inc_icmpouttimeexcds(); + ip_output(q, NULL, &(iphdr->src), + ICMP_TTL, 0, IP_PROTO_ICMP); + pbuf_free(q); +} + +#endif /* IP_FORWARD */ + + + + + + + diff --git a/wii/libogc/lwip/core/ipv4/ip.c b/wii/libogc/lwip/core/ipv4/ip.c new file mode 100644 index 0000000000..4db68c8e86 --- /dev/null +++ b/wii/libogc/lwip/core/ipv4/ip.c @@ -0,0 +1,508 @@ +/* @file + * + * This is the IP layer implementation for incoming and outgoing IP traffic. + * + * @see ip_frag.c + * + */ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/opt.h" + +#include "lwip/def.h" +#include "lwip/mem.h" +#include "lwip/ip.h" +#include "lwip/ip_frag.h" +#include "lwip/inet.h" +#include "lwip/netif.h" +#include "lwip/icmp.h" +#include "lwip/raw.h" +#include "lwip/udp.h" +#include "lwip/tcp.h" + +#include "lwip/stats.h" + +#include "arch/perf.h" + +#include "lwip/snmp.h" +#if LWIP_DHCP +# include "lwip/dhcp.h" +#endif /* LWIP_DHCP */ + + +/** + * Initializes the IP layer. + */ + +void +ip_init(void) +{ + /* no initializations as of yet */ +} + +/** + * Finds the appropriate network interface for a given IP address. It + * searches the list of network interfaces linearly. A match is found + * if the masked IP address of the network interface equals the masked + * IP address given to the function. + */ + +struct netif * +ip_route(struct ip_addr *dest) +{ + struct netif *netif; + + /* iterate through netifs */ + for(netif = netif_list; netif != NULL; netif = netif->next) { + /* network mask matches? */ + if (ip_addr_netcmp(dest, &(netif->ip_addr), &(netif->netmask))) { + /* return netif on which to forward IP packet */ + return netif; + } + } + /* no matching netif found, use default netif */ + return netif_default; +} +#if IP_FORWARD + +/** + * Forwards an IP packet. It finds an appropriate route for the + * packet, decrements the TTL value of the packet, adjusts the + * checksum and outputs the packet on the appropriate interface. + */ + +static struct netif * +ip_forward(struct pbuf *p, struct ip_hdr *iphdr, struct netif *inp) +{ + struct netif *netif; + + PERF_START; + /* Find network interface where to forward this IP packet to. */ + netif = ip_route((struct ip_addr *)&(iphdr->dest)); + if (netif == NULL) { + LWIP_DEBUGF(IP_DEBUG, ("ip_forward: no forwarding route for 0x%"X32_F" found\n", + iphdr->dest.addr)); + snmp_inc_ipnoroutes(); + return (struct netif *)NULL; + } + /* Do not forward packets onto the same network interface on which + * they arrived. */ + if (netif == inp) { + LWIP_DEBUGF(IP_DEBUG, ("ip_forward: not bouncing packets back on incoming interface.\n")); + snmp_inc_ipnoroutes(); + return (struct netif *)NULL; + } + + /* decrement TTL */ + IPH_TTL_SET(iphdr, IPH_TTL(iphdr) - 1); + /* send ICMP if TTL == 0 */ + if (IPH_TTL(iphdr) == 0) { + /* Don't send ICMP messages in response to ICMP messages */ + if (IPH_PROTO(iphdr) != IP_PROTO_ICMP) { + icmp_time_exceeded(p, ICMP_TE_TTL); + snmp_inc_icmpouttimeexcds(); + } + return (struct netif *)NULL; + } + + /* Incrementally update the IP checksum. */ + if (IPH_CHKSUM(iphdr) >= htons(0xffff - 0x100)) { + IPH_CHKSUM_SET(iphdr, IPH_CHKSUM(iphdr) + htons(0x100) + 1); + } else { + IPH_CHKSUM_SET(iphdr, IPH_CHKSUM(iphdr) + htons(0x100)); + } + + LWIP_DEBUGF(IP_DEBUG, ("ip_forward: forwarding packet to 0x%"X32_F"\n", + iphdr->dest.addr)); + + IP_STATS_INC(ip.fw); + IP_STATS_INC(ip.xmit); + snmp_inc_ipforwdatagrams(); + + PERF_STOP("ip_forward"); + /* transmit pbuf on chosen interface */ + netif->output(netif, p, (struct ip_addr *)&(iphdr->dest)); + return netif; +} +#endif /* IP_FORWARD */ + +/** + * This function is called by the network interface device driver when + * an IP packet is received. The function does the basic checks of the + * IP header such as packet size being at least larger than the header + * size etc. If the packet was not destined for us, the packet is + * forwarded (using ip_forward). The IP checksum is always checked. + * + * Finally, the packet is sent to the upper layer protocol input function. + * + * + * + */ + +err_t +ip_input(struct pbuf *p, struct netif *inp) { + struct ip_hdr *iphdr; + struct netif *netif; + u16_t iphdrlen; + + IP_STATS_INC(ip.recv); + snmp_inc_ipinreceives(); + + /* identify the IP header */ + iphdr = p->payload; + if (IPH_V(iphdr) != 4) { + LWIP_DEBUGF(IP_DEBUG | 1, ("IP packet dropped due to bad version number %"U16_F"\n", IPH_V(iphdr))); + ip_debug_print(p); + pbuf_free(p); + IP_STATS_INC(ip.err); + IP_STATS_INC(ip.drop); + snmp_inc_ipunknownprotos(); + return ERR_OK; + } + /* obtain IP header length in number of 32-bit words */ + iphdrlen = IPH_HL(iphdr); + /* calculate IP header length in bytes */ + iphdrlen *= 4; + + /* header length exceeds first pbuf length? */ + if (iphdrlen > p->len) { + LWIP_DEBUGF(IP_DEBUG | 2, ("IP header (len %"U16_F") does not fit in first pbuf (len %"U16_F"), IP packet droppped.\n", + iphdrlen, p->len)); + /* free (drop) packet pbufs */ + pbuf_free(p); + IP_STATS_INC(ip.lenerr); + IP_STATS_INC(ip.drop); + snmp_inc_ipindiscards(); + return ERR_OK; + } + + /* verify checksum */ +#if CHECKSUM_CHECK_IP + if (inet_chksum(iphdr, iphdrlen) != 0) { + + LWIP_DEBUGF(IP_DEBUG | 2, ("Checksum (0x%"X16_F") failed, IP packet dropped.\n", inet_chksum(iphdr, iphdrlen))); + ip_debug_print(p); + pbuf_free(p); + IP_STATS_INC(ip.chkerr); + IP_STATS_INC(ip.drop); + snmp_inc_ipindiscards(); + return ERR_OK; + } +#endif + + /* Trim pbuf. This should have been done at the netif layer, + * but we'll do it anyway just to be sure that its done. */ + pbuf_realloc(p, ntohs(IPH_LEN(iphdr))); + + /* match packet against an interface, i.e. is this packet for us? */ + for (netif = netif_list; netif != NULL; netif = netif->next) { + + LWIP_DEBUGF(IP_DEBUG, ("ip_input: iphdr->dest 0x%"X32_F" netif->ip_addr 0x%"X32_F" (0x%"X32_F", 0x%"X32_F", 0x%"X32_F")\n", + iphdr->dest.addr, netif->ip_addr.addr, + iphdr->dest.addr & netif->netmask.addr, + netif->ip_addr.addr & netif->netmask.addr, + iphdr->dest.addr & ~(netif->netmask.addr))); + + /* interface is up and configured? */ + if ((netif_is_up(netif)) && (!ip_addr_isany(&(netif->ip_addr)))) + { + /* unicast to this interface address? */ + if (ip_addr_cmp(&(iphdr->dest), &(netif->ip_addr)) || + /* or broadcast on this interface network address? */ + ip_addr_isbroadcast(&(iphdr->dest), netif)) { + LWIP_DEBUGF(IP_DEBUG, ("ip_input: packet accepted on interface %c%c\n", + netif->name[0], netif->name[1])); + /* break out of for loop */ + break; + } + } + } +#if LWIP_DHCP + /* Pass DHCP messages regardless of destination address. DHCP traffic is addressed + * using link layer addressing (such as Ethernet MAC) so we must not filter on IP. + * According to RFC 1542 section 3.1.1, referred by RFC 2131). + */ + if (netif == NULL) { + /* remote port is DHCP server? */ + if (IPH_PROTO(iphdr) == IP_PROTO_UDP) { + LWIP_DEBUGF(IP_DEBUG | DBG_TRACE | 1, ("ip_input: UDP packet to DHCP client port %"U16_F"\n", + ntohs(((struct udp_hdr *)((u8_t *)iphdr + iphdrlen))->dest))); + if (ntohs(((struct udp_hdr *)((u8_t *)iphdr + iphdrlen))->dest) == DHCP_CLIENT_PORT) { + LWIP_DEBUGF(IP_DEBUG | DBG_TRACE | 1, ("ip_input: DHCP packet accepted.\n")); + netif = inp; + } + } + } +#endif /* LWIP_DHCP */ + /* packet not for us? */ + if (netif == NULL) { + /* packet not for us, route or discard */ + LWIP_DEBUGF(IP_DEBUG | DBG_TRACE | 1, ("ip_input: packet not for us.\n")); +#if IP_FORWARD + /* non-broadcast packet? */ + if (!ip_addr_isbroadcast(&(iphdr->dest), inp)) { + /* try to forward IP packet on (other) interfaces */ + ip_forward(p, iphdr, inp); + } + else +#endif /* IP_FORWARD */ + { + snmp_inc_ipindiscards(); + } + pbuf_free(p); + return ERR_OK; + } + /* packet consists of multiple fragments? */ + if ((IPH_OFFSET(iphdr) & htons(IP_OFFMASK | IP_MF)) != 0) { +#if IP_REASSEMBLY /* packet fragment reassembly code present? */ + LWIP_DEBUGF(IP_DEBUG, ("IP packet is a fragment (id=0x%04"X16_F" tot_len=%"U16_F" len=%"U16_F" MF=%"U16_F" offset=%"U16_F"), calling ip_reass()\n", + ntohs(IPH_ID(iphdr)), p->tot_len, ntohs(IPH_LEN(iphdr)), !!(IPH_OFFSET(iphdr) & htons(IP_MF)), (ntohs(IPH_OFFSET(iphdr)) & IP_OFFMASK)*8)); + /* reassemble the packet*/ + p = ip_reass(p); + /* packet not fully reassembled yet? */ + if (p == NULL) { + return ERR_OK; + } + iphdr = p->payload; +#else /* IP_REASSEMBLY == 0, no packet fragment reassembly code present */ + pbuf_free(p); + LWIP_DEBUGF(IP_DEBUG | 2, ("IP packet dropped since it was fragmented (0x%"X16_F") (while IP_REASSEMBLY == 0).\n", + ntohs(IPH_OFFSET(iphdr)))); + IP_STATS_INC(ip.opterr); + IP_STATS_INC(ip.drop); + snmp_inc_ipunknownprotos(); + return ERR_OK; +#endif /* IP_REASSEMBLY */ + } + +#if IP_OPTIONS == 0 /* no support for IP options in the IP header? */ + if (iphdrlen > IP_HLEN) { + LWIP_DEBUGF(IP_DEBUG | 2, ("IP packet dropped since there were IP options (while IP_OPTIONS == 0).\n")); + pbuf_free(p); + IP_STATS_INC(ip.opterr); + IP_STATS_INC(ip.drop); + snmp_inc_ipunknownprotos(); + return ERR_OK; + } +#endif /* IP_OPTIONS == 0 */ + + /* send to upper layers */ + LWIP_DEBUGF(IP_DEBUG, ("ip_input: \n")); + ip_debug_print(p); + LWIP_DEBUGF(IP_DEBUG, ("ip_input: p->len %"U16_F" p->tot_len %"U16_F"\n", p->len, p->tot_len)); + +#if LWIP_RAW + /* raw input did not eat the packet? */ + if (raw_input(p, inp) == 0) { +#endif /* LWIP_RAW */ + + switch (IPH_PROTO(iphdr)) { +#if LWIP_UDP + case IP_PROTO_UDP: + case IP_PROTO_UDPLITE: + snmp_inc_ipindelivers(); + udp_input(p, inp); + break; +#endif /* LWIP_UDP */ +#if LWIP_TCP + case IP_PROTO_TCP: + snmp_inc_ipindelivers(); + tcp_input(p, inp); + break; +#endif /* LWIP_TCP */ + case IP_PROTO_ICMP: + snmp_inc_ipindelivers(); + icmp_input(p, inp); + break; + default: + /* send ICMP destination protocol unreachable unless is was a broadcast */ + if (!ip_addr_isbroadcast(&(iphdr->dest), inp) && + !ip_addr_ismulticast(&(iphdr->dest))) { + p->payload = iphdr; + icmp_dest_unreach(p, ICMP_DUR_PROTO); + } + pbuf_free(p); + + LWIP_DEBUGF(IP_DEBUG | 2, ("Unsupported transport protocol %"U16_F"\n", IPH_PROTO(iphdr))); + + IP_STATS_INC(ip.proterr); + IP_STATS_INC(ip.drop); + snmp_inc_ipunknownprotos(); + } +#if LWIP_RAW + } /* LWIP_RAW */ +#endif + return ERR_OK; +} + +/** + * Sends an IP packet on a network interface. This function constructs + * the IP header and calculates the IP header checksum. If the source + * IP address is NULL, the IP address of the outgoing network + * interface is filled in as source address. + */ + +err_t +ip_output_if(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, + u8_t ttl, u8_t tos, + u8_t proto, struct netif *netif) +{ + struct ip_hdr *iphdr; + u16_t ip_id = 0; + + snmp_inc_ipoutrequests(); + + if (dest != IP_HDRINCL) { + if (pbuf_header(p, IP_HLEN)) { + LWIP_DEBUGF(IP_DEBUG | 2, ("ip_output: not enough room for IP header in pbuf\n")); + + IP_STATS_INC(ip.err); + snmp_inc_ipoutdiscards(); + return ERR_BUF; + } + + iphdr = p->payload; + + IPH_TTL_SET(iphdr, ttl); + IPH_PROTO_SET(iphdr, proto); + + ip_addr_set(&(iphdr->dest), dest); + + IPH_VHLTOS_SET(iphdr, 4, IP_HLEN / 4, tos); + IPH_LEN_SET(iphdr, htons(p->tot_len)); + IPH_OFFSET_SET(iphdr, htons(IP_DF)); + IPH_ID_SET(iphdr, htons(ip_id)); + ++ip_id; + + if (ip_addr_isany(src)) { + ip_addr_set(&(iphdr->src), &(netif->ip_addr)); + } else { + ip_addr_set(&(iphdr->src), src); + } + + IPH_CHKSUM_SET(iphdr, 0); +#if CHECKSUM_GEN_IP + IPH_CHKSUM_SET(iphdr, inet_chksum(iphdr, IP_HLEN)); +#endif + } else { + iphdr = p->payload; + dest = &(iphdr->dest); + } + +#if IP_FRAG + /* don't fragment if interface has mtu set to 0 [loopif] */ + if (netif->mtu && (p->tot_len > netif->mtu)) + return ip_frag(p,netif,dest); +#endif + + IP_STATS_INC(ip.xmit); + + LWIP_DEBUGF(IP_DEBUG, ("ip_output_if: %c%c%"U16_F"\n", netif->name[0], netif->name[1], netif->num)); + ip_debug_print(p); + + LWIP_DEBUGF(IP_DEBUG, ("netif->output()")); + + return netif->output(netif, p, dest); +} + +/** + * Simple interface to ip_output_if. It finds the outgoing network + * interface and calls upon ip_output_if to do the actual work. + */ + +err_t +ip_output(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, + u8_t ttl, u8_t tos, u8_t proto) +{ + struct netif *netif; + + if ((netif = ip_route(dest)) == NULL) { + LWIP_DEBUGF(IP_DEBUG | 2, ("ip_output: No route to 0x%"X32_F"\n", dest->addr)); + + IP_STATS_INC(ip.rterr); + snmp_inc_ipoutdiscards(); + return ERR_RTE; + } + + return ip_output_if(p, src, dest, ttl, tos, proto, netif); +} + +#if IP_DEBUG +void +ip_debug_print(struct pbuf *p) +{ + struct ip_hdr *iphdr = p->payload; + u8_t *payload; + + payload = (u8_t *)iphdr + IP_HLEN; + + LWIP_DEBUGF(IP_DEBUG, ("IP header:\n")); + LWIP_DEBUGF(IP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(IP_DEBUG, ("|%2"S16_F" |%2"S16_F" | 0x%02"X16_F" | %5"U16_F" | (v, hl, tos, len)\n", + IPH_V(iphdr), + IPH_HL(iphdr), + IPH_TOS(iphdr), + ntohs(IPH_LEN(iphdr)))); + LWIP_DEBUGF(IP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(IP_DEBUG, ("| %5"U16_F" |%"U16_F"%"U16_F"%"U16_F"| %4"U16_F" | (id, flags, offset)\n", + ntohs(IPH_ID(iphdr)), + ntohs(IPH_OFFSET(iphdr)) >> 15 & 1, + ntohs(IPH_OFFSET(iphdr)) >> 14 & 1, + ntohs(IPH_OFFSET(iphdr)) >> 13 & 1, + ntohs(IPH_OFFSET(iphdr)) & IP_OFFMASK)); + LWIP_DEBUGF(IP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(IP_DEBUG, ("| %3"U16_F" | %3"U16_F" | 0x%04"X16_F" | (ttl, proto, chksum)\n", + IPH_TTL(iphdr), + IPH_PROTO(iphdr), + ntohs(IPH_CHKSUM(iphdr)))); + LWIP_DEBUGF(IP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(IP_DEBUG, ("| %3"U16_F" | %3"U16_F" | %3"U16_F" | %3"U16_F" | (src)\n", + ip4_addr1(&iphdr->src), + ip4_addr2(&iphdr->src), + ip4_addr3(&iphdr->src), + ip4_addr4(&iphdr->src))); + LWIP_DEBUGF(IP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(IP_DEBUG, ("| %3"U16_F" | %3"U16_F" | %3"U16_F" | %3"U16_F" | (dest)\n", + ip4_addr1(&iphdr->dest), + ip4_addr2(&iphdr->dest), + ip4_addr3(&iphdr->dest), + ip4_addr4(&iphdr->dest))); + LWIP_DEBUGF(IP_DEBUG, ("+-------------------------------+\n")); +} +#endif /* IP_DEBUG */ + + + + + + diff --git a/wii/libogc/lwip/core/ipv4/ip_addr.c b/wii/libogc/lwip/core/ipv4/ip_addr.c new file mode 100644 index 0000000000..2af526e9f3 --- /dev/null +++ b/wii/libogc/lwip/core/ipv4/ip_addr.c @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/ip_addr.h" +#include "lwip/inet.h" +#include "lwip/netif.h" + +/* used by IP_ADDR_ANY and IP_ADDR_BROADCAST in ip_addr.h */ +const struct ip_addr ip_addr_any = { 0x00000000UL }; +const struct ip_addr ip_addr_broadcast = { 0xffffffffUL }; + +/* Determine if an address is a broadcast address on a network interface + * + * @param addr address to be checked + * @param netif the network interface against which the address is checked + * @return returns non-zero if the address is a broadcast address + * + */ + +u8_t ip_addr_isbroadcast(struct ip_addr *addr, struct netif *netif) +{ + /* all ones (broadcast) or all zeroes (old skool broadcast) */ + if ((addr->addr == ip_addr_broadcast.addr) || + (addr->addr == ip_addr_any.addr)) + return 1; + /* no broadcast support on this network interface? */ + else if ((netif->flags & NETIF_FLAG_BROADCAST) == 0) + /* the given address cannot be a broadcast address + * nor can we check against any broadcast addresses */ + return 0; + /* address matches network interface address exactly? => no broadcast */ + else if (addr->addr == netif->ip_addr.addr) + return 0; + /* on the same (sub) network... */ + else if (ip_addr_netcmp(addr, &(netif->ip_addr), &(netif->netmask)) + /* ...and host identifier bits are all ones? =>... */ + && ((addr->addr & ~netif->netmask.addr) == + (ip_addr_broadcast.addr & ~netif->netmask.addr))) + /* => network broadcast address */ + return 1; + else + return 0; +} diff --git a/wii/libogc/lwip/core/ipv4/ip_frag.c b/wii/libogc/lwip/core/ipv4/ip_frag.c new file mode 100644 index 0000000000..5a57138ce3 --- /dev/null +++ b/wii/libogc/lwip/core/ipv4/ip_frag.c @@ -0,0 +1,366 @@ +/* @file + * + * This is the IP packet segmentation and reassembly implementation. + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Jani Monoses + * original reassembly code by Adam Dunkels + * + */ + +#include + +#include "lwip/opt.h" +/* #include "lwip/sys.h" */ +#include "lwip/ip.h" +#include "lwip/ip_frag.h" +#include "lwip/netif.h" +#include "lwip/stats.h" + + +/* + * Copy len bytes from offset in pbuf to buffer + * + * helper used by both ip_reass and ip_frag + */ +static struct pbuf * +copy_from_pbuf(struct pbuf *p, u16_t * offset, + u8_t * buffer, u16_t len) +{ + u16_t l; + + p->payload = (u8_t *)p->payload + *offset; + p->len -= *offset; + while (len) { + l = len < p->len ? len : p->len; + memcpy(buffer, p->payload, l); + buffer += l; + len -= l; + if (len) + p = p->next; + else + *offset = l; + } + return p; +} + +#define IP_REASS_BUFSIZE 5760 +#define IP_REASS_MAXAGE 30 +#define IP_REASS_TMO 1000 + +static u8_t ip_reassbuf[IP_HLEN + IP_REASS_BUFSIZE]; +static u8_t ip_reassbitmap[IP_REASS_BUFSIZE / (8 * 8) + 1]; +static const u8_t bitmap_bits[8] = { 0xff, 0x7f, 0x3f, 0x1f, + 0x0f, 0x07, 0x03, 0x01 +}; +static u16_t ip_reasslen; +static u8_t ip_reassflags; +#define IP_REASS_FLAG_LASTFRAG 0x01 + +static u8_t ip_reasstmr; + +/** + * Reassembly timer base function + * for both NO_SYS == 0 and 1 (!). + * + * Should be called every 1000 msec. + */ +void +ip_reass_tmr(void) +{ + if (ip_reasstmr > 0) { + ip_reasstmr--; + } +} + +/** + * Reassembles incoming IP fragments into an IP datagram. + * + * @param p points to a pbuf chain of the fragment + * @return NULL if reassembly is incomplete, ? otherwise + */ +struct pbuf * +ip_reass(struct pbuf *p) +{ + struct pbuf *q; + struct ip_hdr *fraghdr, *iphdr; + u16_t offset, len; + u16_t i; + + IPFRAG_STATS_INC(ip_frag.recv); + + iphdr = (struct ip_hdr *) ip_reassbuf; + fraghdr = (struct ip_hdr *) p->payload; + /* If ip_reasstmr is zero, no packet is present in the buffer, so we + write the IP header of the fragment into the reassembly + buffer. The timer is updated with the maximum age. */ + if (ip_reasstmr == 0) { + LWIP_DEBUGF(IP_REASS_DEBUG, ("ip_reass: new packet\n")); + memcpy(iphdr, fraghdr, IP_HLEN); + ip_reasstmr = IP_REASS_MAXAGE; + ip_reassflags = 0; + /* Clear the bitmap. */ + memset(ip_reassbitmap, 0, sizeof(ip_reassbitmap)); + } + + /* Check if the incoming fragment matches the one currently present + in the reasembly buffer. If so, we proceed with copying the + fragment into the buffer. */ + if (ip_addr_cmp(&iphdr->src, &fraghdr->src) && + ip_addr_cmp(&iphdr->dest, &fraghdr->dest) && + IPH_ID(iphdr) == IPH_ID(fraghdr)) { + LWIP_DEBUGF(IP_REASS_DEBUG, ("ip_reass: matching previous fragment ID=%"X16_F"\n", + ntohs(IPH_ID(fraghdr)))); + IPFRAG_STATS_INC(ip_frag.cachehit); + /* Find out the offset in the reassembly buffer where we should + copy the fragment. */ + len = ntohs(IPH_LEN(fraghdr)) - IPH_HL(fraghdr) * 4; + offset = (ntohs(IPH_OFFSET(fraghdr)) & IP_OFFMASK) * 8; + + /* If the offset or the offset + fragment length overflows the + reassembly buffer, we discard the entire packet. */ + if (offset > IP_REASS_BUFSIZE || offset + len > IP_REASS_BUFSIZE) { + LWIP_DEBUGF(IP_REASS_DEBUG, + ("ip_reass: fragment outside of buffer (%"S16_F":%"S16_F"/%"S16_F").\n", offset, + offset + len, IP_REASS_BUFSIZE)); + ip_reasstmr = 0; + goto nullreturn; + } + + /* Copy the fragment into the reassembly buffer, at the right + offset. */ + LWIP_DEBUGF(IP_REASS_DEBUG, + ("ip_reass: copying with offset %"S16_F" into %"S16_F":%"S16_F"\n", offset, + IP_HLEN + offset, IP_HLEN + offset + len)); + i = IPH_HL(fraghdr) * 4; + copy_from_pbuf(p, &i, &ip_reassbuf[IP_HLEN + offset], len); + + /* Update the bitmap. */ + if (offset / (8 * 8) == (offset + len) / (8 * 8)) { + LWIP_DEBUGF(IP_REASS_DEBUG, + ("ip_reass: updating single byte in bitmap.\n")); + /* If the two endpoints are in the same byte, we only update that byte. */ + LWIP_ASSERT("offset / (8 * 8) < sizeof(ip_reassbitmap)", + offset / (8 * 8) < sizeof(ip_reassbitmap)); + ip_reassbitmap[offset / (8 * 8)] |= + bitmap_bits[(offset / 8) & 7] & + ~bitmap_bits[((offset + len) / 8) & 7]; + } else { + /* If the two endpoints are in different bytes, we update the + bytes in the endpoints and fill the stuff inbetween with + 0xff. */ + LWIP_ASSERT("offset / (8 * 8) < sizeof(ip_reassbitmap)", + offset / (8 * 8) < sizeof(ip_reassbitmap)); + ip_reassbitmap[offset / (8 * 8)] |= bitmap_bits[(offset / 8) & 7]; + LWIP_DEBUGF(IP_REASS_DEBUG, + ("ip_reass: updating many bytes in bitmap (%"S16_F":%"S16_F").\n", + 1 + offset / (8 * 8), (offset + len) / (8 * 8))); + for (i = 1 + offset / (8 * 8); i < (offset + len) / (8 * 8); ++i) { + ip_reassbitmap[i] = 0xff; + } + LWIP_ASSERT("(offset + len) / (8 * 8) < sizeof(ip_reassbitmap)", + (offset + len) / (8 * 8) < sizeof(ip_reassbitmap)); + ip_reassbitmap[(offset + len) / (8 * 8)] |= + ~bitmap_bits[((offset + len) / 8) & 7]; + } + + /* If this fragment has the More Fragments flag set to zero, we + know that this is the last fragment, so we can calculate the + size of the entire packet. We also set the + IP_REASS_FLAG_LASTFRAG flag to indicate that we have received + the final fragment. */ + + if ((ntohs(IPH_OFFSET(fraghdr)) & IP_MF) == 0) { + ip_reassflags |= IP_REASS_FLAG_LASTFRAG; + ip_reasslen = offset + len; + LWIP_DEBUGF(IP_REASS_DEBUG, + ("ip_reass: last fragment seen, total len %"S16_F"\n", + ip_reasslen)); + } + + /* Finally, we check if we have a full packet in the buffer. We do + this by checking if we have the last fragment and if all bits + in the bitmap are set. */ + if (ip_reassflags & IP_REASS_FLAG_LASTFRAG) { + /* Check all bytes up to and including all but the last byte in + the bitmap. */ + LWIP_ASSERT("ip_reasslen / (8 * 8) - 1 < sizeof(ip_reassbitmap)", + ip_reasslen / (8 * 8) - 1 < sizeof(ip_reassbitmap)); + for (i = 0; i < ip_reasslen / (8 * 8) - 1; ++i) { + if (ip_reassbitmap[i] != 0xff) { + LWIP_DEBUGF(IP_REASS_DEBUG, + ("ip_reass: last fragment seen, bitmap %"S16_F"/%"S16_F" failed (%"X16_F")\n", + i, ip_reasslen / (8 * 8) - 1, ip_reassbitmap[i])); + goto nullreturn; + } + } + /* Check the last byte in the bitmap. It should contain just the + right amount of bits. */ + LWIP_ASSERT("ip_reasslen / (8 * 8) < sizeof(ip_reassbitmap)", + ip_reasslen / (8 * 8) < sizeof(ip_reassbitmap)); + if (ip_reassbitmap[ip_reasslen / (8 * 8)] != + (u8_t) ~ bitmap_bits[ip_reasslen / 8 & 7]) { + LWIP_DEBUGF(IP_REASS_DEBUG, + ("ip_reass: last fragment seen, bitmap %"S16_F" didn't contain %"X16_F" (%"X16_F")\n", + ip_reasslen / (8 * 8), ~bitmap_bits[ip_reasslen / 8 & 7], + ip_reassbitmap[ip_reasslen / (8 * 8)])); + goto nullreturn; + } + + /* Pretend to be a "normal" (i.e., not fragmented) IP packet + from now on. */ + ip_reasslen += IP_HLEN; + + IPH_LEN_SET(iphdr, htons(ip_reasslen)); + IPH_OFFSET_SET(iphdr, 0); + IPH_CHKSUM_SET(iphdr, 0); + IPH_CHKSUM_SET(iphdr, inet_chksum(iphdr, IP_HLEN)); + + /* If we have come this far, we have a full packet in the + buffer, so we allocate a pbuf and copy the packet into it. We + also reset the timer. */ + ip_reasstmr = 0; + pbuf_free(p); + p = pbuf_alloc(PBUF_LINK, ip_reasslen, PBUF_POOL); + if (p != NULL) { + i = 0; + for (q = p; q != NULL; q = q->next) { + /* Copy enough bytes to fill this pbuf in the chain. The + available data in the pbuf is given by the q->len variable. */ + LWIP_DEBUGF(IP_REASS_DEBUG, + ("ip_reass: memcpy from %p (%"S16_F") to %p, %"S16_F" bytes\n", + (void *)&ip_reassbuf[i], i, q->payload, + q->len > ip_reasslen - i ? ip_reasslen - i : q->len)); + memcpy(q->payload, &ip_reassbuf[i], + q->len > ip_reasslen - i ? ip_reasslen - i : q->len); + i += q->len; + } + IPFRAG_STATS_INC(ip_frag.fw); + } else { + IPFRAG_STATS_INC(ip_frag.memerr); + } + LWIP_DEBUGF(IP_REASS_DEBUG, ("ip_reass: p %p\n", (void*)p)); + return p; + } + } + +nullreturn: + IPFRAG_STATS_INC(ip_frag.drop); + pbuf_free(p); + return NULL; +} + +#define MAX_MTU 1500 +static u8_t buf[MEM_ALIGN_SIZE(MAX_MTU)]; + +/** + * Fragment an IP datagram if too large for the netif. + * + * Chop the datagram in MTU sized chunks and send them in order + * by using a fixed size static memory buffer (PBUF_ROM) + */ +err_t +ip_frag(struct pbuf *p, struct netif *netif, struct ip_addr *dest) +{ + struct pbuf *rambuf; + struct pbuf *header; + struct ip_hdr *iphdr; + u16_t nfb = 0; + u16_t left, cop; + u16_t mtu = netif->mtu; + u16_t ofo, omf; + u16_t last; + u16_t poff = IP_HLEN; + u16_t tmp; + + /* Get a RAM based MTU sized pbuf */ + rambuf = pbuf_alloc(PBUF_LINK, 0, PBUF_REF); + if (rambuf == NULL) { + return ERR_MEM; + } + rambuf->tot_len = rambuf->len = mtu; + rambuf->payload = MEM_ALIGN((void *)buf); + + /* Copy the IP header in it */ + iphdr = rambuf->payload; + memcpy(iphdr, p->payload, IP_HLEN); + + /* Save original offset */ + tmp = ntohs(IPH_OFFSET(iphdr)); + ofo = tmp & IP_OFFMASK; + omf = tmp & IP_MF; + + left = p->tot_len - IP_HLEN; + + while (left) { + last = (left <= mtu - IP_HLEN); + + /* Set new offset and MF flag */ + ofo += nfb; + tmp = omf | (IP_OFFMASK & (ofo)); + if (!last) + tmp = tmp | IP_MF; + IPH_OFFSET_SET(iphdr, htons(tmp)); + + /* Fill this fragment */ + nfb = (mtu - IP_HLEN) / 8; + cop = last ? left : nfb * 8; + + p = copy_from_pbuf(p, &poff, (u8_t *) iphdr + IP_HLEN, cop); + + /* Correct header */ + IPH_LEN_SET(iphdr, htons(cop + IP_HLEN)); + IPH_CHKSUM_SET(iphdr, 0); + IPH_CHKSUM_SET(iphdr, inet_chksum(iphdr, IP_HLEN)); + + if (last) + pbuf_realloc(rambuf, left + IP_HLEN); + /* This part is ugly: we alloc a RAM based pbuf for + * the link level header for each chunk and then + * free it.A PBUF_ROM style pbuf for which pbuf_header + * worked would make things simpler. + */ + header = pbuf_alloc(PBUF_LINK, 0, PBUF_RAM); + if (header != NULL) { + pbuf_chain(header, rambuf); + netif->output(netif, header, dest); + IPFRAG_STATS_INC(ip_frag.xmit); + pbuf_free(header); + } else { + pbuf_free(rambuf); + return ERR_MEM; + } + left -= cop; + } + pbuf_free(rambuf); + return ERR_OK; +} diff --git a/wii/libogc/lwip/core/mem.c b/wii/libogc/lwip/core/mem.c new file mode 100644 index 0000000000..ffe3f57c39 --- /dev/null +++ b/wii/libogc/lwip/core/mem.c @@ -0,0 +1,310 @@ +/** @file + * + * Dynamic memory manager + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include + +#include "lwip/arch.h" +#include "lwip/opt.h" +#include "lwip/def.h" +#include "lwip/mem.h" + +#include "lwip/sys.h" + +#include "lwip/stats.h" + +struct mem { + mem_size_t next, prev; +#if MEM_ALIGNMENT == 1 + u8_t used; +#elif MEM_ALIGNMENT == 2 + u16_t used; +#elif MEM_ALIGNMENT == 4 + u32_t used; +#elif MEM_ALIGNMENT == 8 + u64_t used; +#else +#error "unhandled MEM_ALIGNMENT size" +#endif /* MEM_ALIGNMENT */ +}; + +static struct mem *ram_end; +static u8_t ram[MEM_SIZE + sizeof(struct mem) + MEM_ALIGNMENT]; + +#define MIN_SIZE 12 +#if 0 /* this one does not align correctly for some, resulting in crashes */ +#define SIZEOF_STRUCT_MEM (unsigned int)MEM_ALIGN_SIZE(sizeof(struct mem)) +#else +#define SIZEOF_STRUCT_MEM (sizeof(struct mem) + \ + (((sizeof(struct mem) % MEM_ALIGNMENT) == 0)? 0 : \ + (4 - (sizeof(struct mem) % MEM_ALIGNMENT)))) +#endif + +static struct mem *lfree; /* pointer to the lowest free block */ + +static sys_sem mem_sem; + +static void +plug_holes(struct mem *mem) +{ + struct mem *nmem; + struct mem *pmem; + + LWIP_ASSERT("plug_holes: mem >= ram", (u8_t *)mem >= ram); + LWIP_ASSERT("plug_holes: mem < ram_end", (u8_t *)mem < (u8_t *)ram_end); + LWIP_ASSERT("plug_holes: mem->used == 0", mem->used == 0); + + /* plug hole forward */ + LWIP_ASSERT("plug_holes: mem->next <= MEM_SIZE", mem->next <= MEM_SIZE); + + nmem = (struct mem *)&ram[mem->next]; + if (mem != nmem && nmem->used == 0 && (u8_t *)nmem != (u8_t *)ram_end) { + if (lfree == nmem) { + lfree = mem; + } + mem->next = nmem->next; + ((struct mem *)&ram[nmem->next])->prev = (u8_t *)mem - ram; + } + + /* plug hole backward */ + pmem = (struct mem *)&ram[mem->prev]; + if (pmem != mem && pmem->used == 0) { + if (lfree == mem) { + lfree = pmem; + } + pmem->next = mem->next; + ((struct mem *)&ram[mem->next])->prev = (u8_t *)pmem - ram; + } + +} +void +mem_init(void) +{ + struct mem *mem; + + memset(ram, 0, MEM_SIZE); + mem = (struct mem *)ram; + mem->next = MEM_SIZE; + mem->prev = 0; + mem->used = 0; + ram_end = (struct mem *)&ram[MEM_SIZE]; + ram_end->used = 1; + ram_end->next = MEM_SIZE; + ram_end->prev = MEM_SIZE; + + LWP_SemInit(&mem_sem,1,1); + + lfree = (struct mem *)ram; + +#if MEM_STATS + lwip_stats.mem.avail = MEM_SIZE; +#endif /* MEM_STATS */ +} +void +mem_free(void *rmem) +{ + struct mem *mem; + + if (rmem == NULL) { + LWIP_DEBUGF(MEM_DEBUG | DBG_TRACE | 2, ("mem_free(p == NULL) was called.\n")); + return; + } + + LWP_SemWait(mem_sem); + + LWIP_ASSERT("mem_free: legal memory", (u8_t *)rmem >= (u8_t *)ram && + (u8_t *)rmem < (u8_t *)ram_end); + + if ((u8_t *)rmem < (u8_t *)ram || (u8_t *)rmem >= (u8_t *)ram_end) { + LWIP_DEBUGF(MEM_DEBUG | 3, ("mem_free: illegal memory\n")); +#if MEM_STATS + ++lwip_stats.mem.err; +#endif /* MEM_STATS */ + LWP_SemPost(mem_sem); + return; + } + mem = (struct mem *)((u8_t *)rmem - SIZEOF_STRUCT_MEM); + + LWIP_ASSERT("mem_free: mem->used", mem->used); + + mem->used = 0; + + if (mem < lfree) { + lfree = mem; + } + +#if MEM_STATS + lwip_stats.mem.used -= mem->next - ((u8_t *)mem - ram); + +#endif /* MEM_STATS */ + plug_holes(mem); + LWP_SemPost(mem_sem); +} +void * +mem_reallocm(void *rmem, mem_size_t newsize) +{ + void *nmem; + nmem = mem_malloc(newsize); + if (nmem == NULL) { + return mem_realloc(rmem, newsize); + } + memcpy(nmem, rmem, newsize); + mem_free(rmem); + return nmem; +} + +void * +mem_realloc(void *rmem, mem_size_t newsize) +{ + mem_size_t size; + mem_size_t ptr, ptr2; + struct mem *mem, *mem2; + + /* Expand the size of the allocated memory region so that we can + adjust for alignment. */ + if ((newsize % MEM_ALIGNMENT) != 0) { + newsize += MEM_ALIGNMENT - ((newsize + SIZEOF_STRUCT_MEM) % MEM_ALIGNMENT); + } + + if (newsize > MEM_SIZE) { + return NULL; + } + + LWP_SemWait(mem_sem); + + LWIP_ASSERT("mem_realloc: legal memory", (u8_t *)rmem >= (u8_t *)ram && + (u8_t *)rmem < (u8_t *)ram_end); + + if ((u8_t *)rmem < (u8_t *)ram || (u8_t *)rmem >= (u8_t *)ram_end) { + LWIP_DEBUGF(MEM_DEBUG | 3, ("mem_realloc: illegal memory\n")); + return rmem; + } + mem = (struct mem *)((u8_t *)rmem - SIZEOF_STRUCT_MEM); + + ptr = (u8_t *)mem - ram; + + size = mem->next - ptr - SIZEOF_STRUCT_MEM; +#if MEM_STATS + lwip_stats.mem.used -= (size - newsize); +#endif /* MEM_STATS */ + + if (newsize + SIZEOF_STRUCT_MEM + MIN_SIZE < size) { + ptr2 = ptr + SIZEOF_STRUCT_MEM + newsize; + mem2 = (struct mem *)&ram[ptr2]; + mem2->used = 0; + mem2->next = mem->next; + mem2->prev = ptr; + mem->next = ptr2; + if (mem2->next != MEM_SIZE) { + ((struct mem *)&ram[mem2->next])->prev = ptr2; + } + + plug_holes(mem2); + } + LWP_SemPost(mem_sem); + return rmem; +} +void * +mem_malloc(mem_size_t size) +{ + mem_size_t ptr, ptr2; + struct mem *mem, *mem2; + + if (size == 0) { + return NULL; + } + + /* Expand the size of the allocated memory region so that we can + adjust for alignment. */ + if ((size % MEM_ALIGNMENT) != 0) { + size += MEM_ALIGNMENT - ((size + SIZEOF_STRUCT_MEM) % MEM_ALIGNMENT); + } + + if (size > MEM_SIZE) { + return NULL; + } + + LWP_SemWait(mem_sem); + + for (ptr = (u8_t *)lfree - ram; ptr < MEM_SIZE; ptr = ((struct mem *)&ram[ptr])->next) { + mem = (struct mem *)&ram[ptr]; + if (!mem->used && + mem->next - (ptr + SIZEOF_STRUCT_MEM) >= size + SIZEOF_STRUCT_MEM) { + ptr2 = ptr + SIZEOF_STRUCT_MEM + size; + mem2 = (struct mem *)&ram[ptr2]; + + mem2->prev = ptr; + mem2->next = mem->next; + mem->next = ptr2; + if (mem2->next != MEM_SIZE) { + ((struct mem *)&ram[mem2->next])->prev = ptr2; + } + + mem2->used = 0; + mem->used = 1; +#if MEM_STATS + lwip_stats.mem.used += (size + SIZEOF_STRUCT_MEM); + /* if (lwip_stats.mem.max < lwip_stats.mem.used) { + lwip_stats.mem.max = lwip_stats.mem.used; + } */ + if (lwip_stats.mem.max < ptr2) { + lwip_stats.mem.max = ptr2; + } +#endif /* MEM_STATS */ + + if (mem == lfree) { + /* Find next free block after mem */ + while (lfree->used && lfree != ram_end) { + lfree = (struct mem *)&ram[lfree->next]; + } + LWIP_ASSERT("mem_malloc: !lfree->used", !lfree->used); + } + LWP_SemPost(mem_sem); + LWIP_ASSERT("mem_malloc: allocated memory not above ram_end.", + (mem_ptr_t)mem + SIZEOF_STRUCT_MEM + size <= (mem_ptr_t)ram_end); + LWIP_ASSERT("mem_malloc: allocated memory properly aligned.", + (unsigned long)((u8_t *)mem + SIZEOF_STRUCT_MEM) % MEM_ALIGNMENT == 0); + return (u8_t *)mem + SIZEOF_STRUCT_MEM; + } + } + LWIP_DEBUGF(MEM_DEBUG | 2, ("mem_malloc: could not allocate %"S16_F" bytes\n", (s16_t)size)); +#if MEM_STATS + ++lwip_stats.mem.err; +#endif /* MEM_STATS */ + LWP_SemPost(mem_sem); + return NULL; +} diff --git a/wii/libogc/lwip/core/memp.c b/wii/libogc/lwip/core/memp.c new file mode 100644 index 0000000000..3f5ca97727 --- /dev/null +++ b/wii/libogc/lwip/core/memp.c @@ -0,0 +1,273 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/opt.h" + +#include "lwip/memp.h" + +#include "lwip/pbuf.h" +#include "lwip/udp.h" +#include "lwip/raw.h" +#include "lwip/tcp.h" +#include "lwip/api.h" +#include "lwip/api_msg.h" +#include "lwip/tcpip.h" + +#include "lwip/sys.h" +#include "lwip/stats.h" + +struct memp { + struct memp *next; +}; + + + +static struct memp *memp_tab[MEMP_MAX]; + +static const u16_t memp_sizes[MEMP_MAX] = { + sizeof(struct pbuf), + sizeof(struct raw_pcb), + sizeof(struct udp_pcb), + sizeof(struct tcp_pcb), + sizeof(struct tcp_pcb_listen), + sizeof(struct tcp_seg), + sizeof(struct netbuf), + sizeof(struct netconn), + sizeof(struct api_msg), + sizeof(struct net_msg), + sizeof(struct sys_timeout) +}; + +static const u16_t memp_num[MEMP_MAX] = { + MEMP_NUM_PBUF, + MEMP_NUM_RAW_PCB, + MEMP_NUM_UDP_PCB, + MEMP_NUM_TCP_PCB, + MEMP_NUM_TCP_PCB_LISTEN, + MEMP_NUM_TCP_SEG, + MEMP_NUM_NETBUF, + MEMP_NUM_NETCONN, + MEMP_NUM_API_MSG, + MEMP_NUM_TCPIP_MSG, + MEMP_NUM_SYS_TIMEOUT +}; + +static u8_t memp_memory[(MEMP_NUM_PBUF * + MEM_ALIGN_SIZE(sizeof(struct pbuf) + + sizeof(struct memp)) + + MEMP_NUM_RAW_PCB * + MEM_ALIGN_SIZE(sizeof(struct raw_pcb) + + sizeof(struct memp)) + + MEMP_NUM_UDP_PCB * + MEM_ALIGN_SIZE(sizeof(struct udp_pcb) + + sizeof(struct memp)) + + MEMP_NUM_TCP_PCB * + MEM_ALIGN_SIZE(sizeof(struct tcp_pcb) + + sizeof(struct memp)) + + MEMP_NUM_TCP_PCB_LISTEN * + MEM_ALIGN_SIZE(sizeof(struct tcp_pcb_listen) + + sizeof(struct memp)) + + MEMP_NUM_TCP_SEG * + MEM_ALIGN_SIZE(sizeof(struct tcp_seg) + + sizeof(struct memp)) + + MEMP_NUM_NETBUF * + MEM_ALIGN_SIZE(sizeof(struct netbuf) + + sizeof(struct memp)) + + MEMP_NUM_NETCONN * + MEM_ALIGN_SIZE(sizeof(struct netconn) + + sizeof(struct memp)) + + MEMP_NUM_API_MSG * + MEM_ALIGN_SIZE(sizeof(struct api_msg) + + sizeof(struct memp)) + + MEMP_NUM_TCPIP_MSG * + MEM_ALIGN_SIZE(sizeof(struct net_msg) + + sizeof(struct memp)) + + MEMP_NUM_SYS_TIMEOUT * + MEM_ALIGN_SIZE(sizeof(struct sys_timeout) + + sizeof(struct memp)))]; + + +#if !SYS_LIGHTWEIGHT_PROT +static sys_sem mutex; +#endif + +#if MEMP_SANITY_CHECK +static int +memp_sanity(void) +{ + s16_t i, c; + struct memp *m, *n; + + for(i = 0; i < MEMP_MAX; i++) { + for(m = memp_tab[i]; m != NULL; m = m->next) { + c = 1; + for(n = memp_tab[i]; n != NULL; n = n->next) { + if (n == m) { + --c; + } + if (c < 0) return 0; /* LW was: abort(); */ + } + } + } + return 1; +} +#endif /* MEMP_SANITY_CHECK*/ + +void +memp_init(void) +{ + struct memp *m, *memp; + u16_t i, j; + u16_t size; + +#if MEMP_STATS + for(i = 0; i < MEMP_MAX; ++i) { + lwip_stats.memp[i].used = lwip_stats.memp[i].max = + lwip_stats.memp[i].err = 0; + lwip_stats.memp[i].avail = memp_num[i]; + } +#endif /* MEMP_STATS */ + + memp = (struct memp *)&memp_memory[0]; + for(i = 0; i < MEMP_MAX; ++i) { + size = MEM_ALIGN_SIZE(memp_sizes[i] + sizeof(struct memp)); + if (memp_num[i] > 0) { + memp_tab[i] = memp; + m = memp; + + for(j = 0; j < memp_num[i]; ++j) { + m->next = (struct memp *)MEM_ALIGN((u8_t *)m + size); + memp = m; + m = m->next; + } + memp->next = NULL; + memp = m; + } else { + memp_tab[i] = NULL; + } + } + +#if !SYS_LIGHTWEIGHT_PROT + LWP_SemInit(&mutex,1,1); +#endif + + +} + +void * +memp_malloc(memp_t type) +{ + struct memp *memp; + void *mem; +#if SYS_LIGHTWEIGHT_PROT + SYS_ARCH_DECL_PROTECT(old_level); +#endif + + LWIP_ASSERT("memp_malloc: type < MEMP_MAX", type < MEMP_MAX); + +#if SYS_LIGHTWEIGHT_PROT + SYS_ARCH_PROTECT(old_level); +#else /* SYS_LIGHTWEIGHT_PROT */ + LWP_SemWait(mutex); +#endif /* SYS_LIGHTWEIGHT_PROT */ + + memp = memp_tab[type]; + if (memp != NULL) { + memp_tab[type] = memp->next; + memp->next = NULL; +#if MEMP_STATS + ++lwip_stats.memp[type].used; + if (lwip_stats.memp[type].used > lwip_stats.memp[type].max) { + lwip_stats.memp[type].max = lwip_stats.memp[type].used; + } +#endif /* MEMP_STATS */ +#if SYS_LIGHTWEIGHT_PROT + SYS_ARCH_UNPROTECT(old_level); +#else /* SYS_LIGHTWEIGHT_PROT */ + LWP_SemPost(mutex); +#endif /* SYS_LIGHTWEIGHT_PROT */ + LWIP_ASSERT("memp_malloc: memp properly aligned", + ((mem_ptr_t)MEM_ALIGN((u8_t *)memp + sizeof(struct memp)) % MEM_ALIGNMENT) == 0); + + mem = MEM_ALIGN((u8_t *)memp + sizeof(struct memp)); + return mem; + } else { + LWIP_DEBUGF(MEMP_DEBUG | 2, ("memp_malloc: out of memory in pool %"S16_F"\n", type)); +#if MEMP_STATS + ++lwip_stats.memp[type].err; +#endif /* MEMP_STATS */ +#if SYS_LIGHTWEIGHT_PROT + SYS_ARCH_UNPROTECT(old_level); +#else /* SYS_LIGHTWEIGHT_PROT */ + LWP_SemPost(mutex); +#endif /* SYS_LIGHTWEIGHT_PROT */ + return NULL; + } +} + +void +memp_free(memp_t type, void *mem) +{ + struct memp *memp; +#if SYS_LIGHTWEIGHT_PROT + SYS_ARCH_DECL_PROTECT(old_level); +#endif /* SYS_LIGHTWEIGHT_PROT */ + + if (mem == NULL) { + return; + } + memp = (struct memp *)((u8_t *)mem - sizeof(struct memp)); + +#if SYS_LIGHTWEIGHT_PROT + SYS_ARCH_PROTECT(old_level); +#else /* SYS_LIGHTWEIGHT_PROT */ + LWP_SemWait(mutex); +#endif /* SYS_LIGHTWEIGHT_PROT */ + +#if MEMP_STATS + lwip_stats.memp[type].used--; +#endif /* MEMP_STATS */ + + memp->next = memp_tab[type]; + memp_tab[type] = memp; + +#if MEMP_SANITY_CHECK + LWIP_ASSERT("memp sanity", memp_sanity()); +#endif + +#if SYS_LIGHTWEIGHT_PROT + SYS_ARCH_UNPROTECT(old_level); +#else /* SYS_LIGHTWEIGHT_PROT */ + LWP_SemPost(mutex); +#endif /* SYS_LIGHTWEIGHT_PROT */ +} + diff --git a/wii/libogc/lwip/core/netif.c b/wii/libogc/lwip/core/netif.c new file mode 100644 index 0000000000..3525089b2f --- /dev/null +++ b/wii/libogc/lwip/core/netif.c @@ -0,0 +1,288 @@ +/** + * @file + * + * lwIP network interface abstraction + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/opt.h" + +#include "lwip/def.h" +#include "lwip/ip_addr.h" +#include "lwip/netif.h" +#include "lwip/tcp.h" + +struct netif *netif_list = NULL; +struct netif *netif_default = NULL; + +/** + * Add a network interface to the list of lwIP netifs. + * + * @param netif a pre-allocated netif structure + * @param ipaddr IP address for the new netif + * @param netmask network mask for the new netif + * @param gw default gateway IP address for the new netif + * @param state opaque data passed to the new netif + * @param init callback function that initializes the interface + * @param input callback function that is called to pass + * ingress packets up in the protocol layer stack. + * + * @return netif, or NULL if failed. + */ +struct netif * +netif_add(struct netif *netif, struct ip_addr *ipaddr, struct ip_addr *netmask, + struct ip_addr *gw, + void *state, + err_t (* init)(struct netif *netif), + err_t (* input)(struct pbuf *p, struct netif *netif)) +{ + static s16_t netifnum = 0; + +#if LWIP_DHCP + /* netif not under DHCP control by default */ + netif->dhcp = NULL; +#endif + /* remember netif specific state information data */ + netif->state = state; + netif->num = netifnum++; + netif->input = input; + + netif_set_addr(netif, ipaddr, netmask, gw); + + /* call user specified initialization function for netif */ + if (init(netif) != ERR_OK) { + return NULL; + } + + /* add this netif to the list */ + netif->next = netif_list; + netif_list = netif; + LWIP_DEBUGF(NETIF_DEBUG, ("netif: added interface %c%c IP addr ", + netif->name[0], netif->name[1])); + ip_addr_debug_print(NETIF_DEBUG, ipaddr); + LWIP_DEBUGF(NETIF_DEBUG, (" netmask ")); + ip_addr_debug_print(NETIF_DEBUG, netmask); + LWIP_DEBUGF(NETIF_DEBUG, (" gw ")); + ip_addr_debug_print(NETIF_DEBUG, gw); + LWIP_DEBUGF(NETIF_DEBUG, ("\n")); + return netif; +} + +void +netif_set_addr(struct netif *netif,struct ip_addr *ipaddr, struct ip_addr *netmask, + struct ip_addr *gw) +{ + netif_set_ipaddr(netif, ipaddr); + netif_set_netmask(netif, netmask); + netif_set_gw(netif, gw); +} + +void netif_remove(struct netif * netif) +{ + if ( netif == NULL ) return; + + /* is it the first netif? */ + if (netif_list == netif) { + netif_list = netif->next; + } + else { + /* look for netif further down the list */ + struct netif * tmpNetif; + for (tmpNetif = netif_list; tmpNetif != NULL; tmpNetif = tmpNetif->next) { + if (tmpNetif->next == netif) { + tmpNetif->next = netif->next; + break; + } + } + if (tmpNetif == NULL) + return; /* we didn't find any netif today */ + } + /* this netif is default? */ + if (netif_default == netif) + /* reset default netif */ + netif_default = NULL; + LWIP_DEBUGF( NETIF_DEBUG, ("netif_remove: removed netif\n") ); +} + +struct netif * +netif_find(char *name) +{ + struct netif *netif; + u8_t num; + + if (name == NULL) { + return NULL; + } + + num = name[2] - '0'; + + for(netif = netif_list; netif != NULL; netif = netif->next) { + if (num == netif->num && + name[0] == netif->name[0] && + name[1] == netif->name[1]) { + LWIP_DEBUGF(NETIF_DEBUG, ("netif_find: found %c%c\n", name[0], name[1])); + return netif; + } + } + LWIP_DEBUGF(NETIF_DEBUG, ("netif_find: didn't find %c%c\n", name[0], name[1])); + return NULL; +} + +void +netif_set_ipaddr(struct netif *netif, struct ip_addr *ipaddr) +{ + /* TODO: Handling of obsolete pcbs */ + /* See: http://mail.gnu.org/archive/html/lwip-users/2003-03/msg00118.html */ +#if LWIP_TCP + struct tcp_pcb *pcb; + struct tcp_pcb_listen *lpcb; + + /* address is actually being changed? */ + if ((ip_addr_cmp(ipaddr, &(netif->ip_addr))) == 0) + { + /* extern struct tcp_pcb *tcp_active_pcbs; defined by tcp.h */ + LWIP_DEBUGF(NETIF_DEBUG | 1, ("netif_set_ipaddr: netif address being changed\n")); + pcb = tcp_active_pcbs; + while (pcb != NULL) { + /* PCB bound to current local interface address? */ + if (ip_addr_cmp(&(pcb->local_ip), &(netif->ip_addr))) { + /* this connection must be aborted */ + struct tcp_pcb *next = pcb->next; + LWIP_DEBUGF(NETIF_DEBUG | 1, ("netif_set_ipaddr: aborting TCP pcb %p\n", (void *)pcb)); + tcp_abort(pcb); + pcb = next; + } else { + pcb = pcb->next; + } + } + for (lpcb = tcp_listen_pcbs.listen_pcbs; lpcb != NULL; lpcb = lpcb->next) { + /* PCB bound to current local interface address? */ + if (ip_addr_cmp(&(lpcb->local_ip), &(netif->ip_addr))) { + /* The PCB is listening to the old ipaddr and + * is set to listen to the new one instead */ + ip_addr_set(&(lpcb->local_ip), ipaddr); + } + } + } +#endif + ip_addr_set(&(netif->ip_addr), ipaddr); +#if 0 /* only allowed for Ethernet interfaces TODO: how can we check? */ + /** For Ethernet network interfaces, we would like to send a + * "gratuitous ARP"; this is an ARP packet sent by a node in order + * to spontaneously cause other nodes to update an entry in their + * ARP cache. From RFC 3220 "IP Mobility Support for IPv4" section 4.6. + */ + etharp_query(netif, ipaddr, NULL); +#endif + LWIP_DEBUGF(NETIF_DEBUG | DBG_TRACE | DBG_STATE | 3, ("netif: IP address of interface %c%c set to %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", + netif->name[0], netif->name[1], + ip4_addr1(&netif->ip_addr), + ip4_addr2(&netif->ip_addr), + ip4_addr3(&netif->ip_addr), + ip4_addr4(&netif->ip_addr))); +} + +void +netif_set_gw(struct netif *netif, struct ip_addr *gw) +{ + ip_addr_set(&(netif->gw), gw); + LWIP_DEBUGF(NETIF_DEBUG | DBG_TRACE | DBG_STATE | 3, ("netif: GW address of interface %c%c set to %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", + netif->name[0], netif->name[1], + ip4_addr1(&netif->gw), + ip4_addr2(&netif->gw), + ip4_addr3(&netif->gw), + ip4_addr4(&netif->gw))); +} + +void +netif_set_netmask(struct netif *netif, struct ip_addr *netmask) +{ + ip_addr_set(&(netif->netmask), netmask); + LWIP_DEBUGF(NETIF_DEBUG | DBG_TRACE | DBG_STATE | 3, ("netif: netmask of interface %c%c set to %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", + netif->name[0], netif->name[1], + ip4_addr1(&netif->netmask), + ip4_addr2(&netif->netmask), + ip4_addr3(&netif->netmask), + ip4_addr4(&netif->netmask))); +} + +void +netif_set_default(struct netif *netif) +{ + netif_default = netif; + LWIP_DEBUGF(NETIF_DEBUG, ("netif: setting default interface %c%c\n", + netif ? netif->name[0] : '\'', netif ? netif->name[1] : '\'')); +} + +/** + * Bring an interface up, available for processing + * traffic. + * + * @note: Enabling DHCP on a down interface will make it come + * up once configured. + * + * @see dhcp_start() + */ +void netif_set_up(struct netif *netif) +{ + netif->flags |= NETIF_FLAG_UP; +} + +/** + * Ask if an interface is up + */ +u8_t netif_is_up(struct netif *netif) +{ + return (netif->flags & NETIF_FLAG_UP)?1:0; +} + +/** + * Bring an interface down, disabling any traffic processing. + * + * @note: Enabling DHCP on a down interface will make it come + * up once configured. + * + * @see dhcp_start() + */ +void netif_set_down(struct netif *netif) +{ + netif->flags &= ~NETIF_FLAG_UP; +} + +void +netif_init(void) +{ + netif_list = netif_default = NULL; +} + diff --git a/wii/libogc/lwip/core/pbuf.c b/wii/libogc/lwip/core/pbuf.c new file mode 100644 index 0000000000..471e6efb7a --- /dev/null +++ b/wii/libogc/lwip/core/pbuf.c @@ -0,0 +1,957 @@ +/** + * @file + * Packet buffer management + * + * Packets are built from the pbuf data structure. It supports dynamic + * memory allocation for packet contents or can reference externally + * managed packet contents both in RAM and ROM. Quick allocation for + * incoming packets is provided through pools with fixed sized pbufs. + * + * A packet may span over multiple pbufs, chained as a singly linked + * list. This is called a "pbuf chain". + * + * Multiple packets may be queued, also using this singly linked list. + * This is called a "packet queue". + * + * So, a packet queue consists of one or more pbuf chains, each of + * which consist of one or more pbufs. Currently, queues are only + * supported in a limited section of lwIP, this is the etharp queueing + * code. Outside of this section no packet queues are supported yet. + * + * The differences between a pbuf chain and a packet queue are very + * precise but subtle. + * + * The last pbuf of a packet has a ->tot_len field that equals the + * ->len field. It can be found by traversing the list. If the last + * pbuf of a packet has a ->next field other than NULL, more packets + * are on the queue. + * + * Therefore, looping through a pbuf of a single packet, has an + * loop end condition (tot_len == p->len), NOT (next == NULL). + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include + +#include "lwip/opt.h" +#include "lwip/stats.h" +#include "lwip/def.h" +#include "lwip/mem.h" +#include "lwip/memp.h" +#include "lwip/pbuf.h" +#include "lwip/sys.h" +#include "arch/perf.h" + +static u8_t pbuf_pool_memory[MEM_ALIGNMENT - 1 + PBUF_POOL_SIZE * MEM_ALIGN_SIZE(PBUF_POOL_BUFSIZE + sizeof(struct pbuf))]; + +#if !SYS_LIGHTWEIGHT_PROT +static volatile u8_t pbuf_pool_free_lock, pbuf_pool_alloc_lock; +static sys_sem pbuf_pool_free_sem; +#endif + +static struct pbuf *pbuf_pool = NULL; + +/** + * Initializes the pbuf module. + * + * A large part of memory is allocated for holding the pool of pbufs. + * The size of the individual pbufs in the pool is given by the size + * parameter, and the number of pbufs in the pool by the num parameter. + * + * After the memory has been allocated, the pbufs are set up. The + * ->next pointer in each pbuf is set up to point to the next pbuf in + * the pool. + * + */ +void +pbuf_init(void) +{ + struct pbuf *p, *q = NULL; + u16_t i; + + pbuf_pool = (struct pbuf *)MEM_ALIGN(pbuf_pool_memory); + +#if PBUF_STATS + lwip_stats.pbuf.avail = PBUF_POOL_SIZE; +#endif /* PBUF_STATS */ + + /* Set up ->next pointers to link the pbufs of the pool together */ + p = pbuf_pool; + + for(i = 0; i < PBUF_POOL_SIZE; ++i) { + p->next = (struct pbuf *)((u8_t *)p + PBUF_POOL_BUFSIZE + sizeof(struct pbuf)); + p->len = p->tot_len = PBUF_POOL_BUFSIZE; + p->payload = MEM_ALIGN((void *)((u8_t *)p + sizeof(struct pbuf))); + p->flags = PBUF_FLAG_POOL; + q = p; + p = p->next; + } + + /* The ->next pointer of last pbuf is NULL to indicate that there + are no more pbufs in the pool */ + q->next = NULL; + +#if !SYS_LIGHTWEIGHT_PROT + pbuf_pool_alloc_lock = 0; + pbuf_pool_free_lock = 0; + LWP_SemInit(&pbuf_pool_free_sem,1,1); +#endif +} + +/** + * @internal only called from pbuf_alloc() + */ +static struct pbuf * +pbuf_pool_alloc(void) +{ + struct pbuf *p = NULL; + + SYS_ARCH_DECL_PROTECT(old_level); + SYS_ARCH_PROTECT(old_level); + +#if !SYS_LIGHTWEIGHT_PROT + /* Next, check the actual pbuf pool, but if the pool is locked, we + pretend to be out of buffers and return NULL. */ + if (pbuf_pool_free_lock) { +#if PBUF_STATS + ++lwip_stats.pbuf.alloc_locked; +#endif /* PBUF_STATS */ + return NULL; + } + pbuf_pool_alloc_lock = 1; + if (!pbuf_pool_free_lock) { +#endif /* SYS_LIGHTWEIGHT_PROT */ + p = pbuf_pool; + if (p) { + pbuf_pool = p->next; + } +#if !SYS_LIGHTWEIGHT_PROT +#if PBUF_STATS + } else { + ++lwip_stats.pbuf.alloc_locked; +#endif /* PBUF_STATS */ + } + pbuf_pool_alloc_lock = 0; +#endif /* SYS_LIGHTWEIGHT_PROT */ + +#if PBUF_STATS + if (p != NULL) { + ++lwip_stats.pbuf.used; + if (lwip_stats.pbuf.used > lwip_stats.pbuf.max) { + lwip_stats.pbuf.max = lwip_stats.pbuf.used; + } + } +#endif /* PBUF_STATS */ + + SYS_ARCH_UNPROTECT(old_level); + return p; +} + + +/** + * Allocates a pbuf of the given type (possibly a chain for PBUF_POOL type). + * + * The actual memory allocated for the pbuf is determined by the + * layer at which the pbuf is allocated and the requested size + * (from the size parameter). + * + * @param flag this parameter decides how and where the pbuf + * should be allocated as follows: + * + * - PBUF_RAM: buffer memory for pbuf is allocated as one large + * chunk. This includes protocol headers as well. + * - PBUF_ROM: no buffer memory is allocated for the pbuf, even for + * protocol headers. Additional headers must be prepended + * by allocating another pbuf and chain in to the front of + * the ROM pbuf. It is assumed that the memory used is really + * similar to ROM in that it is immutable and will not be + * changed. Memory which is dynamic should generally not + * be attached to PBUF_ROM pbufs. Use PBUF_REF instead. + * - PBUF_REF: no buffer memory is allocated for the pbuf, even for + * protocol headers. It is assumed that the pbuf is only + * being used in a single thread. If the pbuf gets queued, + * then pbuf_take should be called to copy the buffer. + * - PBUF_POOL: the pbuf is allocated as a pbuf chain, with pbufs from + * the pbuf pool that is allocated during pbuf_init(). + * + * @return the allocated pbuf. If multiple pbufs where allocated, this + * is the first pbuf of a pbuf chain. + */ +struct pbuf * +pbuf_alloc(pbuf_layer l, u16_t length, pbuf_flag flag) +{ + struct pbuf *p, *q, *r; + u16_t offset; + s32_t rem_len; /* remaining length */ + LWIP_DEBUGF(PBUF_DEBUG | DBG_TRACE | 3, ("pbuf_alloc(length=%"U16_F")\n", length)); + + /* determine header offset */ + offset = 0; + switch (l) { + case PBUF_TRANSPORT: + /* add room for transport (often TCP) layer header */ + offset += PBUF_TRANSPORT_HLEN; + /* FALLTHROUGH */ + case PBUF_IP: + /* add room for IP layer header */ + offset += PBUF_IP_HLEN; + /* FALLTHROUGH */ + case PBUF_LINK: + /* add room for link layer header */ + offset += PBUF_LINK_HLEN; + break; + case PBUF_RAW: + break; + default: + LWIP_ASSERT("pbuf_alloc: bad pbuf layer", 0); + return NULL; + } + + switch (flag) { + case PBUF_POOL: + /* allocate head of pbuf chain into p */ + p = pbuf_pool_alloc(); + LWIP_DEBUGF(PBUF_DEBUG | DBG_TRACE | 3, ("pbuf_alloc: allocated pbuf %p\n", (void *)p)); + if (p == NULL) { +#if PBUF_STATS + ++lwip_stats.pbuf.err; +#endif /* PBUF_STATS */ + return NULL; + } + p->next = NULL; + + /* make the payload pointer point 'offset' bytes into pbuf data memory */ + p->payload = MEM_ALIGN((void *)((u8_t *)p + (sizeof(struct pbuf) + offset))); + LWIP_ASSERT("pbuf_alloc: pbuf p->payload properly aligned", + ((mem_ptr_t)p->payload % MEM_ALIGNMENT) == 0); + /* the total length of the pbuf chain is the requested size */ + p->tot_len = length; + /* set the length of the first pbuf in the chain */ + p->len = length > PBUF_POOL_BUFSIZE - offset? PBUF_POOL_BUFSIZE - offset: length; + /* set reference count (needed here in case we fail) */ + p->ref = 1; + + /* now allocate the tail of the pbuf chain */ + + /* remember first pbuf for linkage in next iteration */ + r = p; + /* remaining length to be allocated */ + rem_len = length - p->len; + /* any remaining pbufs to be allocated? */ + while (rem_len > 0) { + q = pbuf_pool_alloc(); + if (q == NULL) { + LWIP_DEBUGF(PBUF_DEBUG | 2, ("pbuf_alloc: Out of pbufs in pool.\n")); +#if PBUF_STATS + ++lwip_stats.pbuf.err; +#endif /* PBUF_STATS */ + /* free chain so far allocated */ + pbuf_free(p); + /* bail out unsuccesfully */ + return NULL; + } + q->next = NULL; + /* make previous pbuf point to this pbuf */ + r->next = q; + /* set total length of this pbuf and next in chain */ + q->tot_len = rem_len; + /* this pbuf length is pool size, unless smaller sized tail */ + q->len = rem_len > PBUF_POOL_BUFSIZE? PBUF_POOL_BUFSIZE: rem_len; + q->payload = (void *)((u8_t *)q + sizeof(struct pbuf)); + LWIP_ASSERT("pbuf_alloc: pbuf q->payload properly aligned", + ((mem_ptr_t)q->payload % MEM_ALIGNMENT) == 0); + q->ref = 1; + /* calculate remaining length to be allocated */ + rem_len -= q->len; + /* remember this pbuf for linkage in next iteration */ + r = q; + } + /* end of chain */ + /*r->next = NULL;*/ + + break; + case PBUF_RAM: + /* If pbuf is to be allocated in RAM, allocate memory for it. */ + p = mem_malloc(MEM_ALIGN_SIZE(sizeof(struct pbuf) + offset) + MEM_ALIGN_SIZE(length)); + if (p == NULL) { + return NULL; + } + /* Set up internal structure of the pbuf. */ + p->payload = MEM_ALIGN((void *)((u8_t *)p + sizeof(struct pbuf) + offset)); + p->len = p->tot_len = length; + p->next = NULL; + p->flags = PBUF_FLAG_RAM; + + LWIP_ASSERT("pbuf_alloc: pbuf->payload properly aligned", + ((mem_ptr_t)p->payload % MEM_ALIGNMENT) == 0); + break; + /* pbuf references existing (non-volatile static constant) ROM payload? */ + case PBUF_ROM: + /* pbuf references existing (externally allocated) RAM payload? */ + case PBUF_REF: + /* only allocate memory for the pbuf structure */ + p = memp_malloc(MEMP_PBUF); + if (p == NULL) { + LWIP_DEBUGF(PBUF_DEBUG | DBG_TRACE | 2, ("pbuf_alloc: Could not allocate MEMP_PBUF for PBUF_%s.\n", flag == PBUF_ROM?"ROM":"REF")); + return NULL; + } + /* caller must set this field properly, afterwards */ + p->payload = NULL; + p->len = p->tot_len = length; + p->next = NULL; + p->flags = (flag == PBUF_ROM? PBUF_FLAG_ROM: PBUF_FLAG_REF); + break; + default: + LWIP_ASSERT("pbuf_alloc: erroneous flag", 0); + return NULL; + } + /* set reference count */ + p->ref = 1; + LWIP_DEBUGF(PBUF_DEBUG | DBG_TRACE | 3, ("pbuf_alloc(length=%"U16_F") == %p\n", length, (void *)p)); + return p; +} + + +#if PBUF_STATS +#define DEC_PBUF_STATS do { --lwip_stats.pbuf.used; } while (0) +#else /* PBUF_STATS */ +#define DEC_PBUF_STATS +#endif /* PBUF_STATS */ + +#define PBUF_POOL_FAST_FREE(p) do { \ + p->next = pbuf_pool; \ + pbuf_pool = p; \ + DEC_PBUF_STATS; \ + } while (0) + +#if SYS_LIGHTWEIGHT_PROT +#define PBUF_POOL_FREE(p) do { \ + SYS_ARCH_DECL_PROTECT(old_level); \ + SYS_ARCH_PROTECT(old_level); \ + PBUF_POOL_FAST_FREE(p); \ + SYS_ARCH_UNPROTECT(old_level); \ + } while (0) +#else /* SYS_LIGHTWEIGHT_PROT */ +#define PBUF_POOL_FREE(p) do { \ + LWP_SemWait(pbuf_pool_free_sem); \ + PBUF_POOL_FAST_FREE(p); \ + LWP_SemPost(pbuf_pool_free_sem); \ + } while (0) +#endif /* SYS_LIGHTWEIGHT_PROT */ + +/** + * Shrink a pbuf chain to a desired length. + * + * @param p pbuf to shrink. + * @param new_len desired new length of pbuf chain + * + * Depending on the desired length, the first few pbufs in a chain might + * be skipped and left unchanged. The new last pbuf in the chain will be + * resized, and any remaining pbufs will be freed. + * + * @note If the pbuf is ROM/REF, only the ->tot_len and ->len fields are adjusted. + * @note May not be called on a packet queue. + * + * @bug Cannot grow the size of a pbuf (chain) (yet). + */ +void +pbuf_realloc(struct pbuf *p, u16_t new_len) +{ + struct pbuf *q; + u16_t rem_len; /* remaining length */ + s16_t grow; + + LWIP_ASSERT("pbuf_realloc: sane p->flags", p->flags == PBUF_FLAG_POOL || + p->flags == PBUF_FLAG_ROM || + p->flags == PBUF_FLAG_RAM || + p->flags == PBUF_FLAG_REF); + + /* desired length larger than current length? */ + if (new_len >= p->tot_len) { + /* enlarging not yet supported */ + return; + } + + /* the pbuf chain grows by (new_len - p->tot_len) bytes + * (which may be negative in case of shrinking) */ + grow = new_len - p->tot_len; + + /* first, step over any pbufs that should remain in the chain */ + rem_len = new_len; + q = p; + /* should this pbuf be kept? */ + while (rem_len > q->len) { + /* decrease remaining length by pbuf length */ + rem_len -= q->len; + /* decrease total length indicator */ + q->tot_len += grow; + /* proceed to next pbuf in chain */ + q = q->next; + } + /* we have now reached the new last pbuf (in q) */ + /* rem_len == desired length for pbuf q */ + + /* shrink allocated memory for PBUF_RAM */ + /* (other types merely adjust their length fields */ + if ((q->flags == PBUF_FLAG_RAM) && (rem_len != q->len)) { + /* reallocate and adjust the length of the pbuf that will be split */ + mem_realloc(q, (u8_t *)q->payload - (u8_t *)q + rem_len); + } + /* adjust length fields for new last pbuf */ + q->len = rem_len; + q->tot_len = q->len; + + /* any remaining pbufs in chain? */ + if (q->next != NULL) { + /* free remaining pbufs in chain */ + pbuf_free(q->next); + } + /* q is last packet in chain */ + q->next = NULL; + +} + +/** + * Adjusts the payload pointer to hide or reveal headers in the payload. + * + * Adjusts the ->payload pointer so that space for a header + * (dis)appears in the pbuf payload. + * + * The ->payload, ->tot_len and ->len fields are adjusted. + * + * @param hdr_size_inc Number of bytes to increment header size which + * increases the size of the pbuf. New space is on the front. + * (Using a negative value decreases the header size.) + * If hdr_size_inc is 0, this function does nothing and returns succesful. + * + * PBUF_ROM and PBUF_REF type buffers cannot have their sizes increased, so + * the call will fail. A check is made that the increase in header size does + * not move the payload pointer in front of the start of the buffer. + * @return non-zero on failure, zero on success. + * + */ +u8_t +pbuf_header(struct pbuf *p, s16_t header_size_increment) +{ + void *payload; + + LWIP_ASSERT("p != NULL", p != NULL); + if ((header_size_increment == 0) || (p == NULL)) return 0; + + /* remember current payload pointer */ + payload = p->payload; + + /* pbuf types containing payloads? */ + if (p->flags == PBUF_FLAG_RAM || p->flags == PBUF_FLAG_POOL) { + /* set new payload pointer */ + p->payload = (u8_t *)p->payload - header_size_increment; + /* boundary check fails? */ + if ((u8_t *)p->payload < (u8_t *)p + sizeof(struct pbuf)) { + LWIP_DEBUGF( PBUF_DEBUG | 2, ("pbuf_header: failed as %p < %p (not enough space for new header size)\n", + (void *)p->payload, + (void *)(p + 1)));\ + /* restore old payload pointer */ + p->payload = payload; + /* bail out unsuccesfully */ + return 1; + } + /* pbuf types refering to external payloads? */ + } else if (p->flags == PBUF_FLAG_REF || p->flags == PBUF_FLAG_ROM) { + /* hide a header in the payload? */ + if ((header_size_increment < 0) && (header_size_increment - p->len <= 0)) { + /* increase payload pointer */ + p->payload = (u8_t *)p->payload - header_size_increment; + } else { + /* cannot expand payload to front (yet!) + * bail out unsuccesfully */ + return 1; + } + } + /* modify pbuf length fields */ + p->len += header_size_increment; + p->tot_len += header_size_increment; + + LWIP_DEBUGF( PBUF_DEBUG, ("pbuf_header: old %p new %p (%"S16_F")\n", + (void *)payload, (void *)p->payload, header_size_increment)); + + return 0; +} + +/** + * Dereference a pbuf chain or queue and deallocate any no-longer-used + * pbufs at the head of this chain or queue. + * + * Decrements the pbuf reference count. If it reaches zero, the pbuf is + * deallocated. + * + * For a pbuf chain, this is repeated for each pbuf in the chain, + * up to the first pbuf which has a non-zero reference count after + * decrementing. So, when all reference counts are one, the whole + * chain is free'd. + * + * @param pbuf The pbuf (chain) to be dereferenced. + * + * @return the number of pbufs that were de-allocated + * from the head of the chain. + * + * @note MUST NOT be called on a packet queue (Not verified to work yet). + * @note the reference counter of a pbuf equals the number of pointers + * that refer to the pbuf (or into the pbuf). + * + * @internal examples: + * + * Assuming existing chains a->b->c with the following reference + * counts, calling pbuf_free(a) results in: + * + * 1->2->3 becomes ...1->3 + * 3->3->3 becomes 2->3->3 + * 1->1->2 becomes ......1 + * 2->1->1 becomes 1->1->1 + * 1->1->1 becomes ....... + * + */ +u8_t +pbuf_free(struct pbuf *p) +{ + struct pbuf *q; + u8_t count; + SYS_ARCH_DECL_PROTECT(old_level); + + LWIP_ASSERT("p != NULL", p != NULL); + /* if assertions are disabled, proceed with debug output */ + if (p == NULL) { + LWIP_DEBUGF(PBUF_DEBUG | DBG_TRACE | 2, ("pbuf_free(p == NULL) was called.\n")); + return 0; + } + LWIP_DEBUGF(PBUF_DEBUG | DBG_TRACE | 3, ("pbuf_free(%p)\n", (void *)p)); + + PERF_START; + + LWIP_ASSERT("pbuf_free: sane flags", + p->flags == PBUF_FLAG_RAM || p->flags == PBUF_FLAG_ROM || + p->flags == PBUF_FLAG_REF || p->flags == PBUF_FLAG_POOL); + + count = 0; + /* Since decrementing ref cannot be guaranteed to be a single machine operation + * we must protect it. Also, the later test of ref must be protected. + */ + SYS_ARCH_PROTECT(old_level); + /* de-allocate all consecutive pbufs from the head of the chain that + * obtain a zero reference count after decrementing*/ + while (p != NULL) { + /* all pbufs in a chain are referenced at least once */ + LWIP_ASSERT("pbuf_free: p->ref > 0", p->ref > 0); + /* decrease reference count (number of pointers to pbuf) */ + p->ref--; + /* this pbuf is no longer referenced to? */ + if (p->ref == 0) { + /* remember next pbuf in chain for next iteration */ + q = p->next; + LWIP_DEBUGF( PBUF_DEBUG | 2, ("pbuf_free: deallocating %p\n", (void *)p)); + /* is this a pbuf from the pool? */ + if (p->flags == PBUF_FLAG_POOL) { + p->len = p->tot_len = PBUF_POOL_BUFSIZE; + p->payload = (void *)((u8_t *)p + sizeof(struct pbuf)); + PBUF_POOL_FREE(p); + /* is this a ROM or RAM referencing pbuf? */ + } else if (p->flags == PBUF_FLAG_ROM || p->flags == PBUF_FLAG_REF) { + memp_free(MEMP_PBUF, p); + /* p->flags == PBUF_FLAG_RAM */ + } else { + mem_free(p); + } + count++; + /* proceed to next pbuf */ + p = q; + /* p->ref > 0, this pbuf is still referenced to */ + /* (and so the remaining pbufs in chain as well) */ + } else { + LWIP_DEBUGF( PBUF_DEBUG | 2, ("pbuf_free: %p has ref %"U16_F", ending here.\n", (void *)p, (u16_t)p->ref)); + /* stop walking through the chain */ + p = NULL; + } + } + SYS_ARCH_UNPROTECT(old_level); + PERF_STOP("pbuf_free"); + /* return number of de-allocated pbufs */ + return count; +} + +/** + * Count number of pbufs in a chain + * + * @param p first pbuf of chain + * @return the number of pbufs in a chain + */ + +u8_t +pbuf_clen(struct pbuf *p) +{ + u8_t len; + + len = 0; + while (p != NULL) { + ++len; + p = p->next; + } + return len; +} + +/** + * Increment the reference count of the pbuf. + * + * @param p pbuf to increase reference counter of + * + */ +void +pbuf_ref(struct pbuf *p) +{ + SYS_ARCH_DECL_PROTECT(old_level); + /* pbuf given? */ + if (p != NULL) { + SYS_ARCH_PROTECT(old_level); + ++(p->ref); + SYS_ARCH_UNPROTECT(old_level); + } +} + +/** + * Concatenate two pbufs (each may be a pbuf chain) and take over + * the caller's reference of the tail pbuf. + * + * @note The caller MAY NOT reference the tail pbuf afterwards. + * Use pbuf_chain() for that purpose. + * + * @see pbuf_chain() + */ + +void +pbuf_cat(struct pbuf *h, struct pbuf *t) +{ + struct pbuf *p; + + LWIP_ASSERT("h != NULL (programmer violates API)", h != NULL); + LWIP_ASSERT("t != NULL (programmer violates API)", t != NULL); + if ((h == NULL) || (t == NULL)) return; + + /* proceed to last pbuf of chain */ + for (p = h; p->next != NULL; p = p->next) { + /* add total length of second chain to all totals of first chain */ + p->tot_len += t->tot_len; + } + /* { p is last pbuf of first h chain, p->next == NULL } */ + LWIP_ASSERT("p->tot_len == p->len (of last pbuf in chain)", p->tot_len == p->len); + LWIP_ASSERT("p->next == NULL", p->next == NULL); + /* add total length of second chain to last pbuf total of first chain */ + p->tot_len += t->tot_len; + /* chain last pbuf of head (p) with first of tail (t) */ + p->next = t; + /* p->next now references t, but the caller will drop its reference to t, + * so netto there is no change to the reference count of t. + */ +} + +/** + * Chain two pbufs (or pbuf chains) together. + * + * The caller MUST call pbuf_free(t) once it has stopped + * using it. Use pbuf_cat() instead if you no longer use t. + * + * @param h head pbuf (chain) + * @param t tail pbuf (chain) + * @note The pbufs MUST belong to the same packet. + * @note MAY NOT be called on a packet queue. + * + * The ->tot_len fields of all pbufs of the head chain are adjusted. + * The ->next field of the last pbuf of the head chain is adjusted. + * The ->ref field of the first pbuf of the tail chain is adjusted. + * + */ +void +pbuf_chain(struct pbuf *h, struct pbuf *t) +{ + pbuf_cat(h, t); + /* t is now referenced by h */ + pbuf_ref(t); + LWIP_DEBUGF(PBUF_DEBUG | DBG_FRESH | 2, ("pbuf_chain: %p references %p\n", (void *)h, (void *)t)); +} + +/* For packet queueing. Note that queued packets MUST be dequeued first + * using pbuf_dequeue() before calling other pbuf_() functions. */ +#if ARP_QUEUEING +/** + * Add a packet to the end of a queue. + * + * @param q pointer to first packet on the queue + * @param n packet to be queued + * + * Both packets MUST be given, and must be different. + */ +void +pbuf_queue(struct pbuf *p, struct pbuf *n) +{ +#if PBUF_DEBUG /* remember head of queue */ + struct pbuf *q = p; +#endif + /* programmer stupidity checks */ + LWIP_ASSERT("p == NULL in pbuf_queue: this indicates a programmer error\n", p != NULL); + LWIP_ASSERT("n == NULL in pbuf_queue: this indicates a programmer error\n", n != NULL); + LWIP_ASSERT("p == n in pbuf_queue: this indicates a programmer error\n", p != n); + if ((p == NULL) || (n == NULL) || (p == n)){ + LWIP_DEBUGF(PBUF_DEBUG | DBG_HALT | 3, ("pbuf_queue: programmer argument error\n")); + return; + } + + /* iterate through all packets on queue */ + while (p->next != NULL) { +/* be very picky about pbuf chain correctness */ +#if PBUF_DEBUG + /* iterate through all pbufs in packet */ + while (p->tot_len != p->len) { + /* make sure invariant condition holds */ + LWIP_ASSERT("p->len < p->tot_len", p->len < p->tot_len); + /* make sure each packet is complete */ + LWIP_ASSERT("p->next != NULL", p->next != NULL); + p = p->next; + /* { p->tot_len == p->len => p is last pbuf of a packet } */ + } + /* { p is last pbuf of a packet } */ + /* proceed to next packet on queue */ +#endif + /* proceed to next pbuf */ + if (p->next != NULL) p = p->next; + } + /* { p->tot_len == p->len and p->next == NULL } ==> + * { p is last pbuf of last packet on queue } */ + /* chain last pbuf of queue with n */ + p->next = n; + /* n is now referenced to by the (packet p in the) queue */ + pbuf_ref(n); +#if PBUF_DEBUG + LWIP_DEBUGF(PBUF_DEBUG | DBG_FRESH | 2, + ("pbuf_queue: newly queued packet %p sits after packet %p in queue %p\n", + (void *)n, (void *)p, (void *)q)); +#endif +} + +/** + * Remove a packet from the head of a queue. + * + * The caller MUST reference the remainder of the queue (as returned). The + * caller MUST NOT call pbuf_ref() as it implicitly takes over the reference + * from p. + * + * @param p pointer to first packet on the queue which will be dequeued. + * @return first packet on the remaining queue (NULL if no further packets). + * + */ +struct pbuf * +pbuf_dequeue(struct pbuf *p) +{ + struct pbuf *q; + LWIP_ASSERT("p != NULL", p != NULL); + + /* iterate through all pbufs in packet p */ + while (p->tot_len != p->len) { + /* make sure invariant condition holds */ + LWIP_ASSERT("p->len < p->tot_len", p->len < p->tot_len); + /* make sure each packet is complete */ + LWIP_ASSERT("p->next != NULL", p->next != NULL); + p = p->next; + } + /* { p->tot_len == p->len } => p is the last pbuf of the first packet */ + /* remember next packet on queue in q */ + q = p->next; + /* dequeue packet p from queue */ + p->next = NULL; + /* any next packet on queue? */ + if (q != NULL) { + /* although q is no longer referenced by p, it MUST be referenced by + * the caller, who is maintaining this packet queue. So, we do not call + * pbuf_free(q) here, resulting in an implicit pbuf_ref(q) for the caller. */ + LWIP_DEBUGF(PBUF_DEBUG | DBG_FRESH | 2, ("pbuf_dequeue: first remaining packet on queue is %p\n", (void *)q)); + } else { + LWIP_DEBUGF(PBUF_DEBUG | DBG_FRESH | 2, ("pbuf_dequeue: no further packets on queue\n")); + } + return q; +} +#endif + +/** + * + * Create PBUF_POOL (or PBUF_RAM) copies of PBUF_REF pbufs. + * + * Used to queue packets on behalf of the lwIP stack, such as + * ARP based queueing. + * + * Go through a pbuf chain and replace any PBUF_REF buffers + * with PBUF_POOL (or PBUF_RAM) pbufs, each taking a copy of + * the referenced data. + * + * @note You MUST explicitly use p = pbuf_take(p); + * The pbuf you give as argument, may have been replaced + * by a (differently located) copy through pbuf_take()! + * + * @note Any replaced pbufs will be freed through pbuf_free(). + * This may deallocate them if they become no longer referenced. + * + * @param p Head of pbuf chain to process + * + * @return Pointer to head of pbuf chain + */ +struct pbuf * +pbuf_take(struct pbuf *p) +{ + struct pbuf *q , *prev, *head; + LWIP_ASSERT("pbuf_take: p != NULL\n", p != NULL); + LWIP_DEBUGF(PBUF_DEBUG | DBG_TRACE | 3, ("pbuf_take(%p)\n", (void*)p)); + + prev = NULL; + head = p; + /* iterate through pbuf chain */ + do + { + /* pbuf is of type PBUF_REF? */ + if (p->flags == PBUF_FLAG_REF) { + LWIP_DEBUGF(PBUF_DEBUG | DBG_TRACE, ("pbuf_take: encountered PBUF_REF %p\n", (void *)p)); + /* allocate a pbuf (w/ payload) fully in RAM */ + /* PBUF_POOL buffers are faster if we can use them */ + if (p->len <= PBUF_POOL_BUFSIZE) { + q = pbuf_alloc(PBUF_RAW, p->len, PBUF_POOL); + if (q == NULL) { + LWIP_DEBUGF(PBUF_DEBUG | DBG_TRACE | 2, ("pbuf_take: Could not allocate PBUF_POOL\n")); + } + } else { + /* no replacement pbuf yet */ + q = NULL; + LWIP_DEBUGF(PBUF_DEBUG | DBG_TRACE | 2, ("pbuf_take: PBUF_POOL too small to replace PBUF_REF\n")); + } + /* no (large enough) PBUF_POOL was available? retry with PBUF_RAM */ + if (q == NULL) { + q = pbuf_alloc(PBUF_RAW, p->len, PBUF_RAM); + if (q == NULL) { + LWIP_DEBUGF(PBUF_DEBUG | DBG_TRACE | 2, ("pbuf_take: Could not allocate PBUF_RAM\n")); + } + } + /* replacement pbuf could be allocated? */ + if (q != NULL) + { + /* copy p to q */ + /* copy successor */ + q->next = p->next; + /* remove linkage from original pbuf */ + p->next = NULL; + /* remove linkage to original pbuf */ + if (prev != NULL) { + /* prev->next == p at this point */ + LWIP_ASSERT("prev->next == p", prev->next == p); + /* break chain and insert new pbuf instead */ + prev->next = q; + /* prev == NULL, so we replaced the head pbuf of the chain */ + } else { + head = q; + } + /* copy pbuf payload */ + memcpy(q->payload, p->payload, p->len); + q->tot_len = p->tot_len; + q->len = p->len; + /* in case p was the first pbuf, it is no longer refered to by + * our caller, as the caller MUST do p = pbuf_take(p); + * in case p was not the first pbuf, it is no longer refered to + * by prev. we can safely free the pbuf here. + * (note that we have set p->next to NULL already so that + * we will not free the rest of the chain by accident.) + */ + pbuf_free(p); + /* do not copy ref, since someone else might be using the old buffer */ + LWIP_DEBUGF(PBUF_DEBUG, ("pbuf_take: replaced PBUF_REF %p with %p\n", (void *)p, (void *)q)); + p = q; + } else { + /* deallocate chain */ + pbuf_free(head); + LWIP_DEBUGF(PBUF_DEBUG | 2, ("pbuf_take: failed to allocate replacement pbuf for %p\n", (void *)p)); + return NULL; + } + /* p->flags != PBUF_FLAG_REF */ + } else { + LWIP_DEBUGF(PBUF_DEBUG | DBG_TRACE | 1, ("pbuf_take: skipping pbuf not of type PBUF_REF\n")); + } + /* remember this pbuf */ + prev = p; + /* proceed to next pbuf in original chain */ + p = p->next; + } while (p); + LWIP_DEBUGF(PBUF_DEBUG | DBG_TRACE | 1, ("pbuf_take: end of chain reached.\n")); + + return head; +} + +/** + * Dechains the first pbuf from its succeeding pbufs in the chain. + * + * Makes p->tot_len field equal to p->len. + * @param p pbuf to dechain + * @return remainder of the pbuf chain, or NULL if it was de-allocated. + * @note May not be called on a packet queue. + */ +struct pbuf * +pbuf_dechain(struct pbuf *p) +{ + struct pbuf *q; + u8_t tail_gone = 1; + /* tail */ + q = p->next; + /* pbuf has successor in chain? */ + if (q != NULL) { + /* assert tot_len invariant: (p->tot_len == p->len + (p->next? p->next->tot_len: 0) */ + LWIP_ASSERT("p->tot_len == p->len + q->tot_len", q->tot_len == p->tot_len - p->len); + /* enforce invariant if assertion is disabled */ + q->tot_len = p->tot_len - p->len; + /* decouple pbuf from remainder */ + p->next = NULL; + /* total length of pbuf p is its own length only */ + p->tot_len = p->len; + /* q is no longer referenced by p, free it */ + LWIP_DEBUGF(PBUF_DEBUG | DBG_STATE, ("pbuf_dechain: unreferencing %p\n", (void *)q)); + tail_gone = pbuf_free(q); + if (tail_gone > 0) { + LWIP_DEBUGF(PBUF_DEBUG | DBG_STATE, + ("pbuf_dechain: deallocated %p (as it is no longer referenced)\n", (void *)q)); + } + /* return remaining tail or NULL if deallocated */ + } + /* assert tot_len invariant: (p->tot_len == p->len + (p->next? p->next->tot_len: 0) */ + LWIP_ASSERT("p->tot_len == p->len", p->tot_len == p->len); + return (tail_gone > 0? NULL: q); +} diff --git a/wii/libogc/lwip/core/raw.c b/wii/libogc/lwip/core/raw.c new file mode 100644 index 0000000000..30199804dc --- /dev/null +++ b/wii/libogc/lwip/core/raw.c @@ -0,0 +1,326 @@ +/** + * @file + * + * Implementation of raw protocol PCBs for low-level handling of + * different types of protocols besides (or overriding) those + * already available in lwIP. + * + */ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include + +#include "lwip/opt.h" + +#include "lwip/def.h" +#include "lwip/memp.h" +#include "lwip/inet.h" +#include "lwip/ip_addr.h" +#include "lwip/netif.h" +#include "lwip/raw.h" + +#include "lwip/stats.h" + +#include "arch/perf.h" +#include "lwip/snmp.h" + +#if LWIP_RAW + +/** The list of RAW PCBs */ +static struct raw_pcb *raw_pcbs = NULL; + +void +raw_init(void) +{ + raw_pcbs = NULL; +} + +/** + * Determine if in incoming IP packet is covered by a RAW PCB + * and if so, pass it to a user-provided receive callback function. + * + * Given an incoming IP datagram (as a chain of pbufs) this function + * finds a corresponding RAW PCB and calls the corresponding receive + * callback function. + * + * @param pbuf pbuf to be demultiplexed to a RAW PCB. + * @param netif network interface on which the datagram was received. + * @Return - 1 if the packet has been eaten by a RAW PCB receive + * callback function. The caller MAY NOT not reference the + * packet any longer, and MAY NOT call pbuf_free(). + * @return - 0 if packet is not eaten (pbuf is still referenced by the + * caller). + * + */ +u8_t +raw_input(struct pbuf *p, struct netif *inp) +{ + struct raw_pcb *pcb; + struct ip_hdr *iphdr; + s16_t proto; + u8_t eaten = 0; + + iphdr = p->payload; + proto = IPH_PROTO(iphdr); + + pcb = raw_pcbs; + /* loop through all raw pcbs until the packet is eaten by one */ + /* this allows multiple pcbs to match against the packet by design */ + while ((eaten == 0) && (pcb != NULL)) { + if (pcb->protocol == proto) { + /* receive callback function available? */ + if (pcb->recv != NULL) { + /* the receive callback function did not eat the packet? */ + if (pcb->recv(pcb->recv_arg, pcb, p, &(iphdr->src)) != 0) + { + /* receive function ate the packet */ + p = NULL; + eaten = 1; + } + } + /* no receive callback function was set for this raw PCB */ + /* drop the packet */ + } + pcb = pcb->next; + } + return eaten; +} + +/** + * Bind a RAW PCB. + * + * @param pcb RAW PCB to be bound with a local address ipaddr. + * @param ipaddr local IP address to bind with. Use IP_ADDR_ANY to + * bind to all local interfaces. + * + * @return lwIP error code. + * - ERR_OK. Successful. No error occured. + * - ERR_USE. The specified IP address is already bound to by + * another RAW PCB. + * + * @see raw_disconnect() + */ +err_t +raw_bind(struct raw_pcb *pcb, struct ip_addr *ipaddr) +{ + ip_addr_set(&pcb->local_ip, ipaddr); + return ERR_OK; +} + +/** + * Connect an RAW PCB. This function is required by upper layers + * of lwip. Using the raw api you could use raw_sendto() instead + * + * This will associate the RAW PCB with the remote address. + * + * @param pcb RAW PCB to be connected with remote address ipaddr and port. + * @param ipaddr remote IP address to connect with. + * + * @return lwIP error code + * + * @see raw_disconnect() and raw_sendto() + */ +err_t +raw_connect(struct raw_pcb *pcb, struct ip_addr *ipaddr) +{ + ip_addr_set(&pcb->remote_ip, ipaddr); + return ERR_OK; +} + + +/** + * Set the callback function for received packets that match the + * raw PCB's protocol and binding. + * + * The callback function MUST either + * - eat the packet by calling pbuf_free() and returning non-zero. The + * packet will not be passed to other raw PCBs or other protocol layers. + * - not free the packet, and return zero. The packet will be matched + * against further PCBs and/or forwarded to another protocol layers. + * + * @return non-zero if the packet was free()d, zero if the packet remains + * available for others. + */ +void +raw_recv(struct raw_pcb *pcb, + u8_t (* recv)(void *arg, struct raw_pcb *upcb, struct pbuf *p, + struct ip_addr *addr), + void *recv_arg) +{ + /* remember recv() callback and user data */ + pcb->recv = recv; + pcb->recv_arg = recv_arg; +} + +/** + * Send the raw IP packet to the given address. Note that actually you cannot + * modify the IP headers (this is inconsistent with the receive callback where + * you actually get the IP headers), you can only specify the IP payload here. + * It requires some more changes in lwIP. (there will be a raw_send() function + * then.) + * + * @param pcb the raw pcb which to send + * @param p the IP payload to send + * @param ipaddr the destination address of the IP packet + * + */ +err_t +raw_sendto(struct raw_pcb *pcb, struct pbuf *p, struct ip_addr *ipaddr) +{ + err_t err; + struct netif *netif; + struct ip_addr *src_ip; + struct pbuf *q; /* q will be sent down the stack */ + + LWIP_DEBUGF(RAW_DEBUG | DBG_TRACE | 3, ("raw_sendto\n")); + + /* not enough space to add an IP header to first pbuf in given p chain? */ + if (pbuf_header(p, IP_HLEN)) { + /* allocate header in new pbuf */ + q = pbuf_alloc(PBUF_IP, 0, PBUF_RAM); + /* new header pbuf could not be allocated? */ + if (q == NULL) { + LWIP_DEBUGF(RAW_DEBUG | DBG_TRACE | 2, ("raw_sendto: could not allocate header\n")); + return ERR_MEM; + } + /* chain header q in front of given pbuf p */ + pbuf_chain(q, p); + /* { first pbuf q points to header pbuf } */ + LWIP_DEBUGF(RAW_DEBUG, ("raw_sendto: added header pbuf %p before given pbuf %p\n", (void *)q, (void *)p)); + } else { + /* first pbuf q equals given pbuf */ + q = p; + pbuf_header(q, -IP_HLEN); + } + + if ((netif = ip_route(ipaddr)) == NULL) { + LWIP_DEBUGF(RAW_DEBUG | 1, ("raw_sendto: No route to 0x%"X32_F"\n", ipaddr->addr)); +#if RAW_STATS + /* ++lwip_stats.raw.rterr;*/ +#endif /* RAW_STATS */ + /* free any temporary header pbuf allocated by pbuf_header() */ + if (q != p) { + pbuf_free(q); + } + return ERR_RTE; + } + + if (ip_addr_isany(&pcb->local_ip)) { + /* use outgoing network interface IP address as source address */ + src_ip = &(netif->ip_addr); + } else { + /* use RAW PCB local IP address as source address */ + src_ip = &(pcb->local_ip); + } + + err = ip_output_if (q, src_ip, ipaddr, pcb->ttl, pcb->tos, pcb->protocol, netif); + + /* did we chain a header earlier? */ + if (q != p) { + /* free the header */ + pbuf_free(q); + } + return err; +} + +/** + * Send the raw IP packet to the address given by raw_connect() + * + * @param pcb the raw pcb which to send + * @param p the IP payload to send + * @param ipaddr the destination address of the IP packet + * + */ +err_t +raw_send(struct raw_pcb *pcb, struct pbuf *p) +{ + return raw_sendto(pcb, p, &pcb->remote_ip); +} + +/** + * Remove an RAW PCB. + * + * @param pcb RAW PCB to be removed. The PCB is removed from the list of + * RAW PCB's and the data structure is freed from memory. + * + * @see raw_new() + */ +void +raw_remove(struct raw_pcb *pcb) +{ + struct raw_pcb *pcb2; + /* pcb to be removed is first in list? */ + if (raw_pcbs == pcb) { + /* make list start at 2nd pcb */ + raw_pcbs = raw_pcbs->next; + /* pcb not 1st in list */ + } else for(pcb2 = raw_pcbs; pcb2 != NULL; pcb2 = pcb2->next) { + /* find pcb in raw_pcbs list */ + if (pcb2->next != NULL && pcb2->next == pcb) { + /* remove pcb from list */ + pcb2->next = pcb->next; + } + } + memp_free(MEMP_RAW_PCB, pcb); +} + +/** + * Create a RAW PCB. + * + * @return The RAW PCB which was created. NULL if the PCB data structure + * could not be allocated. + * + * @param proto the protocol number of the IPs payload (e.g. IP_PROTO_ICMP) + * + * @see raw_remove() + */ +struct raw_pcb * +raw_new(u16_t proto) { + struct raw_pcb *pcb; + + LWIP_DEBUGF(RAW_DEBUG | DBG_TRACE | 3, ("raw_new\n")); + + pcb = memp_malloc(MEMP_RAW_PCB); + /* could allocate RAW PCB? */ + if (pcb != NULL) { + /* initialize PCB to all zeroes */ + memset(pcb, 0, sizeof(struct raw_pcb)); + pcb->protocol = proto; + pcb->ttl = RAW_TTL; + pcb->next = raw_pcbs; + raw_pcbs = pcb; + } + return pcb; +} + +#endif /* LWIP_RAW */ diff --git a/wii/libogc/lwip/core/stats.c b/wii/libogc/lwip/core/stats.c new file mode 100644 index 0000000000..c94623f7a8 --- /dev/null +++ b/wii/libogc/lwip/core/stats.c @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include + +#include "lwip/opt.h" + +#include "lwip/def.h" + +#include "lwip/stats.h" +#include "lwip/mem.h" + + +#if LWIP_STATS +struct stats_ lwip_stats; + +void +stats_init(void) +{ + memset(&lwip_stats, 0, sizeof(struct stats_)); +} +#if LWIP_STATS_DISPLAY +void +stats_display_proto(struct stats_proto *proto, char *name) +{ + LWIP_PLATFORM_DIAG(("\n%s\n\t", name)); + LWIP_PLATFORM_DIAG(("xmit: %"S16_F"\n\t", proto->xmit)); + LWIP_PLATFORM_DIAG(("rexmit: %"S16_F"\n\t", proto->rexmit)); + LWIP_PLATFORM_DIAG(("recv: %"S16_F"\n\t", proto->recv)); + LWIP_PLATFORM_DIAG(("fw: %"S16_F"\n\t", proto->fw)); + LWIP_PLATFORM_DIAG(("drop: %"S16_F"\n\t", proto->drop)); + LWIP_PLATFORM_DIAG(("chkerr: %"S16_F"\n\t", proto->chkerr)); + LWIP_PLATFORM_DIAG(("lenerr: %"S16_F"\n\t", proto->lenerr)); + LWIP_PLATFORM_DIAG(("memerr: %"S16_F"\n\t", proto->memerr)); + LWIP_PLATFORM_DIAG(("rterr: %"S16_F"\n\t", proto->rterr)); + LWIP_PLATFORM_DIAG(("proterr: %"S16_F"\n\t", proto->proterr)); + LWIP_PLATFORM_DIAG(("opterr: %"S16_F"\n\t", proto->opterr)); + LWIP_PLATFORM_DIAG(("err: %"S16_F"\n\t", proto->err)); + LWIP_PLATFORM_DIAG(("cachehit: %"S16_F"\n", proto->cachehit)); +} + +void +stats_display_pbuf(struct stats_pbuf *pbuf) +{ + LWIP_PLATFORM_DIAG(("\nPBUF\n\t")); + LWIP_PLATFORM_DIAG(("avail: %"S16_F"\n\t", pbuf->avail)); + LWIP_PLATFORM_DIAG(("used: %"S16_F"\n\t", pbuf->used)); + LWIP_PLATFORM_DIAG(("max: %"S16_F"\n\t", pbuf->max)); + LWIP_PLATFORM_DIAG(("err: %"S16_F"\n\t", pbuf->err)); + LWIP_PLATFORM_DIAG(("alloc_locked: %"S16_F"\n\t", pbuf->alloc_locked)); + LWIP_PLATFORM_DIAG(("refresh_locked: %"S16_F"\n", pbuf->refresh_locked)); +} + +void +stats_display_mem(struct stats_mem *mem, char *name) +{ + LWIP_PLATFORM_DIAG(("\n MEM %s\n\t", name)); + LWIP_PLATFORM_DIAG(("avail: %"S16_F"\n\t", mem->avail)); + LWIP_PLATFORM_DIAG(("used: %"S16_F"\n\t", mem->used)); + LWIP_PLATFORM_DIAG(("max: %"S16_F"\n\t", mem->max)); + LWIP_PLATFORM_DIAG(("err: %"S16_F"\n", mem->err)); + +} + +void +stats_display(void) +{ + s16_t i; + char * memp_names[] = {"PBUF", "RAW_PCB", "UDP_PCB", "TCP_PCB", "TCP_PCB_LISTEN", + "TCP_SEG", "NETBUF", "NETCONN", "API_MSG", "TCP_MSG", "TIMEOUT"}; + stats_display_proto(&lwip_stats.link, "LINK"); + stats_display_proto(&lwip_stats.ip_frag, "IP_FRAG"); + stats_display_proto(&lwip_stats.ip, "IP"); + stats_display_proto(&lwip_stats.icmp, "ICMP"); + stats_display_proto(&lwip_stats.udp, "UDP"); + stats_display_proto(&lwip_stats.tcp, "TCP"); + stats_display_pbuf(&lwip_stats.pbuf); + stats_display_mem(&lwip_stats.mem, "HEAP"); + for (i = 0; i < MEMP_MAX; i++) { + stats_display_mem(&lwip_stats.memp[i], memp_names[i]); + } + +} +#endif /* LWIP_STATS_DISPLAY */ +#endif /* LWIP_STATS */ + diff --git a/wii/libogc/lwip/core/sys.c b/wii/libogc/lwip/core/sys.c new file mode 100644 index 0000000000..a7dbf34dab --- /dev/null +++ b/wii/libogc/lwip/core/sys.c @@ -0,0 +1,294 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/sys.h" +#include "lwip/opt.h" +#include "lwip/def.h" +#include "lwip/memp.h" + +#if (NO_SYS == 0) + +struct sswt_cb +{ + s16_t timeflag; + sys_sem_t *psem; +}; + + + +void +sys_mbox_fetch(sys_mbox_t mbox, void **msg) +{ + u32_t time; + struct sys_timeouts *timeouts; + struct sys_timeout *tmptimeout; + sys_timeout_handler h; + void *arg; + + + again: + timeouts = sys_arch_timeouts(); + + if (!timeouts || !timeouts->next) { + sys_arch_mbox_fetch(mbox, msg, 0); + } else { + if (timeouts->next->time > 0) { + time = sys_arch_mbox_fetch(mbox, msg, timeouts->next->time); + } else { + time = SYS_ARCH_TIMEOUT; + } + + if (time == SYS_ARCH_TIMEOUT) { + /* If time == SYS_ARCH_TIMEOUT, a timeout occured before a message + could be fetched. We should now call the timeout handler and + deallocate the memory allocated for the timeout. */ + tmptimeout = timeouts->next; + timeouts->next = tmptimeout->next; + h = tmptimeout->h; + arg = tmptimeout->arg; + memp_free(MEMP_SYS_TIMEOUT, tmptimeout); + if (h != NULL) { + LWIP_DEBUGF(SYS_DEBUG, ("smf calling h=%p(%p)\n", (void *)h, (void *)arg)); + h(arg); + } + + /* We try again to fetch a message from the mbox. */ + goto again; + } else { + /* If time != SYS_ARCH_TIMEOUT, a message was received before the timeout + occured. The time variable is set to the number of + milliseconds we waited for the message. */ + if (time <= timeouts->next->time) { + timeouts->next->time -= time; + } else { + timeouts->next->time = 0; + } + } + + } +} + +void +sys_sem_wait(sys_sem_t sem) +{ + u32_t time; + struct sys_timeouts *timeouts; + struct sys_timeout *tmptimeout; + sys_timeout_handler h; + void *arg; + + /* while (sys_arch_sem_wait(sem, 1000) == 0); + return;*/ + + again: + + timeouts = sys_arch_timeouts(); + + if (!timeouts || !timeouts->next) { + sys_arch_sem_wait(sem, 0); + } else { + if (timeouts->next->time > 0) { + time = sys_arch_sem_wait(sem, timeouts->next->time); + } else { + time = SYS_ARCH_TIMEOUT; + } + + if (time == SYS_ARCH_TIMEOUT) { + /* If time == SYS_ARCH_TIMEOUT, a timeout occured before a message + could be fetched. We should now call the timeout handler and + deallocate the memory allocated for the timeout. */ + tmptimeout = timeouts->next; + timeouts->next = tmptimeout->next; + h = tmptimeout->h; + arg = tmptimeout->arg; + memp_free(MEMP_SYS_TIMEOUT, tmptimeout); + if (h != NULL) { + LWIP_DEBUGF(SYS_DEBUG, ("ssw h=%p(%p)\n", (void *)h, (void *)arg)); + h(arg); + } + + + /* We try again to fetch a message from the mbox. */ + goto again; + } else { + /* If time != SYS_ARCH_TIMEOUT, a message was received before the timeout + occured. The time variable is set to the number of + milliseconds we waited for the message. */ + if (time <= timeouts->next->time) { + timeouts->next->time -= time; + } else { + timeouts->next->time = 0; + } + } + + } +} + +void +sys_timeout(u32_t msecs, sys_timeout_handler h, void *arg) +{ + struct sys_timeouts *timeouts; + struct sys_timeout *timeout, *t; + + timeout = memp_malloc(MEMP_SYS_TIMEOUT); + if (timeout == NULL) { + return; + } + timeout->next = NULL; + timeout->h = h; + timeout->arg = arg; + timeout->time = msecs; + + timeouts = sys_arch_timeouts(); + + LWIP_DEBUGF(SYS_DEBUG, ("sys_timeout: %p msecs=%"U32_F" h=%p arg=%p\n", + (void *)timeout, msecs, (void *)h, (void *)arg)); + + LWIP_ASSERT("sys_timeout: timeouts != NULL", timeouts != NULL); + + if (timeouts->next == NULL) { + timeouts->next = timeout; + return; + } + + if (timeouts->next->time > msecs) { + timeouts->next->time -= msecs; + timeout->next = timeouts->next; + timeouts->next = timeout; + } else { + for(t = timeouts->next; t != NULL; t = t->next) { + timeout->time -= t->time; + if (t->next == NULL || t->next->time > timeout->time) { + if (t->next != NULL) { + t->next->time -= timeout->time; + } + timeout->next = t->next; + t->next = timeout; + break; + } + } + } + +} + +/* Go through timeout list (for this task only) and remove the first matching entry, + even though the timeout has not triggered yet. +*/ + +void +sys_untimeout(sys_timeout_handler h, void *arg) +{ + struct sys_timeouts *timeouts; + struct sys_timeout *prev_t, *t; + + timeouts = sys_arch_timeouts(); + + if (timeouts->next == NULL) + return; + + for (t = timeouts->next, prev_t = NULL; t != NULL; prev_t = t, t = t->next) + { + if ((t->h == h) && (t->arg == arg)) + { + /* We have a match */ + /* Unlink from previous in list */ + if (prev_t == NULL) + timeouts->next = t->next; + else + prev_t->next = t->next; + /* If not the last one, add time of this one back to next */ + if (t->next != NULL) + t->next->time += t->time; + memp_free(MEMP_SYS_TIMEOUT, t); + return; + } + } + return; +} + + + + + +static void +sswt_handler(void *arg) +{ + struct sswt_cb *sswt_cb = (struct sswt_cb *) arg; + + /* Timeout. Set flag to TRUE and signal semaphore */ + sswt_cb->timeflag = 1; + sys_sem_signal(*(sswt_cb->psem)); +} + +/* Wait for a semaphore with timeout (specified in ms) */ +/* timeout = 0: wait forever */ +/* Returns 0 on timeout. 1 otherwise */ + +int +sys_sem_wait_timeout(sys_sem_t sem, u32_t timeout) +{ + struct sswt_cb sswt_cb; + + sswt_cb.psem = &sem; + sswt_cb.timeflag = 0; + + /* If timeout is zero, then just wait forever */ + if (timeout > 0) + /* Create a timer and pass it the address of our flag */ + sys_timeout(timeout, sswt_handler, &sswt_cb); + sys_sem_wait(sem); + /* Was it a timeout? */ + if (sswt_cb.timeflag) + { + /* timeout */ + return 0; + } else { + /* Not a timeout. Remove timeout entry */ + sys_untimeout(sswt_handler, &sswt_cb); + return 1; + } + +} + + +void +sys_msleep(u32_t ms) +{ + sys_sem_t delaysem = sys_sem_new(0); + + sys_sem_wait_timeout(delaysem, ms); + + sys_sem_free(delaysem); +} + + +#endif /* NO_SYS */ diff --git a/wii/libogc/lwip/core/tcp.c b/wii/libogc/lwip/core/tcp.c new file mode 100644 index 0000000000..41a9edb4e5 --- /dev/null +++ b/wii/libogc/lwip/core/tcp.c @@ -0,0 +1,1171 @@ +/** + * @file + * + * Transmission Control Protocol for IP + * + * This file contains common functions for the TCP implementation, such as functinos + * for manipulating the data structures and the TCP timer functions. TCP functions + * related to input and output is found in tcp_in.c and tcp_out.c respectively. + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include + +#include "lwip/opt.h" +#include "lwip/def.h" +#include "lwip/mem.h" +#include "lwip/memp.h" + +#include "lwip/tcp.h" +#if LWIP_TCP + +/* Incremented every coarse grained timer shot + (typically every 500 ms, determined by TCP_COARSE_TIMEOUT). */ +u32_t tcp_ticks; +const u8_t tcp_backoff[13] = + { 1, 2, 3, 4, 5, 6, 7, 7, 7, 7, 7, 7, 7}; + +/* The TCP PCB lists. */ + +/** List of all TCP PCBs in LISTEN state */ +union tcp_listen_pcbs_t tcp_listen_pcbs; +/** List of all TCP PCBs that are in a state in which + * they accept or send data. */ +struct tcp_pcb *tcp_active_pcbs; +/** List of all TCP PCBs in TIME-WAIT state */ +struct tcp_pcb *tcp_tw_pcbs; + +struct tcp_pcb *tcp_tmp_pcb; + +static u8_t tcp_timer; +static u16_t tcp_new_port(void); + +/** + * Initializes the TCP layer. + */ +void +tcp_init(void) +{ + /* Clear globals. */ + tcp_listen_pcbs.listen_pcbs = NULL; + tcp_active_pcbs = NULL; + tcp_tw_pcbs = NULL; + tcp_tmp_pcb = NULL; + + /* initialize timer */ + tcp_ticks = 0; + tcp_timer = 0; + +} + +/** + * Called periodically to dispatch TCP timers. + * + */ +void +tcp_tmr(void) +{ + /* Call tcp_fasttmr() every 250 ms */ + tcp_fasttmr(); + + if (++tcp_timer & 1) { + /* Call tcp_tmr() every 500 ms, i.e., every other timer + tcp_tmr() is called. */ + tcp_slowtmr(); + } +} + +/** + * Closes the connection held by the PCB. + * + */ +err_t +tcp_close(struct tcp_pcb *pcb) +{ + err_t err; + +#if TCP_DEBUG + LWIP_DEBUGF(TCP_DEBUG, ("tcp_close: closing in state ")); + tcp_debug_print_state(pcb->state); + LWIP_DEBUGF(TCP_DEBUG, ("\n")); +#endif /* TCP_DEBUG */ + switch (pcb->state) { + case CLOSED: + /* Closing a pcb in the CLOSED state might seem erroneous, + * however, it is in this state once allocated and as yet unused + * and the user needs some way to free it should the need arise. + * Calling tcp_close() with a pcb that has already been closed, (i.e. twice) + * or for a pcb that has been used and then entered the CLOSED state + * is erroneous, but this should never happen as the pcb has in those cases + * been freed, and so any remaining handles are bogus. */ + err = ERR_OK; + memp_free(MEMP_TCP_PCB, pcb); + pcb = NULL; + break; + case LISTEN: + err = ERR_OK; + tcp_pcb_remove((struct tcp_pcb **)&tcp_listen_pcbs.pcbs, pcb); + memp_free(MEMP_TCP_PCB_LISTEN, pcb); + pcb = NULL; + break; + case SYN_SENT: + err = ERR_OK; + tcp_pcb_remove(&tcp_active_pcbs, pcb); + memp_free(MEMP_TCP_PCB, pcb); + pcb = NULL; + break; + case SYN_RCVD: + case ESTABLISHED: + err = tcp_send_ctrl(pcb, TCP_FIN); + if (err == ERR_OK) { + pcb->state = FIN_WAIT_1; + } + break; + case CLOSE_WAIT: + err = tcp_send_ctrl(pcb, TCP_FIN); + if (err == ERR_OK) { + pcb->state = LAST_ACK; + } + break; + default: + /* Has already been closed, do nothing. */ + err = ERR_OK; + pcb = NULL; + break; + } + + if (pcb != NULL && err == ERR_OK) { + err = tcp_output(pcb); + } + return err; +} + +/** + * Aborts a connection by sending a RST to the remote host and deletes + * the local protocol control block. This is done when a connection is + * killed because of shortage of memory. + * + */ +void +tcp_abort(struct tcp_pcb *pcb) +{ + u32_t seqno, ackno; + u16_t remote_port, local_port; + struct ip_addr remote_ip, local_ip; +#if LWIP_CALLBACK_API + void (* errf)(void *arg, err_t err); +#endif /* LWIP_CALLBACK_API */ + void *errf_arg; + + + /* Figure out on which TCP PCB list we are, and remove us. If we + are in an active state, call the receive function associated with + the PCB with a NULL argument, and send an RST to the remote end. */ + if (pcb->state == TIME_WAIT) { + tcp_pcb_remove(&tcp_tw_pcbs, pcb); + memp_free(MEMP_TCP_PCB, pcb); + } else { + seqno = pcb->snd_nxt; + ackno = pcb->rcv_nxt; + ip_addr_set(&local_ip, &(pcb->local_ip)); + ip_addr_set(&remote_ip, &(pcb->remote_ip)); + local_port = pcb->local_port; + remote_port = pcb->remote_port; +#if LWIP_CALLBACK_API + errf = pcb->errf; +#endif /* LWIP_CALLBACK_API */ + errf_arg = pcb->callback_arg; + tcp_pcb_remove(&tcp_active_pcbs, pcb); + if (pcb->unacked != NULL) { + tcp_segs_free(pcb->unacked); + } + if (pcb->unsent != NULL) { + tcp_segs_free(pcb->unsent); + } +#if TCP_QUEUE_OOSEQ + if (pcb->ooseq != NULL) { + tcp_segs_free(pcb->ooseq); + } +#endif /* TCP_QUEUE_OOSEQ */ + memp_free(MEMP_TCP_PCB, pcb); + TCP_EVENT_ERR(errf, errf_arg, ERR_ABRT); + LWIP_DEBUGF(TCP_RST_DEBUG, ("tcp_abort: sending RST\n")); + tcp_rst(seqno, ackno, &local_ip, &remote_ip, local_port, remote_port); + } +} + +/** + * Binds the connection to a local portnumber and IP address. If the + * IP address is not given (i.e., ipaddr == NULL), the IP address of + * the outgoing network interface is used instead. + * + */ + +err_t +tcp_bind(struct tcp_pcb *pcb, struct ip_addr *ipaddr, u16_t port) +{ + struct tcp_pcb *cpcb; + + if (port == 0) { + port = tcp_new_port(); + } + /* Check if the address already is in use. */ + for(cpcb = (struct tcp_pcb *)tcp_listen_pcbs.pcbs; + cpcb != NULL; cpcb = cpcb->next) { + if (cpcb->local_port == port) { + if (ip_addr_isany(&(cpcb->local_ip)) || + ip_addr_isany(ipaddr) || + ip_addr_cmp(&(cpcb->local_ip), ipaddr)) { + return ERR_USE; + } + } + } + for(cpcb = tcp_active_pcbs; + cpcb != NULL; cpcb = cpcb->next) { + if (cpcb->local_port == port) { + if (ip_addr_isany(&(cpcb->local_ip)) || + ip_addr_isany(ipaddr) || + ip_addr_cmp(&(cpcb->local_ip), ipaddr)) { + return ERR_USE; + } + } + } + + if (!ip_addr_isany(ipaddr)) { + pcb->local_ip = *ipaddr; + } + pcb->local_port = port; + LWIP_DEBUGF(TCP_DEBUG, ("tcp_bind: bind to port %"U16_F"\n", port)); + return ERR_OK; +} +#if LWIP_CALLBACK_API +static err_t +tcp_accept_null(void *arg, struct tcp_pcb *pcb, err_t err) +{ + (void)arg; + (void)pcb; + (void)err; + + return ERR_ABRT; +} +#endif /* LWIP_CALLBACK_API */ + +/** + * Set the state of the connection to be LISTEN, which means that it + * is able to accept incoming connections. The protocol control block + * is reallocated in order to consume less memory. Setting the + * connection to LISTEN is an irreversible process. + * + */ +struct tcp_pcb * +tcp_listen(struct tcp_pcb *pcb) +{ + struct tcp_pcb_listen *lpcb; + + /* already listening? */ + if (pcb->state == LISTEN) { + return pcb; + } + lpcb = memp_malloc(MEMP_TCP_PCB_LISTEN); + if (lpcb == NULL) { + return NULL; + } + lpcb->callback_arg = pcb->callback_arg; + lpcb->local_port = pcb->local_port; + lpcb->state = LISTEN; + lpcb->so_options = pcb->so_options; + lpcb->so_options |= SOF_ACCEPTCONN; + lpcb->ttl = pcb->ttl; + lpcb->tos = pcb->tos; + ip_addr_set(&lpcb->local_ip, &pcb->local_ip); + memp_free(MEMP_TCP_PCB, pcb); +#if LWIP_CALLBACK_API + lpcb->accept = tcp_accept_null; +#endif /* LWIP_CALLBACK_API */ + TCP_REG(&tcp_listen_pcbs.listen_pcbs, lpcb); + return (struct tcp_pcb *)lpcb; +} + +/** + * This function should be called by the application when it has + * processed the data. The purpose is to advertise a larger window + * when the data has been processed. + * + */ +void +tcp_recved(struct tcp_pcb *pcb, u16_t len) +{ + if ((u32_t)pcb->rcv_wnd + len > TCP_WND) { + pcb->rcv_wnd = TCP_WND; + } else { + pcb->rcv_wnd += len; + } + if (!(pcb->flags & TF_ACK_DELAY) && + !(pcb->flags & TF_ACK_NOW)) { + /* + * We send an ACK here (if one is not already pending, hence + * the above tests) as tcp_recved() implies that the application + * has processed some data, and so we can open the receiver's + * window to allow more to be transmitted. This could result in + * two ACKs being sent for each received packet in some limited cases + * (where the application is only receiving data, and is slow to + * process it) but it is necessary to guarantee that the sender can + * continue to transmit. + */ + tcp_ack(pcb); + } + else if (pcb->flags & TF_ACK_DELAY && pcb->rcv_wnd >= TCP_WND/2) { + /* If we can send a window update such that there is a full + * segment available in the window, do so now. This is sort of + * nagle-like in its goals, and tries to hit a compromise between + * sending acks each time the window is updated, and only sending + * window updates when a timer expires. The "threshold" used + * above (currently TCP_WND/2) can be tuned to be more or less + * aggressive */ + tcp_ack_now(pcb); + } + + LWIP_DEBUGF(TCP_DEBUG, ("tcp_recved: recveived %"U16_F" bytes, wnd %"U16_F" (%"U16_F").\n", + len, pcb->rcv_wnd, TCP_WND - pcb->rcv_wnd)); +} + +/** + * A nastly hack featuring 'goto' statements that allocates a + * new TCP local port. + */ +static u16_t +tcp_new_port(void) +{ + struct tcp_pcb *pcb; +#ifndef TCP_LOCAL_PORT_RANGE_START +#define TCP_LOCAL_PORT_RANGE_START 4096 +#define TCP_LOCAL_PORT_RANGE_END 0x7fff +#endif + static u16_t port = TCP_LOCAL_PORT_RANGE_START; + + again: + if (++port > TCP_LOCAL_PORT_RANGE_END) { + port = TCP_LOCAL_PORT_RANGE_START; + } + + for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { + if (pcb->local_port == port) { + goto again; + } + } + for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) { + if (pcb->local_port == port) { + goto again; + } + } + for(pcb = (struct tcp_pcb *)tcp_listen_pcbs.pcbs; pcb != NULL; pcb = pcb->next) { + if (pcb->local_port == port) { + goto again; + } + } + return port; +} + +/** + * Connects to another host. The function given as the "connected" + * argument will be called when the connection has been established. + * + */ +err_t +tcp_connect(struct tcp_pcb *pcb, struct ip_addr *ipaddr, u16_t port, + err_t (* connected)(void *arg, struct tcp_pcb *tpcb, err_t err)) +{ + u32_t optdata; + err_t ret; + u32_t iss; + + LWIP_DEBUGF(TCP_DEBUG, ("tcp_connect to port %"U16_F"\n", port)); + if (ipaddr != NULL) { + pcb->remote_ip = *ipaddr; + } else { + return ERR_VAL; + } + pcb->remote_port = port; + if (pcb->local_port == 0) { + pcb->local_port = tcp_new_port(); + } + iss = tcp_next_iss(); + pcb->rcv_nxt = 0; + pcb->snd_nxt = iss; + pcb->lastack = iss - 1; + pcb->snd_lbb = iss - 1; + pcb->rcv_wnd = TCP_WND; + pcb->snd_wnd = TCP_WND; + pcb->mss = TCP_MSS; + pcb->cwnd = 1; + pcb->ssthresh = pcb->mss * 10; + pcb->state = SYN_SENT; +#if LWIP_CALLBACK_API + pcb->connected = connected; +#endif /* LWIP_CALLBACK_API */ + TCP_REG(&tcp_active_pcbs, pcb); + + /* Build an MSS option */ + optdata = htonl(((u32_t)2 << 24) | + ((u32_t)4 << 16) | + (((u32_t)pcb->mss / 256) << 8) | + (pcb->mss & 255)); + + ret = tcp_enqueue(pcb, NULL, 0, TCP_SYN, 0, (u8_t *)&optdata, 4); + if (ret == ERR_OK) { + tcp_output(pcb); + } + return ret; +} + +/** + * Called every 500 ms and implements the retransmission timer and the timer that + * removes PCBs that have been in TIME-WAIT for enough time. It also increments + * various timers such as the inactivity timer in each PCB. + */ +void +tcp_slowtmr(void) +{ + struct tcp_pcb *pcb, *pcb2, *prev; + u32_t eff_wnd; + u8_t pcb_remove; /* flag if a PCB should be removed */ + err_t err; + + err = ERR_OK; + + ++tcp_ticks; + + /* Steps through all of the active PCBs. */ + prev = NULL; + pcb = tcp_active_pcbs; + if (pcb == NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: no active pcbs\n")); + } + while (pcb != NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: processing active pcb\n")); + LWIP_ASSERT("tcp_slowtmr: active pcb->state != CLOSED\n", pcb->state != CLOSED); + LWIP_ASSERT("tcp_slowtmr: active pcb->state != LISTEN\n", pcb->state != LISTEN); + LWIP_ASSERT("tcp_slowtmr: active pcb->state != TIME-WAIT\n", pcb->state != TIME_WAIT); + + pcb_remove = 0; + + if (pcb->state == SYN_SENT && pcb->nrtx == TCP_SYNMAXRTX) { + ++pcb_remove; + LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: max SYN retries reached\n")); + } + else if (pcb->nrtx == TCP_MAXRTX) { + ++pcb_remove; + LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: max DATA retries reached\n")); + } else { + ++pcb->rtime; + if (pcb->unacked != NULL && pcb->rtime >= pcb->rto) { + + /* Time for a retransmission. */ + LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_slowtmr: rtime %"U16_F" pcb->rto %"U16_F"\n", + pcb->rtime, pcb->rto)); + + /* Double retransmission time-out unless we are trying to + * connect to somebody (i.e., we are in SYN_SENT). */ + if (pcb->state != SYN_SENT) { + pcb->rto = ((pcb->sa >> 3) + pcb->sv) << tcp_backoff[pcb->nrtx]; + } + /* Reduce congestion window and ssthresh. */ + eff_wnd = LWIP_MIN(pcb->cwnd, pcb->snd_wnd); + pcb->ssthresh = eff_wnd >> 1; + if (pcb->ssthresh < pcb->mss) { + pcb->ssthresh = pcb->mss * 2; + } + pcb->cwnd = pcb->mss; + LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_slowtmr: cwnd %"U16_F" ssthresh %"U16_F"\n", + pcb->cwnd, pcb->ssthresh)); + + /* The following needs to be called AFTER cwnd is set to one mss - STJ */ + tcp_rexmit_rto(pcb); + } + } + /* Check if this PCB has stayed too long in FIN-WAIT-2 */ + if (pcb->state == FIN_WAIT_2) { + if ((u32_t)(tcp_ticks - pcb->tmr) > + TCP_FIN_WAIT_TIMEOUT / TCP_SLOW_INTERVAL) { + ++pcb_remove; + LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: removing pcb stuck in FIN-WAIT-2\n")); + } + } + + /* Check if KEEPALIVE should be sent */ + if((pcb->so_options & SOF_KEEPALIVE) && ((pcb->state == ESTABLISHED) || (pcb->state == CLOSE_WAIT))) { + if((u32_t)(tcp_ticks - pcb->tmr) > (pcb->keepalive + TCP_MAXIDLE) / TCP_SLOW_INTERVAL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: KEEPALIVE timeout. Aborting connection to %"U16_F".%"U16_F".%"U16_F".%"U16_F".\n", + ip4_addr1(&pcb->remote_ip), ip4_addr2(&pcb->remote_ip), + ip4_addr3(&pcb->remote_ip), ip4_addr4(&pcb->remote_ip))); + + tcp_abort(pcb); + } + else if((u32_t)(tcp_ticks - pcb->tmr) > (pcb->keepalive + pcb->keep_cnt * TCP_KEEPINTVL) / TCP_SLOW_INTERVAL) { + tcp_keepalive(pcb); + pcb->keep_cnt++; + } + } + + /* If this PCB has queued out of sequence data, but has been + inactive for too long, will drop the data (it will eventually + be retransmitted). */ +#if TCP_QUEUE_OOSEQ + if (pcb->ooseq != NULL && + (u32_t)tcp_ticks - pcb->tmr >= + pcb->rto * TCP_OOSEQ_TIMEOUT) { + tcp_segs_free(pcb->ooseq); + pcb->ooseq = NULL; + LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_slowtmr: dropping OOSEQ queued data\n")); + } +#endif /* TCP_QUEUE_OOSEQ */ + + /* Check if this PCB has stayed too long in SYN-RCVD */ + if (pcb->state == SYN_RCVD) { + if ((u32_t)(tcp_ticks - pcb->tmr) > + TCP_SYN_RCVD_TIMEOUT / TCP_SLOW_INTERVAL) { + ++pcb_remove; + LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: removing pcb stuck in SYN-RCVD\n")); + } + } + + /* Check if this PCB has stayed too long in LAST-ACK */ + if (pcb->state == LAST_ACK) { + if ((u32_t)(tcp_ticks - pcb->tmr) > 2 * TCP_MSL / TCP_SLOW_INTERVAL) { + ++pcb_remove; + LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: removing pcb stuck in LAST-ACK\n")); + } + } + + /* If the PCB should be removed, do it. */ + if (pcb_remove) { + tcp_pcb_purge(pcb); + /* Remove PCB from tcp_active_pcbs list. */ + if (prev != NULL) { + LWIP_ASSERT("tcp_slowtmr: middle tcp != tcp_active_pcbs", pcb != tcp_active_pcbs); + prev->next = pcb->next; + } else { + /* This PCB was the first. */ + LWIP_ASSERT("tcp_slowtmr: first pcb == tcp_active_pcbs", tcp_active_pcbs == pcb); + tcp_active_pcbs = pcb->next; + } + + TCP_EVENT_ERR(pcb->errf, pcb->callback_arg, ERR_ABRT); + + pcb2 = pcb->next; + memp_free(MEMP_TCP_PCB, pcb); + pcb = pcb2; + } else { + + /* We check if we should poll the connection. */ + ++pcb->polltmr; + if (pcb->polltmr >= pcb->pollinterval) { + pcb->polltmr = 0; + LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: polling application\n")); + TCP_EVENT_POLL(pcb, err); + if (err == ERR_OK) { + tcp_output(pcb); + } + } + + prev = pcb; + pcb = pcb->next; + } + } + + + /* Steps through all of the TIME-WAIT PCBs. */ + prev = NULL; + pcb = tcp_tw_pcbs; + while (pcb != NULL) { + LWIP_ASSERT("tcp_slowtmr: TIME-WAIT pcb->state == TIME-WAIT", pcb->state == TIME_WAIT); + pcb_remove = 0; + + /* Check if this PCB has stayed long enough in TIME-WAIT */ + if ((u32_t)(tcp_ticks - pcb->tmr) > 2 * TCP_MSL / TCP_SLOW_INTERVAL) { + ++pcb_remove; + } + + + + /* If the PCB should be removed, do it. */ + if (pcb_remove) { + tcp_pcb_purge(pcb); + /* Remove PCB from tcp_tw_pcbs list. */ + if (prev != NULL) { + LWIP_ASSERT("tcp_slowtmr: middle tcp != tcp_tw_pcbs", pcb != tcp_tw_pcbs); + prev->next = pcb->next; + } else { + /* This PCB was the first. */ + LWIP_ASSERT("tcp_slowtmr: first pcb == tcp_tw_pcbs", tcp_tw_pcbs == pcb); + tcp_tw_pcbs = pcb->next; + } + pcb2 = pcb->next; + memp_free(MEMP_TCP_PCB, pcb); + pcb = pcb2; + } else { + prev = pcb; + pcb = pcb->next; + } + } +} + +/** + * Is called every TCP_FAST_INTERVAL (250 ms) and sends delayed ACKs. + */ +void +tcp_fasttmr(void) +{ + struct tcp_pcb *pcb; + + /* send delayed ACKs */ + for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { + if (pcb->flags & TF_ACK_DELAY) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_fasttmr: delayed ACK\n")); + tcp_ack_now(pcb); + pcb->flags &= ~(TF_ACK_DELAY | TF_ACK_NOW); + } + } +} + +/** + * Deallocates a list of TCP segments (tcp_seg structures). + * + */ +u8_t +tcp_segs_free(struct tcp_seg *seg) +{ + u8_t count = 0; + struct tcp_seg *next; + while (seg != NULL) { + next = seg->next; + count += tcp_seg_free(seg); + seg = next; + } + return count; +} + +/** + * Frees a TCP segment. + * + */ +u8_t +tcp_seg_free(struct tcp_seg *seg) +{ + u8_t count = 0; + + if (seg != NULL) { + if (seg->p != NULL) { + count = pbuf_free(seg->p); +#if TCP_DEBUG + seg->p = NULL; +#endif /* TCP_DEBUG */ + } + memp_free(MEMP_TCP_SEG, seg); + } + return count; +} + +/** + * Sets the priority of a connection. + * + */ +void +tcp_setprio(struct tcp_pcb *pcb, u8_t prio) +{ + pcb->prio = prio; +} +#if TCP_QUEUE_OOSEQ + +/** + * Returns a copy of the given TCP segment. + * + */ +struct tcp_seg * +tcp_seg_copy(struct tcp_seg *seg) +{ + struct tcp_seg *cseg; + + cseg = memp_malloc(MEMP_TCP_SEG); + if (cseg == NULL) { + return NULL; + } + memcpy((u8_t *)cseg, (const u8_t *)seg, sizeof(struct tcp_seg)); + pbuf_ref(cseg->p); + return cseg; +} +#endif + +#if LWIP_CALLBACK_API +static err_t +tcp_recv_null(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err) +{ + arg = arg; + if (p != NULL) { + pbuf_free(p); + } else if (err == ERR_OK) { + return tcp_close(pcb); + } + return ERR_OK; +} +#endif /* LWIP_CALLBACK_API */ + +static void +tcp_kill_prio(u8_t prio) +{ + struct tcp_pcb *pcb, *inactive; + u32_t inactivity; + u8_t mprio; + + + mprio = TCP_PRIO_MAX; + + /* We kill the oldest active connection that has lower priority than + prio. */ + inactivity = 0; + inactive = NULL; + for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { + if (pcb->prio <= prio && + pcb->prio <= mprio && + (u32_t)(tcp_ticks - pcb->tmr) >= inactivity) { + inactivity = tcp_ticks - pcb->tmr; + inactive = pcb; + mprio = pcb->prio; + } + } + if (inactive != NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_kill_prio: killing oldest PCB %p (%"S32_F")\n", + (void *)inactive, inactivity)); + tcp_abort(inactive); + } +} + + +static void +tcp_kill_timewait(void) +{ + struct tcp_pcb *pcb, *inactive; + u32_t inactivity; + + inactivity = 0; + inactive = NULL; + for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) { + if ((u32_t)(tcp_ticks - pcb->tmr) >= inactivity) { + inactivity = tcp_ticks - pcb->tmr; + inactive = pcb; + } + } + if (inactive != NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_kill_timewait: killing oldest TIME-WAIT PCB %p (%"S32_F")\n", + (void *)inactive, inactivity)); + tcp_abort(inactive); + } +} + + + +struct tcp_pcb * +tcp_alloc(u8_t prio) +{ + struct tcp_pcb *pcb; + u32_t iss; + + pcb = memp_malloc(MEMP_TCP_PCB); + if (pcb == NULL) { + /* Try killing oldest connection in TIME-WAIT. */ + LWIP_DEBUGF(TCP_DEBUG, ("tcp_alloc: killing off oldest TIME-WAIT connection\n")); + tcp_kill_timewait(); + pcb = memp_malloc(MEMP_TCP_PCB); + if (pcb == NULL) { + tcp_kill_prio(prio); + pcb = memp_malloc(MEMP_TCP_PCB); + } + } + if (pcb != NULL) { + memset(pcb, 0, sizeof(struct tcp_pcb)); + pcb->prio = TCP_PRIO_NORMAL; + pcb->snd_buf = TCP_SND_BUF; + pcb->snd_queuelen = 0; + pcb->rcv_wnd = TCP_WND; + pcb->tos = 0; + pcb->ttl = TCP_TTL; + pcb->mss = TCP_MSS; + pcb->rto = 3000 / TCP_SLOW_INTERVAL; + pcb->sa = 0; + pcb->sv = 3000 / TCP_SLOW_INTERVAL; + pcb->rtime = 0; + pcb->cwnd = 1; + iss = tcp_next_iss(); + pcb->snd_wl2 = iss; + pcb->snd_nxt = iss; + pcb->snd_max = iss; + pcb->lastack = iss; + pcb->snd_lbb = iss; + pcb->tmr = tcp_ticks; + + pcb->polltmr = 0; + +#if LWIP_CALLBACK_API + pcb->recv = tcp_recv_null; +#endif /* LWIP_CALLBACK_API */ + + /* Init KEEPALIVE timer */ + pcb->keepalive = TCP_KEEPDEFAULT; + pcb->keep_cnt = 0; + } + return pcb; +} + +/** + * Creates a new TCP protocol control block but doesn't place it on + * any of the TCP PCB lists. + * + * @internal: Maybe there should be a idle TCP PCB list where these + * PCBs are put on. We can then implement port reservation using + * tcp_bind(). Currently, we lack this (BSD socket type of) feature. + */ + +struct tcp_pcb * +tcp_new(void) +{ + return tcp_alloc(TCP_PRIO_NORMAL); +} + +/* + * tcp_arg(): + * + * Used to specify the argument that should be passed callback + * functions. + * + */ + +void +tcp_arg(struct tcp_pcb *pcb, void *arg) +{ + pcb->callback_arg = arg; +} +#if LWIP_CALLBACK_API + +/** + * Used to specify the function that should be called when a TCP + * connection receives data. + * + */ +void +tcp_recv(struct tcp_pcb *pcb, + err_t (* recv)(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err)) +{ + pcb->recv = recv; +} + +/** + * Used to specify the function that should be called when TCP data + * has been successfully delivered to the remote host. + * + */ + +void +tcp_sent(struct tcp_pcb *pcb, + err_t (* sent)(void *arg, struct tcp_pcb *tpcb, u16_t len)) +{ + pcb->sent = sent; +} + +/** + * Used to specify the function that should be called when a fatal error + * has occured on the connection. + * + */ +void +tcp_err(struct tcp_pcb *pcb, + void (* errf)(void *arg, err_t err)) +{ + pcb->errf = errf; +} + +/** + * Used for specifying the function that should be called when a + * LISTENing connection has been connected to another host. + * + */ +void +tcp_accept(struct tcp_pcb *pcb, + err_t (* accept)(void *arg, struct tcp_pcb *newpcb, err_t err)) +{ + ((struct tcp_pcb_listen *)pcb)->accept = accept; +} +#endif /* LWIP_CALLBACK_API */ + + +/** + * Used to specify the function that should be called periodically + * from TCP. The interval is specified in terms of the TCP coarse + * timer interval, which is called twice a second. + * + */ +void +tcp_poll(struct tcp_pcb *pcb, + err_t (* poll)(void *arg, struct tcp_pcb *tpcb), u8_t interval) +{ +#if LWIP_CALLBACK_API + pcb->poll = poll; +#endif /* LWIP_CALLBACK_API */ + pcb->pollinterval = interval; +} + +/** + * Purges a TCP PCB. Removes any buffered data and frees the buffer memory. + * + */ +void +tcp_pcb_purge(struct tcp_pcb *pcb) +{ + if (pcb->state != CLOSED && + pcb->state != TIME_WAIT && + pcb->state != LISTEN) { + + LWIP_DEBUGF(TCP_DEBUG, ("tcp_pcb_purge\n")); + + if (pcb->unsent != NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_pcb_purge: not all data sent\n")); + } + if (pcb->unacked != NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_pcb_purge: data left on ->unacked\n")); + } +#if TCP_QUEUE_OOSEQ /* LW */ + if (pcb->ooseq != NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_pcb_purge: data left on ->ooseq\n")); + } + + tcp_segs_free(pcb->ooseq); + pcb->ooseq = NULL; +#endif /* TCP_QUEUE_OOSEQ */ + tcp_segs_free(pcb->unsent); + tcp_segs_free(pcb->unacked); + pcb->unacked = pcb->unsent = NULL; + } +} + +/** + * Purges the PCB and removes it from a PCB list. Any delayed ACKs are sent first. + * + */ +void +tcp_pcb_remove(struct tcp_pcb **pcblist, struct tcp_pcb *pcb) +{ + TCP_RMV(pcblist, pcb); + + tcp_pcb_purge(pcb); + + /* if there is an outstanding delayed ACKs, send it */ + if (pcb->state != TIME_WAIT && + pcb->state != LISTEN && + pcb->flags & TF_ACK_DELAY) { + pcb->flags |= TF_ACK_NOW; + tcp_output(pcb); + } + pcb->state = CLOSED; + + LWIP_ASSERT("tcp_pcb_remove: tcp_pcbs_sane()", tcp_pcbs_sane()); +} + +/** + * Calculates a new initial sequence number for new connections. + * + */ +u32_t +tcp_next_iss(void) +{ + static u32_t iss = 6510; + + iss += tcp_ticks; /* XXX */ + return iss; +} + +#if TCP_DEBUG || TCP_INPUT_DEBUG || TCP_OUTPUT_DEBUG +void +tcp_debug_print(struct tcp_hdr *tcphdr) +{ + LWIP_DEBUGF(TCP_DEBUG, ("TCP header:\n")); + LWIP_DEBUGF(TCP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(TCP_DEBUG, ("| %5"U16_F" | %5"U16_F" | (src port, dest port)\n", + ntohs(tcphdr->src), ntohs(tcphdr->dest))); + LWIP_DEBUGF(TCP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(TCP_DEBUG, ("| %010"U32_F" | (seq no)\n", + ntohl(tcphdr->seqno))); + LWIP_DEBUGF(TCP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(TCP_DEBUG, ("| %010"U32_F" | (ack no)\n", + ntohl(tcphdr->ackno))); + LWIP_DEBUGF(TCP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(TCP_DEBUG, ("| %2"U16_F" | |%"U16_F"%"U16_F"%"U16_F"%"U16_F"%"U16_F"%"U16_F"| %5"U16_F" | (hdrlen, flags (", + TCPH_HDRLEN(tcphdr), + TCPH_FLAGS(tcphdr) >> 5 & 1, + TCPH_FLAGS(tcphdr) >> 4 & 1, + TCPH_FLAGS(tcphdr) >> 3 & 1, + TCPH_FLAGS(tcphdr) >> 2 & 1, + TCPH_FLAGS(tcphdr) >> 1 & 1, + TCPH_FLAGS(tcphdr) & 1, + ntohs(tcphdr->wnd))); + tcp_debug_print_flags(TCPH_FLAGS(tcphdr)); + LWIP_DEBUGF(TCP_DEBUG, ("), win)\n")); + LWIP_DEBUGF(TCP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(TCP_DEBUG, ("| 0x%04"X16_F" | %5"U16_F" | (chksum, urgp)\n", + ntohs(tcphdr->chksum), ntohs(tcphdr->urgp))); + LWIP_DEBUGF(TCP_DEBUG, ("+-------------------------------+\n")); +} + +void +tcp_debug_print_state(enum tcp_state s) +{ + LWIP_DEBUGF(TCP_DEBUG, ("State: ")); + switch (s) { + case CLOSED: + LWIP_DEBUGF(TCP_DEBUG, ("CLOSED\n")); + break; + case LISTEN: + LWIP_DEBUGF(TCP_DEBUG, ("LISTEN\n")); + break; + case SYN_SENT: + LWIP_DEBUGF(TCP_DEBUG, ("SYN_SENT\n")); + break; + case SYN_RCVD: + LWIP_DEBUGF(TCP_DEBUG, ("SYN_RCVD\n")); + break; + case ESTABLISHED: + LWIP_DEBUGF(TCP_DEBUG, ("ESTABLISHED\n")); + break; + case FIN_WAIT_1: + LWIP_DEBUGF(TCP_DEBUG, ("FIN_WAIT_1\n")); + break; + case FIN_WAIT_2: + LWIP_DEBUGF(TCP_DEBUG, ("FIN_WAIT_2\n")); + break; + case CLOSE_WAIT: + LWIP_DEBUGF(TCP_DEBUG, ("CLOSE_WAIT\n")); + break; + case CLOSING: + LWIP_DEBUGF(TCP_DEBUG, ("CLOSING\n")); + break; + case LAST_ACK: + LWIP_DEBUGF(TCP_DEBUG, ("LAST_ACK\n")); + break; + case TIME_WAIT: + LWIP_DEBUGF(TCP_DEBUG, ("TIME_WAIT\n")); + break; + } +} + +void +tcp_debug_print_flags(u8_t flags) +{ + if (flags & TCP_FIN) { + LWIP_DEBUGF(TCP_DEBUG, ("FIN ")); + } + if (flags & TCP_SYN) { + LWIP_DEBUGF(TCP_DEBUG, ("SYN ")); + } + if (flags & TCP_RST) { + LWIP_DEBUGF(TCP_DEBUG, ("RST ")); + } + if (flags & TCP_PSH) { + LWIP_DEBUGF(TCP_DEBUG, ("PSH ")); + } + if (flags & TCP_ACK) { + LWIP_DEBUGF(TCP_DEBUG, ("ACK ")); + } + if (flags & TCP_URG) { + LWIP_DEBUGF(TCP_DEBUG, ("URG ")); + } + if (flags & TCP_ECE) { + LWIP_DEBUGF(TCP_DEBUG, ("ECE ")); + } + if (flags & TCP_CWR) { + LWIP_DEBUGF(TCP_DEBUG, ("CWR ")); + } +} + +void +tcp_debug_print_pcbs(void) +{ + struct tcp_pcb *pcb; + LWIP_DEBUGF(TCP_DEBUG, ("Active PCB states:\n")); + for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { + LWIP_DEBUGF(TCP_DEBUG, ("Local port %"U16_F", foreign port %"U16_F" snd_nxt %"U32_F" rcv_nxt %"U32_F" ", + pcb->local_port, pcb->remote_port, + pcb->snd_nxt, pcb->rcv_nxt)); + tcp_debug_print_state(pcb->state); + } + LWIP_DEBUGF(TCP_DEBUG, ("Listen PCB states:\n")); + for(pcb = (struct tcp_pcb *)tcp_listen_pcbs.pcbs; pcb != NULL; pcb = pcb->next) { + LWIP_DEBUGF(TCP_DEBUG, ("Local port %"U16_F", foreign port %"U16_F" snd_nxt %"U32_F" rcv_nxt %"U32_F" ", + pcb->local_port, pcb->remote_port, + pcb->snd_nxt, pcb->rcv_nxt)); + tcp_debug_print_state(pcb->state); + } + LWIP_DEBUGF(TCP_DEBUG, ("TIME-WAIT PCB states:\n")); + for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) { + LWIP_DEBUGF(TCP_DEBUG, ("Local port %"U16_F", foreign port %"U16_F" snd_nxt %"U32_F" rcv_nxt %"U32_F" ", + pcb->local_port, pcb->remote_port, + pcb->snd_nxt, pcb->rcv_nxt)); + tcp_debug_print_state(pcb->state); + } +} + +s16_t +tcp_pcbs_sane(void) +{ + struct tcp_pcb *pcb; + for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { + LWIP_ASSERT("tcp_pcbs_sane: active pcb->state != CLOSED", pcb->state != CLOSED); + LWIP_ASSERT("tcp_pcbs_sane: active pcb->state != LISTEN", pcb->state != LISTEN); + LWIP_ASSERT("tcp_pcbs_sane: active pcb->state != TIME-WAIT", pcb->state != TIME_WAIT); + } + for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) { + LWIP_ASSERT("tcp_pcbs_sane: tw pcb->state == TIME-WAIT", pcb->state == TIME_WAIT); + } + return 1; +} +#endif /* TCP_DEBUG */ +#endif /* LWIP_TCP */ + + + + + + + + + + diff --git a/wii/libogc/lwip/core/tcp_in.c b/wii/libogc/lwip/core/tcp_in.c new file mode 100644 index 0000000000..212f9c4db6 --- /dev/null +++ b/wii/libogc/lwip/core/tcp_in.c @@ -0,0 +1,1199 @@ +/** + * @file + * + * Transmission Control Protocol, incoming traffic + * + * The input processing functions of TCP. + * + * These functions are generally called in the order (ip_input() ->) tcp_input() -> + * tcp_process() -> tcp_receive() (-> application). + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/def.h" +#include "lwip/opt.h" + +#include "lwip/ip_addr.h" +#include "lwip/netif.h" +#include "lwip/mem.h" +#include "lwip/memp.h" + +#include "lwip/inet.h" +#include "lwip/tcp.h" + +#include "lwip/stats.h" + +#include "arch/perf.h" +#if LWIP_TCP +/* These variables are global to all functions involved in the input + processing of TCP segments. They are set by the tcp_input() + function. */ +static struct tcp_seg inseg; +static struct tcp_hdr *tcphdr; +static struct ip_hdr *iphdr; +static u32_t seqno, ackno; +static u8_t flags; +static u16_t tcplen; + +static u8_t recv_flags; +static struct pbuf *recv_data; + +struct tcp_pcb *tcp_input_pcb; + +/* Forward declarations. */ +static err_t tcp_process(struct tcp_pcb *pcb); +static void tcp_receive(struct tcp_pcb *pcb); +static void tcp_parseopt(struct tcp_pcb *pcb); + +static err_t tcp_listen_input(struct tcp_pcb_listen *pcb); +static err_t tcp_timewait_input(struct tcp_pcb *pcb); + + +/* tcp_input: + * + * The initial input processing of TCP. It verifies the TCP header, demultiplexes + * the segment between the PCBs and passes it on to tcp_process(), which implements + * the TCP finite state machine. This function is called by the IP layer (in + * ip_input()). + */ + +void +tcp_input(struct pbuf *p, struct netif *inp) +{ + struct tcp_pcb *pcb, *prev; + struct tcp_pcb_listen *lpcb; + u8_t hdrlen; + err_t err; + + PERF_START; + + TCP_STATS_INC(tcp.recv); + + iphdr = p->payload; + tcphdr = (struct tcp_hdr *)((u8_t *)p->payload + IPH_HL(iphdr) * 4); + +#if TCP_INPUT_DEBUG + tcp_debug_print(tcphdr); +#endif + + /* remove header from payload */ + if (pbuf_header(p, -((s16_t)(IPH_HL(iphdr) * 4))) || (p->tot_len < sizeof(struct tcp_hdr))) { + /* drop short packets */ + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: short packet (%"U16_F" bytes) discarded\n", p->tot_len)); + TCP_STATS_INC(tcp.lenerr); + TCP_STATS_INC(tcp.drop); + pbuf_free(p); + return; + } + + /* Don't even process incoming broadcasts/multicasts. */ + if (ip_addr_isbroadcast(&(iphdr->dest), inp) || + ip_addr_ismulticast(&(iphdr->dest))) { + pbuf_free(p); + return; + } + +#if CHECKSUM_CHECK_TCP + /* Verify TCP checksum. */ + if (inet_chksum_pseudo(p, (struct ip_addr *)&(iphdr->src), + (struct ip_addr *)&(iphdr->dest), + IP_PROTO_TCP, p->tot_len) != 0) { + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: packet discarded due to failing checksum 0x%04"X16_F"\n", + inet_chksum_pseudo(p, (struct ip_addr *)&(iphdr->src), (struct ip_addr *)&(iphdr->dest), + IP_PROTO_TCP, p->tot_len))); +#if TCP_DEBUG + tcp_debug_print(tcphdr); +#endif /* TCP_DEBUG */ + TCP_STATS_INC(tcp.chkerr); + TCP_STATS_INC(tcp.drop); + + pbuf_free(p); + return; + } +#endif + + /* Move the payload pointer in the pbuf so that it points to the + TCP data instead of the TCP header. */ + hdrlen = TCPH_HDRLEN(tcphdr); + pbuf_header(p, -(hdrlen * 4)); + + /* Convert fields in TCP header to host byte order. */ + tcphdr->src = ntohs(tcphdr->src); + tcphdr->dest = ntohs(tcphdr->dest); + seqno = tcphdr->seqno = ntohl(tcphdr->seqno); + ackno = tcphdr->ackno = ntohl(tcphdr->ackno); + tcphdr->wnd = ntohs(tcphdr->wnd); + + flags = TCPH_FLAGS(tcphdr) & TCP_FLAGS; + tcplen = p->tot_len + ((flags & TCP_FIN || flags & TCP_SYN)? 1: 0); + + /* Demultiplex an incoming segment. First, we check if it is destined + for an active connection. */ + prev = NULL; + + + for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { + LWIP_ASSERT("tcp_input: active pcb->state != CLOSED", pcb->state != CLOSED); + LWIP_ASSERT("tcp_input: active pcb->state != TIME-WAIT", pcb->state != TIME_WAIT); + LWIP_ASSERT("tcp_input: active pcb->state != LISTEN", pcb->state != LISTEN); + if (pcb->remote_port == tcphdr->src && + pcb->local_port == tcphdr->dest && + ip_addr_cmp(&(pcb->remote_ip), &(iphdr->src)) && + ip_addr_cmp(&(pcb->local_ip), &(iphdr->dest))) { + + /* Move this PCB to the front of the list so that subsequent + lookups will be faster (we exploit locality in TCP segment + arrivals). */ + LWIP_ASSERT("tcp_input: pcb->next != pcb (before cache)", pcb->next != pcb); + if (prev != NULL) { + prev->next = pcb->next; + pcb->next = tcp_active_pcbs; + tcp_active_pcbs = pcb; + } + LWIP_ASSERT("tcp_input: pcb->next != pcb (after cache)", pcb->next != pcb); + break; + } + prev = pcb; + } + + if (pcb == NULL) { + /* If it did not go to an active connection, we check the connections + in the TIME-WAIT state. */ + + for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) { + LWIP_ASSERT("tcp_input: TIME-WAIT pcb->state == TIME-WAIT", pcb->state == TIME_WAIT); + if (pcb->remote_port == tcphdr->src && + pcb->local_port == tcphdr->dest && + ip_addr_cmp(&(pcb->remote_ip), &(iphdr->src)) && + ip_addr_cmp(&(pcb->local_ip), &(iphdr->dest))) { + /* We don't really care enough to move this PCB to the front + of the list since we are not very likely to receive that + many segments for connections in TIME-WAIT. */ + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: packed for TIME_WAITing connection.\n")); + tcp_timewait_input(pcb); + pbuf_free(p); + return; + } + } + + /* Finally, if we still did not get a match, we check all PCBs that + are LISTENing for incoming connections. */ + prev = NULL; + for(lpcb = tcp_listen_pcbs.listen_pcbs; lpcb != NULL; lpcb = lpcb->next) { + if ((ip_addr_isany(&(lpcb->local_ip)) || + ip_addr_cmp(&(lpcb->local_ip), &(iphdr->dest))) && + lpcb->local_port == tcphdr->dest) { + /* Move this PCB to the front of the list so that subsequent + lookups will be faster (we exploit locality in TCP segment + arrivals). */ + if (prev != NULL) { + ((struct tcp_pcb_listen *)prev)->next = lpcb->next; + /* our successor is the remainder of the listening list */ + lpcb->next = tcp_listen_pcbs.listen_pcbs; + /* put this listening pcb at the head of the listening list */ + tcp_listen_pcbs.listen_pcbs = lpcb; + } + + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: packed for LISTENing connection.\n")); + tcp_listen_input(lpcb); + pbuf_free(p); + return; + } + prev = (struct tcp_pcb *)lpcb; + } + } + +#if TCP_INPUT_DEBUG + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("+-+-+-+-+-+-+-+-+-+-+-+-+-+- tcp_input: flags ")); + tcp_debug_print_flags(TCPH_FLAGS(tcphdr)); + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n")); +#endif /* TCP_INPUT_DEBUG */ + + + if (pcb != NULL) { + /* The incoming segment belongs to a connection. */ +#if TCP_INPUT_DEBUG +#if TCP_DEBUG + tcp_debug_print_state(pcb->state); +#endif /* TCP_DEBUG */ +#endif /* TCP_INPUT_DEBUG */ + + /* Set up a tcp_seg structure. */ + inseg.next = NULL; + inseg.len = p->tot_len; + inseg.dataptr = p->payload; + inseg.p = p; + inseg.tcphdr = tcphdr; + + recv_data = NULL; + recv_flags = 0; + + tcp_input_pcb = pcb; + err = tcp_process(pcb); + tcp_input_pcb = NULL; + /* A return value of ERR_ABRT means that tcp_abort() was called + and that the pcb has been freed. If so, we don't do anything. */ + if (err != ERR_ABRT) { + if (recv_flags & TF_RESET) { + /* TF_RESET means that the connection was reset by the other + end. We then call the error callback to inform the + application that the connection is dead before we + deallocate the PCB. */ + TCP_EVENT_ERR(pcb->errf, pcb->callback_arg, ERR_RST); + tcp_pcb_remove(&tcp_active_pcbs, pcb); + memp_free(MEMP_TCP_PCB, pcb); + } else if (recv_flags & TF_CLOSED) { + /* The connection has been closed and we will deallocate the + PCB. */ + tcp_pcb_remove(&tcp_active_pcbs, pcb); + memp_free(MEMP_TCP_PCB, pcb); + } else { + err = ERR_OK; + /* If the application has registered a "sent" function to be + called when new send buffer space is available, we call it + now. */ + if (pcb->acked > 0) { + TCP_EVENT_SENT(pcb, pcb->acked, err); + } + + if (recv_data != NULL) { + /* Notify application that data has been received. */ + TCP_EVENT_RECV(pcb, recv_data, ERR_OK, err); + } + + /* If a FIN segment was received, we call the callback + function with a NULL buffer to indicate EOF. */ + if (recv_flags & TF_GOT_FIN) { + TCP_EVENT_RECV(pcb, NULL, ERR_OK, err); + } + /* If there were no errors, we try to send something out. */ + if (err == ERR_OK) { + tcp_output(pcb); + } + } + } + + + /* We deallocate the incoming pbuf. If it was buffered by the + application, the application should have called pbuf_ref() to + increase the reference counter in the pbuf. If so, the buffer + isn't actually deallocated by the call to pbuf_free(), only the + reference count is decreased. */ + if (inseg.p != NULL) pbuf_free(inseg.p); +#if TCP_INPUT_DEBUG +#if TCP_DEBUG + tcp_debug_print_state(pcb->state); +#endif /* TCP_DEBUG */ +#endif /* TCP_INPUT_DEBUG */ + + } else { + + /* If no matching PCB was found, send a TCP RST (reset) to the + sender. */ + LWIP_DEBUGF(TCP_RST_DEBUG, ("tcp_input: no PCB match found, resetting.\n")); + if (!(TCPH_FLAGS(tcphdr) & TCP_RST)) { + TCP_STATS_INC(tcp.proterr); + TCP_STATS_INC(tcp.drop); + tcp_rst(ackno, seqno + tcplen, + &(iphdr->dest), &(iphdr->src), + tcphdr->dest, tcphdr->src); + } + pbuf_free(p); + } + + LWIP_ASSERT("tcp_input: tcp_pcbs_sane()", tcp_pcbs_sane()); + PERF_STOP("tcp_input"); +} + +/* tcp_listen_input(): + * + * Called by tcp_input() when a segment arrives for a listening + * connection. + */ + +static err_t +tcp_listen_input(struct tcp_pcb_listen *pcb) +{ + struct tcp_pcb *npcb; + u32_t optdata; + + /* In the LISTEN state, we check for incoming SYN segments, + creates a new PCB, and responds with a SYN|ACK. */ + if (flags & TCP_ACK) { + /* For incoming segments with the ACK flag set, respond with a + RST. */ + LWIP_DEBUGF(TCP_RST_DEBUG, ("tcp_listen_input: ACK in LISTEN, sending reset\n")); + tcp_rst(ackno + 1, seqno + tcplen, + &(iphdr->dest), &(iphdr->src), + tcphdr->dest, tcphdr->src); + } else if (flags & TCP_SYN) { + LWIP_DEBUGF(TCP_DEBUG, ("TCP connection request %"U16_F" -> %"U16_F".\n", tcphdr->src, tcphdr->dest)); + npcb = tcp_alloc(pcb->prio); + /* If a new PCB could not be created (probably due to lack of memory), + we don't do anything, but rely on the sender will retransmit the + SYN at a time when we have more memory available. */ + if (npcb == NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_listen_input: could not allocate PCB\n")); + TCP_STATS_INC(tcp.memerr); + return ERR_MEM; + } + /* Set up the new PCB. */ + ip_addr_set(&(npcb->local_ip), &(iphdr->dest)); + npcb->local_port = pcb->local_port; + ip_addr_set(&(npcb->remote_ip), &(iphdr->src)); + npcb->remote_port = tcphdr->src; + npcb->state = SYN_RCVD; + npcb->rcv_nxt = seqno + 1; + npcb->snd_wnd = tcphdr->wnd; + npcb->ssthresh = npcb->snd_wnd; + npcb->snd_wl1 = seqno - 1;/* initialise to seqno-1 to force window update */ + npcb->callback_arg = pcb->callback_arg; +#if LWIP_CALLBACK_API + npcb->accept = pcb->accept; +#endif /* LWIP_CALLBACK_API */ + /* inherit socket options */ + npcb->so_options = pcb->so_options & (SOF_DEBUG|SOF_DONTROUTE|SOF_KEEPALIVE|SOF_OOBINLINE|SOF_LINGER); + /* Register the new PCB so that we can begin receiving segments + for it. */ + TCP_REG(&tcp_active_pcbs, npcb); + + /* Parse any options in the SYN. */ + tcp_parseopt(npcb); + + /* Build an MSS option. */ + optdata = htonl(((u32_t)2 << 24) | + ((u32_t)4 << 16) | + (((u32_t)npcb->mss / 256) << 8) | + (npcb->mss & 255)); + /* Send a SYN|ACK together with the MSS option. */ + tcp_enqueue(npcb, NULL, 0, TCP_SYN | TCP_ACK, 0, (u8_t *)&optdata, 4); + return tcp_output(npcb); + } + return ERR_OK; +} + +/* tcp_timewait_input(): + * + * Called by tcp_input() when a segment arrives for a connection in + * TIME_WAIT. + */ + +static err_t +tcp_timewait_input(struct tcp_pcb *pcb) +{ + if (TCP_SEQ_GT(seqno + tcplen, pcb->rcv_nxt)) { + pcb->rcv_nxt = seqno + tcplen; + } + if (tcplen > 0) { + tcp_ack_now(pcb); + } + return tcp_output(pcb); +} + +/* tcp_process + * + * Implements the TCP state machine. Called by tcp_input. In some + * states tcp_receive() is called to receive data. The tcp_seg + * argument will be freed by the caller (tcp_input()) unless the + * recv_data pointer in the pcb is set. + */ + +static err_t +tcp_process(struct tcp_pcb *pcb) +{ + struct tcp_seg *rseg; + u8_t acceptable = 0; + err_t err; + + + err = ERR_OK; + + /* Process incoming RST segments. */ + if (flags & TCP_RST) { + /* First, determine if the reset is acceptable. */ + if (pcb->state == SYN_SENT) { + if (ackno == pcb->snd_nxt) { + acceptable = 1; + } + } else { + /*if (TCP_SEQ_GEQ(seqno, pcb->rcv_nxt) && + TCP_SEQ_LEQ(seqno, pcb->rcv_nxt + pcb->rcv_wnd)) { + */ + if (TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, pcb->rcv_nxt+pcb->rcv_wnd)) { + acceptable = 1; + } + } + + if (acceptable) { + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_process: Connection RESET\n")); + LWIP_ASSERT("tcp_input: pcb->state != CLOSED", pcb->state != CLOSED); + recv_flags = TF_RESET; + pcb->flags &= ~TF_ACK_DELAY; + return ERR_RST; + } else { + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_process: unacceptable reset seqno %"U32_F" rcv_nxt %"U32_F"\n", + seqno, pcb->rcv_nxt)); + LWIP_DEBUGF(TCP_DEBUG, ("tcp_process: unacceptable reset seqno %"U32_F" rcv_nxt %"U32_F"\n", + seqno, pcb->rcv_nxt)); + return ERR_OK; + } + } + + /* Update the PCB (in)activity timer. */ + pcb->tmr = tcp_ticks; + pcb->keep_cnt = 0; + + /* Do different things depending on the TCP state. */ + switch (pcb->state) { + case SYN_SENT: + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("SYN-SENT: ackno %"U32_F" pcb->snd_nxt %"U32_F" unacked %"U32_F"\n", ackno, + pcb->snd_nxt, ntohl(pcb->unacked->tcphdr->seqno))); + /* received SYN ACK with expected sequence number? */ + if ((flags & TCP_ACK) && (flags & TCP_SYN) + && ackno == ntohl(pcb->unacked->tcphdr->seqno) + 1) { + pcb->snd_buf++; + pcb->rcv_nxt = seqno + 1; + pcb->lastack = ackno; + pcb->snd_wnd = tcphdr->wnd; + pcb->snd_wl1 = seqno - 1; /* initialise to seqno - 1 to force window update */ + pcb->state = ESTABLISHED; + pcb->cwnd = pcb->mss; + --pcb->snd_queuelen; + LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_process: SYN-SENT --queuelen %"U16_F"\n", (u16_t)pcb->snd_queuelen)); + rseg = pcb->unacked; + pcb->unacked = rseg->next; + tcp_seg_free(rseg); + + /* Parse any options in the SYNACK. */ + tcp_parseopt(pcb); + + /* Call the user specified function to call when sucessfully + * connected. */ + TCP_EVENT_CONNECTED(pcb, ERR_OK, err); + tcp_ack(pcb); + } + /* received ACK? possibly a half-open connection */ + else if (flags & TCP_ACK) { + /* send a RST to bring the other side in a non-synchronized state. */ + tcp_rst(ackno, seqno + tcplen, &(iphdr->dest), &(iphdr->src), + tcphdr->dest, tcphdr->src); + } + break; + case SYN_RCVD: + if (flags & TCP_ACK && + !(flags & TCP_RST)) { + /* expected ACK number? */ + if (TCP_SEQ_BETWEEN(ackno, pcb->lastack+1, pcb->snd_nxt)) { + pcb->state = ESTABLISHED; + LWIP_DEBUGF(TCP_DEBUG, ("TCP connection established %"U16_F" -> %"U16_F".\n", inseg.tcphdr->src, inseg.tcphdr->dest)); +#if LWIP_CALLBACK_API + LWIP_ASSERT("pcb->accept != NULL", pcb->accept != NULL); +#endif + /* Call the accept function. */ + TCP_EVENT_ACCEPT(pcb, ERR_OK, err); + if (err != ERR_OK) { + /* If the accept function returns with an error, we abort + * the connection. */ + tcp_abort(pcb); + return ERR_ABRT; + } + /* If there was any data contained within this ACK, + * we'd better pass it on to the application as well. */ + tcp_receive(pcb); + pcb->cwnd = pcb->mss; + } + /* incorrect ACK number */ + else { + /* send RST */ + tcp_rst(ackno, seqno + tcplen, &(iphdr->dest), &(iphdr->src), + tcphdr->dest, tcphdr->src); + } + } + break; + case CLOSE_WAIT: + /* FALLTHROUGH */ + case ESTABLISHED: + tcp_receive(pcb); + if (flags & TCP_FIN) { + tcp_ack_now(pcb); + pcb->state = CLOSE_WAIT; + } + break; + case FIN_WAIT_1: + tcp_receive(pcb); + if (flags & TCP_FIN) { + if (flags & TCP_ACK && ackno == pcb->snd_nxt) { + LWIP_DEBUGF(TCP_DEBUG, + ("TCP connection closed %"U16_F" -> %"U16_F".\n", inseg.tcphdr->src, inseg.tcphdr->dest)); + tcp_ack_now(pcb); + tcp_pcb_purge(pcb); + TCP_RMV(&tcp_active_pcbs, pcb); + pcb->state = TIME_WAIT; + TCP_REG(&tcp_tw_pcbs, pcb); + } else { + tcp_ack_now(pcb); + pcb->state = CLOSING; + } + } else if (flags & TCP_ACK && ackno == pcb->snd_nxt) { + pcb->state = FIN_WAIT_2; + } + break; + case FIN_WAIT_2: + tcp_receive(pcb); + if (flags & TCP_FIN) { + LWIP_DEBUGF(TCP_DEBUG, ("TCP connection closed %"U16_F" -> %"U16_F".\n", inseg.tcphdr->src, inseg.tcphdr->dest)); + tcp_ack_now(pcb); + tcp_pcb_purge(pcb); + TCP_RMV(&tcp_active_pcbs, pcb); + pcb->state = TIME_WAIT; + TCP_REG(&tcp_tw_pcbs, pcb); + } + break; + case CLOSING: + tcp_receive(pcb); + if (flags & TCP_ACK && ackno == pcb->snd_nxt) { + LWIP_DEBUGF(TCP_DEBUG, ("TCP connection closed %"U16_F" -> %"U16_F".\n", inseg.tcphdr->src, inseg.tcphdr->dest)); + tcp_ack_now(pcb); + tcp_pcb_purge(pcb); + TCP_RMV(&tcp_active_pcbs, pcb); + pcb->state = TIME_WAIT; + TCP_REG(&tcp_tw_pcbs, pcb); + } + break; + case LAST_ACK: + tcp_receive(pcb); + if (flags & TCP_ACK && ackno == pcb->snd_nxt) { + LWIP_DEBUGF(TCP_DEBUG, ("TCP connection closed %"U16_F" -> %"U16_F".\n", inseg.tcphdr->src, inseg.tcphdr->dest)); + pcb->state = CLOSED; + recv_flags = TF_CLOSED; + } + break; + default: + break; + } + return ERR_OK; +} + +/* tcp_receive: + * + * Called by tcp_process. Checks if the given segment is an ACK for outstanding + * data, and if so frees the memory of the buffered data. Next, is places the + * segment on any of the receive queues (pcb->recved or pcb->ooseq). If the segment + * is buffered, the pbuf is referenced by pbuf_ref so that it will not be freed until + * i it has been removed from the buffer. + * + * If the incoming segment constitutes an ACK for a segment that was used for RTT + * estimation, the RTT is estimated here as well. + */ + +static void +tcp_receive(struct tcp_pcb *pcb) +{ + struct tcp_seg *next; +#if TCP_QUEUE_OOSEQ + struct tcp_seg *prev, *cseg; +#endif + struct pbuf *p; + s32_t off; + s16_t m; + u32_t right_wnd_edge; + u16_t new_tot_len; + + + if (flags & TCP_ACK) { + right_wnd_edge = pcb->snd_wnd + pcb->snd_wl1; + + /* Update window. */ + if (TCP_SEQ_LT(pcb->snd_wl1, seqno) || + (pcb->snd_wl1 == seqno && TCP_SEQ_LT(pcb->snd_wl2, ackno)) || + (pcb->snd_wl2 == ackno && tcphdr->wnd > pcb->snd_wnd)) { + pcb->snd_wnd = tcphdr->wnd; + pcb->snd_wl1 = seqno; + pcb->snd_wl2 = ackno; + LWIP_DEBUGF(TCP_WND_DEBUG, ("tcp_receive: window update %"U32_F"\n", pcb->snd_wnd)); +#if TCP_WND_DEBUG + } else { + if (pcb->snd_wnd != tcphdr->wnd) { + LWIP_DEBUGF(TCP_WND_DEBUG, ("tcp_receive: no window update lastack %"U32_F" snd_max %"U32_F" ackno %"U32_F" wl1 %"U32_F" seqno %"U32_F" wl2 %"U32_F"\n", + pcb->lastack, pcb->snd_max, ackno, pcb->snd_wl1, seqno, pcb->snd_wl2)); + } +#endif /* TCP_WND_DEBUG */ + } + + + if (pcb->lastack == ackno) { + pcb->acked = 0; + + if (pcb->snd_wl1 + pcb->snd_wnd == right_wnd_edge){ + ++pcb->dupacks; + if (pcb->dupacks >= 3 && pcb->unacked != NULL) { + if (!(pcb->flags & TF_INFR)) { + /* This is fast retransmit. Retransmit the first unacked segment. */ + LWIP_DEBUGF(TCP_FR_DEBUG, ("tcp_receive: dupacks %"U16_F" (%"U32_F"), fast retransmit %"U32_F"\n", + (u16_t)pcb->dupacks, pcb->lastack, + ntohl(pcb->unacked->tcphdr->seqno))); + tcp_rexmit(pcb); + /* Set ssthresh to max (FlightSize / 2, 2*SMSS) */ + /*pcb->ssthresh = LWIP_MAX((pcb->snd_max - + pcb->lastack) / 2, + 2 * pcb->mss);*/ + /* Set ssthresh to half of the minimum of the currenct cwnd and the advertised window */ + if(pcb->cwnd > pcb->snd_wnd) + pcb->ssthresh = pcb->snd_wnd / 2; + else + pcb->ssthresh = pcb->cwnd / 2; + + pcb->cwnd = pcb->ssthresh + 3 * pcb->mss; + pcb->flags |= TF_INFR; + } else { + /* Inflate the congestion window, but not if it means that + the value overflows. */ + if ((u16_t)(pcb->cwnd + pcb->mss) > pcb->cwnd) { + pcb->cwnd += pcb->mss; + } + } + } + } else { + LWIP_DEBUGF(TCP_FR_DEBUG, ("tcp_receive: dupack averted %"U32_F" %"U32_F"\n", + pcb->snd_wl1 + pcb->snd_wnd, right_wnd_edge)); + } + } else + /*if (TCP_SEQ_LT(pcb->lastack, ackno) && + TCP_SEQ_LEQ(ackno, pcb->snd_max)) { */ + if(TCP_SEQ_BETWEEN(ackno, pcb->lastack+1, pcb->snd_max)){ + /* We come here when the ACK acknowledges new data. */ + + /* Reset the "IN Fast Retransmit" flag, since we are no longer + in fast retransmit. Also reset the congestion window to the + slow start threshold. */ + if (pcb->flags & TF_INFR) { + pcb->flags &= ~TF_INFR; + pcb->cwnd = pcb->ssthresh; + } + + /* Reset the number of retransmissions. */ + pcb->nrtx = 0; + + /* Reset the retransmission time-out. */ + pcb->rto = (pcb->sa >> 3) + pcb->sv; + + /* Update the send buffer space. */ + pcb->acked = ackno - pcb->lastack; + + pcb->snd_buf += pcb->acked; + + /* Reset the fast retransmit variables. */ + pcb->dupacks = 0; + pcb->lastack = ackno; + + /* Update the congestion control variables (cwnd and + ssthresh). */ + if (pcb->state >= ESTABLISHED) { + if (pcb->cwnd < pcb->ssthresh) { + if ((u16_t)(pcb->cwnd + pcb->mss) > pcb->cwnd) { + pcb->cwnd += pcb->mss; + } + LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_receive: slow start cwnd %"U16_F"\n", pcb->cwnd)); + } else { + u16_t new_cwnd = (pcb->cwnd + pcb->mss * pcb->mss / pcb->cwnd); + if (new_cwnd > pcb->cwnd) { + pcb->cwnd = new_cwnd; + } + LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_receive: congestion avoidance cwnd %"U16_F"\n", pcb->cwnd)); + } + } + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: ACK for %"U32_F", unacked->seqno %"U32_F":%"U32_F"\n", + ackno, + pcb->unacked != NULL? + ntohl(pcb->unacked->tcphdr->seqno): 0, + pcb->unacked != NULL? + ntohl(pcb->unacked->tcphdr->seqno) + TCP_TCPLEN(pcb->unacked): 0)); + + /* Remove segment from the unacknowledged list if the incoming + ACK acknowlegdes them. */ + while (pcb->unacked != NULL && + TCP_SEQ_LEQ(ntohl(pcb->unacked->tcphdr->seqno) + + TCP_TCPLEN(pcb->unacked), ackno)) { + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: removing %"U32_F":%"U32_F" from pcb->unacked\n", + ntohl(pcb->unacked->tcphdr->seqno), + ntohl(pcb->unacked->tcphdr->seqno) + + TCP_TCPLEN(pcb->unacked))); + + next = pcb->unacked; + pcb->unacked = pcb->unacked->next; + + LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_receive: queuelen %"U16_F" ... ", (u16_t)pcb->snd_queuelen)); + pcb->snd_queuelen -= pbuf_clen(next->p); + tcp_seg_free(next); + + LWIP_DEBUGF(TCP_QLEN_DEBUG, ("%"U16_F" (after freeing unacked)\n", (u16_t)pcb->snd_queuelen)); + if (pcb->snd_queuelen != 0) { + LWIP_ASSERT("tcp_receive: valid queue length", pcb->unacked != NULL || + pcb->unsent != NULL); + } + } + pcb->polltmr = 0; + } + + /* We go through the ->unsent list to see if any of the segments + on the list are acknowledged by the ACK. This may seem + strange since an "unsent" segment shouldn't be acked. The + rationale is that lwIP puts all outstanding segments on the + ->unsent list after a retransmission, so these segments may + in fact have been sent once. */ + while (pcb->unsent != NULL && + /*TCP_SEQ_LEQ(ntohl(pcb->unsent->tcphdr->seqno) + TCP_TCPLEN(pcb->unsent), ackno) && + TCP_SEQ_LEQ(ackno, pcb->snd_max)*/ + TCP_SEQ_BETWEEN(ackno, ntohl(pcb->unsent->tcphdr->seqno) + TCP_TCPLEN(pcb->unsent), pcb->snd_max) + ) { + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: removing %"U32_F":%"U32_F" from pcb->unsent\n", + ntohl(pcb->unsent->tcphdr->seqno), ntohl(pcb->unsent->tcphdr->seqno) + + TCP_TCPLEN(pcb->unsent))); + + next = pcb->unsent; + pcb->unsent = pcb->unsent->next; + LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_receive: queuelen %"U16_F" ... ", (u16_t)pcb->snd_queuelen)); + pcb->snd_queuelen -= pbuf_clen(next->p); + tcp_seg_free(next); + LWIP_DEBUGF(TCP_QLEN_DEBUG, ("%"U16_F" (after freeing unsent)\n", (u16_t)pcb->snd_queuelen)); + if (pcb->snd_queuelen != 0) { + LWIP_ASSERT("tcp_receive: valid queue length", + pcb->unacked != NULL || pcb->unsent != NULL); + } + + if (pcb->unsent != NULL) { + pcb->snd_nxt = htonl(pcb->unsent->tcphdr->seqno); + } + } + /* End of ACK for new data processing. */ + + LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_receive: pcb->rttest %"U32_F" rtseq %"U32_F" ackno %"U32_F"\n", + pcb->rttest, pcb->rtseq, ackno)); + + /* RTT estimation calculations. This is done by checking if the + incoming segment acknowledges the segment we use to take a + round-trip time measurement. */ + if (pcb->rttest && TCP_SEQ_LT(pcb->rtseq, ackno)) { + m = tcp_ticks - pcb->rttest; + + LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_receive: experienced rtt %"U16_F" ticks (%"U16_F" msec).\n", + m, m * TCP_SLOW_INTERVAL)); + + /* This is taken directly from VJs original code in his paper */ + m = m - (pcb->sa >> 3); + pcb->sa += m; + if (m < 0) { + m = -m; + } + m = m - (pcb->sv >> 2); + pcb->sv += m; + pcb->rto = (pcb->sa >> 3) + pcb->sv; + + LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_receive: RTO %"U16_F" (%"U16_F" miliseconds)\n", + pcb->rto, pcb->rto * TCP_SLOW_INTERVAL)); + + pcb->rttest = 0; + } + } + + /* If the incoming segment contains data, we must process it + further. */ + if (tcplen > 0) { + /* This code basically does three things: + + +) If the incoming segment contains data that is the next + in-sequence data, this data is passed to the application. This + might involve trimming the first edge of the data. The rcv_nxt + variable and the advertised window are adjusted. + + +) If the incoming segment has data that is above the next + sequence number expected (->rcv_nxt), the segment is placed on + the ->ooseq queue. This is done by finding the appropriate + place in the ->ooseq queue (which is ordered by sequence + number) and trim the segment in both ends if needed. An + immediate ACK is sent to indicate that we received an + out-of-sequence segment. + + +) Finally, we check if the first segment on the ->ooseq queue + now is in sequence (i.e., if rcv_nxt >= ooseq->seqno). If + rcv_nxt > ooseq->seqno, we must trim the first edge of the + segment on ->ooseq before we adjust rcv_nxt. The data in the + segments that are now on sequence are chained onto the + incoming segment so that we only need to call the application + once. + */ + + /* First, we check if we must trim the first edge. We have to do + this if the sequence number of the incoming segment is less + than rcv_nxt, and the sequence number plus the length of the + segment is larger than rcv_nxt. */ + /* if (TCP_SEQ_LT(seqno, pcb->rcv_nxt)){ + if (TCP_SEQ_LT(pcb->rcv_nxt, seqno + tcplen)) {*/ + if(TCP_SEQ_BETWEEN(pcb->rcv_nxt, seqno+1, seqno+tcplen-1)){ + /* Trimming the first edge is done by pushing the payload + pointer in the pbuf downwards. This is somewhat tricky since + we do not want to discard the full contents of the pbuf up to + the new starting point of the data since we have to keep the + TCP header which is present in the first pbuf in the chain. + + What is done is really quite a nasty hack: the first pbuf in + the pbuf chain is pointed to by inseg.p. Since we need to be + able to deallocate the whole pbuf, we cannot change this + inseg.p pointer to point to any of the later pbufs in the + chain. Instead, we point the ->payload pointer in the first + pbuf to data in one of the later pbufs. We also set the + inseg.data pointer to point to the right place. This way, the + ->p pointer will still point to the first pbuf, but the + ->p->payload pointer will point to data in another pbuf. + + After we are done with adjusting the pbuf pointers we must + adjust the ->data pointer in the seg and the segment + length.*/ + + off = pcb->rcv_nxt - seqno; + p = inseg.p; + if (inseg.p->len < off) { + new_tot_len = inseg.p->tot_len - off; + while (p->len < off) { + off -= p->len; + /* KJM following line changed (with addition of new_tot_len var) + to fix bug #9076 + inseg.p->tot_len -= p->len; */ + p->tot_len = new_tot_len; + p->len = 0; + p = p->next; + } + pbuf_header(p, -off); + } else { + pbuf_header(inseg.p, -off); + } + /* KJM following line changed to use p->payload rather than inseg->p->payload + to fix bug #9076 */ + inseg.dataptr = p->payload; + inseg.len -= pcb->rcv_nxt - seqno; + inseg.tcphdr->seqno = seqno = pcb->rcv_nxt; + } + else{ + if(TCP_SEQ_LT(seqno, pcb->rcv_nxt)){ + /* the whole segment is < rcv_nxt */ + /* must be a duplicate of a packet that has already been correctly handled */ + + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: duplicate seqno %"U32_F"\n", seqno)); + tcp_ack_now(pcb); + } + } + + /* The sequence number must be within the window (above rcv_nxt + and below rcv_nxt + rcv_wnd) in order to be further + processed. */ + /*if (TCP_SEQ_GEQ(seqno, pcb->rcv_nxt) && + TCP_SEQ_LT(seqno, pcb->rcv_nxt + pcb->rcv_wnd)) {*/ + if(TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, pcb->rcv_nxt + pcb->rcv_wnd - 1)){ + if (pcb->rcv_nxt == seqno) { + /* The incoming segment is the next in sequence. We check if + we have to trim the end of the segment and update rcv_nxt + and pass the data to the application. */ +#if TCP_QUEUE_OOSEQ + if (pcb->ooseq != NULL && + TCP_SEQ_LEQ(pcb->ooseq->tcphdr->seqno, seqno + inseg.len)) { + /* We have to trim the second edge of the incoming + segment. */ + inseg.len = pcb->ooseq->tcphdr->seqno - seqno; + pbuf_realloc(inseg.p, inseg.len); + } +#endif /* TCP_QUEUE_OOSEQ */ + + tcplen = TCP_TCPLEN(&inseg); + + /* First received FIN will be ACKed +1, on any successive (duplicate) + * FINs we are already in CLOSE_WAIT and have already done +1. + */ + if (pcb->state != CLOSE_WAIT) { + pcb->rcv_nxt += tcplen; + } + + /* Update the receiver's (our) window. */ + if (pcb->rcv_wnd < tcplen) { + pcb->rcv_wnd = 0; + } else { + pcb->rcv_wnd -= tcplen; + } + + /* If there is data in the segment, we make preparations to + pass this up to the application. The ->recv_data variable + is used for holding the pbuf that goes to the + application. The code for reassembling out-of-sequence data + chains its data on this pbuf as well. + + If the segment was a FIN, we set the TF_GOT_FIN flag that will + be used to indicate to the application that the remote side has + closed its end of the connection. */ + if (inseg.p->tot_len > 0) { + recv_data = inseg.p; + /* Since this pbuf now is the responsibility of the + application, we delete our reference to it so that we won't + (mistakingly) deallocate it. */ + inseg.p = NULL; + } + if (TCPH_FLAGS(inseg.tcphdr) & TCP_FIN) { + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: received FIN.\n")); + recv_flags = TF_GOT_FIN; + } + +#if TCP_QUEUE_OOSEQ + /* We now check if we have segments on the ->ooseq queue that + is now in sequence. */ + while (pcb->ooseq != NULL && + pcb->ooseq->tcphdr->seqno == pcb->rcv_nxt) { + + cseg = pcb->ooseq; + seqno = pcb->ooseq->tcphdr->seqno; + + pcb->rcv_nxt += TCP_TCPLEN(cseg); + if (pcb->rcv_wnd < TCP_TCPLEN(cseg)) { + pcb->rcv_wnd = 0; + } else { + pcb->rcv_wnd -= TCP_TCPLEN(cseg); + } + if (cseg->p->tot_len > 0) { + /* Chain this pbuf onto the pbuf that we will pass to + the application. */ + if (recv_data) { + pbuf_cat(recv_data, cseg->p); + } else { + recv_data = cseg->p; + } + cseg->p = NULL; + } + if (TCPH_FLAGS(cseg->tcphdr) & TCP_FIN) { + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: dequeued FIN.\n")); + recv_flags = TF_GOT_FIN; + } + + + pcb->ooseq = cseg->next; + tcp_seg_free(cseg); + } +#endif /* TCP_QUEUE_OOSEQ */ + + + /* Acknowledge the segment(s). */ + tcp_ack(pcb); + + } else { + /* We get here if the incoming segment is out-of-sequence. */ + tcp_ack_now(pcb); +#if TCP_QUEUE_OOSEQ + /* We queue the segment on the ->ooseq queue. */ + if (pcb->ooseq == NULL) { + pcb->ooseq = tcp_seg_copy(&inseg); + } else { + /* If the queue is not empty, we walk through the queue and + try to find a place where the sequence number of the + incoming segment is between the sequence numbers of the + previous and the next segment on the ->ooseq queue. That is + the place where we put the incoming segment. If needed, we + trim the second edges of the previous and the incoming + segment so that it will fit into the sequence. + + If the incoming segment has the same sequence number as a + segment on the ->ooseq queue, we discard the segment that + contains less data. */ + + prev = NULL; + for(next = pcb->ooseq; next != NULL; next = next->next) { + if (seqno == next->tcphdr->seqno) { + /* The sequence number of the incoming segment is the + same as the sequence number of the segment on + ->ooseq. We check the lengths to see which one to + discard. */ + if (inseg.len > next->len) { + /* The incoming segment is larger than the old + segment. We replace the old segment with the new + one. */ + cseg = tcp_seg_copy(&inseg); + if (cseg != NULL) { + cseg->next = next->next; + if (prev != NULL) { + prev->next = cseg; + } else { + pcb->ooseq = cseg; + } + } + break; + } else { + /* Either the lenghts are the same or the incoming + segment was smaller than the old one; in either + case, we ditch the incoming segment. */ + break; + } + } else { + if (prev == NULL) { + if (TCP_SEQ_LT(seqno, next->tcphdr->seqno)) { + /* The sequence number of the incoming segment is lower + than the sequence number of the first segment on the + queue. We put the incoming segment first on the + queue. */ + + if (TCP_SEQ_GT(seqno + inseg.len, next->tcphdr->seqno)) { + /* We need to trim the incoming segment. */ + inseg.len = next->tcphdr->seqno - seqno; + pbuf_realloc(inseg.p, inseg.len); + } + cseg = tcp_seg_copy(&inseg); + if (cseg != NULL) { + cseg->next = next; + pcb->ooseq = cseg; + } + break; + } + } else + /*if (TCP_SEQ_LT(prev->tcphdr->seqno, seqno) && + TCP_SEQ_LT(seqno, next->tcphdr->seqno)) {*/ + if(TCP_SEQ_BETWEEN(seqno, prev->tcphdr->seqno+1, next->tcphdr->seqno-1)){ + /* The sequence number of the incoming segment is in + between the sequence numbers of the previous and + the next segment on ->ooseq. We trim and insert the + incoming segment and trim the previous segment, if + needed. */ + if (TCP_SEQ_GT(seqno + inseg.len, next->tcphdr->seqno)) { + /* We need to trim the incoming segment. */ + inseg.len = next->tcphdr->seqno - seqno; + pbuf_realloc(inseg.p, inseg.len); + } + + cseg = tcp_seg_copy(&inseg); + if (cseg != NULL) { + cseg->next = next; + prev->next = cseg; + if (TCP_SEQ_GT(prev->tcphdr->seqno + prev->len, seqno)) { + /* We need to trim the prev segment. */ + prev->len = seqno - prev->tcphdr->seqno; + pbuf_realloc(prev->p, prev->len); + } + } + break; + } + /* If the "next" segment is the last segment on the + ooseq queue, we add the incoming segment to the end + of the list. */ + if (next->next == NULL && + TCP_SEQ_GT(seqno, next->tcphdr->seqno)) { + next->next = tcp_seg_copy(&inseg); + if (next->next != NULL) { + if (TCP_SEQ_GT(next->tcphdr->seqno + next->len, seqno)) { + /* We need to trim the last segment. */ + next->len = seqno - next->tcphdr->seqno; + pbuf_realloc(next->p, next->len); + } + } + break; + } + } + prev = next; + } + } +#endif /* TCP_QUEUE_OOSEQ */ + + } + } else { + /*if (TCP_SEQ_GT(pcb->rcv_nxt, seqno) || + TCP_SEQ_GEQ(seqno, pcb->rcv_nxt + pcb->rcv_wnd)) {*/ + if(!TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, pcb->rcv_nxt + pcb->rcv_wnd-1)){ + tcp_ack_now(pcb); + } + } + } else { + /* Segments with length 0 is taken care of here. Segments that + fall out of the window are ACKed. */ + /*if (TCP_SEQ_GT(pcb->rcv_nxt, seqno) || + TCP_SEQ_GEQ(seqno, pcb->rcv_nxt + pcb->rcv_wnd)) {*/ + if(!TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, pcb->rcv_nxt + pcb->rcv_wnd-1)){ + tcp_ack_now(pcb); + } + } +} + +/* + * tcp_parseopt: + * + * Parses the options contained in the incoming segment. (Code taken + * from uIP with only small changes.) + * + */ + +static void +tcp_parseopt(struct tcp_pcb *pcb) +{ + u8_t c; + u8_t *opts, opt; + u16_t mss; + + opts = (u8_t *)tcphdr + TCP_HLEN; + + /* Parse the TCP MSS option, if present. */ + if(TCPH_HDRLEN(tcphdr) > 0x5) { + for(c = 0; c < (TCPH_HDRLEN(tcphdr) - 5) << 2 ;) { + opt = opts[c]; + if (opt == 0x00) { + /* End of options. */ + break; + } else if (opt == 0x01) { + ++c; + /* NOP option. */ + } else if (opt == 0x02 && + opts[c + 1] == 0x04) { + /* An MSS option with the right option length. */ + mss = (opts[c + 2] << 8) | opts[c + 3]; + pcb->mss = mss > TCP_MSS? TCP_MSS: mss; + + /* And we are done processing options. */ + break; + } else { + if (opts[c + 1] == 0) { + /* If the length field is zero, the options are malformed + and we don't process them further. */ + break; + } + /* All other options have a length field, so that we easily + can skip past them. */ + c += opts[c + 1]; + } + } + } +} +#endif /* LWIP_TCP */ + + diff --git a/wii/libogc/lwip/core/tcp_out.c b/wii/libogc/lwip/core/tcp_out.c new file mode 100644 index 0000000000..edfdd8e7b4 --- /dev/null +++ b/wii/libogc/lwip/core/tcp_out.c @@ -0,0 +1,721 @@ +/** + * @file + * + * Transmission Control Protocol, outgoing traffic + * + * The output functions of TCP. + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include + +#include "lwip/def.h" +#include "lwip/opt.h" +#include "lwip/mem.h" +#include "lwip/memp.h" +#include "lwip/sys.h" +#include "lwip/ip_addr.h" +#include "lwip/netif.h" +#include "lwip/inet.h" +#include "lwip/tcp.h" +#include "lwip/stats.h" + +#if LWIP_TCP + +/* Forward declarations.*/ +static void tcp_output_segment(struct tcp_seg *seg, struct tcp_pcb *pcb); + +err_t +tcp_send_ctrl(struct tcp_pcb *pcb, u8_t flags) +{ + /* no data, no length, flags, copy=1, no optdata, no optdatalen */ + return tcp_enqueue(pcb, NULL, 0, flags, 1, NULL, 0); +} + +/** + * Write data for sending (but does not send it immediately). + * + * It waits in the expectation of more data being sent soon (as + * it can send them more efficiently by combining them together). + * To prompt the system to send data now, call tcp_output() after + * calling tcp_write(). + * + * @arg pcb Protocol control block of the TCP connection to enqueue data for. + * + * @see tcp_write() + */ + +err_t +tcp_write(struct tcp_pcb *pcb, const void *arg, u16_t len, u8_t copy) +{ + LWIP_DEBUGF(TCP_OUTPUT_DEBUG, ("tcp_write(pcb=%p, arg=%p, len=%"U16_F", copy=%"U16_F")\n", (void *)pcb, + arg, len, (u16_t)copy)); + /* connection is in valid state for data transmission? */ + if (pcb->state == ESTABLISHED || + pcb->state == CLOSE_WAIT || + pcb->state == SYN_SENT || + pcb->state == SYN_RCVD) { + if (len > 0) { + return tcp_enqueue(pcb, (void *)arg, len, 0, copy, NULL, 0); + } + return ERR_OK; + } else { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | DBG_STATE | 3, ("tcp_write() called in invalid state\n")); + return ERR_CONN; + } +} + +/** + * Enqueue either data or TCP options (but not both) for tranmission + * + * + * + * @arg pcb Protocol control block for the TCP connection to enqueue data for. + * @arg arg Pointer to the data to be enqueued for sending. + * @arg len Data length in bytes + * @arg flags + * @arg copy 1 if data must be copied, 0 if data is non-volatile and can be + * referenced. + * @arg optdata + * @arg optlen + */ +err_t +tcp_enqueue(struct tcp_pcb *pcb, void *arg, u16_t len, + u8_t flags, u8_t copy, + u8_t *optdata, u8_t optlen) +{ + struct pbuf *p; + struct tcp_seg *seg, *useg, *queue; + u32_t left, seqno; + u16_t seglen; + void *ptr; + u16_t queuelen; + + LWIP_DEBUGF(TCP_OUTPUT_DEBUG, ("tcp_enqueue(pcb=%p, arg=%p, len=%"U16_F", flags=%"X16_F", copy=%"U16_F")\n", + (void *)pcb, arg, len, (u16_t)flags, (u16_t)copy)); + LWIP_ASSERT("tcp_enqueue: len == 0 || optlen == 0 (programmer violates API)", + len == 0 || optlen == 0); + LWIP_ASSERT("tcp_enqueue: arg == NULL || optdata == NULL (programmer violates API)", + arg == NULL || optdata == NULL); + /* fail on too much data */ + if (len > pcb->snd_buf) { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 3, ("tcp_enqueue: too much data (len=%"U16_F" > snd_buf=%"U16_F")\n", len, pcb->snd_buf)); + return ERR_MEM; + } + left = len; + ptr = arg; + + /* seqno will be the sequence number of the first segment enqueued + * by the call to this function. */ + seqno = pcb->snd_lbb; + + LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_enqueue: queuelen: %"U16_F"\n", (u16_t)pcb->snd_queuelen)); + + /* If total number of pbufs on the unsent/unacked queues exceeds the + * configured maximum, return an error */ + queuelen = pcb->snd_queuelen; + if (queuelen >= TCP_SND_QUEUELEN) { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 3, ("tcp_enqueue: too long queue %"U16_F" (max %"U16_F")\n", queuelen, TCP_SND_QUEUELEN)); + TCP_STATS_INC(tcp.memerr); + return ERR_MEM; + } + if (queuelen != 0) { + LWIP_ASSERT("tcp_enqueue: pbufs on queue => at least one queue non-empty", + pcb->unacked != NULL || pcb->unsent != NULL); + } else { + LWIP_ASSERT("tcp_enqueue: no pbufs on queue => both queues empty", + pcb->unacked == NULL && pcb->unsent == NULL); + } + + /* First, break up the data into segments and tuck them together in + * the local "queue" variable. */ + useg = queue = seg = NULL; + seglen = 0; + while (queue == NULL || left > 0) { + + /* The segment length should be the MSS if the data to be enqueued + * is larger than the MSS. */ + seglen = left > pcb->mss? pcb->mss: left; + + /* Allocate memory for tcp_seg, and fill in fields. */ + seg = memp_malloc(MEMP_TCP_SEG); + if (seg == NULL) { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 2, ("tcp_enqueue: could not allocate memory for tcp_seg\n")); + goto memerr; + } + seg->next = NULL; + seg->p = NULL; + + /* first segment of to-be-queued data? */ + if (queue == NULL) { + queue = seg; + } + /* subsequent segments of to-be-queued data */ + else { + /* Attach the segment to the end of the queued segments */ + LWIP_ASSERT("useg != NULL", useg != NULL); + useg->next = seg; + } + /* remember last segment of to-be-queued data for next iteration */ + useg = seg; + + /* If copy is set, memory should be allocated + * and data copied into pbuf, otherwise data comes from + * ROM or other static memory, and need not be copied. If + * optdata is != NULL, we have options instead of data. */ + + /* options? */ + if (optdata != NULL) { + if ((seg->p = pbuf_alloc(PBUF_TRANSPORT, optlen, PBUF_RAM)) == NULL) { + goto memerr; + } + ++queuelen; + seg->dataptr = seg->p->payload; + } + /* copy from volatile memory? */ + else if (copy) { + if ((seg->p = pbuf_alloc(PBUF_TRANSPORT, seglen, PBUF_RAM)) == NULL) { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 2, ("tcp_enqueue : could not allocate memory for pbuf copy size %"U16_F"\n", seglen)); + goto memerr; + } + ++queuelen; + if (arg != NULL) { + memcpy(seg->p->payload, ptr, seglen); + } + seg->dataptr = seg->p->payload; + } + /* do not copy data */ + else { + /* First, allocate a pbuf for holding the data. + * since the referenced data is available at least until it is sent out on the + * link (as it has to be ACKed by the remote party) we can safely use PBUF_ROM + * instead of PBUF_REF here. + */ + if ((p = pbuf_alloc(PBUF_TRANSPORT, seglen, PBUF_ROM)) == NULL) { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 2, ("tcp_enqueue: could not allocate memory for zero-copy pbuf\n")); + goto memerr; + } + ++queuelen; + /* reference the non-volatile payload data */ + p->payload = ptr; + seg->dataptr = ptr; + + /* Second, allocate a pbuf for the headers. */ + if ((seg->p = pbuf_alloc(PBUF_TRANSPORT, 0, PBUF_RAM)) == NULL) { + /* If allocation fails, we have to deallocate the data pbuf as + * well. */ + pbuf_free(p); + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 2, ("tcp_enqueue: could not allocate memory for header pbuf\n")); + goto memerr; + } + ++queuelen; + + /* Concatenate the headers and data pbufs together. */ + pbuf_cat(seg->p/*header*/, p/*data*/); + p = NULL; + } + + /* Now that there are more segments queued, we check again if the + length of the queue exceeds the configured maximum. */ + if (queuelen > TCP_SND_QUEUELEN) { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 2, ("tcp_enqueue: queue too long %"U16_F" (%"U16_F")\n", queuelen, TCP_SND_QUEUELEN)); + goto memerr; + } + + seg->len = seglen; + + /* build TCP header */ + if (pbuf_header(seg->p, TCP_HLEN)) { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 2, ("tcp_enqueue: no room for TCP header in pbuf.\n")); + TCP_STATS_INC(tcp.err); + goto memerr; + } + seg->tcphdr = seg->p->payload; + seg->tcphdr->src = htons(pcb->local_port); + seg->tcphdr->dest = htons(pcb->remote_port); + seg->tcphdr->seqno = htonl(seqno); + seg->tcphdr->urgp = 0; + TCPH_FLAGS_SET(seg->tcphdr, flags); + /* don't fill in tcphdr->ackno and tcphdr->wnd until later */ + + /* Copy the options into the header, if they are present. */ + if (optdata == NULL) { + TCPH_HDRLEN_SET(seg->tcphdr, 5); + } + else { + TCPH_HDRLEN_SET(seg->tcphdr, (5 + optlen / 4)); + /* Copy options into data portion of segment. + Options can thus only be sent in non data carrying + segments such as SYN|ACK. */ + memcpy(seg->dataptr, optdata, optlen); + } + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | DBG_TRACE, ("tcp_enqueue: queueing %"U32_F":%"U32_F" (0x%"X16_F")\n", + ntohl(seg->tcphdr->seqno), + ntohl(seg->tcphdr->seqno) + TCP_TCPLEN(seg), + (u16_t)flags)); + + left -= seglen; + seqno += seglen; + ptr = (void *)((u8_t *)ptr + seglen); + } + + /* Now that the data to be enqueued has been broken up into TCP + segments in the queue variable, we add them to the end of the + pcb->unsent queue. */ + if (pcb->unsent == NULL) { + useg = NULL; + } + else { + for (useg = pcb->unsent; useg->next != NULL; useg = useg->next); + } + /* { useg is last segment on the unsent queue, NULL if list is empty } */ + + /* If there is room in the last pbuf on the unsent queue, + chain the first pbuf on the queue together with that. */ + if (useg != NULL && + TCP_TCPLEN(useg) != 0 && + !(TCPH_FLAGS(useg->tcphdr) & (TCP_SYN | TCP_FIN)) && + !(flags & (TCP_SYN | TCP_FIN)) && + /* fit within max seg size */ + useg->len + queue->len <= pcb->mss) { + /* Remove TCP header from first segment of our to-be-queued list */ + pbuf_header(queue->p, -TCP_HLEN); + pbuf_cat(useg->p, queue->p); + useg->len += queue->len; + useg->next = queue->next; + + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | DBG_TRACE | DBG_STATE, ("tcp_enqueue: chaining segments, new len %"U16_F"\n", useg->len)); + if (seg == queue) { + seg = NULL; + } + memp_free(MEMP_TCP_SEG, queue); + } + else { + /* empty list */ + if (useg == NULL) { + /* initialize list with this segment */ + pcb->unsent = queue; + } + /* enqueue segment */ + else { + useg->next = queue; + } + } + if ((flags & TCP_SYN) || (flags & TCP_FIN)) { + ++len; + } + pcb->snd_lbb += len; + + pcb->snd_buf -= len; + + /* update number of segments on the queues */ + pcb->snd_queuelen = queuelen; + LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_enqueue: %"S16_F" (after enqueued)\n", pcb->snd_queuelen)); + if (pcb->snd_queuelen != 0) { + LWIP_ASSERT("tcp_enqueue: valid queue length", + pcb->unacked != NULL || pcb->unsent != NULL); + } + + /* Set the PSH flag in the last segment that we enqueued, but only + if the segment has data (indicated by seglen > 0). */ + if (seg != NULL && seglen > 0 && seg->tcphdr != NULL) { + TCPH_SET_FLAG(seg->tcphdr, TCP_PSH); + } + + return ERR_OK; +memerr: + TCP_STATS_INC(tcp.memerr); + + if (queue != NULL) { + tcp_segs_free(queue); + } + if (pcb->snd_queuelen != 0) { + LWIP_ASSERT("tcp_enqueue: valid queue length", pcb->unacked != NULL || + pcb->unsent != NULL); + } + LWIP_DEBUGF(TCP_QLEN_DEBUG | DBG_STATE, ("tcp_enqueue: %"S16_F" (with mem err)\n", pcb->snd_queuelen)); + return ERR_MEM; +} + +/* find out what we can send and send it */ +err_t +tcp_output(struct tcp_pcb *pcb) +{ + struct pbuf *p; + struct tcp_hdr *tcphdr; + struct tcp_seg *seg, *useg; + u32_t wnd; +#if TCP_CWND_DEBUG + s16_t i = 0; +#endif /* TCP_CWND_DEBUG */ + + /* First, check if we are invoked by the TCP input processing + code. If so, we do not output anything. Instead, we rely on the + input processing code to call us when input processing is done + with. */ + if (tcp_input_pcb == pcb) { + return ERR_OK; + } + + wnd = LWIP_MIN(pcb->snd_wnd, pcb->cwnd); + + seg = pcb->unsent; + + /* useg should point to last segment on unacked queue */ + useg = pcb->unacked; + if (useg != NULL) { + for (; useg->next != NULL; useg = useg->next); + } + + /* If the TF_ACK_NOW flag is set and no data will be sent (either + * because the ->unsent queue is empty or because the window does + * not allow it), construct an empty ACK segment and send it. + * + * If data is to be sent, we will just piggyback the ACK (see below). + */ + if (pcb->flags & TF_ACK_NOW && + (seg == NULL || + ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len > wnd)) { + p = pbuf_alloc(PBUF_IP, TCP_HLEN, PBUF_RAM); + if (p == NULL) { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG, ("tcp_output: (ACK) could not allocate pbuf\n")); + return ERR_BUF; + } + LWIP_DEBUGF(TCP_OUTPUT_DEBUG, ("tcp_output: sending ACK for %"U32_F"\n", pcb->rcv_nxt)); + /* remove ACK flags from the PCB, as we send an empty ACK now */ + pcb->flags &= ~(TF_ACK_DELAY | TF_ACK_NOW); + + tcphdr = p->payload; + tcphdr->src = htons(pcb->local_port); + tcphdr->dest = htons(pcb->remote_port); + tcphdr->seqno = htonl(pcb->snd_nxt); + tcphdr->ackno = htonl(pcb->rcv_nxt); + TCPH_FLAGS_SET(tcphdr, TCP_ACK); + tcphdr->wnd = htons(pcb->rcv_wnd); + tcphdr->urgp = 0; + TCPH_HDRLEN_SET(tcphdr, 5); + + tcphdr->chksum = 0; +#if CHECKSUM_GEN_TCP + tcphdr->chksum = inet_chksum_pseudo(p, &(pcb->local_ip), &(pcb->remote_ip), + IP_PROTO_TCP, p->tot_len); +#endif + ip_output(p, &(pcb->local_ip), &(pcb->remote_ip), pcb->ttl, pcb->tos, + IP_PROTO_TCP); + pbuf_free(p); + + return ERR_OK; + } + +#if TCP_OUTPUT_DEBUG + if (seg == NULL) { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG, ("tcp_output: nothing to send (%p)\n", (void*)pcb->unsent)); + } +#endif /* TCP_OUTPUT_DEBUG */ +#if TCP_CWND_DEBUG + if (seg == NULL) { + LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_output: snd_wnd %"U32_F", cwnd %"U16_F", wnd %"U32_F", seg == NULL, ack %"U32_F"\n", + pcb->snd_wnd, pcb->cwnd, wnd, + pcb->lastack)); + } else { + LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_output: snd_wnd %"U32_F", cwnd %"U16_F", wnd %"U32_F", effwnd %"U32_F", seq %"U32_F", ack %"U32_F"\n", + pcb->snd_wnd, pcb->cwnd, wnd, + ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len, + ntohl(seg->tcphdr->seqno), pcb->lastack)); + } +#endif /* TCP_CWND_DEBUG */ + /* data available and window allows it to be sent? */ + while (seg != NULL && + ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len <= wnd) { +#if TCP_CWND_DEBUG + LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_output: snd_wnd %"U32_F", cwnd %"U16_F", wnd %"U32_F", effwnd %"U32_F", seq %"U32_F", ack %"U32_F", i %"S16_F"\n", + pcb->snd_wnd, pcb->cwnd, wnd, + ntohl(seg->tcphdr->seqno) + seg->len - + pcb->lastack, + ntohl(seg->tcphdr->seqno), pcb->lastack, i)); + ++i; +#endif /* TCP_CWND_DEBUG */ + + pcb->unsent = seg->next; + + if (pcb->state != SYN_SENT) { + TCPH_SET_FLAG(seg->tcphdr, TCP_ACK); + pcb->flags &= ~(TF_ACK_DELAY | TF_ACK_NOW); + } + + tcp_output_segment(seg, pcb); + pcb->snd_nxt = ntohl(seg->tcphdr->seqno) + TCP_TCPLEN(seg); + if (TCP_SEQ_LT(pcb->snd_max, pcb->snd_nxt)) { + pcb->snd_max = pcb->snd_nxt; + } + /* put segment on unacknowledged list if length > 0 */ + if (TCP_TCPLEN(seg) > 0) { + seg->next = NULL; + /* unacked list is empty? */ + if (pcb->unacked == NULL) { + pcb->unacked = seg; + useg = seg; + /* unacked list is not empty? */ + } else { + /* In the case of fast retransmit, the packet should not go to the tail + * of the unacked queue, but rather at the head. We need to check for + * this case. -STJ Jul 27, 2004 */ + if (TCP_SEQ_LT(ntohl(seg->tcphdr->seqno), ntohl(useg->tcphdr->seqno))){ + /* add segment to head of unacked list */ + seg->next = pcb->unacked; + pcb->unacked = seg; + } else { + /* add segment to tail of unacked list */ + useg->next = seg; + useg = useg->next; + } + } + /* do not queue empty segments on the unacked list */ + } else { + tcp_seg_free(seg); + } + seg = pcb->unsent; + } + return ERR_OK; +} + +/** + * Actually send a TCP segment over IP + */ +static void +tcp_output_segment(struct tcp_seg *seg, struct tcp_pcb *pcb) +{ + u16_t len; + struct netif *netif; + + /* The TCP header has already been constructed, but the ackno and + wnd fields remain. */ + seg->tcphdr->ackno = htonl(pcb->rcv_nxt); + + /* silly window avoidance */ + if (pcb->rcv_wnd < pcb->mss) { + seg->tcphdr->wnd = 0; + } else { + /* advertise our receive window size in this TCP segment */ + seg->tcphdr->wnd = htons(pcb->rcv_wnd); + } + + /* If we don't have a local IP address, we get one by + calling ip_route(). */ + if (ip_addr_isany(&(pcb->local_ip))) { + netif = ip_route(&(pcb->remote_ip)); + if (netif == NULL) { + return; + } + ip_addr_set(&(pcb->local_ip), &(netif->ip_addr)); + } + + pcb->rtime = 0; + + if (pcb->rttest == 0) { + pcb->rttest = tcp_ticks; + pcb->rtseq = ntohl(seg->tcphdr->seqno); + + LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_output_segment: rtseq %"U32_F"\n", pcb->rtseq)); + } + LWIP_DEBUGF(TCP_OUTPUT_DEBUG, ("tcp_output_segment: %"U32_F":%"U32_F"\n", + htonl(seg->tcphdr->seqno), htonl(seg->tcphdr->seqno) + + seg->len)); + + len = (u16_t)((u8_t *)seg->tcphdr - (u8_t *)seg->p->payload); + + seg->p->len -= len; + seg->p->tot_len -= len; + + seg->p->payload = seg->tcphdr; + + seg->tcphdr->chksum = 0; +#if CHECKSUM_GEN_TCP + seg->tcphdr->chksum = inet_chksum_pseudo(seg->p, + &(pcb->local_ip), + &(pcb->remote_ip), + IP_PROTO_TCP, seg->p->tot_len); +#endif + TCP_STATS_INC(tcp.xmit); + + ip_output(seg->p, &(pcb->local_ip), &(pcb->remote_ip), pcb->ttl, pcb->tos, + IP_PROTO_TCP); +} + +void +tcp_rst(u32_t seqno, u32_t ackno, + struct ip_addr *local_ip, struct ip_addr *remote_ip, + u16_t local_port, u16_t remote_port) +{ + struct pbuf *p; + struct tcp_hdr *tcphdr; + p = pbuf_alloc(PBUF_IP, TCP_HLEN, PBUF_RAM); + if (p == NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_rst: could not allocate memory for pbuf\n")); + return; + } + + tcphdr = p->payload; + tcphdr->src = htons(local_port); + tcphdr->dest = htons(remote_port); + tcphdr->seqno = htonl(seqno); + tcphdr->ackno = htonl(ackno); + TCPH_FLAGS_SET(tcphdr, TCP_RST | TCP_ACK); + tcphdr->wnd = htons(TCP_WND); + tcphdr->urgp = 0; + TCPH_HDRLEN_SET(tcphdr, 5); + + tcphdr->chksum = 0; +#if CHECKSUM_GEN_TCP + tcphdr->chksum = inet_chksum_pseudo(p, local_ip, remote_ip, + IP_PROTO_TCP, p->tot_len); +#endif + TCP_STATS_INC(tcp.xmit); + /* Send output with hardcoded TTL since we have no access to the pcb */ + ip_output(p, local_ip, remote_ip, TCP_TTL, 0, IP_PROTO_TCP); + pbuf_free(p); + LWIP_DEBUGF(TCP_RST_DEBUG, ("tcp_rst: seqno %"U32_F" ackno %"U32_F".\n", seqno, ackno)); +} + +/* requeue all unacked segments for retransmission */ +void +tcp_rexmit_rto(struct tcp_pcb *pcb) +{ + struct tcp_seg *seg; + + if (pcb->unacked == NULL) { + return; + } + + /* Move all unacked segments to the head of the unsent queue */ + for (seg = pcb->unacked; seg->next != NULL; seg = seg->next); + /* concatenate unsent queue after unacked queue */ + seg->next = pcb->unsent; + /* unsent queue is the concatenated queue (of unacked, unsent) */ + pcb->unsent = pcb->unacked; + /* unacked queue is now empty */ + pcb->unacked = NULL; + + pcb->snd_nxt = ntohl(pcb->unsent->tcphdr->seqno); + /* increment number of retransmissions */ + ++pcb->nrtx; + + /* Don't take any RTT measurements after retransmitting. */ + pcb->rttest = 0; + + /* Do the actual retransmission */ + tcp_output(pcb); +} + +void +tcp_rexmit(struct tcp_pcb *pcb) +{ + struct tcp_seg *seg; + + if (pcb->unacked == NULL) { + return; + } + + /* Move the first unacked segment to the unsent queue */ + seg = pcb->unacked->next; + pcb->unacked->next = pcb->unsent; + pcb->unsent = pcb->unacked; + pcb->unacked = seg; + + pcb->snd_nxt = ntohl(pcb->unsent->tcphdr->seqno); + + ++pcb->nrtx; + + /* Don't take any rtt measurements after retransmitting. */ + pcb->rttest = 0; + + /* Do the actual retransmission. */ + tcp_output(pcb); + +} + + +void +tcp_keepalive(struct tcp_pcb *pcb) +{ + struct pbuf *p; + struct tcp_hdr *tcphdr; + + LWIP_DEBUGF(TCP_DEBUG, ("tcp_keepalive: sending KEEPALIVE probe to %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", + ip4_addr1(&pcb->remote_ip), ip4_addr2(&pcb->remote_ip), + ip4_addr3(&pcb->remote_ip), ip4_addr4(&pcb->remote_ip))); + + LWIP_DEBUGF(TCP_DEBUG, ("tcp_keepalive: tcp_ticks %"U32_F" pcb->tmr %"U32_F" pcb->keep_cnt %"U16_F"\n", tcp_ticks, pcb->tmr, pcb->keep_cnt)); + + p = pbuf_alloc(PBUF_IP, TCP_HLEN, PBUF_RAM); + + if(p == NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_keepalive: could not allocate memory for pbuf\n")); + return; + } + + tcphdr = p->payload; + tcphdr->src = htons(pcb->local_port); + tcphdr->dest = htons(pcb->remote_port); + tcphdr->seqno = htonl(pcb->snd_nxt - 1); + tcphdr->ackno = htonl(pcb->rcv_nxt); + tcphdr->wnd = htons(pcb->rcv_wnd); + tcphdr->urgp = 0; + TCPH_HDRLEN_SET(tcphdr, 5); + + tcphdr->chksum = 0; +#if CHECKSUM_GEN_TCP + tcphdr->chksum = inet_chksum_pseudo(p, &pcb->local_ip, &pcb->remote_ip, IP_PROTO_TCP, p->tot_len); +#endif + TCP_STATS_INC(tcp.xmit); + + /* Send output to IP */ + ip_output(p, &pcb->local_ip, &pcb->remote_ip, pcb->ttl, 0, IP_PROTO_TCP); + + pbuf_free(p); + + LWIP_DEBUGF(TCP_RST_DEBUG, ("tcp_keepalive: seqno %"U32_F" ackno %"U32_F".\n", pcb->snd_nxt - 1, pcb->rcv_nxt)); +} + +#endif /* LWIP_TCP */ + + + + + + + + + diff --git a/wii/libogc/lwip/core/udp.c b/wii/libogc/lwip/core/udp.c new file mode 100644 index 0000000000..d1e0eacacd --- /dev/null +++ b/wii/libogc/lwip/core/udp.c @@ -0,0 +1,655 @@ +/** + * @file + * User Datagram Protocol module + * + */ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + + +/* udp.c + * + * The code for the User Datagram Protocol UDP. + * + */ + +#include + +#include "lwip/opt.h" + +#include "lwip/def.h" +#include "lwip/memp.h" +#include "lwip/inet.h" +#include "lwip/ip_addr.h" +#include "lwip/netif.h" +#include "lwip/udp.h" +#include "lwip/icmp.h" + +#include "lwip/stats.h" + +#include "arch/perf.h" +#include "lwip/snmp.h" + +/* The list of UDP PCBs */ +#if LWIP_UDP +/* was static, but we may want to access this from a socket layer */ +struct udp_pcb *udp_pcbs = NULL; + +static struct udp_pcb *pcb_cache = NULL; + +void +udp_init(void) +{ + udp_pcbs = pcb_cache = NULL; +} + +/** + * Process an incoming UDP datagram. + * + * Given an incoming UDP datagram (as a chain of pbufs) this function + * finds a corresponding UDP PCB and + * + * @param pbuf pbuf to be demultiplexed to a UDP PCB. + * @param netif network interface on which the datagram was received. + * + */ +void +udp_input(struct pbuf *p, struct netif *inp) +{ + struct udp_hdr *udphdr; + struct udp_pcb *pcb; + struct udp_pcb *uncon_pcb; + struct ip_hdr *iphdr; + u16_t src, dest; + u8_t local_match; + + PERF_START; + + UDP_STATS_INC(udp.recv); + + iphdr = p->payload; + + if (pbuf_header(p, -((s16_t)(UDP_HLEN + IPH_HL(iphdr) * 4)))) { + /* drop short packets */ + LWIP_DEBUGF(UDP_DEBUG, ("udp_input: short UDP datagram (%"U16_F" bytes) discarded\n", p->tot_len)); + UDP_STATS_INC(udp.lenerr); + UDP_STATS_INC(udp.drop); + snmp_inc_udpinerrors(); + pbuf_free(p); + goto end; + } + + udphdr = (struct udp_hdr *)((u8_t *)p->payload - UDP_HLEN); + + LWIP_DEBUGF(UDP_DEBUG, ("udp_input: received datagram of length %"U16_F"\n", p->tot_len)); + + src = ntohs(udphdr->src); + dest = ntohs(udphdr->dest); + + udp_debug_print(udphdr); + + /* print the UDP source and destination */ + LWIP_DEBUGF(UDP_DEBUG, ("udp (%"U16_F".%"U16_F".%"U16_F".%"U16_F", %"U16_F") <-- (%"U16_F".%"U16_F".%"U16_F".%"U16_F", %"U16_F")\n", + ip4_addr1(&iphdr->dest), ip4_addr2(&iphdr->dest), + ip4_addr3(&iphdr->dest), ip4_addr4(&iphdr->dest), ntohs(udphdr->dest), + ip4_addr1(&iphdr->src), ip4_addr2(&iphdr->src), + ip4_addr3(&iphdr->src), ip4_addr4(&iphdr->src), ntohs(udphdr->src))); + + local_match = 0; + uncon_pcb = NULL; + /* Iterate through the UDP pcb list for a matching pcb */ + for (pcb = udp_pcbs; pcb != NULL; pcb = pcb->next) { + /* print the PCB local and remote address */ + LWIP_DEBUGF(UDP_DEBUG, ("pcb (%"U16_F".%"U16_F".%"U16_F".%"U16_F", %"U16_F") --- (%"U16_F".%"U16_F".%"U16_F".%"U16_F", %"U16_F")\n", + ip4_addr1(&pcb->local_ip), ip4_addr2(&pcb->local_ip), + ip4_addr3(&pcb->local_ip), ip4_addr4(&pcb->local_ip), pcb->local_port, + ip4_addr1(&pcb->remote_ip), ip4_addr2(&pcb->remote_ip), + ip4_addr3(&pcb->remote_ip), ip4_addr4(&pcb->remote_ip), pcb->remote_port)); + + /* compare PCB local addr+port to UDP destination addr+port */ + if ((pcb->local_port == dest) && + (ip_addr_isany(&pcb->local_ip) || + ip_addr_cmp(&(pcb->local_ip), &(iphdr->dest)))) { + local_match = 1; + if ((uncon_pcb == NULL) && + ((pcb->flags & UDP_FLAGS_CONNECTED) == 0)) { + /* the first unconnected matching PCB */ + uncon_pcb = pcb; + } + } + /* compare PCB remote addr+port to UDP source addr+port */ + if ((local_match != 0) && + (pcb->remote_port == src) && + (ip_addr_isany(&pcb->remote_ip) || + ip_addr_cmp(&(pcb->remote_ip), &(iphdr->src)))) { + /* the first fully matching PCB */ + break; + } + } + /* no fully matching pcb found? then look for an unconnected pcb */ + if (pcb == NULL) { + pcb = uncon_pcb; + } + + /* Check checksum if this is a match or if it was directed at us. */ + if (pcb != NULL || ip_addr_cmp(&inp->ip_addr, &iphdr->dest)) + { + LWIP_DEBUGF(UDP_DEBUG | DBG_TRACE, ("udp_input: calculating checksum\n")); + pbuf_header(p, UDP_HLEN); +#ifdef IPv6 + if (iphdr->nexthdr == IP_PROTO_UDPLITE) { +#else + if (IPH_PROTO(iphdr) == IP_PROTO_UDPLITE) { +#endif /* IPv4 */ + /* Do the UDP Lite checksum */ +#if CHECKSUM_CHECK_UDP + if (inet_chksum_pseudo(p, (struct ip_addr *)&(iphdr->src), + (struct ip_addr *)&(iphdr->dest), + IP_PROTO_UDPLITE, ntohs(udphdr->len)) != 0) { + LWIP_DEBUGF(UDP_DEBUG | 2, ("udp_input: UDP Lite datagram discarded due to failing checksum\n")); + UDP_STATS_INC(udp.chkerr); + UDP_STATS_INC(udp.drop); + snmp_inc_udpinerrors(); + pbuf_free(p); + goto end; + } +#endif + } else { +#if CHECKSUM_CHECK_UDP + if (udphdr->chksum != 0) { + if (inet_chksum_pseudo(p, (struct ip_addr *)&(iphdr->src), + (struct ip_addr *)&(iphdr->dest), + IP_PROTO_UDP, p->tot_len) != 0) { + LWIP_DEBUGF(UDP_DEBUG | 2, ("udp_input: UDP datagram discarded due to failing checksum\n")); + + UDP_STATS_INC(udp.chkerr); + UDP_STATS_INC(udp.drop); + snmp_inc_udpinerrors(); + pbuf_free(p); + goto end; + } + } +#endif + } + pbuf_header(p, -UDP_HLEN); + if (pcb != NULL) { + snmp_inc_udpindatagrams(); + /* callback */ + if (pcb->recv != NULL) + { + pcb->recv(pcb->recv_arg, pcb, p, &(iphdr->src), src); + } + } else { + LWIP_DEBUGF(UDP_DEBUG | DBG_TRACE, ("udp_input: not for us.\n")); + + /* No match was found, send ICMP destination port unreachable unless + destination address was broadcast/multicast. */ + + if (!ip_addr_isbroadcast(&iphdr->dest, inp) && + !ip_addr_ismulticast(&iphdr->dest)) { + + /* adjust pbuf pointer */ + p->payload = iphdr; + icmp_dest_unreach(p, ICMP_DUR_PORT); + } + UDP_STATS_INC(udp.proterr); + UDP_STATS_INC(udp.drop); + snmp_inc_udpnoports(); + pbuf_free(p); + } + } else { + pbuf_free(p); + } + end: + + PERF_STOP("udp_input"); +} + +/** + * Send data to a specified address using UDP. + * + * @param pcb UDP PCB used to send the data. + * @param pbuf chain of pbuf's to be sent. + * @param dst_ip Destination IP address. + * @param dst_port Destination UDP port. + * + * If the PCB already has a remote address association, it will + * be restored after the data is sent. + * + * @return lwIP error code. + * - ERR_OK. Successful. No error occured. + * - ERR_MEM. Out of memory. + * - ERR_RTE. Could not find route to destination address. + * + * @see udp_disconnect() udp_send() + */ +err_t +udp_sendto(struct udp_pcb *pcb, struct pbuf *p, + struct ip_addr *dst_ip, u16_t dst_port) +{ + err_t err; + /* temporary space for current PCB remote address */ + struct ip_addr pcb_remote_ip; + u16_t pcb_remote_port; + /* remember current remote peer address of PCB */ + pcb_remote_ip.addr = pcb->remote_ip.addr; + pcb_remote_port = pcb->remote_port; + /* copy packet destination address to PCB remote peer address */ + pcb->remote_ip.addr = dst_ip->addr; + pcb->remote_port = dst_port; + /* send to the packet destination address */ + err = udp_send(pcb, p); + /* restore PCB remote peer address */ + pcb->remote_ip.addr = pcb_remote_ip.addr; + pcb->remote_port = pcb_remote_port; + return err; +} + +/** + * Send data using UDP. + * + * @param pcb UDP PCB used to send the data. + * @param pbuf chain of pbuf's to be sent. + * + * @return lwIP error code. + * - ERR_OK. Successful. No error occured. + * - ERR_MEM. Out of memory. + * - ERR_RTE. Could not find route to destination address. + * + * @see udp_disconnect() udp_sendto() + */ +err_t +udp_send(struct udp_pcb *pcb, struct pbuf *p) +{ + struct udp_hdr *udphdr; + struct netif *netif; + struct ip_addr *src_ip; + err_t err; + struct pbuf *q; /* q will be sent down the stack */ + + LWIP_DEBUGF(UDP_DEBUG | DBG_TRACE | 3, ("udp_send\n")); + + /* if the PCB is not yet bound to a port, bind it here */ + if (pcb->local_port == 0) { + LWIP_DEBUGF(UDP_DEBUG | DBG_TRACE | 2, ("udp_send: not yet bound to a port, binding now\n")); + err = udp_bind(pcb, &pcb->local_ip, pcb->local_port); + if (err != ERR_OK) { + LWIP_DEBUGF(UDP_DEBUG | DBG_TRACE | 2, ("udp_send: forced port bind failed\n")); + return err; + } + } + /* find the outgoing network interface for this packet */ + netif = ip_route(&(pcb->remote_ip)); + /* no outgoing network interface could be found? */ + if (netif == NULL) { + LWIP_DEBUGF(UDP_DEBUG | 1, ("udp_send: No route to 0x%"X32_F"\n", pcb->remote_ip.addr)); + UDP_STATS_INC(udp.rterr); + return ERR_RTE; + } + + /* not enough space to add an UDP header to first pbuf in given p chain? */ + if (pbuf_header(p, UDP_HLEN)) { + /* allocate header in a seperate new pbuf */ + q = pbuf_alloc(PBUF_IP, UDP_HLEN, PBUF_RAM); + /* new header pbuf could not be allocated? */ + if (q == NULL) { + LWIP_DEBUGF(UDP_DEBUG | DBG_TRACE | 2, ("udp_send: could not allocate header\n")); + return ERR_MEM; + } + /* chain header q in front of given pbuf p */ + pbuf_chain(q, p); + /* { first pbuf q points to header pbuf } */ + LWIP_DEBUGF(UDP_DEBUG, ("udp_send: added header pbuf %p before given pbuf %p\n", (void *)q, (void *)p)); + /* adding a header within p succeeded */ + } else { + /* first pbuf q equals given pbuf */ + q = p; + LWIP_DEBUGF(UDP_DEBUG, ("udp_send: added header in given pbuf %p\n", (void *)p)); + } + /* { q now represents the packet to be sent } */ + udphdr = q->payload; + udphdr->src = htons(pcb->local_port); + udphdr->dest = htons(pcb->remote_port); + /* in UDP, 0 checksum means 'no checksum' */ + udphdr->chksum = 0x0000; + + /* PCB local address is IP_ANY_ADDR? */ + if (ip_addr_isany(&pcb->local_ip)) { + /* use outgoing network interface IP address as source address */ + src_ip = &(netif->ip_addr); + } else { + /* use UDP PCB local IP address as source address */ + src_ip = &(pcb->local_ip); + } + + LWIP_DEBUGF(UDP_DEBUG, ("udp_send: sending datagram of length %"U16_F"\n", q->tot_len)); + + /* UDP Lite protocol? */ + if (pcb->flags & UDP_FLAGS_UDPLITE) { + LWIP_DEBUGF(UDP_DEBUG, ("udp_send: UDP LITE packet length %"U16_F"\n", q->tot_len)); + /* set UDP message length in UDP header */ + udphdr->len = htons(pcb->chksum_len); + /* calculate checksum */ +#if CHECKSUM_GEN_UDP + udphdr->chksum = inet_chksum_pseudo(q, src_ip, &(pcb->remote_ip), + IP_PROTO_UDP, pcb->chksum_len); + /* chksum zero must become 0xffff, as zero means 'no checksum' */ + if (udphdr->chksum == 0x0000) udphdr->chksum = 0xffff; +#else + udphdr->chksum = 0x0000; +#endif + /* output to IP */ + LWIP_DEBUGF(UDP_DEBUG, ("udp_send: ip_output_if (,,,,IP_PROTO_UDPLITE,)\n")); + err = ip_output_if (q, src_ip, &pcb->remote_ip, pcb->ttl, pcb->tos, IP_PROTO_UDPLITE, netif); + /* UDP */ + } else { + LWIP_DEBUGF(UDP_DEBUG, ("udp_send: UDP packet length %"U16_F"\n", q->tot_len)); + udphdr->len = htons(q->tot_len); + /* calculate checksum */ +#if CHECKSUM_GEN_UDP + if ((pcb->flags & UDP_FLAGS_NOCHKSUM) == 0) { + udphdr->chksum = inet_chksum_pseudo(q, src_ip, &pcb->remote_ip, IP_PROTO_UDP, q->tot_len); + /* chksum zero must become 0xffff, as zero means 'no checksum' */ + if (udphdr->chksum == 0x0000) udphdr->chksum = 0xffff; + } +#else + udphdr->chksum = 0x0000; +#endif + LWIP_DEBUGF(UDP_DEBUG, ("udp_send: UDP checksum 0x%04"X16_F"\n", udphdr->chksum)); + LWIP_DEBUGF(UDP_DEBUG, ("udp_send: ip_output_if (,,,,IP_PROTO_UDP,)\n")); + /* output to IP */ + err = ip_output_if(q, src_ip, &pcb->remote_ip, pcb->ttl, pcb->tos, IP_PROTO_UDP, netif); + } + /* TODO: must this be increased even if error occured? */ + snmp_inc_udpoutdatagrams(); + + /* did we chain a seperate header pbuf earlier? */ + if (q != p) { + /* free the header pbuf */ + pbuf_free(q); q = NULL; + /* { p is still referenced by the caller, and will live on } */ + } + + UDP_STATS_INC(udp.xmit); + return err; +} + +/** + * Bind an UDP PCB. + * + * @param pcb UDP PCB to be bound with a local address ipaddr and port. + * @param ipaddr local IP address to bind with. Use IP_ADDR_ANY to + * bind to all local interfaces. + * @param port local UDP port to bind with. + * + * @return lwIP error code. + * - ERR_OK. Successful. No error occured. + * - ERR_USE. The specified ipaddr and port are already bound to by + * another UDP PCB. + * + * @see udp_disconnect() + */ +err_t +udp_bind(struct udp_pcb *pcb, struct ip_addr *ipaddr, u16_t port) +{ + struct udp_pcb *ipcb; + u8_t rebind; + + LWIP_DEBUGF(UDP_DEBUG | DBG_TRACE | 3, ("udp_bind(ipaddr = ")); + ip_addr_debug_print(UDP_DEBUG, ipaddr); + LWIP_DEBUGF(UDP_DEBUG | DBG_TRACE | 3, (", port = %"U16_F")\n", port)); + + rebind = 0; + /* Check for double bind and rebind of the same pcb */ + for (ipcb = udp_pcbs; ipcb != NULL; ipcb = ipcb->next) { + /* is this UDP PCB already on active list? */ + if (pcb == ipcb) { + /* pcb may occur at most once in active list */ + LWIP_ASSERT("rebind == 0", rebind == 0); + /* pcb already in list, just rebind */ + rebind = 1; + } + +/* this code does not allow upper layer to share a UDP port for + listening to broadcast or multicast traffic (See SO_REUSE_ADDR and + SO_REUSE_PORT under *BSD). TODO: See where it fits instead, OR + combine with implementation of UDP PCB flags. Leon Woestenberg. */ +#ifdef LWIP_UDP_TODO + /* port matches that of PCB in list? */ + else if ((ipcb->local_port == port) && + /* IP address matches, or one is IP_ADDR_ANY? */ + (ip_addr_isany(&(ipcb->local_ip)) || + ip_addr_isany(ipaddr) || + ip_addr_cmp(&(ipcb->local_ip), ipaddr))) { + /* other PCB already binds to this local IP and port */ + LWIP_DEBUGF(UDP_DEBUG, ("udp_bind: local port %"U16_F" already bound by another pcb\n", port)); + return ERR_USE; + } +#endif + + } + + ip_addr_set(&pcb->local_ip, ipaddr); + /* no port specified? */ + if (port == 0) { +#ifndef UDP_LOCAL_PORT_RANGE_START +#define UDP_LOCAL_PORT_RANGE_START 4096 +#define UDP_LOCAL_PORT_RANGE_END 0x7fff +#endif + port = UDP_LOCAL_PORT_RANGE_START; + ipcb = udp_pcbs; + while ((ipcb != NULL) && (port != UDP_LOCAL_PORT_RANGE_END)) { + if (ipcb->local_port == port) { + port++; + ipcb = udp_pcbs; + } else + ipcb = ipcb->next; + } + if (ipcb != NULL) { + /* no more ports available in local range */ + LWIP_DEBUGF(UDP_DEBUG, ("udp_bind: out of free UDP ports\n")); + return ERR_USE; + } + } + pcb->local_port = port; + /* pcb not active yet? */ + if (rebind == 0) { + /* place the PCB on the active list if not already there */ + pcb->next = udp_pcbs; + udp_pcbs = pcb; + } + LWIP_DEBUGF(UDP_DEBUG | DBG_TRACE | DBG_STATE, ("udp_bind: bound to %"U16_F".%"U16_F".%"U16_F".%"U16_F", port %"U16_F"\n", + (u16_t)(ntohl(pcb->local_ip.addr) >> 24 & 0xff), + (u16_t)(ntohl(pcb->local_ip.addr) >> 16 & 0xff), + (u16_t)(ntohl(pcb->local_ip.addr) >> 8 & 0xff), + (u16_t)(ntohl(pcb->local_ip.addr) & 0xff), pcb->local_port)); + return ERR_OK; +} +/** + * Connect an UDP PCB. + * + * This will associate the UDP PCB with the remote address. + * + * @param pcb UDP PCB to be connected with remote address ipaddr and port. + * @param ipaddr remote IP address to connect with. + * @param port remote UDP port to connect with. + * + * @return lwIP error code + * + * @see udp_disconnect() + */ +err_t +udp_connect(struct udp_pcb *pcb, struct ip_addr *ipaddr, u16_t port) +{ + struct udp_pcb *ipcb; + + if (pcb->local_port == 0) { + err_t err = udp_bind(pcb, &pcb->local_ip, pcb->local_port); + if (err != ERR_OK) + return err; + } + + ip_addr_set(&pcb->remote_ip, ipaddr); + pcb->remote_port = port; + pcb->flags |= UDP_FLAGS_CONNECTED; +/** TODO: this functionality belongs in upper layers */ +#ifdef LWIP_UDP_TODO + /* Nail down local IP for netconn_addr()/getsockname() */ + if (ip_addr_isany(&pcb->local_ip) && !ip_addr_isany(&pcb->remote_ip)) { + struct netif *netif; + + if ((netif = ip_route(&(pcb->remote_ip))) == NULL) { + LWIP_DEBUGF(UDP_DEBUG, ("udp_connect: No route to 0x%lx\n", pcb->remote_ip.addr)); + UDP_STATS_INC(udp.rterr); + return ERR_RTE; + } + /** TODO: this will bind the udp pcb locally, to the interface which + is used to route output packets to the remote address. However, we + might want to accept incoming packets on any interface! */ + pcb->local_ip = netif->ip_addr; + } else if (ip_addr_isany(&pcb->remote_ip)) { + pcb->local_ip.addr = 0; + } +#endif + LWIP_DEBUGF(UDP_DEBUG | DBG_TRACE | DBG_STATE, ("udp_connect: connected to %"U16_F".%"U16_F".%"U16_F".%"U16_F",port %"U16_F"\n", + (u16_t)(ntohl(pcb->remote_ip.addr) >> 24 & 0xff), + (u16_t)(ntohl(pcb->remote_ip.addr) >> 16 & 0xff), + (u16_t)(ntohl(pcb->remote_ip.addr) >> 8 & 0xff), + (u16_t)(ntohl(pcb->remote_ip.addr) & 0xff), pcb->remote_port)); + + /* Insert UDP PCB into the list of active UDP PCBs. */ + for(ipcb = udp_pcbs; ipcb != NULL; ipcb = ipcb->next) { + if (pcb == ipcb) { + /* already on the list, just return */ + return ERR_OK; + } + } + /* PCB not yet on the list, add PCB now */ + pcb->next = udp_pcbs; + udp_pcbs = pcb; + return ERR_OK; +} + +void +udp_disconnect(struct udp_pcb *pcb) +{ + /* reset remote address association */ + ip_addr_set(&pcb->remote_ip, IP_ADDR_ANY); + pcb->remote_port = 0; + /* mark PCB as unconnected */ + pcb->flags &= ~UDP_FLAGS_CONNECTED; +} + +void +udp_recv(struct udp_pcb *pcb, + void (* recv)(void *arg, struct udp_pcb *upcb, struct pbuf *p, + struct ip_addr *addr, u16_t port), + void *recv_arg) +{ + /* remember recv() callback and user data */ + pcb->recv = recv; + pcb->recv_arg = recv_arg; +} +/** + * Remove an UDP PCB. + * + * @param pcb UDP PCB to be removed. The PCB is removed from the list of + * UDP PCB's and the data structure is freed from memory. + * + * @see udp_new() + */ +void +udp_remove(struct udp_pcb *pcb) +{ + struct udp_pcb *pcb2; + /* pcb to be removed is first in list? */ + if (udp_pcbs == pcb) { + /* make list start at 2nd pcb */ + udp_pcbs = udp_pcbs->next; + /* pcb not 1st in list */ + } else for(pcb2 = udp_pcbs; pcb2 != NULL; pcb2 = pcb2->next) { + /* find pcb in udp_pcbs list */ + if (pcb2->next != NULL && pcb2->next == pcb) { + /* remove pcb from list */ + pcb2->next = pcb->next; + } + } + memp_free(MEMP_UDP_PCB, pcb); +} +/** + * Create a UDP PCB. + * + * @return The UDP PCB which was created. NULL if the PCB data structure + * could not be allocated. + * + * @see udp_remove() + */ +struct udp_pcb * +udp_new(void) { + struct udp_pcb *pcb; + pcb = memp_malloc(MEMP_UDP_PCB); + /* could allocate UDP PCB? */ + if (pcb != NULL) { + /* initialize PCB to all zeroes */ + memset(pcb, 0, sizeof(struct udp_pcb)); + pcb->ttl = UDP_TTL; + } + + + return pcb; +} + +#if UDP_DEBUG +void +udp_debug_print(struct udp_hdr *udphdr) +{ + LWIP_DEBUGF(UDP_DEBUG, ("UDP header:\n")); + LWIP_DEBUGF(UDP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(UDP_DEBUG, ("| %5"U16_F" | %5"U16_F" | (src port, dest port)\n", + ntohs(udphdr->src), ntohs(udphdr->dest))); + LWIP_DEBUGF(UDP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(UDP_DEBUG, ("| %5"U16_F" | 0x%04"X16_F" | (len, chksum)\n", + ntohs(udphdr->len), ntohs(udphdr->chksum))); + LWIP_DEBUGF(UDP_DEBUG, ("+-------------------------------+\n")); +} +#endif /* UDP_DEBUG */ + +#endif /* LWIP_UDP */ + + + + + + + + + diff --git a/wii/libogc/lwip/netif/etharp.c b/wii/libogc/lwip/netif/etharp.c new file mode 100644 index 0000000000..4d4ebdbe15 --- /dev/null +++ b/wii/libogc/lwip/netif/etharp.c @@ -0,0 +1,831 @@ +/** + * @file + * Address Resolution Protocol module for IP over Ethernet + * + * Functionally, ARP is divided into two parts. The first maps an IP address + * to a physical address when sending a packet, and the second part answers + * requests from other machines for our physical address. + * + * This implementation complies with RFC 826 (Ethernet ARP). It supports + * Gratuitious ARP from RFC3220 (IP Mobility Support for IPv4) section 4.6 + * if an interface calls etharp_query(our_netif, its_ip_addr, NULL) upon + * address change. + */ + +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * Copyright (c) 2003-2004 Leon Woestenberg + * Copyright (c) 2003-2004 Axon Digital Design B.V., The Netherlands. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + */ + +#include "lwip/opt.h" +#include "lwip/inet.h" +#include "netif/etharp.h" +#include "lwip/ip.h" +#include "lwip/stats.h" + +/* ARP needs to inform DHCP of any ARP replies? */ +#if (LWIP_DHCP && DHCP_DOES_ARP_CHECK) +# include "lwip/dhcp.h" +#endif + +/** the time an ARP entry stays valid after its last update, + * (240 * 5) seconds = 20 minutes. + */ +#define ARP_MAXAGE 240 +/** the time an ARP entry stays pending after first request, + * (2 * 5) seconds = 10 seconds. + * + * @internal Keep this number at least 2, otherwise it might + * run out instantly if the timeout occurs directly after a request. + */ +#define ARP_MAXPENDING 2 + +#define HWTYPE_ETHERNET 1 + +/** ARP message types */ +#define ARP_REQUEST 1 +#define ARP_REPLY 2 + +#define ARPH_HWLEN(hdr) (ntohs((hdr)->_hwlen_protolen) >> 8) +#define ARPH_PROTOLEN(hdr) (ntohs((hdr)->_hwlen_protolen) & 0xff) + +#define ARPH_HWLEN_SET(hdr, len) (hdr)->_hwlen_protolen = htons(ARPH_PROTOLEN(hdr) | ((len) << 8)) +#define ARPH_PROTOLEN_SET(hdr, len) (hdr)->_hwlen_protolen = htons((len) | (ARPH_HWLEN(hdr) << 8)) + +enum etharp_state { + ETHARP_STATE_EMPTY, + ETHARP_STATE_PENDING, + ETHARP_STATE_STABLE, + /** @internal transitional state used in etharp_tmr() for convenience*/ + ETHARP_STATE_EXPIRED +}; + +struct etharp_entry { +#if ARP_QUEUEING + /** + * Pointer to queue of pending outgoing packets on this ARP entry. + */ + struct pbuf *p; +#endif + struct ip_addr ipaddr; + struct eth_addr ethaddr; + enum etharp_state state; + u8_t ctime; +}; + +static const struct eth_addr ethbroadcast = {{0xff,0xff,0xff,0xff,0xff,0xff}}; +static struct etharp_entry arp_table[ARP_TABLE_SIZE]; + +/** + * Try hard to create a new entry - we want the IP address to appear in + * the cache (even if this means removing an active entry or so). */ +#define ETHARP_TRY_HARD 1 + +static s8_t find_entry(struct ip_addr *ipaddr, u8_t flags); +static err_t update_arp_entry(struct netif *netif, struct ip_addr *ipaddr, struct eth_addr *ethaddr, u8_t flags); +/** + * Initializes ARP module. + */ +void +etharp_init(void) +{ + u8_t i; + /* clear ARP entries */ + for(i = 0; i < ARP_TABLE_SIZE; ++i) { + arp_table[i].state = ETHARP_STATE_EMPTY; +#if ARP_QUEUEING + arp_table[i].p = NULL; +#endif + arp_table[i].ctime = 0; + } +} + +/** + * Clears expired entries in the ARP table. + * + * This function should be called every ETHARP_TMR_INTERVAL microseconds (5 seconds), + * in order to expire entries in the ARP table. + */ +void +etharp_tmr(void) +{ + u8_t i; + + LWIP_DEBUGF(ETHARP_DEBUG, ("etharp_timer\n")); + /* remove expired entries from the ARP table */ + for (i = 0; i < ARP_TABLE_SIZE; ++i) { + arp_table[i].ctime++; + /* stable entry? */ + if ((arp_table[i].state == ETHARP_STATE_STABLE) && + /* entry has become old? */ + (arp_table[i].ctime >= ARP_MAXAGE)) { + LWIP_DEBUGF(ETHARP_DEBUG, ("etharp_timer: expired stable entry %"U16_F".\n", (u16_t)i)); + arp_table[i].state = ETHARP_STATE_EXPIRED; + /* pending entry? */ + } else if (arp_table[i].state == ETHARP_STATE_PENDING) { + /* entry unresolved/pending for too long? */ + if (arp_table[i].ctime >= ARP_MAXPENDING) { + LWIP_DEBUGF(ETHARP_DEBUG, ("etharp_timer: expired pending entry %"U16_F".\n", (u16_t)i)); + arp_table[i].state = ETHARP_STATE_EXPIRED; +#if ARP_QUEUEING + } else if (arp_table[i].p != NULL) { + /* resend an ARP query here */ +#endif + } + } + /* clean up entries that have just been expired */ + if (arp_table[i].state == ETHARP_STATE_EXPIRED) { +#if ARP_QUEUEING + /* and empty packet queue */ + if (arp_table[i].p != NULL) { + /* remove all queued packets */ + LWIP_DEBUGF(ETHARP_DEBUG, ("etharp_timer: freeing entry %"U16_F", packet queue %p.\n", (u16_t)i, (void *)(arp_table[i].p))); + pbuf_free(arp_table[i].p); + arp_table[i].p = NULL; + } +#endif + /* recycle entry for re-use */ + arp_table[i].state = ETHARP_STATE_EMPTY; + } + } +} + +/** + * Search the ARP table for a matching or new entry. + * + * If an IP address is given, return a pending or stable ARP entry that matches + * the address. If no match is found, create a new entry with this address set, + * but in state ETHARP_EMPTY. The caller must check and possibly change the + * state of the returned entry. + * + * If ipaddr is NULL, return a initialized new entry in state ETHARP_EMPTY. + * + * In all cases, attempt to create new entries from an empty entry. If no + * empty entries are available and ETHARP_TRY_HARD flag is set, recycle + * old entries. Heuristic choose the least important entry for recycling. + * + * @param ipaddr IP address to find in ARP cache, or to add if not found. + * @param flags + * - ETHARP_TRY_HARD: Try hard to create a entry by allowing recycling of + * active (stable or pending) entries. + * + * @return The ARP entry index that matched or is created, ERR_MEM if no + * entry is found or could be recycled. + */ +static s8_t find_entry(struct ip_addr *ipaddr, u8_t flags) +{ + s8_t old_pending = ARP_TABLE_SIZE, old_stable = ARP_TABLE_SIZE; + s8_t empty = ARP_TABLE_SIZE; + u8_t i = 0, age_pending = 0, age_stable = 0; +#if ARP_QUEUEING + /* oldest entry with packets on queue */ + s8_t old_queue = ARP_TABLE_SIZE; + /* its age */ + u8_t age_queue = 0; +#endif + + /** + * a) do a search through the cache, remember candidates + * b) select candidate entry + * c) create new entry + */ + + /* a) in a single search sweep, do all of this + * 1) remember the first empty entry (if any) + * 2) remember the oldest stable entry (if any) + * 3) remember the oldest pending entry without queued packets (if any) + * 4) remember the oldest pending entry with queued packets (if any) + * 5) search for a matching IP entry, either pending or stable + * until 5 matches, or all entries are searched for. + */ + + for (i = 0; i < ARP_TABLE_SIZE; ++i) { + /* no empty entry found yet and now we do find one? */ + if ((empty == ARP_TABLE_SIZE) && (arp_table[i].state == ETHARP_STATE_EMPTY)) { + LWIP_DEBUGF(ETHARP_DEBUG, ("find_entry: found empty entry %"U16_F"\n", (u16_t)i)); + /* remember first empty entry */ + empty = i; + } + /* pending entry? */ + else if (arp_table[i].state == ETHARP_STATE_PENDING) { + /* if given, does IP address match IP address in ARP entry? */ + if (ipaddr && ip_addr_cmp(ipaddr, &arp_table[i].ipaddr)) { + LWIP_DEBUGF(ETHARP_DEBUG | DBG_TRACE, ("find_entry: found matching pending entry %"U16_F"\n", (u16_t)i)); + /* found exact IP address match, simply bail out */ + return i; +#if ARP_QUEUEING + /* pending with queued packets? */ + } else if (arp_table[i].p != NULL) { + if (arp_table[i].ctime >= age_queue) { + old_queue = i; + age_queue = arp_table[i].ctime; + } +#endif + /* pending without queued packets? */ + } else { + if (arp_table[i].ctime >= age_pending) { + old_pending = i; + age_pending = arp_table[i].ctime; + } + } + } + /* stable entry? */ + else if (arp_table[i].state == ETHARP_STATE_STABLE) { + /* if given, does IP address match IP address in ARP entry? */ + if (ipaddr && ip_addr_cmp(ipaddr, &arp_table[i].ipaddr)) { + LWIP_DEBUGF(ETHARP_DEBUG | DBG_TRACE, ("find_entry: found matching stable entry %"U16_F"\n", (u16_t)i)); + /* found exact IP address match, simply bail out */ + return i; + /* remember entry with oldest stable entry in oldest, its age in maxtime */ + } else if (arp_table[i].ctime >= age_stable) { + old_stable = i; + age_stable = arp_table[i].ctime; + } + } + } + /* { we have no match } => try to create a new entry */ + + /* no empty entry found and not allowed to recycle? */ + if ((empty == ARP_TABLE_SIZE) && ((flags & ETHARP_TRY_HARD) == 0)) + { + return (s8_t)ERR_MEM; + } + + /* b) choose the least destructive entry to recycle: + * 1) empty entry + * 2) oldest stable entry + * 3) oldest pending entry without queued packets + * 4) oldest pending entry without queued packets + * + * { ETHARP_TRY_HARD is set at this point } + */ + + /* 1) empty entry available? */ + if (empty < ARP_TABLE_SIZE) { + i = empty; + LWIP_DEBUGF(ETHARP_DEBUG | DBG_TRACE, ("find_entry: selecting empty entry %"U16_F"\n", (u16_t)i)); + } + /* 2) found recyclable stable entry? */ + else if (old_stable < ARP_TABLE_SIZE) { + /* recycle oldest stable*/ + i = old_stable; + LWIP_DEBUGF(ETHARP_DEBUG | DBG_TRACE, ("find_entry: selecting oldest stable entry %"U16_F"\n", (u16_t)i)); +#if ARP_QUEUEING + /* no queued packets should exist on stable entries */ + LWIP_ASSERT("arp_table[i].p == NULL", arp_table[i].p == NULL); +#endif + /* 3) found recyclable pending entry without queued packets? */ + } else if (old_pending < ARP_TABLE_SIZE) { + /* recycle oldest pending */ + i = old_pending; + LWIP_DEBUGF(ETHARP_DEBUG | DBG_TRACE, ("find_entry: selecting oldest pending entry %"U16_F" (without queue)\n", (u16_t)i)); +#if ARP_QUEUEING + /* 4) found recyclable pending entry with queued packets? */ + } else if (old_queue < ARP_TABLE_SIZE) { + /* recycle oldest pending */ + i = old_queue; + LWIP_DEBUGF(ETHARP_DEBUG | DBG_TRACE, ("find_entry: selecting oldest pending entry %"U16_F", freeing packet queue %p\n", (u16_t)i, (void *)(arp_table[i].p))); + pbuf_free(arp_table[i].p); + arp_table[i].p = NULL; +#endif + /* no empty or recyclable entries found */ + } else { + return (s8_t)ERR_MEM; + } + + /* { empty or recyclable entry found } */ + LWIP_ASSERT("i < ARP_TABLE_SIZE", i < ARP_TABLE_SIZE); + + /* recycle entry (no-op for an already empty entry) */ + arp_table[i].state = ETHARP_STATE_EMPTY; + + /* IP address given? */ + if (ipaddr != NULL) { + /* set IP address */ + ip_addr_set(&arp_table[i].ipaddr, ipaddr); + } + arp_table[i].ctime = 0; + return (err_t)i; +} + +/** + * Update (or insert) a IP/MAC address pair in the ARP cache. + * + * If a pending entry is resolved, any queued packets will be sent + * at this point. + * + * @param ipaddr IP address of the inserted ARP entry. + * @param ethaddr Ethernet address of the inserted ARP entry. + * @param flags Defines behaviour: + * - ETHARP_TRY_HARD Allows ARP to insert this as a new item. If not specified, + * only existing ARP entries will be updated. + * + * @return + * - ERR_OK Succesfully updated ARP cache. + * - ERR_MEM If we could not add a new ARP entry when ETHARP_TRY_HARD was set. + * - ERR_ARG Non-unicast address given, those will not appear in ARP cache. + * + * @see pbuf_free() + */ +static err_t +update_arp_entry(struct netif *netif, struct ip_addr *ipaddr, struct eth_addr *ethaddr, u8_t flags) +{ + s8_t i, k; + LWIP_DEBUGF(ETHARP_DEBUG | DBG_TRACE | 3, ("update_arp_entry()\n")); + LWIP_ASSERT("netif->hwaddr_len != 0", netif->hwaddr_len != 0); + LWIP_DEBUGF(ETHARP_DEBUG | DBG_TRACE, ("update_arp_entry: %"U16_F".%"U16_F".%"U16_F".%"U16_F" - %02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F"\n", + ip4_addr1(ipaddr), ip4_addr2(ipaddr), ip4_addr3(ipaddr), ip4_addr4(ipaddr), + ethaddr->addr[0], ethaddr->addr[1], ethaddr->addr[2], + ethaddr->addr[3], ethaddr->addr[4], ethaddr->addr[5])); + /* non-unicast address? */ + if (ip_addr_isany(ipaddr) || + ip_addr_isbroadcast(ipaddr, netif) || + ip_addr_ismulticast(ipaddr)) { + LWIP_DEBUGF(ETHARP_DEBUG | DBG_TRACE, ("update_arp_entry: will not add non-unicast IP address to ARP cache\n")); + return ERR_ARG; + } + /* find or create ARP entry */ + i = find_entry(ipaddr, flags); + /* bail out if no entry could be found */ + if (i < 0) return (err_t)i; + + /* mark it stable */ + arp_table[i].state = ETHARP_STATE_STABLE; + + LWIP_DEBUGF(ETHARP_DEBUG | DBG_TRACE, ("update_arp_entry: updating stable entry %"S16_F"\n", (s16_t)i)); + /* update address */ + for (k = 0; k < netif->hwaddr_len; ++k) { + arp_table[i].ethaddr.addr[k] = ethaddr->addr[k]; + } + /* reset time stamp */ + arp_table[i].ctime = 0; +/* this is where we will send out queued packets! */ +#if ARP_QUEUEING + while (arp_table[i].p != NULL) { + /* get the first packet on the queue */ + struct pbuf *p = arp_table[i].p; + /* Ethernet header */ + struct eth_hdr *ethhdr = p->payload; + /* remember (and reference) remainder of queue */ + /* note: this will also terminate the p pbuf chain */ + arp_table[i].p = pbuf_dequeue(p); + /* fill-in Ethernet header */ + for (k = 0; k < netif->hwaddr_len; ++k) { + ethhdr->dest.addr[k] = ethaddr->addr[k]; + ethhdr->src.addr[k] = netif->hwaddr[k]; + } + ethhdr->type = htons(ETHTYPE_IP); + LWIP_DEBUGF(ETHARP_DEBUG | DBG_TRACE, ("update_arp_entry: sending queued IP packet %p.\n", (void *)p)); + /* send the queued IP packet */ + netif->linkoutput(netif, p); + /* free the queued IP packet */ + pbuf_free(p); + } +#endif + return ERR_OK; +} + +/** + * Updates the ARP table using the given IP packet. + * + * Uses the incoming IP packet's source address to update the + * ARP cache for the local network. The function does not alter + * or free the packet. This function must be called before the + * packet p is passed to the IP layer. + * + * @param netif The lwIP network interface on which the IP packet pbuf arrived. + * @param pbuf The IP packet that arrived on netif. + * + * @return NULL + * + * @see pbuf_free() + */ +void +etharp_ip_input(struct netif *netif, struct pbuf *p) +{ + struct ethip_hdr *hdr; + LWIP_ASSERT("netif != NULL", netif != NULL); + /* Only insert an entry if the source IP address of the + incoming IP packet comes from a host on the local network. */ + hdr = p->payload; + /* source is not on the local network? */ + if (!ip_addr_netcmp(&(hdr->ip.src), &(netif->ip_addr), &(netif->netmask))) { + /* do nothing */ + return; + } + + LWIP_DEBUGF(ETHARP_DEBUG | DBG_TRACE, ("etharp_ip_input: updating ETHARP table.\n")); + /* update ARP table */ + /* @todo We could use ETHARP_TRY_HARD if we think we are going to talk + * back soon (for example, if the destination IP address is ours. */ + update_arp_entry(netif, &(hdr->ip.src), &(hdr->eth.src), 0); +} + + +/** + * Responds to ARP requests to us. Upon ARP replies to us, add entry to cache + * send out queued IP packets. Updates cache with snooped address pairs. + * + * Should be called for incoming ARP packets. The pbuf in the argument + * is freed by this function. + * + * @param netif The lwIP network interface on which the ARP packet pbuf arrived. + * @param pbuf The ARP packet that arrived on netif. Is freed by this function. + * @param ethaddr Ethernet address of netif. + * + * @return NULL + * + * @see pbuf_free() + */ +void +etharp_arp_input(struct netif *netif, struct eth_addr *ethaddr, struct pbuf *p) +{ + struct etharp_hdr *hdr; + /* these are aligned properly, whereas the ARP header fields might not be */ + struct ip_addr sipaddr, dipaddr; + u8_t i; + u8_t for_us; + + LWIP_ASSERT("netif != NULL", netif != NULL); + + /* drop short ARP packets */ + if (p->tot_len < sizeof(struct etharp_hdr)) { + LWIP_DEBUGF(ETHARP_DEBUG | DBG_TRACE | 1, ("etharp_arp_input: packet dropped, too short (%"S16_F"/%"S16_F")\n", p->tot_len, sizeof(struct etharp_hdr))); + pbuf_free(p); + return; + } + + hdr = p->payload; + + /* get aligned copies of addresses */ + *(struct ip_addr2 *)((void*)&sipaddr) = hdr->sipaddr; + *(struct ip_addr2 *)((void*)&dipaddr) = hdr->dipaddr; + + /* this interface is not configured? */ + if (netif->ip_addr.addr == 0) { + for_us = 0; + } else { + /* ARP packet directed to us? */ + for_us = ip_addr_cmp(&dipaddr, &(netif->ip_addr)); + } + + /* ARP message directed to us? */ + if (for_us) { + /* add IP address in ARP cache; assume requester wants to talk to us. + * can result in directly sending the queued packets for this host. */ + update_arp_entry(netif, &sipaddr, &(hdr->shwaddr), ETHARP_TRY_HARD); + /* ARP message not directed to us? */ + } else { + /* update the source IP address in the cache, if present */ + update_arp_entry(netif, &sipaddr, &(hdr->shwaddr), 0); + } + + /* now act on the message itself */ + switch (htons(hdr->opcode)) { + /* ARP request? */ + case ARP_REQUEST: + /* ARP request. If it asked for our address, we send out a + * reply. In any case, we time-stamp any existing ARP entry, + * and possiby send out an IP packet that was queued on it. */ + + LWIP_DEBUGF (ETHARP_DEBUG | DBG_TRACE, ("etharp_arp_input: incoming ARP request\n")); + /* ARP request for our address? */ + if (for_us) { + + LWIP_DEBUGF(ETHARP_DEBUG | DBG_TRACE, ("etharp_arp_input: replying to ARP request for our IP address\n")); + /* re-use pbuf to send ARP reply */ + hdr->opcode = htons(ARP_REPLY); + + hdr->dipaddr = hdr->sipaddr; + hdr->sipaddr = *(struct ip_addr2 *)((void*)&netif->ip_addr); + + for(i = 0; i < netif->hwaddr_len; ++i) { + hdr->dhwaddr.addr[i] = hdr->shwaddr.addr[i]; + hdr->shwaddr.addr[i] = ethaddr->addr[i]; + hdr->ethhdr.dest.addr[i] = hdr->dhwaddr.addr[i]; + hdr->ethhdr.src.addr[i] = ethaddr->addr[i]; + } + + hdr->hwtype = htons(HWTYPE_ETHERNET); + ARPH_HWLEN_SET(hdr, netif->hwaddr_len); + + hdr->proto = htons(ETHTYPE_IP); + ARPH_PROTOLEN_SET(hdr, sizeof(struct ip_addr)); + + hdr->ethhdr.type = htons(ETHTYPE_ARP); + /* return ARP reply */ + netif->linkoutput(netif, p); + /* we are not configured? */ + } else if (netif->ip_addr.addr == 0) { + /* { for_us == 0 and netif->ip_addr.addr == 0 } */ + LWIP_DEBUGF(ETHARP_DEBUG | DBG_TRACE, ("etharp_arp_input: we are unconfigured, ARP request ignored.\n")); + /* request was not directed to us */ + } else { + /* { for_us == 0 and netif->ip_addr.addr != 0 } */ + LWIP_DEBUGF(ETHARP_DEBUG | DBG_TRACE, ("etharp_arp_input: ARP request was not for us.\n")); + } + break; + case ARP_REPLY: + /* ARP reply. We already updated the ARP cache earlier. */ + LWIP_DEBUGF(ETHARP_DEBUG | DBG_TRACE, ("etharp_arp_input: incoming ARP reply\n")); +#if (LWIP_DHCP && DHCP_DOES_ARP_CHECK) + /* DHCP wants to know about ARP replies from any host with an + * IP address also offered to us by the DHCP server. We do not + * want to take a duplicate IP address on a single network. + * @todo How should we handle redundant (fail-over) interfaces? + * */ + dhcp_arp_reply(netif, &sipaddr); +#endif + break; + default: + LWIP_DEBUGF(ETHARP_DEBUG | DBG_TRACE, ("etharp_arp_input: ARP unknown opcode type %"S16_F"\n", htons(hdr->opcode))); + break; + } + /* free ARP packet */ + pbuf_free(p); +} + +/** + * Resolve and fill-in Ethernet address header for outgoing packet. + * + * For IP multicast and broadcast, corresponding Ethernet addresses + * are selected and the packet is transmitted on the link. + * + * For unicast addresses, the packet is submitted to etharp_query(). In + * case the IP address is outside the local network, the IP address of + * the gateway is used. + * + * @param netif The lwIP network interface which the IP packet will be sent on. + * @param ipaddr The IP address of the packet destination. + * @param pbuf The pbuf(s) containing the IP packet to be sent. + * + * @return + * - ERR_RTE No route to destination (no gateway to external networks), + * or the return type of either etharp_query() or netif->linkoutput(). + */ +err_t +etharp_output(struct netif *netif, struct ip_addr *ipaddr, struct pbuf *q) +{ + struct eth_addr *dest, *srcaddr, mcastaddr; + struct eth_hdr *ethhdr; + u8_t i; + + /* make room for Ethernet header - should not fail */ + if (pbuf_header(q, sizeof(struct eth_hdr)) != 0) { + /* bail out */ + LWIP_DEBUGF(ETHARP_DEBUG | DBG_TRACE | 2, ("etharp_output: could not allocate room for header.\n")); + LINK_STATS_INC(link.lenerr); + return ERR_BUF; + } + + /* assume unresolved Ethernet address */ + dest = NULL; + /* Determine on destination hardware address. Broadcasts and multicasts + * are special, other IP addresses are looked up in the ARP table. */ + + /* broadcast destination IP address? */ + if (ip_addr_isbroadcast(ipaddr, netif)) { + /* broadcast on Ethernet also */ + dest = (struct eth_addr *)ðbroadcast; + /* multicast destination IP address? */ + } else if (ip_addr_ismulticast(ipaddr)) { + /* Hash IP multicast address to MAC address.*/ + mcastaddr.addr[0] = 0x01; + mcastaddr.addr[1] = 0x00; + mcastaddr.addr[2] = 0x5e; + mcastaddr.addr[3] = ip4_addr2(ipaddr) & 0x7f; + mcastaddr.addr[4] = ip4_addr3(ipaddr); + mcastaddr.addr[5] = ip4_addr4(ipaddr); + /* destination Ethernet address is multicast */ + dest = &mcastaddr; + /* unicast destination IP address? */ + } else { + /* outside local network? */ + if (!ip_addr_netcmp(ipaddr, &(netif->ip_addr), &(netif->netmask))) { + /* interface has default gateway? */ + if (netif->gw.addr != 0) { + /* send to hardware address of default gateway IP address */ + ipaddr = &(netif->gw); + /* no default gateway available */ + } else { + /* no route to destination error (default gateway missing) */ + return ERR_RTE; + } + } + /* queue on destination Ethernet address belonging to ipaddr */ + return etharp_query(netif, ipaddr, q); + } + + /* continuation for multicast/broadcast destinations */ + /* obtain source Ethernet address of the given interface */ + srcaddr = (struct eth_addr *)netif->hwaddr; + ethhdr = q->payload; + for (i = 0; i < netif->hwaddr_len; i++) { + ethhdr->dest.addr[i] = dest->addr[i]; + ethhdr->src.addr[i] = srcaddr->addr[i]; + } + ethhdr->type = htons(ETHTYPE_IP); + /* send packet directly on the link */ + return netif->linkoutput(netif, q); +} + +/** + * Send an ARP request for the given IP address and/or queue a packet. + * + * If the IP address was not yet in the cache, a pending ARP cache entry + * is added and an ARP request is sent for the given address. The packet + * is queued on this entry. + * + * If the IP address was already pending in the cache, a new ARP request + * is sent for the given address. The packet is queued on this entry. + * + * If the IP address was already stable in the cache, and a packet is + * given, it is directly sent and no ARP request is sent out. + * + * If the IP address was already stable in the cache, and no packet is + * given, an ARP request is sent out. + * + * @param netif The lwIP network interface on which ipaddr + * must be queried for. + * @param ipaddr The IP address to be resolved. + * @param q If non-NULL, a pbuf that must be delivered to the IP address. + * q is not freed by this function. + * + * @return + * - ERR_BUF Could not make room for Ethernet header. + * - ERR_MEM Hardware address unknown, and no more ARP entries available + * to query for address or queue the packet. + * - ERR_MEM Could not queue packet due to memory shortage. + * - ERR_RTE No route to destination (no gateway to external networks). + * - ERR_ARG Non-unicast address given, those will not appear in ARP cache. + * + */ +err_t etharp_query(struct netif *netif, struct ip_addr *ipaddr, struct pbuf *q) +{ + struct eth_addr * srcaddr = (struct eth_addr *)netif->hwaddr; + err_t result = ERR_MEM; + s8_t i; /* ARP entry index */ + u8_t k; /* Ethernet address octet index */ + + /* non-unicast address? */ + if (ip_addr_isbroadcast(ipaddr, netif) || + ip_addr_ismulticast(ipaddr) || + ip_addr_isany(ipaddr)) { + LWIP_DEBUGF(ETHARP_DEBUG | DBG_TRACE, ("etharp_query: will not add non-unicast IP address to ARP cache\n")); + return ERR_ARG; + } + + /* find entry in ARP cache, ask to create entry if queueing packet */ + i = find_entry(ipaddr, ETHARP_TRY_HARD); + + /* could not find or create entry? */ + if (i < 0) + { + LWIP_DEBUGF(ETHARP_DEBUG | DBG_TRACE, ("etharp_query: could not create ARP entry\n")); + if (q) LWIP_DEBUGF(ETHARP_DEBUG | DBG_TRACE, ("etharp_query: packet dropped\n")); + return (err_t)i; + } + + /* mark a fresh entry as pending (we just sent a request) */ + if (arp_table[i].state == ETHARP_STATE_EMPTY) { + arp_table[i].state = ETHARP_STATE_PENDING; + } + + /* { i is either a STABLE or (new or existing) PENDING entry } */ + LWIP_ASSERT("arp_table[i].state == PENDING or STABLE", + ((arp_table[i].state == ETHARP_STATE_PENDING) || + (arp_table[i].state == ETHARP_STATE_STABLE))); + + /* do we have a pending entry? or an implicit query request? */ + if ((arp_table[i].state == ETHARP_STATE_PENDING) || (q == NULL)) { + /* try to resolve it; send out ARP request */ + result = etharp_request(netif, ipaddr); + } + + /* packet given? */ + if (q != NULL) { + /* stable entry? */ + if (arp_table[i].state == ETHARP_STATE_STABLE) { + /* we have a valid IP->Ethernet address mapping, + * fill in the Ethernet header for the outgoing packet */ + struct eth_hdr *ethhdr = q->payload; + for(k = 0; k < netif->hwaddr_len; k++) { + ethhdr->dest.addr[k] = arp_table[i].ethaddr.addr[k]; + ethhdr->src.addr[k] = srcaddr->addr[k]; + } + ethhdr->type = htons(ETHTYPE_IP); + LWIP_DEBUGF(ETHARP_DEBUG | DBG_TRACE, ("etharp_query: sending packet %p\n", (void *)q)); + /* send the packet */ + result = netif->linkoutput(netif, q); + /* pending entry? (either just created or already pending */ + } else if (arp_table[i].state == ETHARP_STATE_PENDING) { +#if ARP_QUEUEING /* queue the given q packet */ + struct pbuf *p; + /* copy any PBUF_REF referenced payloads into PBUF_RAM */ + /* (the caller of lwIP assumes the referenced payload can be + * freed after it returns from the lwIP call that brought us here) */ + p = pbuf_take(q); + /* packet could be taken over? */ + if (p != NULL) { + /* queue packet ... */ + if (arp_table[i].p == NULL) { + /* ... in the empty queue */ + pbuf_ref(p); + arp_table[i].p = p; +#if 0 /* multi-packet-queueing disabled, see bug #11400 */ + } else { + /* ... at tail of non-empty queue */ + pbuf_queue(arp_table[i].p, p); +#endif + } + LWIP_DEBUGF(ETHARP_DEBUG | DBG_TRACE, ("etharp_query: queued packet %p on ARP entry %"S16_F"\n", (void *)q, (s16_t)i)); + result = ERR_OK; + } else { + LWIP_DEBUGF(ETHARP_DEBUG | DBG_TRACE, ("etharp_query: could not queue a copy of PBUF_REF packet %p (out of memory)\n", (void *)q)); + /* { result == ERR_MEM } through initialization */ + } +#else /* ARP_QUEUEING == 0 */ + /* q && state == PENDING && ARP_QUEUEING == 0 => result = ERR_MEM */ + /* { result == ERR_MEM } through initialization */ + LWIP_DEBUGF(ETHARP_DEBUG | DBG_TRACE, ("etharp_query: Ethernet destination address unknown, queueing disabled, packet %p dropped\n", (void *)q)); +#endif + } + } + return result; +} + +err_t etharp_request(struct netif *netif, struct ip_addr *ipaddr) +{ + struct pbuf *p; + struct eth_addr * srcaddr = (struct eth_addr *)netif->hwaddr; + err_t result = ERR_OK; + u8_t k; /* ARP entry index */ + + /* allocate a pbuf for the outgoing ARP request packet */ + p = pbuf_alloc(PBUF_LINK, sizeof(struct etharp_hdr), PBUF_RAM); + /* could allocate a pbuf for an ARP request? */ + if (p != NULL) { + struct etharp_hdr *hdr = p->payload; + LWIP_DEBUGF(ETHARP_DEBUG | DBG_TRACE, ("etharp_request: sending ARP request.\n")); + hdr->opcode = htons(ARP_REQUEST); + for (k = 0; k < netif->hwaddr_len; k++) + { + hdr->shwaddr.addr[k] = srcaddr->addr[k]; + /* the hardware address is what we ask for, in + * a request it is a don't-care value, we use zeroes */ + hdr->dhwaddr.addr[k] = 0x00; + } + hdr->dipaddr = *(struct ip_addr2 *)ipaddr; + hdr->sipaddr = *(struct ip_addr2 *)((void*)&netif->ip_addr); + + hdr->hwtype = htons(HWTYPE_ETHERNET); + ARPH_HWLEN_SET(hdr, netif->hwaddr_len); + + hdr->proto = htons(ETHTYPE_IP); + ARPH_PROTOLEN_SET(hdr, sizeof(struct ip_addr)); + for (k = 0; k < netif->hwaddr_len; ++k) + { + /* broadcast to all network interfaces on the local network */ + hdr->ethhdr.dest.addr[k] = 0xff; + hdr->ethhdr.src.addr[k] = srcaddr->addr[k]; + } + hdr->ethhdr.type = htons(ETHTYPE_ARP); + /* send ARP query */ + result = netif->linkoutput(netif, p); + /* free ARP query packet */ + pbuf_free(p); + p = NULL; + /* could not allocate pbuf for ARP request */ + } else { + result = ERR_MEM; + LWIP_DEBUGF(ETHARP_DEBUG | DBG_TRACE | 2, ("etharp_request: could not allocate pbuf for ARP request.\n")); + } + return result; +} diff --git a/wii/libogc/lwip/netif/loopif.c b/wii/libogc/lwip/netif/loopif.c new file mode 100644 index 0000000000..d37e3e8ce9 --- /dev/null +++ b/wii/libogc/lwip/netif/loopif.c @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include +#include "lwp_watchdog.h" +#include "lwip/opt.h" + +#if LWIP_HAVE_LOOPIF + +#include "netif/loopif.h" +#include "lwip/mem.h" + +#if defined(LWIP_DEBUG) && defined(LWIP_TCPDUMP) +#include "netif/tcpdump.h" +#endif /* LWIP_DEBUG && LWIP_TCPDUMP */ + +#include "lwip/tcp.h" +#include "lwip/ip.h" + +#include "lwp_watchdog.h" + +#define LOOP_TIMER_ID 0x00070045 + +static u64 loopif_ticks; +static wd_cntrl loopif_tmr_cntrl; + +extern unsigned int timespec_to_interval(const struct timespec *); + +static void +loopif_input( void * arg ) +{ + struct netif *netif = (struct netif*)(((void**)arg)[0]); + struct pbuf *r = (struct pbuf*)(((void**)arg)[1]); + + mem_free(arg); + netif->input(r,netif); +} + +static err_t +loopif_output(struct netif *netif, struct pbuf *p, + struct ip_addr *ipaddr) +{ + struct pbuf *q, *r; + char *ptr; + void **arg; + +#if defined(LWIP_DEBUG) && defined(LWIP_TCPDUMP) + tcpdump(p); +#endif /* LWIP_DEBUG && LWIP_TCPDUMP */ + + r = pbuf_alloc(PBUF_RAW, p->tot_len, PBUF_RAM); + if (r != NULL) { + ptr = r->payload; + + for(q = p; q != NULL; q = q->next) { + memcpy(ptr, q->payload, q->len); + ptr += q->len; + } + + arg = mem_malloc( sizeof( void *[2])); + if( NULL == arg ) { + return ERR_MEM; + } + + arg[0] = netif; + arg[1] = r; + /** + * workaround (patch #1779) to try to prevent bug #2595: + * When connecting to "localhost" with the loopif interface, + * tcp_output doesn't get the opportunity to finnish sending the + * segment before tcp_process gets it, resulting in tcp_process + * referencing pcb->unacked-> which still is NULL. + * + * TODO: Is there still a race condition here? Leon + */ + __lwp_wd_initialize(&loopif_tmr_cntrl,loopif_input,LOOP_TIMER_ID,arg); + __lwp_wd_insert_ticks(&loopif_tmr_cntrl,loopif_ticks); + + return ERR_OK; + } + return ERR_MEM; +} + +err_t +loopif_init(struct netif *netif) +{ + struct timespec tb; + + netif->name[0] = 'l'; + netif->name[1] = 'o'; +#if 0 /** TODO: I think this should be enabled, or not? Leon */ + netif->input = loopif_input; +#endif + netif->output = loopif_output; + + tb.tv_sec = 0; + tb.tv_nsec = 10*TB_NSPERMS; + loopif_ticks = __lwp_wd_calc_ticks(&tb); + + return ERR_OK; +} + +#endif /* LWIP_HAVE_LOOPIF */ + + + + + + + diff --git a/wii/libogc/lwip/netif/skeleton/ethernetif.c b/wii/libogc/lwip/netif/skeleton/ethernetif.c new file mode 100644 index 0000000000..7cd04ece5e --- /dev/null +++ b/wii/libogc/lwip/netif/skeleton/ethernetif.c @@ -0,0 +1,302 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +/* + * This file is a skeleton for developing Ethernet network interface + * drivers for lwIP. Add code to the low_level functions and do a + * search-and-replace for the word "ethernetif" to replace it with + * something that better describes your network interface. + */ + +#include "lwip/opt.h" +#include "lwip/def.h" +#include "lwip/mem.h" +#include "lwip/pbuf.h" +#include "lwip/sys.h" + +#include "netif/etharp.h" + +/* Define those to better describe your network interface. */ +#define IFNAME0 'e' +#define IFNAME1 'n' + +struct ethernetif { + struct eth_addr *ethaddr; + /* Add whatever per-interface state that is needed here. */ +}; + +static const struct eth_addr ethbroadcast = {{0xff,0xff,0xff,0xff,0xff,0xff}}; + +/* Forward declarations. */ +static void ethernetif_input(struct netif *netif); +static err_t ethernetif_output(struct netif *netif, struct pbuf *p, + struct ip_addr *ipaddr); + + +static void +low_level_init(struct netif *netif) +{ + struct ethernetif *ethernetif; + + ethernetif = netif->state; + + /* set MAC hardware address length */ + netif->hwaddr_len = 6; + + /* set MAC hardware address */ + netif->hwaddr[0] = ; + ... + netif->hwaddr[5] = ; + + /* maximum transfer unit */ + netif->mtu = 1500; + + /* broadcast capability */ + netif->flags = NETIF_FLAG_BROADCAST; + + /* Do whatever else is needed to initialize interface. */ +} + +/* + * low_level_output(): + * + * Should do the actual transmission of the packet. The packet is + * contained in the pbuf that is passed to the function. This pbuf + * might be chained. + * + */ + + +static err_t +low_level_output(struct ethernetif *ethernetif, struct pbuf *p) +{ + struct pbuf *q; + + initiate transfer(); + + for(q = p; q != NULL; q = q->next) { + /* Send the data from the pbuf to the interface, one pbuf at a + time. The size of the data in each pbuf is kept in the ->len + variable. */ + send data from(q->payload, q->len); + } + + signal that packet should be sent(); + +#ifdef LINK_STATS + lwip_stats.link.xmit++; +#endif /* LINK_STATS */ + + return ERR_OK; +} + +/* + * low_level_input(): + * + * Should allocate a pbuf and transfer the bytes of the incoming + * packet from the interface into the pbuf. + * + */ + +static struct pbuf * +low_level_input(struct ethernetif *ethernetif) +{ + struct pbuf *p, *q; + u16_t len; + + /* Obtain the size of the packet and put it into the "len" + variable. */ + len = ; + + /* We allocate a pbuf chain of pbufs from the pool. */ + p = pbuf_alloc(PBUF_RAW, len, PBUF_POOL); + + if (p != NULL) { + /* We iterate over the pbuf chain until we have read the entire + packet into the pbuf. */ + for(q = p; q != NULL; q = q->next) { + /* Read enough bytes to fill this pbuf in the chain. The + available data in the pbuf is given by the q->len + variable. */ + read data into(q->payload, q->len); + } + acknowledge that packet has been read(); +#ifdef LINK_STATS + lwip_stats.link.recv++; +#endif /* LINK_STATS */ + } else { + drop packet(); +#ifdef LINK_STATS + lwip_stats.link.memerr++; + lwip_stats.link.drop++; +#endif /* LINK_STATS */ + } + + return p; +} + +/* + * ethernetif_output(): + * + * This function is called by the TCP/IP stack when an IP packet + * should be sent. It calls the function called low_level_output() to + * do the actual transmission of the packet. + * + */ + +static err_t +ethernetif_output(struct netif *netif, struct pbuf *p, + struct ip_addr *ipaddr) +{ + struct ethernetif *ethernetif; + struct pbuf *q; + struct eth_hdr *ethhdr; + struct eth_addr *dest, mcastaddr; + struct ip_addr *queryaddr; + err_t err; + u8_t i; + + ethernetif = netif->state; + + /* resolve the link destination hardware address */ + p = etharp_output(netif, ipaddr, p); + + /* network hardware address obtained? */ + if (p == NULL) + { + /* we cannot tell if the packet was sent: the packet could */ + /* have been queued on an ARP entry that was already pending. */ + return ERR_OK; + } + + /* send out the packet */ + return low_level_output(ethernetif, p); + +} + +/* + * ethernetif_input(): + * + * This function should be called when a packet is ready to be read + * from the interface. It uses the function low_level_input() that + * should handle the actual reception of bytes from the network + * interface. + * + */ + +static void +ethernetif_input(struct netif *netif) +{ + struct ethernetif *ethernetif; + struct eth_hdr *ethhdr; + struct pbuf *p, *q; + + ethernetif = netif->state; + + p = low_level_input(ethernetif); + + if (p != NULL) + return; + +#ifdef LINK_STATS + lwip_stats.link.recv++; +#endif /* LINK_STATS */ + + ethhdr = p->payload; + q = NULL; + + switch (htons(ethhdr->type)) { + case ETHTYPE_IP: + q = etharp_ip_input(netif, p); + pbuf_header(p, -14); + netif->input(p, netif); + break; + + case ETHTYPE_ARP: + q = etharp_arp_input(netif, ethernetif->ethaddr, p); + break; + default: + pbuf_free(p); + p = NULL; + break; + } + if (q != NULL) { + low_level_output(ethernetif, q); + pbuf_free(q); + q = NULL; + } +} + +static void +arp_timer(void *arg) +{ + etharp_tmr(); + sys_timeout(ARP_TMR_INTERVAL, arp_timer, NULL); +} + +/* + * ethernetif_init(): + * + * Should be called at the beginning of the program to set up the + * network interface. It calls the function low_level_init() to do the + * actual setup of the hardware. + * + */ + +void +ethernetif_init(struct netif *netif) +{ + struct ethernetif *ethernetif; + + ethernetif = mem_malloc(sizeof(struct ethernetif)); + + if (ethernetif == NULL) + { + LWIP_DEBUGF(NETIF_DEBUG, ("ethernetif_init: out of memory\n")); + return ERR_MEM; + } + + netif->state = ethernetif; + netif->name[0] = IFNAME0; + netif->name[1] = IFNAME1; + netif->output = ethernetif_output; + netif->linkoutput = low_level_output; + + ethernetif->ethaddr = (struct eth_addr *)&(netif->hwaddr[0]); + + low_level_init(netif); + + etharp_init(); + + sys_timeout(ARP_TMR_INTERVAL, arp_timer, NULL); +} + diff --git a/wii/libogc/lwip/netif/skeleton/slipif.c b/wii/libogc/lwip/netif/skeleton/slipif.c new file mode 100644 index 0000000000..776c13f7a6 --- /dev/null +++ b/wii/libogc/lwip/netif/skeleton/slipif.c @@ -0,0 +1,210 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is built upon the file: src/arch/rtxc/netif/sioslip.c + * + * Author: Magnus Ivarsson + */ + +/* + * This is an arch independent SLIP netif. The specific serial hooks must be provided + * by another file.They are sio_open, sio_recv and sio_send + */ + +#include "netif/slipif.h" +#include "lwip/opt.h" +#include "lwip/def.h" +#include "lwip/pbuf.h" +#include "lwip/sys.h" +#include "lwip/stats.h" +#include "lwip/sio.h" + +#define SLIP_END 0300 +#define SLIP_ESC 0333 +#define SLIP_ESC_END 0334 +#define SLIP_ESC_ESC 0335 + +#define MAX_SIZE 1500 + +/** + * Send a pbuf doing the necessary SLIP encapsulation + * + * Uses the serial layer's sio_send() + */ +err_t +slipif_output(struct netif *netif, struct pbuf *p, struct ip_addr *ipaddr) +{ + struct pbuf *q; + int i; + u8_t c; + + /* Send pbuf out on the serial I/O device. */ + sio_send(SLIP_END, netif->state); + + for(q = p; q != NULL; q = q->next) { + for(i = 0; i < q->len; i++) { + c = ((u8_t *)q->payload)[i]; + switch (c) { + case SLIP_END: + sio_send(SLIP_ESC, netif->state); + sio_send(SLIP_ESC_END, netif->state); + break; + case SLIP_ESC: + sio_send(SLIP_ESC, netif->state); + sio_send(SLIP_ESC_ESC, netif->state); + break; + default: + sio_send(c, netif->state); + break; + } + } + } + sio_send(SLIP_END, netif->state); + return 0; +} + +/** + * Handle the incoming SLIP stream character by character + * + * Poll the serial layer by calling sio_recv() + * + * @return The IP packet when SLIP_END is received + */ +static struct pbuf * +slipif_input( struct netif * netif ) +{ + u8_t c; + struct pbuf *p, *q; + int recved; + int i; + + q = p = NULL; + recved = i = 0; + c = 0; + + while (1) { + c = sio_recv(netif->state); + switch (c) { + case SLIP_END: + if (recved > 0) { + /* Received whole packet. */ + pbuf_realloc(q, recved); + + LINK_STATS_INC(link.recv); + + LWIP_DEBUGF(SLIP_DEBUG, ("slipif: Got packet\n")); + return q; + } + break; + + case SLIP_ESC: + c = sio_recv(netif->state); + switch (c) { + case SLIP_ESC_END: + c = SLIP_END; + break; + case SLIP_ESC_ESC: + c = SLIP_ESC; + break; + } + /* FALLTHROUGH */ + + default: + if (p == NULL) { + LWIP_DEBUGF(SLIP_DEBUG, ("slipif_input: alloc\n")); + p = pbuf_alloc(PBUF_LINK, PBUF_POOL_BUFSIZE, PBUF_POOL); + + if (p == NULL) { + LINK_STATS_INC(link.drop); + LWIP_DEBUGF(SLIP_DEBUG, ("slipif_input: no new pbuf! (DROP)\n")); + } + + if (q != NULL) { + pbuf_cat(q, p); + } else { + q = p; + } + } + if (p != NULL && recved < MAX_SIZE) { + ((u8_t *)p->payload)[i] = c; + recved++; + i++; + if (i >= p->len) { + i = 0; + p = NULL; + } + } + break; + } + + } + return NULL; +} + +/** + * The SLIP input thread + * + * Feed the IP layer with incoming packets + */ +static void +slipif_loop(void *nf) +{ + struct pbuf *p; + struct netif *netif = (struct netif *)nf; + + while (1) { + p = slipif_input(netif); + netif->input(p, netif); + } +} + +/** + * SLIP netif initialization + * + * Call the arch specific sio_open and remember + * the opened device in the state field of the netif. + */ +err_t +slipif_init(struct netif *netif) +{ + + LWIP_DEBUGF(SLIP_DEBUG, ("slipif_init: netif->num=%x\n", (int)netif->num)); + + netif->name[0] = 's'; + netif->name[1] = 'l'; + netif->output = slipif_output; + netif->mtu = 1500; + netif->flags = NETIF_FLAG_POINTTOPOINT; + + netif->state = sio_open(netif->num); + if (!netif->state) + return ERR_IF; + + sys_thread_new(slipif_loop, netif, SLIPIF_THREAD_PRIO); + return ERR_OK; +} diff --git a/wii/libogc/lwip/netio.c b/wii/libogc/lwip/netio.c new file mode 100644 index 0000000000..45de58a928 --- /dev/null +++ b/wii/libogc/lwip/netio.c @@ -0,0 +1,103 @@ +#if 0 +#include +#include +#include +#include +#undef errno +extern int errno; + +#include +#include "lwip/ip_addr.h" +#include "network.h" +int netio_open(struct _reent *r, void *fileStruct, const char *path,int flags,int mode); +int netio_close(struct _reent *r,void *fd); +int netio_write(struct _reent *r,void *fd,const char *ptr,size_t len); +int netio_read(struct _reent *r,void *fd,char *ptr,size_t len); + +//--------------------------------------------------------------------------------- +const devoptab_t dotab_stdnet = { +//--------------------------------------------------------------------------------- + "stdnet", // device name + 0, // size of file structure + netio_open, // device open + netio_close, // device close + netio_write, // device write + netio_read, // device read + NULL, // device seek + NULL, // device fstat + NULL, // device stat + NULL, // device link + NULL, // device unlink + NULL, // device chdir + NULL, // device rename + NULL, // device mkdir + 0, // dirStateSize + NULL, // device diropen_r + NULL, // device dirreset_r + NULL, // device dirnext_r + NULL, // device dirclose_r + NULL // device statvfs_r +}; + +int netio_open(struct _reent *r, void *fileStruct, const char *path,int flags,int mode) +{ + char *cport = NULL; + int optval = 1,nport = -1,udp_sock = INVALID_SOCKET; + struct sockaddr_in name; + socklen_t namelen = sizeof(struct sockaddr); + + if(net_init()==SOCKET_ERROR) return -1; + + udp_sock = net_socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); + if(udp_sock==INVALID_SOCKET) return -1; + + cport = strchr(path,':'); + if(cport) { + *cport++ = '\0'; + nport = atoi(cport); + } + if(nport==-1) nport = 7; //try to connect to the well known port 7 + + name.sin_addr.s_addr = inet_addr(path); + name.sin_port = htons(nport); + name.sin_family = AF_INET; + if(net_connect(udp_sock,(struct sockaddr*)&name,namelen)==-1) { + net_close(udp_sock); + return -1; + } + net_setsockopt(udp_sock,IPPROTO_TCP,TCP_NODELAY,&optval,sizeof(optval)); + + return udp_sock; +} + +int netio_close(struct _reent *r,void *fd) +{ + if(fd<0) return -1; + + net_close(fd); + + return 0; +} + +int netio_write(struct _reent *r,void *fd,const char *ptr,size_t len) +{ + int ret; + + if(fd<0) return -1; + + ret = net_write(fd,(void*)ptr,len); + + return ret; +} + +int netio_read(struct _reent *r,void *fd,char *ptr,size_t len) +{ + int ret; + + if(fd<0) return -1; + + ret = net_read(fd,ptr,len); + + return ret; +} +#endif diff --git a/wii/libogc/lwip/network.c b/wii/libogc/lwip/network.c new file mode 100644 index 0000000000..cabc4d1720 --- /dev/null +++ b/wii/libogc/lwip/network.c @@ -0,0 +1,2248 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "network.h" + +//#define _NET_DEBUG +#define ARP_TIMER_ID 0x00070041 +#define TCP_TIMER_ID 0x00070042 +#define DHCPCOARSE_TIMER_ID 0x00070043 +#define DHCPFINE_TIMER_ID 0x00070044 + +#define STACKSIZE 32768 +#define MQBOX_SIZE 256 +#define NUM_SOCKETS MEMP_NUM_NETCONN + +struct netsocket { + struct netconn *conn; + struct netbuf *lastdata; + u16 lastoffset,rcvevt,sendevt,flags; + s32 err; +}; + +struct netselect_cb { + struct netselect_cb *next; + fd_set *readset; + fd_set *writeset; + fd_set *exceptset; + u32 signaled; + mutex_t cond_lck; + cond_t cond; +}; + +typedef void (*apimsg_decode)(struct apimsg_msg *); + +static u32 g_netinitiated = 0; +static u32 tcpiplayer_inited = 0; +static u64 net_tcp_ticks = 0; +static u64 net_dhcpcoarse_ticks = 0; +static u64 net_dhcpfine_ticks = 0; +static u64 net_arp_ticks = 0; +static wd_cntrl arp_time_cntrl; +static wd_cntrl tcp_timer_cntrl; +static wd_cntrl dhcp_coarsetimer_cntrl; +static wd_cntrl dhcp_finetimer_cntrl; + +static struct netif g_hNetIF; +static struct netif g_hLoopIF; +static struct netsocket sockets[NUM_SOCKETS]; +static struct netselect_cb *selectcb_list = NULL; + +static sys_sem netsocket_sem; +static sys_sem sockselect_sem; +static sys_mbox netthread_mbox; + +static sys_thread hnet_thread; +static u8 netthread_stack[STACKSIZE]; + +static u32 tcp_timer_active = 0; + +static struct netbuf* netbuf_new(); +static void netbuf_delete(struct netbuf *); +static void netbuf_copypartial(struct netbuf *,void *,u32,u32); +static void netbuf_ref(struct netbuf *,const void *,u32); + +static struct netconn* netconn_new_with_callback(enum netconn_type,void (*)(struct netconn *,enum netconn_evt,u32)); +static struct netconn* netconn_new_with_proto_and_callback(enum netconn_type,u16,void (*)(struct netconn *,enum netconn_evt,u32)); +static err_t netconn_delete(struct netconn *); +static struct netconn* netconn_accept(struct netconn* ); +static err_t netconn_peer(struct netconn *,struct ip_addr *,u16 *); +static err_t netconn_bind(struct netconn *,struct ip_addr *,u16); +static err_t netconn_listen(struct netconn *); +static struct netbuf* netconn_recv(struct netconn *); +static err_t netconn_send(struct netconn *,struct netbuf *); +static err_t netconn_write(struct netconn *,const void *,u32,u8); +static err_t netconn_connect(struct netconn *,struct ip_addr *,u16); +static err_t netconn_disconnect(struct netconn *); + +static void do_newconn(struct apimsg_msg *); +static void do_delconn(struct apimsg_msg *); +static void do_bind(struct apimsg_msg *); +static void do_listen(struct apimsg_msg *); +static void do_connect(struct apimsg_msg *); +static void do_disconnect(struct apimsg_msg *); +static void do_accept(struct apimsg_msg *); +static void do_send(struct apimsg_msg *); +static void do_recv(struct apimsg_msg *); +static void do_write(struct apimsg_msg *); +static void do_close(struct apimsg_msg *); + +static apimsg_decode decode[APIMSG_MAX] = { + do_newconn, + do_delconn, + do_bind, + do_connect, + do_disconnect, + do_listen, + do_accept, + do_send, + do_recv, + do_write, + do_close +}; + +static void apimsg_post(struct api_msg *); + +static err_t net_input(struct pbuf *,struct netif *); +static void net_apimsg(struct api_msg *); +static err_t net_callback(void (*)(void *),void *); +static void* net_thread(void *); + +static void tmr_callback(void *arg) +{ + void (*functor)() = (void(*)())arg; + if(functor) functor(); +} + +/* low level stuff */ +static void __dhcpcoarse_timer(void *arg) +{ + __lwp_thread_dispatchdisable(); + net_callback(tmr_callback,(void*)dhcp_coarse_tmr); + __lwp_wd_insert_ticks(&dhcp_coarsetimer_cntrl,net_dhcpcoarse_ticks); + __lwp_thread_dispatchunnest(); +} + +static void __dhcpfine_timer(void *arg) +{ + __lwp_thread_dispatchdisable(); + net_callback(tmr_callback,(void*)dhcp_fine_tmr); + __lwp_wd_insert_ticks(&dhcp_finetimer_cntrl,net_dhcpfine_ticks); + __lwp_thread_dispatchunnest(); +} + +static void __tcp_timer(void *arg) +{ +#ifdef _NET_DEBUG + printf("__tcp_timer(%d,%p,%p)\n",tcp_timer_active,tcp_active_pcbs,tcp_tw_pcbs); +#endif + __lwp_thread_dispatchdisable(); + net_callback(tmr_callback,(void*)tcp_tmr); + if (tcp_active_pcbs || tcp_tw_pcbs) { + __lwp_wd_insert_ticks(&tcp_timer_cntrl,net_tcp_ticks); + } else + tcp_timer_active = 0; + __lwp_thread_dispatchunnest(); +} + +static void __arp_timer(void *arg) +{ + __lwp_thread_dispatchdisable(); + net_callback(tmr_callback,(void*)etharp_tmr); + __lwp_wd_insert_ticks(&arp_time_cntrl,net_arp_ticks); + __lwp_thread_dispatchunnest(); +} + +void tcp_timer_needed(void) +{ +#ifdef _NET_DEBUG + printf("tcp_timer_needed()\n"); +#endif + if(!tcp_timer_active && (tcp_active_pcbs || tcp_tw_pcbs)) { + tcp_timer_active = 1; + __lwp_wd_insert_ticks(&tcp_timer_cntrl,net_tcp_ticks); + } +} + +/* netbuf part */ +static __inline__ u16 netbuf_len(struct netbuf *buf) +{ + return ((buf && buf->p)?buf->p->tot_len:0); +} + +static __inline__ struct ip_addr* netbuf_fromaddr(struct netbuf *buf) +{ + return (buf?buf->fromaddr:NULL); +} + +static __inline__ u16 netbuf_fromport(struct netbuf *buf) +{ + return (buf?buf->fromport:0); +} + +static void netbuf_copypartial(struct netbuf *buf,void *dataptr,u32 len,u32 offset) +{ + struct pbuf *p; + u16 i,left; + + left = 0; + if(buf==NULL || dataptr==NULL) return; + + for(p=buf->p;leftnext) { + if(offset!=0 && offset>=p->len) + offset -= p->len; + else { + for(i=offset;ilen;i++) { + ((u8*)dataptr)[left] = ((u8*)p->payload)[i]; + if(++left>=len) return; + } + offset = 0; + } + } +} + +static struct netbuf* netbuf_new() +{ + struct netbuf *buf = NULL; + + buf = memp_malloc(MEMP_NETBUF); + if(buf) { + buf->p = NULL; + buf->ptr = NULL; + } + return buf; +} + +static void netbuf_delete(struct netbuf *buf) +{ + if(buf!=NULL) { + if(buf->p!=NULL) pbuf_free(buf->p); + memp_free(MEMP_NETBUF,buf); + } +} + +static void netbuf_ref(struct netbuf *buf, const void *dataptr,u32 size) +{ + if(buf->p!=NULL) pbuf_free(buf->p); + buf->p = pbuf_alloc(PBUF_TRANSPORT,0,PBUF_REF); + buf->p->payload = (void*)dataptr; + buf->p->len = buf->p->tot_len = size; + buf->ptr = buf->p; +} + +/* netconn part */ +static inline enum netconn_type netconn_type(struct netconn *conn) +{ + return conn->type; +} + +static struct netconn* netconn_new_with_callback(enum netconn_type t,void (*cb)(struct netconn*,enum netconn_evt,u32)) +{ + return netconn_new_with_proto_and_callback(t,0,cb); +} + +static struct netconn* netconn_new_with_proto_and_callback(enum netconn_type t,u16 proto,void (*cb)(struct netconn *,enum netconn_evt,u32)) +{ + u32 dummy = 0; + struct netconn *conn; + struct api_msg *msg; + + conn = memp_malloc(MEMP_NETCONN); + if(!conn) return NULL; + + conn->err = ERR_OK; + conn->type = t; + conn->pcb.tcp = NULL; + + if(MQ_Init(&conn->mbox,MQBOX_SIZE)!=MQ_ERROR_SUCCESSFUL) { + memp_free(MEMP_NETCONN,conn); + return NULL; + } + if(LWP_SemInit(&conn->sem,0,1)==-1) { + MQ_Close(conn->mbox); + memp_free(MEMP_NETCONN,conn); + return NULL; + } + + conn->acceptmbox = SYS_MBOX_NULL; + conn->recvmbox = SYS_MBOX_NULL; + conn->state = NETCONN_NONE; + conn->socket = 0; + conn->callback = cb; + conn->recvavail = 0; + + msg = memp_malloc(MEMP_API_MSG); + if(!msg) { + MQ_Close(conn->mbox); + memp_free(MEMP_NETCONN,conn); + return NULL; + } + + msg->type = APIMSG_NEWCONN; + msg->msg.msg.bc.port = proto; + msg->msg.conn = conn; + apimsg_post(msg); + MQ_Receive(conn->mbox,(mqmsg_t)&dummy,MQ_MSG_BLOCK); + memp_free(MEMP_API_MSG,msg); + + if(conn->err!=ERR_OK) { + MQ_Close(conn->mbox); + memp_free(MEMP_NETCONN,conn); + return NULL; + } + return conn; +} + +static err_t netconn_delete(struct netconn *conn) +{ + u32 dummy = 0; + struct api_msg *msg; + sys_mbox mbox; + void *mem; + + LWIP_DEBUGF(API_LIB_DEBUG, ("netconn_delete(%p)\n", conn)); + + if(!conn) return ERR_OK; + + msg = memp_malloc(MEMP_API_MSG); + if(!msg) return ERR_MEM; + + msg->type = APIMSG_DELCONN; + msg->msg.conn = conn; + apimsg_post(msg); + MQ_Receive(conn->mbox,(mqmsg_t)&dummy,MQ_MSG_BLOCK); + memp_free(MEMP_API_MSG,msg); + + mbox = conn->recvmbox; + conn->recvmbox = SYS_MBOX_NULL; + if(mbox!=SYS_MBOX_NULL) { + while(MQ_Receive(mbox,(mqmsg_t)&mem,MQ_MSG_NOBLOCK)==TRUE) { + if(mem!=NULL) { + if(conn->type==NETCONN_TCP) + pbuf_free((struct pbuf*)mem); + else + netbuf_delete((struct netbuf*)mem); + } + } + MQ_Close(mbox); + } + + mbox = conn->acceptmbox; + conn->acceptmbox = SYS_MBOX_NULL; + if(mbox!=SYS_MBOX_NULL) { + while(MQ_Receive(mbox,(mqmsg_t)&mem,MQ_MSG_NOBLOCK)==TRUE) { + if(mem!=NULL) netconn_delete((struct netconn*)mem); + } + MQ_Close(mbox); + } + + MQ_Close(conn->mbox); + conn->mbox = SYS_MBOX_NULL; + + LWP_SemDestroy(conn->sem); + conn->sem = SYS_SEM_NULL; + + memp_free(MEMP_NETCONN,conn); + return ERR_OK; +} + +static struct netconn* netconn_accept(struct netconn* conn) +{ + struct netconn *newconn; + + if(conn==NULL) return NULL; + + LWIP_DEBUGF(API_LIB_DEBUG, ("netconn_accept(%p)\n", conn)); + MQ_Receive(conn->acceptmbox,(mqmsg_t)&newconn,MQ_MSG_BLOCK); + if(conn->callback) + (*conn->callback)(conn,NETCONN_EVTRCVMINUS,0); + + return newconn; +} + +static err_t netconn_peer(struct netconn *conn,struct ip_addr *addr,u16 *port) +{ + switch(conn->type) { + case NETCONN_RAW: + return ERR_CONN; + case NETCONN_UDPLITE: + case NETCONN_UDPNOCHKSUM: + case NETCONN_UDP: + if(conn->pcb.udp==NULL || ((conn->pcb.udp->flags&UDP_FLAGS_CONNECTED)==0)) + return ERR_CONN; + *addr = conn->pcb.udp->remote_ip; + *port = conn->pcb.udp->remote_port; + break; + case NETCONN_TCP: + if(conn->pcb.tcp==NULL) + return ERR_CONN; + *addr = conn->pcb.tcp->remote_ip; + *port = conn->pcb.tcp->remote_port; + break; + } + return (conn->err = ERR_OK); +} + +static err_t netconn_bind(struct netconn *conn,struct ip_addr *addr,u16 port) +{ + u32 dummy = 0; + struct api_msg *msg; + + LWIP_DEBUGF(API_LIB_DEBUG, ("netconn_bind(%p)\n", conn)); + + if(conn==NULL) return ERR_VAL; + if(conn->type!=NETCONN_TCP && conn->recvmbox==SYS_MBOX_NULL) { + if(MQ_Init(&conn->recvmbox,MQBOX_SIZE)!=MQ_ERROR_SUCCESSFUL) return ERR_MEM; + } + + if((msg=memp_malloc(MEMP_API_MSG))==NULL) + return (conn->err = ERR_MEM); + + msg->type = APIMSG_BIND; + msg->msg.conn = conn; + msg->msg.msg.bc.ipaddr = addr; + msg->msg.msg.bc.port = port; + apimsg_post(msg); + MQ_Receive(conn->mbox,(mqmsg_t)&dummy,MQ_MSG_BLOCK); + memp_free(MEMP_API_MSG,msg); + return conn->err; +} + +static err_t netconn_listen(struct netconn *conn) +{ + u32 dummy = 0; + struct api_msg *msg; + + LWIP_DEBUGF(API_LIB_DEBUG, ("netconn_listen(%p)\n", conn)); + + if(conn==NULL) return -1; + if(conn->acceptmbox==SYS_MBOX_NULL) { + if(MQ_Init(&conn->acceptmbox,MQBOX_SIZE)!=MQ_ERROR_SUCCESSFUL) return ERR_MEM; + } + + if((msg=memp_malloc(MEMP_API_MSG))==NULL) return (conn->err = ERR_MEM); + msg->type = APIMSG_LISTEN; + msg->msg.conn = conn; + apimsg_post(msg); + MQ_Receive(conn->mbox,(mqmsg_t)&dummy,MQ_MSG_BLOCK); + memp_free(MEMP_API_MSG,msg); + return conn->err; +} + +static struct netbuf* netconn_recv(struct netconn *conn) +{ + u32 dummy = 0; + struct api_msg *msg; + struct netbuf *buf; + struct pbuf *p; + u16 len; + + if(conn==NULL) return NULL; + if(conn->recvmbox==SYS_MBOX_NULL) { + conn->err = ERR_CONN; + return NULL; + } + if(conn->err!=ERR_OK) return NULL; + + if(conn->type==NETCONN_TCP) { + if(conn->pcb.tcp->state==LISTEN) { + conn->err = ERR_CONN; + return NULL; + } + + buf = memp_malloc(MEMP_NETBUF); + if(buf==NULL) { + conn->err = ERR_MEM; + return NULL; + } + + MQ_Receive(conn->recvmbox,(mqmsg_t)&p,MQ_MSG_BLOCK); + if(p!=NULL) { + len = p->tot_len; + conn->recvavail -= len; + } else + len = 0; + + if(conn->callback) + (*conn->callback)(conn,NETCONN_EVTRCVMINUS,len); + + if(p==NULL) { + memp_free(MEMP_NETBUF,buf); + MQ_Close(conn->recvmbox); + conn->recvmbox = SYS_MBOX_NULL; + return NULL; + } + + buf->p = p; + buf->ptr = p; + buf->fromport = 0; + buf->fromaddr = NULL; + + if((msg=memp_malloc(MEMP_API_MSG))==NULL) { + conn->err = ERR_MEM; + return buf; + } + + msg->type = APIMSG_RECV; + msg->msg.conn = conn; + if(buf!=NULL) + msg->msg.msg.len = len; + else + msg->msg.msg.len = 1; + + apimsg_post(msg); + MQ_Receive(conn->mbox,(mqmsg_t)&dummy,MQ_MSG_BLOCK); + memp_free(MEMP_API_MSG,msg); + } else { + MQ_Receive(conn->recvmbox,(mqmsg_t)&buf,MQ_MSG_BLOCK); + conn->recvavail -= buf->p->tot_len; + if(conn->callback) + (*conn->callback)(conn,NETCONN_EVTRCVMINUS,buf->p->tot_len); + } + + LWIP_DEBUGF(API_LIB_DEBUG, ("netconn_recv: received %p (err %d)\n", (void *)buf, conn->err)); + return buf; +} + +static err_t netconn_send(struct netconn *conn,struct netbuf *buf) +{ + u32 dummy = 0; + struct api_msg *msg; + + if(conn==NULL) return ERR_VAL; + if(conn->err!=ERR_OK) return conn->err; + if((msg=memp_malloc(MEMP_API_MSG))==NULL) return (conn->err = ERR_MEM); + + LWIP_DEBUGF(API_LIB_DEBUG, ("netconn_send: sending %d bytes\n", buf->p->tot_len)); + msg->type = APIMSG_SEND; + msg->msg.conn = conn; + msg->msg.msg.p = buf->p; + apimsg_post(msg); + MQ_Receive(conn->mbox,(mqmsg_t)&dummy,MQ_MSG_BLOCK); + memp_free(MEMP_API_MSG,msg); + return conn->err; +} + +static err_t netconn_write(struct netconn *conn,const void *dataptr,u32 size,u8 copy) +{ + u32 dummy = 0; + struct api_msg *msg; + u16 len,snd_buf; + + + LWIP_DEBUGF(API_LIB_DEBUG, ("netconn_write(%d)\n",conn->err)); + + if(conn==NULL) return ERR_VAL; + if(conn->err!=ERR_OK) return conn->err; + + if((msg=memp_malloc(MEMP_API_MSG))==NULL) return (conn->err = ERR_MEM); + + msg->type = APIMSG_WRITE; + msg->msg.conn = conn; + conn->state = NETCONN_WRITE; + while(conn->err==ERR_OK && size>0) { + msg->msg.msg.w.dataptr = (void*)dataptr; + msg->msg.msg.w.copy = copy; + if(conn->type==NETCONN_TCP) { + while((snd_buf=tcp_sndbuf(conn->pcb.tcp))==0) { + LWIP_DEBUGF(API_LIB_DEBUG,("netconn_write: tcp_sndbuf = 0,err = %d\n", conn->err)); + LWP_SemWait(conn->sem); + if(conn->err!=ERR_OK) goto ret; + } + if(size>snd_buf) + len = snd_buf; + else + len = size; + } else + len = size; + + LWIP_DEBUGF(API_LIB_DEBUG, ("netconn_write: writing %d bytes (%d)\n", len, copy)); + msg->msg.msg.w.len = len; + apimsg_post(msg); + MQ_Receive(conn->mbox,(mqmsg_t)&dummy,MQ_MSG_BLOCK); + if(conn->err==ERR_OK) { + LWIP_DEBUGF(API_LIB_DEBUG, ("netconn_write: %d bytes written\n",len)); + dataptr = (void*)((char*)dataptr+len); + size -= len; + } else if(conn->err==ERR_MEM) { + LWIP_DEBUGF(API_LIB_DEBUG,("netconn_write: mem err\n")); + conn->err = ERR_OK; + LWP_SemWait(conn->sem); + } else { + LWIP_DEBUGF(API_LIB_DEBUG,("netconn_write: err = %d\n", conn->err)); + break; + } + } +ret: + memp_free(MEMP_API_MSG,msg); + conn->state = NETCONN_NONE; + + return conn->err; +} + +static err_t netconn_connect(struct netconn *conn,struct ip_addr *addr,u16 port) +{ + u32 dummy = 0; + struct api_msg *msg; + + if(conn==NULL) return -1; + if(conn->recvmbox==SYS_MBOX_NULL) { + if(MQ_Init(&conn->recvmbox,MQBOX_SIZE)!=MQ_ERROR_SUCCESSFUL) return ERR_MEM; + } + + if((msg=memp_malloc(MEMP_API_MSG))==NULL) return ERR_MEM; + + msg->type = APIMSG_CONNECT; + msg->msg.conn = conn; + msg->msg.msg.bc.ipaddr = addr; + msg->msg.msg.bc.port = port; + apimsg_post(msg); + MQ_Receive(conn->mbox,(mqmsg_t)&dummy,MQ_MSG_BLOCK); + memp_free(MEMP_API_MSG,msg); + return conn->err; +} + +static err_t netconn_disconnect(struct netconn *conn) +{ + u32 dummy = 0; + struct api_msg *msg; + + if(conn==NULL) return ERR_VAL; + if((msg=memp_malloc(MEMP_API_MSG))==NULL) return ERR_MEM; + + msg->type = APIMSG_DISCONNECT; + msg->msg.conn = conn; + apimsg_post(msg); + MQ_Receive(conn->mbox,(mqmsg_t)&dummy,MQ_MSG_BLOCK); + memp_free(MEMP_API_MSG,msg); + return conn->err; +} + +/* api msg part */ +static u8_t recv_raw(void *arg,struct raw_pcb *pcb,struct pbuf *p,struct ip_addr *addr) +{ + struct netbuf *buf; + struct netconn *conn = (struct netconn*)arg; + + if(!conn) return 0; + + if(conn->recvmbox!=SYS_MBOX_NULL) { + if((buf=memp_malloc(MEMP_NETBUF))==NULL) return 0; + + pbuf_ref(p); + buf->p = p; + buf->ptr = p; + buf->fromaddr = addr; + buf->fromport = pcb->protocol; + + conn->recvavail += p->tot_len; + if(conn->callback) + (*conn->callback)(conn,NETCONN_EVTRCVPLUS,p->tot_len); + MQ_Send(conn->recvmbox,buf,MQ_MSG_BLOCK); + } + return 0; +} + +static void recv_udp(void *arg,struct udp_pcb *pcb,struct pbuf *p,struct ip_addr *addr,u16 port) +{ + struct netbuf *buf; + struct netconn *conn = (struct netconn*)arg; + + if(!conn) { + pbuf_free(p); + return; + } + + if(conn->recvmbox!=SYS_MBOX_NULL) { + buf = memp_malloc(MEMP_NETBUF); + if(!buf) { + pbuf_free(p); + return; + } + buf->p = p; + buf->ptr = p; + buf->fromaddr = addr; + buf->fromport = port; + + conn->recvavail += p->tot_len; + if(conn->callback) + (*conn->callback)(conn,NETCONN_EVTRCVPLUS,p->tot_len); + + MQ_Send(conn->recvmbox,buf,MQ_MSG_BLOCK); + } +} + +static err_t recv_tcp(void *arg,struct tcp_pcb *pcb,struct pbuf *p,err_t err) +{ + u16 len; + struct netconn *conn = (struct netconn*)arg; + + LWIP_DEBUGF(API_MSG_DEBUG, ("api_msg: recv_tcp(%p,%p,%p,%d)\n",arg,pcb,p,err)); + + if(conn==NULL) { + pbuf_free(p); + return ERR_VAL; + } + + if(conn->recvmbox!=SYS_MBOX_NULL) { + conn->err = err; + if(p!=NULL) { + len = p->tot_len; + conn->recvavail += len; + } else len = 0; + + if(conn->callback) + (*conn->callback)(conn,NETCONN_EVTRCVPLUS,len); + + MQ_Send(conn->recvmbox,p,MQ_MSG_BLOCK); + } + return ERR_OK; +} + +static void err_tcp(void *arg,err_t err) +{ + u32 dummy = 0; + struct netconn *conn = (struct netconn*)arg; + + LWIP_DEBUGF(API_MSG_DEBUG, ("api_msg: err_tcp: %d\n",err)); + if(conn) { + conn->err = err; + conn->pcb.tcp = NULL; + if(conn->recvmbox!=SYS_MBOX_NULL) { + if(conn->callback) (*conn->callback)(conn,NETCONN_EVTRCVPLUS,0); + MQ_Send(conn->recvmbox,&dummy,MQ_MSG_BLOCK); + } + if(conn->mbox!=SYS_MBOX_NULL) { + MQ_Send(conn->mbox,&dummy,MQ_MSG_BLOCK); + } + if(conn->acceptmbox!=SYS_MBOX_NULL) { + if(conn->callback) (*conn->callback)(conn,NETCONN_EVTRCVPLUS,0); + MQ_Send(conn->acceptmbox,&dummy,MQ_MSG_BLOCK); + } + if(conn->sem!=SYS_SEM_NULL) { + LWP_SemPost(conn->sem); + } + } +} + +static err_t poll_tcp(void *arg,struct tcp_pcb *pcb) +{ + struct netconn *conn = (struct netconn*)arg; + + LWIP_DEBUGF(API_MSG_DEBUG, ("api_msg: poll_tcp\n")); + if(conn && conn->sem!=SYS_SEM_NULL && (conn->state==NETCONN_WRITE || conn->state==NETCONN_CLOSE)) + LWP_SemPost(conn->sem); + + return ERR_OK; +} + +static err_t sent_tcp(void *arg,struct tcp_pcb *pcb,u16 len) +{ + struct netconn *conn = (struct netconn*)arg; + + LWIP_DEBUGF(API_MSG_DEBUG, ("api_msg: sent_tcp: sent %d bytes\n",len)); + if(conn && conn->sem!=SYS_SEM_NULL) + LWP_SemPost(conn->sem); + + if(conn && conn->callback) { + if(tcp_sndbuf(conn->pcb.tcp)>TCP_SNDLOWAT) + (*conn->callback)(conn,NETCONN_EVTSENDPLUS,len); + } + return ERR_OK; +} + +static void setuptcp(struct netconn *conn) +{ + struct tcp_pcb *pcb = conn->pcb.tcp; + + tcp_arg(pcb,conn); + tcp_recv(pcb,recv_tcp); + tcp_sent(pcb,sent_tcp); + tcp_poll(pcb,poll_tcp,4); + tcp_err(pcb,err_tcp); +} + +static err_t accept_func(void *arg,struct tcp_pcb *newpcb,err_t err) +{ + sys_mbox mbox; + struct netconn *newconn,*conn = (struct netconn*)arg; + + LWIP_DEBUGF(API_LIB_DEBUG, ("accept_func: %p %p %d\n",arg,newpcb,err)); + + mbox = conn->acceptmbox; + newconn = memp_malloc(MEMP_NETCONN); + if(newconn==NULL) return ERR_MEM; + + if(MQ_Init(&newconn->recvmbox,MQBOX_SIZE)!=MQ_ERROR_SUCCESSFUL) { + memp_free(MEMP_NETCONN,newconn); + return ERR_MEM; + } + + if(MQ_Init(&newconn->mbox,MQBOX_SIZE)!=MQ_ERROR_SUCCESSFUL) { + MQ_Close(newconn->recvmbox); + memp_free(MEMP_NETCONN,newconn); + return ERR_MEM; + } + + if(LWP_SemInit(&newconn->sem,0,1)==-1) { + MQ_Close(newconn->recvmbox); + MQ_Close(newconn->mbox); + memp_free(MEMP_NETCONN,newconn); + return ERR_MEM; + } + + newconn->type = NETCONN_TCP; + newconn->pcb.tcp = newpcb; + setuptcp(newconn); + + newconn->acceptmbox = SYS_MBOX_NULL; + newconn->err = err; + + if(conn->callback) { + (*conn->callback)(conn,NETCONN_EVTRCVPLUS,0); + } + newconn->callback = conn->callback; + newconn->socket = -1; + newconn->recvavail = 0; + + MQ_Send(mbox,newconn,MQ_MSG_BLOCK); + return ERR_OK; +} + +static void do_newconn(struct apimsg_msg *msg) +{ + u32 dummy = 0; + + if(msg->conn->pcb.tcp) { + MQ_Send(msg->conn->mbox,&dummy,MQ_MSG_BLOCK); + return; + } + + msg->conn->err = ERR_OK; + switch(msg->conn->type) { + case NETCONN_RAW: + msg->conn->pcb.raw = raw_new(msg->msg.bc.port); + raw_recv(msg->conn->pcb.raw,recv_raw,msg->conn); + break; + case NETCONN_UDPLITE: + msg->conn->pcb.udp = udp_new(); + if(!msg->conn->pcb.udp) { + msg->conn->err = ERR_MEM; + break; + } + udp_setflags(msg->conn->pcb.udp,UDP_FLAGS_UDPLITE); + udp_recv(msg->conn->pcb.udp,recv_udp,msg->conn); + break; + case NETCONN_UDPNOCHKSUM: + msg->conn->pcb.udp = udp_new(); + if(!msg->conn->pcb.udp) { + msg->conn->err = ERR_MEM; + break; + } + udp_setflags(msg->conn->pcb.udp,UDP_FLAGS_NOCHKSUM); + udp_recv(msg->conn->pcb.udp,recv_udp,msg->conn); + break; + case NETCONN_UDP: + msg->conn->pcb.udp = udp_new(); + if(!msg->conn->pcb.udp) { + msg->conn->err = ERR_MEM; + break; + } + udp_recv(msg->conn->pcb.udp,recv_udp,msg->conn); + break; + case NETCONN_TCP: + msg->conn->pcb.tcp = tcp_new(); + if(!msg->conn->pcb.tcp) { + msg->conn->err = ERR_MEM; + break; + } + setuptcp(msg->conn); + break; + default: + break; + } + MQ_Send(msg->conn->mbox,&dummy,MQ_MSG_BLOCK); +} + +static void do_delconn(struct apimsg_msg *msg) +{ + u32 dummy = 0; + + if(msg->conn->pcb.tcp) { + switch(msg->conn->type) { + case NETCONN_RAW: + raw_remove(msg->conn->pcb.raw); + break; + case NETCONN_UDPLITE: + case NETCONN_UDPNOCHKSUM: + case NETCONN_UDP: + msg->conn->pcb.udp->recv_arg = NULL; + udp_remove(msg->conn->pcb.udp); + break; + case NETCONN_TCP: + if(msg->conn->pcb.tcp->state==LISTEN) { + tcp_arg(msg->conn->pcb.tcp,NULL); + tcp_accept(msg->conn->pcb.tcp,NULL); + tcp_close(msg->conn->pcb.tcp); + } else { + tcp_arg(msg->conn->pcb.tcp,NULL); + tcp_sent(msg->conn->pcb.tcp,NULL); + tcp_recv(msg->conn->pcb.tcp,NULL); + tcp_poll(msg->conn->pcb.tcp,NULL,0); + tcp_err(msg->conn->pcb.tcp,NULL); + if(tcp_close(msg->conn->pcb.tcp)!=ERR_OK) + tcp_abort(msg->conn->pcb.tcp); + } + break; + default: + break; + } + } + if(msg->conn->callback) { + (*msg->conn->callback)(msg->conn,NETCONN_EVTRCVPLUS,0); + (*msg->conn->callback)(msg->conn,NETCONN_EVTSENDPLUS,0); + } + if(msg->conn->mbox!=SYS_MBOX_NULL) + MQ_Send(msg->conn->mbox,&dummy,MQ_MSG_BLOCK); +} + +static void do_bind(struct apimsg_msg *msg) +{ + u32 dummy = 0; + + if(msg->conn->pcb.tcp==NULL) { + switch(msg->conn->type) { + case NETCONN_RAW: + msg->conn->pcb.raw = raw_new(msg->msg.bc.port); + raw_recv(msg->conn->pcb.raw,recv_raw,msg->conn); + break; + case NETCONN_UDPLITE: + msg->conn->pcb.udp = udp_new(); + udp_setflags(msg->conn->pcb.udp,UDP_FLAGS_UDPLITE); + udp_recv(msg->conn->pcb.udp,recv_udp,msg->conn); + break; + case NETCONN_UDPNOCHKSUM: + msg->conn->pcb.udp = udp_new(); + udp_setflags(msg->conn->pcb.udp,UDP_FLAGS_NOCHKSUM); + udp_recv(msg->conn->pcb.udp,recv_udp,msg->conn); + break; + case NETCONN_UDP: + msg->conn->pcb.udp = udp_new(); + udp_recv(msg->conn->pcb.udp,recv_udp,msg->conn); + break; + case NETCONN_TCP: + msg->conn->pcb.tcp = tcp_new(); + setuptcp(msg->conn); + break; + default: + break; + } + } + switch(msg->conn->type) { + case NETCONN_RAW: + msg->conn->err = raw_bind(msg->conn->pcb.raw,msg->msg.bc.ipaddr); + break; + case NETCONN_UDPLITE: + case NETCONN_UDPNOCHKSUM: + case NETCONN_UDP: + msg->conn->err = udp_bind(msg->conn->pcb.udp,msg->msg.bc.ipaddr,msg->msg.bc.port); + break; + case NETCONN_TCP: + msg->conn->err = tcp_bind(msg->conn->pcb.tcp,msg->msg.bc.ipaddr,msg->msg.bc.port); + break; + default: + break; + } + MQ_Send(msg->conn->mbox,&dummy,MQ_MSG_BLOCK); +} + +static err_t do_connected(void *arg,struct tcp_pcb *pcb,err_t err) +{ + u32 dummy = 0; + struct netconn *conn = (struct netconn*)arg; + + if(!conn) return ERR_VAL; + + conn->err = err; + if(conn->type==NETCONN_TCP && err==ERR_OK) setuptcp(conn); + + MQ_Send(conn->mbox,&dummy,MQ_MSG_BLOCK); + return ERR_OK; +} + +static void do_connect(struct apimsg_msg *msg) +{ + u32 dummy = 0; + + if(!msg->conn->pcb.tcp) { + switch(msg->conn->type) { + case NETCONN_RAW: + msg->conn->pcb.raw = raw_new(msg->msg.bc.port); + raw_recv(msg->conn->pcb.raw,recv_raw,msg->conn); + break; + case NETCONN_UDPLITE: + msg->conn->pcb.udp = udp_new(); + if(!msg->conn->pcb.udp) { + msg->conn->err = ERR_MEM; + MQ_Send(msg->conn->mbox,&dummy,MQ_MSG_BLOCK); + return; + } + udp_setflags(msg->conn->pcb.udp,UDP_FLAGS_UDPLITE); + udp_recv(msg->conn->pcb.udp,recv_udp,msg->conn); + break; + case NETCONN_UDPNOCHKSUM: + msg->conn->pcb.udp = udp_new(); + if(!msg->conn->pcb.udp) { + msg->conn->err = ERR_MEM; + MQ_Send(msg->conn->mbox,&dummy,MQ_MSG_BLOCK); + return; + } + udp_setflags(msg->conn->pcb.udp,UDP_FLAGS_NOCHKSUM); + udp_recv(msg->conn->pcb.udp,recv_udp,msg->conn); + break; + case NETCONN_UDP: + msg->conn->pcb.udp = udp_new(); + if(!msg->conn->pcb.udp) { + msg->conn->err = ERR_MEM; + MQ_Send(msg->conn->mbox,&dummy,MQ_MSG_BLOCK); + return; + } + udp_recv(msg->conn->pcb.udp,recv_udp,msg->conn); + break; + case NETCONN_TCP: + msg->conn->pcb.tcp = tcp_new(); + if(!msg->conn->pcb.tcp) { + msg->conn->err = ERR_MEM; + MQ_Send(msg->conn->mbox,&dummy,MQ_MSG_BLOCK); + return; + } + break; + default: + break; + } + } + switch(msg->conn->type) { + case NETCONN_RAW: + raw_connect(msg->conn->pcb.raw,msg->msg.bc.ipaddr); + MQ_Send(msg->conn->mbox,&dummy,MQ_MSG_BLOCK); + break; + case NETCONN_UDPLITE: + case NETCONN_UDPNOCHKSUM: + case NETCONN_UDP: + udp_connect(msg->conn->pcb.udp,msg->msg.bc.ipaddr,msg->msg.bc.port); + MQ_Send(msg->conn->mbox,&dummy,MQ_MSG_BLOCK); + break; + case NETCONN_TCP: + setuptcp(msg->conn); + tcp_connect(msg->conn->pcb.tcp,msg->msg.bc.ipaddr,msg->msg.bc.port,do_connected); + break; + default: + break; + } +} + +static void do_disconnect(struct apimsg_msg *msg) +{ + u32 dummy = 0; + + switch(msg->conn->type) { + case NETCONN_RAW: + break; + case NETCONN_UDPLITE: + case NETCONN_UDPNOCHKSUM: + case NETCONN_UDP: + udp_disconnect(msg->conn->pcb.udp); + break; + case NETCONN_TCP: + break; + } + MQ_Send(msg->conn->mbox,&dummy,MQ_MSG_BLOCK); +} + +static void do_listen(struct apimsg_msg *msg) +{ + u32 dummy = 0; + + if(msg->conn->pcb.tcp!=NULL) { + switch(msg->conn->type) { + case NETCONN_RAW: + LWIP_DEBUGF(API_MSG_DEBUG, ("api_msg: listen RAW: cannot listen for RAW.\n")); + break; + case NETCONN_UDPLITE: + case NETCONN_UDPNOCHKSUM: + case NETCONN_UDP: + LWIP_DEBUGF(API_MSG_DEBUG, ("api_msg: listen UDP: cannot listen for UDP.\n")); + break; + case NETCONN_TCP: + msg->conn->pcb.tcp = tcp_listen(msg->conn->pcb.tcp); + if(msg->conn->pcb.tcp==NULL) + msg->conn->err = ERR_MEM; + else { + if(msg->conn->acceptmbox==SYS_MBOX_NULL) { + if(MQ_Init(&msg->conn->acceptmbox,MQBOX_SIZE)!=MQ_ERROR_SUCCESSFUL) { + msg->conn->err = ERR_MEM; + break; + } + } + tcp_arg(msg->conn->pcb.tcp,msg->conn); + tcp_accept(msg->conn->pcb.tcp,accept_func); + } + break; + default: + break; + } + } + MQ_Send(msg->conn->mbox,&dummy,MQ_MSG_BLOCK); +} + +static void do_accept(struct apimsg_msg *msg) +{ + if(msg->conn->pcb.tcp) { + switch(msg->conn->type) { + case NETCONN_RAW: + LWIP_DEBUGF(API_MSG_DEBUG, ("api_msg: accept RAW: cannot accept for RAW.\n")); + break; + case NETCONN_UDPLITE: + case NETCONN_UDPNOCHKSUM: + case NETCONN_UDP: + LWIP_DEBUGF(API_MSG_DEBUG, ("api_msg: accept UDP: cannot accept for UDP.\n")); + break; + case NETCONN_TCP: + break; + } + } +} + +static void do_send(struct apimsg_msg *msg) +{ + u32 dummy = 0; + + if(msg->conn->pcb.tcp) { + switch(msg->conn->type) { + case NETCONN_RAW: + raw_send(msg->conn->pcb.raw,msg->msg.p); + break; + case NETCONN_UDPLITE: + case NETCONN_UDPNOCHKSUM: + case NETCONN_UDP: + udp_send(msg->conn->pcb.udp,msg->msg.p); + break; + case NETCONN_TCP: + break; + } + } + MQ_Send(msg->conn->mbox,&dummy,MQ_MSG_BLOCK); +} + +static void do_recv(struct apimsg_msg *msg) +{ + u32 dummy = 0; + + if(msg->conn->pcb.tcp && msg->conn->type==NETCONN_TCP) { + tcp_recved(msg->conn->pcb.tcp,msg->msg.len); + } + MQ_Send(msg->conn->mbox,&dummy,MQ_MSG_BLOCK); +} + +static void do_write(struct apimsg_msg *msg) +{ + err_t err; + u32 dummy = 0; + + if(msg->conn->pcb.tcp) { + switch(msg->conn->type) { + case NETCONN_RAW: + case NETCONN_UDPLITE: + case NETCONN_UDPNOCHKSUM: + case NETCONN_UDP: + msg->conn->err = ERR_VAL; + break; + case NETCONN_TCP: + err = tcp_write(msg->conn->pcb.tcp,msg->msg.w.dataptr,msg->msg.w.len,msg->msg.w.copy); + if(err==ERR_OK && (!msg->conn->pcb.tcp->unacked || (msg->conn->pcb.tcp->flags&TF_NODELAY) + || msg->conn->pcb.tcp->snd_queuelen>1)) { + LWIP_DEBUGF(API_MSG_DEBUG, ("api_msg: TCP write: tcp_output.\n")); + tcp_output(msg->conn->pcb.tcp); + } + msg->conn->err = err; + if(msg->conn->callback) { + if(err==ERR_OK) { + if(tcp_sndbuf(msg->conn->pcb.tcp)<=TCP_SNDLOWAT) + (*msg->conn->callback)(msg->conn,NETCONN_EVTSENDMINUS,msg->msg.w.len); + } + } + break; + default: + break; + } + } + MQ_Send(msg->conn->mbox,&dummy,MQ_MSG_BLOCK); +} + +static void do_close(struct apimsg_msg *msg) +{ + u32 dummy = 0; + err_t err = ERR_OK; + + if(msg->conn->pcb.tcp) { + switch(msg->conn->type) { + case NETCONN_RAW: + case NETCONN_UDPLITE: + case NETCONN_UDPNOCHKSUM: + case NETCONN_UDP: + break; + case NETCONN_TCP: + if(msg->conn->pcb.tcp->state==LISTEN) + err = tcp_close(msg->conn->pcb.tcp); + else if(msg->conn->pcb.tcp->state==CLOSE_WAIT) + err = tcp_output(msg->conn->pcb.tcp); + msg->conn->err = err; + break; + default: + break; + } + } + MQ_Send(msg->conn->mbox,&dummy,MQ_MSG_BLOCK); +} + +static void apimsg_input(struct api_msg *msg) +{ + decode[msg->type](&(msg->msg)); +} + +static void apimsg_post(struct api_msg *msg) +{ + net_apimsg(msg); +} + +/* tcpip thread part */ +static err_t net_input(struct pbuf *p,struct netif *inp) +{ + struct net_msg *msg = memp_malloc(MEMP_TCPIP_MSG); + + LWIP_DEBUGF(TCPIP_DEBUG, ("net_input: %p %p\n", p,inp)); + + if(msg==NULL) { + LWIP_ERROR(("net_input: msg out of memory.\n")); + pbuf_free(p); + return ERR_MEM; + } + + msg->type = NETMSG_INPUT; + msg->msg.inp.p = p; + msg->msg.inp.net = inp; + MQ_Send(netthread_mbox,msg,MQ_MSG_BLOCK); + return ERR_OK; +} + +static void net_apimsg(struct api_msg *apimsg) +{ + struct net_msg *msg = memp_malloc(MEMP_TCPIP_MSG); + + LWIP_DEBUGF(TCPIP_DEBUG, ("net_apimsg: %p\n",apimsg)); + if(msg==NULL) { + LWIP_ERROR(("net_apimsg: msg out of memory.\n")); + memp_free(MEMP_API_MSG,apimsg); + return; + } + + msg->type = NETMSG_API; + msg->msg.apimsg = apimsg; + MQ_Send(netthread_mbox,msg,MQ_MSG_BLOCK); +} + +static err_t net_callback(void (*f)(void *),void *ctx) +{ + struct net_msg *msg = memp_malloc(MEMP_TCPIP_MSG); + + LWIP_DEBUGF(TCPIP_DEBUG, ("net_callback: %p(%p)\n", f,ctx)); + + if(msg==NULL) { + LWIP_ERROR(("net_apimsg: msg out of memory.\n")); + return ERR_MEM; + } + + msg->type = NETMSG_CALLBACK; + msg->msg.cb.f = f; + msg->msg.cb.ctx = ctx; + MQ_Send(netthread_mbox,msg,MQ_MSG_BLOCK); + return ERR_OK; +} + +static void* net_thread(void *arg) +{ + struct net_msg *msg; + struct timespec tb; + sys_sem sem = (sys_sem)arg; + + etharp_init(); + ip_init(); + udp_init(); + tcp_init(); + + + tb.tv_sec = ARP_TMR_INTERVAL/TB_MSPERSEC; + tb.tv_nsec = 0; + net_arp_ticks = __lwp_wd_calc_ticks(&tb); + __lwp_wd_initialize(&arp_time_cntrl,__arp_timer,ARP_TIMER_ID,NULL); + __lwp_wd_insert_ticks(&arp_time_cntrl,net_arp_ticks); + + tb.tv_sec = 0; + tb.tv_nsec = TCP_TMR_INTERVAL*TB_NSPERMS; + net_tcp_ticks = __lwp_wd_calc_ticks(&tb); + __lwp_wd_initialize(&tcp_timer_cntrl,__tcp_timer,TCP_TIMER_ID,NULL); + + LWP_SemPost(sem); + + LWIP_DEBUGF(TCPIP_DEBUG, ("net_thread(%p)\n",arg)); + + while(1) { + MQ_Receive(netthread_mbox,(mqmsg_t)&msg,MQ_MSG_BLOCK); + switch(msg->type) { + case NETMSG_API: + LWIP_DEBUGF(TCPIP_DEBUG, ("net_thread: API message %p\n", (void *)msg)); + apimsg_input(msg->msg.apimsg); + break; + case NETMSG_INPUT: + LWIP_DEBUGF(TCPIP_DEBUG, ("net_thread: IP packet %p\n", (void *)msg)); + bba_process(msg->msg.inp.p,msg->msg.inp.net); + break; + case NETMSG_CALLBACK: + LWIP_DEBUGF(TCPIP_DEBUG, ("net_thread: CALLBACK %p\n", (void *)msg)); + msg->msg.cb.f(msg->msg.cb.ctx); + break; + default: + break; + } + memp_free(MEMP_TCPIP_MSG,msg); + } + return NULL; +} + +/* sockets part */ +static s32 alloc_socket(struct netconn *conn) +{ + s32 i; + + LWP_SemWait(netsocket_sem); + + for(i=0;iNUM_SOCKETS) { + LWIP_DEBUGF(SOCKETS_DEBUG, ("get_socket(%d): invalid\n", s)); + return NULL; + } + sock = &sockets[s]; + if(!sock->conn) { + LWIP_DEBUGF(SOCKETS_DEBUG, ("get_socket(%d): no active\n", s)); + return NULL; + } + + return sock; +} + +static void evt_callback(struct netconn *conn,enum netconn_evt evt,u32 len) +{ + s32 s; + struct netsocket *sock; + struct netselect_cb *scb; + + if(conn) { + s = conn->socket; + if(s<0) { + if(evt==NETCONN_EVTRCVPLUS) + conn->socket--; + return; + } + sock = get_socket(s); + if(!sock) return; + } else + return; + + LWP_SemWait(sockselect_sem); + switch(evt) { + case NETCONN_EVTRCVPLUS: + sock->rcvevt++; + break; + case NETCONN_EVTRCVMINUS: + sock->rcvevt--; + break; + case NETCONN_EVTSENDPLUS: + sock->sendevt = 1; + break; + case NETCONN_EVTSENDMINUS: + sock->sendevt = 0; + break; + } + LWP_SemPost(sockselect_sem); + + while(1) { + LWP_SemWait(sockselect_sem); + for(scb = selectcb_list;scb;scb = scb->next) { + if(scb->signaled==0) { + if(scb->readset && FD_ISSET(s,scb->readset)) + if(sock->rcvevt) break; + if(scb->writeset && FD_ISSET(s,scb->writeset)) + if(sock->sendevt) break; + } + } + if(scb) { + scb->signaled = 1; + LWP_SemPost(sockselect_sem); + LWP_MutexLock(scb->cond_lck); + LWP_CondSignal(scb->cond); + LWP_MutexUnlock(scb->cond_lck); + } else { + LWP_SemPost(sockselect_sem); + break; + } + } + +} + +extern const devoptab_t dotab_stdnet; + +s32 if_configex(struct in_addr *local_ip,struct in_addr *netmask,struct in_addr *gateway,bool use_dhcp, int max_retries) +{ + s32 ret = 0; + struct ip_addr loc_ip, mask, gw; + struct netif *pnet; + struct timespec tb; + dev_s hbba = NULL; + + if(g_netinitiated) return 0; + g_netinitiated = 1; + +// AddDevice(&dotab_stdnet); +#ifdef STATS + stats_init(); +#endif /* STATS */ + + sys_init(); + mem_init(); + memp_init(); + pbuf_init(); + netif_init(); + + // init tcpip thread message box + if(MQ_Init(&netthread_mbox,MQBOX_SIZE)!=MQ_ERROR_SUCCESSFUL) return -1; + + // create & setup interface + loc_ip.addr = 0; + mask.addr = 0; + gw.addr = 0; + + + if(use_dhcp==FALSE) { + if( !gateway || gateway->s_addr==0 + || !local_ip || local_ip->s_addr==0 + || !netmask || netmask->s_addr==0 ) return -EINVAL; + loc_ip.addr = local_ip->s_addr; + mask.addr = netmask->s_addr; + gw.addr = gateway->s_addr; + } + hbba = bba_create(&g_hNetIF); + pnet = netif_add(&g_hNetIF,&loc_ip, &mask, &gw, hbba, bba_init, net_input); + if(pnet) { + netif_set_up(pnet); + netif_set_default(pnet); +#if (LWIP_DHCP) + if(use_dhcp==TRUE) { + //setup coarse timer + tb.tv_sec = DHCP_COARSE_TIMER_SECS; + tb.tv_nsec = 0; + net_dhcpcoarse_ticks = __lwp_wd_calc_ticks(&tb); + __lwp_wd_initialize(&dhcp_coarsetimer_cntrl, __dhcpcoarse_timer, DHCPCOARSE_TIMER_ID, NULL); + __lwp_wd_insert_ticks(&dhcp_coarsetimer_cntrl, net_dhcpcoarse_ticks); + + //setup fine timer + tb.tv_sec = 0; + tb.tv_nsec = DHCP_FINE_TIMER_MSECS * TB_NSPERMS; + net_dhcpfine_ticks = __lwp_wd_calc_ticks(&tb); + __lwp_wd_initialize(&dhcp_finetimer_cntrl, __dhcpfine_timer, DHCPFINE_TIMER_ID, NULL); + __lwp_wd_insert_ticks(&dhcp_finetimer_cntrl, net_dhcpfine_ticks); + + //now start dhcp client + dhcp_start(pnet); + } +#endif + } else + return -ENXIO; + + // setup loopinterface + IP4_ADDR(&loc_ip, 127, 0, 0, 1); + IP4_ADDR(&mask, 255, 0, 0, 0); + IP4_ADDR(&gw, 127, 0, 0, 1); + pnet = netif_add(&g_hLoopIF, &loc_ip, &mask, &gw, NULL, loopif_init, net_input); + + //last and least start the tcpip layer + ret = net_init(); + + if ( ret == 0 && use_dhcp == TRUE ) { + + int retries = max_retries; + // wait for dhcp to bind + while ( g_hNetIF.dhcp->state != DHCP_BOUND && retries > 0 ) { + retries--; + usleep(500000); + } + + if ( retries > 0 ) { + //copy back network addresses + if ( local_ip != NULL ) local_ip->s_addr = g_hNetIF.ip_addr.addr; + if ( gateway != NULL ) gateway->s_addr = g_hNetIF.gw.addr; + if ( netmask != NULL ) netmask->s_addr = g_hNetIF.netmask.addr; + } else { + ret = -ETIMEDOUT; + } + } + + return ret; +} + +s32 if_config(char *local_ip, char *netmask, char *gateway,bool use_dhcp, int max_retries) +{ + s32 ret = 0; + struct in_addr loc_ip, mask, gw; + + loc_ip.s_addr = 0; + mask.s_addr = 0; + gw.s_addr = 0; + + if ( local_ip != NULL ) loc_ip.s_addr = inet_addr(local_ip); + if ( netmask != NULL ) mask.s_addr = inet_addr(netmask); + if ( gateway != NULL ) gw.s_addr = inet_addr(gateway); + + ret = if_configex( &loc_ip, &mask, &gw, use_dhcp, max_retries); + + if (ret<0) return ret; + + if ( use_dhcp == TRUE ) { + //copy back network addresses + if ( local_ip != NULL ) strcpy(local_ip, inet_ntoa( loc_ip )); + if ( netmask != NULL ) strcpy(netmask, inet_ntoa( mask)); + if ( gateway != NULL ) strcpy(gateway, inet_ntoa( gw )); + } + return ret; +} + + +s32 net_init() +{ + sys_sem sem; + + if(tcpiplayer_inited) return 1; + + if(LWP_SemInit(&netsocket_sem,1,1)==-1) return -1; + if(LWP_SemInit(&sockselect_sem,1,1)==-1) { + LWP_SemDestroy(netsocket_sem); + return -1; + } + if(LWP_SemInit(&sem,0,1)==-1) { + LWP_SemDestroy(netsocket_sem); + LWP_SemDestroy(sockselect_sem); + return -1; + } + + if(LWP_CreateThread(&hnet_thread,net_thread,(void*)sem,netthread_stack,STACKSIZE,220)==-1) { + LWP_SemDestroy(netsocket_sem); + LWP_SemDestroy(sockselect_sem); + LWP_SemDestroy(sem); + return -1; + } + LWP_SemWait(sem); + LWP_SemDestroy(sem); + + tcpiplayer_inited = 1; + + return 0; +} + +s32 net_shutdown(s32 s,u32 how) +{ + return -1; +} + +s32 net_fcntl(s32 s, u32 cmd, u32 flags) +{ + return -1; +} + +s32 net_socket(u32 domain,u32 type,u32 protocol) +{ + s32 i; + struct netconn *conn; + + switch(type) { + case SOCK_RAW: + LWIP_DEBUGF(SOCKETS_DEBUG, ("net_socket(SOCK_RAW)\n")); + conn = netconn_new_with_proto_and_callback(NETCONN_RAW,protocol,evt_callback); + break; + case SOCK_DGRAM: + LWIP_DEBUGF(SOCKETS_DEBUG, ("net_socket(SOCK_DGRAM)\n")); + conn = netconn_new_with_callback(NETCONN_UDP,evt_callback); + break; + case SOCK_STREAM: + LWIP_DEBUGF(SOCKETS_DEBUG, ("net_socket(SOCK_STREAM)\n")); + conn = netconn_new_with_callback(NETCONN_TCP,evt_callback); + break; + default: + return -1; + } + if(!conn) return -1; + + i = alloc_socket(conn); + if(i==-1) { + netconn_delete(conn); + return -1; + } + + conn->socket = i; + return i; +} + +s32 net_accept(s32 s,struct sockaddr *addr,socklen_t *addrlen) +{ + struct netsocket *sock; + struct netconn *newconn; + struct ip_addr naddr = {0}; + u16 port = 0; + s32 newsock; + struct sockaddr_in sin; + + LWIP_DEBUGF(SOCKETS_DEBUG, ("net_accept(%d)\n", s)); + + sock = get_socket(s); + if(!sock) return -ENOTSOCK; + + newconn = netconn_accept(sock->conn); + netconn_peer(newconn,&naddr,&port); + + memset(&sin,0,sizeof(sin)); + sin.sin_family = AF_INET; + sin.sin_port = htons(port); + sin.sin_addr.s_addr = naddr.addr; + + if(*addrlen>sizeof(sin)) + *addrlen = sizeof(sin); + memcpy(addr,&sin,*addrlen); + + newsock = alloc_socket(newconn); + if(newsock==-1) { + netconn_delete(newconn); + return -1; + } + + newconn->callback = evt_callback; + sock = get_socket(newsock); + + LWP_SemWait(netsocket_sem); + sock->rcvevt += -1 - newconn->socket; + newconn->socket = newsock; + LWP_SemPost(netsocket_sem); + + return newsock; +} + +s32 net_bind(s32 s,struct sockaddr *name,socklen_t namelen) +{ + struct netsocket *sock; + struct ip_addr loc_addr; + u16 loc_port; + err_t err; + + sock = get_socket(s); + if(!sock) return -ENOTSOCK; + + loc_addr.addr = ((struct sockaddr_in*)name)->sin_addr.s_addr; + loc_port = ((struct sockaddr_in*)name)->sin_port; + + err = netconn_bind(sock->conn,&loc_addr,ntohs(loc_port)); + if(err!=ERR_OK) return -1; + + return 0; +} + +s32 net_listen(s32 s,u32 backlog) +{ + struct netsocket *sock; + err_t err; + + LWIP_DEBUGF(SOCKETS_DEBUG, ("net_listen(%d, backlog=%d)\n", s, backlog)); + sock = get_socket(s); + if(!sock) return -ENOTSOCK; + + err = netconn_listen(sock->conn); + if(err!=ERR_OK) { + LWIP_DEBUGF(SOCKETS_DEBUG, ("net_listen(%d) failed, err=%d\n", s, err)); + return -1; + } + return 0; +} + +s32 net_recvfrom(s32 s,void *mem,s32 len,u32 flags,struct sockaddr *from,socklen_t *fromlen) +{ + struct netsocket *sock; + struct netbuf *buf; + u16 buflen,copylen; + struct ip_addr *addr; + u16 port; + + LWIP_DEBUGF(SOCKETS_DEBUG, ("net_recvfrom(%d, %p, %d, 0x%x, ..)\n", s, mem, len, flags)); + if(mem==NULL || len<=0) return -EINVAL; + + sock = get_socket(s); + if(!sock) return -ENOTSOCK; + + if(sock->lastdata) + buf = sock->lastdata; + else { + if(((flags&MSG_DONTWAIT) || (sock->flags&O_NONBLOCK)) && !sock->rcvevt) { + LWIP_DEBUGF(SOCKETS_DEBUG, ("net_recvfrom(%d): returning EWOULDBLOCK\n", s)); + return -EAGAIN; + } + buf = netconn_recv(sock->conn); + if(!buf) { + LWIP_DEBUGF(SOCKETS_DEBUG, ("net_recvfrom(%d): buf == NULL!\n", s)); + return 0; + } + } + + buflen = netbuf_len(buf); + buflen -= sock->lastoffset; + if(buflen<=0) + return 0; + if(len>buflen) + copylen = buflen; + else + copylen = len; + + netbuf_copypartial(buf,mem,copylen,sock->lastoffset); + + if(from && fromlen) { + struct sockaddr_in sin; + + addr = netbuf_fromaddr(buf); + port = netbuf_fromport(buf); + + memset(&sin,0,sizeof(sin)); + sin.sin_family = AF_INET; + sin.sin_port = htons(port); + sin.sin_addr.s_addr = addr->addr; + + if(*fromlen>sizeof(sin)) + *fromlen = sizeof(sin); + + memcpy(from,&sin,*fromlen); + + LWIP_DEBUGF(SOCKETS_DEBUG, ("net_recvfrom(%d): addr=", s)); + ip_addr_debug_print(SOCKETS_DEBUG, addr); + LWIP_DEBUGF(SOCKETS_DEBUG, (" port=%u len=%u\n", port, copylen)); + } + if(netconn_type(sock->conn)==NETCONN_TCP && (buflen-copylen)>0) { + sock->lastdata = buf; + sock->lastoffset += copylen; + } else { + sock->lastdata = NULL; + sock->lastoffset = 0; + netbuf_delete(buf); + } + return copylen; +} + +s32 net_read(s32 s,void *mem,s32 len) +{ + return net_recvfrom(s,mem,len,0,NULL,NULL); +} + +s32 net_recv(s32 s,void *mem,s32 len,u32 flags) +{ + return net_recvfrom(s,mem,len,flags,NULL,NULL); +} + +s32 net_sendto(s32 s,const void *data,s32 len,u32 flags,struct sockaddr *to,socklen_t tolen) +{ + struct netsocket *sock; + struct ip_addr remote_addr, addr; + u16_t remote_port, port = 0; + s32 ret,connected; + + LWIP_DEBUGF(SOCKETS_DEBUG, ("net_sendto(%d, data=%p, size=%d, flags=0x%x)\n", s, data, len, flags)); + if(data==NULL || len<=0) return -EINVAL; + + sock = get_socket(s); + if (!sock) return -ENOTSOCK; + + /* get the peer if currently connected */ + connected = (netconn_peer(sock->conn, &addr, &port) == ERR_OK); + + remote_addr.addr = ((struct sockaddr_in *)to)->sin_addr.s_addr; + remote_port = ((struct sockaddr_in *)to)->sin_port; + + LWIP_DEBUGF(SOCKETS_DEBUG, ("net_sendto(%d, data=%p, size=%d, flags=0x%x to=", s, data, len, flags)); + ip_addr_debug_print(SOCKETS_DEBUG, &remote_addr); + LWIP_DEBUGF(SOCKETS_DEBUG, (" port=%u\n", ntohs(remote_port))); + + netconn_connect(sock->conn, &remote_addr, ntohs(remote_port)); + + ret = net_send(s, data, len, flags); + + /* reset the remote address and port number + of the connection */ + if (connected) + netconn_connect(sock->conn, &addr, port); + else + netconn_disconnect(sock->conn); + return ret; +} + +s32 net_send(s32 s,const void *data,s32 len,u32 flags) +{ + struct netsocket *sock; + struct netbuf *buf; + err_t err; + + LWIP_DEBUGF(SOCKETS_DEBUG, ("net_send(%d, data=%p, size=%d, flags=0x%x)\n", s, data, len, flags)); + if(data==NULL || len<=0) return -EINVAL; + + sock = get_socket(s); + if(!sock) return -ENOTSOCK; + + switch(netconn_type(sock->conn)) { + case NETCONN_RAW: + case NETCONN_UDP: + case NETCONN_UDPLITE: + case NETCONN_UDPNOCHKSUM: + buf = netbuf_new(); + if(!buf) { + LWIP_DEBUGF(SOCKETS_DEBUG, ("net_send(%d) ENOBUFS\n", s)); + return -ENOBUFS; + } + netbuf_ref(buf,data,len); + err = netconn_send(sock->conn,buf); + netbuf_delete(buf); + break; + case NETCONN_TCP: + err = netconn_write(sock->conn,data,len,NETCONN_COPY); + break; + default: + err = ERR_ARG; + break; + } + if(err!=ERR_OK) { + LWIP_DEBUGF(SOCKETS_DEBUG, ("net_send(%d) err=%d\n", s, err)); + return -1; + } + + LWIP_DEBUGF(SOCKETS_DEBUG, ("net_send(%d) ok size=%d\n", s, len)); + return len; +} + +s32 net_write(s32 s,const void *data,s32 size) +{ + return net_send(s,data,size,0); +} + +s32 net_connect(s32 s,struct sockaddr *name,socklen_t namelen) +{ + struct netsocket *sock; + err_t err; + + sock = get_socket(s); + if(!sock) return -ENOTSOCK; + + if(((struct sockaddr_in*)name)->sin_family==AF_UNSPEC) { + LWIP_DEBUGF(SOCKETS_DEBUG, ("net_connect(%d, AF_UNSPEC)\n", s)); + err = netconn_disconnect(sock->conn); + } else { + struct ip_addr remote_addr; + u16 remote_port; + + remote_addr.addr = ((struct sockaddr_in*)name)->sin_addr.s_addr; + remote_port = ((struct sockaddr_in*)name)->sin_port; + + LWIP_DEBUGF(SOCKETS_DEBUG, ("net_connect(%d, addr=", s)); + ip_addr_debug_print(SOCKETS_DEBUG, &remote_addr); + LWIP_DEBUGF(SOCKETS_DEBUG, (" port=%u)\n", ntohs(remote_port))); + + err = netconn_connect(sock->conn,&remote_addr,ntohs(remote_port)); + } + if(err!=ERR_OK) { + LWIP_DEBUGF(SOCKETS_DEBUG, ("net_connect(%d) failed, err=%d\n", s, err)); + return -1; + } + + LWIP_DEBUGF(SOCKETS_DEBUG, ("net_connect(%d) succeeded\n", s)); + return -EISCONN; +} + +s32 net_close(s32 s) +{ + struct netsocket *sock; + + LWIP_DEBUGF(SOCKETS_DEBUG, ("net_close(%d)\n", s)); + + LWP_SemWait(netsocket_sem); + + sock = get_socket(s); + if(!sock) { + LWP_SemPost(netsocket_sem); + return -ENOTSOCK; + } + + netconn_delete(sock->conn); + if(sock->lastdata) netbuf_delete(sock->lastdata); + + sock->lastdata = NULL; + sock->lastoffset = 0; + sock->conn = NULL; + + LWP_SemPost(netsocket_sem); + return 0; +} + +static s32 net_selscan(s32 maxfdp1,fd_set *readset,fd_set *writeset,fd_set *exceptset) +{ + s32 i,nready = 0; + fd_set lreadset,lwriteset,lexceptset; + struct netsocket *sock; + + FD_ZERO(&lreadset); + FD_ZERO(&lwriteset); + FD_ZERO(&lexceptset); + + for(i=0;ilastdata || sock->rcvevt)) { + FD_SET(i,&lreadset); + nready++; + } + } + if(FD_ISSET(i,writeset)) { + sock = get_socket(i); + if(sock && sock->sendevt) { + FD_SET(i,&lwriteset); + nready++; + } + } + } + *readset = lreadset; + *writeset = lwriteset; + FD_ZERO(exceptset); + + return nready; +} + +s32 net_select(s32 maxfdp1,fd_set *readset,fd_set *writeset,fd_set *exceptset,struct timeval *timeout) +{ + s32 i,nready; + fd_set lreadset,lwriteset,lexceptset; + struct timespec tb,*p_tb; + struct netselect_cb sel_cb; + struct netselect_cb *psel_cb; + + sel_cb.next = NULL; + sel_cb.readset = readset; + sel_cb.writeset = writeset; + sel_cb.exceptset = exceptset; + sel_cb.signaled = 0; + + LWP_SemWait(sockselect_sem); + + if(readset) + lreadset = *readset; + else + FD_ZERO(&lreadset); + + if(writeset) + lwriteset = *writeset; + else + FD_ZERO(&lwriteset); + + if(exceptset) + lexceptset = *exceptset; + else + FD_ZERO(&lexceptset); + + nready = net_selscan(maxfdp1,&lreadset,&lwriteset,&lexceptset); + if(!nready) { + if(timeout && timeout->tv_sec==0 && timeout->tv_usec==0) { + LWP_SemPost(sockselect_sem); + if(readset) + FD_ZERO(readset); + if(writeset) + FD_ZERO(writeset); + if(exceptset) + FD_ZERO(exceptset); + return 0; + } + + LWP_MutexInit(&sel_cb.cond_lck,FALSE); + LWP_CondInit(&sel_cb.cond); + sel_cb.next = selectcb_list; + selectcb_list = &sel_cb; + + LWP_SemPost(sockselect_sem); + if(timeout==NULL) + p_tb = NULL; + else { + tb.tv_sec = timeout->tv_sec; + tb.tv_nsec = (timeout->tv_usec+500)*TB_NSPERUS; + p_tb = &tb; + } + + LWP_MutexLock(sel_cb.cond_lck); + i = LWP_CondTimedWait(sel_cb.cond,sel_cb.cond_lck,p_tb); + LWP_MutexUnlock(sel_cb.cond_lck); + + LWP_SemWait(sockselect_sem); + if(selectcb_list==&sel_cb) + selectcb_list = sel_cb.next; + else { + for(psel_cb = selectcb_list;psel_cb;psel_cb = psel_cb->next) { + if(psel_cb->next==&sel_cb) { + psel_cb->next = sel_cb.next; + break; + } + } + } + LWP_CondDestroy(sel_cb.cond); + LWP_MutexDestroy(sel_cb.cond_lck); + + LWP_SemPost(sockselect_sem); + + if(i==ETIMEDOUT) { + if(readset) + FD_ZERO(readset); + if(writeset) + FD_ZERO(writeset); + if(exceptset) + FD_ZERO(exceptset); + return 0; + } + + if(readset) + lreadset = *readset; + else + FD_ZERO(&lreadset); + + if(writeset) + lwriteset = *writeset; + else + FD_ZERO(&lwriteset); + + if(exceptset) + lexceptset = *exceptset; + else + FD_ZERO(&lexceptset); + + nready = net_selscan(maxfdp1,&lreadset,&lwriteset,&lexceptset); + } else + LWP_SemPost(sockselect_sem); + + if(readset) + *readset = lreadset; + if(writeset) + *writeset = lwriteset; + if(exceptset) + *exceptset = lexceptset; + + return nready; +} + +s32 net_setsockopt(s32 s,u32 level,u32 optname,const void *optval,socklen_t optlen) +{ + s32 err = 0; + struct netsocket *sock; + + sock = get_socket(s); + if(sock==NULL) return -ENOTSOCK; + if(optval==NULL) return -EINVAL; + + switch(level) { + case SOL_SOCKET: + { + switch(optname) { + case SO_BROADCAST: + case SO_KEEPALIVE: + case SO_REUSEADDR: + case SO_REUSEPORT: + if(optlenconn->type!=NETCONN_TCP) return 0; + + switch(optname) { + case TCP_NODELAY: + case TCP_KEEPALIVE: + break; + default: + LWIP_DEBUGF(SOCKETS_DEBUG, ("net_setsockopt(%d, IPPROTO_TCP, UNIMPL: optname=0x%x, ..)\n", s, optname)); + err = ENOPROTOOPT; + } + } + break; + + default: + LWIP_DEBUGF(SOCKETS_DEBUG, ("net_setsockopt(%d, level=0x%x, UNIMPL: optname=0x%x, ..)\n", s, level, optname)); + err = ENOPROTOOPT; + } + if(err!=0) return -1; + + switch(level) { + case SOL_SOCKET: + { + switch(optname) { + case SO_BROADCAST: + case SO_KEEPALIVE: + case SO_REUSEADDR: + case SO_REUSEPORT: + if(*(u32*)optval) + sock->conn->pcb.tcp->so_options |= optname; + else + sock->conn->pcb.tcp->so_options &= ~optname; + LWIP_DEBUGF(SOCKETS_DEBUG, ("net_setsockopt(%d, SOL_SOCKET, optname=0x%x, ..) -> %s\n", s, optname, (*(u32*)optval?"on":"off"))); + break; + } + } + break; + + case IPPROTO_IP: + { + switch(optname) { + case IP_TTL: + sock->conn->pcb.tcp->ttl = (u8)(*(u32*)optval); + LWIP_DEBUGF(SOCKETS_DEBUG, ("net_setsockopt(%d, IPPROTO_IP, IP_TTL, ..) -> %u\n", s, sock->conn->pcb.tcp->ttl)); + break; + case IP_TOS: + sock->conn->pcb.tcp->tos = (u8)(*(u32*)optval); + LWIP_DEBUGF(SOCKETS_DEBUG, ("net_setsockopt(%d, IPPROTO_IP, IP_TOS, ..)-> %u\n", s, sock->conn->pcb.tcp->tos)); + break; + } + } + break; + + case IPPROTO_TCP: + { + switch(optname) { + case TCP_NODELAY: + if(*(u32*)optval) + sock->conn->pcb.tcp->flags |= TF_NODELAY; + else + sock->conn->pcb.tcp->flags &= ~TF_NODELAY; + LWIP_DEBUGF(SOCKETS_DEBUG, ("net_setsockopt(%d, IPPROTO_TCP, TCP_NODELAY) -> %s\n", s, (*(u32*)optval)?"on":"off") ); + break; + case TCP_KEEPALIVE: + sock->conn->pcb.tcp->keepalive = (u32)(*(u32*)optval); + LWIP_DEBUGF(SOCKETS_DEBUG, ("net_setsockopt(%d, IPPROTO_TCP, TCP_KEEPALIVE) -> %u\n", s, sock->conn->pcb.tcp->keepalive)); + break; + } + } + } + return err?-1:0; +} + +s32 net_ioctl(s32 s, u32 cmd, void *argp) +{ + struct netsocket *sock = get_socket(s); + + if(!sock) return -ENOTSOCK; + + switch (cmd) { + case FIONREAD: + if(!argp) return -EINVAL; + + *((u16_t*)argp) = sock->conn->recvavail; + + LWIP_DEBUGF(SOCKETS_DEBUG, ("net_ioctl(%d, FIONREAD, %p) = %u\n", s, argp, *((u16*)argp))); + return 0; + + case FIONBIO: + if(argp && *(u32*)argp) + sock->flags |= O_NONBLOCK; + else + sock->flags &= ~O_NONBLOCK; + LWIP_DEBUGF(SOCKETS_DEBUG, ("net_ioctl(%d, FIONBIO, %d)\n", s, !!(sock->flags&O_NONBLOCK))); + return 0; + + default: + LWIP_DEBUGF(SOCKETS_DEBUG, ("net_ioctl(%d, UNIMPL: 0x%lx, %p)\n", s, cmd, argp)); + return -EINVAL; + } +} diff --git a/wii/libogc/wiiuse/classic.c b/wii/libogc/wiiuse/classic.c new file mode 100644 index 0000000000..671522c21c --- /dev/null +++ b/wii/libogc/wiiuse/classic.c @@ -0,0 +1,225 @@ +/* + * wiiuse + * + * Written By: + * Michael Laforest < para > + * Email: < thepara (--AT--) g m a i l [--DOT--] com > + * + * Copyright 2006-2007 + * + * This file is part of wiiuse. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * $Header: /lvm/shared/ds/ds/cvs/devkitpro-cvsbackup/libogc/wiiuse/classic.c,v 1.7 2008-11-14 13:34:57 shagkur Exp $ + * + */ + +/** + * @file + * @brief Classic controller expansion device. + */ + +#include +#include +#include +#include + +#ifdef WIN32 + #include +#endif + +#include "definitions.h" +#include "wiiuse_internal.h" +#include "dynamics.h" +#include "events.h" +#include "classic.h" +#include "io.h" + +static void classic_ctrl_pressed_buttons(struct classic_ctrl_t* cc, short now); + +/** + * @brief Handle the handshake data from the classic controller. + * + * @param cc A pointer to a classic_ctrl_t structure. + * @param data The data read in from the device. + * @param len The length of the data block, in bytes. + * + * @return Returns 1 if handshake was successful, 0 if not. + */ +int classic_ctrl_handshake(struct wiimote_t* wm, struct classic_ctrl_t* cc, ubyte* data, uword len) { + //int i; + int offset = 0; + + cc->btns = 0; + cc->btns_held = 0; + cc->btns_released = 0; + + /* decrypt data */ + /* + for (i = 0; i < len; ++i) + data[i] = (data[i] ^ 0x17) + 0x17; + */ + + /* is this a wiiu pro? */ + if (len > 223 && data[223] == 0x20) { + cc->ljs.max.x = cc->ljs.max.y = 0xFF; + cc->ljs.min.x = cc->ljs.min.y = 0; + cc->ljs.center.x = cc->ljs.center.y = 0x80; + + cc->rjs = cc->ljs; + + cc->type = 2; + } + else { + if (data[offset] == 0xFF) { + /* + * Sometimes the data returned here is not correct. + * This might happen because the wiimote is lagging + * behind our initialization sequence. + * To fix this just request the handshake again. + * + * Other times it's just the first 16 bytes are 0xFF, + * but since the next 16 bytes are the same, just use + * those. + */ + if (data[offset + 16] == 0xFF) { + /* get the calibration data again */ + WIIUSE_DEBUG("Classic controller handshake appears invalid, trying again."); + wiiuse_read_data(wm, data, WM_EXP_MEM_CALIBR, EXP_HANDSHAKE_LEN, wiiuse_handshake_expansion); + } else + offset += 16; + } + + if (len > 218 && data[218]) + cc->type = 1; /* classic controller pro (no analog triggers) */ + else + cc->type = 0; /* original classic controller (analog triggers) */ + + /* joystick stuff */ + cc->ljs.max.x = data[0 + offset] / 4 == 0 ? 64 : data[0 + offset] / 4; + cc->ljs.min.x = data[1 + offset] / 4; + cc->ljs.center.x = data[2 + offset] / 4 == 0 ? 32 : data[2 + offset] / 4; + cc->ljs.max.y = data[3 + offset] / 4 == 0 ? 64 : data[3 + offset] / 4; + cc->ljs.min.y = data[4 + offset] / 4; + cc->ljs.center.y = data[5 + offset] / 4 == 0 ? 32 : data[5 + offset] / 4; + + cc->rjs.max.x = data[6 + offset] / 8 == 0 ? 32 : data[6 + offset] / 8; + cc->rjs.min.x = data[7 + offset] / 8; + cc->rjs.center.x = data[8 + offset] / 8 == 0 ? 16 : data[8 + offset] / 8; + cc->rjs.max.y = data[9 + offset] / 8 == 0 ? 32 : data[9 + offset] / 8; + cc->rjs.min.y = data[10 + offset] / 8; + cc->rjs.center.y = data[11 + offset] / 8 == 0 ? 16 : data[11 + offset] / 8; + } + /* handshake done */ + wm->event = WIIUSE_CLASSIC_CTRL_INSERTED; + wm->exp.type = EXP_CLASSIC; + + #ifdef WIN32 + wm->timeout = WIIMOTE_DEFAULT_TIMEOUT; + #endif + + return 1; +} + + +/** + * @brief The classic controller disconnected. + * + * @param cc A pointer to a classic_ctrl_t structure. + */ +void classic_ctrl_disconnected(struct classic_ctrl_t* cc) +{ + memset(cc, 0, sizeof(struct classic_ctrl_t)); +} + + + +/** + * @brief Handle classic controller event. + * + * @param cc A pointer to a classic_ctrl_t structure. + * @param msg The message specified in the event packet. + */ +void classic_ctrl_event(struct classic_ctrl_t* cc, ubyte* msg) { + //int i; + + /* decrypt data */ + /* + for (i = 0; i < 6; ++i) + msg[i] = (msg[i] ^ 0x17) + 0x17; + */ + if (cc->type==2) { + classic_ctrl_pressed_buttons(cc, BIG_ENDIAN_SHORT(*(short*)(msg + 8))); + + /* 12-bit little endian values adjusted to 8-bit */ + cc->ljs.pos.x = (msg[0] >> 4) | (msg[1] << 4); + cc->rjs.pos.x = (msg[2] >> 4) | (msg[3] << 4); + cc->ljs.pos.y = (msg[4] >> 4) | (msg[5] << 4); + cc->rjs.pos.y = (msg[6] >> 4) | (msg[7] << 4); + + cc->ls_raw = cc->btns & CLASSIC_CTRL_BUTTON_FULL_L ? 0x1F : 0; + cc->rs_raw = cc->btns & CLASSIC_CTRL_BUTTON_FULL_R ? 0x1F : 0; + } + else { + classic_ctrl_pressed_buttons(cc, BIG_ENDIAN_SHORT(*(short*)(msg + 4))); + + /* left/right buttons */ + cc->ls_raw = (((msg[2] & 0x60) >> 2) | ((msg[3] & 0xE0) >> 5)); + cc->rs_raw = (msg[3] & 0x1F); + + /* + * TODO - LR range hardcoded from 0x00 to 0x1F. + * This is probably in the calibration somewhere. + */ +#ifndef GEKKO + cc->r_shoulder = ((float)r / 0x1F); + cc->l_shoulder = ((float)l / 0x1F); +#endif + /* calculate joystick orientation */ + cc->ljs.pos.x = (msg[0] & 0x3F); + cc->ljs.pos.y = (msg[1] & 0x3F); + cc->rjs.pos.x = ((msg[0] & 0xC0) >> 3) | ((msg[1] & 0xC0) >> 5) | ((msg[2] & 0x80) >> 7); + cc->rjs.pos.y = (msg[2] & 0x1F); + } + +#ifndef GEKKO + calc_joystick_state(&cc->ljs, cc->ljs.pos.x, cc->ljs.pos.y); + calc_joystick_state(&cc->rjs, cc->rjs.pos.x, cc->rjs.pos.y); +#endif +} + + +/** + * @brief Find what buttons are pressed. + * + * @param cc A pointer to a classic_ctrl_t structure. + * @param msg The message byte specified in the event packet. + */ +static void classic_ctrl_pressed_buttons(struct classic_ctrl_t* cc, short now) { + /* message is inverted (0 is active, 1 is inactive) */ + now = ~now & CLASSIC_CTRL_BUTTON_ALL; + + /* preserve old btns pressed */ + cc->btns_last = cc->btns; + + /* pressed now & were pressed, then held */ + cc->btns_held = (now & cc->btns); + + /* were pressed or were held & not pressed now, then released */ + cc->btns_released = ((cc->btns | cc->btns_held) & ~now); + + /* buttons pressed now */ + cc->btns = now; +} diff --git a/wii/libogc/wiiuse/classic.h b/wii/libogc/wiiuse/classic.h new file mode 100644 index 0000000000..2e741efca5 --- /dev/null +++ b/wii/libogc/wiiuse/classic.h @@ -0,0 +1,56 @@ +/* + * wiiuse + * + * Written By: + * Michael Laforest < para > + * Email: < thepara (--AT--) g m a i l [--DOT--] com > + * + * Copyright 2006-2007 + * + * This file is part of wiiuse. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * $Header: /lvm/shared/ds/ds/cvs/devkitpro-cvsbackup/libogc/wiiuse/classic.h,v 1.1 2008-05-08 09:42:14 shagkur Exp $ + * + */ + +/** + * @file + * @brief Classic controller expansion device. + */ + +/* This source as presented is a modified version of original wiiuse for use + * with RetroArch, and must not be confused with the original software. */ + +#ifndef CLASSIC_H_INCLUDED +#define CLASSIC_H_INCLUDED + +#include "wiiuse_internal.h" + +#ifdef __cplusplus +extern "C" { +#endif + +int classic_ctrl_handshake(struct wiimote_t* wm, struct classic_ctrl_t* cc, ubyte* data, uword len); + +void classic_ctrl_disconnected(struct classic_ctrl_t* cc); + +void classic_ctrl_event(struct classic_ctrl_t* cc, ubyte* msg); + +#ifdef __cplusplus +} +#endif + +#endif // CLASSIC_H_INCLUDED diff --git a/wii/libogc/wiiuse/definitions.h b/wii/libogc/wiiuse/definitions.h new file mode 100644 index 0000000000..04dc5be6d8 --- /dev/null +++ b/wii/libogc/wiiuse/definitions.h @@ -0,0 +1,55 @@ +#ifndef __DEFINITIONS_H__ +#define __DEFINITIONS_H__ + +#include "os.h" + +#define WIIMOTE_PI 3.14159265f + +//#define WITH_WIIUSE_DEBUG + +/* Error output macros */ +#define WIIUSE_ERROR(fmt, ...) fprintf(stderr, "[ERROR] " fmt "\n", ##__VA_ARGS__) + +/* Warning output macros */ +#define WIIUSE_WARNING(fmt, ...) fprintf(stderr, "[WARNING] " fmt "\n", ##__VA_ARGS__) + +/* Information output macros */ +#define WIIUSE_INFO(fmt, ...) fprintf(stderr, "[INFO] " fmt "\n", ##__VA_ARGS__) + +#ifdef WITH_WIIUSE_DEBUG + #ifdef WIN32 + #define WIIUSE_DEBUG(fmt, ...) do { \ + char* file = __FILE__; \ + int i = strlen(file) - 1; \ + for (; i && (file[i] != '\\'); --i); \ + fprintf(stderr, "[DEBUG] %s:%i: " fmt "\n", file+i+1, __LINE__, ##__VA_ARGS__); \ + } while (0) + #else + #define WIIUSE_DEBUG(fmt, ...) fprintf(stderr, "[DEBUG] " __FILE__ ":%i: " fmt "\n", __LINE__, ##__VA_ARGS__) + #endif +#else + #define WIIUSE_DEBUG(fmt, ...) +#endif + +#if 1 +#define WII_DEBUG(fmt, ...) do { \ + printf("[WDEBUG] " __FILE__ ":%i: " fmt "\n", __LINE__, ##__VA_ARGS__); \ + usleep(3000000); \ + } while (0) +#else + #define WII_DEBUG(fmt, ...) +#endif + + +/* Convert between radians and degrees */ +#define RAD_TO_DEGREE(r) ((r * 180.0f) / WIIMOTE_PI) +#define DEGREE_TO_RAD(d) (d * (WIIMOTE_PI / 180.0f)) + +/* Convert to big endian */ +#define BIG_ENDIAN_LONG(i) (htonl(i)) +#define BIG_ENDIAN_SHORT(i) (htons(i)) + +#define absf(x) ((x >= 0) ? (x) : (x * -1.0f)) +#define diff_f(x, y) ((x >= y) ? (absf(x - y)) : (absf(y - x))) + +#endif diff --git a/wii/libogc/wiiuse/dynamics.c b/wii/libogc/wiiuse/dynamics.c new file mode 100644 index 0000000000..b30539e97b --- /dev/null +++ b/wii/libogc/wiiuse/dynamics.c @@ -0,0 +1,240 @@ +/* + * wiiuse + * + * Written By: + * Michael Laforest < para > + * Email: < thepara (--AT--) g m a i l [--DOT--] com > + * + * Copyright 2006-2007 + * + * This file is part of wiiuse. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * $Header: /lvm/shared/ds/ds/cvs/devkitpro-cvsbackup/libogc/wiiuse/dynamics.c,v 1.2 2008-11-14 13:34:57 shagkur Exp $ + * + */ + +/** + * @file + * @brief Handles the dynamics of the wiimote. + * + * The file includes functions that handle the dynamics + * of the wiimote. Such dynamics include orientation and + * motion sensing. + */ + +#include +#include +#include + +#ifdef WIN32 + #include +#endif + +#include "definitions.h" +#include "wiiuse_internal.h" +#include "ir.h" +#include "dynamics.h" + +/** + * @brief Calculate the roll, pitch, yaw. + * + * @param ac An accelerometer (accel_t) structure. + * @param accel [in] Pointer to a vec3w_t structure that holds the raw acceleration data. + * @param orient [out] Pointer to a orient_t structure that will hold the orientation data. + * @param rorient [out] Pointer to a orient_t structure that will hold the non-smoothed orientation data. + * @param smooth If smoothing should be performed on the angles calculated. 1 to enable, 0 to disable. + * + * Given the raw acceleration data from the accelerometer struct, calculate + * the orientation of the device and set it in the \a orient parameter. + */ +void calculate_orientation(struct accel_t* ac, struct vec3w_t* accel, struct orient_t* orient, int smooth) { + float xg, yg, zg; + float x, y, z; + + /* + * roll - use atan(z / x) [ ranges from -180 to 180 ] + * pitch - use atan(z / y) [ ranges from -180 to 180 ] + * yaw - impossible to tell without IR + */ + + /* yaw - set to 0, IR will take care of it if it's enabled */ + orient->yaw = 0.0f; + + /* find out how much it has to move to be 1g */ + xg = (float)ac->cal_g.x; + yg = (float)ac->cal_g.y; + zg = (float)ac->cal_g.z; + + /* find out how much it actually moved and normalize to +/- 1g */ + x = ((float)accel->x - (float)ac->cal_zero.x) / xg; + y = ((float)accel->y - (float)ac->cal_zero.y) / yg; + z = ((float)accel->z - (float)ac->cal_zero.z) / zg; + + /* make sure x,y,z are between -1 and 1 for the tan functions */ + if (x < -1.0f) x = -1.0f; + else if (x > 1.0f) x = 1.0f; + if (y < -1.0f) y = -1.0f; + else if (y > 1.0f) y = 1.0f; + if (z < -1.0f) z = -1.0f; + else if (z > 1.0f) z = 1.0f; + + /* if it is over 1g then it is probably accelerating and not reliable */ + if (abs(accel->x - ac->cal_zero.x) <= (ac->cal_g.x+10)) { + /* roll */ + x = RAD_TO_DEGREE(atan2f(x, z)); + if(isfinite(x)) { + orient->roll = x; + orient->a_roll = x; + } + } + + if (abs(accel->y - ac->cal_zero.y) <= (ac->cal_g.y+10)) { + /* pitch */ + y = RAD_TO_DEGREE(atan2f(y, z)); + if(isfinite(y)) { + orient->pitch = y; + orient->a_pitch = y; + } + } + + /* smooth the angles if enabled */ + if (smooth) { + apply_smoothing(ac, orient, SMOOTH_ROLL); + apply_smoothing(ac, orient, SMOOTH_PITCH); + } +} + + +/** + * @brief Calculate the gravity forces on each axis. + * + * @param ac An accelerometer (accel_t) structure. + * @param accel [in] Pointer to a vec3w_t structure that holds the raw acceleration data. + * @param gforce [out] Pointer to a gforce_t structure that will hold the gravity force data. + */ +void calculate_gforce(struct accel_t* ac, struct vec3w_t* accel, struct gforce_t* gforce) { + float xg, yg, zg; + + /* find out how much it has to move to be 1g */ + xg = (float)ac->cal_g.x; + yg = (float)ac->cal_g.y; + zg = (float)ac->cal_g.z; + + /* find out how much it actually moved and normalize to +/- 1g */ + gforce->x = ((float)accel->x - (float)ac->cal_zero.x) / xg; + gforce->y = ((float)accel->y - (float)ac->cal_zero.y) / yg; + gforce->z = ((float)accel->z - (float)ac->cal_zero.z) / zg; +} + +static float applyCalibration(float inval,float minval, float maxval,float centerval) +{ + float ret; + /* We don't use the exact ranges but the ranges +1 in case we get bad calibration + * data - avoid div0 */ + + if (inval == centerval) + ret = 0; + else if (inval < centerval) + ret = (inval - centerval) / (centerval - minval + 1); + else + ret = (inval - centerval) / (maxval - centerval + 1); + return ret; +} + +/** + * @brief Calculate the angle and magnitude of a joystick. + * + * @param js [out] Pointer to a joystick_t structure. + * @param x The raw x-axis value. + * @param y The raw y-axis value. + */ +void calc_joystick_state(struct joystick_t* js, float x, float y) { + float rx, ry; + + /* + * Since the joystick center may not be exactly: + * (min + max) / 2 + * Then the range from the min to the center and the center to the max + * may be different. + * Because of this, depending on if the current x or y value is greater + * or less than the assoicated axis center value, it needs to be interpolated + * between the center and the minimum or maxmimum rather than between + * the minimum and maximum. + * + * So we have something like this: + * (x min) [-1] ---------*------ [0] (x center) [0] -------- [1] (x max) + * Where the * is the current x value. + * The range is therefore -1 to 1, 0 being the exact center rather than + * the middle of min and max. + */ + if (x == js->center.x) + rx = 0; + else if (x >= js->center.x) + rx = ((float)(x - js->center.x) / (float)(js->max.x - js->center.x)); + else + rx = ((float)(x - js->min.x) / (float)(js->center.x - js->min.x)) - 1.0f; + + if (y == js->center.y) + ry = 0; + else if (y >= js->center.y) + ry = ((float)(y - js->center.y) / (float)(js->max.y - js->center.y)); + else + ry = ((float)(y - js->min.y) / (float)(js->center.y - js->min.y)) - 1.0f; + + /* calculate the joystick angle and magnitude */ + js->ang = RAD_TO_DEGREE(atan2f(rx, ry)); + js->mag = hypotf(rx, ry); +} + + +void apply_smoothing(struct accel_t* ac, struct orient_t* orient, int type) { + switch (type) { + case SMOOTH_ROLL: + { + /* it's possible last iteration was nan or inf, so set it to 0 if that happened */ + if (isnan(ac->st_roll) || isinf(ac->st_roll)) + ac->st_roll = 0.0f; + + /* + * If the sign changes (which will happen if going from -180 to 180) + * or from (-1 to 1) then don't smooth, just use the new angle. + */ + if (((ac->st_roll < 0) && (orient->roll > 0)) || ((ac->st_roll > 0) && (orient->roll < 0))) { + ac->st_roll = orient->roll; + } else { + orient->roll = ac->st_roll + (ac->st_alpha * (orient->a_roll - ac->st_roll)); + ac->st_roll = orient->roll; + } + + return; + } + + case SMOOTH_PITCH: + { + if (isnan(ac->st_pitch) || isinf(ac->st_pitch)) + ac->st_pitch = 0.0f; + + if (((ac->st_pitch < 0) && (orient->pitch > 0)) || ((ac->st_pitch > 0) && (orient->pitch < 0))) { + ac->st_pitch = orient->pitch; + } else { + orient->pitch = ac->st_pitch + (ac->st_alpha * (orient->a_pitch - ac->st_pitch)); + ac->st_pitch = orient->pitch; + } + + return; + } + } +} diff --git a/wii/libogc/wiiuse/dynamics.h b/wii/libogc/wiiuse/dynamics.h new file mode 100644 index 0000000000..7d6f1ae642 --- /dev/null +++ b/wii/libogc/wiiuse/dynamics.h @@ -0,0 +1,59 @@ +/* + * wiiuse + * + * Written By: + * Michael Laforest < para > + * Email: < thepara (--AT--) g m a i l [--DOT--] com > + * + * Copyright 2006-2007 + * + * This file is part of wiiuse. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * $Header: /lvm/shared/ds/ds/cvs/devkitpro-cvsbackup/libogc/wiiuse/dynamics.h,v 1.2 2008-11-14 13:34:57 shagkur Exp $ + * + */ + +/** + * @file + * @brief Handles the dynamics of the wiimote. + * + * The file includes functions that handle the dynamics + * of the wiimote. Such dynamics include orientation and + * motion sensing. + */ + +/* This source as presented is a modified version of original wiiuse for use + * with RetroArch, and must not be confused with the original software. */ + +#ifndef DYNAMICS_H_INCLUDED +#define DYNAMICS_H_INCLUDED + +#include "wiiuse_internal.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void calculate_orientation(struct accel_t* ac, struct vec3w_t* accel, struct orient_t* orient, int smooth); +void calculate_gforce(struct accel_t* ac, struct vec3w_t* accel, struct gforce_t* gforce); +void calc_joystick_state(struct joystick_t* js, float x, float y); +void apply_smoothing(struct accel_t* ac, struct orient_t* orient, int type); + +#ifdef __cplusplus +} +#endif + +#endif // DYNAMICS_H_INCLUDED diff --git a/wii/libogc/wiiuse/events.c b/wii/libogc/wiiuse/events.c new file mode 100644 index 0000000000..4c435af2ee --- /dev/null +++ b/wii/libogc/wiiuse/events.c @@ -0,0 +1,336 @@ +/* This source as presented is a modified version of original wiiuse for use + * with RetroArch, and must not be confused with the original software. */ + +#include + +#ifndef WIN32 + #include + #include + #include +#else + #include +#endif + +#include +#include +#include +#include + +#include "dynamics.h" +#include "definitions.h" +#include "wiiuse_internal.h" +#include "events.h" +#include "nunchuk.h" +#include "classic.h" +#include "motion_plus.h" +#include "ir.h" +#include "io.h" + + +static void event_data_read(struct wiimote_t *wm,ubyte *msg) +{ + ubyte err; + ubyte len; + uword offset; + struct op_t *op; + struct cmd_blk_t *cmd = wm->cmd_head; + + wiiuse_pressed_buttons(wm,msg); + + if(!cmd) return; + if(!(cmd->state==CMD_SENT && cmd->data[0]==WM_CMD_READ_DATA)) return; + + //printf("event_data_read(%p)\n",cmd); + + err = msg[2]&0x0f; + op = (struct op_t*)cmd->data; + if(err) { + wm->cmd_head = cmd->next; + + cmd->state = CMD_DONE; + if(cmd->cb!=NULL) cmd->cb(wm,op->buffer,(op->readdata.size - op->wait)); + + __lwp_queue_append(&wm->cmdq,&cmd->node); + wiiuse_send_next_command(wm); + return; + } + + len = ((msg[2]&0xf0)>>4)+1; + offset = BIG_ENDIAN_SHORT(*(uword*)(msg+3)); + + //printf("addr: %08x\noffset: %d\nlen: %d\n",req->addr,offset,len); + + op->readdata.addr = (op->readdata.addr&0xffff); + op->wait -= len; + if(op->wait>=op->readdata.size) op->wait = 0; + + memcpy((op->buffer+offset-op->readdata.addr),(msg+5),len); + if(!op->wait) { + wm->cmd_head = cmd->next; + + wm->event = WIIUSE_READ_DATA; + cmd->state = CMD_DONE; + if(cmd->cb!=NULL) cmd->cb(wm,op->buffer,op->readdata.size); + + __lwp_queue_append(&wm->cmdq,&cmd->node); + wiiuse_send_next_command(wm); + } +} + +static void event_ack(struct wiimote_t *wm,ubyte *msg) +{ + struct cmd_blk_t *cmd = wm->cmd_head; + + wiiuse_pressed_buttons(wm,msg); + + if(!cmd || cmd->state!=CMD_SENT || cmd->data[0]==WM_CMD_READ_DATA || cmd->data[0]==WM_CMD_CTRL_STATUS || cmd->data[0]!=msg[2] || msg[3]) { + //WIIUSE_WARNING("Unsolicited event ack: report %02x status %02x", msg[2], msg[3]); + return; + } + + //WIIUSE_DEBUG("Received ack for command %02x %02x", cmd->data[0], cmd->data[1]); + + wm->cmd_head = cmd->next; + + wm->event = WIIUSE_ACK; + cmd->state = CMD_DONE; + if(cmd->cb) cmd->cb(wm,NULL,0); + + __lwp_queue_append(&wm->cmdq,&cmd->node); + wiiuse_send_next_command(wm); +} + +static void event_status(struct wiimote_t *wm,ubyte *msg) +{ + int ir = 0; + int attachment = 0; +#ifdef HAVE_WIIUSE_SPEAKER + int speaker = 0; +#endif + //int led[4]= {0}; + struct cmd_blk_t *cmd = wm->cmd_head; + + wiiuse_pressed_buttons(wm,msg); + + wm->event = WIIUSE_STATUS; + //if(msg[2]&WM_CTRL_STATUS_BYTE1_LED_1) led[0] = 1; + //if(msg[2]&WM_CTRL_STATUS_BYTE1_LED_2) led[1] = 1; + //if(msg[2]&WM_CTRL_STATUS_BYTE1_LED_3) led[2] = 1; + //if(msg[2]&WM_CTRL_STATUS_BYTE1_LED_4) led[3] = 1; + + if((msg[2]&WM_CTRL_STATUS_BYTE1_ATTACHMENT)==WM_CTRL_STATUS_BYTE1_ATTACHMENT) attachment = 1; +#ifdef HAVE_WIIUSE_SPEAKER + if((msg[2]&WM_CTRL_STATUS_BYTE1_SPEAKER_ENABLED)==WM_CTRL_STATUS_BYTE1_SPEAKER_ENABLED) speaker = 1; +#endif + if((msg[2]&WM_CTRL_STATUS_BYTE1_IR_ENABLED)==WM_CTRL_STATUS_BYTE1_IR_ENABLED) ir = 1; + + wm->battery_level = msg[5]; + + if(!ir && WIIMOTE_IS_SET(wm,WIIMOTE_STATE_IR_INIT)) { + WIIMOTE_DISABLE_STATE(wm, WIIMOTE_STATE_IR_INIT); + wiiuse_set_ir(wm, 1); + goto done; + } + if(ir && !WIIMOTE_IS_SET(wm,WIIMOTE_STATE_IR)) WIIMOTE_ENABLE_STATE(wm,WIIMOTE_STATE_IR); + else if(!ir && WIIMOTE_IS_SET(wm,WIIMOTE_STATE_IR)) WIIMOTE_DISABLE_STATE(wm, WIIMOTE_STATE_IR); + +#ifdef HAVE_WIIUSE_SPEAKER + if(!speaker && WIIMOTE_IS_SET(wm,WIIMOTE_STATE_SPEAKER_INIT)) { + WIIMOTE_DISABLE_STATE(wm,WIIMOTE_STATE_SPEAKER_INIT); + wiiuse_set_speaker(wm,1); + goto done; + } + if(speaker && !WIIMOTE_IS_SET(wm,WIIMOTE_STATE_SPEAKER)) WIIMOTE_ENABLE_STATE(wm,WIIMOTE_STATE_SPEAKER); + else if(!speaker && WIIMOTE_IS_SET(wm,WIIMOTE_STATE_SPEAKER)) WIIMOTE_DISABLE_STATE(wm,WIIMOTE_STATE_SPEAKER); +#endif + + if(attachment) { + if(!WIIMOTE_IS_SET(wm,WIIMOTE_STATE_EXP) && !WIIMOTE_IS_SET(wm,WIIMOTE_STATE_EXP_FAILED) && !WIIMOTE_IS_SET(wm,WIIMOTE_STATE_EXP_HANDSHAKE)) { + wiiuse_handshake_expansion_start(wm); + goto done; + } + } else { + WIIMOTE_DISABLE_STATE(wm,WIIMOTE_STATE_EXP_FAILED); + if(WIIMOTE_IS_SET(wm,WIIMOTE_STATE_EXP)) { + wiiuse_disable_expansion(wm); + goto done; + } + } + wiiuse_set_report_type(wm,NULL); + +done: + if(!cmd) return; + if(!(cmd->state==CMD_SENT && cmd->data[0]==WM_CMD_CTRL_STATUS)) return; + + wm->cmd_head = cmd->next; + + cmd->state = CMD_DONE; + if(cmd->cb!=NULL) cmd->cb(wm,msg,6); + + __lwp_queue_append(&wm->cmdq,&cmd->node); + wiiuse_send_next_command(wm); +} + +static void handle_expansion(struct wiimote_t *wm,ubyte *msg) +{ + switch (wm->exp.type) { + case EXP_NUNCHUK: + nunchuk_event(&wm->exp.nunchuk, msg); + break; + case EXP_CLASSIC: + classic_ctrl_event(&wm->exp.classic, msg); + break; + case EXP_MOTION_PLUS: + motion_plus_event(&wm->exp.mp, msg); + break; + default: + break; + } +} + +/** + * @brief Called on a cycle where no significant change occurs. + * + * @param wm Pointer to a wiimote_t structure. + */ +void idle_cycle(struct wiimote_t* wm) +{ + /* + * Smooth the angles. + * + * This is done to make sure that on every cycle the orientation + * angles are smoothed. Normally when an event occurs the angles + * are updated and smoothed, but if no packet comes in then the + * angles remain the same. This means the angle wiiuse reports + * is still an old value. Smoothing needs to be applied in this + * case in order for the angle it reports to converge to the true + * angle of the device. + */ + //printf("idle_cycle()\n");/// + if (WIIUSE_USING_ACC(wm) && WIIMOTE_IS_FLAG_SET(wm, WIIUSE_SMOOTHING)) { + apply_smoothing(&wm->accel_calib, &wm->orient, SMOOTH_ROLL); + apply_smoothing(&wm->accel_calib, &wm->orient, SMOOTH_PITCH); + } +} + +void parse_event(struct wiimote_t *wm) +{ + ubyte event; + ubyte *msg; + + event = wm->event_buf[0]; + msg = wm->event_buf+1; + //printf("parse_event(%02x,%p)\n",event,msg); + switch(event) { + case WM_RPT_CTRL_STATUS: + event_status(wm,msg); + return; + case WM_RPT_READ: + event_data_read(wm,msg); + return; + case WM_RPT_ACK: + event_ack(wm,msg); + return; + case WM_RPT_BTN: + wiiuse_pressed_buttons(wm,msg); + break; + case WM_RPT_BTN_ACC: + wiiuse_pressed_buttons(wm,msg); + + wm->accel.x = (msg[2]<<2)|((msg[0]>>5)&3); + wm->accel.y = (msg[3]<<2)|((msg[1]>>4)&2); + wm->accel.z = (msg[4]<<2)|((msg[1]>>5)&2); +#ifndef GEKKO + /* calculate the remote orientation */ + calculate_orientation(&wm->accel_calib, &wm->accel, &wm->orient, WIIMOTE_IS_FLAG_SET(wm, WIIUSE_SMOOTHING)); + + /* calculate the gforces on each axis */ + calculate_gforce(&wm->accel_calib, &wm->accel, &wm->gforce); +#endif + break; + case WM_RPT_BTN_ACC_IR: + wiiuse_pressed_buttons(wm,msg); + + wm->accel.x = (msg[2]<<2)|((msg[0]>>5)&3); + wm->accel.y = (msg[3]<<2)|((msg[1]>>4)&2); + wm->accel.z = (msg[4]<<2)|((msg[1]>>5)&2); +#ifndef GEKKO + /* calculate the remote orientation */ + calculate_orientation(&wm->accel_calib, &wm->accel, &wm->orient, WIIMOTE_IS_FLAG_SET(wm, WIIUSE_SMOOTHING)); + + /* calculate the gforces on each axis */ + calculate_gforce(&wm->accel_calib, &wm->accel, &wm->gforce); +#endif + calculate_extended_ir(wm, msg+5); + break; + case WM_RPT_BTN_EXP: + wiiuse_pressed_buttons(wm,msg); + handle_expansion(wm,msg+2); + break; + case WM_RPT_BTN_ACC_EXP: + /* button - motion - expansion */ + wiiuse_pressed_buttons(wm, msg); + + wm->accel.x = (msg[2]<<2)|((msg[0]>>5)&3); + wm->accel.y = (msg[3]<<2)|((msg[1]>>4)&2); + wm->accel.z = (msg[4]<<2)|((msg[1]>>5)&2); +#ifndef GEKKO + calculate_orientation(&wm->accel_calib, &wm->accel, &wm->orient, WIIMOTE_IS_FLAG_SET(wm, WIIUSE_SMOOTHING)); + calculate_gforce(&wm->accel_calib, &wm->accel, &wm->gforce); +#endif + handle_expansion(wm, msg+5); + break; + case WM_RPT_BTN_IR_EXP: + wiiuse_pressed_buttons(wm,msg); + calculate_basic_ir(wm, msg+2); + handle_expansion(wm,msg+12); + break; + case WM_RPT_BTN_ACC_IR_EXP: + /* button - motion - ir - expansion */ + wiiuse_pressed_buttons(wm, msg); + + wm->accel.x = (msg[2]<<2)|((msg[0]>>5)&3); + wm->accel.y = (msg[3]<<2)|((msg[1]>>4)&2); + wm->accel.z = (msg[4]<<2)|((msg[1]>>5)&2); +#ifndef GEKKO + calculate_orientation(&wm->accel_calib, &wm->accel, &wm->orient, WIIMOTE_IS_FLAG_SET(wm, WIIUSE_SMOOTHING)); + calculate_gforce(&wm->accel_calib, &wm->accel, &wm->gforce); +#endif + /* ir */ + calculate_basic_ir(wm, msg+5); + + handle_expansion(wm, msg+15); + break; + default: + WIIUSE_WARNING("Unknown event, can not handle it [Code 0x%x].", event); + return; + } + + /* was there an event? */ + wm->event = WIIUSE_EVENT; +} + +/** + * @brief Find what buttons are pressed. + * + * @param wm Pointer to a wiimote_t structure. + * @param msg The message specified in the event packet. + */ +void wiiuse_pressed_buttons(struct wiimote_t* wm, ubyte* msg) { + short now; + + /* convert to big endian */ + now = BIG_ENDIAN_SHORT(*(short*)msg) & WIIMOTE_BUTTON_ALL; + + /* preserve old btns pressed */ + wm->btns_last = wm->btns; + + /* pressed now & were pressed, then held */ + wm->btns_held = (now & wm->btns); + + /* were pressed or were held & not pressed now, then released */ + wm->btns_released = ((wm->btns | wm->btns_held) & ~now); + + /* buttons pressed now */ + wm->btns = now; +} diff --git a/wii/libogc/wiiuse/events.h b/wii/libogc/wiiuse/events.h new file mode 100644 index 0000000000..a7de3380bd --- /dev/null +++ b/wii/libogc/wiiuse/events.h @@ -0,0 +1,17 @@ +/* This source as presented is a modified version of original wiiuse for use + * with RetroArch, and must not be confused with the original software. */ + +#ifndef __EVENTS_H__ +#define __EVENTS_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +void wiiuse_pressed_buttons(struct wiimote_t* wm, ubyte* msg); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/wii/libogc/wiiuse/io.c b/wii/libogc/wiiuse/io.c new file mode 100644 index 0000000000..c062afd14f --- /dev/null +++ b/wii/libogc/wiiuse/io.c @@ -0,0 +1,164 @@ +#include +#include +#include + +#include "definitions.h" +#include "wiiuse_internal.h" +#include "nunchuk.h" +#include "classic.h" +#include "motion_plus.h" +#include "io.h" + +void wiiuse_handshake(struct wiimote_t *wm,ubyte *data,uword len) +{ + ubyte *buf = NULL; + struct accel_t *accel = &wm->accel_calib; + + //printf("wiiuse_handshake(%d,%p,%d)\n",wm->handshake_state,data,len); + + switch(wm->handshake_state) { + case 0: + wm->handshake_state++; + + wiiuse_set_leds(wm,WIIMOTE_LED_NONE,NULL); + wiiuse_status(wm,wiiuse_handshake); + return; + + case 1: + wm->handshake_state++; + buf = __lwp_wkspace_allocate(sizeof(ubyte)*8); + + if (len > 2 && data[2]&WM_CTRL_STATUS_BYTE1_ATTACHMENT) { + wiiuse_read_data(wm,buf,WM_EXP_ID,6,wiiuse_handshake); + return; + + case 2: + if (BIG_ENDIAN_LONG(*(int*)(&data[2])) == EXP_ID_CODE_CLASSIC_WIIU_PRO) { + memset(data, 0, 8); + WIIMOTE_ENABLE_STATE(wm, WIIMOTE_STATE_WIIU_PRO); + break; + } + buf = data; + } + + wm->handshake_state++; + wiiuse_read_data(wm,buf,WM_MEM_OFFSET_CALIBRATION,7,wiiuse_handshake); + return; + } + + accel->cal_zero.x = ((data[0]<<2)|((data[3]>>4)&3)); + accel->cal_zero.y = ((data[1]<<2)|((data[3]>>2)&3)); + accel->cal_zero.z = ((data[2]<<2)|(data[3]&3)); + + accel->cal_g.x = (((data[4]<<2)|((data[7]>>4)&3)) - accel->cal_zero.x); + accel->cal_g.y = (((data[5]<<2)|((data[7]>>2)&3)) - accel->cal_zero.y); + accel->cal_g.z = (((data[6]<<2)|(data[7]&3)) - accel->cal_zero.z); + __lwp_wkspace_free(data); + + WIIMOTE_DISABLE_STATE(wm, WIIMOTE_STATE_HANDSHAKE); + WIIMOTE_ENABLE_STATE(wm, WIIMOTE_STATE_HANDSHAKE_COMPLETE); + + wm->event = WIIUSE_CONNECT; + wiiuse_status(wm,NULL); +} + +void wiiuse_handshake_expansion_start(struct wiimote_t *wm) +{ + if(WIIMOTE_IS_SET(wm,WIIMOTE_STATE_EXP) || WIIMOTE_IS_SET(wm,WIIMOTE_STATE_EXP_FAILED) || WIIMOTE_IS_SET(wm,WIIMOTE_STATE_EXP_HANDSHAKE)) + return; + + wm->expansion_state = 0; + WIIMOTE_ENABLE_STATE(wm, WIIMOTE_STATE_EXP_HANDSHAKE); + wiiuse_handshake_expansion(wm, NULL, 0); +} + +void wiiuse_handshake_expansion(struct wiimote_t *wm,ubyte *data,uword len) +{ + int id; + ubyte val; + ubyte *buf = NULL; + + switch(wm->expansion_state) { + /* These two initialization writes disable the encryption */ + case 0: + wm->expansion_state = 1; + val = 0x55; + wiiuse_write_data(wm,WM_EXP_MEM_ENABLE1,&val,1,wiiuse_handshake_expansion); + break; + case 1: + wm->expansion_state = 2; + val = 0x00; + wiiuse_write_data(wm,WM_EXP_MEM_ENABLE2,&val,1,wiiuse_handshake_expansion); + break; + case 2: + wm->expansion_state = 3; + buf = __lwp_wkspace_allocate(sizeof(ubyte)*EXP_HANDSHAKE_LEN); + wiiuse_read_data(wm,buf,WM_EXP_MEM_CALIBR,EXP_HANDSHAKE_LEN,wiiuse_handshake_expansion); + break; + case 3: + if(!data || !len) return; + id = BIG_ENDIAN_LONG(*(int*)(&data[220])); + + switch(id) { + case EXP_ID_CODE_NUNCHUK: + if(!nunchuk_handshake(wm,&wm->exp.nunchuk,data,len)) return; + break; + case EXP_ID_CODE_CLASSIC_CONTROLLER: + case EXP_ID_CODE_CLASSIC_CONTROLLER_NYKOWING: + case EXP_ID_CODE_CLASSIC_CONTROLLER_NYKOWING2: + case EXP_ID_CODE_CLASSIC_CONTROLLER_NYKOWING3: + case EXP_ID_CODE_CLASSIC_CONTROLLER_GENERIC: + case EXP_ID_CODE_CLASSIC_CONTROLLER_GENERIC2: + case EXP_ID_CODE_CLASSIC_CONTROLLER_GENERIC3: + case EXP_ID_CODE_CLASSIC_CONTROLLER_GENERIC4: + case EXP_ID_CODE_CLASSIC_CONTROLLER_GENERIC5: + case EXP_ID_CODE_CLASSIC_WIIU_PRO: + if(!classic_ctrl_handshake(wm,&wm->exp.classic,data,len)) return; + break; + default: + if(!classic_ctrl_handshake(wm,&wm->exp.classic,data,len)) return; + /*WIIMOTE_DISABLE_STATE(wm,WIIMOTE_STATE_EXP_HANDSHAKE); + WIIMOTE_ENABLE_STATE(wm,WIIMOTE_STATE_EXP_FAILED); + __lwp_wkspace_free(data); + wiiuse_status(wm,NULL); + return;*/ + } + __lwp_wkspace_free(data); + + WIIMOTE_DISABLE_STATE(wm,WIIMOTE_STATE_EXP_HANDSHAKE); + WIIMOTE_ENABLE_STATE(wm,WIIMOTE_STATE_EXP); + wiiuse_set_ir_mode(wm); + wiiuse_status(wm,NULL); + break; + } +} + +void wiiuse_disable_expansion(struct wiimote_t *wm) +{ + if(!WIIMOTE_IS_SET(wm, WIIMOTE_STATE_EXP)) return; + + /* tell the associated module the expansion was removed */ + switch(wm->exp.type) { + case EXP_NUNCHUK: + nunchuk_disconnected(&wm->exp.nunchuk); + wm->event = WIIUSE_NUNCHUK_REMOVED; + break; + case EXP_CLASSIC: + classic_ctrl_disconnected(&wm->exp.classic); + wm->event = WIIUSE_CLASSIC_CTRL_REMOVED; + break; + case EXP_MOTION_PLUS: + motion_plus_disconnected(&wm->exp.mp); + wm->event = WIIUSE_MOTION_PLUS_REMOVED; + break; + + default: + break; + } + + WIIMOTE_DISABLE_STATE(wm, WIIMOTE_STATE_EXP); + wm->exp.type = EXP_NONE; + + wiiuse_set_ir_mode(wm); + wiiuse_status(wm,NULL); +} diff --git a/wii/libogc/wiiuse/io.h b/wii/libogc/wiiuse/io.h new file mode 100644 index 0000000000..738ceea137 --- /dev/null +++ b/wii/libogc/wiiuse/io.h @@ -0,0 +1,26 @@ +/* This source as presented is a modified version of original wiiuse for use + * with RetroArch, and must not be confused with the original software. */ + +#ifndef __IO_H__ +#define __IO_H__ + +#include "wiiuse_internal.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void wiiuse_handshake(struct wiimote_t* wm,ubyte *data,uword len); +void wiiuse_handshake_expansion_start(struct wiimote_t *wm); +void wiiuse_handshake_expansion(struct wiimote_t *wm,ubyte *data,uword len); +void wiiuse_disable_expansion(struct wiimote_t *wm); + +int wiiuse_io_read(struct wiimote_t* wm); +int wiiuse_io_write(struct wiimote_t* wm, ubyte* buf, int len); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/wii/libogc/wiiuse/io_wii.c b/wii/libogc/wiiuse/io_wii.c new file mode 100644 index 0000000000..63e4b7b56a --- /dev/null +++ b/wii/libogc/wiiuse/io_wii.c @@ -0,0 +1,181 @@ +/* This source as presented is a modified version of original wiiuse for use + * with RetroArch, and must not be confused with the original software. */ + +#ifdef GEKKO + +#include +#include +#include +#include + +#include "definitions.h" +#include "wiiuse_internal.h" +#include "events.h" +#include "io.h" +#include "lwp_wkspace.h" + +#define MAX_COMMANDS 0x100 +#define MAX_WIIMOTES 5 + +static vu32* const _ipcReg = (u32*)0xCD000000; +static u8 *__queue_buffer[MAX_WIIMOTES] = { 0, 0, 0, 0, 0 }; + +extern void parse_event(struct wiimote_t *wm); +extern void idle_cycle(struct wiimote_t* wm); +extern void hexdump(void *d, int len); + +static __inline__ u32 ACR_ReadReg(u32 reg) +{ + return _ipcReg[reg>>2]; +} + +static __inline__ void ACR_WriteReg(u32 reg,u32 val) +{ + _ipcReg[reg>>2] = val; +} + +static s32 __wiiuse_disconnected(void *arg,struct bte_pcb *pcb,u8 err) +{ + struct wiimote_listen_t *wml = (struct wiimote_listen_t*)arg; + struct wiimote_t *wm = wml->wm; + + if(!wm) return ERR_OK; + + //printf("wiimote disconnected\n"); + WIIMOTE_DISABLE_STATE(wm, (WIIMOTE_STATE_IR|WIIMOTE_STATE_IR_INIT)); +#ifdef HAVE_WIIUSE_SPEAKER + WIIMOTE_DISABLE_STATE(wm, (WIIMOTE_STATE_SPEAKER|WIIMOTE_STATE_SPEAKER_INIT)); +#endif + WIIMOTE_DISABLE_STATE(wm, (WIIMOTE_STATE_EXP|WIIMOTE_STATE_EXP_HANDSHAKE|WIIMOTE_STATE_EXP_FAILED)); + WIIMOTE_DISABLE_STATE(wm,(WIIMOTE_STATE_CONNECTED|WIIMOTE_STATE_HANDSHAKE|WIIMOTE_STATE_HANDSHAKE_COMPLETE)); + + while(wm->cmd_head) { + __lwp_queue_append(&wm->cmdq,&wm->cmd_head->node); + wm->cmd_head = wm->cmd_head->next; + } + wm->cmd_tail = NULL; + + if(wm->event_cb) wm->event_cb(wm,WIIUSE_DISCONNECT); + + wml->wm = NULL; + return ERR_OK; +} + +static s32 __wiiuse_receive(void *arg,void *buffer,u16 len) +{ + struct wiimote_listen_t *wml = (struct wiimote_listen_t*)arg; + struct wiimote_t *wm = wml->wm; + + if(!wm || !buffer || len==0) return ERR_OK; + + //printf("__wiiuse_receive[%02x]\n",*(char*)buffer); + wm->event = WIIUSE_NONE; + + memcpy(wm->event_buf,buffer,len); + memset(&(wm->event_buf[len]),0,(MAX_PAYLOAD - len)); + parse_event(wm); + + if(wm->event!=WIIUSE_NONE) { + if(wm->event_cb) wm->event_cb(wm,wm->event); + } + + return ERR_OK; +} + +static s32 __wiiuse_connected(void *arg,struct bte_pcb *pcb,u8 err) +{ + struct wiimote_listen_t *wml = (struct wiimote_listen_t*)arg; + struct wiimote_t *wm; + + wm = wml->assign_cb(&wml->bdaddr); + + if(!wm) { + bte_disconnect(wml->sock); + return ERR_OK; + } + + wml->wm = wm; + + wm->sock = wml->sock; + wm->bdaddr = wml->bdaddr; + + //printf("__wiiuse_connected()\n"); + WIIMOTE_ENABLE_STATE(wm,(WIIMOTE_STATE_CONNECTED|WIIMOTE_STATE_HANDSHAKE)); + + wm->handshake_state = 0; + wiiuse_handshake(wm,NULL,0); + + return ERR_OK; +} + +void __wiiuse_sensorbar_enable(int enable) +{ + u32 val; + u32 level; + + level = IRQ_Disable(); + val = (ACR_ReadReg(0xc0)&~0x100); + if(enable) val |= 0x100; + ACR_WriteReg(0xc0,val); + IRQ_Restore(level); +} + +int wiiuse_register(struct wiimote_listen_t *wml, struct bd_addr *bdaddr, struct wiimote_t *(*assign_cb)(struct bd_addr *bdaddr)) +{ + s32 err; + + if(!wml || !bdaddr || !assign_cb) return 0; + + wml->wm = NULL; + wml->bdaddr = *bdaddr; + wml->sock = bte_new(); + wml->assign_cb = assign_cb; + if(wml->sock==NULL) return 0; + + bte_arg(wml->sock,wml); + bte_received(wml->sock,__wiiuse_receive); + bte_disconnected(wml->sock,__wiiuse_disconnected); + + err = bte_registerdeviceasync(wml->sock,bdaddr,__wiiuse_connected); + if(err==ERR_OK) return 1; + + return 0; +} + +void wiiuse_disconnect(struct wiimote_t *wm) +{ + if(wm==NULL || wm->sock==NULL) return; + + WIIMOTE_DISABLE_STATE(wm,WIIMOTE_STATE_CONNECTED); + bte_disconnect(wm->sock); +} + +void wiiuse_sensorbar_enable(int enable) +{ + __wiiuse_sensorbar_enable(enable); +} + + +void wiiuse_init_cmd_queue(struct wiimote_t *wm) +{ + u32 size; + + if (!__queue_buffer[wm->unid]) { + size = (MAX_COMMANDS*sizeof(struct cmd_blk_t)); + __queue_buffer[wm->unid] = __lwp_heap_allocate(&__wkspace_heap,size); + if(!__queue_buffer[wm->unid]) return; + } + + __lwp_queue_initialize(&wm->cmdq,__queue_buffer[wm->unid],MAX_COMMANDS,sizeof(struct cmd_blk_t)); +} + +int wiiuse_io_write(struct wiimote_t *wm,ubyte *buf,int len) +{ + if(wm->sock) { + return bte_senddata(wm->sock,buf,len); + } + + return ERR_CONN; +} + +#endif diff --git a/wii/libogc/wiiuse/ir.c b/wii/libogc/wiiuse/ir.c new file mode 100644 index 0000000000..f118ea6e58 --- /dev/null +++ b/wii/libogc/wiiuse/ir.c @@ -0,0 +1,837 @@ +/* This source as presented is a modified version of original wiiuse for use + * with RetroArch, and must not be confused with the original software. */ + +#include +#include +#include + +#ifndef WIN32 + #include +#endif +#ifdef GEKKO + #include +#endif +#include "definitions.h" +#include "wiiuse_internal.h" +#include "ir.h" + +static int ir_correct_for_bounds(float* x, float* y, enum aspect_t aspect, int offset_x, int offset_y); +static void ir_convert_to_vres(float* x, float* y, enum aspect_t aspect, unsigned int vx, unsigned int vy); + +/** + * @brief Get the IR sensitivity settings. + * + * @param wm Pointer to a wiimote_t structure. + * @param block1 [out] Pointer to where block1 will be set. + * @param block2 [out] Pointer to where block2 will be set. + * + * @return Returns the sensitivity level. + */ +static int get_ir_sens(struct wiimote_t* wm, char** block1, char** block2) { + if (WIIMOTE_IS_SET(wm, WIIMOTE_STATE_IR_SENS_LVL1)) { + *block1 = WM_IR_BLOCK1_LEVEL1; + *block2 = WM_IR_BLOCK2_LEVEL1; + return 1; + } else if (WIIMOTE_IS_SET(wm, WIIMOTE_STATE_IR_SENS_LVL2)) { + *block1 = WM_IR_BLOCK1_LEVEL2; + *block2 = WM_IR_BLOCK2_LEVEL2; + return 2; + } else if (WIIMOTE_IS_SET(wm, WIIMOTE_STATE_IR_SENS_LVL3)) { + *block1 = WM_IR_BLOCK1_LEVEL3; + *block2 = WM_IR_BLOCK2_LEVEL3; + return 3; + } else if (WIIMOTE_IS_SET(wm, WIIMOTE_STATE_IR_SENS_LVL4)) { + *block1 = WM_IR_BLOCK1_LEVEL4; + *block2 = WM_IR_BLOCK2_LEVEL4; + return 4; + } else if (WIIMOTE_IS_SET(wm, WIIMOTE_STATE_IR_SENS_LVL5)) { + *block1 = WM_IR_BLOCK1_LEVEL5; + *block2 = WM_IR_BLOCK2_LEVEL5; + return 5; + } + + *block1 = NULL; + *block2 = NULL; + return 0; +} + +static void rotate_dots(struct fdot_t* in, struct fdot_t *out, int count, float ang) { + float s, c; + int i; + + if (ang == 0) { + for (i = 0; i < count; ++i) { + out[i].x = in[i].x; + out[i].y = in[i].y; + } + return; + } + + s = sin(DEGREE_TO_RAD(ang)); + c = cos(DEGREE_TO_RAD(ang)); + + /* + * [ cos(theta) -sin(theta) ][ ir->rx ] + * [ sin(theta) cos(theta) ][ ir->ry ] + */ + + for (i = 0; i < count; ++i) { + out[i].x = (c * in[i].x) + (-s * in[i].y); + out[i].y = (s * in[i].x) + (c * in[i].y); + } +} + +/** + * @brief Correct for the IR bounding box. + * + * @param x [out] The current X, it will be updated if valid. + * @param y [out] The current Y, it will be updated if valid. + * @param aspect Aspect ratio of the screen. + * @param offset_x The X offset of the bounding box. + * @param offset_y The Y offset of the bounding box. + * + * @return Returns 1 if the point is valid and was updated. + * + * Nintendo was smart with this bit. They sacrifice a little + * precision for a big increase in usability. + */ +static int ir_correct_for_bounds(float* x, float* y, enum aspect_t aspect, int offset_x, int offset_y) { + float x0, y0; + int xs, ys; + + if (aspect == WIIUSE_ASPECT_16_9) { + xs = WM_ASPECT_16_9_X; + ys = WM_ASPECT_16_9_Y; + } else { + xs = WM_ASPECT_4_3_X; + ys = WM_ASPECT_4_3_Y; + } + + x0 = ((1024 - xs) / 2) + offset_x; + y0 = ((768 - ys) / 2) + offset_y; + + if ((*x >= x0) + && (*x <= (x0 + xs)) + && (*y >= y0) + && (*y <= (y0 + ys))) + { + *x -= offset_x; + *y -= offset_y; + + return 1; + } + + return 0; +} + + +/** + * @brief Interpolate the point to the user defined virtual screen resolution. + */ +static void ir_convert_to_vres(float* x, float* y, enum aspect_t aspect, unsigned int vx, unsigned int vy) { + int xs, ys; + + if (aspect == WIIUSE_ASPECT_16_9) { + xs = WM_ASPECT_16_9_X; + ys = WM_ASPECT_16_9_Y; + } else { + xs = WM_ASPECT_4_3_X; + ys = WM_ASPECT_4_3_Y; + } + + *x -= ((1024-xs)/2); + *y -= ((768-ys)/2); + + *x = (*x / (float)xs) * vx; + *y = (*y / (float)ys) * vy; +} + +void wiiuse_set_ir_mode(struct wiimote_t *wm) +{ + ubyte buf = 0x00; + + if(!wm) return; + if(!WIIMOTE_IS_SET(wm,WIIMOTE_STATE_IR)) return; + + if(WIIMOTE_IS_SET(wm,WIIMOTE_STATE_EXP)) buf = WM_IR_TYPE_BASIC; + else buf = WM_IR_TYPE_EXTENDED; + wiiuse_write_data(wm,WM_REG_IR_MODENUM, &buf, 1, NULL); +} + +void wiiuse_set_ir(struct wiimote_t *wm,int status) +{ + ubyte buf = 0x00; + int ir_level = 0; + char* block1 = NULL; + char* block2 = NULL; + + if(!wm) return; + + /* + * Wait for the handshake to finish first. + * When it handshake finishes and sees that + * IR is enabled, it will call this function + * again to actually enable IR. + */ + if(!WIIMOTE_IS_SET(wm,WIIMOTE_STATE_HANDSHAKE_COMPLETE)) { + WIIUSE_DEBUG("Tried to enable IR, will wait until handshake finishes.\n"); + if(status) + WIIMOTE_ENABLE_STATE(wm, WIIMOTE_STATE_IR_INIT); + else + WIIMOTE_DISABLE_STATE(wm, WIIMOTE_STATE_IR_INIT); + return; + } + + /* + * Check to make sure a sensitivity setting is selected. + */ + ir_level = get_ir_sens(wm, &block1, &block2); + if (!ir_level) { + WIIUSE_ERROR("No IR sensitivity setting selected."); + return; + } + + if (status) { + /* if already enabled then stop */ + if (WIIMOTE_IS_SET(wm, WIIMOTE_STATE_IR)) { + wiiuse_status(wm,NULL); + return; + } + } else { + /* if already disabled then stop */ + if (!WIIMOTE_IS_SET(wm, WIIMOTE_STATE_IR)) { + wiiuse_status(wm,NULL); + return; + } + } + + buf = (status ? 0x04 : 0x00); + wiiuse_sendcmd(wm,WM_CMD_IR,&buf,1,NULL); + wiiuse_sendcmd(wm,WM_CMD_IR_2,&buf,1,NULL); + + if (!status) { + WIIUSE_DEBUG("Disabled IR cameras for wiimote id %i.", wm->unid); + wiiuse_status(wm,NULL); + return; + } + + /* enable IR, set sensitivity */ + buf = 0x08; + wiiuse_write_data(wm,WM_REG_IR,&buf,1,NULL); + + wiiuse_write_data(wm, WM_REG_IR_BLOCK1, (ubyte*)block1, 9, NULL); + wiiuse_write_data(wm, WM_REG_IR_BLOCK2, (ubyte*)block2, 2, NULL); + + if(WIIMOTE_IS_SET(wm,WIIMOTE_STATE_EXP)) buf = WM_IR_TYPE_BASIC; + else buf = WM_IR_TYPE_EXTENDED; + wiiuse_write_data(wm,WM_REG_IR_MODENUM, &buf, 1, NULL); + + wiiuse_status(wm,NULL); + return; +} + +/** + * @brief Set the virtual screen resolution for IR tracking. + * + * @param wm Pointer to a wiimote_t structure. + * @param status 1 to enable, 0 to disable. + */ +void wiiuse_set_ir_vres(struct wiimote_t* wm, unsigned int x, unsigned int y) { + if (!wm) return; + + wm->ir.vres[0] = (x-1); + wm->ir.vres[1] = (y-1); +} + +/** + * @brief Set the XY position for the IR cursor. + * + * @param wm Pointer to a wiimote_t structure. + */ +void wiiuse_set_ir_position(struct wiimote_t* wm, enum ir_position_t pos) { + if (!wm) return; + + wm->ir.pos = pos; + + switch (pos) { + + case WIIUSE_IR_ABOVE: + wm->ir.offset[0] = 0; + + if (wm->ir.aspect == WIIUSE_ASPECT_16_9) + wm->ir.offset[1] = WM_ASPECT_16_9_Y/2 - 70; + else if (wm->ir.aspect == WIIUSE_ASPECT_4_3) + wm->ir.offset[1] = WM_ASPECT_4_3_Y/2 - 100; + + return; + + case WIIUSE_IR_BELOW: + wm->ir.offset[0] = 0; + + if (wm->ir.aspect == WIIUSE_ASPECT_16_9) + wm->ir.offset[1] = -WM_ASPECT_16_9_Y/2 + 70; + else if (wm->ir.aspect == WIIUSE_ASPECT_4_3) + wm->ir.offset[1] = -WM_ASPECT_4_3_Y/2 + 100; + + return; + + default: + return; + }; +} + +/** + * @brief Set the aspect ratio of the TV/monitor. + * + * @param wm Pointer to a wiimote_t structure. + * @param aspect Either WIIUSE_ASPECT_16_9 or WIIUSE_ASPECT_4_3 + */ +void wiiuse_set_aspect_ratio(struct wiimote_t* wm, enum aspect_t aspect) { + if (!wm) return; + + wm->ir.aspect = aspect; + + if (aspect == WIIUSE_ASPECT_4_3) { + wm->ir.vres[0] = WM_ASPECT_4_3_X; + wm->ir.vres[1] = WM_ASPECT_4_3_Y; + } else { + wm->ir.vres[0] = WM_ASPECT_16_9_X; + wm->ir.vres[1] = WM_ASPECT_16_9_Y; + } + + /* reset the position offsets */ + wiiuse_set_ir_position(wm, wm->ir.pos); +} + + +/** + * @brief Set the IR sensitivity. + * + * @param wm Pointer to a wiimote_t structure. + * @param level 1-5, same as Wii system sensitivity setting. + * + * If the level is < 1, then level will be set to 1. + * If the level is > 5, then level will be set to 5. + */ +void wiiuse_set_ir_sensitivity(struct wiimote_t* wm, int level) { + char* block1 = NULL; + char* block2 = NULL; + + if (!wm) return; + + if (level > 5) level = 5; + if (level < 1) level = 1; + + WIIMOTE_DISABLE_STATE(wm, (WIIMOTE_STATE_IR_SENS_LVL1 | + WIIMOTE_STATE_IR_SENS_LVL2 | + WIIMOTE_STATE_IR_SENS_LVL3 | + WIIMOTE_STATE_IR_SENS_LVL4 | + WIIMOTE_STATE_IR_SENS_LVL5)); + + switch (level) { + case 1: + WIIMOTE_ENABLE_STATE(wm, WIIMOTE_STATE_IR_SENS_LVL1); + break; + case 2: + WIIMOTE_ENABLE_STATE(wm, WIIMOTE_STATE_IR_SENS_LVL2); + break; + case 3: + WIIMOTE_ENABLE_STATE(wm, WIIMOTE_STATE_IR_SENS_LVL3); + break; + case 4: + WIIMOTE_ENABLE_STATE(wm, WIIMOTE_STATE_IR_SENS_LVL4); + break; + case 5: + WIIMOTE_ENABLE_STATE(wm, WIIMOTE_STATE_IR_SENS_LVL5); + break; + default: + return; + } + + if(!WIIMOTE_IS_SET(wm,WIIMOTE_STATE_IR)) return; + + /* set the new sensitivity */ + get_ir_sens(wm, &block1, &block2); + + wiiuse_write_data(wm, WM_REG_IR_BLOCK1, (ubyte*)block1, 9,NULL); + wiiuse_write_data(wm, WM_REG_IR_BLOCK2, (ubyte*)block2, 2,NULL); + + WIIUSE_DEBUG("Set IR sensitivity to level %i (unid %i)", level, wm->unid); +} + + +/** + * @brief Calculate the data from the IR spots. Basic IR mode. + * + * @param wm Pointer to a wiimote_t structure. + * @param data Data returned by the wiimote for the IR spots. + */ +void calculate_basic_ir(struct wiimote_t* wm, ubyte* data) { + struct ir_dot_t* dot = wm->ir.dot; + int i; + + dot[0].rx = 1023 - (data[0] | ((data[2] & 0x30) << 4)); + dot[0].ry = data[1] | ((data[2] & 0xC0) << 2); + + dot[1].rx = 1023 - (data[3] | ((data[2] & 0x03) << 8)); + dot[1].ry = data[4] | ((data[2] & 0x0C) << 6); + + dot[2].rx = 1023 - (data[5] | ((data[7] & 0x30) << 4)); + dot[2].ry = data[6] | ((data[7] & 0xC0) << 2); + + dot[3].rx = 1023 - (data[8] | ((data[7] & 0x03) << 8)); + dot[3].ry = data[9] | ((data[7] & 0x0C) << 6); + + /* set each IR spot to visible if spot is in range */ + for (i = 0; i < 4; ++i) { + dot[i].rx = BIG_ENDIAN_SHORT(dot[i].rx); + dot[i].ry = BIG_ENDIAN_SHORT(dot[i].ry); + + if (dot[i].ry == 1023) + dot[i].visible = 0; + else { + dot[i].visible = 1; + dot[i].size = 0; /* since we don't know the size, set it as 0 */ + } + } +#ifndef GEKKO + interpret_ir_data(&wm->ir,&wm->orient,WIIMOTE_IS_SET(wm, WIIMOTE_STATE_ACC)); +#endif +} + +/** + * @brief Calculate the data from the IR spots. Extended IR mode. + * + * @param wm Pointer to a wiimote_t structure. + * @param data Data returned by the wiimote for the IR spots. + */ +void calculate_extended_ir(struct wiimote_t* wm, ubyte* data) { + struct ir_dot_t* dot = wm->ir.dot; + int i; + + for (i = 0; i < 4; ++i) { + dot[i].rx = 1023 - (data[3*i] | ((data[(3*i)+2] & 0x30) << 4)); + dot[i].ry = data[(3*i)+1] | ((data[(3*i)+2] & 0xC0) << 2); + + dot[i].size = data[(3*i)+2]; + + dot[i].rx = BIG_ENDIAN_SHORT(dot[i].rx); + dot[i].ry = BIG_ENDIAN_SHORT(dot[i].ry); + + dot[i].size = dot[i].size&0x0f; + + /* if in range set to visible */ + if (dot[i].ry == 1023) + dot[i].visible = 0; + else + dot[i].visible = 1; + } +#ifndef GEKKO + interpret_ir_data(&wm->ir,&wm->orient,WIIMOTE_IS_SET(wm, WIIMOTE_STATE_ACC)); +#endif +} + +enum { + IR_STATE_DEAD = 0, + IR_STATE_GOOD, + IR_STATE_SINGLE, + IR_STATE_LOST, +}; + +// half-height of the IR sensor if half-width is 1 +#define HEIGHT (384.0f / 512.0f) +// maximum sensor bar slope (tan(35 degrees)) +#define MAX_SB_SLOPE 0.7f +// minimum sensor bar width in view, relative to half of the IR sensor area +#define MIN_SB_WIDTH 0.1f +// reject "sensor bars" that happen to have a dot towards the middle +#define SB_MIDDOT_REJECT 0.05f + +// physical dimensions +// cm center to center of emitters +#define SB_WIDTH 19.5f +// half-width in cm of emitters +#define SB_DOT_WIDTH 2.25f +// half-height in cm of emitters (with some tolerance) +#define SB_DOT_HEIGHT 1.0f + +#define SB_DOT_WIDTH_RATIO (SB_DOT_WIDTH / SB_WIDTH) +#define SB_DOT_HEIGHT_RATIO (SB_DOT_HEIGHT / SB_WIDTH) + +// dots further out than these coords are allowed to not be picked up +// otherwise assume something's wrong +//#define SB_OFF_SCREEN_X 0.8f +//#define SB_OFF_SCREEN_Y (0.8f * HEIGHT) + +// disable, may be doing more harm than good due to sensor pickup glitches +#define SB_OFF_SCREEN_X 0.0f +#define SB_OFF_SCREEN_Y 0.0f + +// if a point is closer than this to one of the previous SB points +// when it reappears, consider it the same instead of trying to guess +// which one of the two it is +#define SB_SINGLE_NOGUESS_DISTANCE (100.0 * 100.0) + +// width of the sensor bar in pixels at one meter from the Wiimote +#define SB_Z_COEFFICIENT 256.0f + +// distance in meters from the center of the FOV to the left or right edge, +// when the wiimote is at one meter +#define WIIMOTE_FOV_COEFFICIENT 0.39f + +#define SQUARED(x) ((x)*(x)) +#define WMAX(x,y) ((x>y)?(x):(y)) +#define WMIN(x,y) ((xroll); + + /* count visible dots and populate dots structure */ + /* dots[] is in -1..1 units for width */ + ir->num_dots = 0; + for (i = 0; i < 4; i++) { + if (ir->dot[i].visible) { + dots[ir->num_dots].x = (ir->dot[i].rx - 512.0f) / 512.0f; + dots[ir->num_dots].y = (ir->dot[i].ry - 384.0f) / 512.0f; + WIIUSE_DEBUG("IR: dot %d at (%d,%d) (%.03f,%.03f)\n",ir->num_dots,ir->dot[i].rx,ir->dot[i].ry,dots[ir->num_dots].x,dots[ir->num_dots].y); + ir->num_dots++; + } + } + + WIIUSE_DEBUG("IR: found %d dots\n",ir->num_dots); + + // nothing to track + if(ir->num_dots == 0) { + if(ir->state != IR_STATE_DEAD) + ir->state = IR_STATE_LOST; + ir->ax = 0; + ir->ay = 0; + ir->distance = 0.0f; + ir->raw_valid = 0; + return; + } + + /* ==== Find the Sensor Bar ==== */ + + // first rotate according to accelerometer orientation + rotate_dots(dots, acc_dots, ir->num_dots, orient->roll); + if(ir->num_dots > 1) { + WIIUSE_DEBUG("IR: locating sensor bar candidates\n"); + + // iterate through all dot pairs + for(first=0; first < (ir->num_dots-1); first++) { + for(second=(first+1); second < ir->num_dots; second++) { + WIIUSE_DEBUG("IR: trying dots %d and %d\n",first,second); + // order the dots leftmost first into cand + // storing both the raw dots and the accel-rotated dots + if(acc_dots[first].x > acc_dots[second].x) { + cand.dots[0] = dots[second]; + cand.dots[1] = dots[first]; + cand.acc_dots[0] = acc_dots[second]; + cand.acc_dots[1] = acc_dots[first]; + } else { + cand.dots[0] = dots[first]; + cand.dots[1] = dots[second]; + cand.acc_dots[0] = acc_dots[first]; + cand.acc_dots[1] = acc_dots[second]; + } + difference.x = cand.acc_dots[1].x - cand.acc_dots[0].x; + difference.y = cand.acc_dots[1].y - cand.acc_dots[0].y; + + // check angle + if(fabsf(difference.y / difference.x) > MAX_SB_SLOPE) + continue; + WIIUSE_DEBUG("IR: passed angle check\n"); + // rotate to the true sensor bar angle + cand.off_angle = -RAD_TO_DEGREE(atan2(difference.y, difference.x)); + cand.angle = cand.off_angle + orient->roll; + rotate_dots(cand.dots, cand.rot_dots, 2, cand.angle); + WIIUSE_DEBUG("IR: off_angle: %.02f, angle: %.02f\n", cand.off_angle, cand.angle); + // recalculate x distance - y should be zero now, so ignore it + difference.x = cand.rot_dots[1].x - cand.rot_dots[0].x; + + // check distance + if(difference.x < MIN_SB_WIDTH) + continue; + // middle dot check. If there's another source somewhere in the + // middle of this candidate, then this can't be a sensor bar + + for(i=0; inum_dots; i++) { + float wadj, hadj; + struct fdot_t tdot; + if(i==first || i==second) continue; + hadj = SB_DOT_HEIGHT_RATIO * difference.x; + wadj = SB_DOT_WIDTH_RATIO * difference.x; + rotate_dots(&dots[i], &tdot, 1, cand.angle); + if( ((cand.rot_dots[0].x + wadj) < tdot.x) && + ((cand.rot_dots[1].x - wadj) > tdot.x) && + ((cand.rot_dots[0].y + hadj) > tdot.y) && + ((cand.rot_dots[0].y - hadj) < tdot.y)) + break; + } + // failed middle dot check + if(i < ir->num_dots) continue; + WIIUSE_DEBUG("IR: passed middle dot check\n"); + + cand.score = 1 / (cand.rot_dots[1].x - cand.rot_dots[0].x); + + // we have a candidate, store it + WIIUSE_DEBUG("IR: new candidate %d\n",num_candidates); + candidates[num_candidates++] = cand; + } + } + } + + if(num_candidates == 0) { + int closest = -1; + int closest_to = 0; + float best = 999.0f; + float d; + float dx[2]; + struct sb_t sbx[2]; + // no sensor bar candidates, try to work with a lone dot + WIIUSE_DEBUG("IR: no candidates\n"); + switch(ir->state) { + case IR_STATE_DEAD: + WIIUSE_DEBUG("IR: we're dead\n"); + // we've never seen a sensor bar before, so we're screwed + ir->ax = 0.0f; + ir->ay = 0.0f; + ir->distance = 0.0f; + ir->raw_valid = 0; + return; + case IR_STATE_GOOD: + case IR_STATE_SINGLE: + case IR_STATE_LOST: + WIIUSE_DEBUG("IR: trying to keep track of single dot\n"); + // try to find the dot closest to the previous sensor bar position + for(i=0; inum_dots; i++) { + WIIUSE_DEBUG("IR: checking dot %d (%.02f, %.02f)\n",i, acc_dots[i].x,acc_dots[i].y); + for(j=0; j<2; j++) { + WIIUSE_DEBUG(" to dot %d (%.02f, %.02f)\n",j, ir->sensorbar.acc_dots[j].x,ir->sensorbar.acc_dots[j].y); + d = SQUARED(acc_dots[i].x - ir->sensorbar.acc_dots[j].x); + d += SQUARED(acc_dots[i].y - ir->sensorbar.acc_dots[j].y); + if(d < best) { + best = d; + closest_to = j; + closest = i; + } + } + } + WIIUSE_DEBUG("IR: closest dot is %d to %d\n",closest,closest_to); + if(ir->state != IR_STATE_LOST || best < SB_SINGLE_NOGUESS_DISTANCE) { + // now work out where the other dot would be, in the acc frame + sb.acc_dots[closest_to] = acc_dots[closest]; + sb.acc_dots[closest_to^1].x = ir->sensorbar.acc_dots[closest_to^1].x - ir->sensorbar.acc_dots[closest_to].x + acc_dots[closest].x; + sb.acc_dots[closest_to^1].y = ir->sensorbar.acc_dots[closest_to^1].y - ir->sensorbar.acc_dots[closest_to].y + acc_dots[closest].y; + // get the raw frame + rotate_dots(sb.acc_dots, sb.dots, 2, -orient->roll); + if((fabsf(sb.dots[closest_to^1].x) < SB_OFF_SCREEN_X) && (fabsf(sb.dots[closest_to^1].y) < SB_OFF_SCREEN_Y)) { + // this dot should be visible but isn't, since the candidate section failed. + // fall through and try to pick out the sensor bar without previous information + WIIUSE_DEBUG("IR: dot falls on screen, falling through\n"); + } else { + // calculate the rotated dots frame + // angle tends to drift, so recalculate + sb.off_angle = -RAD_TO_DEGREE(atan2(sb.acc_dots[1].y - sb.acc_dots[0].y, sb.acc_dots[1].x - sb.acc_dots[0].x)); + sb.angle = ir->sensorbar.off_angle + orient->roll; + rotate_dots(sb.acc_dots, sb.rot_dots, 2, ir->sensorbar.off_angle); + WIIUSE_DEBUG("IR: kept track of single dot\n"); + break; + } + } else { + WIIUSE_DEBUG("IR: lost the dot and new one is too far away\n"); + } + // try to find the dot closest to the sensor edge + WIIUSE_DEBUG("IR: trying to find best dot\n"); + for(i=0; inum_dots; i++) { + d = WMIN(1.0f - fabsf(dots[i].x), HEIGHT - fabsf(dots[i].y)); + if(d < best) { + best = d; + closest = i; + } + } + WIIUSE_DEBUG("IR: best dot: %d\n",closest); + // now try it as both places in the sensor bar + // and pick the one that places the other dot furthest off-screen + for(i=0; i<2; i++) { + sbx[i].acc_dots[i] = acc_dots[closest]; + sbx[i].acc_dots[i^1].x = ir->sensorbar.acc_dots[i^1].x - ir->sensorbar.acc_dots[i].x + acc_dots[closest].x; + sbx[i].acc_dots[i^1].y = ir->sensorbar.acc_dots[i^1].y - ir->sensorbar.acc_dots[i].y + acc_dots[closest].y; + rotate_dots(sbx[i].acc_dots, sbx[i].dots, 2, -orient->roll); + dx[i] = WMAX(fabsf(sbx[i].dots[i^1].x),fabsf(sbx[i].dots[i^1].y / HEIGHT)); + } + if(dx[0] > dx[1]) { + WIIUSE_DEBUG("IR: dot is LEFT: %.02f > %.02f\n",dx[0],dx[1]); + sb = sbx[0]; + } else { + WIIUSE_DEBUG("IR: dot is RIGHT: %.02f < %.02f\n",dx[0],dx[1]); + sb = sbx[1]; + } + // angle tends to drift, so recalculate + sb.off_angle = -RAD_TO_DEGREE(atan2(sb.acc_dots[1].y - sb.acc_dots[0].y, sb.acc_dots[1].x - sb.acc_dots[0].x)); + sb.angle = ir->sensorbar.off_angle + orient->roll; + rotate_dots(sb.acc_dots, sb.rot_dots, 2, ir->sensorbar.off_angle); + WIIUSE_DEBUG("IR: found new dot to track\n"); + break; + } + sb.score = 0; + ir->state = IR_STATE_SINGLE; + } else { + int bestidx = 0; + float best = 0.0f; + WIIUSE_DEBUG("IR: finding best candidate\n"); + // look for the best candidate + // for now, the formula is simple: pick the one with the smallest distance + for(i=0; i best) { + bestidx = i; + best = candidates[i].score; + } + } + WIIUSE_DEBUG("IR: best candidate: %d\n",bestidx); + sb = candidates[bestidx]; + ir->state = IR_STATE_GOOD; + } + + ir->raw_valid = 1; + ir->ax = ((sb.rot_dots[0].x + sb.rot_dots[1].x) / 2) * 512.0 + 512.0; + ir->ay = ((sb.rot_dots[0].y + sb.rot_dots[1].y) / 2) * 512.0 + 384.0; + ir->sensorbar = sb; + ir->distance = (sb.rot_dots[1].x - sb.rot_dots[0].x) * 512.0; + +} + +#define SMOOTH_IR_RADIUS 8.0f +#define SMOOTH_IR_SPEED 0.25f +#define SMOOTH_IR_DEADZONE 2.5f + +/** + * @brief Smooth the IR pointer position + * + * @param ir Pointer to an ir_t structure. + */ +void apply_ir_smoothing(struct ir_t *ir) { + f32 dx, dy, d, theta; + + WIIUSE_DEBUG("Smooth: OK (%.02f, %.02f) LAST (%.02f, %.02f) ", ir->ax, ir->ay, ir->sx, ir->sy); + dx = ir->ax - ir->sx; + dy = ir->ay - ir->sy; + d = sqrtf(dx*dx + dy*dy); + if (d > SMOOTH_IR_DEADZONE) { + if (d < SMOOTH_IR_RADIUS) { + WIIUSE_DEBUG("INSIDE\n"); + ir->sx += dx * SMOOTH_IR_SPEED; + ir->sy += dy * SMOOTH_IR_SPEED; + } else { + WIIUSE_DEBUG("OUTSIDE\n"); + theta = atan2f(dy, dx); + ir->sx = ir->ax - cosf(theta) * SMOOTH_IR_RADIUS; + ir->sy = ir->ay - sinf(theta) * SMOOTH_IR_RADIUS; + } + } else { + WIIUSE_DEBUG("DEADZONE\n"); + } +} + +// max number of errors before cooked data drops out +#define ERROR_MAX_COUNT 8 +// max number of glitches before cooked data updates +#define GLITCH_MAX_COUNT 5 +// squared delta over which we consider something a glitch +#define GLITCH_DIST (150.0f * 150.0f) + +/** + * @brief Interpret IR data into more user friendly variables. + * + * @param ir Pointer to an ir_t structure. + * @param orient Pointer to an orient_t structure. + */ +void interpret_ir_data(struct ir_t* ir, struct orient_t *orient) { + + float x,y; + float d; + + find_sensorbar(ir, orient); + + if(ir->raw_valid) { + ir->angle = ir->sensorbar.angle; + ir->z = SB_Z_COEFFICIENT / ir->distance; + orient->yaw = calc_yaw(ir); + if(ir->error_cnt >= ERROR_MAX_COUNT) { + ir->sx = ir->ax; + ir->sy = ir->ay; + ir->glitch_cnt = 0; + } else { + d = SQUARED(ir->ax - ir->sx) + SQUARED(ir->ay - ir->sy); + if(d > GLITCH_DIST) { + if(ir->glitch_cnt > GLITCH_MAX_COUNT) { + apply_ir_smoothing(ir); + ir->glitch_cnt = 0; + } else { + ir->glitch_cnt++; + } + } else { + ir->glitch_cnt = 0; + apply_ir_smoothing(ir); + } + } + ir->smooth_valid = 1; + ir->error_cnt = 0; + } else { + if(ir->error_cnt >= ERROR_MAX_COUNT) { + ir->smooth_valid = 0; + } else { + ir->smooth_valid = 1; + ir->error_cnt++; + } + } + if(ir->smooth_valid) { + x = ir->sx; + y = ir->sy; + if (ir_correct_for_bounds(&x, &y, ir->aspect, ir->offset[0], ir->offset[1])) { + ir_convert_to_vres(&x, &y, ir->aspect, ir->vres[0], ir->vres[1]); + ir->x = x; + ir->y = y; + ir->valid = 1; + } else { + ir->valid = 0; + } + } else { + ir->valid = 0; + } +} + +/** + * @brief Calculate yaw given the IR data. + * + * @param ir IR data structure. + */ +float calc_yaw(struct ir_t* ir) { + float x; + + x = ir->ax - 512; + x *= WIIMOTE_FOV_COEFFICIENT / 512.0; + + return RAD_TO_DEGREE( atanf(x) ); +} + diff --git a/wii/libogc/wiiuse/ir.h b/wii/libogc/wiiuse/ir.h new file mode 100644 index 0000000000..0ac683b8d1 --- /dev/null +++ b/wii/libogc/wiiuse/ir.h @@ -0,0 +1,25 @@ +/* This source as presented is a modified version of original wiiuse for use + * with RetroArch, and must not be confused with the original software. */ + +#ifndef __IR_H__ +#define __IR_H__ + +#include "wiiuse_internal.h" + +#define WII_VRES_X 560 +#define WII_VRES_Y 340 + +#ifdef __cplusplus +extern "C" { +#endif + +void calculate_basic_ir(struct wiimote_t* wm, ubyte* data); +void calculate_extended_ir(struct wiimote_t* wm, ubyte* data); +float calc_yaw(struct ir_t* ir); +void interpret_ir_data(struct ir_t* ir, struct orient_t *orient); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/wii/libogc/wiiuse/license_libogc.txt b/wii/libogc/wiiuse/license_libogc.txt new file mode 100644 index 0000000000..a149fce1ce --- /dev/null +++ b/wii/libogc/wiiuse/license_libogc.txt @@ -0,0 +1,641 @@ +This license is valid ONLY for libogc and what this license +defines as a "covered work" or a "combined work" with libogc. + + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an officialder +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + 18. Exceptions + + Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole combination. + + As a special exception, the copyright holders of this library give +you permission to link this library with independent modules to produce +an executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from or +based on this library. If you modify this library, you may extend this +exception to your version of the library, but you are not obligated to +do so. If you do not wish to do so, delete this exception statement from +your version. + diff --git a/wii/libogc/wiiuse/motion_plus.c b/wii/libogc/wiiuse/motion_plus.c new file mode 100644 index 0000000000..8d37d7063f --- /dev/null +++ b/wii/libogc/wiiuse/motion_plus.c @@ -0,0 +1,95 @@ +/* This source as presented is a modified version of original wiiuse for use + * with RetroArch, and must not be confused with the original software. */ + +#include +#include +#include +#include + +#ifdef WIN32 + #include +#endif + +#include "definitions.h" +#include "wiiuse_internal.h" +#include "dynamics.h" +#include "events.h" +#include "io.h" + +void wiiuse_motion_plus_check(struct wiimote_t *wm,ubyte *data,uword len) +{ + u32 val; + if(data == NULL) + { + wiiuse_read_data(wm, wm->motion_plus_id, WM_EXP_ID, 6, wiiuse_motion_plus_check); + } + else + { + WIIMOTE_DISABLE_STATE(wm, WIIMOTE_STATE_EXP); + WIIMOTE_DISABLE_STATE(wm, WIIMOTE_STATE_EXP_FAILED); + WIIMOTE_DISABLE_STATE(wm, WIIMOTE_STATE_EXP_HANDSHAKE); + val = (data[3] << 16) | (data[2] << 24) | (data[4] << 8) | data[5]; + if(val == EXP_ID_CODE_MOTION_PLUS) + { + /* handshake done */ + wm->event = WIIUSE_MOTION_PLUS_ACTIVATED; + wm->exp.type = EXP_MOTION_PLUS; + + WIIMOTE_ENABLE_STATE(wm,WIIMOTE_STATE_EXP); + wiiuse_set_ir_mode(wm); + } + } +} + +static void wiiuse_set_motion_plus_clear2(struct wiimote_t *wm,ubyte *data,uword len) +{ + WIIMOTE_DISABLE_STATE(wm, WIIMOTE_STATE_EXP); + WIIMOTE_DISABLE_STATE(wm, WIIMOTE_STATE_EXP_FAILED); + WIIMOTE_DISABLE_STATE(wm, WIIMOTE_STATE_EXP_HANDSHAKE); + wiiuse_set_ir_mode(wm); + wiiuse_status(wm,NULL); +} + +static void wiiuse_set_motion_plus_clear1(struct wiimote_t *wm,ubyte *data,uword len) +{ + ubyte val = 0x00; + wiiuse_write_data(wm,WM_EXP_MEM_ENABLE1,&val,1,wiiuse_set_motion_plus_clear2); +} + + +void wiiuse_set_motion_plus(struct wiimote_t *wm, int status) +{ + ubyte val; + + if(WIIMOTE_IS_SET(wm,WIIMOTE_STATE_EXP_HANDSHAKE)) + return; + + WIIMOTE_ENABLE_STATE(wm, WIIMOTE_STATE_EXP_HANDSHAKE); + if(status) + { + val = 0x04; + wiiuse_write_data(wm,WM_EXP_MOTION_PLUS_ENABLE,&val,1,wiiuse_motion_plus_check); + } + else + { + wiiuse_disable_expansion(wm); + val = 0x55; + wiiuse_write_data(wm,WM_EXP_MEM_ENABLE1,&val,1,wiiuse_set_motion_plus_clear1); + } +} + +void motion_plus_disconnected(struct motion_plus_t* mp) +{ + WIIUSE_DEBUG("Motion plus disconnected"); + memset(mp, 0, sizeof(struct motion_plus_t)); +} + +void motion_plus_event(struct motion_plus_t* mp, ubyte* msg) +{ + mp->rx = ((msg[5] & 0xFC) << 6) | msg[2]; // Pitch + mp->ry = ((msg[4] & 0xFC) << 6) | msg[1]; // Roll + mp->rz = ((msg[3] & 0xFC) << 6) | msg[0]; // Yaw + + mp->ext = msg[4] & 0x1; + mp->status = (msg[3] & 0x3) | ((msg[4] & 0x2) << 1); // roll, yaw, pitch +} diff --git a/wii/libogc/wiiuse/motion_plus.h b/wii/libogc/wiiuse/motion_plus.h new file mode 100644 index 0000000000..628d9c6492 --- /dev/null +++ b/wii/libogc/wiiuse/motion_plus.h @@ -0,0 +1,26 @@ +/** + * @file + * @brief Motion plus extension + */ + +/* This source as presented is a modified version of original wiiuse for use + * with RetroArch, and must not be confused with the original software. */ + +#ifndef MOTION_PLUS_H_INCLUDED +#define MOTION_PLUS_H_INCLUDED + +#include "wiiuse_internal.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void motion_plus_disconnected(struct motion_plus_t* mp); + +void motion_plus_event(struct motion_plus_t* mp, ubyte* msg); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/wii/libogc/wiiuse/nunchuk.c b/wii/libogc/wiiuse/nunchuk.c new file mode 100644 index 0000000000..468db73a31 --- /dev/null +++ b/wii/libogc/wiiuse/nunchuk.c @@ -0,0 +1,157 @@ +/* This source as presented is a modified version of original wiiuse for use + * with RetroArch, and must not be confused with the original software. */ + +#include +#include +#include +#include + +#include "dynamics.h" +#include "definitions.h" +#include "wiiuse_internal.h" +#include "nunchuk.h" +#include "io.h" + +/** + * @brief Find what buttons are pressed. + * + * @param nc Pointer to a nunchuk_t structure. + * @param msg The message byte specified in the event packet. + */ +static void nunchuk_pressed_buttons(struct nunchuk_t* nc, ubyte now) { + /* message is inverted (0 is active, 1 is inactive) */ + now = ~now & NUNCHUK_BUTTON_ALL; + + /* preserve old btns pressed */ + nc->btns_last = nc->btns; + + /* pressed now & were pressed, then held */ + nc->btns_held = (now & nc->btns); + + /* were pressed or were held & not pressed now, then released */ + nc->btns_released = ((nc->btns | nc->btns_held) & ~now); + + /* buttons pressed now */ + nc->btns = now; +} + +int nunchuk_handshake(struct wiimote_t *wm,struct nunchuk_t *nc,ubyte *data,uword len) +{ + //int i; + int offset = 0; + + nc->btns = 0; + nc->btns_held = 0; + nc->btns_released = 0; + nc->flags = &wm->flags; + nc->accel_calib = wm->accel_calib; + + //for(i=0;iaccel_calib.cal_zero.x = (data[offset + 0]<<2)|((data[offset + 3]>>4)&3); + nc->accel_calib.cal_zero.y = (data[offset + 1]<<2)|((data[offset + 3]>>2)&3); + nc->accel_calib.cal_zero.z = (data[offset + 2]<<2)|(data[offset + 3]&3); + nc->accel_calib.cal_g.x = (data[offset + 4]<<2)|((data[offset + 7]>>4)&3); + nc->accel_calib.cal_g.y = (data[offset + 5]<<2)|((data[offset + 7]>>2)&3); + nc->accel_calib.cal_g.z = (data[offset + 6]<<2)|(data[offset + 7]&3); + nc->js.max.x = data[offset + 8]; + nc->js.min.x = data[offset + 9]; + nc->js.center.x = data[offset + 10]; + nc->js.max.y = data[offset + 11]; + nc->js.min.y = data[offset + 12]; + nc->js.center.y = data[offset + 13]; + + // set to defaults (averages from 5 nunchuks) if calibration data is invalid + if(nc->accel_calib.cal_zero.x == 0) + nc->accel_calib.cal_zero.x = 499; + if(nc->accel_calib.cal_zero.y == 0) + nc->accel_calib.cal_zero.y = 509; + if(nc->accel_calib.cal_zero.z == 0) + nc->accel_calib.cal_zero.z = 507; + if(nc->accel_calib.cal_g.x == 0) + nc->accel_calib.cal_g.x = 703; + if(nc->accel_calib.cal_g.y == 0) + nc->accel_calib.cal_g.y = 709; + if(nc->accel_calib.cal_g.z == 0) + nc->accel_calib.cal_g.z = 709; + if(nc->js.max.x == 0) + nc->js.max.x = 223; + if(nc->js.min.x == 0) + nc->js.min.x = 27; + if(nc->js.center.x == 0) + nc->js.center.x = 126; + if(nc->js.max.y == 0) + nc->js.max.y = 222; + if(nc->js.min.y == 0) + nc->js.min.y = 30; + if(nc->js.center.y == 0) + nc->js.center.y = 131; + + wm->event = WIIUSE_NUNCHUK_INSERTED; + wm->exp.type = EXP_NUNCHUK; + + return 1; +} + +/** + * @brief The nunchuk disconnected. + * + * @param nc A pointer to a nunchuk_t structure. + */ +void nunchuk_disconnected(struct nunchuk_t* nc) +{ + //printf("nunchuk_disconnected()\n"); + memset(nc, 0, sizeof(struct nunchuk_t)); +} + +/** + * @brief Handle nunchuk event. + * + * @param nc A pointer to a nunchuk_t structure. + * @param msg The message specified in the event packet. + */ +void nunchuk_event(struct nunchuk_t* nc, ubyte* msg) { + //int i; + + /* decrypt data */ + /* + for (i = 0; i < 6; ++i) + msg[i] = (msg[i] ^ 0x17) + 0x17; + */ + /* get button states */ + nunchuk_pressed_buttons(nc, msg[5]); + + nc->js.pos.x = msg[0]; + nc->js.pos.y = msg[1]; + + /* extend min and max values to physical range of motion */ + if (nc->js.center.x) { + if (nc->js.min.x > nc->js.pos.x) nc->js.min.x = nc->js.pos.x; + if (nc->js.max.x < nc->js.pos.x) nc->js.max.x = nc->js.pos.x; + } + if (nc->js.center.y) { + if (nc->js.min.y > nc->js.pos.y) nc->js.min.y = nc->js.pos.y; + if (nc->js.max.y < nc->js.pos.y) nc->js.max.y = nc->js.pos.y; + } + +#ifndef GEKKO + /* calculate joystick state */ + calc_joystick_state(&nc->js, nc->js.pos.x, nc->js.pos.y); +#endif + /* calculate orientation */ + nc->accel.x = (msg[2]<<2) + ((msg[5]>>2)&3); + nc->accel.y = (msg[3]<<2) + ((msg[5]>>4)&3); + nc->accel.z = (msg[4]<<2) + ((msg[5]>>6)&3); +#ifndef GEKKO + calculate_orientation(&nc->accel_calib, &nc->accel, &nc->orient, NUNCHUK_IS_FLAG_SET(nc, WIIUSE_SMOOTHING)); + calculate_gforce(&nc->accel_calib, &nc->accel, &nc->gforce); +#endif +} + diff --git a/wii/libogc/wiiuse/nunchuk.h b/wii/libogc/wiiuse/nunchuk.h new file mode 100644 index 0000000000..7545aa7b6e --- /dev/null +++ b/wii/libogc/wiiuse/nunchuk.h @@ -0,0 +1,21 @@ +/* This source as presented is a modified version of original wiiuse for use + * with RetroArch, and must not be confused with the original software. */ + +#ifndef __NUNCHUK_H__ +#define __NUNCHUK_H__ + +#include "wiiuse_internal.h" + +#ifdef __cplusplus +extern "C" { +#endif + +int nunchuk_handshake(struct wiimote_t* wm, struct nunchuk_t* nc, ubyte* data, uword len); +void nunchuk_disconnected(struct nunchuk_t* nc); +void nunchuk_event(struct nunchuk_t* nc, ubyte* msg); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/wii/libogc/wiiuse/os.h b/wii/libogc/wiiuse/os.h new file mode 100644 index 0000000000..16571047cd --- /dev/null +++ b/wii/libogc/wiiuse/os.h @@ -0,0 +1,31 @@ +/* This source as presented is a modified version of original wiiuse for use + * with RetroArch, and must not be confused with the original software. */ + +#ifndef __OS_H__ +#define __OS_H__ + +#ifdef WIN32 + /* windows */ + #define isnan(x) _isnan(x) + #define isinf(x) !_finite(x) + + /* disable warnings I don't care about */ + #pragma warning(disable:4244) /* possible loss of data conversion */ + #pragma warning(disable:4273) /* inconsistent dll linkage */ + #pragma warning(disable:4217) +#else + /* nix/gekko */ + #ifdef GEKKO + #include + #include + #include + #include "network.h" + #include + #include + #include + #include + #else + #endif +#endif + +#endif diff --git a/wii/libogc/wiiuse/speaker.c b/wii/libogc/wiiuse/speaker.c new file mode 100644 index 0000000000..43ca994275 --- /dev/null +++ b/wii/libogc/wiiuse/speaker.c @@ -0,0 +1,145 @@ +/* This source as presented is a modified version of original wiiuse for use + * with RetroArch, and must not be confused with the original software. */ + +#include +#include +#include +#include + +#ifndef WIN32 +#include +#endif +#ifdef GEKKO +#include +#endif +#include "definitions.h" +#include "wiiuse_internal.h" +#include "speaker.h" + +#define WENCMIN(a,b) ((a)>(b)?(b):(a)) +#define ABS(x) ((s32)(x)>0?(s32)(x):-((s32)(x))) + +static const int yamaha_indexscale[] = { + 230, 230, 230, 230, 307, 409, 512, 614, + 230, 230, 230, 230, 307, 409, 512, 614 +}; + +static const int yamaha_difflookup[] = { + 1, 3, 5, 7, 9, 11, 13, 15, + -1, -3, -5, -7, -9, -11, -13, -15 +}; + +static ubyte __wiiuse_speaker_vol = 0x40; +static ubyte __wiiuse_speaker_defconf[7] = { 0x00,0x00,0xD0,0x07,0x40,0x0C,0x0E }; + +static __inline__ short wenc_clip_short(int a) +{ + if((a+32768)&~65535) return (a>>31)^32767; + else return a; +} + +static __inline__ int wenc_clip(int a,int amin,int amax) +{ + if(aamax) return amax; + else return a; +} + +ubyte wencdata(WENCStatus *info,short sample) +{ + int nibble,delta; + + if(!info->step) { + info->predictor = 0; + info->step = 127; + } + + delta = sample - info->predictor; + nibble = WENCMIN(7,(ABS(delta)*4)/info->step) + ((delta<0)*8); + + info->predictor += ((info->step*yamaha_difflookup[nibble])/8); + info->predictor = wenc_clip_short(info->predictor); + info->step = (info->step*yamaha_indexscale[nibble])>>8; + info->step = wenc_clip(info->step,127,24576); + + return nibble; +} + +void wiiuse_set_speaker(struct wiimote_t *wm,int status) +{ + ubyte conf[7]; + ubyte buf = 0x00; + + if(!wm) return; + + if(!WIIMOTE_IS_SET(wm,WIIMOTE_STATE_HANDSHAKE_COMPLETE)) { + WIIUSE_DEBUG("Tried to enable speaker, will wait until handshake finishes.\n"); + if(status) + WIIMOTE_ENABLE_STATE(wm, WIIMOTE_STATE_SPEAKER_INIT); + else + WIIMOTE_DISABLE_STATE(wm, WIIMOTE_STATE_SPEAKER_INIT); + return; + } + + if(status) { + if(WIIMOTE_IS_SET(wm,WIIMOTE_STATE_SPEAKER)) { + wiiuse_status(wm,NULL); + return; + } + } else { + if(!WIIMOTE_IS_SET(wm,WIIMOTE_STATE_SPEAKER)) { + wiiuse_status(wm,NULL); + return; + } + } + + + buf = 0x04; + wiiuse_sendcmd(wm,WM_CMD_SPEAKER_MUTE,&buf,1,NULL); + + if (!status) { + WIIUSE_DEBUG("Disabled speaker for wiimote id %i.", wm->unid); + + buf = 0x01; + wiiuse_write_data(wm,WM_REG_SPEAKER_REG1,&buf,1,NULL); + + buf = 0x00; + wiiuse_write_data(wm,WM_REG_SPEAKER_REG3,&buf,1,NULL); + + buf = 0x00; + wiiuse_sendcmd(wm,WM_CMD_SPEAKER_ENABLE,&buf,1,NULL); + + wiiuse_status(wm,NULL); + return; + } + + memcpy(conf,__wiiuse_speaker_defconf,7); + + buf = 0x04; + wiiuse_sendcmd(wm,WM_CMD_SPEAKER_ENABLE,&buf,1,NULL); + + buf = 0x01; + wiiuse_write_data(wm,WM_REG_SPEAKER_REG3,&buf,1,NULL); + + buf = 0x08; + wiiuse_write_data(wm,WM_REG_SPEAKER_REG1,&buf,1,NULL); + + conf[2] = 0xd0; + conf[3] = 0x07; + conf[4] = __wiiuse_speaker_vol; + wiiuse_write_data(wm,WM_REG_SPEAKER_BLOCK,conf,7,NULL); + + buf = 0x01; + wiiuse_write_data(wm,WM_REG_SPEAKER_REG2,&buf,1,NULL); + + buf = 0x00; + wiiuse_sendcmd(wm,WM_CMD_SPEAKER_MUTE,&buf,1,NULL); + + wiiuse_status(wm,NULL); + return; +} + +void set_speakervol(struct wiimote_t *wm,ubyte vol) +{ + __wiiuse_speaker_vol = vol; +} diff --git a/wii/libogc/wiiuse/speaker.h b/wii/libogc/wiiuse/speaker.h new file mode 100644 index 0000000000..b7b9229126 --- /dev/null +++ b/wii/libogc/wiiuse/speaker.h @@ -0,0 +1,33 @@ +/* This source as presented is a modified version of original wiiuse for use + * with RetroArch, and must not be confused with the original software. */ + +#ifndef __SPEAKER_H__ +#define __SPEAKER_H__ + +#include "wiiuse_internal.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _wencstatus +{ + s32 predictor; + s16 step_index; + s32 step; + s32 prev_sample; + s16 sample1; + s16 sample2; + s32 coeff1; + s32 coeff2; + s32 idelta; +} WENCStatus; + +u8 wencdata(WENCStatus *info,s16 sample); +void set_speakervol(struct wiimote_t *wm,ubyte vol); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/wii/libogc/wiiuse/wiiuse.c b/wii/libogc/wiiuse/wiiuse.c new file mode 100644 index 0000000000..73e813063a --- /dev/null +++ b/wii/libogc/wiiuse/wiiuse.c @@ -0,0 +1,337 @@ +/* This source as presented is a modified version of original wiiuse for use + * with RetroArch, and must not be confused with the original software. */ + +#include +#include +#include + +#ifndef WIN32 + #include +#else + #include +#endif + +#include "definitions.h" +#include "wiiuse_internal.h" +#include "io.h" + +static struct wiimote_t** __wm = NULL; + +void wiiuse_send_next_command(struct wiimote_t *wm) +{ + struct cmd_blk_t *cmd = wm->cmd_head; + + if(!wm || !WIIMOTE_IS_CONNECTED(wm)) return; + + if(!cmd) return; + if(cmd->state!=CMD_READY) return; + + cmd->state = CMD_SENT; +#ifdef HAVE_WIIUSE_RUMBLE + if(WIIMOTE_IS_SET(wm,WIIMOTE_STATE_RUMBLE)) cmd->data[1] |= 0x01; +#endif + + //WIIUSE_DEBUG("Sending command: %02x %02x", cmd->data[0], cmd->data[1]); + wiiuse_io_write(wm,cmd->data,cmd->len); +} + +static inline void __wiiuse_push_command(struct wiimote_t *wm,struct cmd_blk_t *cmd) +{ + uint level; + + if(!wm || !cmd) return; + + cmd->next = NULL; + cmd->state = CMD_READY; + + _CPU_ISR_Disable(level); + if(wm->cmd_head==NULL) { + wm->cmd_head = wm->cmd_tail = cmd; + wiiuse_send_next_command(wm); + } else { + wm->cmd_tail->next = cmd; + wm->cmd_tail = cmd; + } + _CPU_ISR_Restore(level); +} + +#ifndef GEKKO +struct wiimote_t** wiiuse_init(int wiimotes) { +#else +extern void __wiiuse_sensorbar_enable(int enable); +struct wiimote_t** wiiuse_init(int wiimotes, wii_event_cb event_cb) { +#endif + int i = 0; + + if (!wiimotes) + return NULL; + + if (!__wm) { + __wm = __lwp_heap_allocate(&__wkspace_heap, sizeof(struct wiimote_t*) * wiimotes); + if(!__wm) return NULL; + memset(__wm, 0, sizeof(struct wiimote_t*) * wiimotes); + } + + for (i = 0; i < wiimotes; ++i) { + if(!__wm[i]) + __wm[i] = __lwp_heap_allocate(&__wkspace_heap, sizeof(struct wiimote_t)); + + memset(__wm[i], 0, sizeof(struct wiimote_t)); + __wm[i]->unid = i; + + #if defined(WIN32) + __wm[i]->dev_handle = 0; + __wm[i]->stack = WIIUSE_STACK_UNKNOWN; + __wm[i]->normal_timeout = WIIMOTE_DEFAULT_TIMEOUT; + __wm[i]->exp_timeout = WIIMOTE_EXP_TIMEOUT; + __wm[i]->timeout = __wm[i]->normal_timeout; + #elif defined(GEKKO) + __wm[i]->sock = NULL; + __wm[i]->bdaddr = *BD_ADDR_ANY; + __wm[i]->event_cb = event_cb; + wiiuse_init_cmd_queue(__wm[i]); + #elif defined(unix) + __wm[i]->bdaddr = *BDADDR_ANY; + __wm[i]->out_sock = -1; + __wm[i]->in_sock = -1; + #endif + + __wm[i]->state = WIIMOTE_INIT_STATES; + __wm[i]->flags = WIIUSE_INIT_FLAGS; + + __wm[i]->event = WIIUSE_NONE; + + __wm[i]->exp.type = EXP_NONE; + + wiiuse_set_aspect_ratio(__wm[i], WIIUSE_ASPECT_4_3); + wiiuse_set_ir_position(__wm[i], WIIUSE_IR_ABOVE); + + __wm[i]->accel_calib.st_alpha = WIIUSE_DEFAULT_SMOOTH_ALPHA; + } + + return __wm; +} + +/** + * @brief Set flags for the specified wiimote. + * + * @param wm Pointer to a wiimote_t structure. + * @param enable Flags to enable. + * @param disable Flags to disable. + * + * @return The flags set after 'enable' and 'disable' have been applied. + * + * The values 'enable' and 'disable' may be any flags OR'ed together. + * Flags are defined in wiiuse.h. + */ +int wiiuse_set_flags(struct wiimote_t* wm, int enable, int disable) { + if (!wm) return 0; + + /* remove mutually exclusive flags */ + enable &= ~disable; + disable &= ~enable; + + wm->flags |= enable; + wm->flags &= ~disable; + + return wm->flags; +} + +/** + * @brief Set if the wiimote should report motion sensing. + * + * @param wm Pointer to a wiimote_t structure. + * @param status 1 to enable, 0 to disable. + * + * Since reporting motion sensing sends a lot of data, + * the wiimote saves power by not transmitting it + * by default. + */ +void wiiuse_motion_sensing(struct wiimote_t* wm, int status) +{ + if (status) { + if(WIIMOTE_IS_SET(wm,WIIMOTE_STATE_ACC)) return; + WIIMOTE_ENABLE_STATE(wm, WIIMOTE_STATE_ACC); + } else { + if(!WIIMOTE_IS_SET(wm,WIIMOTE_STATE_ACC)) return; + WIIMOTE_DISABLE_STATE(wm, WIIMOTE_STATE_ACC); + } + + if(!WIIMOTE_IS_SET(wm,WIIMOTE_STATE_HANDSHAKE_COMPLETE)) return; + + wiiuse_status(wm,NULL); +} + +/** + * @brief Toggle the state of the rumble. + * + * @param wm Pointer to a wiimote_t structure. + */ +#ifdef HAVE_WIIUSE_RUMBLE +void wiiuse_toggle_rumble(struct wiimote_t* wm) +{ + if (!wm) return; + + WIIMOTE_TOGGLE_STATE(wm, WIIMOTE_STATE_RUMBLE); + if(!WIIMOTE_IS_SET(wm,WIIMOTE_STATE_HANDSHAKE_COMPLETE)) return; + + wiiuse_set_leds(wm,wm->leds,NULL); +} + +/** + * @brief Enable or disable the rumble. + * + * @param wm Pointer to a wiimote_t structure. + * @param status 1 to enable, 0 to disable. + */ +void wiiuse_rumble(struct wiimote_t* wm, int status) +{ + if (status && WIIMOTE_IS_SET(wm,WIIMOTE_STATE_RUMBLE)) return; + else if(!status && !WIIMOTE_IS_SET(wm,WIIMOTE_STATE_RUMBLE)) return; + wiiuse_toggle_rumble(wm); +} +#endif + +void wiiuse_set_leds(struct wiimote_t *wm,int leds,cmd_blk_cb cb) +{ + ubyte buf; + + if(!wm || !WIIMOTE_IS_CONNECTED(wm)) return; + + wm->leds = (leds&0xf0); + + buf = wm->leds; + wiiuse_sendcmd(wm,WM_CMD_LED,&buf,1,cb); +} + +int wiiuse_set_report_type(struct wiimote_t *wm,cmd_blk_cb cb) +{ + ubyte buf[2]; + int motion,ir,exp; + + if(!wm || !WIIMOTE_IS_CONNECTED(wm)) return 0; + + buf[0] = (WIIMOTE_IS_FLAG_SET(wm, WIIUSE_CONTINUOUS) ? 0x04 : 0x00); /* set to 0x04 for continuous reporting */ + buf[1] = 0x00; + + motion = WIIMOTE_IS_SET(wm, WIIMOTE_STATE_ACC) || WIIMOTE_IS_SET(wm, WIIMOTE_STATE_IR); + exp = WIIMOTE_IS_SET(wm, WIIMOTE_STATE_EXP); + ir = WIIMOTE_IS_SET(wm, WIIMOTE_STATE_IR); + + if (motion && ir && exp) buf[1] = WM_RPT_BTN_ACC_IR_EXP; + else if (motion && exp) buf[1] = WM_RPT_BTN_ACC_EXP; + else if (motion && ir) buf[1] = WM_RPT_BTN_ACC_IR; + else if (ir && exp) buf[1] = WM_RPT_BTN_IR_EXP; + else if (ir) buf[1] = WM_RPT_BTN_ACC_IR; + else if (exp) buf[1] = WM_RPT_BTN_EXP; + else if (motion) buf[1] = WM_RPT_BTN_ACC; + else buf[1] = WM_RPT_BTN; + + //WIIUSE_DEBUG("Setting report type: 0x%x", buf[1]); + + wiiuse_sendcmd(wm,WM_CMD_REPORT_TYPE,buf,2,cb); + return buf[1]; +} + +void wiiuse_status(struct wiimote_t *wm,cmd_blk_cb cb) +{ + ubyte buf; + + if(!wm || !WIIMOTE_IS_CONNECTED(wm)) return; + + buf = 0x00; + wiiuse_sendcmd(wm,WM_CMD_CTRL_STATUS,&buf,1,cb); +} + +int wiiuse_read_data(struct wiimote_t *wm,ubyte *buffer,uint addr,uword len,cmd_blk_cb cb) +{ + struct op_t *op; + struct cmd_blk_t *cmd; + + if(!wm || !WIIMOTE_IS_CONNECTED(wm)) return 0; + if(!buffer || !len) return 0; + + cmd = (struct cmd_blk_t*)__lwp_queue_get(&wm->cmdq); + if(!cmd) return 0; + + cmd->cb = cb; + cmd->len = 7; + + op = (struct op_t*)cmd->data; + op->cmd = WM_CMD_READ_DATA; + op->buffer = buffer; + op->wait = len; + op->readdata.addr = BIG_ENDIAN_LONG(addr); + op->readdata.size = BIG_ENDIAN_SHORT(len); + __wiiuse_push_command(wm,cmd); + + return 1; +} + +int wiiuse_write_data(struct wiimote_t *wm,uint addr,ubyte *data,ubyte len,cmd_blk_cb cb) +{ + struct op_t *op; + struct cmd_blk_t *cmd; + + if(!wm || !WIIMOTE_IS_CONNECTED(wm)) return 0; + if(!data || !len) return 0; + + cmd = (struct cmd_blk_t*)__lwp_queue_get(&wm->cmdq); + if(!cmd) return 0; + + cmd->cb = cb; + cmd->len = 22; + + op = (struct op_t*)cmd->data; + op->cmd = WM_CMD_WRITE_DATA; + op->buffer = NULL; + op->wait = 0; + op->writedata.addr = BIG_ENDIAN_LONG(addr); + op->writedata.size = (len&0x0f); + memcpy(op->writedata.data,data,len); + memset(op->writedata.data+len,0,(16 - len)); + __wiiuse_push_command(wm,cmd); + + return 1; +} + +int wiiuse_write_streamdata(struct wiimote_t *wm,ubyte *data,ubyte len,cmd_blk_cb cb) +{ + struct cmd_blk_t *cmd; + + if(!wm || !WIIMOTE_IS_CONNECTED(wm)) return 0; + if(!data || !len || len>20) return 0; + + cmd = (struct cmd_blk_t*)__lwp_queue_get(&wm->cmdq); + if(!cmd) return 0; + + cmd->cb = cb; + cmd->len = 22; + cmd->data[0] = WM_CMD_STREAM_DATA; + cmd->data[1] = (len<<3); + memcpy(cmd->data+2,data,len); + __wiiuse_push_command(wm,cmd); + + return 1; +} + +int wiiuse_sendcmd(struct wiimote_t *wm,ubyte report_type,ubyte *msg,int len,cmd_blk_cb cb) +{ + struct cmd_blk_t *cmd; + + cmd = (struct cmd_blk_t*)__lwp_queue_get(&wm->cmdq); + if(!cmd) return 0; + + cmd->cb = cb; + cmd->len = (1+len); + + cmd->data[0] = report_type; + memcpy(cmd->data+1,msg,len); + if(report_type!=WM_CMD_READ_DATA && report_type!=WM_CMD_CTRL_STATUS) + cmd->data[1] |= 0x02; + + //WIIUSE_DEBUG("Pushing command: %02x %02x", cmd->data[0], cmd->data[1]); + __wiiuse_push_command(wm,cmd); + + return 1; +} diff --git a/wii/libogc/wiiuse/wiiuse_internal.h b/wii/libogc/wiiuse/wiiuse_internal.h new file mode 100644 index 0000000000..c95171e9de --- /dev/null +++ b/wii/libogc/wiiuse/wiiuse_internal.h @@ -0,0 +1,280 @@ +/* + * wiiuse + * + * Written By: + * Michael Laforest < para > + * Email: < thepara (--AT--) g m a i l [--DOT--] com > + * + * Copyright 2006-2007 + * + * This file is part of wiiuse. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * $Header: /lvm/shared/ds/ds/cvs/devkitpro-cvsbackup/libogc/wiiuse/wiiuse_internal.h,v 1.8 2008-12-10 16:16:40 shagkur Exp $ + * + */ + +/** + * @file + * @brief General internal wiiuse stuff. + * + * Since Wiiuse is a library, wiiuse.h is a duplicate + * of the API header. + * + * The code that would normally go in that file, but + * which is not needed by third party developers, + * is put here. + * + * So wiiuse_internal.h is included by other files + * internally, wiiuse.h is included only here. + */ + +/* This source as presented is a modified version of original wiiuse for use + * with RetroArch, and must not be confused with the original software. */ + +#ifndef WIIUSE_INTERNAL_H_INCLUDED +#define WIIUSE_INTERNAL_H_INCLUDED + +#if defined(__linux__) + #include /* htons() */ + #include +#endif + +#include "definitions.h" + +/* wiiuse version */ +#define WIIUSE_VERSION "0.12" + +/******************** + * + * Wiimote internal codes + * + ********************/ + +/* Communication channels */ +#define WM_OUTPUT_CHANNEL 0x11 +#define WM_INPUT_CHANNEL 0x13 + +#define WM_SET_REPORT 0x50 +#define WM_DATA 0xA0 + +/* commands */ +#define WM_CMD_RUMBLE 0x10 +#define WM_CMD_LED 0x11 +#define WM_CMD_REPORT_TYPE 0x12 +#define WM_CMD_IR 0x13 +#define WM_CMD_SPEAKER_ENABLE 0x14 +#define WM_CMD_CTRL_STATUS 0x15 +#define WM_CMD_WRITE_DATA 0x16 +#define WM_CMD_READ_DATA 0x17 +#define WM_CMD_STREAM_DATA 0x18 +#define WM_CMD_SPEAKER_MUTE 0x19 +#define WM_CMD_IR_2 0x1A + +/* input report ids */ +#define WM_RPT_CTRL_STATUS 0x20 +#define WM_RPT_READ 0x21 +#define WM_RPT_ACK 0x22 +#define WM_RPT_BTN 0x30 +#define WM_RPT_BTN_ACC 0x31 +#define WM_RPT_BTN_ACC_IR 0x33 +#define WM_RPT_BTN_EXP 0x34 +#define WM_RPT_BTN_ACC_EXP 0x35 +#define WM_RPT_BTN_IR_EXP 0x36 +#define WM_RPT_BTN_ACC_IR_EXP 0x37 + +#define WM_BT_INPUT 0x01 +#define WM_BT_OUTPUT 0x02 + +/* Identify the wiimote device by its class */ +#define WM_DEV_CLASS_0 0x04 +#define WM_DEV_CLASS_1 0x25 +#define WM_DEV_CLASS_2 0x00 +#define WM_VENDOR_ID 0x057E +#define WM_PRODUCT_ID 0x0306 + +/* controller status stuff */ +#define WM_MAX_BATTERY_CODE 0xC8 + +/* offsets in wiimote memory */ +#define WM_MEM_OFFSET_CALIBRATION 0x16 +#define WM_EXP_MEM_BASE 0x04A40000 +#define WM_EXP_MEM_ENABLE1 0x04A400F0 +#define WM_EXP_MEM_ENABLE2 0x04A400FB +#define WM_EXP_MEM_KEY 0x04A40040 +#define WM_EXP_MEM_CALIBR 0x04A40020 +#define WM_EXP_MOTION_PLUS_ENABLE 0x04A600FE +#define WM_EXP_ID 0x04A400FA + +#define WM_REG_IR 0x04B00030 +#define WM_REG_IR_BLOCK1 0x04B00000 +#define WM_REG_IR_BLOCK2 0x04B0001A +#define WM_REG_IR_MODENUM 0x04B00033 + +#define WM_REG_SPEAKER_REG1 0x04A20001 +#define WM_REG_SPEAKER_REG2 0x04A20008 +#define WM_REG_SPEAKER_REG3 0x04A20009 +#define WM_REG_SPEAKER_BLOCK 0x04A20001 + +/* ir block data */ +#define WM_IR_BLOCK1_LEVEL1 "\x02\x00\x00\x71\x01\x00\x64\x00\xfe" +#define WM_IR_BLOCK2_LEVEL1 "\xfd\x05" +#define WM_IR_BLOCK1_LEVEL2 "\x02\x00\x00\x71\x01\x00\x96\x00\xb4" +#define WM_IR_BLOCK2_LEVEL2 "\xb3\x04" +#define WM_IR_BLOCK1_LEVEL3 "\x02\x00\x00\x71\x01\x00\xaa\x00\x64" +#define WM_IR_BLOCK2_LEVEL3 "\x63\x03" +#define WM_IR_BLOCK1_LEVEL4 "\x02\x00\x00\x71\x01\x00\xc8\x00\x36" +#define WM_IR_BLOCK2_LEVEL4 "\x35\x03" +#define WM_IR_BLOCK1_LEVEL5 "\x07\x00\x00\x71\x01\x00\x72\x00\x20" +#define WM_IR_BLOCK2_LEVEL5 "\x1f\x03" + +#define WM_IR_TYPE_BASIC 0x01 +#define WM_IR_TYPE_EXTENDED 0x03 +#define WM_IR_TYPE_FULL 0x05 + +/* controller status flags for the first message byte */ +/* bit 1 is unknown */ +#define WM_CTRL_STATUS_BYTE1_ATTACHMENT 0x02 +#define WM_CTRL_STATUS_BYTE1_SPEAKER_ENABLED 0x04 +#define WM_CTRL_STATUS_BYTE1_IR_ENABLED 0x08 +#define WM_CTRL_STATUS_BYTE1_LED_1 0x10 +#define WM_CTRL_STATUS_BYTE1_LED_2 0x20 +#define WM_CTRL_STATUS_BYTE1_LED_3 0x40 +#define WM_CTRL_STATUS_BYTE1_LED_4 0x80 + +/* aspect ratio */ +#define WM_ASPECT_16_9_X 660 +#define WM_ASPECT_16_9_Y 370 +#define WM_ASPECT_4_3_X 560 +#define WM_ASPECT_4_3_Y 420 + + +/** + * Expansion stuff + */ + +/* encrypted expansion id codes (located at 0x04A400FC) */ +#define EXP_ID_CODE_NUNCHUK 0xa4200000 +#define EXP_ID_CODE_CLASSIC_CONTROLLER 0xa4200101 +#define EXP_ID_CODE_CLASSIC_CONTROLLER_NYKOWING 0x90908f00 +#define EXP_ID_CODE_CLASSIC_CONTROLLER_NYKOWING2 0x9e9f9c00 +#define EXP_ID_CODE_CLASSIC_CONTROLLER_NYKOWING3 0x908f8f00 +#define EXP_ID_CODE_CLASSIC_CONTROLLER_GENERIC 0xa5a2a300 +#define EXP_ID_CODE_CLASSIC_CONTROLLER_GENERIC2 0x98999900 +#define EXP_ID_CODE_CLASSIC_CONTROLLER_GENERIC3 0xa0a1a000 +#define EXP_ID_CODE_CLASSIC_CONTROLLER_GENERIC4 0x8d8d8e00 +#define EXP_ID_CODE_CLASSIC_CONTROLLER_GENERIC5 0x93949400 +#define EXP_ID_CODE_CLASSIC_WIIU_PRO 0xa4200120 +//#define EXP_ID_CODE_GUITAR 0xa4200103 +//#define EXP_ID_CODE_WIIBOARD 0xa4200402 +#define EXP_ID_CODE_MOTION_PLUS 0xa4200405 + +#define EXP_HANDSHAKE_LEN 224 + +/******************** + * + * End Wiimote internal codes + * + ********************/ + +/* wiimote state flags - (some duplicated in wiiuse.h)*/ +#define WIIMOTE_STATE_DEV_FOUND 0x00001 +//#define WIIMOTE_STATE_DEV_REGISTER 0x00002 +#define WIIMOTE_STATE_HANDSHAKE 0x00004 /* actual connection exists but no handshake yet */ +#define WIIMOTE_STATE_HANDSHAKE_COMPLETE 0x00008 /* actual connection exists but no handshake yet */ +#define WIIMOTE_STATE_CONNECTED 0x00010 +#define WIIMOTE_STATE_EXP_HANDSHAKE 0x00020 /* actual connection exists but no handshake yet */ +#define WIIMOTE_STATE_EXP_FAILED 0x00040 /* actual connection exists but no handshake yet */ +#define WIIMOTE_STATE_RUMBLE 0x00080 +#define WIIMOTE_STATE_ACC 0x00100 +#define WIIMOTE_STATE_EXP 0x00200 +#define WIIMOTE_STATE_IR 0x00400 +#define WIIMOTE_STATE_SPEAKER 0x00800 +#define WIIMOTE_STATE_IR_SENS_LVL1 0x01000 +#define WIIMOTE_STATE_IR_SENS_LVL2 0x02000 +#define WIIMOTE_STATE_IR_SENS_LVL3 0x04000 +#define WIIMOTE_STATE_IR_SENS_LVL4 0x08000 +#define WIIMOTE_STATE_IR_SENS_LVL5 0x10000 +#define WIIMOTE_STATE_IR_INIT 0x20000 +#define WIIMOTE_STATE_SPEAKER_INIT 0x40000 +#define WIIMOTE_STATE_WIIU_PRO 0x80000 + +#define WIIMOTE_INIT_STATES (WIIMOTE_STATE_IR_SENS_LVL3) + +/* macro to manage states */ +#define WIIMOTE_IS_SET(wm, s) ((wm->state & (s)) == (s)) +#define WIIMOTE_ENABLE_STATE(wm, s) (wm->state |= (s)) +#define WIIMOTE_DISABLE_STATE(wm, s) (wm->state &= ~(s)) +#define WIIMOTE_TOGGLE_STATE(wm, s) ((wm->state & (s)) ? WIIMOTE_DISABLE_STATE(wm, s) : WIIMOTE_ENABLE_STATE(wm, s)) + +#define WIIMOTE_IS_FLAG_SET(wm, s) ((wm->flags & (s)) == (s)) +#define WIIMOTE_ENABLE_FLAG(wm, s) (wm->flags |= (s)) +#define WIIMOTE_DISABLE_FLAG(wm, s) (wm->flags &= ~(s)) +#define WIIMOTE_TOGGLE_FLAG(wm, s) ((wm->flags & (s)) ? WIIMOTE_DISABLE_FLAG(wm, s) : WIIMOTE_ENABLE_FLAG(wm, s)) + +#define NUNCHUK_IS_FLAG_SET(wm, s) ((*(wm->flags) & (s)) == (s)) + +/* misc macros */ +#define WIIMOTE_ID(wm) (wm->unid) +#define WIIMOTE_IS_CONNECTED(wm) (WIIMOTE_IS_SET(wm, WIIMOTE_STATE_CONNECTED)) + +/* + * Smooth tilt calculations are computed with the + * exponential moving average formula: + * St = St_last + (alpha * (tilt - St_last)) + * alpha is between 0 and 1 + */ +#define WIIUSE_DEFAULT_SMOOTH_ALPHA 0.3f + +#define SMOOTH_ROLL 0x01 +#define SMOOTH_PITCH 0x02 + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct op_t +{ + ubyte cmd; + union { + struct { + uint addr; + uword size; + } readdata; + struct { + uint addr; + ubyte size; + ubyte data[16]; + } writedata; + ubyte __data[MAX_PAYLOAD]; + }; + + void *buffer; + int wait; +} __attribute__((packed)); + +/* not part of the api */ +void wiiuse_init_cmd_queue(struct wiimote_t *wm); +void wiiuse_send_next_command(struct wiimote_t *wm); +int wiiuse_set_report_type(struct wiimote_t* wm,cmd_blk_cb cb); +int wiiuse_sendcmd(struct wiimote_t *wm,ubyte report_type,ubyte *msg,int len,cmd_blk_cb cb); + +#ifdef __cplusplus +} +#endif + +#endif /* WIIUSE_INTERNAL_H_INCLUDED */ diff --git a/wii/libogc/wiiuse/wpad.c b/wii/libogc/wiiuse/wpad.c new file mode 100644 index 0000000000..8e80da0de3 --- /dev/null +++ b/wii/libogc/wiiuse/wpad.c @@ -0,0 +1,1106 @@ +/*------------------------------------------------------------- + +wpad.c -- Wiimote Application Programmers Interface + +Copyright (C) 2008 +Michael Wiedenbauer (shagkur) +Dave Murphy (WinterMute) +Hector Martin (marcan) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + +/* This source as presented is a modified version of original wiiuse for use + * with RetroArch, and must not be confused with the original software. */ + +#include +#include +#include +#include +#include + +#include "os.h" +#include "conf.h" +#include "ir.h" + +#ifdef HAVE_WIIUSE_SPEAKER +#include "speaker.h" +#endif + +#include "dynamics.h" +#include "wiiuse_internal.h" +#include "wiiuse/wpad.h" +#include "lwp_threads.h" +#include "ogcsys.h" + +#define MAX_STREAMDATA_LEN 20 +#define EVENTQUEUE_LENGTH 16 + +#define DISCONNECT_BATTERY_DIED 0x14 +#define DISCONNECT_POWER_OFF 0x15 + +struct _wpad_thresh{ + s32 btns; + s32 ir; + s32 js; + s32 acc; + s32 mp; +}; + +struct _wpad_cb { + wiimote *wm; + s32 data_fmt; + s32 queue_head; + s32 queue_tail; + s32 queue_full; + u32 queue_length; + u32 dropped_events; + s32 idle_time; + s32 speaker_enabled; + struct _wpad_thresh thresh; + +#ifdef HAVE_WIIUSE_SPEAKER + void *sound_data; + u32 sound_len; + u32 sound_off; + syswd_t sound_alarm; +#endif + + WPADData lstate; +#ifdef HAVE_WIIUSE_QUEUE_EXT + WPADData *queue_ext; +#endif + WPADData queue_int[EVENTQUEUE_LENGTH]; +}; + +static syswd_t __wpad_timer; +static vu32 __wpads_inited = 0; +static vs32 __wpads_ponded = 0; +static u32 __wpad_idletimeout = 300; +static vu32 __wpads_active = 0; +static vu32 __wpads_used = 0; +static wiimote **__wpads = NULL; +static wiimote_listen __wpads_listen[CONF_PAD_MAX_REGISTERED]; +static WPADData wpaddata[WPAD_MAX_WIIMOTES]; +static struct _wpad_cb __wpdcb[WPAD_MAX_WIIMOTES]; +static conf_pads __wpad_devs; +static struct linkkey_info __wpad_keys[WPAD_MAX_WIIMOTES]; + +static s32 __wpad_onreset(s32 final); +static s32 __wpad_disconnect(struct _wpad_cb *wpdcb); +static void __wpad_eventCB(struct wiimote_t *wm,s32 event); + +static void __wpad_def_powcb(s32 chan); +static WPADShutdownCallback __wpad_batcb = NULL; +static WPADShutdownCallback __wpad_powcb = __wpad_def_powcb; + +extern void __wiiuse_sensorbar_enable(int enable); +extern void __SYS_DoPowerCB(void); + +static sys_resetinfo __wpad_resetinfo = { + {}, + __wpad_onreset, + 127 +}; + +static s32 __wpad_onreset(s32 final) +{ + //printf("__wpad_onreset(%d)\n",final); + if(final==FALSE) { + WPAD_Shutdown(); + } + return 1; +} + +static void __wpad_def_powcb(s32 chan) +{ + __SYS_DoPowerCB(); +} + +static void __wpad_timeouthandler(syswd_t alarm,void *cbarg) +{ + s32 i; + struct wiimote_t *wm = NULL; + struct _wpad_cb *wpdcb = NULL; + + if(!__wpads_active) return; + + ++_thread_dispatch_disable_level; + for(i=0;iwm; + if(wm && WIIMOTE_IS_SET(wm,WIIMOTE_STATE_CONNECTED)) { + wpdcb->idle_time++; + if(wpdcb->idle_time>=__wpad_idletimeout) { + wpdcb->idle_time = 0; + wiiuse_disconnect(wm); + } + } + } + --_thread_dispatch_disable_level; +} + +#ifdef HAVE_WIIUSE_SPEAKER +static void __wpad_sounddata_alarmhandler(syswd_t alarm,void *cbarg) +{ + u8 *snd_data; + u32 snd_off; + struct wiimote_t *wm; + struct _wpad_cb *wpdcb = (struct _wpad_cb*)cbarg; + + if(!wpdcb) return; + + if(wpdcb->sound_off>=wpdcb->sound_len) { + wpdcb->sound_data = NULL; + wpdcb->sound_len = 0; + wpdcb->sound_off = 0; + SYS_CancelAlarm(wpdcb->sound_alarm); + return; + } + + wm = wpdcb->wm; + snd_data = wpdcb->sound_data; + snd_off = wpdcb->sound_off; + wpdcb->sound_off += MAX_STREAMDATA_LEN; + wiiuse_write_streamdata(wm,(snd_data+snd_off),MAX_STREAMDATA_LEN,NULL); +} +#endif + +static void __wpad_setfmt(s32 chan) +{ + switch(__wpdcb[chan].data_fmt) { + case WPAD_FMT_BTNS: + wiiuse_set_flags(__wpads[chan], 0, WIIUSE_CONTINUOUS); + wiiuse_motion_sensing(__wpads[chan],0); + wiiuse_set_ir(__wpads[chan],0); + break; + case WPAD_FMT_BTNS_ACC: + wiiuse_set_flags(__wpads[chan], WIIUSE_CONTINUOUS, 0); + wiiuse_motion_sensing(__wpads[chan],1); + wiiuse_set_ir(__wpads[chan],0); + break; + case WPAD_FMT_BTNS_ACC_IR: + wiiuse_set_flags(__wpads[chan], WIIUSE_CONTINUOUS, 0); + wiiuse_motion_sensing(__wpads[chan],1); + wiiuse_set_ir(__wpads[chan],1); + break; + default: + break; + } +} + +wiimote *__wpad_assign_slot(struct bd_addr *pad_addr) +{ + u32 i, level; + struct bd_addr bdaddr; + //printf("WPAD Assigning slot (active: 0x%02x)\n", __wpads_used); + _CPU_ISR_Disable(level); + + // Try preassigned slots + for(i=0; iwm; + if(wm && WIIMOTE_IS_SET(wm,WIIMOTE_STATE_CONNECTED)) { + wiiuse_disconnect(wm); + } + + return 0; +} + +static void __wpad_calc_data(WPADData *data,WPADData *lstate,struct accel_t *accel_calib,u32 smoothed) +{ + if(data->err!=WPAD_ERR_NONE) return; + + data->orient = lstate->orient; + + data->ir.state = lstate->ir.state; + data->ir.sensorbar = lstate->ir.sensorbar; + data->ir.x = lstate->ir.x; + data->ir.y = lstate->ir.y; + data->ir.sx = lstate->ir.sx; + data->ir.sy = lstate->ir.sy; + data->ir.ax = lstate->ir.ax; + data->ir.ay = lstate->ir.ay; + data->ir.distance = lstate->ir.distance; + data->ir.z = lstate->ir.z; + data->ir.angle = lstate->ir.angle; + data->ir.error_cnt = lstate->ir.error_cnt; + data->ir.glitch_cnt = lstate->ir.glitch_cnt; + + if(data->data_present & WPAD_DATA_ACCEL) { + calculate_orientation(accel_calib, &data->accel, &data->orient, smoothed); + calculate_gforce(accel_calib, &data->accel, &data->gforce); + } + if(data->data_present & WPAD_DATA_IR) { + interpret_ir_data(&data->ir,&data->orient); + } + if(data->data_present & WPAD_DATA_EXPANSION) { + switch(data->exp.type) { + case EXP_NUNCHUK: + { + struct nunchuk_t *nc = &data->exp.nunchuk; + + nc->orient = lstate->exp.nunchuk.orient; + calc_joystick_state(&nc->js,nc->js.pos.x,nc->js.pos.y); + calculate_orientation(&nc->accel_calib,&nc->accel,&nc->orient,smoothed); + calculate_gforce(&nc->accel_calib,&nc->accel,&nc->gforce); + data->btns_h |= (data->exp.nunchuk.btns<<16); + } + break; + + case EXP_CLASSIC: + { + struct classic_ctrl_t *cc = &data->exp.classic; + + cc->r_shoulder = ((f32)cc->rs_raw/0x1F); + cc->l_shoulder = ((f32)cc->ls_raw/0x1F); + calc_joystick_state(&cc->ljs, cc->ljs.pos.x, cc->ljs.pos.y); + calc_joystick_state(&cc->rjs, cc->rjs.pos.x, cc->rjs.pos.y); + data->btns_h |= (data->exp.classic.btns<<16); + } + break; + default: + break; + } + } + *lstate = *data; +} + +static void __save_state(struct wiimote_t* wm) { + /* wiimote */ + wm->lstate.btns = wm->btns; + wm->lstate.accel = wm->accel; + + /* ir */ + wm->lstate.ir = wm->ir; + + /* expansion */ + switch (wm->exp.type) { + case EXP_NUNCHUK: + wm->lstate.exp.nunchuk = wm->exp.nunchuk; + break; + case EXP_CLASSIC: + wm->lstate.exp.classic = wm->exp.classic; + break; + case EXP_MOTION_PLUS: + wm->lstate.exp.mp = wm->exp.mp; + break; + } +} + +#define ABS(x) ((s32)(x)>0?(s32)(x):-((s32)(x))) + +#define STATE_CHECK(thresh, a, b) \ + if(((thresh) > WPAD_THRESH_IGNORE) && (ABS((a)-(b)) > (thresh))) \ + state_changed = 1; + +#define STATE_CHECK_SIMPLE(thresh, a, b) \ + if(((thresh) > WPAD_THRESH_IGNORE) && ((a) != (b))) \ + state_changed = 1; + +static u32 __wpad_read_expansion(struct wiimote_t *wm,WPADData *data, struct _wpad_thresh *thresh) +{ + int state_changed = 0; + switch(data->exp.type) { + case EXP_NUNCHUK: + data->exp.nunchuk = wm->exp.nunchuk; + STATE_CHECK_SIMPLE(thresh->btns, wm->exp.nunchuk.btns, wm->lstate.exp.nunchuk.btns); + STATE_CHECK(thresh->acc, wm->exp.nunchuk.accel.x, wm->lstate.exp.nunchuk.accel.x); + STATE_CHECK(thresh->acc, wm->exp.nunchuk.accel.y, wm->lstate.exp.nunchuk.accel.y); + STATE_CHECK(thresh->acc, wm->exp.nunchuk.accel.z, wm->lstate.exp.nunchuk.accel.z); + STATE_CHECK(thresh->js, wm->exp.nunchuk.js.pos.x, wm->lstate.exp.nunchuk.js.pos.x); + STATE_CHECK(thresh->js, wm->exp.nunchuk.js.pos.y, wm->lstate.exp.nunchuk.js.pos.y); + break; + case EXP_CLASSIC: + data->exp.classic = wm->exp.classic; + STATE_CHECK_SIMPLE(thresh->btns, wm->exp.classic.btns, wm->lstate.exp.classic.btns); + STATE_CHECK(thresh->js, wm->exp.classic.rs_raw, wm->lstate.exp.classic.rs_raw); + STATE_CHECK(thresh->js, wm->exp.classic.ls_raw, wm->lstate.exp.classic.ls_raw); + STATE_CHECK(thresh->js, wm->exp.classic.ljs.pos.x, wm->lstate.exp.classic.ljs.pos.x); + STATE_CHECK(thresh->js, wm->exp.classic.ljs.pos.y, wm->lstate.exp.classic.ljs.pos.y); + STATE_CHECK(thresh->js, wm->exp.classic.rjs.pos.x, wm->lstate.exp.classic.rjs.pos.x); + STATE_CHECK(thresh->js, wm->exp.classic.rjs.pos.y, wm->lstate.exp.classic.rjs.pos.y); + break; + case EXP_MOTION_PLUS: + data->exp.mp = wm->exp.mp; + STATE_CHECK(thresh->mp,wm->exp.mp.rx,wm->lstate.exp.mp.rx); + STATE_CHECK(thresh->mp,wm->exp.mp.ry,wm->lstate.exp.mp.ry); + STATE_CHECK(thresh->mp,wm->exp.mp.rz,wm->lstate.exp.mp.rz); + break; + } + return state_changed; +} + +static void __wpad_read_wiimote(struct wiimote_t *wm, WPADData *data, s32 *idle_time, struct _wpad_thresh *thresh) +{ + int i; + int state_changed = 0; + data->err = WPAD_ERR_TRANSFER; + data->data_present = 0; + data->battery_level = wm->battery_level; + data->exp.type = wm->exp.type; + if(wm && WIIMOTE_IS_SET(wm,WIIMOTE_STATE_CONNECTED)) { + if(WIIMOTE_IS_SET(wm,WIIMOTE_STATE_HANDSHAKE_COMPLETE)) { + switch(wm->event_buf[0]) { + case WM_RPT_BTN: + case WM_RPT_BTN_ACC: + case WM_RPT_BTN_ACC_IR: + case WM_RPT_BTN_EXP: + case WM_RPT_BTN_ACC_EXP: + case WM_RPT_BTN_IR_EXP: + case WM_RPT_BTN_ACC_IR_EXP: + data->btns_h = (wm->btns&0xffff); + data->data_present |= WPAD_DATA_BUTTONS; + STATE_CHECK_SIMPLE(thresh->btns, wm->btns, wm->lstate.btns); + } + switch(wm->event_buf[0]) { + case WM_RPT_BTN_ACC: + case WM_RPT_BTN_ACC_IR: + case WM_RPT_BTN_ACC_EXP: + case WM_RPT_BTN_ACC_IR_EXP: + data->accel = wm->accel; + data->data_present |= WPAD_DATA_ACCEL; + STATE_CHECK(thresh->acc, wm->accel.x, wm->lstate.accel.x); + STATE_CHECK(thresh->acc, wm->accel.y, wm->lstate.accel.y); + STATE_CHECK(thresh->acc, wm->accel.z, wm->lstate.accel.z); + } + switch(wm->event_buf[0]) { + //IR requires acceleration + //case WM_RPT_BTN_IR_EXP: + case WM_RPT_BTN_ACC_IR: + case WM_RPT_BTN_ACC_IR_EXP: + data->ir = wm->ir; + data->data_present |= WPAD_DATA_IR; + for(i=0; iir, wm->ir.dot[i].visible, wm->lstate.ir.dot[i].visible); + STATE_CHECK(thresh->ir, wm->ir.dot[i].rx, wm->lstate.ir.dot[i].rx); + STATE_CHECK(thresh->ir, wm->ir.dot[i].ry, wm->lstate.ir.dot[i].ry); + } + } + switch(wm->event_buf[0]) { + case WM_RPT_BTN_EXP: + case WM_RPT_BTN_ACC_EXP: + case WM_RPT_BTN_IR_EXP: + case WM_RPT_BTN_ACC_IR_EXP: + state_changed |= __wpad_read_expansion(wm,data,thresh); + data->data_present |= WPAD_DATA_EXPANSION; + } + data->err = WPAD_ERR_NONE; + if(state_changed) { + *idle_time = 0; + __save_state(wm); + } + } else + data->err = WPAD_ERR_NOT_READY; + } else + data->err = WPAD_ERR_NO_CONTROLLER; +} + +static void __wpad_eventCB(struct wiimote_t *wm,s32 event) +{ + s32 chan; + u32 maxbufs; + WPADData *wpadd = NULL; + struct _wpad_cb *wpdcb = NULL; + + switch(event) { + case WIIUSE_EVENT: + chan = wm->unid; + wpdcb = &__wpdcb[chan]; + +#ifdef HAVE_WIIUSE_QUEUE_EXT + if(wpdcb->queue_ext!=NULL) { + maxbufs = wpdcb->queue_length; + wpadd = &(wpdcb->queue_ext[wpdcb->queue_tail]); + } + else +#endif + { + maxbufs = EVENTQUEUE_LENGTH; + wpadd = &(wpdcb->queue_int[wpdcb->queue_tail]); + } + if(wpdcb->queue_full == maxbufs) { + wpdcb->queue_head++; + wpdcb->queue_head %= maxbufs; + wpdcb->dropped_events++; + } else { + wpdcb->queue_full++; + } + + __wpad_read_wiimote(wm, wpadd, &wpdcb->idle_time, &wpdcb->thresh); + + wpdcb->queue_tail++; + wpdcb->queue_tail %= maxbufs; + + break; + case WIIUSE_STATUS: + break; + case WIIUSE_CONNECT: + chan = wm->unid; + wpdcb = &__wpdcb[chan]; + wpdcb->wm = wm; + wpdcb->queue_head = 0; + wpdcb->queue_tail = 0; + wpdcb->queue_full = 0; + wpdcb->idle_time = 0; + memset(&wpdcb->lstate,0,sizeof(WPADData)); + memset(&wpaddata[chan],0,sizeof(WPADData)); + memset(wpdcb->queue_int,0,(sizeof(WPADData)*EVENTQUEUE_LENGTH)); + wiiuse_set_ir_position(wm,(CONF_GetSensorBarPosition()^1)); + wiiuse_set_ir_sensitivity(wm,CONF_GetIRSensitivity()); + wiiuse_set_leds(wm,(WIIMOTE_LED_1<<(chan%WPAD_BALANCE_BOARD)),NULL); +#ifdef HAVE_WIIUSE_SPEAKER + wiiuse_set_speaker(wm,wpdcb->speaker_enabled); +#endif + __wpad_setfmt(chan); + __wpads_active |= (0x01<unid; + wpdcb = &__wpdcb[chan]; + wpdcb->wm = wm; + wpdcb->queue_head = 0; + wpdcb->queue_tail = 0; + wpdcb->queue_full = 0; + wpdcb->queue_length = 0; +#ifdef HAVE_WIIUSE_QUEUE_EXT + wpdcb->queue_ext = NULL; +#endif + wpdcb->idle_time = -1; + memset(&wpdcb->lstate,0,sizeof(WPADData)); + memset(&wpaddata[chan],0,sizeof(WPADData)); + memset(wpdcb->queue_int,0,(sizeof(WPADData)*EVENTQUEUE_LENGTH)); + __wpads_active &= ~(0x01< CONF_PAD_MAX_REGISTERED) { + WPAD_Shutdown(); + _CPU_ISR_Restore(level); + return WPAD_ERR_BADCONF; + } + + __wpads = wiiuse_init(WPAD_MAX_WIIMOTES,__wpad_eventCB); + if(__wpads==NULL) { + WPAD_Shutdown(); + _CPU_ISR_Restore(level); + return WPAD_ERR_UNKNOWN; + } + + __wiiuse_sensorbar_enable(1); + + BTE_Init(); + BTE_SetDisconnectCallback(__wpad_disconnectCB); + BTE_InitCore(__initcore_finished); + + if (SYS_CreateAlarm(&__wpad_timer) < 0) + { + WPAD_Shutdown(); + _CPU_ISR_Restore(level); + return WPAD_ERR_UNKNOWN; + } + + SYS_RegisterResetFunc(&__wpad_resetinfo); + + tb.tv_sec = 1; + tb.tv_nsec = 0; + SYS_SetPeriodicAlarm(__wpad_timer,&tb,&tb,__wpad_timeouthandler,NULL); + __wpads_inited = WPAD_STATE_ENABLING; + } + _CPU_ISR_Restore(level); + return WPAD_ERR_NONE; +} + +s32 WPAD_ReadEvent(s32 chan, WPADData *data) +{ + u32 level; + u32 maxbufs,smoothed = 0; + struct accel_t *accel_calib = NULL; + struct _wpad_cb *wpdcb = NULL; + WPADData *lstate = NULL,*wpadd = NULL; + + //if(chan=WPAD_MAX_WIIMOTES) return WPAD_ERR_BAD_CHANNEL; + + _CPU_ISR_Disable(level); + if(__wpads_inited==WPAD_STATE_DISABLED) { + _CPU_ISR_Restore(level); + return WPAD_ERR_NOT_READY; + } + + if(__wpads[chan] && WIIMOTE_IS_SET(__wpads[chan],WIIMOTE_STATE_CONNECTED)) { + if(WIIMOTE_IS_SET(__wpads[chan],WIIMOTE_STATE_HANDSHAKE_COMPLETE)) { + wpdcb = &__wpdcb[chan]; +#ifdef HAVE_WIIUSE_QUEUE_EXT + if(wpdcb->queue_ext!=NULL) { + maxbufs = wpdcb->queue_length; + wpadd = wpdcb->queue_ext; + } + else +#endif + { + maxbufs = EVENTQUEUE_LENGTH; + wpadd = wpdcb->queue_int; + } + if(wpdcb->queue_full == 0) { + _CPU_ISR_Restore(level); + return WPAD_ERR_QUEUE_EMPTY; + } + if(data) + *data = wpadd[wpdcb->queue_head]; + wpdcb->queue_head++; + wpdcb->queue_head %= maxbufs; + wpdcb->queue_full--; + lstate = &wpdcb->lstate; + accel_calib = &__wpads[chan]->accel_calib; + smoothed = WIIMOTE_IS_FLAG_SET(__wpads[chan], WIIUSE_SMOOTHING); + } else { + _CPU_ISR_Restore(level); + return WPAD_ERR_NOT_READY; + } + } else { + _CPU_ISR_Restore(level); + return WPAD_ERR_NO_CONTROLLER; + } + + _CPU_ISR_Restore(level); + if(data) + __wpad_calc_data(data,lstate,accel_calib,smoothed); + return 0; +} + +static s32 pad_readpending_temp(s32 chan) +{ + s32 count = 0; + s32 ret; + + while(1) + { + ret = WPAD_ReadEvent(chan, &wpaddata[chan]); + if(ret < WPAD_ERR_NONE) + break; + count++; + } + if(ret == WPAD_ERR_QUEUE_EMPTY) return count; + return ret; +} + +s32 WPAD_ReadPending(s32 chan, WPADDataCallback datacb) +{ + u32 i; + s32 count = 0; + s32 ret; + + for(i= WPAD_CHAN_0; i < WPAD_MAX_WIIMOTES; i++) + if((ret = pad_readpending_temp(i)) >= WPAD_ERR_NONE) + count += ret; + return count; +} + +s32 WPAD_SetMotionPlus(s32 chan, u8 enable) +{ + u32 level; + s32 ret; + int i; + + if(chan == WPAD_CHAN_ALL) { + for(i=WPAD_CHAN_0; i=WPAD_MAX_WIIMOTES) return WPAD_ERR_BAD_CHANNEL; + + _CPU_ISR_Disable(level); + if(__wpads_inited==WPAD_STATE_DISABLED) { + _CPU_ISR_Restore(level); + return WPAD_ERR_NOT_READY; + } + + if(__wpads[chan]!=NULL) { + wiiuse_set_motion_plus(__wpads[chan], enable); + } + _CPU_ISR_Restore(level); + return WPAD_ERR_NONE; +} + +s32 WPAD_SetVRes(s32 chan,u32 xres,u32 yres) +{ + u32 level; + s32 ret; + int i; + + if(chan == WPAD_CHAN_ALL) { + for(i=WPAD_CHAN_0; i=WPAD_MAX_WIIMOTES) return WPAD_ERR_BAD_CHANNEL; + + _CPU_ISR_Disable(level); + if(__wpads_inited==WPAD_STATE_DISABLED) { + _CPU_ISR_Restore(level); + return WPAD_ERR_NOT_READY; + } + + if(__wpads[chan]!=NULL) + wiiuse_set_ir_vres(__wpads[chan],xres,yres); + + _CPU_ISR_Restore(level); + return WPAD_ERR_NONE; +} + +s32 WPAD_GetStatus() +{ + s32 ret; + u32 level; + + _CPU_ISR_Disable(level); + ret = __wpads_inited; + _CPU_ISR_Restore(level); + + return ret; +} + +s32 WPAD_Probe(s32 chan,u32 *type) +{ + s32 ret; + u32 level,dev; + wiimote *wm = NULL; + + //if(chan=WPAD_MAX_WIIMOTES) return WPAD_ERR_BAD_CHANNEL; + + _CPU_ISR_Disable(level); + if(__wpads_inited==WPAD_STATE_DISABLED) { + _CPU_ISR_Restore(level); + return WPAD_ERR_NOT_READY; + } + + wm = __wpads[chan]; + if(wm && WIIMOTE_IS_SET(wm,WIIMOTE_STATE_CONNECTED)) { + if(WIIMOTE_IS_SET(wm,WIIMOTE_STATE_HANDSHAKE_COMPLETE)) { + dev = WPAD_EXP_NONE; + if(WIIMOTE_IS_SET(wm,WIIMOTE_STATE_EXP)) { + switch(wm->exp.type) { + case WPAD_EXP_NUNCHUK: + case WPAD_EXP_CLASSIC: + dev = wm->exp.type; + break; + } + } + if(type!=NULL) *type = dev; + ret = WPAD_ERR_NONE; + } else + ret = WPAD_ERR_NOT_READY; + } else + ret = WPAD_ERR_NO_CONTROLLER; + _CPU_ISR_Restore(level); + + return ret; +} + +#ifdef HAVE_WIIUSE_QUEUE_EXT +s32 WPAD_SetEventBufs(s32 chan, WPADData *bufs, u32 cnt) +{ + u32 level; + struct _wpad_cb *wpdcb = NULL; + + if(chan=WPAD_MAX_WIIMOTES) return WPAD_ERR_BAD_CHANNEL; + + _CPU_ISR_Disable(level); + wpdcb = &__wpdcb[chan]; + wpdcb->queue_head = 0; + wpdcb->queue_tail = 0; + wpdcb->queue_full = 0; + wpdcb->queue_length = cnt; + wpdcb->queue_ext = bufs; + _CPU_ISR_Restore(level); + return WPAD_ERR_NONE; +} +#endif + +void WPAD_SetPowerButtonCallback(WPADShutdownCallback cb) +{ + u32 level; + + _CPU_ISR_Disable(level); + if(cb) + __wpad_powcb = cb; + else + __wpad_powcb = __wpad_def_powcb; + _CPU_ISR_Restore(level); +} + +void WPAD_SetBatteryDeadCallback(WPADShutdownCallback cb) +{ + u32 level; + + _CPU_ISR_Disable(level); + __wpad_batcb = cb; + _CPU_ISR_Restore(level); +} + +s32 WPAD_Disconnect(s32 chan) +{ + u32 level, cnt = 0; + struct _wpad_cb *wpdcb = NULL; + + if(chan=WPAD_MAX_WIIMOTES) return WPAD_ERR_BAD_CHANNEL; + + _CPU_ISR_Disable(level); + if(__wpads_inited==WPAD_STATE_DISABLED) { + _CPU_ISR_Restore(level); + return WPAD_ERR_NOT_READY; + } + + wpdcb = &__wpdcb[chan]; + __wpad_disconnect(wpdcb); + + _CPU_ISR_Restore(level); + + while(__wpads_active&(0x01< 3000) break; + } + + return WPAD_ERR_NONE; +} + +void WPAD_Shutdown() +{ + s32 i; + u32 level; + u32 cnt = 0; + struct _wpad_cb *wpdcb = NULL; + + _CPU_ISR_Disable(level); + + __wpads_inited = WPAD_STATE_DISABLED; + SYS_RemoveAlarm(__wpad_timer); + for(i=0;isound_alarm); +#endif + __wpad_disconnect(wpdcb); + } + + __wiiuse_sensorbar_enable(0); + _CPU_ISR_Restore(level); + + while(__wpads_active) { + usleep(50); + if(++cnt > 3000) break; + } + + BTE_Shutdown(); +} + +void WPAD_SetIdleTimeout(u32 seconds) +{ + u32 level; + + _CPU_ISR_Disable(level); + __wpad_idletimeout = seconds; + _CPU_ISR_Restore(level); +} + +#ifdef HAVE_WIIUSE_RUMBLE +s32 WPAD_Rumble(s32 chan, int status) +{ + int i; + s32 ret; + u32 level; + + if(chan == WPAD_CHAN_ALL) { + for(i=WPAD_CHAN_0; i=WPAD_MAX_WIIMOTES) return WPAD_ERR_BAD_CHANNEL; + + _CPU_ISR_Disable(level); + if(__wpads_inited==WPAD_STATE_DISABLED) { + _CPU_ISR_Restore(level); + return WPAD_ERR_NOT_READY; + } + + if(__wpads[chan]!=NULL) + wiiuse_rumble(__wpads[chan],status); + + _CPU_ISR_Restore(level); + return WPAD_ERR_NONE; +} +#endif + +#ifdef HAVE_WIIUSE_SPEAKER +s32 WPAD_ControlSpeaker(s32 chan,s32 enable) +{ + int i; + s32 ret; + u32 level; + + if(chan == WPAD_CHAN_ALL) { + for(i=WPAD_CHAN_0; i=WPAD_MAX_WIIMOTES) return WPAD_ERR_BAD_CHANNEL; + + _CPU_ISR_Disable(level); + if(__wpads_inited==WPAD_STATE_DISABLED) { + _CPU_ISR_Restore(level); + return WPAD_ERR_NOT_READY; + } + + if(__wpads[chan]!=NULL) { + __wpdcb[chan].speaker_enabled = enable; + wiiuse_set_speaker(__wpads[chan],enable); + } + + _CPU_ISR_Restore(level); + return WPAD_ERR_NONE; +} + +s32 WPAD_IsSpeakerEnabled(s32 chan) +{ + s32 ret; + u32 level; + wiimote *wm = NULL; + + if(chan=WPAD_MAX_WIIMOTES) return WPAD_ERR_BAD_CHANNEL; + + _CPU_ISR_Disable(level); + if(__wpads_inited==WPAD_STATE_DISABLED) { + _CPU_ISR_Restore(level); + return WPAD_ERR_NOT_READY; + } + + wm = __wpads[chan]; + ret = WPAD_ERR_NOT_READY; + if(wm && WIIMOTE_IS_SET(wm,WIIMOTE_STATE_CONNECTED)) { + if(WIIMOTE_IS_SET(wm,WIIMOTE_STATE_HANDSHAKE_COMPLETE) + && WIIMOTE_IS_SET(wm,WIIMOTE_STATE_SPEAKER)) ret = WPAD_ERR_NONE; + } + + _CPU_ISR_Restore(level); + return ret; +} + +void WPAD_EncodeData(WPADEncStatus *info,u32 flag,const s16 *pcmSamples,s32 numSamples,u8 *encData) +{ + int n; + short *samples = (short*)pcmSamples; + WENCStatus *status = (WENCStatus*)info; + + if(!(flag&WPAD_ENC_CONT)) status->step = 0; + + n = (numSamples+1)/2; + for(;n>0;n--) { + int nibble; + nibble = (wencdata(status,samples[0]))<<4; + nibble |= (wencdata(status,samples[1])); + *encData++ = nibble; + samples += 2; + } +} +#endif + +WPADData *WPAD_Data(int chan) +{ + //if(chan<0 || chan>=WPAD_MAX_WIIMOTES) return NULL; + return &wpaddata[chan]; +} + +u8 WPAD_BatteryLevel(int chan) +{ + //if(chan<0 || chan>=WPAD_MAX_WIIMOTES) return 0; + return wpaddata[chan].battery_level; +} + +void WPAD_IR(int chan, struct ir_t *ir) +{ + //if(chan<0 || chan>=WPAD_MAX_WIIMOTES || ir==NULL ) return; + *ir = wpaddata[chan].ir; +} + +void WPAD_Orientation(int chan, struct orient_t *orient) +{ + //if(chan<0 || chan>=WPAD_MAX_WIIMOTES || orient==NULL ) return; + *orient = wpaddata[chan].orient; +} + +void WPAD_GForce(int chan, struct gforce_t *gforce) +{ + //if(chan<0 || chan>=WPAD_MAX_WIIMOTES || gforce==NULL ) return; + *gforce = wpaddata[chan].gforce; +} + +void WPAD_Accel(int chan, struct vec3w_t *accel) +{ + //if(chan<0 || chan>=WPAD_MAX_WIIMOTES || accel==NULL ) return; + *accel = wpaddata[chan].accel; +} From e2653c949b843dcabc22000ecd2291f0c731ce29 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sat, 19 Aug 2017 09:01:24 +0200 Subject: [PATCH 062/137] Don't link against wiiuse and bte for Salamander --- Makefile.wii.salamander | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile.wii.salamander b/Makefile.wii.salamander index 24c6f28d77..78c333276d 100644 --- a/Makefile.wii.salamander +++ b/Makefile.wii.salamander @@ -43,7 +43,7 @@ endif MACHDEP := -DGEKKO -DHW_RVL -mrvl -mcpu=750 -meabi -mhard-float CFLAGS += -Wall -std=gnu99 $(MACHDEP) $(INCLUDE) LDFLAGS := $(MACHDEP) -Wl,-Map,$(notdir $(ELF_TARGET)).map -LIBS := -lwiiuse -logc -lbte +LIBS := -logc ifeq ($(EXTERNAL_LIBOGC), 1) LIBS += -lfat From 993309daf1bff4bc9ca9a9fd0b8ce7da17e05505 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sat, 19 Aug 2017 09:01:51 +0200 Subject: [PATCH 063/137] Revert "Don't link against wiiuse and bte for Salamander" This reverts commit e2653c949b843dcabc22000ecd2291f0c731ce29. --- Makefile.wii.salamander | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile.wii.salamander b/Makefile.wii.salamander index 78c333276d..24c6f28d77 100644 --- a/Makefile.wii.salamander +++ b/Makefile.wii.salamander @@ -43,7 +43,7 @@ endif MACHDEP := -DGEKKO -DHW_RVL -mrvl -mcpu=750 -meabi -mhard-float CFLAGS += -Wall -std=gnu99 $(MACHDEP) $(INCLUDE) LDFLAGS := $(MACHDEP) -Wl,-Map,$(notdir $(ELF_TARGET)).map -LIBS := -logc +LIBS := -lwiiuse -logc -lbte ifeq ($(EXTERNAL_LIBOGC), 1) LIBS += -lfat From 7d259b4eaa689ff17080148e7bf645562f3c3ad3 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sat, 19 Aug 2017 09:03:10 +0200 Subject: [PATCH 064/137] Update --- Makefile.wii.salamander | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Makefile.wii.salamander b/Makefile.wii.salamander index 24c6f28d77..a125d3f9ed 100644 --- a/Makefile.wii.salamander +++ b/Makefile.wii.salamander @@ -31,13 +31,12 @@ DOL_TARGET := retroarch-salamander_wii.dol ELF_TARGET := retroarch-salamander_wii.elf INCLUDE := -I. -Ilibretro-common/include -Ideps/libz -LIBDIRS := -L. ifeq ($(EXTERNAL_LIBOGC), 1) INCLUDE += -I$(DEVKITPRO)/libogc/include -LIBDIRS := -L$(DEVKITPRO)/libogc/lib/wii +LIBDIRS := -L$(DEVKITPRO)/libogc/lib/wii -L. else INCLUDE += -Iwii/libogc/include -LIBDIRS := -Lwii/libogc/libs/wii +LIBDIRS := -Lwii/libogc/libs/wii -L. endif MACHDEP := -DGEKKO -DHW_RVL -mrvl -mcpu=750 -meabi -mhard-float From 6de19a1d6c2a988246ec64275a7d763802d7da7d Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sat, 19 Aug 2017 09:08:10 +0200 Subject: [PATCH 065/137] Add library files --- wii/libogc/libs/cube/libbba.a | Bin 0 -> 834668 bytes wii/libogc/libs/cube/libdb.a | Bin 0 -> 521352 bytes wii/libogc/libs/cube/libogc.a | Bin 0 -> 2621790 bytes wii/libogc/libs/wii/libbte.a | Bin 0 -> 471864 bytes wii/libogc/libs/wii/libdb.a | Bin 0 -> 521512 bytes wii/libogc/libs/wii/libogc.a | Bin 0 -> 3466174 bytes wii/libogc/libs/wii/libwiikeyboard.a | Bin 0 -> 132906 bytes wii/libogc/libs/wii/libwiiuse.a | Bin 0 -> 415516 bytes 8 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 wii/libogc/libs/cube/libbba.a create mode 100644 wii/libogc/libs/cube/libdb.a create mode 100644 wii/libogc/libs/cube/libogc.a create mode 100644 wii/libogc/libs/wii/libbte.a create mode 100644 wii/libogc/libs/wii/libdb.a create mode 100644 wii/libogc/libs/wii/libogc.a create mode 100644 wii/libogc/libs/wii/libwiikeyboard.a create mode 100644 wii/libogc/libs/wii/libwiiuse.a diff --git a/wii/libogc/libs/cube/libbba.a b/wii/libogc/libs/cube/libbba.a new file mode 100644 index 0000000000000000000000000000000000000000..e36ed1715d5d8b460d69df7f8ee79b83cd63379c GIT binary patch literal 834668 zcmeFa3wV{)l|H_|b54?z3o$}40U`zn5J<>LAjE_OIN_oJBBFpsMUoH_h+Gm#kk}?B z5o?8dA!1vqfZ(OIj%~F{Yp19%{-oH!=SuA-|8V6^SSKCd~?qlm7nT8Ii>AUptQbCSSNyxZej- zM6&t5F-Ig1@J(60ti7SNw!L{>O}i6#=n|QKKHx2B5t~;x=z=Zf}$jgj(O&pqMwTZD~{3w#Kyv+1A+J22onH0L?88 z5OBqc`r6iwEe(xrZ4#DCB(eeXgL5<2-LQI1+opB3t!<5)R<_tE8?J3#v8hR{Yh0() zM4)M7W23}?*V?r$4H91Gff~I|tXvIsH?MDM*{I?AjjgpC8(Y_2p}ICUu5a9|z=oFk zjctv!?dvw0uCP%G-`FlT)^Ap_DWG+eLP<*yWi&`wDxHAV zwE-oQjg9MCE^m||<-$@aJ$yq#-U3^d2B1PXjUJ>LG&-#Y{L03r`b}$13oDRTM+fXx z+uT~ea^*%%Nrcq|XmzaGY&F1nU47dc3lljDIc;jy-OX(t%nswi5J4`AcD10@@XN-H zLSm(XC8UfhL1S#$Xjlv1*61b$G}O0iV0C@7?%c4caZ{thu57d#?e%M1bb};kVAeOZ zH(%aZ+uE?AO~^pq?7=FWytZ6|B!ZDJLJeqcSfhqYF##QpSbS*V*eY?aoZd6=#dSG8`%i6WF4|spQHneY45~>tLe9NYGGk7EXo2ZSA9qXFgYd0cYc})qfX>4q*Ukf{m zO)GWy5RgVy81f<{ZA5_cN{kLl;*5m|uWW9!n^MulYmE`)`kNbMypp{HS2ngG9M;2c z8&->EEen2c#CnhcwI&Ft1=cnJ=MX>Q^?vhg{t8 znELfsh{pES%zn~uHB2)aw2?-)6)BgZ5gQpkm_#?x*y!@q_F3D~(rSVmnPPLx#x(^k zx*!{<4l61wEGa>4R#Z}UW*L5GqYmqyTYZ+}b5M@yk0a6nc?e(EGd=7o<`0o8?ht$P z{X(2`mB{XF_J4a}PawN@j1Zldjp)eRD*TnZ1%Er?U7{HHU}&olm3u@_?*tL(%MpUO z(mEmbO%NmRA1g#zwh-T%C{h;oi0ocJ=&zOZi?-&9v<>4$pzn-in@9B@fvi`MX2)Y9bI0o<>szBl8osCEI~d;~_@?7K6yMYE z&A>N^Zz8@)_$K3OT7z( z2yKII9_fDua6rO)#ICN}rlprQ2&cCibIo7S(Z}EJT>X3ZEx>$g+|6CJr3Iul^LEW! z(9t!stYDVtzq+?lq?bO~-`@*e^vw|gv{R(Lu=c*WB2X4qYw6QA+dWP=7QgI`@p} zfXVGZe8 z4{4^4x&}T=<87W1>wv&hBXzhBlpfW9fv1hoEl< zYe}KLXj}RYbnyY!o}&55KJb!$K$>WK)6TRx^i&M_(r9~IrruiEm9er%q(f&xz@G;(z6GxGrcBQ=0eyL@DX~#aSziR~jFCTJcmmh?0zbrXp8zazu#LHM$VZaL|+}g@XtQ9cf5wRzNUCh z&rUhDbM=Uh`U$_^TLGG`oT~KBZDTq*-*j&7{tf)M0prdLZMO}E0 z$n2db0ipjiYcC;Jf_ z2ifLcg!RB@(x!FItST^ZscCja`Gm|n^b7LQ`6ge+7V{1EE6UMBTOzM8=V*UT1HHsk ze=_IbG;a4r&BGXFjwyuSiO?45VPa9X`g9!3x z&g8UfyOFaS651hO{uazj`LX)yl#nA#()$IJdV7IRtwbe3H4T0>2X=GxJAyXR}Cw{snw8y|fqpy;sFBRB~M2>+;W* zeouPHbSSF*P_%5E)0Pi&1hr2wwp5+4N7O-{0P2j~laZk;-2Wlv{MJ0=SjcK*mwJvN z^R=&uw7rjt)SlavKd~kZUnM$`Lq*SJQg84%sf(K(;+&3RNcpGzYe?`}r1sy$)LcSj1?@Cm8R_ly=vM_qKbw7~& zpF*cuMyFxK#$LT%qaQQp7cfsg=aIg&OJw7>AGV`U1>kFGM$acZuT5`cq#t~uoUjFB z5cxs+80%xk9Xg*nuW+w!W& zEX(fi5A8v%HeF=GzqqEtUg(>;g}e_U79H*n-H)q!66-*&=|5uH;E_ch7@x&C$;
IVz-f>-q5IB1${fY~2DRoh-^;uomGgTqMSX!d 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 z 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 z

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ⅆ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

eBncRU4PD>GcdUwynRR)TiofLfN~eLD0e}N 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

Jf!2Cdo(!- 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

CclMKcy_~{+fIJ z&JVv;u0sAtkN=`PkM~UwFQ;FX%IZ{&_IR9f8vSV=Grvq-{9HvWBCb`Qg8U?pmn%!V zEy_f!s$H3WR`qyHER0QQ_kA93Q=W=^hsReai~SpTj;emBx>*^2R^8_D9m>SI>Rylc zDdXp=uY3HEGPx%2LpAotz&}xzc3)B!pS+?h_TN-4g%4)s@_l8pPMU*rChk(e7bdrb z)4Dba<5RP55w6zp3e&dPqY5w7J-_f$eSRuTzuo;G`TkbtpI{x&30)uBc^=}phrO@k z0rpsqw{xv^yo0sd@lMtS$Jdf`j`uJe$G7Wy1?i5w4sG6xD7;VKt0~M8jXj~vqkQM0 zk@FZ7D&uGQdO{=bge#Qkd*nm%NZyNUbhg52x$T3Kw)QRY#6Yjl>v%vHl{ z;f2a)!*$Bi2lS%0>Xo-6U#To@H7MgJ@xQtDVO!p>YgpQ9S4KC$uDdP=1Ijy)Gae(q z0^Y8?7p4s(e*)gAIa2}eQm%q&+wG<0J-vpdt=lzc@Q1vnZtjiDf$vtXgYQ-Df%j`( zN&gQhOaC8H7MqVNx5G~-+t1z48FOQuzv)I!5OJye>OmT7pJB1jpW&@AZ5Vz6rfm2n zct>`fk@p_EYgV{Zb230@m-3zPwVF#J->v)_yhn3J8HYgm-7x zsPJCpb;$Q+*Q@Zp?EQ*xzvh_O$1f%i>ASq|%B^GJw@6$7D;CAGU*{y-$>&h}N+IH)qykFY9en-Dz*fqJtV=R%) zpI9=xPR0tA*P&Bta{%=~-sk7?Ay%ca6Zsfr`VvcL*V5P|?>*R4vg>MWs&YO0)!8*R zHb;3E@_V!SAn!LeYZq2K>)YJZv;NHGo|2iH^dXP^r^$KY zmaMPxHfH^k_mQkmW4WX+G{jM2;s z`X+0BByZ39GwAo^16kk7+8*ie;8N)NyvvhcoAtlEM=H|4JsS&I!z1~=Y+PgwkK~VJ zV-!5;$)C!`OV;X0|D|l~WUY?mZ)D>bCbDu_tE0Iy-;*!Q##h!lXGhjLx5tpRD3b5V z#$D!qB&VM)2V_n;xy-5Pa}AR``IKyK$Q+6E=keKK^>eJwlP`_(XL{e34g9`CFkOCy z#5~Fu2OE-a><^}!U;CKOZ;=GkMKIm}xh+p(zG>K&v)?yt%h_)op3ZmnH(Fu#3y3{o z^cBROOuskReh0B9&weqn--^}Nt`7Q=Vy~+E+TZN=6(8zk^o7KSIQh2kCO))|_cg_b zR&d`~eCV^@cM^LF{`V3O6~DJ97$h>koi|9r?+x<1O4em>`@-Tun$&f_Z{x`aeT}gv zAM}mJ(|fxmZKgX%5BjYu$+Vf%=g?8BWNN-QE0q+nzbj$Bjaj*|iQoC#q@%N^`BjZU z#4 zTkpmr6^`rKchZ~8dDfZ#R*!4t+uB{Lw&j6!%N+0Kf4_fMP`=ZiGXFb0p6~j4vOko) zY;-ui_aO1?$@_n0?;jmbk8AKCy`7ZBraPQo7Xsmh_Qb}0JXY~{0)OHMIakQv4*vXh zAECUCKX*8LT)zj|dxEmFSD@#_9_z7hFFu8`wBZhC?-~St|6Zc(?1>%Mzk6Y?fAPEZ z91rGj_P8JB+uI~3#g2@ZJwRmd0PNcn`-kcu_r-j@1lJ{bt`QxsUG8i8dh*!{d5#wy zPVYBJgcsT~o1|}IQ~FoVpPWM`&s7H5yOeSRf9_CwVIBhC-crid{E58^Jty|w1$*Po zd5Us9f9`PhCL!?c4N!Ld8=>dK-YKwWFIVbq=g%EtgF~M046-MF7G3F|#98#jp5&=- zZ!hI}{JF!~<6hk$dom7bL+p*xb7Job*tho##mAAk!`b^F0^x=B#O5@Q(nqm3hCewc z_CCv_XD@j><=6RhhqEVg-`dfI{JF!~`#J*O-Yb-yy|kW_ z{td~~{I}T4OB?QR_I`lCvo`?C^Iy}y33^WKy$pN(E8I`{HU8Y;?7fJ2Xm z+=)!$Hbc)be)$}$X_p5%X8oLMEtbvy&fXU(DU1A=CG4q7jE4Qs=}FwBuM4gCTKsq9 zI#}A3amzVrm)GTedn?yaeuO`FID7jMc=o>0PBoX$bM&0p6CZf}J9R9wg~;6D>^+IV zv-i+ep8NG6lm5-sb7Jom*t540Hwqtokrmh$07!~W;=%2ZEJZJ-aam7bpTi6c(ie*eDxy81=ND|1Tp zL`UpN+j=~XZ{xC_xkK8OLmp#>%zxbtnAig@k8 z!ft4;hn`^bOWUP6M#3=#FHV@ZE(n%y57JwcvDG%KSLa&Wv^ZlIDI?}E%ZO;*% zWkAC8#NCce0;`@jNyTU2X1{KNcJ5}^i*#ET|^xh+rLCq%)?!RunIWOb>m$uYbPkgkI9QfK%1B^S(_yc@5N5)Uy zOp@_2_9={e>LtG*X2i+$q2{LG#cdZnJ#hT~Cjt|b8-u;#KdB>nUwAM`I^UQ+Yrf38 zC`ihA>YwdwX}Q6bIafcZtp^U?ZpWAiYA!ywd)uYI7#MW^reMnPyUDBj4;~~B`o)er z?;er2IL0?~wqEemN_@@S!Pocze^0{SQJ@#Q{OhVOPh z(D^jTuU9T$etR)o!!Igc@UEu^?jgUN4d(D(Sp(esckw)w&s|%_-&>zpDSkG7#82cj}*v+4$svgM)MLfrHuHd*ERGEoMHMTw8ejZpo>C4zRvH zFL7orj5&ev6UQoDV<+w0X4e6+kAKcykj6jAj%6oy^~4|{W#y#Dg&voBT)|i+7wtG{ zk9fxXRT=1LYM%=JVrkZ(I;33+bD-ToYT zh$nKmw-&^brW8xcb6MlDW4csO4=0)cPd<&6cl8g74tJR}ywuxt~F2g6Tu< z=aB!XFi}J)Y}B!{$qyUN>AVq~zRheXtMXuJ#(_4bzWY*@b+?agS_R^ z=g{0V2=Y!fg@lA7JOiaW%s|Gey`6dIAbZK$dyk;n%Sfv_l1Aje(~&g6XYMf0iQR$C z*gxe@ZHmj{iDAY^NqGS!ex$X$Nl-0sHkOTrpw+1MGf(JamM2J&Uh zbfGk}Imp{5s6F@!yjgwuRpH{&OjDcr?T>hl`t?51S6@CP16N-@90WNJrEQGg%A;7j3BEpau7-4WJniR(o2zSuKb+QG=1V$W;o zGR{2`dreE1WB-iALhH&iE2L>0`0GLLHbr%J*p9n%el4EQ`L?K=BpRe1JerM8&Kqhn zw>qn18p|ESJPKMRb<8}9xurArG*iYt=XsHJ92r$TQn)ZLoQVE4)*IpB!W!N12+q&e z=!TOyb7Rsr(&I?&@a-UKI3x%Bl7M$Fta`g-u5nNVidW5@jU(z0qdLl1& z7JYhIN!3_Zg4r(aO%(RIP&d=kt!q`Sg*vtE zTEI(TZI2e(q%fd`^|bT1?OJFjviUo-&>`*Y(Zab>XRj8{lfs=^=#;{}T975b_C76i zN#TGNy2aY#W;ta5d4Dqw8R^PN`N^MfbY4^*Y08zssMqph{q$;qn%OMu95z7VlmV&3 zDhZl8W2G$5;FITQc{Day!js#^aDu$=k$@;~L7wf!Ri;K&Fjf>L?8&PRd|66lm$jP2485j|B@arr;~(@xC_dU9R*7* z%Je$ZVjAqUI0?Ma;#6>_#cJ>d+Rk|u8!INrefj)4W4r*1`711%?oQk|FGz9kA-@Py z`R7jDICHM~9DDvmDQ}s$arUerH4Hpf%9l;-L!G5DU)}?ef8E4BQ70DpRZ_lvVxOqf z)%@vF-ZycRm>&)HC+Jg{s&)@>u?XNYj5l{3rSr7v~1u)Xx9m~jOc*vnmt30H7|?pV$; zK1wm43O+2+DVP!q36<_#=F7*wQ+D%J$OR(*GJ91noDXlYO%^T?&Na=;C&cr&*eh=# zD@Ohn`7Q_+poPM=D}^<}#a6yZ*mkS17QW2xZVKz*bE`@l8-v2df+MZ^66wt-%O}ET z%#y6nXO^bUFsYX^|A&#Z!<2LFE>V61uHXjaXZcul{;?LxqSWOw_S8@1$&cpiMQTn~aoNn$63KTTdUFDOZT1YbQed9~n2!Ivkm zVK$T`@I(F&C$BdAG5Gb#YnT-!iI2n2PF`*J8u;MkC5ErXcVq3vsU&e7=09rMEy*D) zMP=f(!avcSqLfL=((CERREsx&vk7!ab{Eap5ZhBXA+cIz*iUsBX&KfXV#Xn69PZBI zjakH)Q@A;cd$M>-7C({2TeG+~i=WKmZCU(O7H`kur?YrR7C)24JG1!NEZ&vH&t>uM zEZ&pF&u8%qS-dxkU(Di{viRjJ?#tp=1nr_!PB=>BQ-i$h$p88KY|6@S{*+9%DO*ld zOD5ZtEvHt=WSg?(rSKA)vgNGJC9M^1-&!KyDP1z&TziV|m)s~RXGX~$t7M5e#eZf? ztJ|xRY3_8ZJDq$Da;NL3NDo6=FTOt~F8nSdU?enSkNf1!Kcz=J3^tSwU+gnc9VMIk%8jh%FtIh6h?GNN_ zlELgbycgAc#ScXTD;==*+E*(A7N+5C^Z4(*A`;jta4aKl5|AVO5V!Zg zfPoRcQk*OQQE$Wr;-4L{tJl(I<#$9XM|c97l`jbj{7k@9!Fc7Lq~zSW4zu&c5m#m1 zd31F4JkGX8XK6*eJ*zrAP5wJQ>-UkHP~2h_qskW{yHaH=ta6Mz&%q`amy1+GPBY@l zs|DncSBJ|VlI}A>?KoH>vO}-@5<{>-98jl{u4 z&Zl^-{Dyy3)hXh&^3Un`59JT1N6weO5E*ni?`oLLzDitUUz7|#1G!ADmrSmB+~z7L z{7j}O_aR&+N7Za5e^#tWChrgxIl{Ye?eMz<1z4IbTr1$xYdDkJCh-9W-xH8*t`?9Z z+(@S`!pMk)QZ#iXn@^T(KJ9HGJsHh^H=8R8hB#_aNGoPXXAcol=WpUtaiYe>$;jr4 zvsC6H{;#vy)g*cqH%HC7=;>Kmu`0e2ot3Y_J49TM7cYfe>VnxJ`Y+9QWx~mRgmW@A zi23liJw=gIc43q7XgUN_B^`zzZPS4hHXU?4d>+s?bg|T+q2W8;-Q3<4gp~95S;JuR zwFraRHdihc1vWr*x2{^bt)~ zjj}V!rWiCvml~tiStPctvCGz=>}sIkYA`;!VFPlM)ZkB!HzXjHSJxOnbHZL1DFz`W z*^~vrA~Pngi1uWy=>jt)e@pD@b%WRaS^vRIshlHe=Uqkz&6LV>qO-9pxi-Axx?lNT ztLU%$mG4)Xn<*DD4C^l0mx_Zczhm7+Ie#A*$UT*?(Z+AQ2(7Cp$T+obnbc*2QF+kT zr7U$fv;-kodC*oKCQ`Gz$=_1PYufazC9Qt%ikW1nbPw^?TSX86t(15s$hv#<_+PW%i_K)K9t2*v-o@#|BLv9hZhe^ z#fwK5uc<5xODnlEIEgR5dp9C(wJ0Web~GZ07ax~8KDCT6=4c^D3b~bGDkWz^3VB7I zS~3im4HIep_+Z(v87ZC%4fAwUS>1V@D=aZzxK|_(Vz>ARDzOp{3**Jv21==vwEd7u zW#(*-Yn~mr>*c&0{4zY4Jd(5;9!?%irj+%S19 zLfv$AW#sF{ zG8$=e$@De!b#-^nDq$Hbrhhx#xwG7oN!hD9V4DjR4v=j|E1BekI}>PW%$2M z`af$p8ba3Z@_8ROutQ3tv+v+YFA)Yg*pquWNF_4;KO4<|5(w8+{OYw{`el>;-;z5c z|38G?H5IGQb~iRN%hCBO9dS{{DM7sa8tocvo zv6lx?t69fKqU<=lwa3S-LR2Rk6K`l9MvDL6kJ2^uZ%q;J(mhDu8Sz~9A9*_K*8kRm zYs#M&hgz+?_TOQSc#U!sK@YFmJ8yapS@RuQ$*%iedZPG#G6XY<}0UHl>a8(XH%Kt>_Ecs!`xhj}7KHIWW@yx!1kFsNWXP^JS5u&I^|D7?f%U+M7 z>e*T8ME{1%|JT|aQM}JRmx1*lsvwONXxAyilPit*#>NvZjtGRPyOY7Mi8k^hY1H=DGoxUx7 z@1#!$&R*X_n zrKh!Tdb{}8XFhX%9#U>U_Vu@*3o|hz4dlJ8e3m*=VZ1Q+bu#GlwqkptwYRsc+v56W z*Allp)(@c8yRli+^7w{{j=tthhbT&6Q;UW51NO1MV?!&1?M)pmt=&-{M7OnRuOykOk; z`1gY8)$z}5ySP67STLRUHD_yG8-@#J$8tT%QDHbM-jZaD2RV`i#iTVbkMH z7qgZn!g$qmc~~I-&5R|z>YoY2_>#5pG3)9-`tJ-#9xpP7y?+8KX$dXVYQV|vZn z_)+Qjn)&?y?)d6-{7c)~q_e*Y((x;>KV^P=t!IDoN%5BX@!m8y*5bYM7p$KVe>0dK zpEy1Ko^*UdI{y5HJ8AW%aDM#MbbN*>ZyYB*ix}(A( z8FVtet<9U7Hnz33_6AFqXHHpMw`|QRncDirHLF%P)HJMF9b~$@GQ_(-)7ZPdk8Ez- z(%G@Ty+6ooZtm~i&_sGQ(n`Z=%lrG9=gg~K+1tH7$n?&cM}Bs!?`rJKU_IE_C56_O zw7d_V_s+KUb(~KR+BzG>W(Mi(SsBilG{)HCjlJue=2kB~AB(2TSliN<>Ee90DSM*f zv{QN-J7>+QuESFOirSMis}|R;S+#oEX^S%r^rW@1CCF@O>g{ap(!Pp|>RS6+J6oG+ zl3CQfk;k^4?mp>4TNiekySvZpXbnWOp7|MM7ImyQUC;Dy$ZW<3Vz`f4&BWN$(cBtr zbVJ~Ao|qBE_HN!u?Demvk%@K2ie9lL0b*$|l{2)r5y!N3b~kF(4QOOKHuP-lZOzDw zUUkb>*JhS2Z&xbyVj@8e}kja*w-uzfQi@JB0vLuOP1Bs^5zzan2guj&seej-i@HIeIx$d+!fH1 znpG#BW?Z;hUER8&wRe4MSMwGx)mATE(@?kK^yU5twvbRHMR#U>Gi#K3Fv>0QY+q|L zVoB*)bCz}Wi^4&iMg)M@Gd3HH|Y<(a{bxRl+Eev++DVM+49wk zS2ZlI3!2*-d#xKb7&kBnGi@8i7t9A4nzO_VW`5tV91|UNDPA)x zk1@TPg{Hf=FX(IB(9_9$ZtU-G?PY$qb(m$CE|{s*(cQonA!zGp?QCJX@@+Z29kjse z(AnD9#Rn8N$y-<@FJ;NaUpm$8S}NJz(bqy>H+ASJGwr&d%35PQxLGoL@LG~t-LPs+ zZ3D^K(Mh-1Z8WyH4rdm1cX!Gv(;T$5Hukd^$=s*E60L0bxl*iZShJE-^kG9cBNLsu zb5JtTIC1T&Q@UGPS2Ue#7atZ}QkQW06R56_S)5%~Y)m$Ftkva`T<+>>?F^Xtn8gFV z{dgo}GdFSySG(56-qrYLW1nwd7mwB5ZPab=?(H`hB9jI5G&phjnsn{VnQ60aOi$au z^|5mr7o1ISZ!1@^4Xu45?%BBDn4_y9+0gRPC*R4lKnqN^mT6`QPfuH)p0;9EdRki- z8|MDrj^_SptTT;$gcG4m!Tyf!u4#-#9x>e}hN5!7yk5^*mf5_%r-O`O3bfhFX>j_9 zD@8Kcb<4~O$fa4bQ|46@ncvyn#KqUUgm`uARTY2RH4>N6B(BLYMH@S#tH9>Abn+X+`9pd zZW1%o($}3K$68Eca%HjW5Y1XP>1nU!)_Zk?guxEl-ROcVS!`NtX_8$-Yj0a4TLi|+ zxVhAub&J+p`-xbqOwmL5lGJXIOJ8<1qQ}t!XnKP|Y2907=~L}-XLITBo~udGK36-t zd1KSi)R9ZodbvP#^eyY^YwhhP&YLjqO76(^}%L&e3p zHH(Vn)W2vecthLTov1Z!ExIYT=;rWD+Nh(wXQYwk@H3`CY|YQM71l2*u9miL$f?_% zkOpsz-xRw!+)U-gQu%4AT}R>RsCvMgYTOaNsP(VUt-CQ!{UtZ#>`sV=iemCQjQMJ^CaB7v6_ca&PzEuIL~wPV6qCPa$d^O!Fk@|?cO;R zNPQ_s2j>eYxZHVz^HPou&P(4;w1Tjn^RBN(#Cb`O6?*Wi!}P$MT4NIS*@9 zCSSxT<>=u2u&4k~9zLWzVo14aNO{zdvY*>x@30}~(?iPRC^tKqcD{2+dGnC+wjt#m zL&_f;Qr@HG`xtzwf18Na$?VMRiZSS!38&1JGP}MGUdxc1ji#6|&-VfMyfS+FY8G(& zBur554@7IaK=f=_3i{+k?3g{H?erwx0OWF{JqXf{8S{9@yMthY<2!j1kmG&42gva= zo*XylIr&1*<~q-2zi0DOudZ*OJdXO-;@Lqz>f0{Q&R);X0X~f4`as_z{TDs`S3LbU zys^yp+U@b$-Rarc!=JV+ztJ7s zWjXi#@YgKI#O8j>1#iNSSq_;i!H+Em|A1exY-0Im%Zc0VJuMmhsB> z^odTKe2n2=;cy}RjAdynu4Bn3)^Qz6&T+7grQk()rqz$Fg&Bj`3CQ{Qxt4QiKYp>w zZ-qZ>S>A>mzh1cnzRhy(x8ToPmfvKKKVUiWD9jklxQJU^eV&TpU+r7+K3Mw}XJ zKj)#FP(LTJlTbhB{smsHHkoIMODz}N2!F(Ka6im^lXhiINia6!t7`ZwmQ%zb@lDI| z3iyYXV>iIhtIj0&Rm%kz!P@`C_pzI2eeuJnOVy9aqkSk5VeXIoCKhRJEs3CNi|+7sqAjUew#%LV7c>s6-%?zfy| zZOOYx<%}cm!ew!_7i6ZgXE zH(pf=^2tllkvQbfu$(^(K2Ga0kMcFI3cd`lvvTc*K{`Ohgc|MLHAIYBNJ z&=1kcVcZ48#`K4ITA+O>_zg@QV`n$~F0D(<3yxO(SK%6!zYJ>}^B#uJu<~5|Q_!kR z>rpgtWH2X^09TP8~-4@)NvI>FE3%Pr>< z)1r^5d^5bqvdp=nC5_)DroJ`_D@IlLOyJjp)?X3VA!^tXsMgkwL1$!X#ER`?Ce z`73!kORk7KzYcbD_C8qWON{waJjv=Lu7ov4`K*`4I%nm(KZ+Nt4)dcJyJE9oJbadA z`4%ks?Qhcua;aG7OCGTU_;*&G%X(1!cgrc_CVO_VlQReIv>Z~mguJSdzHyXX zpmm4C^m&+*>m1=bXo8YGd`88|sc&>HMgDb!zw-I;H`P8lQc8@>a}ya0xi0o&KZ2k2v2!^G9t6dn9#bY6qU@rQoU&*K8+T|Bla@8yyH86Emw_F>EN zn?+^UDC4)XJ<9Z_Y@cQM&hj$mjA?f%{FrSwQ3^k)Tn#hENay#Ir9Y4JNDPd;9sZ~4 z`97qK6v;XiB6kniOO$yez=$FSmT?hT_2)3@u9k5&Cw;K?dy%^x;3n|s6NT6wP6 zIZ16+z~r!uSMH?^V@(m8xvVk6$Xmm#AH&X5z7g*6^tV`f-Z11BD<1)WNcl{7m$tPO zzEAa-!n~<{(8^5))mZX$v zw_=VmeW_Tgd^>!$^7AnJ4O90enAjVB4Q7mn=fiuHAA!HB{1*Hj>+^UG{IhJlMo9QgUE8 zV=+v=5AU^{oCjZKIXDt#9!C0~^YkC~^q;XDXYVkAzKMQ{*vjvp3df1>h-THl4*rau93!09elKM3;Z7C0T`bcogMH8l<$W1IvD#3{9QYi{Ohq@z#5=qsUj}Y zhk~U%5|=zDKThQxJTB9|G4`s{RQ^*Qxkj6DiJU%(ozzGkH>w@tR>hn$I%$~x869F? zb+z(x9=Y~KI{4Y>a4oLdt9CkJ=8@^!74UDB_rM308ShBute-soOvX2!}Lj5j*&ecZ?;^(d>{EfkC|(tACh|`iIHQe z@Ad%l8i!$Y0_J$cCCdHCM|eC+`BLPQJZ7AxE@PJuRGW1kl)bg#`S2o-m*`skBJ#DK zKJhd9*pqwz5wBOSN8aTzd1!R75is_Mw^^2ZT>*1e$1^yd!Ckhza% zY*xWvRJkzuZS2f}_j`OmS^7!-8y(>vC=<8fCmyrD869FB{Muvk&B&!cf46L28~Ufp zX*bOAn7QoQlFx)j%v?51?#Mku!?YDnP{zLOjYKZ?L*~0-`WzCoh!-laMb6wba$#~> zSbQ6v?lJS!$feyTWofrfS=t@2Y}(zbEIOBX{6Xc9BLA?*tTUz$dyrq}@r}y2BH!!r z?UvAZW%51zs>cr~S0I1b<8LeDSNTmtV@LQ&~f)I^;T+B{yP}O)K?d*Hu#?B+OmE8q8M>I&-|m*3im z7h1WDD_*KhUd1at9<5AX#oZhiK0@W>Qhb`nI`_pV@r70%^uTq>J7AsT@_S5i7i-26 zC-!cPagB9wAM#eUFa7LLmVRPa^yRgPc)zl=>*6czy7=yd`7`!~cPUG|H+amo+vwm= zxlbOkTf@bN_o!T0V{Q6LUrm3cpZk^npUTbvw63d+8dLjC8QZ< zSha3pwp(Q)nHDTtwP}r-X{OzpmQJdhw74?stP)u#b#$}ZZUhZlaB9>d#nr8{42lFT zIq}k#G<bg1FEB5%UaZJ@WSr-qR8DI4@e#wjOsl~p>;d?UPY5p$y zr!xMG`6N2WQ|v3=Z>I0{>xiL?A2y$bQ-06EX)M!S_3yZj7=N*E6Haru_$SsCf6A%i zf6n@0cs67Fg`K15zsvZ%c?Ny1+Q~?lBX8W0jfs8*ehx|N8tXe2H%`(;tm>8Nbs^pErgw-e7(j{f>+`n`y7!!^^(f z+i~~)w?gd4PAa;%=ph{?6l)A`E9S8>3{u3Yv^L~8g{zjS7v;b z8Ncl;QAbSN!Tm6Kte89o%P;v77XvW)3SIVxGA3W4%jO3%=2|QCUi7<54m&%{vcEgy z`(0ml$WdkUA+zjoK9wGJ9y9MnKbG;N`2lpsW7HRO`~^?IKgyW#82ZELKg;;%X2xIp znT%)6&fCG1z(3HFf*nys!B0CF{EzP3Kp~Mze06_Uc|t#C8g1>;)5# zK1T~CFU>ca>CfhM8DDQEKg~5}Vs8$bW#^WX!|$zT`MuqBWZyZ}{krCdte=7JG|SF5 z@2mL7&9bw{b+qpT=Do0UT8O`7o$bv>GETXkKtEz#oN`URn%}Z6PPv|jzi(Z!rCgIE zeHIn{CQi9N2hUg+pD~|@f0c2{^(FL_(-HWuuCp8dN5(IiX;+H@9Dc=}<|#PkmpJtk z=_$6>Ycl5ADRlhm9$7GcTW>b+g>T6CCbN8b%obv-1sEV_C<4i}=FtdH8b~f5EJFJ!&3-A2-YIlV4ydQqZEIVH|&%%t^u&?@z&EQ^`dcgzm_cH#WSvEOuR0*PFM&>p7R}JVlA`YKZIbd##J#XKumdCEa`MBrn0QM<*{8 zlb7JN==Wv3$IP+N`T2~$XjU5!W_-x3_I@qnqvjcO##;Cif7{F$?3~W{gqi$wKArKi zCF}E)&R<$rY`-=up5JHuC$r+YnDHeuKJ^{7h(|HJWX7+)R~WjO1dHWY_hCan4m0k8 zvC~EVf;YkaS)I3-vETJ}Gyc2Yoz;JjnfUc%{b5J^elziRjbuD(Rt%po%l>w=V*X^t zpEk>H%A?{;dE5s-;yM%XSIy*B7l`Tq-Sgey>ewrmxeir|6^sWTlSPk@Rq6CY%+KQ0 zzOEJz`aY_d673xVICfKi>hsj#6X;i%Pr}3yI_)i%maM!ehR|u3?%4*@KZ>WSpK?S$ zD4rN!*e=$Xv8~ubM=REv_rvSWlkmIDif5zSNGt`uqrLP^F>EH5V#G`=`c7ul8Gy&k z^YFHkqZ`M~b@W|k?YrCD3-2pgap`-TVUxIu1Lh6zgn1f1Xg&)cGGBs^W%Vb`!{}3H zVlR%H(Tb*cpT8%m?6kGxl_>#QVD;_zLp|xZ6Ao(}t*X3Z@NV6TiBi4#sb-C#&CU z#&50PybT^O(@*;TYh`DRS$5XDj$*(^_}vH-U$A0eTkK0LHMRvGfH#@X!lSN#8YYg| zcNQj&V6}bR^<`(5S$1}tXW)GcV_d&j9_N}CI`v{4(Vex4lGT^Bg9~H7cF5d|e%NC~ z^^ch6;A1{!q)(QtcGspHr}X2FM=?LOFjv&37e0T{_y5v)Q1@w5Y)kH6h)4HMV=QBH z$@2?-+lVjv1ikIa1^b#$UY+K#WefH-pHzC!f-jBnN*`J9TM$E~?`1wsHtEAkrw>zX z8ZVVj4q{9Zn~u+XU zYgoNpy|+?N`wX&B)(!E8Kfh2csU*J~w~Oo@VO{&nUenvO z{xOy;KFw#*eqN#^d-t)H*W1PVTv=sNJ+6xu`JG~&Hiutb$jhGmay^vWTY_KBQ&mZR zCs4$L<(739c$IIpLw1tANjQtIjk&CL4lR{r?jZ8N+Mv&f$MN4{uBP2)0)Zx!*?PNAie?7a>li|_7! zR#&6R-c{Zvdm3+=?+O;jSG*inmBVVUfLVmJXK8-r6IqKf#hp*!vg25rk;~ literal 0 HcmV?d00001 diff --git a/wii/libogc/libs/cube/libogc.a b/wii/libogc/libs/cube/libogc.a new file mode 100644 index 0000000000000000000000000000000000000000..c8f00d2ecbdf6a691bba5d3279cf57eaf1265b7d GIT binary patch literal 2621790 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

? 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 z z`O&xKvGyZwUWzRwhZ0K_QyY)S8eK&0Gx?P76!|Yr{wwnPB*%+Ck2#Ornj&_WcI?OS z>8AsUbL3Y_Y)FiYp0bWeY|C0C@h$5J<#Jgwi17khUnKXj7NmDo+qKTD6~vXlUTB|( zg;(|)^kdfM>kqOn-eYo2sl$zThmW}Nc(#)LoV@+`l%@01)3%IjY`E&=pz)$UXk&vV zCC)$c#RXmq?X2t~&} z_5rd+^szVSyOB6U*ImdVO$1qdFDu`J@I4Wf!<(i}%I9}+E_)-H^OAc+Z|s$6c`;~| zSU3BmK5Vkr+Ee1%?VEP7pWW4D_e^}3n)$-MiTP4#<^=ICac|5IvQNGI@S|CpZ1b z8Ims~R`Feh###L~cw5JD9>TX^KW^mQQ1_(lYf>3EUqx1f>WIvg=;w6ZHqYwj<(f!e z8NcZ3^b{SPKeF@AL9=f)erRD_*x$tHUK`_*cTBz^&!BI?F6?aVjosBol?~*YEPIO_ zwX^p5n(U#B51`B1!#K>oypL~bPuxWNZhZ5Sv=jSCo6X}2dqo~?DnBp}{h+Je&Axa? zt8I&nip_1olqGFHewX-t;PJlj4@vyPFYtEdN!5wvMcyJspn=l zVOQ)dvCbHeE3e3Tt&1_Sq1n^XkJys@x~6{nkt18i%`3fXTu?B5+@Vl(6Q7d5Y+u+! zZ5r*hkRx*}E%~so#n{B0Lqc=&<*4~KJ#$E|Yux8_@#lAY+b`nr_j%)ItTO&+Kk+xr zZyD>Blh5znGWPu5&Hc~!UOC&)rM`ciTwjv&LAe%&eWsCHf-QNoqw_=IZ+WqgbI7oE ze1XZGrCS2d8Pl9Iaz5EWOkT*mHaUs5e{XxW)8VO&?1hLebG}O~Z<)8)#Ip3cG@o|WUi%C$Q=mp=Om&Yy4O{5hY!Unl3!oDXvjJ(hFm+S~RspV-fv zbLJcMoH?KK^-eu!zL9h02kkjCd&lwYL7KK@qU#fK?l@lNfY^C_mD(YL9mZh?bRuV# zUyt5Vj@SK!%#FXbjqxRZ+;R#Z8FvBWZnWc;_}-E~yBA;8_q7E@l#`8LAvW=Y*lwWn zdht&~%aJ3*<3S_)BrALKUaku~X=N{Y{MI+N(SGw2lY7~N$R6xbDI+&6W%|p!nSAdW zs_}_j58HY}qqJMS<=n-+;!o4xe!UJse|@XCj`bw{F$VY=Bz6Xhu{Y}%{X)jIpKqCO zEjrF+Z)QUom)P)l#zo(utZi?m1NtYnW!TS+3mP=fEbPDjXihoB?Xxu}rbJJ7-B;QY zM@91Ouf50HR@#ZLUEkAM!kU)0xvN3NeoLLVlRIkWDKSF;8DJ1A6n|KizY7Y z^}EAjGg)I~eSz<0sk^EvNU#ro`l|DS6yJxgnum<*eUk52xZcsoxaX5|0zTlVY%n%pz1jIGyVh}CU-Evr^y&9^A+~Y8 zlsqE-bH0T4s6E=Y*>au5+WXX-f+1q>3+}Sll$OpfJxlzsW!}O%xpxqa1%HTc;*(?F zC$KX6K5qBc60;&(zWcsL4&~eR8()uMY+7h#>Ce}N*w`U$ z#BQpu`F8DvW@CpvK%cdN?9C-EB_?T`*;T{+p|+qh;@ho!tj&&Z8*(_;s_5eyY{b`3 z9x@{f;GH=0;ZggR19?R?mjr*kP}kZ-!6!8K1F7B=arWprhmu zqrZt4wbQnYTPMS@f~PjJr|C0xm%cJ$Q`fHlxJ765I4(Q)UC$h8v-dpYT+!tc$wkf= z#ByHi{3A!UCAkJs6I5&&+q97DxZIaBb0a-%?^8kF3qd7wrM%_wmJ0FjIR~*3aHX72m95GCv!z>8|nYH8OlJu=!f9LrGk1>3Cc3 zmgMYS$rroUuy!`_}*c=fl*-5y>s{7u0W=zwouIxM$V)u_MpOKC7<}8Dr7e-m8#%K;zkG6>-19 z+^gt26pWYq73{&}USdl2WwPJe$$pG-DSNH*oo>J7-J^*5-vNKd>@~)_yvKU}y4*{X zymukjjZEHSFD`4B*hoIa!U5qY4r;}ha?RkjdpWlVgYoC=23K=0@5_A83`);FCm4HM zYfyeR_qA@@7F3+QH7I4jnK}EOAa(X$;vmEL4jwsDcO(0kum7QU>yv-z-MpK9(x-Hv z^a=J!&8(ddp4z+hrh~FiTEDF-DB8N?fZ%p;#nv593tk4U-MVAH-~}RQpuHL68Gk+c znSCSrU5{?pqu2H5PpsA6hED7&GsM$aSr4}E_vElQbo=nFkE1Jf{r6a+qwML7p3Ufa zljs?iGKPw+H;JAG*KWN@^bAXnrDsDQ`JB(p4{{H@HW~|X?7azmRn@gWe$G8N$<06rAtGaPZxRqC+$4a= zkid-uWd=zQ5NZe+ASII-ARu56eGavXq8)5iYSmh`t$j|l@)TQZty-(rw$^G(pB7k)PZTe^0`* zJDkxmKf@Y`HF?Wvv!YvOFUHpJqqQfZYVQlr2Ldu z%kRkrKbL+JPiApmsN$3_m!pmJ7`j(cX7BmEu)!{C66csYqtkNLvJLCSx>MtC*A05= zA3k3|dmbh8qenK=)>>ZOzu7n2Abwlj$@sUOYh<^DwQ)Gs!yxj#G~`$rSTD1%o(@JF zw{~2Cy=J%AD>J4K$2_nR*MsIe0o%Y6b;1|fC;OoM>{siP>m%bCX_fun5b@+|pxc7; ztH+(urTj`izV^edi;^L$_n;-Gmp0G$MQHgN4Uyi}>H$gmF+FsOV~}?OxT-t)AnW`pveGE+V_XZ^|9p?fZ_h@AHD^qu^=ScgJtxYp~!05&}=_ajI0`)X6jnJ#Pr-2&!bX)tBSJzvcw*A6K6ZXx@p{wCc$OQx!CHp6F{%3^6*scu#*MgV#*7d2Yw|UDmfdjVUgp^tr@rsOcm`m+ zS(G0z=V<}QjdDhuu@B%_ITmyL=GYZ4!DHtST^{!Tm9cY-1t*|O&}T9Zag1uNWMB=- zilduM)*n|tGR74cJpMncn{CkLe_pZ!BOGXFu|SsH_`=3su+ zB9AB+d2bkZnGcooJqTHUZ7t>^@^R=$E=L}oVgGtI&|@?bnG9j^PpdnCKKmeVfGmCSQEj7^;R($;{TZDH6`=Ij<^#=a@=JaO8# z{=JnQM7cl4!}FwcjBnE981h)08R1y~&;CbK2K9c);O;jtrl*nXr(kXQbJ3zLp($CA zGrtw`gSK`1UdUi^?+h7m*ZW4`Qs`r1--t6L^mju0My#(#?ZH~tig$+ioCELKi1+5x z@vi^9%tvq!O+Hnek?~#ngKS^2D*oOJvg4VD&1YA3?B>JNLw|YZ5GdFdmivO(&4Dz+ z&~FlTtJfEl`*L>Rlbv=Xf6umdjJk)Mw@sdX@561N=UxYAM3u+kcU3p$h~9I8 z-)8L_;ye-lf%C*g?1OaZXE5KVhb^8m`Cc1D{tZ8;{UPHdgP+jvZv!8;(LT;GvkmOW@mSR{t{_vgwCkZDa)ra5-VW}otjU;y++or-$c^^{17)`!dZQN} z$~O+~fox&OatZj_IETvs?{LXp*zO6ep**w3cqu=}%e|{UTcEFEyegJhuc|omA?FR& zhBU<4FLCa0PJ@T<9sg}%*d6WR*9YO(oQoMtPEGnJbkPrbeu?$e3uU4m;5%0lH#vqs zf_38a?5Mtb@hy2?z;hevSK|F4*{{#9826Q59T^RMuf;fd4kcm*?ngaar5|w|v?1y% zx1DAMx6R>s<$I5wGyA;&-_gL>tdhNWzZ!S_od>?V$9ItUPM-3Q42++&d{%_>aw|+5 zkU!+ut>jp#^zN4fH0qhO@Hsw{W}oa2GKKg)^fu6F9QEJx{W$jZZ|q}P+;Kn#%D64; z>1oNS!6{r+7I8c~B0@z`Oy^(n8`{F<_juy6>2>g0J$eR?a8b^C{fnL39Slp-KKw) z?0q+J)t?<9v-mz5X!X0J!vAJLUc3XR{Ac)%&&snOp_ik0L63+V96x!9_rLZ&Yb^;~ zoW1JLuu*7h#&MJ6(dFbU>n7=RktPYZDH9j+e0qKORV8SPO&DLJdL$Z@YH=Di^k};0R8bj z>cNmBz&TBSr<|lQVWZ7eIxmFIZJqCL-wRtoZmyF$hhtg!p3dFkou9kUjp-MhSMbrJ zo&#{L;X0$&7|LVFG#cYb#JVWPL7SMeA3bLRII9!iNqd9(<{2Y&JskTLan1;RjHYcN z$4c}&ytnh)Z5Us?^+NZp+wwe+azlP`_Di|7J-5GUSuJl`fx;_-%-gz`9u7=v`H7WS zc*SVyVGm%`O(A?g;MBq^&ZAs+0>*b#i;4fLkmFR#MywFICHPzqJ2-rPSbgdM3ui!q zi*6R*TO3Z>ZFnx*aH^Fs{+l>c{IA&=cs?q8PR6vrgu_@gVDbeITiDvW=KY5 zP10`ooY;pb`}4bvIzQ_s54J_Sm&gY)ti@OzNF4~1Q0q?7bhkOa_yXP3tXE}LdEJD|i!!~`1CC^)ADU$AsgRa;qyo_56u4AH~WHI>{Hq6;PYs^hwo@`j`8`d zK5rr&=9&1O3;J>2;{xwvzWc>9WAZ8?FU+Osd!WDHqTfrP(;t4&#j{Q^e=(2Im*B6? zg>QqNPvl&;b$2d@lodJ_8c# z6mY(G|A{wcK;F=8((3hWK{sP=w^&294-v<4aXj;&5402Wi@5>MBv^mMo?lj3F>7{Z zS-?7Cm7iNa_Uy9xGaXRk3QWPz4~(`f2R}9746v+(F#p+BLIn4G{sWvJz@OB`9g9{V zXycz{@h5vTEMyXvbs*!&fqfk#pN|~~&+FdT@yoA<4upSsa9_vhZv%MoV0YRRuN*x5 z)GG(~<8K%^2Oqa~?dwQ>Czc^F0bq7p`#S#dPOLldUihg?y7zo_+pG6??=Q0Um4EGp z*oQcK+4uZcUx>YDOYDJJcUf;H?Rx@s8HZmU_r{0=v+lIs7=2*Y-PRkq2WI`=dSm#3 zS?^kJl)k*=jpD->1P|p}`_8%dh1jlGFqZh%`1k*@??se=PqE&geJH^?C;0xv!v`X} zj~po8edO@|BKy!*>#a20pSXA1{-VGW*HfAg_gWdd_Gj4pGXncF9FFCHbr>yPJor|s zC>%oJmj^MYZ`zC$RrM``sq&cR8i`c=p5i4f{bYz1#2M zPt<<9e+T=W@$AR6-#Bf*&J&n_`_=sG?%wmIZLi)N*M0)~@3Y@M!hZ0kdq1ZAFn+^+ zP)qOj`()?eJDh*%AJ=}9Z&vd!aNoz8f7fk$^{%+~6WD*B{q7Lp(2vFUDC(x8q}qCE>dO9|+39 zCfyC1u|kHV?*P9yE!YnwTaQ1Tu&53VLiM-$dRL(qJnPPU}V)eu6+yWF0p z5>`Ex5LP|$lx0eWY&(r`mV~Dh9xUM);o%ad3r-1(UzoygIfv$;=i6n?T!K=0p?QS6 zGeK*G7Eor}l7(|bAxLxBwIF&x3?xVK+Y$N42S+tawsoPXB>IN1;$B3a3lX>j^5(8w6*;!DKTtybtkL77q2 zW`!OSgc(&EtkCxeDhVD2yjAJ)`-Iaos#e!qp-0d%L+N!l>6I>j$bln zA9gJuyB;6FQ}e;AF)M=GIUlUxtWW?BnDE@mEQN67M=Dh~6HXxU5=5j4eV8= zD^T}b;5}8k68vj}F{#QrrS63Hed-oPrEa^ON>6x+l)nJq;XX?17oK4f4l8bn6FnNy zPhu{n5Tj(`JTZj=I%+1a6lL%iL$q_?OjCytP7B$2pub5f!X8Oj8P*|O zdPsJ&mZB!E6b#ZsHbPC}Zxw?WVa))sCh@n4ss?Ui?MM?6?EwB=CE?KLLxB|t-G5c4 zKmfr{1FHf;h+VH;3o#_=uiCX%q2`@@MTUrCP0=PtNU=t0E7zc>Z!S}0wP>?ott!;9 z(5edcEOe>D8uW9dTNT#AsQoWjg$DMsOBFuLHn*w5Iu`Cx1ujzy?pK8-7Iv#bGYe0s zLJPS)DmDygJ?0>8bLyuJ#<4hKJFHtClR}dwtq?V z4?HgoJte3gLf45aQT1EFC}6?$P;zX>76k_YUm>Uuh9j&_hS^|uf+_U%g%aeJH@;V_`zYKtKxb+h8-xO4WuY-EZvA{o)Ah&apm5wu%&ZI|aE!!aKq*rtm0F~Txe8Bj(zUES}AiOoBrs`B{`^sD#f3eC0ST zej0uz&9Xu&hocbdaKZ5SkZr2~kCne>0M4CiW_DfTg{YGjcK_2?MqMYEdKb@d3Y&i1_G`&-d zFO!r1TT0qBxz4dwPwO3X)j1sX2K+CA4yea!X*7h$`mjYCh1o+ zT!{eP_nV3t+V4&w{J<7~Ka_F|?8aZ^$QN=9+(uB!G4Nu*6Qmpix6>}t>;o?$oFwTl zB`oC|_#cFmGw^qXtbv!IZ8;uf!^)T!=@XQ@>2kT>a_N<#e3F!P;MHhRC1jg4@Fu|T z%D!%fIhI-(HBI1u3*ATcy9;nk>Sf^9058hOXsm0t2Hr}V!5OPN>#c!bhrg(Fc;Ics zhb7P33Fl`tfaM*S1}BZqs99|d{02KMkQ8^aWs#EX22}imCQmg?dhwi_$=Q z9c*{sNO*}A%nI%R>F-7@nPg=JuLFk_qbdmQ1h{$B5=7jr;Prs(M^y+I14y}S)DlGA ztl$>_Uofgdz+VJ>-Ket!{3XEm$`mXs_+_xah-R|^d?e&hi(^*8ES#J7spB^dR8x z3)KvIh@e#2pzo1ddibD+fq!0Zat3{$-Y30y&?AIL%C@^fvv-t){|g@U03MI9noXrd z;xkoX|3+d_cHHuNrrak(IcYbF(VYy{Xb@x8AjYi0uX-TdSYt7A4Z@2xxXS~-=7Dfw zO#lzp;B6iV|J7LduLj}28obj3zv+Q@dEnh1c#j8u%LBjdf#2~!IJfTNyB_$T9(bPz z!m66~0S|lSU2rP;TQH5Fx+htgtugFrqg9!j47D;c{%&!G~*x7&isXl z5ccQcCoxORej5P=n;a1p>}%*hGIH3MJB${X^7gf8SwC1#a~l&W^YembhK<=XaDZfk z$%Ei8*>LjMGC10tJc~lAEgU3s?0r#z(Z0lFe%_CehPStAHm4y zYqHCu7|pJ1_)iM=K>$SvH2K4eQU*zcB!(|(Vi5~XVtAClZ}^oT0q^o7;A4ISJWV5H zhwwMuA^c6(NpazIegu3^BV=oMpl%Hh^w+@;Q*22FKh$LKLro?-fj9aQ@JT-co|zgk z6~Xv3!$iPK(<@B`eASOYIO_L3lL9fR|1cAQz?4~UA`qSYh(~)Ouypt-_Vh$N-V=e9 z#NXtHJrPgzMEnS2dDj%|$)1QGqlwQ4pTgk!n@xVgsUi{5B2RNF^-2i(J zdQ5%?6u&x+BH52|8#U-j$?7HIWlPy+pKK#*_j|Qt1V{TMSzRDYgN~}7=&L`&s~;;{ zEVZnYS9kC2-Yeo;$^{VR=-K^{VN!L;OQ^5FwXKtI9s$M5 z%T7LbGRm7-BG5`eb$HrZbSQNPq~brr;Qs`NH{``BYy)87RNn05v!!7Gm*7vQi7Z7{ z%mh(WDPhYxJ7`VAUx!Ah7FVU6ya2TiK!#Dz5<>tJUjh#hP*O!(AeB81TF|0RXRT!o z`yv=T#mXYQ?GKR&Z-3wAFQh5>lnu_Hy~W$W9)M->k=F zCyz!O%qMZB*!^_`L`7@I#NT?wOOcrR@G*^wMs2RKS1r9be*d$Piaa)=lww|2vNipb{>Ttc7ak5 zYOoc+bry4qWE9iiWzkUku<26m3U%IJ(fnMX64I;zR~1=s2wpk+fr9H+cw$(ySYe0u zW3*{#2=*-utqw8S58?(GNr6<>y~Qd zJf`e-BPsR6&Oi0S$+bk+U7Tj*ST75*o@$QW`;xo+jAL zOG z)o^;2H?aq@QRB|JR}pU26>faQsB)fDwU@fJDjenPNA25;fY%%&0*0EkIOtI<+~FD} zIBK+M=@2N&2neln(UF%OYPGEJJSck@JO-DFdUCy@8#44++L2Zmy}it-7MZGgLyb>O zpV5?Rd_BwO>+vczg@2_8SL+H>P2v5jw!y8%Fd_m;sqIh|ip3a4WEsl@5I*|sGnJGU zR*Tdsp801^^-kRK<;3%z=TjC)vE-ZuLaf1T^QUSQI!jHrFN3YFH{Yp zlbSY@V3O~02)yjjLbMTovUM0@rt4g}iI8sC&xnyRnZ?&c5g#!Ec4&epvt2@&^F}G7 zp+*|bE6ez3lm!zd9n)sv+p2tq<}9-izLfwqwirXsRqKBU=28RGwebF2wf=|7-P&n* z7KfQBuF?2vC!`&YkC9^31jPD7;2WeN@D&1PaDdA$WdOYzcrSp)NM?t!wah5QsEzzu zHCoiD3B!X*K`Aravv`OpTZ++p^geC5oRxOMdQhqy(LJk0PL#DahGU?wD8f;?p*aQe zK2)_)w{{w`O|d>=U=wUU+sQu<3K=D4H-W1-WCGn9=+MAg4Xh;4Lwn16)n2L|1GHyR zdn1=9ZJ@^IODN0CQ;FSAi>=D(nv>FoC>z?ye?t*w>V~E^MkcD-p>Aynh2da$*`fX@ z&ZT>7Wtl*m2I>izLl%j74|h@PEetLq!^kUDWB|flZvhWIO-2cTnE$d-(ucayGqMp8 zx{;`qi!{OXcRdnBmKa5|linc%g1CyP=23H{nptByDa)plik6T?{`FYJ2|-2W!K{{H z$`|LkFOhLx4PdVtz^L1lbU+{;ig}R)*siS*bAoV+?a`?0gJ^ePB#CLwyr>z!tQr9U z#yIu2lL($9v`Ns7xk)(m@GIk#S>r5RHfv0u6O`uQ*;156jAr#Q2OpDM?>G8eOXZ*P zl)B>P2NsH?2XP#*PHt7po+Fx{kt_r*^md-Ql9el)s0|uvlds%hr}zMeBU`y`K~bJ>!N(8 ziZ|TQA#0>O(mUL;l9y$}8BsL#_qq7;eX-B-iP>)_t*07s?Gm!BP<;a{WmC%O(q)xz zar<}bIouJJ=tW~il6G61xQHllYM1m+lp%SHz1T_1SxFFAx9Iaj)hB9X43z$dqB-6b z@yENi&*P1;N1I@ zTw{EfQ@>-DDgB~Go?yuSQ8fFkdPoQaeOqkYaC%aku@Tcjd#m-tzCI8cLc1=tjF1@ z8tIpHci&Ro5h3l62r#pLuH^9*qIILIbfaIYMntGa06iI7Nk|3|YXZG5I!kzaA}T5zSfED>rBacQ+lBmSvZzH{twf8qNF$(}S-%+HH%_cY4c<6sBRg@i zA=pX^R(PLMo?GLUdjVlsbATq0P4q1p#Vf2S(W(-m&bKUB^6ZVeLP8E;Y= zTq|w9HCDI_v#UIj2mmwwNkGg{+*hLC@=Rh>UxnqwAZ^A~0toX$Ubg)-SbYv0W@Zty z6aY_p#RhC<4uNGri9DNy!0DvmhD7(3Mb5>n!=?5hD+Vf{c&qpu&d}j}co8l;@hskO z2@4mcDU+UwB)X8Npb2Sq-psYytlYjA9;DHV^?p4zRM}AR%a!cxJv2;luw0zYCn6$B zLn!_$vXNe5t5gw;&CSn2R-*HfC4o@bf(3XLHGv?Ie1u8MHTX_|!fq!v6js<35?j1g z0po8syLbe&nzh--B=I+;(ezYg!bLB-RBk7~2MX@&a#tR^VxUXP{voS6Y)u@2Nn4z) zrql>A+~pL_P8`gih9i(kk}^dCcfjmYB>glA{*JFztd0T_LxPKJoN$0OTNev;Cj3Lx zNR1~vMDBQtvXUAff4iLX2@jKmzNORw0TRBCED?0Ivu?j{Z(~`{g?XgCmly)O38-O?`w=leC5E!kl-;9X z+b=;$AA!}(PFCtc%HH=%@5$at!9BCEho><`AL zHcA@wTYQRcY$yC43 zE#)SVgqQO?-DKj$GD0Q*D<@{TNSqU@bclm=W09%K%T9n6Coq2*djl~9t{@=Pvk;Tu z(Men%h~i}@-U^cFa>6bNQdgnu0vzVZ%TBllY`22604IHdZGqSx_F#4(J~N0|FhsF} z)7=SPcazs?#0frN`4uPz(TY|c^Rh?$S*SBi;(o*t!2A;NcFca1#=v;^x;XYvN{<** zQW`4CniW~uYD|SPJ`F5Gdh7OAwrQfhR7M;iSF#2c??P{9xKU1{Pk9RH1@30dMMI6J zH$rS@RwgRTf*D0*MlC`nkYVQ=aCB3wLf(j`*itp&P;QL2iM*=+z)iDVshCJ4B zNGRJxbQ_QVX;A*esYi7?W*N|nkJ16d^27#kQmRze9L-0pX2;sO;exzuJZVH)F<#^; z2|&tS_f%1rfUHTTRw@Wgd_h&f`DBF-4-?;3H3*HWrUYT}GSLb9NkAkx<5c0=fXc6D z#UuoW`7VY1AY5bSa#dDd6sfh&C&o_D%dSZN&Zw8k9O@I|mYVd73J7KVHR3N(?q7|4}*9>aYq0%APplNn=GXu z@=T0y>?oEAfH5yAY*2<)DV>P7ID>JL7z>B}41 zP;C~Q%yLiip5=08&%qaT-U?fmnlr2t@4VnjovVi8AJu!B#7<`QVN7(vF3 zEvLQgP6%%v=~Y2wCi01mNK2|EqdO7SCO`A%LBxS6&w*{h-NX^NMO1=a z!9$7+?8-sLwV>c7P4<*aw$~$r)u!@6LBSzS_BTi7=uw9pGH$-Sd)dX0hjT>OiVsZY)FFvH$iX-5H%cV`^-dr|z-e%+X zC0plhud(wNuQ6fO*m>75sPiHkm!zr2FS4`RT``M%lLeUh0K7Jc2R`T|z=r8pJWYEIuKr{|Q^-zJ#{ zBMYh}JKOmth(1sifL$WM9?@-x2ZI$6V3!E6M+CPjEmcH-T_V69(TyNlt%v}-M1Vaa zWL>3~DI&lw5nzvK2Z-)bM1Wl)z#h@(K=gtl0_+k229d~vZ6_!d8x*V4^jDQ)ft8At z2boSH%Frm>h#$6-Bv=6S&r9cWq{h?Z%}db5Fid&b4wkZM8!(e%cM~H5GM4bzL#IoE zg<}|9&p-k5*+{e<%!z4tAgUZA(Kfq5fS>l;<8=cf4#RA>72Z3jkL`@a-a$~Dem>eA zmDo?8!+6dO_8Oh8#>?%ecYrLAd;NyP5+vx)%e2QieUWh zn&5|m>0#aR(V0~>IoW~Tuy9Ph@)6ig50Gamfky=_;!WT&dcs`UK)`Co1-Sgg)GQ0! z$rg(0F5xSxj~hvKo^;9p90FdZYA$C@x2l03=?E9Nl09mwjikC!QEe3M>!mQYEU@+o zRZE1H6f|&oxf}-0SIc3b669q$iX6$EKI9AtSc!iw@$*2Kp%BZ6u+(cp{FW$Z#u_Qa z43@~XR1wb<)zz}Lgf*K~e{eZ{z#0JT_Dxux(GiW)H`O?Yja5Vo?@|d!TvS94l16plP8<@ zZ>SpS7ZR4!%YKz)@UR(es`53VLt-vbn7sm{e9r!()UmP>GHKb%o61T+=*edz5!Nrf z*)QsTUQt|s?&Ast({hUIlVpNo`En#y zVlH6a>IU8FkZJ`4TG3|6lEMA6>@_gX!8UKqItly0)SZnjjkQ)_0$u^$DLgIp%T0oA zG~2V?eAy1=nPU{c2=R3i9}#%jW-z(1?u)Vx<(Xp|`O+dMY3fe!fHcEIU$RBAZgHP% zfiilLb#P6|?PszMWz;oekpd*HASc1hw_1Q2fcLOk@tQbXQd}YXtDr2o(<|a3|7c9V zk_U()@HhcPL2)Z1WA32DwVRC3W?El%84(0_YCz0?V(ume^S$gr0v7=I0UlgWVF8^z z1F_033*rT_TL|q0RC&u%K;q+W5dao~u8JRP5h#qu;(-a|k73}Dw236Xj|D?sbm6C~ngCnF4< z{R7a)ekw7*1*#!k>`yEcc!hxG9}_`ODeCNds6u!Ru0`V0viN|YY=A1bQ497x`*jAY zneNsShcey+ofQ{?fCrBvtm#;XLC)$Ar2mv=#ZC_;e5y?KCSE9+bq-YRrfNn0Gf^nh zJw+5d1Io95Y1k>+g8r^2r6F|b}vQX#Z^I4Yi~ z%~=gb@(`53esUyhL{SO!BLL>{&qqO8Ch{r*$d%+Q$4(h%jQju==cM}OcDw*oIWcj` z&fvK_g9#rv`xEfsa4BD<105uD&qcDR@;NkhAC5)PaPoViEBx#g8_tcQ;p9U^!IP#4 zI}$jF7&Tw!=DIWsh(`FB^AJDwXpbKVMnQ<~owNvTTUPwT87~1q5a3v{$re|d5NU~S z%yUgOiG&ALNh2P?U?(RQoYXoeVYz2 zDa7h2E-BONlf~D(=2*AIwL=K}Yse(uJyyy* zRh({%w~pK3DqoSr_LoS#;4Dy27E9hVpBaNc#82Cgh-b$VG!P+)eC*)Epu2!f#Gnm- zn$L5Pqx|XAF4ra8h%9pC$-k0vk>|bO`6KfD192wLJLB<;@1sip^IvvH$PM=72UIu9 z?BH&UpFdAvgvj7+ppNr^N6Ekk#S8q;|M{BJf)Wl&e#>QrjIhq6BmUDNvH7@6wa1Y# z!o))UnwW5*<1g9g$(9QTQ|rkGb>`zfl*V&+2<{#xTrLE^6w=6}4vZl75LswGd@tgt z9sj}$fpvHMrLs%O+4x=hn*@%~JU7_4}`3KV~i}*bd`366MWn|)O>wPl;Ds#U? zlFzp1@PSCqVAZep9g?DBGjYGGBeZhPWndz|m;=E5s*e2fPVbTo6EgrEy+cVB^KI;5 zTa_fka9AP^&0IGL*`W_1@2jAaUO~Y16FKu$SXj(uvj;0oE0+~sc;-t1qn_o*W7`2E>lG&%P_|wRZzM7TiqfEx>E_qj<18| zw^4b_W5aQ1r{e>}U;LiS?K21;IzcV4oj;*$tZcp~_KXtl3X7h91F^VKIBJQl;6u=3 zob35x-_%hY6fO}KD*iyp#xqIlUs|zzJT3VvAo7^vDnZjMmkDK`M%^qS70__>c z5VLZ<%Sek!HxcqyCTJjqfCxVfe@LTrbd@W|ROziswk3QLGZn`IQnu$P)+_w@lV3Im zj#T;cW5~87(`Dq!hOtZ8zNUdY2pmH;p>&Xl=dQSjZE2ys1R_yT4X-*J&LsCE0y)RmGA-*i}tulVZpUnNj{@n`90k1gXgW2_-N zuoEr5>h>eul7g?%g2!Z!a#OL4Ti4ipq9CuE@YHlc<@WK$|!hL>OX))L~r@nmCJ4X|#Wqs(5s)$QgK)s5>c;#grB z)A^D(v&(r3;y$Xze zX7i)p6iIg8f4KxYU@Y6uDhztrKQ*A&FVjbXTh3SErGNDF;Gd!P61Ud%9wj@x2i7b5 zilR<`woiL|5nQ$V2?~6 znChetOJ8#G06XJkoDk!e-BPCkg*O2e7{YIe4YHi{DXCLaXAi^=uc|@<3yCM&si~~7 zQAp}%kcDh}_CR8jBRB^uM7&BFXwas5w3ASm)*t=ic?)mkn?4GSpwof2lkRnpfkq)I z2OA9#wF$cWOoJuTgMlYmrwqY)=1KM`L!=}pB?zX2+-3=s?_|{s;~~?*MiE?wxDp8B zp=u1GFiZ_z6oz~4kf0BQCQ8tIHhX6;ITNIA(9858tO+x%izqC{EU~#zt{S0b<()3% z&F4UQAkNb3O&HiOpFcw;+aAR;}YCf0r=W@qX?c8(4QI( zyEy%di)}b)F~&Xd%8T)5SO#BvCeUYS?mc)<8UfP9_L7sAr7p)|5o zp#(@dGZiYxOk~Yj(3VyYYR;A--Eig*YG{_n@RT88F&Srj+Qk8-S1)VldfLF*T&m3; z=BL^?6rsMbh)sb0u-%pYV=w42pjjo8#h$R(L3r|EQDbwed5PK1=M3k1^fdQU8VpOJ zVHPNGxu-ym3-MbHo8qpJ22&bXY3PHspD}HS*ABJYoHE2GMU|%q{z%{|$pt^o>(R@x zuGTJ2DQdi0$&EeMdPo-QyrQJ}f}8~P9$xEljYet2T6Zv()u1b-9G_LiRBh*V%FZHe zHY$sVLX$_T88=6jXS;KTw1ZbBW zO&cgW8kcy1l^7fD;hk$+y@F zp1cQxW4!R@d9rS0dZcFy1FH#54gRl~<&zk-!Nc%%Jw($^Uc~FwIPseOUsG^A8NEQ@ zADT<+5d_)`G#2jV!SUTIFz%RD7hrZl|700UR2X#%UaG|QyX#Ad(8!ueHb zj7&G`&DDFVPSYC<4ND!n)^9wcnZe9YWp78q2iZSObmd6`F}@bHl+5P*WNXW`L$2 z{p)=#&H#G#wH{h_hvDtn{C0B*`r;lgv8Q;$1>@CvTn$1PoA9o*y zlcfjQmz}`zhGT3`(e=4r0MeZpVjfqv9w!B$kK^EmY2qK7cxLu@Xh`A;=lOxtVSB>+ zdp3G>8+v*}ki z86I!U%wB0UKQkcN%QV(J+l@0f%|^P3i8EncZ%E>zyaQgpLNtNN$JkjJiElhgjf>Z# zH$qKi_MvgckPThxTC+u<*of`MnMYu}fuG>P@pu@U3ImKs84qVl6Sw{ZB{ccCKNijiIPu5~3-r;=;t7-7Wr=4uxkp<*jzbxJ#uG{7 zdP}S031Ea2|J3@l0_yyisYIK~aGj*~!HHd#@gPvs^lHxb3{B$Rd!y|QA7_5`MtZ{d z6+46HnK=W>_@b37ss@b3M5B7^Dh_F1+*GqQ{oi0^2668QKVGAFIFo7I`aXnJ-LB`j zPqeK0m@<9r(Ch_albzwPy`Z%aJrXaCPE506&&PRI-K!yWLn9tyS{hl5Cg_=@YP@M` zZ&1cS;t-~6w2JdLT0U2# ziC1Wrz4Qbh$JF&qs>yrKXN@=QEYbm8;of^|8B8gQ(@(Dh()>O?L9Z?U|56c0MaIzF zT4REF8?7GhU_`9rf|_yQ49{&$Sl9RF2+Z+n@j z$2;urb5F+;+3?d|27LnR_j5Qd>%>raqq!6BS=MvoV?}9C>^?b#kvYV-?QutA5cI7_ zPr?(_n;9#NoYnxf=A7gs-m-28=)-GblWkvdMxO@Q*VgfRG^FfREt-E{XnSSy@2Jp% z_7-w_!<#F>@pu?Y=$qepA;EC^i%9PH0vCuqZ?~Py25g)It`JC`5y=*rQ3uEAY zbOV=(r@g+trC@aB^6(ztq4#4yx;DmbaPkZ7@;y=6+=jggqzOK`Hz>SQ7mVRNFF5I* zPGr1&UIdS~ni`=CQZ4(RNoAO+Zyw?f{diV55#9Kt@ZJtS{+q%dyOS(Ej!)zr7jJPi zMiSrcKRGw>It_H>yTkGKYUrnr6`GNMAV&IVR2ZoaxF46MFD-TVJtOV$@CI+cD7vA! zBxu}m8=biNKEW1RO5dVoJSBGPjfV*u*Q@$Y^hBpGUC|8R6?WsBK!$X3v-NaH%Gr0V9X4c$~(?*QQj2pqZqx8NVEK3mamUu z^ky$lMZHmc@*3-Hs>Idgzo7en#f(M}{~U}bi=iV^l-^*?q7R;| zNslYHCN%r(MJ!F)TY%{^-YKvGWM;l5Vc($htH>S#(U(fq0Rlic*JLEl}?$+fBpQY}qU+XqiUaRhD>aOL{ z{pkA9J?Oesxj@}_se6~Y?@)K$evd5Mx*sj?8;Y(`-E})9hy5jmSN%B8tMaSz?o_Js zn0d9rK=6<&?Qs#RruU!}_T$h)n}849n*r}eM&XI-!A)%cvXs;v68{-DZFsC!7= z)6`w_*LQ{f^!BL+KGndd8u(NLpK9P!4ScGBPc`tV20qomryBTF1D|T(Qw@BofloE? zsRo8N@?14=Nznc%y&wLPBL6I^g@5*pDTR#7Yp`o-j#FI-t>DLK*VjgCsJX@styLFv)^*lJ8=4!5 zsH&~2ukLK@sOs3*TGt+3ONE@xVCiK+|r_)NN(vkK@?3aj^va^a&ogvBay<9 zIfc%FK-jrrOW65GAUvYDw6v6D&YPR-o&F_(B>1@Q=gAa1D>pkb_u7DCU~j@N+1p0> zjZ8Z$5HJw$ABAvi=l+Xq=UFR^d$_lI#JQl}84xaXnxpdyv-6#ddgp1YJ`#z{cD{B| z*w@7~Np?{|Zgy@#t{7rTVkm2NB*!P#x0CFFkpVu`n~q&PA}>O1*@gVb;fE*=aG|l0 zK+qV>EkXO_VG~E>4$qIA;&g`doQ+|pe;AO{6?ReukQR12!cM<%B$8j`tP49?VW%C>kdMe>TA_GNOgg-%K|*J)hlWQLt) zm}&q@t;?MBu+xT8Ka|!lEA_d{RsHOfbH?Q7jBt`EXfEtI-`C%l``OMS+Zh*j7KEKC zCC*u4=XCHoE9y*)I&;Di=ZvT`JDj)NnH=@CyQ80d(ulmg5s{)(BTh=#*#rX=`iJsB zKRYWsH+M3-W_78*`Um~&K?S)5IjXv}hhRTDcJ-^ru6`fGIkJ&X1GB5va_$Z+*1Tc^boba6L5g zTyi*&U^wZHbbCT}ZXtX#FMot{8QOi69L~*gE&+51jke={1ov&?9*sEN04_=KGx=$< zJ$~5uyx6qD+|o$l*oc@RJ*G)+(Y(lVP8Ecn!fAztk;201=ao+vR6ykwm*&ZKiP6OA zIgzmuXAz^4jiNIsiuj`nk z-{Zau_r18^ih($n&JA*es)prn4J7vpG*Bb(=K$r zd|}x6GvW*He+q*27cPW5I`0On=0zUx; zfb%r&kMt1lx-`2qHzzV6GS;WUpB^psuSJgttD6v$9|Nl&faRmOKY{yh+<%1oBe*|_ zK4Ibq(fu<(Jpk0tdi462bg|AAjv1Mq>+ARL>2~qtbB0Gs=gD;@nh4>F3h^;ElAW7@ zyN~>e{`ToP1$jAnuwI^X4SISXJzkCbJ`VhI0R9fdmAD^B3FkVOL8gBK@gG1O?jh4x z``bg|9piI`kIc)R@4Sx{=4vcA>W%^ZwIk|Wml}26Ma^}n;r$D#Vc!CNe}6YFIDbI> zO`v-n_girPJ?^`3-;4XLsSxiq2{^yS{TpCp2AF3u>?~)eeeqgGnRm8!oQH6RfJDgW zOFv8D3d{fIWn-y=6JUk<&lE0O&vk~UVOc{y;jUg0RKi#E8Xn1A!|>p2s^@JaKh^{i zjWGA<0DDkp4y?Hrn(_7fjI1eIv=;t=h5-a4r+E&o!kvk@jENVWXldS|jdaGdi_05N4t3FMi; zfBB__PHmK`$wlnId>g=L)Qr-qXX*+;H)7XV2CW=P{5z4${X!dZj(5$a!!})Oi{K z5UZGT4OX+iVKs9e1LZ3~-mwLRmjlsK=WAQSG<#toq8A39Q#g~K_-|M*cc_aEa;M}X zS4C(i?bL|V8J$}SeLG!I#csW1=d_j}jz&ipjfIMDhEiUKQf_jh&VS>+3+3O-a;^Y= zxiRYe1X1=OtbqFyu_hp&ZF66~mY_ubVsEsgyv<_yeGFQDE%g%>MVW;Q)Kf0pM z_7F7g9NIu3-`QM`F0XgOx!-o~3)MSkUF=MOnl_X;!|E}&Zd>F0Iw_o+KO!$jF6`k% z=gY`-BTjogTK`zIe%L|$Md?SIx!8i;_h6E@l9uHnp`?|e=^b4i2&gda-;$!v;IMO< z6D}Ts)WX@mrDWL1Eh7uCdAZ4H4Hrg`bB-G~&Y2K)=7sSYaVqBcrsV5EdqU2ziP=aC zi{LfO*XR2J$gOF}2QiP4tP8~oCY(5z>O=5Y=(NuP6{Ny^bh116IU=k- zk+@(TG}?()`1?w{vt@hunGr?V^9r4l!;C$H@EH}KHa>k4znF$Bws=GXTM8xSj6;ZX z-d#`q|3GN)QHR@rAHa*plpy*EC0++5UYESA6q{xAxc*|?oOy&7x{THaLPqR-vcEl$ zDj7E-FFVhl&b){!vPn@VA-v^qM?|zI@;Q z;T=d9$;r2RAqkL9t~D46 zQ{?eeGLAL)X2)&d9LdSaE9}Ad9>F&+f8;R981wst_`ZuF{?oEY4jW(UY`-Xq_1`&y zlYs3w2{>e74g>J(i|yPT2p7pi z5HT|o#Vj8%EHwV?Sh~-B@55oi+-ZI(E=jac8jmnLk^htzI|HL@uPee)N`5w6#Ep77 zYB;~M<~X-rG$+sbu@x;GFB)OzlV0Lni|xu^u^sX5QD@)A@OU_x^K-19_hM1~Rj5RU zy)Sl^ICosM%y}3UPva#%PVsaR;&ZUYMs!A0Nsl6ssSO3fZrU8@?JdikuLMeb=uc7@*~J~CFJ@$TxBUW!50y^EBqeVFrosIS>PLrSC!-C%{;P)8#Jq~`jW4{Z2 z-`E^Jb3#!LR_bdL<`m=&) z4n7J-v0IqJBO&L?3+J4I-hCQ=7#efZN}Nu=K>rBZ11F$QtRgoeVfYi0mK%}GypN>j z8r=UT?zX!7WANn(_DN%Kgq0)XI9916i6zb@$N>)_!Q1Y?G*@r_p} zt-|ZYDn7uu3!?oBqI@&S#@&Cwb7z8`RlvA{K#J8%WgpSRxzk*5{%l__-^YxYFu{2d zruz;w_X51`jBwRARjv~O&# zsab8cH*BioQw&t$=}C2CooIunADwm9?8WC)Ev^IScFm`?x}#=oO-pTE(WEN2M633C zd^EJTch=RkG&NN>qm#C}>RPMv+(p%mr=Kx#QCrKJ3Nq$%oradGrELuzbrp3r9W8Bm zCe_lszOJpqDxWdC8GSa?R(I4bu5Mlf#v4dSsq{l2bW+#U+Og59YpyL@eD=8<;rMYB zx4ONC4^FC9cS4q$^&O3M&3II_z7`{Hx9S_K+tzAcC=JAG_SX+I-5J&>!`90wAxV9-qz95w7MM+b0DKt z)hs$gT~&Ks4TxwBnxdu!1FC6kX$MW?#0k|xC?Q>kwZ38b!nTGr4UkUI*Ecj*H&)ly zwlu>KYpR>-n(+^H(9)V3Ff_@i)26y6T1*H~v%0zsVt1|TzP+xai~=9U zX_B8)S+xa!YFu57F|V(0XzYM!QeK$41Nzud-7Z{Ejqa?@=9(F3VAbFWYHJ6W&2O!4 z95)%mx#(KL=y>Q?v#vqA1=O{srb$~^czYw~nDBbtss#@`+uGQ(U}IQE&EKZgZI~{~ zs~cOI*MuRvRn^ec+SyiD)!KoUQrxO_;IWu9ThDyTB}5V~3|$&?wZ5UPy`vd=ovnIS zt^|K?!*mj%#+$QBw$640GR)UC%HA*$bO3X64pucm+juIvp_WsA!zBp)eT5EnD3#ylPQfLyNV(vv{JYfzzwVHdCrc&i1M{2C(*qHO+Ok;hMG8 zZI)?DligV@ZD&?k^c)Khmczi|f`{utsAoRM=cw$EW%xr5IFu zM@ws~Sd$P@YwFtD7u0oi%)q)%(a)|UcqW$uAr>oe?=2(Y2b8Rtx5M z9V}>Zwp#Uda6Oa-N34x_XQfdDdowb3G_^L=7Fi7~l}sFt^~Q%(bRpD*H#%hJqO)ol z=OLhHSrB32qhWP+U`X2rG^SX`CbdL@xJu3sPfucQwRhG+pIDr+w!^S3E$bTeuvb$x z`NgLzLEKn)j!tH%MG+XNj;akv9-uufjBhbx3|v!HkA+2rDlBp^x8jTlT*b(wW}>&e zp&rw_v$ayLt7S46DxW!O<}vUgn~{kI2kc5*G|`xl6_sU+E0-)f%3_!qoz3gaU@c;k zFuoF0ICBS0pb(wyZO9<1dqe@QlU4IE`?xy6Um6f2*EcL}sO`|JWoI*Wi*e_V8&|A( z8MtvmI_MU|mn*#@T2t3SfjZk^H0c2F-8QI5)eC98oQk%kl@<$+m2+?61k61m=QFKU ze%g9^JLV%+GdDhBmRe%GOkaH>dh0foT-({yv=Jkblbaa&o=m-@L#p%zD8;5n7A}G? z663RG&zlK~_Sy!_`UW@$m$vqC7M4p)0_v39dyY_{n=!K?g_yqc7S5PkwRq-?C5tO& zpF6Xv(vqvF7eXs$EvYPDxO9PXMiscLFx=)A4tgBfG%srL^|`vUouOw#OWV5YHmI() z9czYgY@|IRZB_HZO!Tzy@cG@h-?vBfmPWlZ7&n+cBF@$tuRG=hp6)En;TkIYa7bw=O)5>yM-uJ zUN84sCOerq7K={W*Kl*!T(<$)D6%x{Wtxy3x71j*Eu9Png4MW*6Tpfg2pf~8YR0=} zKvwzeiWyb27gWw%d{)_vnN<~)iG}^cqmE4IDNCtjcAx0$Q&B+ zZXI$@F-Re#=vHy>Y;MCA6T7QAIu=%VDy$Wg2`c~{L4n2C@wHTUh#D$JJ8N)f=MI1fk0E|Glw2X@* z!W}Tei+zCzVsSfQgnV}Xa&1I=bF_Btou*6^<>1j82wU~A~f=fzHFR>fm zP$RalD$kc|nb-lj*>x>a*sl83^S$|s2vmpcvZc9QCSaJea2lkJVnsqO12b@E%zd$9 zT!kI7*q*8(a5bMT(~}D1E)_^Ms+-C>W{Oh+WJO@u1r3S7Xt}u)r$#;0j6J8=y2#0n z?1`KTa4_Wa!CckdYv0{MV_QqY|J4M_N9f@IK&hcy8$MN+$X?9 ztu5_XX9ZU5lUG}Kler1PVq=Z81`}e5Snw+#-%QBYw7R2ZLyh(eVH;z!h{=mY0{^Qn zg_4!Iar`2Vu8i5CUA3-$^{l#vHETP>xs~^Vun~-X^Gvy+luX2O9FaAzLEhqK?Uam( zve;LHo(CFB%d}Wt$kOJjZEsO=+d6x}lJJb;;;?vIIy|i(qHsWY&%qAuBv~O?d3WapAG`&3I89#|||eW3hBpb5{%`v&|07 z#<2_@oRz?lkz2MJ+L|y8xP_fC33kPSRwv>hR-DzYXNtfj_LW}XQc+s1<;Z))BrsM1 zt7>&MLK~II2`%=O^1P8Ky-KQB1)GYvfB|&0tP}GQ$}DeTOQqEYxgXUU#Sw(zDtPU= z)v8}@W|zWmWAw?NK5Xqp&m7*c;_&mHac1tmD0K zwKc^7oZ8XpaE9*8S>`{LK?=(Q2icV|LEC5qA*5L4eCr;z-~Po+Zv;1>Yj<$IjK<7A zs<8`fuGL2?V(u`TV|+$9#X6S( z9y5#S`u~`F7jUn}^x=Q4?{}Zid$(&JtG#P?KG)Vsva4MxyV}(*Nfbf|Q3ws8p)m$S z2vNw$$k{l|G=!KOr!kEQ4H+>FIm`$lyr27d?q{v1FRuUlyWanGz3;ll^m*=eKlgJ# z_j6q9yVlyH%#^*rTphb?r!A0b5-2G@8oETD2j=Zsdj=7(x5DkjZmtneVQ=GZbS<2B z+8K+?oh}(3dNXnUX=j^h!CX+V9_)V|8f{hV71dcM&d__gi_V%&JdTyy(dIUQ#yi?p z%S~Da1)Bgm@2TdE0q^Q<%IFb|?&il?C+g&8CwHRi0wRm2-HQ0#K&~og+k4^?32mp@ zOvG}lL@w5(`>~|RwTw5L?su^&M$De=tP{C0D&hWtX0&)kG3Yzczpmuo%F!oFjP0FO zYo1JJE#&@8B$J!KX5&N;vy+c&P_mywU*HPF{w86UlP0;5p^M49E%WX2TfB$K#ZuASPuolZQdpuK!&PL_#G?&O)D2Tart z=@a%;ivjM?DLH~Ssytju=&kRw05w9GS8 z)coUEF1=pvErpbD3bz}XpJaNP%~Z>JaGYF8_>nj379pbF($S~7-@&X&(_PK-d*a;w znk$+FxNjE7D&n~_@{H4tW9ZZFsh&&-SJ{Q$LNg69pmX%JEQ!&&DtG}?kUDBvQ$6*Z>HsATYmY? zq}>O_z_5OdiAy8?ALimR-c|aCK$iXOHKwHJr=*)w(hVu;vH!#L9Q6J8&x+$e(KV5O ze$hzNmSd>jRCnHekPK4^&P%@=wK_y2aU>xaY5Ls>&?snR?&ypWqk)uims`7sNZfv` z-AmE0kxY6t({D#nknOZ%t#QuPI0gP)JKgv)+W0a)QrWM*^K7}&-zNW9xzg5t{p;iS zG`jlx=f{pHD3{*sRHuZz}I!qMz(_;uNczKkb5 z!aVES7~|XO@MP0@n2JW^(s(1^vYiHH-^Q$z^sbcjeA2#8R~=%;r^NS1`?t2Q)N73M zxd|J3ge%9}{>}N-;S4;KPHm>Mw?)0k^tI+l-U!LWJ2Llh3u4Fjr>AXiDKF|z?n8vA zCbuLu(9u_i$7${TyxUJTb&nU22dxO$4vM@#gk_NTf&P9zvR~5h+-!HO@N!F1PK~XzDyOuAj_7 zdW0KCdGR_{qcI}a#brcpQzV-d(X4o^dUH!S%l5gEHz)C5YP~usKVgF{N9Kf8X*ct{?CS7D%4w8fNI}zJ8zq~`ZxhD<*l`kToH2v< zN6PYjtKqy~_OQliesyIZ=a+=nR!?mC<0-IXc$655A|`DR)r1Tjz76Sn{@TrY ztn;}9{FcNVvYY*Z-Ae42SLPY7{9vEWOVPRw@iH^nMkCrUzvjnnjEZc`jve?Z8`A&$ zI&AX$Dc&3rn?Q5_`tMFj*N~pUe|n@fjrRKUDHyWbDjD&X#JHtIlU@ACVMj=G=Dc{U z`29PrG1^m&c3Xxc9gM?RK`^=?i)O$XKW58Q(sTbm(sNSIuirmyK0xZ*FXFu4$6Lln z^G>uz`SD(C>mhrfanxD1g}F?o{A&;2w$#5yC=%{ekRTZb^(?l}3>_Cs&8EfcitykL9LOQJ9l!(r0+I)Ax>2RL^#RrKrQhc^Sj&ME7lCCsKI1IvkxSN-j z{&A3(E{4a(>EJ`y{fQUJFZDS(J|DJ$&xq5(r|`vbI+XZa8>fTMmCZl+%a<*Jbt-GZ zUrBG!H01?fDVu-L7kkk`I-A566=acL($T^B91`!UK+a1#Iyf&EXa7~fX3m?7HK)LN z;uZ3bIaY99(iNJPc%)>jz(xzBNvVsDuyNbYc;S20dr~!JjhDZ&sPqhje^! zo>+u$d*@wjjEM8}z0mb($?y82JI@@)v(xsF^ZuMCox2_9U72#8bbN5WhVxxjBIilR z2j@F*zCk5&o^*V0zK-*gz4N5wgY%s^f1*li$bUEKi#09r_s6#Q>wGaPq+MTd>7JU` zrF&y{>;LoGV<{$hWmXaQxl5QaX z5S592K3&7>h4vs`!FQx*d*|^bc}AQLK2SFQP~OOtbR+r~s;n>m{VC=A7|!3QvS!Xp z`uCca`hB0GKbG?^sBA6zl77q6r!A6hJV^e}Qu2>aNmJJ}jc;-u_MT5UKaulpOh|kG zjx>G19Af{=6#Zt-Q)hFGMW1wh5T7Y=3QvQe1^sC%llkx2l=IU$KhMhegiH|JmvY|Q z#~FJwQ_jyyNgtJxo|BS3CM7+W@-I-C)R)+%T^XmNx!Z`S&+(kUH9jAFM4B;W4#~e; z+5CgP*3C*uGZ&;ir#hnl-xU3mQ_`oP|Myrw%pmoYQ*NXG~EU0*ap(!Y++n(=T= zO8VNA^z|v}8&c9YrKE38Nv}>x-{pdgOK{|ClaAVEs zvp&TK`oD`)CO(g*q@}+z=bJ;?yH(10`hP~2cfKU${2w{*WJR=>qz9;uOHW8ipOTWk zdjGVh_y_-=#NK+9v|yifd~p6L&O6y+&XbN0&OgKXf2gFM^Q7a0^QrT1>U#BjtZn>x zF(v(SO8U=~=k^4fD35e}P~KnSl(F|}N_uNb`n8nwHZDhW{R##%I7!C`_Fw0`Yr`VW zla3G0zrpzqDp|^T((%FhH#zUtyBf}ujt|an=X`@oqPdYw0{|@J`QHh)<9Uq+kC+FQ59Lssq z@xl3bIscfIgc~_eIzBkRlk>VCG3QCg2j}18yvD?wCmkQ0f1mR@hnw@HzjE^xfQP#Mt{N<$UV;@kz@0PgBzWNlE`VCH+}SdQVFF^OUq38%B(OU#6Vj zo09%2CH-|u`kR#WzLfO0DQP#?88PL5zyEn!+&hv#SpVeuE|VX*bsxG5)6P z2V{Q}ADnL!r%ZjzQqmPE>B^LJbxOKjO1dT`?dCcoru@2;^BuVb;u<}T$`Svp$Y&dj ztj;cvriY}Y8&c9ODe0q9(kG{+&rV5SoRW6)S)k?Ls^|OSFTQ0xuIXmdT}i)W(_ua7 z?xfuu*GRf2X*Xu)lkUwe9@ht(NcSb}+Ngnaf6}i0V@cPO9;D?-dLZdZUV1R;Ihvls z`Jtp2X?hmvVWgL8dJ*a2q%YUB)-QWiN_uTd`d&>hC;v$DZ_sop=|<9jPtkXC=seDk z=e(N}@<=yv3(K{)#A_mHS6|VeLfX~0D{0y`XRO+n{L@Jvsp+MpXONz+>7Jx#lD%`eWj+gzB$)vdNJqeD>-**`YO_MNI$J<@#h%Q+cmwB^jy+9hlk?N@!l;riT6Cx zu03~=K9O`c%|D+seKB`{rlq`7NFStWiN|TAn>8)u;LwbUqm-<~xTE}Y`kiMSuNqWAV^bMr(*&N$Q zQ@1>H%uz@BX43a)dLQZ4q@U2Vl+W1BbM=$+x07~zgt4UWAnn$;O{DK6FMZM+yGheG z@^duZMEXV26`I~j`eo7`HJwG8{boL6(j0lDUnMpmvQW4^80znTQj^M6+J(1pPSn6s|G*uC{@b4*#5Is_Qf3XnQsW} z_nfYM!r49UXdZ0SS2x{j`R=uBb50(};=w)l3cRhDW;oisZz#{1$rFFQ7x1KB?|$wf z<>)z3n?)W!!;XCyfh^;G@G`4DW9QzrRS#|5fA~nS|IG$ z94cXwmlpO{{Na=O#-fSxk3Nbi&r8Oyb?^p(dwaL{pac33(oVAf>oh<5w7KaH-eY&- zp44N%R|ciaqzdC#L9{UYn5ub!)rKhLvjWyKPPlh}td=x+^va7BnWU|p>&ekWx>m#X zzUX5W@?zzWpYUEki#nJ;jLg%4Jk7}q36TvuUi2k+Yu41ws6|@FO3DM^RvDq3G;f7^ z*&~_lWd1|Baa+6R8NJ&0&)ZsY{FwlomN(aUfZ03;Z6(K=7X{3NEE$YuNRTFq<+XN?*Q`Y2b%%DeFu5R(-!`!No97l(QK28xnaa zZ_#k#C*Rk$c1*ba7sR9WxUcI4vBZTtmbeH;5_x3US~fxTo-CFZll&+CfA~h3zNQjC z`y4-P9KW3|W}^2C_WyoS{8of{35wa+y}kKk-?1_N`Rj&zpxb|!Odr{9-v4zKmEy)E z`!$GI5WiWYG8r54w6`XsPt~|A%n}pKmt$1$gXj32V)U-43if+{Rb^6`D`~2{N09n9 zn3;@uOGmy%W8aS^U=j(N{Q(-IUjnMfSt*ouo=lv>DjZIF4T<^rcpfv8!Lo^0Z>1 zQ8F*H#HUTtoRBWE-&={|it8cc*M_v$? zI4i+?!oO*n_L~o}b~0*oSbfR~N$Z zt@EFH?{IbJK3^1{cF0{EI(y8$tA9HEF|gBF6NH`IH8?Tp?3nv3+nhc&w>kZ;LDD)ikyB2*y+@HWijrezJdL%qAz;b+$#Ude>L&A~v_CXbvRrt4@b@iF9a}SDk)i5Y$o!bJTb-C$>@C z=mXIlKGB=Qo4q-6mN#$H7SUWv{D(RFv}3eh(BC5a_#DXxd-A3H4C&&tg2!#09ma1$ zGXJ^bj10BtKA@ToMbwcXs;wI1Vx>$uRacsjGaje2Q z9xwOoZ1e2z@$!D{+5axKpBNVFBpQP7K&?xHxz4p|Vu9CQ^sA^{y2d{6TUs1j+C5rx z=Xve2z-ur1_9oX)_&3^1Q2r*@Pv~#azJjsI0O4yzSbn$tw%p&z!t2-lxfLi*C;*zaxI>beNYSKGpN{49`#cSmftrL2#t= z?MB%7Mt_Uy+m3iTofr~+H#nMyiT?vmpO`=3 z^x2Pn;{4pM{@a(J&!bvXv+k)UzXNNZW z!f{WptQlV36b{Bd!U;@y-Y8p5w}G<`Evp)Hjkd z|3`AhX4L-~n=Q@`F?q%@V>y}!7$ea0=~wRBBpmPYlz0yo5;u2k!a5#} zop4q>rb6QOJB>+rJghMZ=Xrautk{PDe=c%y;4jP_rg^!p2@iAeEb`Vh=D_7nrvvPC z7$ea&m*>Ac58~=2&vxA7^3vA#xV&?{J@)*#UIF7h+S@Po=KS;Hm;@KaF$w6;kv{!7 z+J|4^?d`Af_W##;`}~z&e4h5|@~Y?m8y@fU{QSVH*T-JH_IPpr+VlCl*k`%6a(i;Q zwsJm)w29kGhXwIoI%GVCI)3FktHN>j*oUxp?1StNqyAPOw{ycsiRromV`a*F2q_p3cXf&KI#x zA}!WQ6vR4-Hl7Y~_(RV!@r$64)pX=#R_bBhOI1Y&`yu3Ghc~^P<{KnI{ z*VCcyZl9KT#nbWXp4b)dtCK_HYp5iCy6dCl^f+&l@fFEWipxqej@+I+$=Gq%3(4!^ z{d|(KP^&RX-s0K3&9k#M-rFSC#c@bJ=;=S<>Aw`mQ2NTHmHgjh{70V`PJ9Y8FBxWj zm3LN!#kM^5W#s!{<}1Sw!{y3LVb&TWp8?k>cZKVeu_w>^iB2eG^;F&p_f-~u=o?07 z1w2@J0X)odavR*B@)o#J8I*UeByX@p61W9rA2!?omwWo;F>>}&ySTOp zp7U(JKM6jDX#;cY_1b7(Y)95m*N5eqYG*U_VjEIl=cnw) zTuj0-aZF@y=I$r(8%k8)ka^x+kB7er!aDUWd=OUOLiV50{Q>%6xr@*F-nhHO8+RK# z`^+Jc{hHWM=CSYy?ZeDJG5hkNLD1jDioV_7#cGbHztj7@V0RGCaW=aK;cUmg&1x?% zu^Q;?kAa>28J^B|&pu`O_9Or4dwrc9eD3S)G<$aF1BEVb*o^FydODq%#+{w+u(MO| z>8$tc-0#^Twvj*B>F(L-?(8&pIzMH{j}Jbyb#@qQZT}~B=+x156Z1*L!@O&^2JhO9 zIV$p>b{p) z*}25CbD764dHQd8_TTsH@A7sq+dv%ku-ztOY*T3p}ojku2Cj#wuVcuZ`apRyLaIWs{YcJWE{_4M)6 z#Wuk_7U|ROk-itt#2QbZwZN^piKpW=H}OKe<|ekp^Lb*cmv={e{m$MvxLW&jVo%%$ zlGMfdmaL3@OSX%BOV)Wh%rkC1O3sLFCh5=aK1p(sCtvF2z1OqP9@y1A`Ix6e%-#4+ z{@2t0!qfNGth5gCUOJ8VyXz@=f8Je#q>c6V)%9`RW$)_xp1gzM+BBFG*G1lSaPbMw ziu+-}7>RywrH<~JG*}+@!{Dm89|re(b~eRr8oUy>X+S@8`zYRljPHvQlgNkNahu9_ zC0v`zYXxqs1#RN7#=a;TYwU~Sd%|@dH+c6JnmnJ`7e)12;+6Y9EsHfJx))7Z(Qkb0 zmm((S(Y>bsL;KM^aO_9?Ker!WYY;1U|3R)hqL>WxVm0e0{AWzLc~9bB=GNsJuU)Vo z$@_ZDKIDJreo^!rE_0*1_a%Kex^K+<6Zw29_W&~jd(fYw`+j2f7S+J zKb=G5_qZQzuax?>`HA{Q@`m_cjqJ@LIrDksKWkHT-N)P#)n%2Z|6qJiFL)%rr^oek zY-fXajk(dYvp22__m?6cLh2ITCuBa1?h`T}Iv+y%w)2zU5Mw`ya5QG~V*4rADbZXi z*VJyFm*;At-&00r2Gv$u#X(e&1$&jDGiFevW?k>FL?*>)EXK>QdufJ7dSKn?dh*Es*;XQJmQ`L~}Ux zihfg=)X?_a$V-?8!~p>byG;WE+$-a#X9Ta^&;Hj>AV%MYvDiRbuHZK^>ci1 zzo~_c7uV+#d9j@YYmJ)|63lh(9&Dn<)A8byV4vpp5{bp0J~4^%(nhW>iIuSriQ8hI z6TgXlmhUpTv6*=5_=Waqg5C+Rb;UP<;;Zh!9Yso1N>_Xmh)^cxd>FZ%70-`t~X z4Y}@6e`GF=u3zYBCiu5UB;qk9yOdDlT3z3U+QWb~X~ zPtVW(UReXZvPOE>J7c_SoRhq|oa)tOsdwGP+SJMUwmt|KI8J!Kkx{?scQM~L`f8Ln z@a`=z=STM$vVvf<3^F;;Kf!TP5Ug^{d|T?6G1${F?cT;QzY|qE&I`g?xYaUj7F*7` z3~p^XQ{E-52*UR06jFXr8-z73FKun|79#Isx$psapk?#jr$)>97a>2?a`C@m`jzA@ zp}z-5S~lMaI>vHR-l09sa)y-4cohBCN5B_aE@LeUF0q`s9KObKdqm~U$so4FstyDhio-D`?5@?;B;Yq?|z z+|4rmJqR@>#j{|>g7_xyMu(Fuw>}P@X}NSStaZ=KhR?C`3gQ+r|481v*Wjxxx8eQY z@J^L8XM_(~E_fe)(sK6E@JE)z6XCCvf6hJ7bj#JXu=at<-EdngFFF*~x}<#sA7JHW z|A0qWE`A%HV3}bYBo4P+^(1_}<>WK)LX|%XUtqb_V)&Pq%YFxI+f_`0AF=WxVxD-$ zveY;6XUi3ggT$MbGdsiovMgmKwJsIJKdE&oWzUy%bvX|nX7zK|z$aQRdI>&L?K}ei z%5ph%Pu^fTyAyneWqBt$`GE2c_>Y!L#=*~9&TN7;=0)dn%UNR{UI07aX29xO_6xAa zxlJ9caZcpJ8t0g@S~PXY3sC2mW!6cf3aM_ zw-M5~ha-I~e;WLu<&1;jy{hvL&ycGBx$EE(E6>{lx3^r`05ji;owSqSA(nI7!DB2J zu+FDXwJiIE^f{KZ>9@@5CU4Q1@VUzLf%N5;^S*jK&<<18zeewA^t<$UUrq2sH7IVwYASjxNS85+ZqKCs3xL47kc zhL!aB42@MfeK=ENRk{Y&Sjl%kGc{Ied=DT~V^zS|%+y#FJq2s5THgw5tjhYqbF7~w zV$;QnIWSXW72XbCYIXAHSD7m;S4-YoEvFp<-)p&){+9U%%Tn^O@6oWfS1=iV+sf09f?XfG1^&*;%kJj8 z71@@9T9`eIv}yW0SmRc9HQe3GTM_?k9WU~Yn(PKEuWSz=YPpIyWKXwTb{KrLr?^u^T%3w7IDjOQKmoV&#_#&64w6QhP5VN`*YbGSo?DY^`#D`UFcRp{wmAtM}qvj zEEhAc=09$^jJC+vxvmv`IDd=k(|_`}TTXug-eozf4&GzA0^bS(%Vk~QJj=xs;c1pL z&xhw&F7FJh|5>zef%+VN4Xe*Ze}x~m`sobFf{m8joB`_`Ra6dtV&$dX7#r1=%jwUB zT~z;gc!1?H_JM^5tDK+|>b#L?1uwF4xd&gk)N+50N2NsLY@m5|j8`im^C>uWC%JY~5i!M{X71lYb zkoGFN&C1z_21Pp07jmsoq+_IVKCC_$9mMuOQ|+{YODwY&2#VWU&i)15)pF|vu*R)~ z&RslQbxw!JSxzu_6>I;L>(t`eR-QZ%KFMAntEfxyQp@Gn!oO6$3)Xs7^@er* zst`NttxoCDu&&DmN5D^8dF2DJ&Kv1>z}u`m`6m3Xs*;rWH zI-?%G!pid>fuFD}{lDZj%W3rIl6NeJHC)T3$2zTCJC-5Wb}SzS(%j;^QWmmoid_Ys_2>muI?YDK@zadO>j zWqphMO6~G z^A9U8Vl21%H}~C&9`cwm1pN8|0Vb3oct;)uV9U9y^7y=ocva`^8|9nz?V+`pp~aH zN44hMS5E$nl~;@XKlA&SlW(>1{BMx&;2yG*>;9*zEpp~|_r2%VUs(OTr?~f%;2x~% zx6ye%y%;%b+viSRZuN7Tk=OCNn3H$2@~Tgf>zdV?b)gM)ay$Nc#L_G<5|PFbFn^PF-}rt^7XJ52lSaymUV?=a-djpB3l zBA9;lfz#1`)rNVXY@XH0dEEPs`bgP2-oJM8KdSs-0jklLD*L9l-Jn2+3bJHdn>nt53-!~ zD$F|M?kkobX644tF>0q4ofAAeXQ+H6^0Pgg7peSM(Y2f7Z)qXSb)3w~M;Uy|(j;y@U z%H?K|HG1(;DVFrK*?ei@ZUZ zzEs6IW2Xsb{XNy$q|ZxT60~oXt_#Tx@GrfxXm`=cAy!p)ST3fGs&xJ@yaImG$|Y`9 ztgS9SRc~3AI8^PnT+05c>dPQFPkpE^R{s|>H?@iFRM)EfI^>;gzfGr3)qP_7)y!$8 z?(ZOPP#yYGweI1i+-mmlM(1<*C@q&Zs%9RLv5-!mtY)ng9r@cG)eAj2W8dg3M@}Cw zJ~Ljbb#BipfFHL0NV`;Tv@CI`*11mlN%exJPiEX>2^+B#3+OZaxK3M{H4uaok4BH)`I-=j8WjzizTTai0=O{DJ zx6^fB;?{0~%BR74O($_{w^Zfl!#~$L-Va}4%aZnOcZ2FY1iLtFhSymgiCepeROe6d zAJu2#){dA+AIl~t?f#-Vv{Ab^l$itCy=ysRFuY6i61R5WDHFH$y8q0Y12aEJd?aq| zbxq_q;h_E4Ao#7us=cm>Mu)K=?UivfI=T*Ktb}zPl=!q~EEt_f;7hH2iBJ2hRsJ@7 zz4jT}z5N=iBk^f}x7Eokg&$BK=D|-`9f?o-=T)aG{AbmvgWnI#r}OD$LHpe*Ujyr& zA@A%UsKNKUv|cs3XOMc;=$;{S7|ecK{LiG^8pc(mKS+JWKf_)Q2VTdsatcSo5jsh@A3_pIPvCYLmWETcA4hx7sr0b#S%n)5mK2 zE7PxPhgthol6Qh-iEXWpo!0nVyMUiKH72zhhpfLK*D)e>tksxg=fbym`t%J~$J$4% zKiLiFu!c$;((Z?!jq6yuMRi(`zoB+&;I~wt_|!6on7qQDs6PF_mbKN$mj*$HQ03II zL#E1C!t@_$NA75AO!#Bv^WZO)uL**Vf%4sOy5^k)w^gR@9lKb6N*BWTag)ZX z;|MF4KGU&D?XWlOILmTg1GzU9q^b#Epy?6^ebH^3KKI}*c=m#h38nDxlTu;VH# z=RS1M@m4FB7C0-!3sJVQ#FuQRUCVtW7Rfb-z_PYe*gIwa6t_b-%ar zLMiJ-EsM6U+h%nnR&}}_6`loijbr?|9M(Bm=AuqIz6vjcb5$n`F0^AUy8&*mWfAjE zx{ob<1n#HuPvC)?w*_YZYRcLHPq+S*9s-|WS>n)1$Bxv!lkQ{r?J?*?-;g>Q9bK2D zk9B&|%B5d*ddafv2|N8g2yW3hchWtH$@?Gco7|u8taapGc+gqD;8{*1|_>Uh2~MLeGxw!^O|ecUXA_YiVcZOjobYuUnR9|2yyG zF%tE^GyOKw`A&VHe|AY)dC4TWz{-nT!L6(u47#*aIkE4;{Xprr#iziGabq9aZNfg>A|a+`L?W*xo}(M)o{Jq%A&J5dNd`vG7*4*%M}LO1a6+@J`iP1~WEIxl*rvv2We7t^MqlAm~;U1Pj!+ zZj48Xn_S;@)BRGbweV22xdlF0_301YrYKXtZp`PBx9V2-9Lojt`EK~(t~a|~W92e7 zySe(l3*Teym!`p+RKE`1to6DI-l{tF@aw8GAKvZN>nm%&jJ_@JOP#3o>aJ~CN`1SN z-^i6tKXYIH>3Yt!!9rs=dr_eDW)w6p&!_3c{ZYgI1xnP*J9&}X`H zohW^#l=-du>1#pIL;G#%moV`%`uy92 zxm3zcEP(56xvjgvLsSRfd(eKaul6|H#;xK%$ma&ZWG%PHLMxYfvd8&qhxxXL*0=R( z@LJXH32S}j9p@fe-`3Qn2lX{J=fGZlduV-m-X!Rmh|B898Y+D$4_|t+KNl`M93E>q z{StVN%D2O(Tb6rnJ$3C%7hdDZAG2J^y4F+Y4VfQ$zGLM)4;A$MuVt~%w+v0W@{Ud~ zz240I13bXWtFYf|co2-%SoNA<}lx;7b|ziVFFz1KhaQ!K9BZ?r7>0K?YG7sIWT*TJ2Yx54xQ$s4j3_a0|$ zw&Hy61(xOgv)<LiGQCPRR2);Rx1ygANmkS(Fy5eeHbqi&q`v_=Z}_oE-C0k`apm{!Oay43#fIeyZ|H zc$xBg_*csK)%QB(ZSbA(Z(e=ryY6?Hz8h3$A3Cg;mChgPBEE$^k<*_Ii$Aot;WhBy z*tdS^wqDh9f}kJm?)qLoU9(!#fBG@+iM-@_m_4?z+|TSc(sJf|@S&EA=faHB$d2x@ zbDu$eft6?NgqaJjRG<6N|08|o3nRz>es|e+&)f+A&f_OE=Ijak>GfCnQ!x8X=}Vc^ zuOD-u=}XkRA8Vnpxd8sk>SUGk&NOqQ(fJ-OusXa?6Z9tzrcd^T+j-2jnCMruN3MI$ zifiB@Dkt{+hpT=wOiYZv*q^NS=@fp-&`j7GL9hmw^oD=h5>JTw&jnVlWIrj%eo+P#d#;Be9VXiwwrz#&lLUo40 ztc6B@EWCtwQqYlOfQ!#nFl}ITXuAQ#(Qpy`8{4niq{H{{9S@gxL)_m6X#c6IMTfOO ze5hUn?@;~0Fnd3VNk%iQb7u7>_*>QA&im-}C8twQ*`_S=)|aZBwy3XB{ZHXeo_vt% zZ$y5e%86~g_Mf&{aEr~`wgx`Z(?44EA47hM>I{I-@Z`iw{E_Er>n~L~^{c;L^_f5G ziJQ?8pYOLUYji#Hr>WOoc$4ZM3%{()npXd&^6l_W&D#R+vUxKbV2xYbM}pvhOx33^ z9gwH`lz%`4@5AD!90$~@KXc&zo*e&-pUaW6zC`-$IgETA@)JDyDJtKL{O6whmnz?d z9KRzwcUgHN3;C0t{8^O`L%ze4zpwInyyB3IJW!P^|svHgJI^xB7Bfz(0D7CwP_IJ z!uazAe1es?{tbL8zfC!P_7&p4(Z9~>x9^S4O;%p@|IUSMjvHtL0W-w^4t-I8P?>ZR&+cUlfv-gm? z@S8v|xYXv&c~ES z@NrgNlLjwR?gcMXz5)J))h{iDSE!smF!%=b;Vw{>UJkQIH*r`Q1Vf0O;q@?M(C|JOJyY&tn7LQt zpT8CE$@iKxhC`TpU4IzD+9WZo6&>alqtg|hsy@>%h8(LptZPH&sZKL|X1u=|LLD|a z`^-PaP8~XW->l#sn0-!EuI}>-dmz_-m5aS0+pJF7g)sNZM8AY_G32{A@6a5}^1SO% z#*XOlu1qkrkEf$`ETwM`)$6`|=DDHN@ptOy(4##46Kx$kY`tVWAEwSo#cQU-WxVRb?D>6rYX}V!_@zrcVN%|Vd{Uy^~jgNV~4)&{5gpJEG+kz z4q~noHacrO9bFfA$1ynQaZl%2Plt6=^5!ug9>myl>;6HzJbl_-=A4d$xtEZ%TsIWX zitP+5nBp`~Qa7L(1695&0`tU-mr1ncKx? zf_^=m{$O-=!C%_EotVpq>vcyC@`E$1esVF)I%x8)gWKD@x%AtE`)J;7aJ}kK--8cT z-U?F(cTI6HbCB2x)+1-mHM|*SA7ywue2wLBAAFl-dH4EYt$VTse%Q*BVxRsedDEKU z*DO;)aPU8Do3_~ie_&bqRRi;t>0|Y9mE~&YpN6iUj?PgsUK&PNc>ytOnCR&oVY&6= z$me@!EOpAkEVEYb+ZbopZ7ozau`ja(Px^#P^nS58%%y>)evo9&W{bDSVS-q^_YxrLMjo#^^rMj{d-6ppUyJ-A%{vTcy)b#3;j67q=OoNES|q1l zGLAZn4|i!^vBP|7eBKCew)INTmq-3Nz85|6Ev+wc9{F#zb26+kNl1OaQu*aUFe*!# z_>an0JEd?3<-u@oYm=wb-(>^(b8v4eMN*dkOM8R7dhY;MvhW zCVghqcF&HEm&z>U-^6(vGc8MBZDgKw{xsHE7CVjoRUdyE8!WeBy=y$eviRSqYogIV z*VETNmY<2v8r6ReR-dJxG(Kph5Etl;@uKRW)*O;d z5;tRWEAKo=n{tf)gr;@;9oLb{V~Vw(ych&yDwUaw#xRzQ4sA51R}h%Cz|NQktJ8%( zHAcr#m)`Icm9q~WLt9ARE@#7YmG6X4*RikwrY>e&2;Z&t8AoGu-Qjyb!I(d2UasB8 zY*d}~@D}Ce@DA1aFZ`a$>HlMhud$EMhp_hWySq6KsaB?5ht#MKJK&xk>-ASxVsHp^ zx5+E|w4<>p`n03evFl;*Ox3~vLyodK@;kyIr+V@;RNfW&`I>h%e5uE@wb&0u=USCN z1hZ!|^0DxpDt{GbY#ZOG?;*ce`TOuQDt{P$U9X|2{UJM5z5!;8nY@gtvGn15jnCL3 zm2X4dHi+K)7>iFsoz8(C>piZn?BB;u4}yc7&WYBaZY9X6yTq#7NO(yQ9PD(iRQb8c z*Rb9=`9mtd4LNI;>%(K&Z$vt;YE0&#!`x`>GiJxW>&f?!R-5CPTa3;>gJ4`a|2cUN zEAL*3jP@JvB?(i`j+$I(5krH zLpv%{_d^E+!7=L3q4Yn)dB~Zko^|q>{5b>1r>GBCqr*IG{CpZdPjzbGI;o%%50EY+diCeZ(l&AsqtYLi$^xKedKh1tuA{ZRaTB<_{qW&EE=tS`}eO=NA7cImSO z`LQZ5hl%yCoQ|ub*rbj|PQ51Hq0HEyc$f7db20oowaMH&k$J@EQBJVI&O66JCiDux54xQBi{}ayQ{S>lSWzleQD=O zP0EbxNt0El8D_3C`txDpVt4_3SrFXd?A)w*iNU1bD1QLoXSrW*_+iy=f~otBF7H28 zhdE}_hsu}0dz9%TlfG5n!5mEcN*ndhf(wfw>mrQ=S{idgVuLI9<22pFdDvF^=aSc=lBGZ%lo>`JK%Wa zTHgW0xtTf5=+MU|CxYM()t}s2^{HMj{GwgNXCg+dcVu zl`lrFbJw8j;3w23?J!l_ebB4$n<|%b|IMeyoS*yD4ziX~mE&hixt4W5Oy4#7_}Rjk zb$+(6Mw_@1pO(?q&fsD2cu%ft^x$UXvs8yUyX81##(2v~YJU#Q9B#^De7F2O-k-E^ zoh5yk-+Y1=e0o6q7e61?vUb25RW5$AKZ*R@sycg-zoT}x!|!|YPgMRX^1YUaB!gg@ z&f7!Uz!_>EKc~^I#s~bIR?FYe(Rfa)*Sy`3vwj&leoh-<%gPg;pmO}2#(e7hoOZM) z*D=CxJHa%@h_NI3I!5xk!oSqAh}ks8h{R{e4e(8>FMi$??+2!BP@O*@|5Ff_IiI(v zj`*gr%4>jksGRnn#-1tilQ^0^#xUgcAL#>mlr=ri+8@fenO^M4+bYvnr*~JK&Tt=3 z&NwnQ*CB6IUJp;<8=>mwbjFck{G3iq{^;aasLi3suU9$onSPVnrykR}ev$YL{S|z_ z>I{beq}&W|jmP!$H&tGPe5Y~?`~}}@)p8Hhxnd}D^GUuU@+yNNf+gS>@;+#yt6y z^Z9A(!-2z*vu+tV?R(gt)z29)bvN?9@GhO-0{D|yA2sU_|IT1s7=7wAqdfL)Mh`9P z*T{8T97vfnXlrxr&;(CXUINcmz6z$Tjm`@Ag7~^@#?@-`E#x<;oHA#yCbp-J`3vB? zRZhKTJQnxc8SER(Z=gMqZ&s#`GqC0Q_6*&(4`ZG?JY8)rhqZkVqKw1KJb8`v=b&2T z-IOQ5{gv;54^;cK=ivw2yaieCB-Qy8K3sL?z(=Z14XoF3{Pq$YeunB0r^C-v7T=f? zjsL{z@Ly@(23Yq$!>iyst&TiAflWP3Cac&`AD*>N5rp|Ep#B{pIjo zD&G$8i+QGw{o$wa+cJ9t@rQ3E1~aSF=2EzaC)crGAUX%yI1IlO9-}%NU|mNF?uT_f z9ljc#tvdKJbD`xVv6^{-$``}LMSMt7-*~hVa+)t4h5<1zbf(J!Y>kC^Q7 z;g(B&g`7SqI)+)hg>z`@BTn@Abjtz#^N2G&USheNYo8;Qdc53n;rYlf_jrZn#4_Zp z`%;#$9PXKxAWfNngItdbm9vo7#@~nt*uR-?JJ7xX<3D1?zu~dSM|%47LnE(4&UlV^ zvZv45Y~-i}Cn%S~r+UnoH9GYD;2e*CrYz-Nso#aDfv<_b5y7`%?e`)?&iFlnI0Ryc zej71;%P@5cHtRPTq>l9A&7$9j|Ng4H2L8M9eenCr#31-UneiAf2c9Z<<@hev3Ay$$ zHqi;QtOYNNjxg(>Va8g>^`QAJiBn;- zem_B&vHB;`uZL%OJVzN>NLv`4?eNLUJK=Mc(GBTyMrS_EKGX1en7P#OM))d^S13P& z{3flJ_{@A_^hHj48Qub8%kWnCe&ua2?PcV`e^3@bpZ07r{*BHs9N z-%}R<|E(-G_bQ8>eabT!OZaWYj~w#@YBjm;paV_mz9|#<+%rw_c55b7?xQ5OSuvLP+4q#=JA)x z^N@cRb6P@q1Y||EdOnH$%S9$uBZR8E;Gp9w&oMu?;FkT}5t+M#=c>G-s z`9|<>#2>M<$>Yt+V&~5u|5bS{a^^IXSC~1?u*8$`6Y*~4J;-SzBNwKP4DVy_MOzrg zjda?=@L;&q<8o#EOt0~{P8mP>F0{=nOnXK4M=BFbz7cKZ_?bRUc`kgo@=|z?r^7j8 zhd!Bpvhri_Y06vR^OYOni+ucBv}gJnW$|sT@=lntjSph~QRP`M z^O%uKyLbj&i=vJ z5w27w{uv!S?yQXe@|_gtL&h*=$xEKd&LPTTXQIbbl*P``@%K_Pj#KW4e7?sElo>Y} zXM22}@=D}C_xKmen~-zvw-S>&c$M-T_;%$D@SVyV;YXC4;omFcOU6^mQr5G|jL{6* z#@JsA(}xU;&9{|%!tW}JP1?)o2!Ep70)OH0*UC%zode&EKIQVA@W{S==f%jepINRv z7VfG{|IFl^(Gfee(OnV;j?4ySWSO*)kqaNHj4YEjGIHVR%3>e8k)8R}_HR`dKkrbcpJe_{zn3C%=DoF2mwI@k$F#SR4?_N;$IN?1P8(&u z<}vf0k*`O-)8k#r+mL^$JQw~(c@fX9F^)`LY@kc$6}+&l>MBW6J2SK+YT(mCGDxSnQL>u-K=)49|j>DD!U?ejB;i zxk{Nnl||af2g9sQ_1b^3)_FR_&gj&mLp>vYRGB(uv1c%H;ir|w=3nA()MWilS^U}V z@eXBt%=*CNkCitd|J>uRlsEEynOx-nE>y08%RH`9?uwkbZjsbcn7PjIVz`&`Qn;V; zV{n5qS+X0ItKk-9`bPE)WwA3yc`eL2V_)nnQm%o~GjeQaFZFntax-$qj?ocj>=>4^ zu2Uvo_KnK4XZEcgGp3Bb`0%i@l#3rmJ{aDtJQjXQS?q6BUJh?l7CXCwV2$>T?A^-5 zAp0|qzf|6YoV}dUhjS9jTi`s8i!6)T9NJ6t4bxtROOexF5z}6Vhasm9!gA!0Hhct3 zeIjmBebJfW@hoMrKhNX&%3^=1Wn+Jtve>6xBKx$9u<`i@k8f5M`^3)Z2(MEX`>Z?0 z&Rm$WW0-Psp7Zzx<@LxJM@C0t$T%`KrCvK#z8v1AyaN8j(|2uzu6%#c*b#PZ^e=Ah zWT;#?M|lt2N_j7=Z4~T-+o@dGwGsZvx08(hx$r<`VkzHCGID&&9j{Eia%U>Hz(*+) zXL+Z>=nJ2yJPSTgxgKWSF*+i@gm=%hKjdEH>0GZYcJB7%_bE%ck9h3bMQlE=-wu*` zy{z09-s&-9jh;7bae=ti0hKk5ra&$9X(KS<0PlnPP)HY(+Lt^7vHMr(SuB zJzk ze+n~>jQ$?@7>^l8MlSv^UJOgU&Q+#8<-2S~F21?8lX@{mjJyWEO}PcWi|=u0AC_;l zMLMiIhG~n!r#yD;MOzdyrx_h##*SgyqVRQ(|Dh~pG0r3VpD9b;uRV6{g`FbiH)m7+ zzKCJ$$T!+^ zAN$1vJszqo_M4Q&ezT{;7>V-I7KTOt6i@$jPiL{mOFVtX#X{{r#aAoS?#0Y$MlQ^p zW_TWapQrzjvXsjhF*?FeDA&V`kx!g`<}{-ta>h$!lexg~Smf_2)7OeW@c3h8`n-JS z?hLhAl2o3{@3J`_7bq`BP92QCFk{5xlLS@EZ$+>Z?O3wG>7b#0wj1gl~m@*7YS*w+)U&-yt^uv<7 zJ*MrVx;(BdcK)a=c4!x)vjAr77{}$x%46m$BNzLx@w}I|Y3UovQm=PBeouKh z@-IF8Zx9P{%EOT7$1!hR?8#dzV^h9qXna@zGhZ2A2>17x`O3%_A!lBitUkA9 zEEuLPtywQ3X1y>h`losN*fnzciTpjCh?$EF*CYSA=kqT-`LC44CUcR|p9SBpOq;j< zt;hE&&q4kq?=(7}pHUVcUhw!8Wr^G0Jbqod0Xgkr>_HHndA5r(FzRj!t`zJ1Vb0-reKg%6B3^z_U5TlOLqK0Ug@T*cYbl z3~z#`csyPC@5qnzY#!~&k5k@_4()5~2-CiX_rSDo#I&z)n2DVBjp|POMsnKMa5XyD zdwi2}J#yOjI*oH1+Sf4szs>JFeq4D8@{Jx-Ptlj`ZD{L=UsWzgPFowf@IRDm;GG`t zQl5qUYs;7n+I**sKV|72XDbtvvLcU5EsH;8%!kgOGUh|WoG)WNiny0@Gjd{KnbW+A(bn%1dF!%azi;!i*QgQkQEzzCl^+-|F!l%4?C| znGGn4*kjDoqHy|J7F>|2FOIuXXMiEa{o`;mM;UH{Ywh;{#hY8yWpw$RG8X_7b_oyy|I>S!;|u3;7n0 zX?r6lepPRJ{I>EiL-8SF=E=+FmbD<6GYrz zc@y%^9(PyXjJ)1s+S}yah5TTTM=9?{KEdP3mXntwpW!k6L+m71AwS+@)+{3zKTr4g zOyzaRFYx$c<;Rd;=J6HE#J(C^#%4LZR=Ezo+vEF`$08>dq8|uvR$dAJIsWES^>$BZ zho|$Y@)Gp5y#mSmjlR2wS@{O5vCsLod6vUcnECAVcWdB$zm*+#Xeu;znv|0#CBWyS;WNL@HXUMd;Fbc z`KFnClho*ty&Yr0FfnOY;c;8#VaSQO(Gez&hBv}}lqstnZDHhl;E~E=e~dC?yd5z& zI_qH8m&ndB%G;6C|06qRDT{CCD$j>6^7s_-%FEyzJ!XD0I#(gTS6S>o zs4Vtb-`yJ2?g>x+w6fTLUUej%v{zIv?PXZXeO-0R;kP{bKb6G?<~LIoF>dz-_ok&y zt6|#CFut`+WzZ$i$RW%OTy z$5{@kdwb?FksF?-OkLW~@_3H&D&+G#CcY-`dgP2L!%`Q{g=Q?Ha zfqmK(R~OpRa2|5@X%W+o!ih!5U-a~uyNpg5^4C0m!_(ib@|Ea(s!YGFNmCvRXDL(H znnLB5VCF7ke=AH|2+KPYHME6ck@r#^$=gr)dYJY$dBqNKiR?644p$&=R$dDqru-Ou zgz^TMdCZh0e6q6GJi}wgSL6>dH@piS)(*pa;2SKFZ`v)->CjFUYTO- z82c+=#*X0~FmqtU%z=g}tG2>p=0K4rx+1SrZiGo2Iqe|d;T4u|8`d7EjGwh5Ez7q@ zYR4#xoe9dsq?U1H$`ya+SPq2eDpQYI*LJhu(^UU#_F8n2IRbh zmLYy})UNd8tCZQZ)ZU>ib-YWNcCWqPYhnzXk*c7H6g~QqKIFD&ZBcFqub4H(b<8S0yUIw#&+vj{{tVKHKDiiw-|BJTw zfsg7c6Tk0FCSmfAOd#5{P3=(9Hb4p~q%c6z4kc{^O>0_$uoWeNga#WRgnQ5b`fM%)Dph)bUmPU;L$# zZyJ2im&>y{SCK|^7aYyI>aJ^*x|BEv9Jsz2n3#Th@gQ8ZX7yD94c}f<4dp3gw;1=Q@0w@-gI$7qe#*X5A5%@il&l!}ZF=$fo*!w)KNN4~+~N0fIVr;UsqVcJMIOudcY;c%a_lbB@wAaiEBrO(-EhCd z2b7N>|AE6lRQ?t6pE&%g@^R#^Im|q1@;ZV1_YTvhBA2}`)e>+-c`@>AhgsK*elzk* z9cFGc@;2lcN^yzL5$ajqv1{bC5x*Pga|L{h@==&EWpoB$@)q{Qrnag44`}gnUmiLP z->b~{E!H*-$KkcUJX{XbrhgPW9L1d~Z-;x7ABQ*jEdNhkyjfX%+p4?^{W$a%w zRaxxY`V{-NKIsG3uy&ZV!pv!gJ7D^RVX;G;;R7&x0C|sr9M`Z1Fq{LkrlgoP#c(z9 z&5nMr@>t~bXQLy`7)a@VUbzrC{n^N8!26UF@P0@Cdt6&ufBsE5g3gZ}{;6^l`AJ8g zwlHa_?`!_#Fyq8?HO@Db&`$X|8%7s`_F@0B;gtOcfwAB5iwxP-bl@@+gumE|zw z!pQMW-objcv{4N_UbzmQbdgSycqc1#LnKmk!>+o&LZO9iXi~V;hi+$#tpK9MI zxz~~3r!4l@2G`~#v|TD++Rm`#OWPSc^r@0Z965Dibi{{`2G`~#pH_K0^3N#u!OTBK zU*!Lyyczzc!{2uFf9U8lUQF6e=>Nvif5Xvd-!;pY_ndMm?`%yE)(d%;Yo+Q;c&jqy zns9}~a~8D%NsmmOxj7#-So!pq81S3gj0hJO^?dz|pg z;61bxsQ+rQFFyRv;r~$V+a!|KpDQab@zH$l76S(oZI`b{NL5iTi?ku=38_T5E^7%P?bo;$er6C`($}BBlR^ zqeEMy(*7~fmv`@4{Ylw@&ZJ8mzTDAgUP|dtb981oe50e!crg03=_KYL>%*jXI=obw zdY*K@qt9L_rB9uw_#YkpPdNIYa&&e&yvx!5x}*Psqhsrtx}9X}S^Rm0cS33XPx`rX z6gl;5}U8c+$&hMxO`qZ=0mwY)>+^sD6el&QWaOpoO$B+c^BnqTMxS(`5tBQ=UZ^-O>M5@LuB5*Oc=}`(FVsBjMC)cf27N6he@I%Vyw30)ACl{P|t*j^*qAM_K&;v%_yHSMfgOh;lVd z8+A(EHp9$6h6zq){xM9x^8RJRlw~q=kzuhjLm3|?&sG*Yw+HWPo=m@gNbHYC{tk!l zQLabc=rHMxelPL|^!>x)&-;}N;D;UlfU@{WnujGX;cd#)^W?`J{wuu9A+L9eYr2h@9+kEMwz;w zJQ(nlG-cXiO0L8C%Jji0ai2ZPKBZWhGETvk@r^2)LLahzPO0!&e3-&GO6k-(a%>qt zCErHnBusl5`9^q6aF0&j4gCRW3yvw>%3}W!hd-!Hznj8bXYV~uVXiZ2MgB=;$#=KD zpLqwoNBJfAUzCr+-%zIRr@X9O1hc35koY5Zex&zl#kXIoJPFe-MhD-gFu$dk`OWYq ztyJhWODBJ2&FD9+XyOqUH+Rn&} zVA{@bJIuWI37eL&W?1r~?NYo~`F7;AoskPOt_;_}%z-IptQn?nmK|}Jwm0%RbO$CSlB z`-)FWdkH_OEcR(TBNzU>ve>7Mj9l!0+tGR1;U75q1CIW2N9UBorvrU?ce%AcH7C%S z%KpLnGnF~QF#b%P;OJlH=#)E5KS=2_UOuh;b1LJ-FnxF`<0ZxapiDbYt#_C?(CEaG zzgL-hnEF0Phx#`fFeM84K3_wDAsKtBn0=^c$li z%=L?5vCrIPSnSVpbZQ-DJf!rQuRf#gHSImh1*B!ZGIHVd%J?Y16K&+e-OBWTd8d5J z4)c{^$~TSvpJMvIVX;ZOq?mRwEH?ky;jbx+{qF_usGs(4%2HQ9cKD~t)Y-IOIQ(nn zV&s2PmiqatGWPk6Y5$$}!WqigFCXpj7-j62U*<4t(9=?f*q8U?8zxv@?&!>R_$EjH zE`1-q=rcw>D|Q$!1=^?%gm!<@j?0?PBD@w2NW*#WyRrA!qCux$qsz_;~|m zHgaLo8x}v=1EiQSWq3RCRSq+zjQkk#c83{LMm~UigTs#~Q)f4P*kQ(+(URAyee zVVAO$>x;qrPH))n==3`}F9q*AmETSAA|-nNHZqg$o`1iNU+Lr%zU998JH$Vb=ODNPjCwKG)&fl$(*?>G0jk^yTS{Ba>FR zUYYus&Nwo1VaAbR>VNurhaXg?pHA;~c%$+uJ`I1uVdg-Q%k$^czo_y? z_$$id|2LGy&Nr3M!2jmx{D-oXg|;wxwZX3`_rd=a+!LP8{AP6ekq;_UM*01QFG_uK z%(z6E_L;#vX5_+GDHp+|4wos@|7Xl_nEB15?MBWTlw!t_;Z4ZtABM%|66FqO`jHL7*ar9YtjJyP$Pb%Z@jOQHwg0k58slH*(=Cm6yZU zILz2FI@F*1MulOqpH!B#waU~(qE2}!j4h)ta>jz;D)_w)zt7QsRDT=7L+3-vl$YNq z_kS}&c)POr@RY;PC`)-i@9>wD#ZUVGm!y7#zo{(cebHgo9it=VJ*F&q4Jb?6Q_51V z)5?@re)qzpMLu(sGUb)uz%X**%N+d)!M*F5*C|uRndJ`ChrX_bf2ZX)W4AnQ~!pG;Uf+oRo;R8=MMi$nLKCy&f))2{v2|~h_NYr zR(UtyagA24hQ}!P!j~$0@HNWxyIG6{V~4zE&C=ht5FOU{=e3PyF)yW3Kd@G|9EX=Muy2(eyhVUKF_9IQgYhjTUy@PH!ByRLt7ZR@EywZvDu3pCO@N7f}FNU@e1WK zUMxv{@QxfQv# zqttVywxhAH?HCrDwjD+PK|gJnI;`werrs)Pd$Awh15;+hhv1L+EYIUrGOk3PMmtu1 zQn?O(LRsqV^FGUSt(9L=mO9aP4DEom9Yddk5BNI9&x6Y1+hJw#=ZMcH-($*>uWeJw z_mnU9mcXZ#>-oR=sL$atI7hi0rteBwylpV!PFQ@tk$KXTy$EKWG)&vwXxk3oZq)G@ z?uDzIwAISR$ZM4;?~V9s>{H$w-|4gT$s3m{H@+{pc97q#G5+)+ z|Df_7_@j=_r&WFw`Dc_*z|50oy`#t;znOTslwFRP|GyiCDSyn$eTAvOk$ z?KK(vRc$fdbaz?&KzpoMbKL7uDjl5sKPZ9Y+eLsNk zVSR^y@KJrImhgank05*^xE~%mrSBLN`5FD~8<=G|_3pB8G`Pzr*$V-g1#Q>%AA@)?h5l z9Q}E%+i+o`<~@O{%y%} zJop_Sl6vXLWgV2~v=>?qncEF-gt1eocI4XLFzLLwGU?>Lu#uBazB4e4FY=v` z;R3i!8GCY{%gC|kk+7*xXO&4SYtvoQZ>!*lGInI0GV&TYN4XA; zDKCNX)#%j2aeuEOdCLDB-i=MUE|B%hF!5o0GEBUzWrm5DYX-x_%erQmc-fa5Mix#g zBMalJk@G3*onb!1_-dF>S^Et08OCqJe9Ag#n9nd}Fx(8+E4RRn%589~?z_Zi!i%J? z#OHQp@wr1;eC}2*hc_yV|C^M>|INyjN!CzfQ+(K_EIw>kCjambW$|a1?)Sup-O7^h z9%Zq)S6S+3pK=YnU%3`OsC&i5@FC@T_^>i{5I&+Tz8zH--;OC$K3R+3C3Uh1KCavg zpHQY8;giagL)K`c-v^&o-s!K=4PvJVj_BSs4o8)X;T+`>IHp_*7bus(g~}B$wv5dr zj4i{}Ft!ZWz}PZe3uDW09h}g;F?pt8>t6AVJkzjcm^{;}l*uy%Avyg9uz*=c{ z@{L55DQ_f4ISI#;%Bw8_*tVYe%2}zAE{F&KC)Pu_y}b%Hi?hmcboVShw|zSuyPDOqFewURW5{&DHp*5%5nI(av6L=xg0*JoPf_bd{()F>jO_Y2}hKBVf--f z2H6GUhv9x0KMdnbI(`^F4VMJh$mylZ#HZua`?S5%@yT#8a`Lm+(dkvnqF=2XhijBY zf3b1}yhOPUu2Bp4Cw*lqt z@NwlG@Cjx7O+Tr;6F#F%{^@6xPswdC<%e3Y3v$#Fdd{ z6e}0PCCbP$N|pJ{NGO-V70TssQkl<;D&>uEt=>N&T}GWU=`t28SHnw`_ruMOev6~u z>gcyAVwyhHf_+^2jP-l=>F-lcpR z-tDtoKV|Gwx!A$3$xG}IHY|1s8yf`J04LM`=l}QLio6H5qv_q z1U{*pfUzt3vS-OStBlSl@-Xr;IHFt*N0muCDo42jjwx5c_+ir4!1!Uf4#p3|jc{DK z876NdZ->b{#ih!dk>iJv_rmyLcn6$R7W?FFO%r%0=)-{d|0^x zKBAn2k1AKg$CPW}0p-Q;apnE+3FVV8=SQ>;k2<4rv2#`#J5f&=JJE=8D@=r>^(cEZ zN4Xs?RHnSqB4zT8#+Auae!tJ=8>P%Crp$($(Mc$8gDZRvlU+2a%xAPpxe=~a{RmvA zO#V^)Ha5vWxQ$7NBJ31R3olVNe(Alhf65g(S6yD+J z^f@{^eKzIV<8xXW`uHS1q?N<_loRlN}$4zs);x7sL2%m~ux4lg7wBY0ly~u)bg@7`v%t|Wbo7gqd(kgZrW~22%J`T` z`NfA&F--XlSHMZVXC8&Clyl%}W%A6dQ6|sKT4nN)-xGXF`YNB9^`8G*iejfx8Q(LT zmE&-WasqBwCjZP1pGWIezDq}B`vOObtiT!QL;^%f{$!mwQ_}r%)hj%Jh!FwFu zt1S8MQXRqz>Q z@%gNBA-{7+GLsgatcWsxW?|RJ@l$@6&~PJ68pHURRiuocS#f3j%qmts4wnVrYh;xx z6ED9}_^kMhOn#%#FtV(qGP0~HWj?cN^*fPLxK6nmUaVXLFHuHUe!I{<*P7L$OuDRA zhuf5~k=5%Yi?fmYZ zr#jfojwtVjqsn{W9A$jZjw$1BHhCEP_?um*d=M^DJ_M7u(K!qkD^rf_GW`y#4lY-w zyx9rmMz}(`8BQvnf~%Czz_rTa8@9~zwEN-3%Hk(>ja+=IR~FyM!^p)q@-QsEwJ0Bj zTa}N&ZOQ|1w|?&ygEuM{z?&T2tXzbAyTdz_JCOG&V=sHBGB&dJc>Xh=Vt=o)*r%N4 zSy18q%3}YZ!<5bFEJ1$Q;UmiR$OrWML9u^aS!|wg_@uJfKjZLOW$fp84o8%+pM%{m z>l~GXUBi6l6grGuBj+=x#NkrqV&rAY#OIVNOTJ0{9+P}>s+7fkwKDnS)F_MnTID!g zr!4mI^(*3M1>C5N?VM(1?B%p5_rmSU+u;u7op86q8ec z%Hn6Aava94(J6-aDD#=KS9w3YPq`l^Z1m5-2Yr_LD(8^0_;6TR@;#zl2M_3Xz9sN+ zn_Ug}f$ta25ub zVn4S?8JoFrWwBYTTn*#5(HHxr%3{Avc`-~LMrR339){~-@-W;8lZWAEm^=)(z~o`L z6($eEZ7_DfCFRAJTC|!as>HdFGO9s!~t~}f_VP9b&-mqS4t{egua{z2{cXxg^tT7k{^jim-s6+saX_`$m5>ZV&%okk}q+qt-MsZ8+lpqd}9nh)`$-Av4ofU9l%(Hav$=feus#f{MPFI zqTdeVtN9L5USt2Z&N-2K{=qLw+=Pwljtw_I(ktf#5mM*zw@~2C);t zGoP`OK8KRnIpujfto_r<)yU5T&w|Fz2ESLEkAI(5{rpJqo`L+R=k-~6j?bYAej_#J zrT(u!zd*SZd7<9R!d`xn&yqYp9y~{yUmW}&eSV4Fn-U$;?-XU~AfLK;+U8px{C|3W zLhliYK7N?{MU*2y89aBIUlshHcs^w|_j5$QMp^W0_1=rf>y**WU#$07M7~7%09>#4 zMnvAId=hTyaKBz7i2Q&uWz9dR*8(Cxq+AXk4xXpYKcc)1`BA+V5dCAyW$=K% zM?&o7ANM(py3aomJae0WQn?2Cso?qB{L{*$%Ri%g8?kd%8GpwRw$J5`i6}>rbJ}Ng z$K)vUIflBh&+CpUP(~)d1^j*OxAI%ShLMN21pBD)pBaa$la?3km(uuO47*2?`|NME zI&*@(P#XV-a+#HXHQ4i{eK*+Wq`evJZ6f~=>}Mjh*DOsN`BAWMiTro4S4ro8;%-u% zbpA)f?n%-=9_&NXzaH#8(ti@{H{`qK`I&Lqs|5Ufhd#IJ!(ICQ?TwwHwJ5c^iZ(AM}MyCIBgsKW3Y~Ajt|!E%=?1%I`iRR zjn4d7ur6o*B3O$v{}QafSrdXaH*0;c&Sp_R<~bJf%}xu})9gvX8k+rRux@65CRi)8 ze;llj+4yYUlZG9+kJO`OmwQBZ?aSeRi|l%r^MhcG8+}=@u8scJU@go0T(ExSz3i-6 z?{e0u?>KAIK(HR=^QG@6)d!iwAGf?BSZneh3f7nWPdaPLSDbZ({`RD%9g`WX7h`S< z)`&6qW7Y!7KIX&0S}@_T9C>vxr*W?#&|e(PZ(gG#Zw}@< zZ?hw(-t4^R?RDh)f;rGT;K&aK^PzXjk+T+z(=vvN0(mGN%#-YIQhtV#y!+Ma*EsT8 zw&Pa5#F0~L-lz|X#5-3jk^%v`;|byC0M`G9RKC{*amBVx1+x&Sl4)dHL!#K zjaJ|BKMnuQwW`Ox!n1*Xgs{0*2T!T!MYjQ>Bx5lYiPt7zY)f-y>5-1aP&_GYioKmkf-Ma>nzVMru+Cw7 zQR>Lcf;By(+L1Gde@Ol3nYWZb8T2c8Hbah#gO2=Au<31* zI`Xz)Z!oIck+V+O_agGlQpz8BX36duM)f)Jox%QL)GRS+#+FR$Z`1%5wb7!cV(j%5wb7!cV(*%5wTo z7X8P3H;SKGPXEcG|CsM9Meg(;dG^43_b2i_jz4>Yy;fGgBR>%AyRrrx`SD;6mhJQ_ z`QHCq+TXIB_R5Y2d$a6hU?;mO*r#PX^^;Bge8<{x`bjqZaA>)O`( zpUsxqn%diVm2*Q|gEx8Ex^>>C(pcHZE;#Xj|UgxOU}xo0el>Xzcpc zEo+wFmx^}Mt!ry&Yg*piwEVu6jZ;0}BKB6US-NQL%C@EjP0QQXtR+8_#E)3eyuPh* z%>%11%w`?BO-*apu30-=T#(WA!}++bsqNn7tJXcZdiij%Z7Wwbty$mJ+_1W_rD=%y zyPFys-3+VVQMGj5>XmJiTN~E4O};+i#`(3iY7L$)U){F0#pdUfZ*EId!`cPZ%lcvJ zdDWWrtJ`d%q1C){_5JHtu6^)g(QEPZVsSKdQ^P8%X!XTanwsvrX!6#TtJk-h2EM3@ zw6rNW&D7f3bU~HXta)Ie=_ggvjoeC;3MIBy`k0BFyQXnCg#}G*Z(p&3h8!j_aktIA zhqdX%Y#c7 zHnYafT|@6!({eHE!*w}oXaP;+`m%H>=H{(#V@#}XZL7Yp^J;ElZr*tf;`dX3bgp@C z)7s@NYt}V2E?vHABwFiCZy0VEnUUVm*hqz(ADwdK{`F1k+HUz9WBA^twzie4@4aA{ ztA*Q!t5kpDn73};>UB+P+lK9W3+R*=)V5O#7v$%}-79^dscr3pZr!Ut^ZYS6Ow6K& zm2GpSZs$tf4x?~))9_t+&U)s@1!lkwlgh;2yne+B46j+eV&%QV=-l08s#y&UooU4L zxecqAH?_=ZX_+JA*)`#pd#(7^;K!M{OA=A{b5}LqEOY(v9UBEReus~(ZCHO{JzP); zPQB}-e4%%K2Q<^su-!}s?!wj!<{8KIvi0k1Ypz`*>z=N2W<)rV7c6DLU>U|OnF5(- z8!v9!jdg6BakJdCiNC6pU&OjDrRT@4T(@q0)ABW|RxtsbA49AC-ToqzL)FT4_sy$v z(@J|w%$#NGOc$wLyK>EN@k8bQP?VIZwLMtIh8n$f&Dxt647Dng+~3Mo;)muchIJ%f z(4n2U3$kKT@CVwQwp&&=4x3aa4o7FG37yDIUmG^Pt1vXNyJ!uY*j2b7anQ+!PaDL$ zNtd(MEo)dlWF4W|mYTlruHfg7ts$f5qLHcDa##(s3tMAW@!{fSe6UUr7sbLL9v>X$FmZQl)Ur8;$E7K-6=TEBWNgOv54 zsnIMpBUT*Fm~qRPxoGTpPG7`X>NK_3o^MD-%^k8C9ky?o7}ut5-P_m^uW!}uyqJ(B zWBuB-O{?36pJMEaF>m#X3#J#@W4n2XJqE;_^=)hBt$uGq%Sz^LwqE9nMW^p&vNjc8 zPup-6qcZk1OPAxr5LwI0byyG7Oy^l?+;D{JSFL&w1It<%FM+siRqM*eGFS2di#@v* zmfiI%^`a@+E?d81@{DqRLc&~HsXzY364Av|r(S>2n5mT9U6@Q;bJf-&I|(EE~lZnfDEdlf!0{Da`nn}%@qHH;e?Clz>JcK+a(D^1z|Io3^t887FFo7$U}ua`DEPr8Dw02hGf64S9k z2^(6>zE(!b(1>6<8yb_Ec7{ec^W4y=V3NBaW_{yu*=vV7-!Yn`ZADAN`K4PamkN|b zrk<5eT(dYiv^1=1qfQ@aSSP++5OralNCLA>_HLX~?W>qtD z^?BLLm92P2J)S4mjVfJa?fL#vF#o2CQwEtTmg+x@nuKCmmA6B?@-OBe_FPZ(8 z`kis|j2ouTQ2o`lYt}Ih$z)^lqiybO5&<)q3YuCc&zP1N8fHRS=j@GTsINS4;&o%G z7QGa1GMC2ECrskTweMZZ(4oSO7c#NQ&85bsW$W)<>QA^nH!Neyc<*`96zIHg!`cQe z4eiCYpKKUW%gWVMi62cT^(M>am^J7;TPxN!tZL$}-2aP%_iK7`uTK8SUXF7ABlTDB z<9Xwd2&ZYx#q_QvUT%Q@J-zGE8IrF&tD8C^N~L@XCrvoCf_uC2EPY7w5xJZ>oNwoJ z?1csh*KpcH^yHY&DV*da#l7|Xtx$VX2iD$7iRILK;d?|sjt_HKdm9M3dffXo<@dFM zG&_dq@g3Z-dORm{p1mYtzF$fmHs3EH5l)(z(7j@xyiL7i!?qkhgdP9nS$uCBr#-B_ z?;~*S9U@$<_Hs2&>iG|xu06?DY}&)x)_U6Klf012;k8;|> z+T&TI^X%;;Ox>9BzD482zooEaFTI=aF!dL@N7E$vB*jYkwB_abj+B2L63eOmG<_31 zoV`yB(d)g4p7aeVQ<78iUCdvbFVE?u@*UDo)3*~hT)sp4>B?5eUXf$(N3dItKElJ< zJFIDve2RZkUh5yvrKJ4(ABp9(^|A{d&YtuSx4eCXt-ZL$(QaYszplMKgom*gwtYKE zy!f||zt-MWu;eB7$|RQ4`X_qB*_(vi^-s!g?GM-aI7 zHlmkMdlNNI?EN$B*c;VGxQf#r*4`cjj=lT#6SnnNs&QiP-(lCDv_}i4J*>S$2wZzd z2=7(@CTpD7llpS(MT-g7aN5J#`z->;UdtxJ)oQOyO1-tfI2`4%2q4v_`r+ z!-Q>lr)r$oyBc=w?IBFQsl(cfBXRAWAZ+bP`$?SGo5QDT?+oGL?9ta;d#ebh>`m7= zvDXMY_A--%hqEX1spH=&d`sC&Xq?#VhFyD`2-kDkLu_!Qy`Mj>J!ykplFIntxik|e z_C5`}_M~2xaN5J#`y>L_UO(YFwP))>>dNKalHAw8q zdhYm_wU0hIoV|nSIsUDt454PVm()11C+oRmPyUb7+r()P>)-1L9D8dH5Vro^tZ~?j zjDlTzdkITf?4kA|VFZr7R??>Ct168Xd)L9PJthD&K6MKtc z$KGh^S35cFVeQGh>)MlYY*c$E?KQ{L4 z+9LLbtmpE7Xi|>UVeK78;@TS^Z0$+=Nu1dGA3ojk?j}53{hib_Nj^!jwuryB{&-f^ z+Dn%`tz%FAFUl+7w1@h~b6e;6x3-Zmbz{m~r*Zg~J^^;^QHJ5#BfVJDB>5Eow(%F4 zvG)#G@)djYB$iY62lBsBUN@&bM2|z>Q)kj7C4@c3d8)k9hpoNk63c1r9fV6c?P2Y` z8-Z}rM1eTu(KxZU19t4m|B1-|gryE^ z@8d{Zd!j?#nEJE6i@mQSckIdkL&!XyI;=g}N4WO-30r&h8YlLC2D|pe-)2sGSbIM~ z;Mi-661Mi1X&m-4(qPBlSV_~*X%B1f90J##jEO=mZ==SEy>YN>?*Kt5vpv*aMiBzn zo|J)pZ0c`?#)-WI?AR+fOjz2>9@gGJAaL~FQcC!QRpQg?k;i%Y?k8NK`O3An=t;gq z=E=7fAaCKchqX6ko@_gVf~}YPU~6wP?D+TAZoU!>DsFzxE+~2M2{mw`m=D76P5Lw z_(L6rV!~wRaYF{JS*DUO@VSJ*>SyArMZQ zh|mK|2-3HVf9o}l@{YO$7JFf%=M^30v&LuhSM7}&L&&lB{sV-Mt3Bx>5-0Yg?j8TG zC?+grwuk6(jGDq9;Up(1I(G4QuiASMw)SKWcI>^4U>f}(by$0MA#v<=Qr-~tY|3l* zkm8^8Q>VP+#8#Zs9@d`iV@VScdWiN-T}O4o)<5aHj(_9Y2#c;gti2B+aQu7d1mSx1 z&(6u>A9Zk^J=#0ekIWv{-WL%#_PVOk>sEU`8YlLC2s{3b-%pUbNgdYS_mMdEx(^Z- zo3hW|pmAdFB<$F`nm#(*b?vCvG)TbC5wriRspQPyN z;IFl3ukpp+6B5g*?Q!i!IL>Jg>)$63xc+S-Z0*@SuGo74xodAHLFy%SSbJYX;@aCr z*w)`xjT3u6h8=q)1B6RC?P2ZxI|A3`g=_^LXk|dztd-*n3!XByZ_2wr<7Vb%b4e#e|P?+QZtD{_ENkJ?r1& z8YlK@VAtMR!lG*rYwtD$uDyD~*1u0_oY-3hJN72U35!j8SbNO~Tzf5qt$%XuE^%T{ z#-3xZw1{w=(;n8|Mg*?CU4*TFPimaldk%K(k>{}fJ*{bye3Ihfz5KQQeFnDvy(qDq zIzFyTz}1}gu>O4uf$QHX!q%S6OZ@u{a@Srr;RBrZu=aj|z_GWXl(4n;S&hS9me_La zO|Bw*lG7g6-dO~$J!zjEB$fX6tj3AGx4@3QDKfXjIqjkLvSJ7vdmDx6)5hNCG*0Zz zf?a#HB&$JY4{PrR1g^az)_p|A-sd$=>@5-@r?$s5DTCTT>f7KW>u%*FpQt>7JsC&F zo?T1Dp6opwd*ywEH*wm-`qzfQ@$Zq-gj>|!mo!f7$yj#m-B3cfk<%X5p3HZSy-oFm zIgNi`(KxXu{nE9!necG-Y?+e8lVVdpf9uuWKf{uj*pqqEwI}_wp3@%Ize5Nd{~nDK zu2*~iqH$vHzhTGTblTV3&1ny7?+pa5y>7zfZOUuc0_(#&SYn<2{GXLEu`5xf3hqX6k z{_AZ;VWZmnH(2z<-hF&J{@t{haFo*?*4_sZxO&nDNS`{a-UpBfCrwPK_cWh{ny*}& z*nDLTbM5sJmNMJJ+ItFtV{eP(Y3&`+I4OsWdDq?^!o%77s-{WuNs2AS{I&LEuW9}J z2`u#>{fpzKe*Pqc^w2uW`5ob*dTzd|mn*&v)$3MU@?rG~l-+#eqM%3I|ID4h=TLjY z_?Md;MlX)c9&sOXrN0cdS7w#?)b_}I&oFw!^n+Z+muU~T9K-4T(-6Hwgoo3U_LMpd zb8_5tlt0x5{Xf<}8Ox4dGET7HS22IB-meHbdUFOYqW9+cdUN}R*BgDw`Fgk1Uqo-l z`Fgj-3Cn2@^>6f41j0!Z5!zD0C*?Ks-)peMQBR}i^XatPZAp#e!yMLLBcYM#Jvc(W z506k!_Ld{bSJuRl=>5kC^-hjVFHidC2=dLlbcA{`W=3Lf-U#)Uk5Es>+eq^L_z3l6 zPdgHO2S=#)%Mt4RX=Hk_u_M%*JVL#yVf3W@_E3(!3&9BLCAMyadXJ4z@5vGB?Hi%q z;SuV+J~F+0nU_aUFY=zZ5$VZ1ITCwsAE93J2=zudj`FvT(B2nDsQ2v=>b*LQp45{) zl=J_9Unzmh-4#n!DcvM+JJ-q)(cN(3Xv!_YV55tiPd4G>-Lm%qL;T-c!Hj)e4mFMdnd+ImF|Ac<}33-U@u(L zO_05mDTjR$@QRPuj35CooX+xapK=8SkjQ6&?VG!QJ-P|kHm3~`K$kF^~&YCMXv4bp?YI8 z5eWN7sC*CAu+0Yf6rVWE_ri{UJv+GP5hbbggJKjU4*$G-PVLK3_=7u1`&P&vHZS>< zxzayEbE-V=l6q`W*C~53BE`SJUT87)a@YHb%wJ=#seR?-HB;iLa)6Tskt>2wr*iFWS;*C1fd0qZplhUsyv%f=iOBq zU$`(a@TWgEOj!7ij^*=yoLD~im%8PHH(oK`E2wKOn_4;Hkk|cav)41P*{j?5(hHsQ z6N!fTywH$vW!&>-PT&(ZzaA#cMA z&1Q4lb7QkNGx?`Kc21~GEPA7CYQu!6w*^^{_uU0OnO?MKo>w?!ljkj*KkB_(;5kot zW!>bl==qmk*dTfC{B3*Jum0M;fjl?hPiJP@Gl_9tVMo;WS9B##!lExa5`Sm6ck!~I zFJ+N3NqM9!TYJ3dO@q&UZua1FJ571MNqJtSJWrfoo<+YYn<`~$nBYavE6=>C1>J9W zktvUO9%b0oljRjI+VRp0_osVli9Wt)f6j}{dDv?t9Okoz_#7!Wy2j&64_) z`smvDD^p*l-Y8ec>p|T}J^A$$iJQ8Uc&R(7-wW$+K>7mxplJ4h=TTpUU9bPOojNP- zct#iC+*BgIr-`e2i&?gEylJkD znp)6#)9vluzxE0%=O6M~U-zQjZ!~+!hrRCB*Q4@zs%L()cN6tRJ$Q8w6(;VVA449B zC%U=lN8TBoTF~|C?+bc2c_qEOywYC2HS2xBiGJlD4~%c`=sY#K zdy^OGSULVd>a>7*@;W{!!E^hWN6zaz(r0X6kv_zDi%Fl6J|%6oa31}JdRsXEBj;}Fr|nmkO`ZKS z>V4^g_O74JFX*|^E4+WA7p0A>XLr*!_KXF=Yc! zL3CW+o_u0(*A-VVe=x6J`Mj4#Ux-!mYSNyPX0K!U$+FG~%%KyQLkVwv$b3N^62JVp zz$?6caInSBpE7sKn34IV>o=5_@ny=*80+Zwo~iq;U*5VGDQ_R;eGlb*m3I31wD!&$ z&D>ac|0pj;dH3nu(9V2Wkr=?&*WzUzze&!dZ5#2?n@L~oVTDS3&x>?zDw8>-W&>?L zbG}#J`R=<5wsd-tt)D?>rB~GbU9V#1eb{(uc02vIsP}cRg0U2(kL1v|SuecAmQ2np z)7Sr2|1L6Pi*lKI9x``Or(Q#p`Snq+0DCg8*GN6{*~({_&z*mx4aIioV)Hs>o+EwO z^oeVEiTYE6`+6!pPu4Q*R@ivjqYsX%?qd3n=x!!m(&)Z0*lpv{ZA0EIa{56(VX51s zrrm!3HKcubuok~A6`7Q8&I^M{bV3qFzx;pI=V`~fPWr$rexL7r+ZzQvC8p1lua`{q z_2K5Xzth*n*M$>Cl}jJrf=%k^tlt))dcQ3~g_>WH*5Rhan_hWOwO7`0ZdSp}34?=O zk0oSIDkFVS*U#Q4z(!wX-1AuT%w8h#T`$sm!YkYQ5}z+4XKrV{jLwV?p4-Bl)yvw5 zZcg`OUR2gdY*)N%Li|QqOR-sjy_k$!S*zHGjQbmXL+13*-y7fJ+svfz8+)C|mWiI% zHNcNPx_!s*57D04slFraY5Ep(*s1f{UvwWncZ|H9_CI$hX#aElPXF0Y`aQ%A>3ipP z1by#ZuZ>4{qpY*^pQBQ4=ElO#Yj2lzwzPBN?J{>1F;B*sQ;ItVm^>;3Hr?v`ps=#gnm;Y?c33Oc{}ynEc=P%6JE~!v+5GYiXRdw3xND{U#!SVpIjQ8eY z=X%)>F(=x&zLW9lu5HpUWlfX)x6JvS6PWASx7}ZD_J`Zp2k*Ngjk-f7d#uW8_Mp_! zx?Pdn6PUVs$0;M15U!pDgnOcG_i5VD8)Ply_IE zPCV))%HGBc6^kwD3m2Q8yT1Jgv#v^gGiSE^jk;}d>a(KgGhRVuI(;SDoWuO!-9I0H z9v(c?dE0{a&gup29n$wt(D(5{`hLgjv)d~Ms7J1M60gz!AGx_e{OUg76}GY#(zjb% zzwM=U&Rx(BH@3b^eNk`SjkJFi`)|M86;mEF}&dI zhsVmx5-+mno~wKA+iouCewi^k>gIyF7rj~Rs|v|CG&9MbBokXh_MtK^QsWz)t>d_U zqC94N&s!k-=-Ac<_Cky+cdU0(=L<7+Ule7mcT?5}8S6XfLs!mi?<{)RtP#xZ4>4~? zXv6AMd(rQleXxubZv*+7aZ7$1$WO)&ZFs>Lmif8km1*rA&rfRacw&6}mF(S_+r@ra z`h!|i)j@9(ak|DW{Ne){YC{k6&T*SG!j|G)nFD*g5A z^w&?&UpF}Yb;-#4YuC?yS}?Q7i*%p!3TH0yqKlrPAMNmRq|em9=7r>1VA0IbUb%L? zX~!Y2{zWfs%Z*-)GpCm{Tjjc7ezVtmjElo7bsqR%^f9>xVt$nCG_F797j!RA-Pbs! z*X23%3Ax57kZTNCbB119$a*95qpUY_ZPD@i%>_NTv4-4g*1r}$%^slpCAsclAM^pU zM=0)`aC3p&laVpb*1A>3YiF82uF*5sj~6LpLC3FVx3ecO{g8b@Oy388{?2ai z8Y%0R9xV|D<-tQ$@k$tTe*8RMs%{Y`?hR8Wqjl*8Xc z4eqhyZ_X2;{gp}X8N5y%&*$54@{()!MSm_#bWWUK(0Rqd$*k`sU5_Qb&MRJK-yGVO z=w{qpwKXSaW> z*o#U#vTlXY4cmO|r^d;>l!)9Xvhs_4&iT^0BQl34pE!3&$|mKK@>zY!x3lE-cG;(P z%6gUM?@br7UUlMs*YhuP&u(se*JFp1J?}DW$dcLp{@#4Jweo+{HeHYPCz%U(n)Vp< z+k?D9U2puQVCz!)#Fbtt`#o>VQZLTD-7S9HKKSNo+NZQ9N`25ql(UgNR$S7_H~qvP zNl@;tM&@GLYGuig_m$ouPxkT+(dH7_-*av1vA^Gb z{{-2`bFH$AHoZtbv}px-g+`K(d+o4Dt{qt8b6Sm%w@D{~obcI4vw(sL(!W_cyle`)8n3uN5Ir7cL)C)Xv( z7X}L}f@^}D&a}Dhi6sC|UQ-UR>&fy4CyG!M$qwMsVLq zt|fZ7$13;Bp5z|uxBUB??)8N93p3}u$~@0{(e*_2WVycRcw*jU+P+rHUCpOlPwo91 zZB%6Ln~{(1AENYu^X{ipW^-+9uGjo)=e^E-muegTzsUpJ_8!b$>aPx)L$09*ljzv{ zH{~`S-4fli49Ff!*Mwr*4=8&f{jiumZRULH-rW1GOa^ne%-1qkGyY3Et8Ztm7(6WP zCgWb(R@<)l`tgH<)=tODOJmlSZEM?x(q^*nlXjD9IotkSC;YX#Q|3!&e_zS?S@g2M zR-642*M>4iU7zMWrQeC@HP+v%YsRtPmP6W6>**AJ=4d_H{iO7f6642UVZwYzH1973 zofFPX?qSS#PFT=>J@6odM{_+w zxEXGd`;J?hxkppYJ)>sx31sG;$qD*ESN-yCPwHFh zSn6BaK+;zx4|y_oNj){NH)H-Pkb6PgbMh*>%_r9laqhJf7TbO7RhVB{KV!1*GB(Id z{5EAOVNN6+;nU(*;`PC^TjmWO;yl86nDZFt$=*i?Pxn4Mcm_Vsd6e@6=Ky7v`(hsV zT_am244$Qal3kA`W!>6$Q$PEM0rn5v%b7jMnseX}?Iw?UFH^?2_+r-H~>S4|N6lxkL2j2Yf?LKJvq>u6|6yw6(c+AoGEl8>m~EyNL7X^GBr} zWS_=ZiBb3deJZXSX^T?nU$jfnmY&p{ENjw@5lTH=<#S1H#{zS0ZN`KZ@& z-4pEJKkV(3dY1aJ`yHJ}8;RT7Gmd)*zK?~K@uvs34$#LYc=v4Wr(ea*+FIH}xlNr> z2h?A@vxhzAFM|7J);?`%?lFmd`obW=CUH&{{ zku-^ZPWF8kUmO2RrL2N@yE8^!=&3lI@5OJSVR8KHA2Vx`EH5+-;Hn5j@{k<*kvp{ zIOnOsozl0u-t$WPOdcfY`fl1Y$uF3DiX~h>glWp%DVpkaX;@L^&4BGJ~uP-F|kYAd_KhF5FbxfId7+(g6@Auo6_KI??WY*RV$Zh>Q zZ5l!+)h@1%)&1Zvyx90bFUFYh=Ja}rDWCST=X}abbbb0%GP#5A@$o}^5Wh_R_~!aW z`C2GX8s#W+eNXxQ!r<{?{LY~b&Ahe&yS84)JB@MMHs=fHj^cw^AGnv2_7J{wy~_Cg zPje3?HfNhxHH-TwjD?7nHT2N0ztL{?_j0f0KTp+4{>Jv3XKGDbA(t|W9ACHFJlPNS zTAuUabIpYDNRDX_c@g=Hm}fZTp_B`buzBx`7mlP$R9YlmUOO3%nou}uQinqs5@$GV z5_C^E6ctH0Y}EV+dXcv-93CYRzT^(5)JJ(HuUE73CHEqk<>N~5^WkWa(zx_-6B(i3 zc|N8~X46cL8KEZl>Ws*!XQ&I$q#U&i(T{w5R-~Tzcn=iIls{>d(Zps&M|}oCBAaM$ z)YJT#=K1^_{ELY1{ix5ObBXa`)EAMzoD<0<6ncl2eYCKNj>jk~o()+xqJi0wC;)@MO9nNt$7F*ixMW>PS#RAXdw~A7PmT~^rl*02&M#WK{h77;m zPboF8MTpLFa+)oyIaLU2PL;wjKkbde1wP*-T0q&Y%FggN=3#z@PlB?EP1M**K zNvMnP+c%lY34a=!VV-LY|3Pg^m4*L2*3?ln%F|J4SNfLUE2x$qFqVx4?;fMt8s#72 zB5#i^ZS|sGHJY)dYrUvEjW;b4Tl#<(-6yCXd<|~Uy8OEE=-AR_E4=78$onr^ulq$` z>+;)DaIMSl@Zyqvao?wx;9nN|{4x&-W|a8+Jvd$(Te^Ok7yW_QEQ9gv-^8;7jBAI* zeuc09ALw6`^!W%peQs=N3u*sT(pLHMpNf8s&#%CHYkmG1T|%@M4VzBqY2aqO z{7}RVMBPA+2CBqzOar%IWlezwswJjO1M`U4SgwKFB_^Q(W}xWDDl|}wv;9d8&?&uX zRT{WkVyZQ;fHaTSXy6^9R;z(UQrbEVybrZI78epv;U1!3 zfUvEwb^?_wI%e7fO`0ntEKkWs@6hn&*!Ty+Yl?`V%eP8{C_jiGGnH$XNm1xsA&S!M z(XO}g=VPYl`GUtp9O@VG?x2@OzihOhBSd3` zbk0@$nZcZvIb+=V>E&KFqbT!|aqA?WyfXcNGtZ`=nKy?c#_qTkqDPjQUAlWR3ru15 zVnnZ)`81nqwCi;?BMgvZ=7-GE7h|_dt|jC&aM0`# zawZ_J329)WM1&4Yhr)H-G5z4mRCvIIO*fYxF3dWm@umTCCXwp*rqZLiF{&qSa?Yh{ zvg3X|gR!QKBgSoR;0}<7Fb1%FAwst}vCA=5HgDc@!#Vh4D1+ zay0(S_cV`zojIe-mrM7aQSLJxD|3dwbIvn8tHR$c=ix}s6~>#`C&|Cm$H&2GF6V$>f>`OKi1GyJV@{vuKFw`=)~)SMs0eKQQz z(4ED88S@#dId2#@#*krdy`SqCsxbHaMtuwoU=+~0wZognNt?^tG< z%o)Xg+DX`-R^l`Bcis<6eZCI)o-&^&(M{4J=U=HUT^GFsg51K ze422d&*hTWPM>dpuiEAFbkhFUZl7n+!&dC^IUzIKDH@r78<{C~()zt{C@f*xO|GQ! zPWZiF+BDA$3LPb5XW{cV;-WgXg0YrmG*0`1N)h;YV}LgWm<%u&nPY>IIkrkl?pwG8 z-Da^)50GXh_@K^8V{av}nkfAJDEJXki+v2=GZ}5MXYoCAk@=&2J0!0D)D%91lhU^v z`K5*sUfRJU`^MPD96v!)_J{co_z9RTVjKP55yHRNM!$20#KDbz=M3E@hWyTH?&;qd z^V7}~x!*ZM^M(Ch6S`g4?=_(sVZYae?tp9jo+8bV-CX9|dAsQ7geWs!?5Ffis^)Id zNlz1|l48%|^=Hgnc%^y2w-;iv%HNt&$bW#~0izIBg*qgAQws71r~F@^r?3#ok9-9` zPpUX`hAUtuJ6~{5AYiEA<~v2;r(P1oF?5Jq&i_%pv-@z*K!>zq=CaX*7fvuy@;_$M zqH=^cg?7-~eG~ajA}=H{QbC?Kv88FXAC?83{|{^B_cB6h43&aD374*Ix|cA+C38l2 zOU)#HI)#g4mZ>g5g?}fM2 zGDhY2f7p8y_`0g9ar>NmlQeCH&TZOexEb1}X)|;HDg;PJT3TqKEfg%?rfJ#+(j+7) zZ2_S&i3rH3fXsse0wOZ0C{;ia5J6E!p(tv7MMVKYLHVAw_uA*|q_+$X|L^<%zV|52 zbJkgV@3q%jdpPG#lW1gk`Lu9FI6Y8N)#-@lP79Z#Ef;1?3l9sYP74nY8=T7c-=MN` zTDXkI9ZqJ7eagyA;iXcTa)*TtyB5Bat5LVrv}}+(LTVGE z#!L|A+~n01)~PT#)TYq}vWn@$ovxKkdB)Z!RTp!5KBY#7A_GRf>EL$)CW)AYM;FK$ zSu}b~;{4U>7KzNr9_h&EaK-Y(x#E^MO6KzUTn?vYxGE_)^7h>puIc3RgZ8q^wK67- zk-vzF#4VMs;liK$DobLH8XGAmj?I0afRC!nQ26k;@cC<_!n2pR(`f_<#!OR70~ zLZeBGgb_5FlrX$kqe%eay!)t)c_Z<%sm<1GIAE!fb{~~L9FIw+6&17SsMO9_@wuJR z_P5s`m+Ay3+h*f)K8Q)JKbE@WdXxMUCZ0h5fE6oN97Zxu8zeG0!o<_0*DF-S&na;T zum!PD?qHOF%gSj?baH4uPG<%f{ZHJQ+q9^v?DcTj_+XY?MlzhUd}*?@^6{I0c60XB z@%yurlWBbDX6^fpqKX+!()TfIw693}^qq6t_r1*&oVZ!8Pd0(EEOks~0LEwPC8KGt z%81`oH1`s{fPkkvT1P{Trl<;G1U}t z^TG7}ak<^AFk3oUk;qNSD$_(QUY3vDfpS*vd;3>K(gUegazFf7hRJq1SH~60)xG7a zOxNB-ZLV@*S-6i}JtxCeS@pxl-PL@YTxHG7T=PY8b-&%!e1}}6@4GA?#;PaeYLj0x z`&v21Jr`(vdaNMmlK2$QP%kxXPkqg{g$jS|t+fE}?MW)hZ-%5qtwR#>mIJ(6o- zqMckjT#&~!=r&{6TUs=_V)u86W~XVE?Zg^R+5K(MLC==c zPMv1Eck*=&T3yIosh?`XC&s?#i)J<$$v7J-9B2AsHmWd(K^U0mSca#^nPIFduH2&rkYoa>lOxSA)oxA5`YM09R%(Gp3q zn)@UzZca^c>kD=jeSDGnyeblgU44wQE;si@%x!9o+y<0C+E-6@`{ggGOvnAC>GoVw#NM5;FbAx9 zOfTWvE}WcIOQKY))x?Od^go|s6XowV&|TV!SuT={D4OBVax>X>MG5&Aubm>(&Q)4( zbj6PF@C}zCIxNGV$3^W%qw<$pG`bR>+YMBFZgXn)=XMy|EDN8JE{R{%lxLkOI;B+3 zQN`z+V&Deuh#;tJ)~mnBc=cqx`p4)hGrhOP4}VD&KcM-Kyv5fDnE5?lxA)UaD+fh0 zTlhWN)af92O1xiny1FE~5})^Rp=BwY!QCnHLPQF z{BP9Qs?#MwNM;x1Yn&!o`GS}@{x{lWbR|CTW1?L5P0VoKC(743eGSOi*(d}i+YymNjWz0Y;)(9b%Dx}j6dbE(UL}D~kIaVKK3M0;s19aKx9w;jnw++}aaKP! zR(Gr7Y^NA3VwE|qR=ga_lXn_(S%B-RuT}jek-mR*yIx(M@#>3uwI#ah9Lv;G{km~1 zK2xDMb`np$mdT3cgtBX%RN_M5t!vBm-eGCv@{zQnE)VaN+^f;spD?= zSMA3SHU#R_G5wr6=?AJf)+vfpCq1i9EiqEhZIj+oeez}3Y^@ooS0`n>I$f{MjIMhA ztKnJrF8-@Is-OR+%VyiAtJy}%`tDqpXcX7g2JFyDi0Hz>=Jc{tu1x z>%1E&aysOtil)7gy)G^F0dq4|FJkT{rvB6Xnpkj^tG$?ZpB8GGa1(%o4_sh%Lb8U$iT!|NU7*iaF%Rk`*gv}5qZ%d*zY_*vcU5HL?W-T$h zu!meR8~pFP;M-a62mP|E{#C2?uv7E1t6`wM_|xd3M3n(#kMJ>US}IZHKRcABI4E~8 zN+60g3%nfa30YhlcvWbbJdtpYkcUq>>{`x|cam67(0AtvyAn*j!*)HoVC}pTJ(J$n z6IZ!n_UhHH7fZ}$FWUWE$6VXbF;lZ`sq0)R_qb?ksl9M}biqx{Bk0&Z_TpW;Tx76L zU1=}gA6@M0&M%{K)xY9SvP_QY$2d4HSSbSTf~oR_BP>e?k7OfmcJW7U#eEin+X*byScn z+&gcdyoJMg$F-hh%Sq1YFfUK8gq#d0@YHg{aN%%~4lEBA4zJJS{X)Y%-MmPKCs2qk4-b=taRWmrlxyvfLPO2fY}foSugYxRnlLh$IEI_ak>SKK){>Fg zrqWSSv23xASI|x8=#Nxdn8*U7JXZT)PR42H%}H@wj>q4_sk4#ROQm&brEEsj z%Kl^IN=gNE*9yw7%EE68hr4c$ucjt>-_L}&h6KqrF+SyS50 z1c!*{*>HQNnGP-Ud&t(;_K2@o^cDGza;ZhK`EWISSF2XWS8T}WyNL#d@ZpfyD!v(A zgK4g;ip#lRA0-*qIHse}mN!$W{v&U5(<6)9a@Ki0ybIwmP8fto#u!VTEL`r0@79X3 zBf><3*FY?G*LTxU+-9WM=_vY}m=Ra)bGR{53D-yHYdE3b}vBo*4IsuLhPHq4v7>z zYvW8DK_>QpcTDUouUqf0=o%StPB3%)^s!zIUQWao?xN<(`(DWVT(D;qTOrn}xW2re z48r0Joybr$Q+*$*Bbx12zXaxigAmfz!&6px#*a0=Ao}IyQT^y1Ts)*$`Kf zvo#p_Ufr%{W}GWCj)Z(dvuij$f@%h<`u5%P&xgDaRT-yR--XSaRX*eeSEV0$FJU~N z??&oPr14J4E0(bVZyt%mAjo<_Xwb>E4@>H2Mj@fItCCo^_5 z@7xS~)b~$Jzr{>eIGNw$crxnS;}4~?+rsgMs7=pv@r`I-&v|pPcW2p8CoUXS&Fc?( zcvBz6R>Z4W_+fP7+0@lH=t>?d_B%4ka*n<*Yr};+{L~|pj=Sc2Hl9Ab)bqpWiM?{Z zMxXJPu|C)E?n?RcOuByZ#(C^CGbeAnyN+X!IeGu>@*kn8OscLQALIq6=Y^r~h=~;9 zOz)ezkwP4$%r#_mNoMbTV4WYu+_2467wpDzZxr#`haTv9Bh5+ubtJxhNB6KeBO=}S zUJZrAcUAC%iYCJ{Nd5K>nN-YekKC`;U08_p>RM_RXfgYeuFti|zMTZ-3Q^ z6E!l&OR?BkFWWqHW&AYor{~?tT{$mEeFL!D3sFh0XR(!utwWqbz$25-1QnIBfEM2W zfv3M@#(trgH`qNlx|Tj-q@rT~(J9~qg5pgfeoUM#zO3-vKs}dJTp7kQQ@$sUrMuJi zYjmxAggNIUsJhxSwfJwz{`1pQ-yDw&?~QYmXD3_wByFVRJudY}m^V-|sd~358J>P+ za*uZl?<(}>3n%(7#>eZCH*fZJU1l9m+D|>6Av_(gcGoR$bZ17V=zGrdm^TVP5M5On zUHK92g+6@wjGDXI9%Q-~%UC|6rLJ$joBk6rFM9nVyt^IdZc8|GyyWh?oce1;yx7pJ ze<5C(GuIQf;_VZ5yR^hQw32zv$-G2Gt;CxnU(tK!7B}H3M8#t#dT#U3Df(gcXBcni z@ImOR%9vBT$;tm$pVK*m{l34S%yZj^OjTE#mr4DyZFgxHm5jsNFN1b>Au1VfM!dwx zjINCDiT_V#K_)~06S5Bz+7ENj;nm}*e-vq^-h7nh$d&g}E)vBV;Y9!LSj{{8LqFil zsG70;|6`iY3x3*vRN05`!EUC&OdkC3mHsz0oeMsE-T&8hZ8w9{TP@?~2>;UPofh9u zId^8-oW{G@NGo32Bhjwo)|(MBC2#*%SNfm7U(K-(KI9_j`RCs)5!to7Wzn0}KIB5W z+Y(V*yIV-TrSd~Ay}K>p+VW%NKV$H=R^F4N|D@Deka0}!X88VBHfR4G16=of2Y*!A z?gq(6m3t3noC)5YXC&J7RS0iTJFWkYxBfe|{@-k~H-~xnADhlT#GLA-NZ)3iTX#E= zc^ACfU02K>5t&y#U&DV6m9d6+b;|rS#1;B?Q!MYC552K;P5S-#$g)gN2K(IAd#^FL z$}>EE`!LDl?F0Ho`Xd&0X5=ipFl)K@x^2#iUC$5muDf!6ti7f`ggC0fdxGgXBXeeC zmb$9^yUlpJ<4Kb}gW@ffXRfQ@-%hwpkH`Ky3*-OM=WBjAov$*DlngHQyzfOf2wn{m zQd9g+0Z!a%_LyxWY_fk7jrMQww#wh_D-Z8f`BK$;LC^JX@RXjPrq_$~?@s$yz93Kz z`2>tP`1F_@^3A{I*rtDP)W6QoE_)toy$L68u=2#2s{g-#{?`Nl>w*9E!2f#S|92i3 zG(pz6#Hy_Dox%e7$`3w_%?~5+%UFBYx3{g~)5hJMwLP1#B{-EgRZ8T0c^mo~=E*)5n%o z>s$J@wP)S*x(3(c?n-8|E_lDru5bB(%k_9A2>2v=9p4!i1nrx<(#LLU-PBsw*1$>Jm?Y-&VtzE4>bsNOtKDT$a9D|gPKK1mjMHgn*5osXrZf))8ja2A6%*Qp; z==1Z1_QLuWS3RHKZ0YRiZQUYQ2KWX=r(NA`o!xD{TVsXZW7jtKHrw;wwvDY2El6KB zH}|$|SlhWi*6mz#^v3nw@pXLV4rTCjFuS|YDD|JNq&_qZQx&n`8hsi;8$>UNJlE>HaUy8HhefLj( zfjVBzYLvg_$(>oLeap(r>iNCHuw4GxNB%LVwUMm0oL_2;E54D6^XihDQWKL~>-aCF zXVm=->V71vE_wF}sfvo^_px;9KK14G6;hS0uYO-RdBnj7(JKF2Sf0rBs=ho7XJe^Y zD}QG!-lx2@LiEa~ckEkMU!TlhNxR9sRC4Pn`|X3>Wfi66l^c?`oP1t#pSt9{x@2Q2 zc|a=pu~c$FDmgPHMJq}x>a~YC2j(oQC|#W7XIn5Rx%E8rr!{5%j7#x_m2od02*al0 zD*o5Bc<+jZ$w8?N$>YA6y!PY+lP?E#$*WGT)4$^V7lKrIc_Paz{j@7xwP>I6MN)rG zT~;C|`PfM-lT#a$O^wN}RB~8d8CEyXRA`ImE(?<7Z%;n^#bfKcmb~BZ;AEr_A+LKP<(gOh|&Z2=@YWwCNyMK zi%TnxA?EcBvs}IF%agr)A&qS%d0b<1Noq`%N|Wo`_N~~^XZT%{)cze!{u~hpq2tQr{hvHAxjn(?yZ@7^ z5pE1J@ zp1SF$m(-V4C%aS0!qhpHeTLZ2li}2oO8(bo>>9o@*+C|zlE+?|JR7@S7rV~Jp1)$( zS>|s_&MT6CNu>6#Dy=MMHmP7l@u$4Jg8v^`R^BK3{*nwwEaJOhubxIJItW!T_=AMIiCJ|$#5wh*`6#&H6+K>Nw@!8aoeUdFD=HG%Uay`s zULfVC9aOroqC9!!iK%JH9m%>4$uFLGUj6#y%Yv7mcwWD8@={i~YWA{I5AIX{?OA4? zTvdTnD@zvbzoF07SF^$+_PwA_gz?Z=G0$Q%c? z_No7KIpO{#n{5^!Xq>l5oSHBLD|uj!@$kNO7Ln_T#+>BB#wE#ub(P7Q#*)fXoHp;g z^~r(jrrOMINN#LwBg2!M8d=2VkDoMt-}8_7_|!hRcSBA%{K(3Z@@ajfx95bT$IY5F zecZ*#DXHX&+*DhAZ9}OJ^PFTwU2;ubvOHDKJfEsc{vb#t?>RZOcg6mPmzVFme!qs~ zo^?}g^mCF$b;%n}uG_mJ`Q4y#YC8%|r46h%`%WIe>4fCkm8RJ>vP(&CZ0qRk4vv){ zL1=I8=?(bOWOjf(LE3`d_XO$9Yty}LEywhvd)WT9rq^_K_68lTo73ysx+#=qzmRTj zr^4pm*0t$%T|wJg*>cF%AzkUpd($l&nmdA? ztsO1wfT$zDEGd}o>_}5bZ<-&b!lt#&Tie^#Z=k`=Exnx^*QoN+W%6@;>)M;qY1!1R z(scKXne4NuyK`;p`)>H`Hn`sI_d1L=omtb|a?J8MLC5kr3%ifCU2NUb+Ony)tz$hK zwYK#g&FyLVLefnga?-jsB|kjf!6q%uEc_HAq`C+j{UsYwO0Y-nKRP zA)Th|^l9ndVBw*Mqz`Rnw<&I=@4abuU1_|tw!O7GNVj%(cXS3Do42IJ&K_~_noUwy z+i`(-ymM2pc7OiTW&8wUd+Twn?Nk(PVQHwXx2?I|*s^%ZoJHwF=gnDh=(2@}%}Xyg zaW+wC>D)wTHg!mjw5$ozvK@mr?tJcr8nrB z%hod>XvZDYyuPg^&|GUinp~sgTFk@~U7bDjIK8fe(6)4T9@Ewu5Q-KWV{;rVK746< z&e9d>*(>HAFmHK!*5U(}qz_(l@Vvgg=@B1pHLWkk)*wB*ZN0=Ho$lR8);4b?Yub96 zadLWNbI&mWw>=xv9h=&5N_T4yd-!0JbG<3Dp_3mcZX-K;+m37PNy}HprZG;uAx`AH zyFJ*{(@ieY!*%VQ&GeQi*ak`4Al61_WLzlMwO*i*o;YLOx3Anax-MaLqp4JwO=$XH8F)rG?wuc&9j%nrg z<2W6LW<<(R4CZKh6SIKqOq=i!gtYi#>Yfsmw5canT+Ucrx2}h;s*+TS>~HN@JL}K` z4s&_l*0HWL;A_q{c|%(akmOiqQ-cn)cCT;kXt6;%ptX0I8S!Qg+0fdC(`dnrLK6__ zmK2}W+sh4Su&%qAUhCaZ(6ebxXIHQMYMs&DYU0fdMG!jH2FJkshjVp08<2~KIots;j@2qjgGkeYu&uo^$B!NwMW0W7H-sZOUz)p)t zcQT8$x0wm@_zvt2+BR-X%T(JjU#66F}#uJk;%$c;2 zoOZ)-*`bFv1pG5KFcYav#O>)`$$AlVn~Ijo%sX$3_0&e=Ddw&8x=rFP2DS9p)y)*l ztlMB_Q}K#q&_+ty34tj-nvfU)tRlUp1!B2yu1PjCr?+;90Zii9zJZ8zuIVv@Z6@lh zC)SJWTYF7jrd!%Ods?Yx&eG-SgEwtlBePw)XKfqz!)=m}l6Gdyq$#qH`{9in8BdEP zrYubxTaWJ)l7+&~ge+=u%ia@o&FQ7n=EgcmuWzQ9nYyMLEBnlL&~i+7osm>AP* z+ImeMtZO4|9dr1hFqw6?@(h8MC|+L8_(+>Y1*f$(cks*VlCYAfcvk$>(zS_+VJ(iL z*m`*`uwi3QurQkWSIjzeIcv$5wnO>Vy2H8LDw2a`)n$T~tXsHoqf3>xp0#9fhb)4| z9&4=`EE+?a?xxQhbamR?Ou%G`VgYYsrnGAi95AZ9Aq z*er9Y%;FmXz4w*UEQSU*l z3TA<~IUl*wI5IX#XPk7;<~AOl@Cd~u45Q2p50jm;39=EBT?clir<&!QVX;8h@16~v z-Mwa?K+jtGEbXRCX62H4+F0%}PJ$_?-m-YW!7Ea8rcOubwa`tgSVRSE_b>s&>h=RPDMBo(lGMx3%=vvO8#I zpT~uDGCN4zYMF-RFIBITilTFj6#x306sD#1y$twt5B`;{QP4p+jE~KtY32jsvA(@? z4G#2|O9}VZRwgW#DKi!`Z331rJZRps#S7=mQwP~u!A!ZbY%B~q=E_#nOoGuGnYNRM zvu#rc>!nOhl07mZu~Khl7jj&$OwXkF7Fj{l?R(B>HcPBjOkZRJM|Yzw7adzJ9Wz7J z?sBG4+|GPasnIS2iVQ*tx-E0>^ zDJRbd?IhM`&(Lv@Y}Cv|U{I#z4n09_+IxHp`DU7pcol+qPPn!@9{I+`)uJhP28&5~Q2g zt~GX>NNdjbS*n#S$dw?2F!N1d}(fdTDCM>FPbgkvbpB&inUI*>Rs}1I@+__ z@gVJWZ)`RT2t8)t%8ik^FJWRen`|0WOn8P_>00|R?e(hd2@1R%`s=D#LT!{*c6ppa7EITygcjpL6kxL1xicNxt2|- z#c|n0|9bZO z?XBq3-ex&_{)Iku`0d|0yRaG;EVw*No4+b-p@_O{R^BJ%#4GNXUAl|yt!O*jmkRf3 z*N?xvd1OJ{m+%E^$D&IIV28xPI`69RFseB~0{HxM&x!*RvqbRhbN%|%6xS6zrE$12 zG5d?zvoFt@eMNE(wO$n-K~agN4aMBpGq$jMLkef%X&=^}4&NGEkKfNCL{qHT{JV2j z;Sd||*_gBrgJzjDTV%oLtd8{)x6CSRnn!@L=MS`fxhgz>f|ul8I^eP#Nv{Qi2F}lC zkj%-M@7(l^@zck>3(vftzY;~W3un^AftTe_bL@Eu=6vgUsZerpejm3N$94wQG7c#| z7uB3u_CjNPJ)9fmikNSMdn7eRiMCu$yhNj{@3(EU3scxQ>#9)vHXmi{x1~9=X5&C} z=o^a+-x#$=^kVu}o$#b9i%IV&$yDYKf_+NrhJ=v*%}>6o<h=Eij{&>{59(-KQ-Q~!U>BrU?M;JrWl7kLpkx+ZeY z&1<4ghjacPADr+Su)LmXj+H3Od311{mwAIRDtL_RavmLA&*fyY6@*P(m-Fc0x_m>v z=2xPT>(MvnixStxZ_Zb5bKUo&T-UIOw$UGA$^OgrVg1fW^gAEb?_9=tbWnb5bOLbh z=aQV4_Pd_ycV5A{`_w}<_D|?{y{g}N|LfKLuGjQC_s5plQ`hghR%L}nf4CqcfO?G`N5n&>13Mh{0xdc^!!)-&i~Nw{BQO=e3!w& z_z6i%d)V^fPoG_k3Hz&TpIpZmm7;uDg&Ulg^r837; zoHL$6?NfLf=hPj&_qB*~##6Xf^>=cf;#@zRlemTR3eLCM>j}|k{K&5~$Pv!vobeJ~ zY0ragoHJg+8}cbZa^Jc#Dp`N#hnWek{qIQomPD`af^+?`bXTjdg~noaPA! zcj)e3OU~n$t)eq|(jA>dPe0|Bzx6nMA&tv&^W6Vt&g%5g6ZbfZTR8Jv)PJ@g-zLf} z=wf*!ATJkr&zD554~)%Ss(s`x7`-%Ou|?<1kM=ilAi+uQz+d%YK|`o1`p;pVd6BTnzprlbw? z)s!5YKLK;klq_ZDo&DWfxyI93=jkl)bVTmzIoi{aI-UGLPkuZ@!^uyAUAuqvA%^z>!yHL0EQQ=qe)&3?b;d+nm1=X74-hXx!ojv_myth1+^A@1zNh8icw{)jJ& zIouHYBt*y66P_8j6<*}&-08`m@Z{Jw*Y)d-Sf@|C{C@q#v-9tsJ?F;q@bjJ=Ke+gY z-}LN!IBqL^%G25D+4FX+lNb@}Bxb~NS$89UdU+MDj{P5A9hVJniCN~fsH`807vlP5 z&2VuH7sT@2mK9&QI367LH(;)fa)7{f#|G>EK z@*$5XZ_kT;6}}P66Z!lGhqfh4YQ+AW;I$jv7?%})MlpIg&JD@8sNKd`F8dRghr7+a z)t(Ji{Pc&jO>D@}#{fS^aiso8zasXn>^q{kQ(siiD9`>sLs>BAr{jcy0IW zXRe5J9`kgb@#OS9vi}WF{%&lW#K`H$ZzQ@p6Kg#k&;G=TvCZ;qWG`+>&4E7~;eq#X z#{GhDz_a=q9aGO)#0ZX&CdmzdOinp-z7YN+sXi+3+LVk zbB`%p@JSe(h4ZrDqb%q1SLOkc5A228EN2aakF#8Wzk?GjhiAiQSkB)J^E|-RiH`$f zB%FIIe4XX&De&!hJM{Ops_ z;r=a5Sx!!ZX;0+YpMpPTdB9_^`Xq<@QTdRi(fKXhqB^T!<~@-oXkYe+MkgOW-*VnK z_zKH|TH%{4^Un1kd|GwB2opakn{_SxC)HU3zoSgdd8?_d|7}?Nl6yT|X61wMYl3HI z#vbO^#9o%O9*5^x&aH$srt(}Rp)oDk1Zy1g$)g14QcuB4@F|uHiCyAq%L50)#LV?K z@eRvazd-(wW%;0H;z`Sjg|Hj@Z_bLVD(kugRuH4*a54rvhRo0R|QL8^;K{mtiH;ljseG7JLP%T zfRileUjTpBvW!>BZ|QFieIIaxcl65@U`e<ouM;cm-0_%{EOmgQN0zV;;>oAa-;a_MXSZI;xgKxE*jsFG{8!0;g{|$b~ za)NS$wZHkyD}&#(^1L19Wfh~Jdl{_#8pt>pQfzg?I#}bF^*LDcQ}*&h_O&_#YvBc! z3mGp%mRTN5xgq4A*fa22SmP+a_dVovD<43Ahup0CrSRRBWxNd0d`ncq_{jJKzYQUN z!pV2w*Hs^ThrDMwi{k#O0YztSzrzm6ZaBMSj@?kjn zW|%k(|CVLBj~GtAnSSkrf2sTiOze&RzEjGw=-;oz6)31?VQ{Dm- zYol{DjGcz>g~?&V*fVOJ@~d#YWm#KCtyIR|QN&F2<;#RdZBwS*QQEG&K01oAA-OaN zAB=id^9mbBPqZ9f3)e9hq9ey>ov(6{jn+OUkc}o^rJkIfFgA!k6Q6*OvhwVo!}Qb0 zPloBI;aA`@EhnpBa$V{fz?d6-jkZfWqi?Xj4N~x3s{a7|9p$ItA9(zPGI=-pXI@#2 zd-9*if9=)(p7QOy%w1`17)j<(+z1Wb$955zJnZAxG@Z_VEStG`fW3KENVq?l4hC@lTjS z-ePSSbO3xbdm?Fm|y@ou;YKEl?MMP7|<(|XALu^pa#v&zpyzD=2akHtTxp3`8) zg_(;UhM7Z+{g1$mPouK|W-Pn4a_qhF`Z)Gc)u}?~W#ur~@Pl#5{cW#rW` z_8XoFW2fN-@Wsk2Vdg<2$A)oFDr57w=dFM8>C3oZ^4L@TGmcmoCO_r1GQ-Q^(aPj= zF}dQ_<>Ecm&#xlKrzx$cc!|dSO5{hXPl$hUT6O44F?C69$ZI^sC-9aOSN1HgEPWAw z<_<)MdB*U;@B_-n!Vha%sq+QpweZ`vo?QA}LN1kP{UyWV`b+Swsq+=CSE&B);94sm z$XF|3z7RV@=A@E+RgR4%2Prd-OOCQUXis>J=0gK~j4hkk2_L6A_roWu&KCG|tCNSH zO2{*@XApBn$z}W}Hm~F_el$6@8oo_+UWf0ooJU@iY*#)Ne#p~*T;=3oiPS57N%2=~ z5^mxz`DWT8A4-{n#D=`5VSE~Kx$>WoPw@1oTX{Y{E}g0JTVUd3>U<1tv3<;@tysm*1TRxUP|)oEGgr84{= z`i0n1wx7yRf)BBB$)B=SD!&HsJ5n z7|Zg^Bvop4M6tW)4F_EOrfij%!M89%1%1L$0) z{0fYZ#Gm=k!{q%aSN5A;*@vwDFl?-N#L5$^;Ge1d5E%QUp2UGL@s_rR5!;IYvGP2z z|4o&XvlV~0@_gb@nXPi_s~lwIk~5VfRsL6ayyfAO;Tp}Em9UOM$(hRiROd7BTkl5si`JLRa1cC~F4{4FaVH45IYa}_p)Ur z$HvdL`bGG4Jbp9%-2kt!Ix;_xU#&X$YWzB@6P^k8cseJk&Qj!DGxgjDpRMgSz?Z9z z*mi?5J|BOZC%;FTa^op)a!ksSm(s7ITj9sFesXO5Z>XM=_+Bl$1ZIvKh7EE|_=%O9e*HrA$&m?+ zNhv$F9mWsRuIbA^RE}*E8DBAWjZP`M6 zJn=E=rhYjlK5ymXlZn5vbr$Etj3a4F)|!dTxnhs(-zUCf<=H3lEGI|h?QUPC^ZdWzsmPp3|GPC|~ajLuqkq4M=G zJ~49QR?}t6W)q8=<9QCQ{;a_d(iib(4f$l+B^PQgv2yWA&9zouUIpv?P%drVuky|C zgI1p}EDUO%Rry))i`H-Q-s&3lgXCllv5~ea&V%1ldsgxBt1MfO_-b;Y>Rbe1Xxdopd9b{~UVEmwXS?yy{S3e1`k>7S&}+lk}k z)3n`JVCFKZr|Oq5_8EIbeuwg_@I%V)!nAF4Zh`-(j1BVsP$TF16#6JEUs^te_!^!G z&$AqeKJhiSy$v6sHsJFqYdjqnU(v^Y(N9#v_*&`=7=Ke3dq&;_UuEkVKMM9JMJcm;9`)(XyAr*dci<`b_&Q7uhz%3Yfe*5B$>-X` zRsJ`ad=P!f+uCETd?NE+?Qz!Ta0q;|)seid#crvyn*6L~?lX2i0b`TYBY9i9eT^|I|LI?KZ(XROj>X?>wD%Rel?<`LK4FvS-4Bv@Ef! z8>u?Pr*5n#XAUv;zla>03^Nw%$TL&V*>I!kV^7^8t22o_ty|&AKcVu`$k%&iPqHk} z-0J9?#9j7jb;Lm0nnVoi=#OEsL36K$Ij2r@&**=Z{6Ih0hWswA6MxkG#AD9I=8(A5 z5pTnci+c5m{H#fRvC8Qe-yLanE`bkFz87Al{1i-|O&l4=^~dwfLu}xvC+;GbJgmRa z+F$b;OkE1|$-VmRDkpaJKUV$~OxxnCfa~?_siaQHxBA~& zohgUGe^7f?!+*Crl5g@}Y4PWjqv1l;pkCVHk7Ll@o69iMqhZk@&zz)H}WsR zv%Ings{9AY57GK>fm@ZavjJa;&H1dY4W}^;_2+EI&+cZE9s*=-pH;pHKF=$Asmi~M{A#UV?7T_&1^DaMp6rX^`z`0x!kSkF~x#aWI z_bexg^Rzt6`PedzvF&0vt-|sk;x&!BL@uALoHo;P9zL0Nkma0PVfrpQd2hpQmIr?f z-sH*Yr>Tc_rhUP(yq9wteT&L!Uy|hHH0_J2^HHlah0LHtBLJIXdhS;FtH{6U>HJVx z%Kk`M?D?7H1Q_(Z91TmI>pVW% zazg6gYFXYhBkyf8`nfRq9hE&x_4AQm=rQwv=*WA_<+ITdU#l$jf8DaF{~pV--w3~> zEVg~m(|^*_Cw7rN%$1QnJ3ReAsXnssb>(+qVif5!XBysytpk*Afi-sF?Y0j_M|iaA z+y|F>T%r6L@*0opEQ>$o{Ri&-35i+CQ;;w4c(L+h$UoufuTee#IrFfoM|h*Bf3osS z`CHt!?c?mtb8wArA)bGwK8ob8$6z&Odpf`>z-5e=Xvsl%F-754EO%4 zHYW%4Nv$r;!U^sEoZ?w|e|FW%4|W z{4n~$j7h`NuNN%`_&MvB%Csq;aS$DO?_3shg3-@~|L!rqHF9jo&Q`_-`5c6iSHq>2 z<@Lwx3QvEMr(dg#J=yf%v`f?3oEyFx#=eLbE8|c3tc1zEA@C|I4^!}Jm&&VR)ruz6i`?GN#W}olL$y?D6rN38uI$!eSH!G*m`M#$^ew(r)e?pm9$oq`l z*vWp`le3;0{U-KFwCQx@y*|cfe2_C-c`aP&$tQa9y*&9op8P;%d?v5&nmVPPqp(Th z&XLosjBj%`c-*eM68TA<{wd1DJ?AqXpX2FYrCfy0b;`sr2fvwig>Uop@tcu1AjfZ! z&P&Q-=dU~+=7C6`9FFwKTj#?8lyUL_S<3WfK(VJ&6W23%78hDMzHz;pIev7i$e7myPc8|y3Qho*b_bkgkd?0a* zZ2pnQPb!Pe&v^WTve^H7%f_EBregnFDi?l7`68bGCOpnj#^yncJL3o8p~`Q=#MsD% ziL0>_n+GxOB4)iXj6LSPXyk(&gZ9?4_-)XG%>qb3Q0uPq%@5|_LSv@NNh zeYeIh#4b>??ryA$BY*v7yGv>OZ^Wji+_F``#=9@p8Q#5Y3tXX4)a^oF7YxfzWRHt z!_*bYfPI2{Po{ik z&@l5~0sDlAiIHKchun>r7#Y41Is0D2V$UhcQqN~RK1cZ?&sZ*>uQT;vXQ3NA z^w+$vGz74@koJsD6WpNO3(ru-w!*pgy^E9xESl%zqItQx^RrJ^q9;ekamVPm(Mf?Nh6Olje@lTYcU)XB&g?A`Rzkcg6<4APmwerHhc>Gso`ZX9kjE*ql z$S`)w`)*DBTpv7Ic`;n-afR|WCJhh@wR26rp3gf(`7*udUE`Xc+T!Jqe-xz5O^Aper(#A=xF75U+NmgSyn@b{Ia z{vTNm^Wi6zQ}8n$YmCCnku#=DTf!P6d0+A1KdD@p^~kha1vA%0%=j{lABJRmJWzQR z@}VA&RHiRO*fW^2XTs&m_+&`6$MoOm;7@t~w6Hwe8M41J{T*_EW%1z<_Hv>luh+|G zRHOP2SC)F#tIqZCG0Km@I_^T@%_@Hb)^R6eZHUHBVlm`=s}o3D7b`PfhFl%bKSMNj zGC#;?V2%A}!*_W)-}2=5D~lf<^>j3jk~2eoraI*6kR6`RZ#?<`Se7^rdDGK*$CJNj zS^6cPrFDC!p)Ot`AE`P`aLUt};K^&0SEIA1r_<=kDQ{wN3p&IoYKy&ui5IaL%9>?( zJG@aD`-dK@Oe}_eDt>?X(9@Nf4~F8?V#y8R^OVV>q1Sr)#3ItU)#I;u`pk9iz2ZZE zpiEv3Wv(-FVdgr+Mer-0{!UNlb+3Vb>)v8|%Ge%5VVa7;Q&nH!1 z>LC_U*)u&R7Dj&qIv0BU1!b}4Ce@dEh(%P-ogUw-`n~8dE=--m#K^GJ!&oq7r5^Td zQ9V06e#O&geK9)u=rfNQUQXI1JkC*GiM+t$p~@#BFH$BJ!|{>S6G}akRZjiG>y@!{ z_}+1>hc|ihxyn+{QcveFPky8_F&*CO>1bSJuRgrf>PW1IpWx|yM$3vl=P1*ryw~6K zofr+jMp^pxHOnD34!=uT`t^|NJPiL(c_-|AF7jV^@;`X`e^wSd-}d<3SYO`vZ|r%2 z_hk?B*Q|3~`x->~T4=rMK}c_Z?#dwh>FF&e>GFgn7_ zSB9^KnXe2>Uzo296QdC?D+lnem8IQRJ$_AD{P~v0?c=g31nX6zV!vF#{jv7uS{ zLH>3rOP#&Si}`zk$0sYd^Y;vo&r)WrjXYmj>c3d|G5%h!EcUyYip{sHT=-69Y4<*l zw<}Bi#LVX&*$Dir^`Kx~9LM($7+{oi{0du1v6rpK&DrtC9}Gs;JtWm)zN^7#{2 z|ERIbtP!KiJ!U+Lj=XPw)D({!l#z|XzeY!xJ{w*IFZ7r(Xyi{IKip%+pplC`j5T37 zMzOCpEcR^jc&qAfN50Kt{1VlFuE!TBOa0eaHuc}2EcN5Ns4Ze=>ghs$kH_Cq7W*Ia zn0eCZOa1uT)FbwD9@Y6Pk2QA2|1L)P=>J1?ma})r_IRN3O5{U49-(|9a>ku$i++q| z+!=eWh8cH;v3WG(&Mgn>h zSGf`SnI505ya4%?9$%|0?cS{{?S4~P?0>|veD}y`=0IszUh^IOY`i9pe#w(N|KEbn zpFACJyo`3Sc!uXLj1jkID;lKrh`i9U#IA_(66r8Dj1AaRG(~wXOrMP$-xM_|p9njD z;t%<*2IDv4Riyq59)>An%I<`>D2tr(k^F2=ex9<}`2~-^=;`08EcSoRlW%9u)^S(# zpz;EA9`*Rg%2M`aW#U})YvqgJKY09SCLOw@2#MRVUg#0n(1{ggf7oY4<7W-dgU#syN z^M>-7$lvk!J!Skn7XKT4Vf=5HHphnw{IV~K_68)j}X zOnqbLc+8q^_)Wg2!srOIrW;-gw_6VQJGM*tPMEb{bY#4YJwaLQBwnVh z*g(9ZdWe_N7n_Nf;YRoxk8e;GJ8$v$cI6w9vo4sj((bpE--f?uS)S*Q{l0P&{3B(l z^GRjt*AB~=6O6@fQ|FnmH%Eb(&qnvHyyg6!I%9B?q6YFvH zUOgJeK;#<70K3M`^>hx@vLbhJ#D4jX4wuj47*k?{gl1feGCmo{_=`>Wxd%1toW zOg-np?<(KObA^1)rL!ExLzL-{AtU^PGTWChS^^k zCN9O7drVzMF7|)f{)a3F9K}CW7W;{p=*U`MOuP)!PVw^|zofha z`R_btZ8G}Av-k~@P`p%$#ZD*k4lM@la*#FTvMFN4VIs*e{<8HEq#O3FFH! z`BJi{>eGdiy_Jc3$t>m7@I2+U@M7f+@KR;sP;$63eJT04@>{URS3a{@qVbi_-IQp2 zL$N{QOIL%EZMLj@ma_z(ik-%O`eSU)NB#w6+Am?O8M!cH&G0JtW{(+nMt&#qyOejp z->@vN=ay_&7N0+;{20uBL&}Cvz(2NZ?0M0$?DtB3sf@iP#MI3vC9ivOd|_;$-O^;N zQ##O-yO?I7L(E(~rR+V74I-~lJ{zv{bY^(+nacRAbdIOvjm^@7td8`h^axL9y_HM9 zN{>-)f=|#o@nPx7%J`@BbE|%5^tg(>sSn9?aelER-XP5X>j?!-__rl-vn03m0 z{&YEV{2uXB$}PyB_n7fzbi_9Hcv1atDog$E##~0*uFkSS9v3Q8f7wWn$0$?3dR;mVGG(d1)pEcXDQi=H1MX6O8>T%|53wsFE{5@c z8F4X;@5|U@7`_ocOZlttrIsbWWmhO;SJ@37-=w@8`RyKKpVS##kKD!XVfcP44;x@F zc4d#K{1W8sF(NyErc8ZhuUIzr&}UOW{VQYaxco2sn8vF*nm|5TYc zrk?YdInC(bi2T5!%F@R_c{*=;a>kVD%k_MgJ}cI#&=`dxXFfDK3qVIuTds{DmHpLJ)T_SB{8jF+&MqX z_XQaL6R?VlltqVr8u==iej4tA@3k!76;MGuL>?}MA5$Ii$rH+4uXx^T>t#>w#u4$V zc+J!KtJW#CQrUqnRr#6=IQ9zk?&=#)UhM+s=UgllVn0|@;XUgJdVieW$TTlLbW$`mHigezM7S4*sl4c{&q3d5toDuG+)X(K$_i`>smoH1TuQfu7D%Th_>z zE91|qw5QYR$=j40(dqSc7$eTl^8HbUZ$alAkIz@e&sCRLmieLTa%JhS&Tppg8ao;L zRkx{*F!xr*Z_=-Cc>Hb4rY{eA{IIh0>&G7J`XxCd-=ksbdJXnQ9bfVp$|^U$ za`|2f_6(+vufYXcR^-K=oOqc!MP9G+x8doYe748)l_@t~=P|iQ9`Du~d?nv!5!I=2 z2}Qr1?=cAjbBsS$b)>A0Bk}Y26Fr^JsLl}N8Y5E=u`u7mKuzPXRwmBliG`61Gmgx6 z9Z0|K@|ai{`4r^aJth`Lz83l89{)sn1M+7*{)O^+$Qe_ntT1EB@I~-nJSIj){utl2 zf!z^jDL;Xn@nz(~gO%Tf%PmtZm@r=D*gt{)jJ|M#GWJhk-ZOIH{gjV^=XuO}WOT53 z!ZME!SN;NW)+3`Myhd5fv7hl}{}*$ zN#(*fD~tVK^Vr2y?7v^-!Vf5m&5wBOVk-7OqjKRFl*Q&>dF)~;_W#Ywjs5J&O<(5n z{Z!c=GuDh8-%K3hG2_|DcOqvkGyNqeC$g_Fj34B?ydq|vG%WQ`RmKk!nKO+XKTK@& zxJjA5PdvcmMauYL;-MZNrcB=_9_4YfGJcTn0W)n0(;vh5LB8`vSdNJ&D>K$6o)yor z6S2eSh@3HC%1VE)_H;S`WUeK0}%Oss6m`bitP?Uk+ar&#~34S*9(~ zxkLFxn0eC8)z#lu`I*Qc@#?|r&M!TkKP#V2**9akd{>TX_dY(;pQ}v2CXH5p z5Z3V`pJA8p#4&Lxg6ov&@1&2#ev|J&Gdd!lqfBm0TH@)f@Z?7*Z$Jku0_CTAvn&eOTrlV7U*7& z^}oFKF-iR&iXZ;q>AbFGMgEpD{jN#IIyE|v$vj+BpgQ=chI(CFHKm@sLK#2Q5SK`Y zd^L88e5Nw~sUa?rj$4C7evs7+e*i!%MLAuf?luP5K4jDKo~OQdsw%IQaq zjtlWm%@rz_{xU9%&C=f+J-$U*`f|6&#K`E2{onQYA!X^yk3D8SHTq)za~`|ciOsL^ z-ujS%&r$P+@+$ZpkKa?in(s*?UPfP-co`!RUzJ z{u1ZjWb`8WyUNrvB{$ZYQs~KtDHF#jC7zCpm&jRbOr6AZ$}~@BrYCPyru``kJe|W- zj?Gh!R7O|68_U$W8tzcu0-vOOFU(qFbaucOcyh*6Bxij$Ec!Pqi=AKd_%2WX2g=W& z^Qb3hjJWT}n!*?{{4hGd_V{l^#j$!&< z%Ni6hYmi}lUdvn;@dV5Aoq@Ft9?wulR=bbKtW8o@?&IV;yi7g#r}j|g``}M_yheFD za$;fhg}arXhgs`IE=TQIDzAcxi_sS*E{0db%yki8qx>53n>@bNvgy~I9%HMNHTDyO z|A)P|kFV;g(#Q9?FUid-7YHO!T5cdMv_isL5!%ou5XxJmlt4=>atTRD(&o*)K&Z5Y z78NThSjMS}lxnS1J6gx8ZAGP8mDZ~0)ERVYMO(Ex{m#^}j#aUIpJ(m0&)o^3FFL=^ z_xFeAlau@Gwbx#I?X}l_Ip>~x7O_d8>=TOD0YB+s^ri4Lg8owvW4s9cDCoaYjQ*Pb zpB4wS&+ipe=RaB;iQ)Zas8V!*&C8J%41T`jOk}nIYu_2nA?4>O9rDYy?|6+|exaoY zkY7GsG4w3gzT@*neAgdk2G0Uldw8*8%3NbH?NE;Piw?(t8{l&&%cH#2qqi$&*=-)r z4v&7T;upd5UXN$LN58{j`fd5gJRaANq-#G)8z1s`zN%$6g6Hds;oIfk^?082=-Q9; zhjQ2=Y?t<((6#UQ8;5fASIBeP$|1cXsu=xMQJCT3`{u-MDbR5Wt^!6Gu|NE?Vvd$Y zpI6i<&wap46(0pw`}19Md{?2AWnFEGHv)Gl-UU41(UBH@()W9GXJ^tsq4Zv0*h~1g z1OKy!u{UsXOqMZo)dx&c-{D|zl;AxGj-JBrv>k?hSym3TUFJ_F=GlFM(5vkI5W#4> zeE-74Dt#7$70&L1>B{WI`k^0 z4g(f*yz}`C$_XID>{g6&oD+qPa%QjMe&GFz;m_<};TZrvpcwMZVZ~1Y->3K_@coKk z0Diz?&ei6q`Y`SAsNy8>F~vo|Pbj7xjw_x3{G{R(@Cn7!fKj)Mi%Q^=ikAXEtGE^z zdbqs@-{C9xDCjRKM*ZfLV$@0Z5+2ma@9zbl1ct8MtJ9|f=qeaAUSA0Yjn7gD1}#V_ z290x&&_UyOY=S}K^@iX%z%vwA0V6H+8epUacL5_Ucn>hzDR@6H+9~(|@H)l2f!BNd z8$JF;j~{YFnY|uQzv3g1vt99VV8|sufA`1xyn^$A_bO)Fp_9<30pFn*b;|D^S@smp z!#a1d?0t%p!1pUI0)9X-Wj?5Q0x)!v``EPSQN^t5QN@+O#}qFGenN3A@Cn7xi|e|` zIRJc8G4$dZFLczy=XK=X_1(bFTg*LA@RIUCHrpfokR36Kp8}34hU`c}F=RyY6~6$C zHcQzTfzf8ckR2(pm@dcP!HN!$!Sz*mP;X?K;^V+G6h8?(M=|xOQcU?ZiYb4o#Uj5} zG3BrG_}6><8$JF;kH1TKUO?Gi#jLAeG3(l{{04YHG3(l;xCnT+;u7FJic`RQ6@wPp zulR1@L%QBk4$`vr~6K3r1a0qy^UiLnpzjfT5G%HNZ0z9|1-gp&tc?eu9qy zLqEY!0#_+M0Svi9e+qc1;*-F&ik|~sr+W{yBf4HO+qF?K+tsMJ2)IQt+7WG2JOQ{% zF?5XfDrUR-6|-I26|Vu_t@sG=9>qt2_bNUHykGH?z;`G<0enF5Q^1E5p9H>J@pHiU z>)wfNc|dUz_(8=*z^GgHSJQw|x8Qlek1DPNKCXBdF!T@})E|W&f*~&oJp_X{in`rz zd!x@QX1iWc%yzw~_zBrM*=O?-z%kv|LFX9K^2{D|jv*}=I>(R}Tmp==;0eG;3!VXt zwBRb>l;T?8GR3Qa!6$n~)-^{lWHXMq&{AE^q+;;K zPGY;u$)9DRx4d&T0sNd|*89B0ToYn1>E0Wku~QbacpNA9bg zf}uma1SbpPh)+Fg4!|4Vn7Pi1 zH!6M#^cJ1#D5uS0?mOaLnd`53ui_^`@7Fnm{M#)Kb^#A$uFK*`yWhgcck9?E{~pE9 z0q?bA9Ap#UZ!y=y_#HY1Nk3pQ_Zsm-nd`Xt-HNAzepr2*{3tJDqz3r@%=KLyc5&~W zi$AD7O#UN^AtQd&gx7uXM-{IF{aEH2F#d#M*d~5leU)-x7y7W+;e_=`kWCzRq~Fp% z<0o;+=KShe#WO&E&ibD4KW{Pj8ho#>^TP=46}xNj2<{o?sGR7^jE_Zsl<}(=?kPE6 z;ux3x81#!@e3I9ja-i=*e)OG;Wn=^sGV~yo=?h-_IQ{^2 zxqjhwM@T=E>7(F;M}I2QU)+Z~evS>-cM-2$+=t8F2Kq$cuOWYLrcb%g4CxPM`Zsba zL+8HE-EZOk&GB>pCTlwKxxWhORT&@P-Xo;no$-h0vmPBbboXbtzB_)d@8_zWxt@mf zr5T@zp)Dc3KjS|!uU@WM&X;13di=*Se#P}AlmmU-eV#bl=;(3S+}-oxoE*|?Grq^U zH>9r*{jj`eTYGQ)CR5(i+igEv9O`ZA?=|I(^}Y3`d{a-4DerD-t1lt?g(V zhFaIu*3^LZWE#QpHBCLk((AT$Gz{fk*4{o0X>tEhVof^?Hn^H4O}%x!^}U0dWvd^q zQQ%%yGgO4tzitpco$iyiHZ=~{53FEyQ*&!iZ&Nq$qWZSBP4#D*Yt>MDvt0GC))v+? z8!Y72u;d`~s*iNE4x!dvTbEwkQNO9JX<>bLM}0%vAge3`e`|eP>y1rot5>h_jc`qO zYp)PjiaVC4+Zt|YY}%53YhP0zM8HGK;Xdv4T^6_1_w-sXZR~ArR|Z=IuH2*S>DI<{ zPg8eSXLs*RkJ?w?-J5QJZx5xR!l9%lX-lK3+Ss(IuQ}b?vAGjNM{xb7P2DUd9$`uF z&q3+>?)r}ACO5(?&oHF6)(*78W@C`ztC7z3_NESJUz@SHyB@859S6RXGn~t^w9K3# zW!-vGs(hSud7O=J3i1*-UyW}jc!t)CIVwD2il*U{xXPvo234TB!^ztWf-jG4aPnveC-0rWp1jB% zSo^Rxg@==O3n;$4?MV0Iq<*=Y$Mzn?>B-~uiFpa9JDj`^g5b-05ozr0L>}cZkDu6^ z`0}`)c9!;jL(5d*6URfSHJ&5Eg(A?qV{T2k`Dx2}}{rGh9 zih!91c>&w*$tz&rKZVmBDlfl-&oC~yh*^myl0UdP9C0V@a27pvdeH% z9_2Dkd3Ywpmp9@l(of=a2l;UDUiu(;Q;~N1jn_QNTTW)2I&UQRBe@G{cQ|>AK_ITO z8DHXO8BXdq0Vne)56`#w@vp6+n+)`8&5Yed@VhwrFEd40g1etiF!c@C#LoV+d& ze0kfEF2hOvQaG7M{oajFPafZ=#cRUwaPr;(iZAaFiqTIfkA3Rof$qy2^C;vE*WM3n znJRqZIPw7gEyYQBWjLL@2Z25Pis>utJ9m%|2V>dz`W-oiG}!-_g{fMd3=vZ zPy?DfoV@RYKwM=rzMR148l2RR^)rw1{)kUc9^YqS25`E=$$Jq5U*3A8*>{wO>oX@W zGGx4sJBGZ&INhQ0B16X8m-m3d$(sgDKIq5m6JI~Ro58HZ=?*7vA_&A)Hsi}j@X4~& zuN)`yDDP5ydhH!g{V3BNPTpJ)e0e94-iVX(sHc;+7TA+_&O9V{f#wb;ZxslhysuP& z&-vdh&7*!p*0%|0M`XD64q4y6%Dz2{llslU>GT^iJ|?nG>hBJx-;nWf)bUZCvjz40 zIMQBwC)R+r+X=&`lXpmQ6+Uqs1z&JC0Oi3(p?+TgPTLl!nqXn;#ukefc>!$C-Y$U=z4s5^420h?$_(&bq?mc?rJl0dIRVFD%5*FXmvO*$H}^q zI62>E$~!Akdd$3d#_X9h=gpY$##CyC(Cq)2GiJ=4J2#b@ zJ!Af?IYQrFJZ(6Onsv|CyPv{m#k#YZ_yhRc^$jbr%AzG#IltFl9?2cl+jZwpHI^9vnDn z%={{2c9xpNz9pt+XO>xCu^R*JpsC$?g=yLG&Q+%RV9-@@CuxD121}q^a>q$?Ps8Z} zv*Tn?Ha}&8c^gfzZ;GiIfc#rocOrVvyi$`|Ibc$dxoY1PX8ruc>6iEZ(zLu`w+ZG$ zhkaRQW7S7YE$er3Z>lo))Gr?}H&q2?lr_+7YAA~`ojlU#Z9IMYjC!(7$@~Q5;*)iv z9nq?%>-3nd3hIPN7z51Yy&$bU?&s67ACUd^vk@?C&-Ykl%F^Qd*nZ%CUmR6w;+r;l~l0GpvoQ4k`!nxBVK3Hl-;!N(VHVM>`PZ@VDFuAak zX}Zuv_f?|bAe-%G9q5Z`w^Bd)8Faf9y1}=~&>vI9o|l>A+U3bhcHDbaIs9M`%hJ}a zJZMLm#^-}}Oq!${ljy^I)=N3C#dEX;$0XXHbZv%?MQkr@GeO$BL)&{f#v=L!V{wkH z6K(bS3bJ=Wcj}u|KPrOGC9Dg5Fm~P!lcYSB9a3)n&UD6>RR>HF>?&=6Tvfi~ z*+2JFCzfX&Y{PK%?5$US#wXg}OMZObjrs#%gHQ2;;q7Aml{SHGUI^zZJ5Lo+*0iY1 zH?{Dmv$drN`mx<&1GYWX3G@NzMcXi6>|*=rINl+4iOlXMCUYzojX_5wmd$h|7UxGa z7H`Epu}DHvkp$NT6A7~TAvlYx!PSu1_l*}f)T{5$CLnt~`NR2r`6Ue1mv0N_rr=(==VZiTOcrU54F~f!@$j{-w zDB5Uq6S*G)VNM>HB;pPt=vw?q5PlM~4bA-&ct(p3xt{_3oB1(D_Xt*N+i?XItd{J& zvB=&t0{=`&UIoZUL|WcVLX%A2VDe@muOep2f)gIj_i!?q?l*a}QSxg=M(S&YrGpJP ze;}>E{(}{j<-HN+Utvqq^4f&FOT3ycCDxiS6_^UGX#sK4mc5L)$l}Y1ODwJ;o?vk` zaZ2_YCP*-TPlOvad|kGJ&>AnVmUv*4&{tCDK<*fsysIP;V|VbrN94oOkcld9Z{Ax# z`;nE0c1C`r^3tqTZB`HZPqihRfLH7m<3v6TnUVkEsWNG@$nQssjS`Fy6g|gE-a@F7 zw~AzuV6GO{uDs8~X;&oET_*1f!kJ8Wo4hXyV=}$f@CH|C%ZGs9qPBdPxG1EFGfYImE!@A$K>%UKK?*4 zQ+bSv3ocD8gqH8+m)XpbM8Z$xYodl_lA2hIE3K{~O)O>33{5OU&fDi`Vg+;NX#z7) z;sceMSOsN|RA~ZEi6{6qv6?wcHGwU0;y|q?t|r?mO z0x;oZJ(i_8a1Ya&FB)}%{v*|J{PDcVoAC|*kF`HAiV^P2%pv>@>(wGN;7 zFcpV1=X#d8TN5`hai1pIm~i8zorxow)4{}}nt&Bd#S=1}!f~^IBL*24rvD`AY?n^t zO1jvLe<3f@3xDJ9lIXKriJigvk+`g%WiU$uN||$+hEd_@nmz|Iu0^_Qf|b$54pF=f z^xUx40Vz>p&LtzeJuz?|{(V3^&l28Ea&Uy?f691i;&a0NQB<9^1X+)XpooF%LF;J1 z2}W@QxHCn1KKd)DMUnW^DDsC=ewUJXUa|_{^oc)MD7Bzc+&tirTVY`tV55c80Jm5; z18}E>Tssd=>YHaqjKmf4s7ZY@=b8~%=yJ}T)Hi#U1SraxjnR;^VN&1RIc5ZE%(-k* z53^8Bj@<%{fF*KTBYYA9x3V{r54GjorF*OqB$td>2hv|;)*S&mW1L%j9h+y@LWUo5 zE76Gc#C9bbfdP>77rXk5fdA+GMK=(&DKME4aPQngnl|UK)RjmkL76Y|8L}sLzO5^X zhULzWNf+f7iMGknAQefe{3L9c`!-t&^L*~xv=p2w_ia|gBpRLjHap~VFSimf2T4U4V88)IVwfb_=g92K7@Z$E&MQG1!@kkbIQA4 zY7VT5eTpdu^=IUDT0u;?1H*u6{<95nA&DJupZ8Z0lf zZ7hO|=0`=1F{m(qo2_*WOql;mVIPAIK+jl=9&nvK23?S|!FD#|M!3!%12Y#)vFeP0 znS>gu);{x#TL~NhmsUPjV5U z%nSD=YaP5lxoC~U4K<=Y^nm1e&;r8NqS7HpfHZNO7=}AY~f7J7o&`Q1I#hIjJUKIHY;3< z`fEu?=X8u% z;GC{FmFeZ;Qc5qAUd!7d3KrAC8>OeB$BN4^zr857DTamx6Kqd0=t0gh>p&JW>=hn* zo8na?*g8`&Y?-sc?$e8D%MB^Z4^!rBD6{wtsCVsDi!pzXcyXG=(?S1%ofC@7q58kC zv-AphS3{S@GjWeK_l{(Jce5#;MROdm^x4FRES|%vA<>56J!v~Vn)~S3rLGnM*1Uv+Z{>s@PRka1^-;p;9dw}kBt{0$tM=na*q5=3v zUJFIgespPmM?6XlZ9v!$S=)$k>G4B(XaqRl*8D5i)(^^B;y~9=kvCgy-{)zY5N+RSwMB;27DnJvd_g}bO{ng*oNvqNK?-87N+Qruv>44~|)j9mt2?m}jJCKDY! z1`DJd(}H&(^G~c*jEp=+J&_|7)FJN~D z$@k_!<9-2?qXn>d1ltK#(pJc2jVexI@lB;nCTzhUFP zMiRjn2{5UJW-#$Q(qG*StY{5O^9bsl%m3M01vE^LAwzz!MH$9tk>NeG4_a0ctd(($ zfj)BOB_in>HZwrO)?o^Oi&4vX-wIf$b!p=;K#6W!b$14A_RUYZF zFAGQV8Ot$RIf_%318H#BJao5|F0QnBNF!{M^l>x>lN7HJI`_AQPZ(&2E6?ds`#DuV zCq+dTFYv6a-BN~W3}lfNFQlwb2|Zqj<$^J?aM4OQU0HI-@?A^EmdvpbIu_CBlx2bR zg0Tx*8~f$^e{}>t3IOg!aKJ}c0k*TUwv2leLut(SNg((YK@GrvNA|T~)Q|ZK3Gh#Z z8$(}?J)cP)beeIMC^EK+NdlP=+(;jb-jN|c_G$u5GjgC0O5P2*V>e53iKUK9lC+fx zf?Eh&i3uq2Wm4}aRYvT3L0C2;^Bh+ZxSk=`$0Uz4Yol_N@t)(jaP|70n+3;D;K;^I z?PQ>)aZ@Pcds1?#mY+b9OhzC$Ueq_Pjv0Bv#rnkfNF~HHU9d>86@h{2O?TC<&F^P% z*aOEh`ESNgfz*fnL7$D~GWYc9@f`X4T3j2(&oawx3G~bPAuL`R!jkDB95XqDB^4nY z!&lhaqhwkL$4m-g@tZ<8=7JEGl$&5=aDL(FylCOt;*mkJ7=Bb{^71YN0XK>iCNLJp znrPuAd6(ub!=Q?5BF;osagdkCoB)aJ0*@^b1j|N~np0|)jjn)cb4Po;c^Te$$jcvr zdg0XkpxnX>Pza0D=pb5{sUV3$39APSjg;KDtA3OxGLH3kjF~bH)9{#J$~ddZn79ZX z8y1UGzhW(h_E2bvmxPpYp$5V{UfUpvbF}f2n2;%l-@lB8B`Q(-d90naOq^qFgIX>h z$DEWB&|FI>Ekzejf^oHl_%+MLqHkFYc3U>uHS_$bki@H)3w#NjAg7cEmyfd@#U_so zMrBo%{NqBYe`-AJn+W>(LX_2dn7k+>3j3pTgPEgO2WyMhwe?808T4xA$%nFaxlr-T|N0>6s5-KzHz#5#%T{hb0UzV}u zAUj^37qC04_)D_ta^x!bLf4$tnC0|wa-_GDQp%)(M{Or}p<#@XnR8E5ha*SS(A@;*$(Lk>@GZqD@>+;}fzcy?DTSmTg^ zgf$suybQrox&P^%10zg|AC3QsMM>I8Zw_F$yv6|FtQ#2FI| z&Is#x4W=Dz^RQ$_ba1sJ`osHwl^X5o^1A(RuG;Av-Pe*48-1&v_?vTl0bzYTNw2;^ zi7o#Ra-3ShH4d4-61wudO4Z}9gs%9olTOB4ha39qTv?OYn%o~GPLIzRo4*9p756~Bt@?e3i3)7RD1&17eD!}RWYMW*4B_4uvr4XwTSIk-bz z4ePr)x8m2j4bz+IH?^*B?PzH0YiwHIjvt2er?Ic6OwYESv++Zh_00`K>Y7_VyL^VL z@oXiB)6Tq7W1AaZCA$JvF~&Zv-ay;6ZS6|iWNSy8BlNa(H`O=3wfqcHk5B5{bbWhs zx1*#Rn>N??we_ZZw{}e9Yg_gNprKPj4f5fiaJS9H4hM;kU;j3#4NCw z%2*J+vGNeoP3z8`eBPvq6_Y_J*&N;0I|ane%NHyvEuA%`qI5wl=#53Ai&MzHv^*Az zwh|SmLR9|gSY+FV3J}{-G!|`6q5O!-YXPsv|48)wP7K-YXk%(8}pG**49YklWi{_=GJ*jA2d2~Adr=ru#<-g#H)C?5= z_zr6F6GKrS+d)~+n&tIK+=YyIv~68<3yI$~z0o<96HAftksa$ISzcwg;rg?5aD(4> zCTV{VL?7G{M89L!T@dX{MIYKx9{rZ7#Ahn{gb`JCODj*Ab*SX+JJ`TK<6XzZ)Zou1 zg)Wt5ZlbrR+gm$2yA59)VA5L~)4i#%tFKriLBnRH|Qwzk&h7S`R+ z+u6QJMXajhm*fq7-I`8!&zXmzhu0HyHa3|K{u8~L`kNa1dRsf14ODLKsBcSe>f3Dk zI+$o`O!1LutF0Xj@^*vfCO7Cz2VeFvh@r8yr%Q%eYY$)6Amh%yYk_Ts`lhd^Dcy}) zyL(!O-=1xy{#;s#!C@;XU|Hb7MUSTdwqYJ>h~Cq z?asblZQvEF>hRD(?KP{?Z{m-1_(BNN*0iOmEkn~ce55gnr#m3cq-(ESv?9HF@uIb> z>y}-;IK4(XP&%Tavky)0Xu{hdHZ`@>Z^0yEpmjZZMLJLW!F8)?7mK!U>TYZ5P>s-x zEe2h;mSr+eGsi1phHmdN&WM_(JB8%$egM{`R44R*l#9@O5B z;RM%Ar+cngR*S}OZS2YDzNULyE#KbakF3tFCMe+zwbt+@AqKC7={D%YwDbxG7h64Z zF1sOZ9Q2#iiJ8P%7+d(I7n)w!5jLv3m8AtAz+vTlgp+6ySSqy5W`F6ZQ1p8?Y_yG7T;DIttsx(wIxroBL>P%nvk~laIL` z)B6mWrlmzKoo$VHD-xzcE-ZuFo@rrk_crFEIa?cGuGY>?Ju+zLp#&BnYrH{i6+cbe z@xFN7qE&0sEBo3vv8HrSV=FdWm@FIcRv3)VT6RAcvG%4LJBhgXY>~OP+sJqwvJ%Ol z;(Kd2r*YIb*F%mhCP3bh=1hfI$j%^}>M`@!Mo>5DC2ZVV8=7kP;wbD@WwKgZiy0v^ z`#?wQ&}g{ylrtoamu~0On%>mf%a{42H@BjDIAL$YP89Di3Kv?;;OsMa0UC$b2-SDs z7Y6iZdNC}>%!aN$Og4>h5fp3Y{<5XLhs!eOZjQ0mo<{hUh`04ZN!UR2u=a0Qd@gu8R%_kvIMiW9^Jup4ts#sp6;|=#xR0gJ3F|bG{{0O!x`dr z5(Q#8JBx5;Xs>5)P}z1AlXX-Er}U>xvRHz|huLB~%Iz#*y~$37TlxAVv$?g~jULO` z)7RaN`GFo}ojA0h*e|1r_E@@SYb*BN*nx`|VEot-%&MuZ?I`X~pk8{WT`aL#;siua z>=wFBPYd3+BwG?upAIF3Tk$F}G|1L(4nzl-uiy7xaqdJbLwRw=7Iz5xpQ--=hY-%tCeo(!Nvv7AtTQ!I14iD zJFg(Bhm#ljp|`2s&M#PpZ?Lj3fyoBUIz5}K@-x#m#sroRnSXTz+JPza38nCgagbKw za?{tr<q{c6X!Ko4HC-8<|2pZ|spA z%)^+EZ%EsVp!QAvBG=U4ATw9mzGBRJBD!aD2Znl&(F+Z`X4(y}9p{6($2q&~A56;=@;GDQwf!sOZ5QCHYlN}l?^Q5?^`Y?8P;`6e{v|~Ybs~i~E3pKQE zZpC~g!wCBfS@7h7Wfm4-ENcB2zB-?~tqmQ3PO9@a%XGKb%Os9H8iyKp!**K*$Ke3w z`ojUx)Xk+Z?RH~i$B4lKD_1QY?Q+=x%|uzTjcmiEH{}u(^I97u;0x46i!Mn`wfDqU zty+{)|4Gf7KYiwfc3!miJCzyr?PtMhrk&8)Iy{*UavqA;~Er`p^ZTrskG$91_` z)zv>OG}U=m0WB0%6Vf_>771--q4_ED3sZLnC`Cc}{HF(RB;(&5@<#R0 z^wf-8vv*lx5@KthL~Smlp{;p~A+TC?@K^k^l$x4-0BMRNJm<36FDBF@s~M} z;2n27?!+Uq7tH=0crxP-Smr?5-Eo=Ca7^ z61?}ZqlY)fyAW7QrV5+yHhs3tu*>YwTSc!t)A^NWu3EzDGMlX;Fz@3XmYl+P6Bl|9 z5k06Sa-A|r&G71D@Qt5AJmEbWUoR;rFAU9GUb`D0gG$@W#LRYSv%N<37f!jl3Kgj3 zrCFGAHzq=Yy9woWKxQ+IzJ&jeb>n;%u$u$sVYtDcZ-V2&(}_+8&TFC0@X=6b_~&^}=dz5PL2WGe z`0;F^tJgrElq0+^f2WQXHUqV>|~-{VZALL-iy}_IG+6;-LLmJ zejDU?Ud-5sQ@^tn=d-xu@$p5TZoVDnc)Hc#ku+C!si(sl4|jQWp{<2(-NF1Z8aU@J zC^ORH7;S-hoUvPi7l1J*yLap3jYIam+dl&R4O(^^@O+E2Cj(bmoOl>`iNyub(bQU; z`y}wS7UwSp-e_?S9|FRDg!)7u2ky4Gfb-#2i-QK>TP)5`1HaGWyoZ4ITb%e5Fuqi$ zoOl87eHKSo0e{xwf^P#Ku{d%C@V6}HI50o3IPWRoUs{~S%?Z|S%FMkIb{U~Os56*g zapVucQ!S1^0*uFi$)An31XUJi!H*8IQD;l-(zv^e*k|_ z@giWXTP(}?DFN0f;=E13Keafv4;W>H2mKj9KjH}TBT& z{tp1pwmA0Bz?WN`{d-{TQF8BrT(~9Q+tNvME1AfWUvyWmd#Vw9Nc6^k@QH-7VM2q8( z0Z&tY*pqP=s88-Qz~Cd!$6hTC`wAU(#y46_ABaO&(zDR+_;$q?0N-XY;|wrPhLpVw z_#TV1SE3B&J<_8;1YTot{;z@SEv8>(sr)?hyv@?H-VXc^T6QKd#sK9MLia4~-|TCF zVLQ_E;WJri4{^Z>V9bw#bAbP1akLp@KG))0*ebi&;_M>eGK&k*#%$EbvgT93Xb*Ax zr@$*LE*J}p`9gT!1FT~z_jkbEO8*Y<4vX{Q7ukC(jwFFUXmQpIV6|236!7OPJ$oB4 z`c>-vE-+*fC%~V8uEf!cfJ-ed#GI5+eF|0qH(Gk`6Tmx_XF2fWTJ}8Pe^s8VfiZq4 z6Ay2ggxacL0BcXe(t|GmkG44L-M}a>`uqs^LW}dzr#bLZ(j$hN z0sJWUJr)PL}0fChsQ}=cA2z&ski!7QUkW z6^BpeYrD)tz!NM_0-yP_EzX0U`RZc{_+GyDR}A&!Yk%ec7`V~$XWb60{S~_c_(n@F z_#E&%EH)TJ`RbpE^}q)$J%EqpW4@sNw0%Ct19AL+fWKyO^sB%atE6YcmaLmNLfu^7 zeG&L~mdR8Vc{S@7)w^qJKAJn*%Oe+&F|i)oXB?^(<~ zEzo*{J-{zoy1_hIILqSLhk%zU|7KwIja={-q7S4kKLoC~ID!5z+@*LM@Lr2^RskPS zdOI-ufMw17!0=JxyeYs(6+Z*~FBa!uToyiUapW}ce^?y*Ht-)T<{C00s{HWl5hIib zHXflq&pCSp>R?@o2H@Eio4bJ3PYT`xyu#A+>wwiy_%!GUl##NajZi1pIFn=cAtFv&s*fCI8Fff-S&* zRvy$lGF$O8z@shBMqiDbXfgLzBi~?g&UL_Vv^eW3;2Pz53-FbSu?~y`pXk#H44)>Z zFOBTBnETL?J1owB3HUaP6W;{>0Iuo4&tv3=Ej_pg81uHhu?npIEOKCX7uRa!cNAX& z9?U_kSK9J3uPpTgJwQK>d{Ox^=ZyTL(jUb2Ttw-Zhep9ZQtv$AqKs~%QcB0T7=<}P zWF7~uP9Oo4E%Pj zi~jOnj}AMC4y1ol@kfARM=5(B@Yj_7d0_aW@Dsycg5f)(f1>zjz|U$~94iNIWQyPe!ao;yk<#A;yj1xg25wS0WxyOWlsN$0 z>*1TU>^9Kf;qjx*!hZ<#e^7cY@CTKC6d1N+8zUbD{;Xoypa^w~{;Pm7jzrE0;K!8b zcfddJ@V{Hk7kw4MK9m`)0sb$Q16viLjL3Nb_)kg)&zPj*JAj?tb^|Z4cHl4f$G|Rb z%#MLS5J!IxI_wkDF)oA-`;Xb_(ch!=r$E0Q;~r&sj6s_P7Xg1JGk(XwA1Egaoiqk* z4CTWIi1XhD`g0cN!ro)hF4BWTkdbdOU)ec!oQE&4nAcTf(ck2!Ka8!mm}}x#^bP3| z(8gY4vB<>OCS7FqTU>BGcy6^gXEQL`74qEeVf1N8|GI~dd-xfP<0X)zZOMhri{na% zjf=-vEc8;v4}m_@Vzz~^cagfXfpt#HgY4q9O8*G(TPzO9qkWe@61d&c6Z3&@Qj9(? zewW3Oe+GsRQ+@(AE{3g%xpoxaXL0@`zz=#n+Fs%Lo~0YqQw(1X<^0xS@-RMK94C(w z_=Nay2k^OyF;?*NWlR4#@B-zB50_M{Z?i1M49mto0SsRyj$^-2vccm)p9=lcpm!;L z3Aj&X9s`DNktb^*@E$EY1NehVzZ&?XiZLIQpg!u){Za|+AZ5P*{54DG{pphLC@uqj zT6rD^hCj1xgl+kQ;`O)>O5K${4*ewZUj%)UmW7OQQJ<#X zrw+UyHa^e8qb$yX?Z=PxFno{vyq`M0)Wfhj>AWr+Kh49lEskRkHU5nm3<=>L$;1@H z9}IMmJq$6%u;2;6<2(!pXmoV)%2=>hWU^m9pf= z7!Gm2$B(^-&<}&>y^3Koz7Z;Ou^D0vY{8F$UgqJcik|}={USWX z=oi7zC4znlG5SR?^oqPmG4zUDrFaqWIuEZ`OqrWKj6FdpXPaX5UF0UkC>PnKm^$xP z{1ou}Jbb(2XF>m{;#%N)6gL9@lZQX6_-@c2R809t6r)j$6P6x^}d|p;rAL&P88$N$>IA&oE&)}Ee9XuL?~&nc=)%9_k;eDV(1k;rT97Qnb3DqmKc2}7`!p`U5GIs z60?dJ=ED$UJ`@c5#L7I3b_%@>bd1Lk&sN+8I>w{Wi7_4p_X1=63Nh9%!4H7G%EN0E zW8V>bi{cZ&^%h6+fm=KbJt&9YHN<)p!?v-lieW?EClVgwTNGm+h`mcOga zD*VKEDBcVF35)6Hu}>+6KgZAp@*Cm@6(0tE#KYR}=0(uIt90TYD1HeTW0rCPwgqEW z@RPvLdH8w7CqTzKC_Kb}w3v3_59>(h9yOk&82WSHOgiY7l#agR zK1_IsZ&i$bjPFt0f={-Sa!C82hd-j2`Jc8}?C{TussBTY599O8irL;rEoQ&Ok11xm zF!xFu*{*-FSoHs~;u3s5t(bcLLNWFHwPNbSI$Xb;QVe~vqKctUmK(n(fpz>+pDZ_i zA(QdrojzGQej^FcwSQ^Ptf`hKG7nhCZ-ixa{Bj-RHInFa4EPGgtoLe_KMfdjuha!Q zWYt?N@?D>zy;;4=GXuC^aTT!kV?cbX(w747^W^-4;t8N1@bDqUl>Y^bd5xC!uwu65 zapgg~vvjOUd$lhDjJvF#D^CLWzZFB@tp8EG8}~DG>=@AbU8>lG^zjyRzm|QTV$4_B z(-osnd5>P~bDx1wd?&&F<$*pEImGA>cmKqsbp0ZIs_v-6A3i%NdUgRrAHgSpVRvHsGj$V;d|tB%-U~cK`JpeL zd6lx113g3jO2sXpFIAoa;9AAIfLAHr4ZKD%`{CIbkr^Mr+`tP;OBr3DW;se6;A~|tauJE^bmg7 zfZquTh7AmK5?lp*RBz0)5 z0>&vA_H)-_9JaxL()R=JQhXSAx5dJmtw(DJ}!PTk#BF$Pym5 z@jk_DkSd`#FwyaIPfg zi&cV`GV@h%N^ueLz$ZS5&+xhrGPw4LJxR~c*oSk9o6{mF@2=~)ez^H9G9hz+Ad*tu zC%?3yr&^;#|!*=wzcDzo%qBL zTI93EA-)^Jl*^A|$~X1&m~#A-qP|?-7~wxyJnYlfXW^CSnZ3O5A>n2GLFRB7?h)nT z^5nte;WFGa$iwC7PxyALH@V=ETs){9{frHZZ_!Ubteva>p7>0zO z|2DyVQUgqC@HBdRJAdBpm$N?+qFcP?1N&{c$iiMgjyd}2KAg{$fIC;IG`0_CSaO{aZ+QG?tKd>i{4T znJRqZSnA4C9`^sCyk~%Yc_)z`u79!j_1n8NiS!zrlt=93zYI)ydc?bM@B1>B!l%po zBQVQU;l#1D5%+_R08k#TNu0cZwsd6xC&Hf52Larnc>%6he7?z>F~?Rrrc5699)7*) z6wEsVG}b#t^I-1)dvRahMV~-=6;5}!dZ&Wmwc`fzY{W@$=(Me-2fWSnDhvfd=l9Gq^B1gvR9(W3zF5P9|X z)g56ZPFK9O{pH&1ICHp`hfIP$#mAIm;`=%@ET%6Q=%3-|Gofk^{*u*}h$y0d} z7iixyX6F*19hPuh%>z1m1m6Rq4H6`p-g_B%?5~}o2dGVxnsv~5Ucjr zf9}5tF^<^wfE~LS$#`Tbm>X-O@k>rn?F>%1MNxI^&_70#sw+paUsrS zXu~3m%Vm(+it~ENSY%>5k+1W~Mvkdz6SYrL=#vWv41Mfuef(NwV+jOH&%=0q8sqgV7_XQ=25$Do>tz_PN5Pvi26IU5f{l=al?O4r zpQEpXHqVVE)tB`0x66JodXY#uVm`B9156CW5{$(J>m3 zP8!WcoGF2Xs~7f)Ir+=)J^cqjTPiuNrEP+7IKE(qC+8i7|F@jezy0yq{o5a#eMURkhn&~v{Tg+`Pv-p!e!mfO z*SqGKs;|fcZk41njrwQMe>kV3j_0w)7>vgNwAjAIm_I&gWk}hBr%zC}FZUH??q2np zWbTAa_1ApWDJA`ob*A60#Q1moViT05O>jx^xUBT%EHSYSj@KR+dvGvpKLR$tT0~52 z8+JNIsr=!Lxx|lkEty*+Glss_@RR%@l9|naCM&=cWX{iu@dqyE$!yZH598mx7NQgI zh(iMZS=+NY{O85G&i)uiM1CHqCi~;~H=ECq0Hd$W=QY-K_NS2e578m}Gk^y**7ZeR ztm}&;JHbs-=Lq~WC5Z}1-Y?P;xDE{VORVd}Eac6OS+Zaot;^D_A{I-m>%?r7{E&vK ztVSz>xi~*5t&qoDa9x*pBf4XBk2(9rFwZsFw5HX3B)LCO)C$5r&jdhJZYNSUR z62`htyalw+T6r4?RbHC4s?F*_|Dv{J6Yyk>bY-JOq5T+VWvy8|ymp zC6xTG+Vu$e)s|m}0Vb&}zk!>3ds0>>C?5YpnZ=I-|9Gm!-v)ls#=1^?mojav>%{k{ znT>UwI8OPMmj7SC|EDU8F_5!zZLI6Wzp-qMrT>`xwHE(7@a|O>KaF-*ue12)(6e~G z#m@rgZ?yOqENf$3!!u*mWAtAz2`DJTKe!()AFIW6a;%!;0kN(Vj5`zGQ_NICVqMR+ z?}bQ27DCH<8;e*I31yQU8|yj|sX@uv{H+27EXKb@MVeU3oEe%}hMaYCG_is?Hr91Q z9!F`lv91%5RZw<+m9oJp&FmUYtY*$qP1HeJr;T-;h+Iv!Rhn}RTf0URH-fFy#=1`M z=dF>?YOL!7f5;o@(OB1s$gN-;&{)?A`LgcYZcQBJikH4Rsw*&lm5U064(=qWQPTGqZ9;qjOQfJ95#zZ#H+A!BwqJPFq z8e&1lP1cEM)E~zY=O=>6$bYjnL~uT_c5H9~@@H$u22wpb&oe1Cz2r4i0I3|g#`&7g6#}g9f`k%BbkcSIuO<)QM%A9Lq4$1x} z=UN+)^T{%0!;E5PyDr~^#7@`C4XCNvhPh5e8c`;{MawiX(WQyaOxQ5jiAXc*`SO6~ zv>@@F-I{1+J%==LJoOUK`nCnEOgNa8qr<2lbnCpvJr5MD9 zxn}x1lD1*4nf{5S8Rj|>>18LXn61RlVEssplrY!wbkayEW5ZmdYZHu#YMwpUoC6ux zBE4t=(io0i>=4D7DdC5?t~(FpR`EP>y2J*0L$IIZfsB_X-a&Gr4}!AB z0~`=R8s<6?4LG;J4UrR#053@q=b*pP;e@#}@UO9yFRjcQ4X&?hWa&ZSr1RFH41*To zjz8Mt7S6ouM2w}snRGkZ=dCBUlYJf>EoYvc;Pc>TIrDUlE=z$)euSU1Oq%eF=#yUq zB_5XrCQ*tznYx3W~ubyBJTs^?rMrSc14oSa8QDgG=t=MlSt z6`&t;9S#zrKPjd+`=#nu=WTVq&kcM<%FbK-Hk@>x6~$=AeLoU-z(Sd~Ue zF1!SZ0U99p9dL-;eQ0y;K5LQRmQh(wB#FmuAV5o)I+SoB6u#2ucmoLE@(I(15^%dR zcc0HuK9o=aLZ8n8|8fKj4Jh^u^&kS4*oFC%I0JeaP#wu%IKHWTZK0R!ZhET;e#wf- zhgR^&J7`Ni=Smq2D>=~Dd0(=be+e_u)X@i&!36&amKV_2(T7RmJz2(k;}3=`_zD58 z7X}sj!>bptw=aVq+2W>GzGnT>Olbg!x%+}Ts~C0{)+XAT{5DJfiKBwT$GSPewfMMpPH>%dQX7#JS8^ZF&brTv4K~syBW|}g0nxV!lD>D%@ik9(D}AsS5A4nU95;Z-nFOki#N&1ozxe zP6O#@tcd_d#T7RH;o$FaMnBI8MI0oqm|71^5yrnE0I@(wF?KFxCkkGMAkE-k_lHq(GsRGE{m}Bl;dLiQFNDrQJwrv0&2a} zW|%wJhsl&R$6d}GYQqu7E&XGT?xvCvzqT3oh8bv65jTT!@Le*=EUK51H1*D8-jm5N z*vdnh4~1d?f&*M{<@bX8G&Q2(hppqh-*MXd_q(JjoZM;Y|KR9hmoXwWg#Kfgp>`0X zBd1bo`5()*$8lZ6LO4=r&r>$Op@PC6|&v~uueF{9ohZijVzbO$pt9z7SCt5LJ{Xy!SOHuUIGDQfjMd$cjw5@5^m zK2s$+K}S!iVv zStq;5tYw2^n4X`BC3;3&)(bLmNEu;uidPcJsYrTZS}$~QLNCh14t@1#tuBIU#o&;s zGkmQE#WSlRK=rr38O*-c`#C+BGuNPXdO|ZPXa?T&)%@Y<#8Qki(0{ z>2m(+g1%;+X+3!!bhY_~UWw+}&#`%Rgrw^n3O~JqL1##PogqYBInRQSur|}vAw$Md zz;N|24A(eT1BPpcVaPZo7}gELknssHTze*iZ&I&+gO0Ff2Yk*~qIot%m9HfP@>xr` zYWNtq9uPTvAl%oO;pCjPb6$T&DDrIG>CFw$((C85W`rWo<^W!}Qi$|C$g{bO zH$ouN^QE(9gd#Ie7U@YjDqYrdxU=VY1ATB2C&~9qTsr6h-s>{{9Goq~vHR}p3(O4j zvrsb(!-;w&n&;P!jXwgDH_1AJe!d>o%(Ufc?BortU}*Yme6L0yWb%n_LK-onZ4Xl58ICKM{wX8 zG;_Gb2_>D<&xC$Hp`W-km!n2MUH%<59c)zke*NrKdXc98{_%GU{M`b7lLhdLdW_#l zHd zc`zv2@i7yOnIFw7pBUYeisq(DODC32FDqS8dS2AXpk z+9yS~rY4n^mQI=k!FNlH;-8u2z;`Mx2R^hT1$ED(j`%IWq>5`JLqaDP-C8<`^!^|y z>O(6B5kCZC#1HU%XAq3(hxk)BQ~!aWyv!!9g_UW!TY}UiHm95aCJl;DeIEib=aomd zr6yECc^=@2kvn!?h!9`gC1VlbAo|CfQ~X@Pe=MQ@@H{JX-w~jzE1RLjf84xz1!P(p z^Rg;qkt~oaZ4XaE&c_4kt{>gZ{`y299oAcpsM>?t_(TxQJa_V>bIK=AYKB3kU*0^( zCO?7+ww#9=e=asS6tI7PdNaBNLJtO_ZB`2JgowlqAQ(HLto7W<6>m9* z&h!17>3yFSF~@I)PDtG!q|TYU;7Z9qCixFb{?0d8<|zn%9Gs0J+#yq znx5(!=$Y+Y-NYEZ)vMEWjK5j)rt0B>JTqz_16B?V)@*;rYnzC;Kg+!6&77?mv3dAl z&4|Lu;Bgv{SzyuBmrXOJBzgbvC-9jkauKEDPgV zqARoLs?MI?)lFyu!``}R%a}M3Vbc*M5_J0P(Uv7Lku?H;pp1~jU5w0h)*#H*?CqUf znyzGo!mxHa7ZO*|>6W&_*=$^84WrCbYpUxQe!IHnS|h;?5k=94ME1fUQ=7rDjbAyM zvBuLoGdgkTWC-1hsF~{GX)gdUqfos{6yS!}8`_r+yo|9hyZgF&)sa_gkmWGUFKr<| z`Sv6FYPjCBMd;PInXe(}Zd!uv`o7&F{{QNMcZY`Am6*CRBwfF9I1U#?chJmIhsgFA zN^aJXaEutCtDBk;oVlsnO+b(oM%G<)Nd>~V;%mlk1X}IGz+tkpxnX*Dy`l=Y8(^?A z7?72St6}hS8lXRhuIS?KBI2a7d*cg^A>MB5f3;w_HX!a9QEz?oBA~AfnM}M|s^pE# zYDPGvo=(9qp6&ln1J?SXYW+2%rmwx7LECIoR$=%eKqr0T)#BNPQEYv?$&ln&$GYOz z!pQ?~9q{AVx?r`h9HRC$1)P-#vwUj>YFt* zEJNp>8Q|3m>N+TPs|0N293_(-9cIbkRY2mh4ly+>1GC8TjWG1<2M-x0?T}gD(6l+)mUwD0iT%`f4I=j{&25`7C z3?HfWtPxqc&7iIAaDVObSzjUOs*SK3HhlHkl`EI6TyoZstKJe>-_-@TU-p_KtqzT| zn(ti%^X}7BFMVQhVIrs6EJ7^OwP7q$hE!D^JPZ>ar>YB+Hb(10uy16G!Q5je{KQk+&**Wj{b@GV4q zuMkIF=V^T>kk2%p$&rIUyki?_Hy%uv;?v!yWIDwRcR*e?aD%2#K_1gPG)?}AzCb7J{O2o{5Ad^XU-R-O4aqMUk{&T6jYr=z2jq>;q~zrS zV}_*h>_p}O|F}#_`0;pA=0N_rNF7%SU);lVcp#s)KdA)fyS@+-@@cQ|KspsB0FW*n zk{;Ur$wTsepJn->_Pk&Szc(JFz6*!s_-~@5PVqEPQOoSx)=G-jSu(o2pG5b9PBP-3n!6pF^jt`rMEvB zdJ%c%o<+7C-es33N4B}Iu#q3STNx}|E`B^|vLBX(FtceLyn%4be7HiYKuJRx|N1s_ z(Vbb7xsb^P#o(oKxJ@@%-9__|D^F$(+Junc-AG_^xLvJJ^tKH4o`9{--<@YDgRUQK z|6b5;Klv`C$qr);nwhKgDq}((%&8&IfXB1j6xLixKqnFqXf9rkql zidWZBkN!N_9nWnflLibsY4m*@NdZoux>TRfikdS&+;bFr%n_6*yS^6*qo zH`pQcw+UWbCV6^Z;ORNbt9PzfFMJ^MtCb!d{T})@+vVDVc7^=AJ)UoRbv^FMdDi23 z!L$F%8U7%W;SW%c^F973J;d`eei&3`<@nkeGL9k>FBU?Xp@be&D%UW>>rM=i!%E2rx>m+|ChaY0gtk}+J^Tt zGntu$A(=pcKsZbwY62+)2{b@}L81o48YKu?l*A+o%1I6y+6hSnt62ILinVA_V^u2F zT5WAhD_X49V(Z&dYpwNEthNQUmAAFlDka~2uf6un6Asn(|E~Z4{_FZ4n9RM`v-a9+ zuf6u+Im}*WozI@v`0V)^ANKWetRm9mh6g`S>wtQc@gxt>M+0YZuELy09O60)^BZyG z55Sna%7Fur&2`4dfaQQ+kw?~XnBPUtSCF1!aqxeDVP~NyfzPrydMPmMEb_S~yg+&2 zJElQ-)&jRE&*y+wD(1T3YUL;1U@>2}H5)DF59JN|1?6*ZP;lj9v-j$XfJ`=c2dGN}HhqfVq1Zzg`yGnl&_;HK*lP~Y*ithw|(c&Qd(bKwc zFK_R!mLC2BaJTZWfF8Xp4*Uifc4S$hdw}8F#Qd2`0CgaaUJR`58<__@Q|Vp6=PQP6 z{;HS!jIA5!w3zh`d`|HJ;F~Sx3wnXOEtayhE|DidcXgpmtxI$#@cSwUeiS@K^F9PT z&SLKA8B~8`JX`JqN`3gcMX*V69C*3KS@4tKr!CGN0eqdsLHJToZJrHzLA81G5n$Dg zadd;K8|xQzc81Re)y@(0Z~iP+Z1PE9wR80Ez-L=}6#U$OlspDDpl=bg9L59`{n4L7 z==;RklYl>Oao{yzjQ^xFrc($uB96WSj5-L04~A6#AoS<{g`|hjrlFTDW{kDa8x{w8 z14BRZ1Yr}7i^AU@IN##%Z-Iwe9Jv~Jl+s@ShTo8%K9F^W#lcm;Xm61T-_E+k;wZ}E z{(_{-p5yB*4keH-vN-S=U~TJY1h`V^e*&IvabyOt_OIXrz-mM8R~uFvW;3taFa&+W zYD4b05_YzNox*CXD8|CD+A455u-b~}!)mMG?|{`-*{DlIZDlZyMbuWoslaNh=x|`Q zl|h?F)K=lQfl&tSVAcblr}f$fywG9~_Kz&FIM@t~GRV(g$wy!#Vs4`r*{VDr14jQO zo%{Dj)K?kDGV+e4XP*XNQGMu#+{K0b;b(xgy|N2|Z?$yqSHS9H;dbC}Te`#`*`qwS zfd0H^VyeKY|vM-;fumk0<3o9PCMCKES-Lxt@RDU2eP%k-u1v* zU;dmi8@f^s?^k4N9Rptk{=KC$R&@587BiN0_Fq)~mw^9iaRAx5&xOc=?=x<*=zJG2 z+K)I`3XFCoj$8?>eiFJC_*~7K2fSE$UIxBO>CXYfhnP2uJdisAm`Bb|63ELVrha8$pV&Fde<3hzC^FHvVi#rX5JR65nXpZ4smiGV zhK;1%p<`@=^4tmhU&>Pg`~{V{2pD}$Hxbj9`zun z|BK3V2=x7yCvX?A+K~H+$Dk9-;#wxAe#rjSJF4`HfqUD$>|fm2LipQ(kzf2X5BOxI zcL9%A{21^g<$(=*!xoa4c&641<3R88EDwFDH++IT!5Hu*T9;Mr;N zVE7MtXrElvo%GPhfQv1i_Q@Tk^bTOu&Dn>0Xb3-iJQsB*&VtQy=P5?t%0=CUANI+; zROvqjUTtmV?FDYLJhW9V^rM_`f8ft)y>0})#q!Wrxu}ouj0C=4c@_abru3=6@F(HH z*qQrtAJ6XTm$~J>_4F+l44!@}_{p8J;}&gwUZ+-XN887G% zfhYKQ)IQ-CK%Zmjd@hg&TS;Fi1cq-&-oF5&-=*o$m2_UO=Bc0XdLge<I1tmMkkNFotd`C!#FE4(Vlr2Usx7@8J+i7rY-W&PQudy`Y)8{0btaD^4S)7 zuPYDq%KNjHl>kN^L}r8aUy*Y&a4+R40fs$==Xzk+Q+OT(F1GR`&@m3*8-TKS#9>dC z>wO&4`cBo#j5P{P4;69v{zt`^x>b@>~R-mz9V1 z`Gc?AL&|d{=%@qb2k!v>CvIPBx%n7hT)FwE1ML|_|INp|!1|iKz>rHG_O<-c%JU82 zN|n|j|Vmsp84SEw)*gT zp%3(vvLL4qY$!a}1M7U6JqGwB<*5fQQ=SKaVK>$*dmivaAN@3?F9%(1$oTe*RW4hm?_!T8tbAs^3= zl@6a|+;Yi_e&6R;nzs;mzw*2f{CgiA{hD>m=>s}^PcZD!2R0NrNwgbmD0l-f_~>Jd z)7BSq-Tc*etmdr(eS*@FuP^eGKYTXu8TL8`RWW^=EIqmj_|q19uzg?n5BVeK0^e$} zLB75_6|VzE-O0mifxbVm*n{sgRypa}%nN@_%Yj{lpLx;GiL;uq2SIj*r=Xw30rZ=K zVjmr2KKZeqoGF;%qob`wCixdy91H=&CrGFM1zN9A7O<~g1z*y4`uJxnt^vK?hvzFsyBOG0WD>(q1f$@TXMy)9 z24oBV4k%s#{FY+Y>jT9N!03097j#}T2wnt?ewU^fD}DfU^i`pw ze6LdRL%?X)H2qA)yFow8N5>rMt{ps#SAt8xbEywst{67qeNN#aUZWUw@luMRzt^F7 zH8AX)mJd4%9t`@Oife$ss+e-VtC%`GtQht1Fy5uh{h5!B`7}*`)ki;+xu)>mQG5#I zz|OM9CWf5_WBkD@))}0m_(ss7tMH&%0tv;)8^FiO35@dbV|+;SPxtZE`Y`-ocqkt> zPxD{mjJgK??86w#q%L)!W9&`ie=3IW@Y+e}kQ0n6P69idHv_{bgopf-!1maK|hkgeD%ob6GD5XG1|-Nz99{|p$|7HhJ8Z5whJv&dIRVk78@L)4T`CcukCofAv#l^ zn|=6Ji@nL9-{r&iD5gH&^kJ-T(>C$7T?l<8 z_CnxyZAbip(xDHxIhV4CvE~sB-_LSwM_izE=)>!LDGLf^ja1CMuI-31*9%Vv@Dv}O zt{8S>ELq_pK1cCO!1H_reL{6)p^ zudMAp++{JJGiKfE!}lw$1O3}R?D`e_CX9ZRmia@a&jhaXxaU52NqM zy`9ydpQpGL_Q`f;9ew;wsQD z^6@t+ru-`vQ@1rfe%M*=bxwSD#rL1-R{F(iXQ?UYk;(zZz-lek1Gam z^v6Daj6cG^0CbE$f;R#GF4KTDQ?Aebsrzk0Hr?- zdQs;7M)q(Y&lsPaaf)lfKgq{~HJg-0IWrW)U$W5_u5a@Gi}2Kg4toivK9~4-miu^C z`FO5TJRkg+FVcBof4Qd-10DV^7`kM`rh-$zcPU;E{58dUfzd9)gRwdr> z%E~!O@owNUAH6Db-zKM8aR@xHzueCu##kgcYA_(;wR()ba>Ow|Ib5hRc_N{W2B>8*Y8X+(`R{qz}*LCd_Om)nfZ1sWmeOm>wn@!daXyiLa%3uaY)^}08j_P zs5|$O7rX};?d|Mioc_B&AME2#`1nhF{HTlg4{T;C6<-gGdI_Cn;hf+-z)8hV0M{tq z3tX%CY2ew4Ujjyb)AAQ6#y9IO^wq%4id%sfDc%jdMDZSA*hKhQF7gOwxyU1!<)#$B z1bn^XYT!+Zp`+QXnDTE_ya#xjV#?pHnDV<6?*qO|@w31WD6R*7Nbv&TU5Zx&qYTlF z^@1$%nFKI&6Hv(5=`U0;@-TcM1j$q{T zsud$2pXInd!gZlwl;hPYE(NYvTn^lzm~xsGQx57Nc~L%NXbVR99_k|)-cpRZdWRH00sM~Q z*KvOXMM_zRfkPIv{R2_OmB2B@RltRc3xL5VYe@1ZeEcOo{t6uf$q!j_KLj!Ykmc^5 z1gaIIz5#rMUIUDe;9B6i%=j6oSIlzfD^36}P>k{ei+p&A;!@CI7rFmd4!l}1bP051 z#^k^T#UaqIR~!Z2q?l!GR?M<)R809@ilGaibIbkA2H<-XHv`|N7`g;@DSiNWx8jF@ z_bA5sz!Qq`&G%y6To!m%aR~J1b<8)wFDV8suwTb0(qC7682CVDz6-pim~}j)eVqL7 zD1I9Fz05oqKz^AMt8u>teA3_X&1VUMYk(ok&5yyDV$gW6O#Gkx1sVSj7FwSH*#rlx z|1ue6xsTp-V9x1l~;UG1~aL7z=fM;Rw6XJ)4E z!3DnhVlADn<2Al|J(8(Q=+cb-p=&cbhklgN(?Gv5zV(S~U;Yj*O-FrY4FG+(-bmBy zGy0njAALinE}Rq7{5NLm#knj^-<_!==dv^%ZSUHb&jr%-mojzdoRy}(m9YcorZgS) zlyL^?a~^SY-XoJfPWo&g9d(p`N;+(w=5I*b?ca$-uVLu%Q<@q2dtm$1Ctt{S`-7vN zTWK71`a~NQ9L1I{Lw?BQJIP=2$j^?BqS@aU9YyT1$;DCUdi?6>sB^v_ARTq)nBO9u z_`F7)7qex4f8>6Se^frZnLv*pCyl;j)vD1)|4QpvB7UkhdR3a$H4T0bb{y(ayy+jJ z`B>9GF!#}*v;OYBr`Qa=r{K&_&TK84TP|61*}}!kE`_QVH(r8`7p_tZSrUF8-y@C9 z9F|?yvZ@E|IHVXl!tp7X?c$U`{nINx*8vM zIC;B4@X0&l0i>x9<@MHcOh1Q@PafxAUi+mFC+`=a_~lW)lZW{=tsm}7_K??rH2udN zP9E+V^pLj~X(umV&mqlc%01*QLV6oM?ofH2vw6~W3w%EP^>w7e!@ zzr1&lUX71CoV<%c@XMnQl;A^o1N9v1+X3v87l!?~CQ2Vp-lswF%WFV-2|kp^F@@(S z5BFRB<3S{4>G*38C-0j`M)3(+@(KBVd>lTNAvvAAmp>vO?hzhS?s4St8s{VNu|FJL zkK@U!{D^$BKO!I2j?!-U;z9cr;J#e?V4LCyG~y5SN#cW}_G$1X0oZOQX8J^9Zud|Ao%6I1sg5`jq*?@IY)WB zfqn8upMmM695i=0dEW)WCvQzX(%bQ&yfJ!?^7aBVPX#_W#=-8{Ef&jPp2H{bOZ)Bk zs(+32Ny1_OIKEevPft}JMt0W29n=X&;3fR=>vsrzu06)-Iq1jVUb;RBWUekn-aixR z!E$-18WNFCUYz$Jp@| zoC5eU0FjLh&Gf>dBcz)fyFC!m%cq$TXt=a=e=t7yVebBlUGTUeWX7m=w zs)Y^9huHY&?R(6QrdK*l`yQ{PbDF6cvk~;$y5H+ST|3%MRVo_Xu^x3^k2tT=esCQMdNzhKLANk2A{QrWt9Nsg#(N!Ty?`6Hdk$95legYnQNl~T@6 zy1QA<+*$ESsRMPR>wglT)K*(Jx)ZWC?*V`0w1T!-$+|7b%W})%-P5lz@wTMd(KxHa zP&VsI{W_oaUus#;0qpcgx({3i z$^?I;`ydzJ*9&_vCk^=usu{ySxZ}m)vp5_I@4)vT$Zo>-;LpPr?j%*F=<|WzMT?nt zeUa|@fZiL*6|@Q8jXz^#HEqK80{>Ve-G{%1#6Lxc@HYS-&`9^yzDW1gayrr;@lV;nbu+(M%Q8+Io4u{bRWUk?A@nPbmzb|d9&QxEw#We z7g$h91Y>Ssye()VrQ0e*@K`ck(qv*SshU_zqSueHF=``IiEWJ9$TVUbqc)Nxw$a%m z(}@!@OW-*If4v^C5pg4D5o*b^iEX6&$S0_?M!M%)#7Njk_ZW`@*Gfgwk?tcGf%dqq z2^O${$5q}!mZ~;u1pO(k$tA$!HPZdHFpm6k{5L9-0doVt)kyb|HJFC7tmLZ*Rr1v$ zS;EMf^TnJiBHuP9G@g;}Bi|8DM!JuDR~Q-TKC+8YHTWLzMQTetE;Sd~NcWM4QTBed z>u&O^Egy#gD%F-hg7e;%usZ!1cyEctKLLKL)Z(AQEyFg_edK49X(Qc7eooD7r2EJ| z%CENkST=-XNsFHa9&97sM}Ez`HJ1JY`Da`FBJeGB7Qcde&zW!W@1SSd0*hY<9@=2> z@0r&|x`%s*=HOCC{&_hX(tRXw7SGs7_Yn>|(N9+^ zTOE|$k<?Z%JBs(8V3Af4|7XW z&F#&g(X;L%=iT(59-QXxOv7aTOr?dx86GJo>o4d+2GtA?mM&x?-80QO%DfA)_`dXCe}W?LduHviUU6;GJ8SoY>jc>s}FHV zteCxB)a-?-D2z=6d|3pP#?TZw=Zk2IJ+Uo)LhcY6@45`Z%;p;nvCmk}jqZdkPm;Mo$_k%a zBHzP(1;>`yT%UEhjxP9f=@W8G$avRe2zYyD`$$UWFLUH*6;1wPWpdbp?d`oEe8rx( zbPPY1o-S*!J<*;%VK^Qb54}@4@p1`8_kIeFWlwl;2mBOF;@E?aFA(b87Z07+X0u|` z$uTSNkcPiH>ira%NAV95%Pkvb2rbOnrvN86*^^7tCpkRf$Xz^EBHWMl>I0kF$9i+U zim~4L-q^7c)qc)c?}8`-2#y$*y?@ZybZC3&R=s+|!BL0V{EMTO70VrID+Z!f!d47P zTd^^VWh*FqjsqQz*k7Q6btPyK%<(`Iqj(rV9M&R9 zXA!v*COKn^jF<17l-svg@c#xM{y#1F@OU#5lgNlnXj#71Q<90KJF{<(7`7+*7zf~v zawbGC^PQ53C|v5o^Ol_;`tHa~89hoE<-!w}XBdtNc>J+Upj_EGtY>iHF+Q!JWJM;< z?^s`?;Zyzcd#Iqni8aV?WhM@953cdPLQ(e#Cl1K#5AEj7lRn}9<3H`_A4dD%C1$=W zP6tCn$yxSU> zblO>gpz%CMe-Y0F24BuI2tQR(JZ#L65lDF9g!~=Czaz#jnvB?F!-f@~G#Js!M${J< z50{`?7bb^{2rk_m?3)PW_(VQ!ynYp@jw~4hUgQskM~BB$#PQ%NQ|jNqa@Ek`W7ZFw z7Kr%h*LVnF)+4UgbqJibVP46|k{(pV9qYH@lS1+b*l1d_awS6EAcl;_4_YW;WIkG) z7~7mSypM~C#2vNIzOZHG^3&E_dT9${VYMu6S$SE@vL?neVO*vvM08rg7oiaRWG&*< zAZFIe%aF36O|EWQ=?i>?Ksl=6ZP=qg?9rM0gCi)d# z$XY$2k};)ha?}1@$wY|Sgl@ub(0n;k+c@7l0Cw5NnD*(EloaMARggP zE?d^poUkE{)-Y0ujTE$E`I03qh>yh>EfSK-Mt|uU46JGS@+%f2riexpv9(Tzu|Z^` z#>=4L;#CWqS{v2bHOAAzOO{+AZHIVTmn?w@4U>{?*keLB^$67E!i|W95lF-|w_LTj zsimfIHOjek848uw8+R%##wr>{`NAo7RiUkJMl_~Ou&&D*mo9A-P9Vh0lGsQqU63qV z!SoCTgT`KT3F2Yld9QtMjxZBn%LNKUwOH`6O^@hmsJ7^j_Zd?-gNl;!MrS%UPLG&6QaNo$>74L`m2_HWL(nlg8cVB#ug`E1bQY!~V)cyMws7`2GZ?3A#@zGf%sl_}h4ucpa4tLdlQDacp#-#mg_D1KU7p=m#82r01{dL9&tEY@{>vTN%EV zqAxAep#W})FjtG0p%bIY8`;S+LAs#eik7Cumo9E;c4LdY{kd>yW9!w;C|+hP_*jb! z0yg;ELKi0u)GHu*>54TgTNd(mfeTZ1>5Ap6pemHOZ1o}+qfcxgj-l}e*=~!M85zyl z)6$)u1D@@(OEKN52gv}c0p0Na=<4NHER+z1=`cy?@G>!@H#T#`nmc>>vda+YsAV-q z=@teGR7pKN3W1Q8UxM!At3^5xADklN4>rn_gwYe7`B8B9sqYxUx#Es_lb%OZ3RG~oYf zfx#rSBW57q1hjC)_*K#~GGY8^n5A@ZnAN>pZO)uAV^X3N!}b-6SJ&0eNUUsG($cu9 zC2{J+kBu!$Oc*_GwBAB8|0-4zSKLXif9&DaPtQ#-{?ToLGxMjn-xB_E*7ne?!P~u7 z1QRlYw>>`%`=DqW5A(Fboj z$??A_?of`3n~lX^k4qJ-HN!YJM9(v>4{k)udtf9n-Cxhi7x-~+H*+BEWV`eJx^j)H zCbM~v#y$Pafpj0Frdvt~Z?H%@&4BZ`DTAvldn9q5>GXl~xSz;N^=+D*MysBeWL6SRMIaO@gZSY*jynXy6>&~vHdNIk}7M@+8`SXH<=_XL## z_Q`WTUj=t?cQ)$a3J!k?um3szYk(d94L&(v@X3L_UAzkOePGA`v`^-I_#D% z7docxfE(axemuoV^Gxl@la`OX?)Pl;NB;glLchdAJlP9?K97Fs_Wa`bBfkk`gQ33U z;cEeWm_Y132s}~oxxh(_gI@tYQ|TN7P%n|+3XI!d#G!8kHzZ%=dwBQcU`nEe=fshCh%e>po!UD&<}eyxZd7OyGTrVL$Vt#R14O z|4{lS)Dw0SIqQMZRR!ZA65l%znMZ)(1H=K;m5&^R=ZC;3gE(9Pj5~y6TgBY9PkW_1Mrc+ITpiGhA%vjCp;W@k@7zV{27Z8 z2;2lPRtgX58@S!#Ecj{QYZfz(M&P>^OIfd4%$N%Stqb?Z;~r;}L*ER>Easj|!HE`o z==Z_XEe`w|7`7Jv{{ddCJn)g=8s%9H+-Y&J2^jSxe-`u&-mLg;U}y6yfYs(GQhkc#iTP0&Y-#w0l@>XzGF0hFNXEYQwC*0jmweqkz>` z;SON6RT#b&R$B#60#;jv{|fAE)dCx-t+ECItF0p2fz?)gS3jb*ilEGh+RB>*thNe2 z20YK|9~=nWtaYpczEbNL0Y*O;yI~xPd{*(hz}qb5SQxom@x8#X7x_c~4XnNz1dhUX zq=$C_t3Fxq!{|(fldI-4D;_z$0OD&F&zE<(~ zfHzre;0ugnAv)g$ywhU7#KAZgq;ro`#<3s{4+Q?D#S!>z_A3_i_ww0qSj>KwjW!@Z z_d`IaS1Sj0$bnA?{cFG{Tbu=(<)FWj9zr|hs1F2_!0H3x)xfHM_;bKtwEO|+o^yxA zkpM94OF5Dk^(4-Mujc&7;?NnuzpywA8|G-c1Tkjh98~@nfd6JO*9g5JLv+3x*wqDX z&e!dvER@p=Ww_s6_d?qXe;())u$(}C9=*=8^ziAxs8_zDFR}Ej4?u6lTF%i?Ps%Y1 zK))I5F-O16(u2=}4!h?%`gbio@ORK3%lv-37yK}-!>@h(uUmeOuf6`P{OCu$-cgb)N=n#Y73jdklIW1$K7~0p>Jyz$-dr?Lo z#*L7?=yQx4A@ZS541H2;PJKF*2l~gZ({jSY!yRW zN?HE}yhqo5s8j4I%R~Fb;Pb+>3-~uG2kjF3o#hEqpSP6fY2d#q9ex{w4c%S5c^*P`g7n^^&-E4p1I31 z7?gCs;C%(@BMA^;|1^dUf?;C=zjytJ*S&%VgAQL$^MBmO&$iLJGj^TxPsTk?W3+`} z%7-7P`JuC5%4ge9P6D5GK7RP3^Hqa37F+_JTYMPffY2*IzuSi~h6^3O$2}v`a&{|b zxlb!z0KCt~zdz%v=5@uh!SkjMqkY9UUIhJJAAa9ruM~a^o0CUyRB<`d7!!p~+*ffu zF#KL*LL~QS7hDC5x}`DfD46_He0aLWQWn~RJc7?r%(Bk+;R_X0&Jv4F5_pAT)Qi_6 zQWo*2m7n!OTL`@Y_$I|&z-SAh6Jwkad=D_%B8@RO2|ffm+Cnhp>`~0Jp3aQ_-ZMTr z`WpH9J75oEj+-Mq$V$t3M=|;r`>@bo0#^I;xAS}h$n{z72PC)#bohK4pQ0E(&b{j0 zSRFXkN1vd$7CiW*WzJTd1RZ@r=)~v?f+_Rj%zPBM#79RT5gy7!9R!yGrxaHLZ_11b zfz66hr@%HJ-maMZ7$e*m68MIX=es`qu;K*xf9S(cDy}kE`1tlui7Ops?jIm_CQhiH z#Lzq4?DrOwmEcwoql!@{j$K0U0!F!M`DjPM_@)km@y+`c zg7IyjgR=u)8WfDSGSDZjf3?N(c1Y4!7x;&37v57&my7&@sb`(9j`fP6ubJ06+gJ!Q_8yR^P^PZ{Z5X8bQT z`1XnMy*S{fijed}TC2(bAGd^&{Tt}B7SSS+#EJsTf)IC=Mi;Fm``mEc4DFpj3>{T$fm zSKLdk$6J0*-cK}765lvVH{lQUp}aUgOk5ZP9Dbfqxqcg2&?jW z)YUI9Y1I`T{z+KmmEij*KGDgZw)z3{p3+C+yMW9tv%PDuv<*^UAdSKq_ArEU(_e>Bdea`z5uutB^3Y=p5 zP~K2INBx{XgT$loG}QN5i{-D=?yr#ycMJ;%fYN>AD z@nL&+VCRm?gd87b?~d$;I#?WPf}<3@D=W3){T&TWA(LA1!H(I+EB{1?NmyF)7+QT( zsOwn1_;L8MN_y~_K~}CA_Lj&ug-i7NKKorH-`vK4`&87oguAg1L=^jaB)GRn{f6JH zOKlA9NSUJhupdVP`%=8ed>_tVnC7oRqkP0XOI#WMMxJyz|85x{jepo%PN$E?KdAiQ z;~$pRKV?Gq_4I@2G40#X)Nu?AzHxDnHW$B29FOmJJ^0KpY5R1U*!u;0zJ#z3%pvUa z5=%9h9jW%BR_ayNU@B4#UI}q6IwL>aXN9y5>{EmNQDWQ+g*GBjYVG?wnj1PyeK7D$ zYV8N`pOE^SJy+jk*7cxg%6^ZsB|rR4cp$63A##MBI(bd^J3Lq4q;iis2VG)S#dcp7 z(WT4mXt*2wq{}O*hCWpt=x^fBgUVCr3))uiq_+KTNArewUTWKGI~q{Vzw@bX*l!w| zaKYWa9{t%nl3KT3`ZMWOdjcl)RB%Vt9t=d`j4%B=^2y7(h`bKSJE}iY_xcT9h`N)n z93vh3aLSChFK$kGOYE>Wu%k2!_UlAD?hNiwo4^@yK!B3kjDSa zfkX(YG!F)LV%!gtcZN97GtGIJuHw=s16KReV}R>?X|8peed#lRm-y1>0k8I@7Xqhz zY4UFHrPl#-UUTJd2HfpS-wJ%lm%bNjm-y0;AYJcE??c)z|0Sd!@|{13^y|L#2N-S# zXVPA8q$_-B%=Lj9Upj&Gd|w*(5d*&Zdzi5T9lrCh4>x>p_4Cd~nswCrQun|+zBKMz z@p*gt{FOK_YqdBO$Nx{^e6#QTwPW`_VUJNkWa%a znOE=~D2L~)UcQq2azb{ab%`EDWfJFcvsCa1uSe40chTn^FD zCT7k!x~Q4Q)O@C^`OI|9!DOpDGgI@Kwo(~+X66jhXZERb?_>6<&Tg|$JyTwy^|8)A zRjs>l;cQpj>~wLnXH4fivF9vnsc*c@XbNx@FfA?CWI`&gDfr7SEQfR0roiY+!xRS# z)AWCFA1Hm>2fNVn2Lil%Vr6~gzX@=1Yzb=)^ofx8xTblIM-e_De3JO!$Xj!! z^62$)WE<3f0(5tXJo|%~H0prC{$xtAcNd%&5&ZDpM6LdEl*idK(Vk4C%==U+Lib$vJXl7o!o zZQc7=R%aQ0624K+$H+^b4wN(RaZ{aYGL`F5mh1}$eb%GQ`ljEk!}_QI>ykpw#Vq@* z?(SWg`Xmz%&b0MmJ>2?h+Wx1he?cvbzqtVcSGz0B<_@`m5{K?)%}C=VuQ4S&pZW~u z<(8t>4xH}*FKMIJo2KNg-OsZe*i7`+Jf&K8fOOgt`lr`$&@)aws~Q3#r!!&eJN?n_ zr=5*HN`AMWU{x1xn0FWt_AgAWD{94BlJzR#UV_w9ZH@9oj}q9dQ0(X5bFa$;DT6#N z58CqiR7tPaDT##nVhPrL`|(m?0%h$1UzZ7ycMH~nVxM+X>GIC&{>?hqzD?Z-(tvzi zpGh9Ho#XTIh%8qw{GyWB@pYmMDQoJ#&>y}@z$WFs&9 zvjpv4D(!xJTW_1!U2!VyJ*~UT&}NgnJ+bwdUPt}a-Yh5euWXIBX}|l;*7hg077vz77`&8n)W18rTzB|n%+c(rE zliN*f^X(>?+Bl*$vC|~mO3rFcwa=2iMp>KN&1~e0!Jm>_kY{32^44rwXll!|WqloQ zOJ?>;1Wyh2kDLv=9@CGe7})9nUOZiB`p%shc@$$u5VCI+U+p$I50=Wyu%Wi>;Eo5U znE=b;xjP~z&{lR@!Q8UYRM5@cOh=RNwao%;7HA7i0BiP_Q2%n)kNGBd!{?zR>RI#e z>N$6onRGLBguF%0mb4>f)25W&0h=Z6g5BDOpU_sc0ouxgPsuf*8&6|J_*@;Vdf zN6n$B(7S-wuGI~&OBwoVlk|}|WDn*%u?2jTkN&b2*Gd(gQ%#-D0|gzonR;H^y0LEk zqb9ljh^cAc`N3L@x8=}jFw2p?16dQxy1O~fbBw24=qcko<+txVvZ8I;`>kzL-e_$< z_+EVTI#bxb^I*KaJ5kX7$iRZlw?UsrO)2%4hVZT=D%DiZYZO%rt328beQHPiv z*AvUS7F%6tpZccmBlU~n8_N`KfijvHBI?Sp7Kk?sSMHz6_U9g|Z2Qg`rgqE?hUP>cV2&z<{mQ3bgL@Tin5Vu!s&&+M4{NK}T9db$=;ZyLnfJ+x zQ`xTVcfQGeZ;$JH*spg#eDZkffoJJcX@AnW9Oc_Jz(??__TQuIyWady{i@#i4*Mzn zYRqkH$L@;u+xMT_e&PG*^Y0hn9#*UawpkC`$QT0qV9l7oe9Sq&6yr!a`e+4hN*kQj zeMJ0^^FHiX0=t%D3>!=va^9c32V+K~9Um~}tp$!^Ok2UclV9oXCT%qJz*-UIma}i4 zXzuTvZepDnN7`?w<-A#+ys7&h=9vt;{;PZ}ljVJw{4Ez@jM*<^TPx}#W45f@yU@2f zQSQBOvQBZX(NWLAsoO@hqRs{FJKt<=!+bk;Ci+am?i<~&Wj^G7)*KJopVB?8kE2_=?p*pF0j<47pC$KK1D_1NL)!JG=JkEH=^V zj=W*yr`oYm^C-8e>2A6(a99pP1B-8-zRqrx=Y{d4h6p4&Lh>W#Vl z0{CwUb^llG3Vsi~jp(D#0|$WD0zZwlTuA%yp3d7**9K$O{}yWz+GP)XxWmN9d{*rH zG}o9DujuZczTG_AHtmwpRe!+V+nY>a?n!q}om-YQbqwxkr4ClrVND*um>y64;L!b( zUxAJ9Hhm_Zg8qs7v29ak6?`t+cx`9a*0tq~y`T4DQ%{a8XkTBEtlto=o_=fhjdx5j zgD}2$cMLIuS+BOT>CfG9kr^&yNT-RmU34DzDwlQ0)-J3Alh7G9^{+`_vq9AzCe(0u zw`th0FKsuBF?&PhLhE9e7L60)w6eaxA5 zAG;>0kU3#V6K-TSU3Y}%Tsu!m;u<~?4K>cH%VB%7uTL>g%Qbsrv~Gg~?;QMh(~M`h&Pf$@ZUuQx`G_aLz7P|EA??)S#rZUXQJ zjF;Z(9^?OQ-S6NWeO1ODwjJg31G?$7HuTs&$w$p>(mRtFXAgYPI&oHaH`}lM4Xi^= z&;8z~Bs$wM7I=+i-G{dx#JG8|`!L5qjDNr5wLIm>vyLvaiT;Xb6UoW@E#2~&XL+7^ ztGdh{e22(~?`T6)1;1nX#PN~&M`iEjy%Ny4o*slU-@xb3Uq+g~$Ua726JJyx`Ow-(zt()4ZL&oN!@R!kDEai_aT#!=rCc zzb)%VrfnUwQa;>J)n)Th2J`7SSYExqcR$`QoMO;FqbAYt$2TsXTXxFS%?DUducK-| zt{ZTDigXBdk5<7sFsI_$j{VtGP+q4&y|Ur6{GMs{Oi5;cwQ<&49iWAf-a92Z`0tIg ze$+9=bao*9G;AAwaAw5=Q<8hI#^_+)-CJf>JVd=Hk9A`?OjmV8B}NA^pV3a7D6EZI0eA@q$nRP`w;(IW!_=xZNhIx5?^RMz&H<M7K}%&rNx?y>n;kK=u|zHDmnk+ll?MRIc+uG6NN zWSK?kXtosA%v=h8CR&R%{3D|}D!j3ZM&+1{v5bfmbdm`JO zXf8<|K)jQvj-x*R@6dK;yH;(mZNGjGbi(x)#>G@y)$ex9Ei)Z$Rj=)!PfSTbhcfXE z@Z-C|^yfTCo4Wh&prw5pzH8hyMOz{>exp18%XO~!Ft1Y#))Luz4Tab-yx-O~L}JY7 zn3YUm{OFzr-M;k{`r3B<0Dfloq4o{0wZf;VpXlaGi*CMjfV%tAL8%M!3atS#6mXvX zntj>gsC*wUMi1t6dFDbJ(Jp6ozrU>$--F1aGxyIg>}YPZJen3yAfk( z=P02&S*iVax95)?hH<1s&g*8Mx$GluJx9H8Ef75W5m_JY=eiEp{DUX|KG@yfJ-h&GqJnwdW@P=XW+c{0 z@zkyF)!~|^aB>Igg0YeJv9>m1UHsxWUe8KAE&6=>4X+_q)@#T3=(J>qX)~B)z3X4&rkdqhAFll}Yuv5|YyyJo_u03~wS`IFS9ujS!hI^_FW@~E ztWRe<-k#U}roOrhYiiiH;chR%ds5V)x*fEpUnF?%kZG1d`(wb6;v3J}}tNY(F6`P{Pi*0pz^SHN{&TM%)$@Z5Rh zLdNUrJ~H==KR!Bl)-N7yJEh|OwlnMQpIa80isv#D+REm%-dt+T=fF4jjK6~?;^Q$B zke;eM2rvR2p%d-Ex}T`tov%WW&4fB%+K>==f5J=AtZVI5-FndBqg+u&cD z;V1ieFL^z5`2yN-%q>{|dALR`hQBo8{xa^LqAzCdG2iADtcQ+cw$azUXlH{lUwIRC z_!8^jl>moX$F3{PpwxgFH{EfT>2t>@+|#)M_e|bIz07pzysIu{{_$LUY0*uowWwn- zS=T=C+~?Z&&U_Ajbzl99c=rG4p)1-y?cF%<)1{U3s^gO;cfrpJ0|j~=)H-kHfg|&} z`oG^+_M7M0|M5n_yiMWv=XD=Af<9_e*@$7c?UI62C{Td1ho)XRub}?%cx7A8NIdiF z`%wLp-H*1F{o^@Y8wJ|RXTeVf6{Mc3xPNXocoMS;=0>|8O+7XJe(K%6u`Y>wM7voJ ztdBk3!)d?a0BNmllXi)1uYujx!)EJYGxYDm^{^ZI_Hpk!LuP2*-(4FVd7ksIyFTnp z!1k}2f@%A)KIjI13^4}b%QD`fKcWv0c54`Y&+xv^5r{uD4A+qxle}JC#Alkkk5&a4 zEoCM$(O}*AxT(T5Y8{?;R0G%Idp5q4^88~e`dor*rS5Lpmh#aC@=PB-KA88tq+dfX z-gn@*jq>6Wb8gYh(JUW+v`PDf@N+G5OdiOsYCvD~m4iOtwYgF6Z{wT($Y+o!KklAE z0^>PlcQ?z0ot~F@q7&l-?n}Tv3Es!%bIEFy$#oBWmUG8o&I_<*37_M`ZspXE;~<`q zRBio%shidnSiH3zuLeBwK|0mRnBz2o+m zFM!`pEU3TXl&SR_5)()}HzzTnZ6s*x2Rz#T$o!km9TA^Yzac(}W#QgNwEc-g1zT@7 zmGntGyGn4K)PCo|0^akKb=N{X1IIIEo`+6VxHnS0r5(?t_^b=#Ao5gDR{Onp)_L(? zTH7vq191uu#qlhxu>IbH@wPI3)_FVpVwx$Z4IrnKcBs1D#6=I3$@b`B_eV|KZ+EnF z`Fhw*+6=bkGYqtQk9QZy!*=*Ez7J_X`y8tg?el4AztUscPsg6ru2HQVmr}oxb}Uc5 zKbh@V>Bb{pdv>wirr};Yo+q28?H?qL+kP({JbwGl()QbZ;HGnD#3wmlaP7!6+p!A% z!L~yi&4!I@JFDO;ttar6!5`u)+mH2?)P_9;Tc?>izptd4UiJG*m7HsbkEn0J50ZG- zqGsztQx9LRO#8}A=PR}1D{Zr^ue8m=b8(-qK+b>SE0rAU#8-+xe7u9-U@U>({2O^b z#D`?9DDNUXW(ue6!C3hU{QgzEkA`&!e58bH$BciNyJ$D|xyfit)VT_uB>M`!YuQgY z9w$>&4s z_n>d#IV9J7m;>r~&jIz2_v(24&g(?#$U2?iy8VRfGk5*}pX5!ozPTf{{Y|MW^S4#K zxudPxm!639Bz&geGu6^lH@~qX^?iI^#^=ZzJ6t=>esb(Jr~^0bJK_5aQ<9iVaet5Z zadB^2o;_j>oW!*+vZ*7lR#h2k%CB`I3S-N=DszlS;rX^`gkHq3-*u;5F6So6j zH8qC*pDKJN_6he1_6haLG94WVpopx!k`lD|{vL5sC zD=5N{$G?1G`bmf`%0 z0Jn+M9MMrg*Yu1zY+32;Uk)IeLYfsnyf9Pk$#VdAsY;e|87T8CTnxx{I9}^!?jKl4 z(<|%^_;pK#WfkU7+d8548VqPl>XpdA62PBWhEhN)q1Pn9FIy@dSK<5&Lo?v7ECYY` zT_;wF$WMPy3Ws{_z-W1k)Uww-fXgl1Nvc5`n`?mX&E_9p?BiZ{g78c)oHo7grch(? zy&!)&WSghg*N}M77W@rBFBYY~@cUPPmB3u~~4* zY4*%ngw~|7*~B&?a_ke-StBCH&Xt6XhSVOMijTy zKmqRW3-_btvr4hwK-LiU2i(n%1>k^T8%{PB5T~6jffnRh{*r65s_nob+Gj3G$L{=(2mqO z8WA}bSPyv%G$L}0Kah(AG$L}0TOVgH(ul}0iHLk4loV5jx(iq|47jO>xh1LQ4)mtc z!^_CIAK*JZIL-b{!-TgvY5OufQcid`x)8_C@E@cL*@(zYGmgB6aWV_%vEkA%RO(j) z1;@M*sKv*vy}Xl%wP8Knu|ucTGpDeXZA9cqKvaEK1mwoNX*gxW3CFx7u@iu?Cemsn zBFAvU5(BV}i2P;HuU8ER?TZCIiQhkM)E2`4g3SjsfgvPdoNHkWiEebR)qpdfDN#0z zD5lOe`6Wn{yH;*ONi%Fj=^*oernz!D~GMC6!6M1ICbM2<;BO< zS<>H=G$SI%0;|FQvWmHy*cq%9i9gwh$QWRvf08^yWJ*QTM*pelBFMM^?mCQfK6>p6 zHi+W2;QJnPu+;1^lEW7fIeW}dkWUxS6Q|3bL~jVJAbCN?OS3N_Is04)3cm}`DuOg3 zaxCa^Y=Il1^k4vZM1r_C+AClu@?1K3OOVvuLj1Yf!V5?}BP4YM4%_{|Us!SBoyh?0PGeXA2yz$WSug2mDzz0Hha*oD72Bum$5g(ml zijSe35I2y?86lGMuS6j+3$FqkVBu!K;TCQI{FsI40_IH%zYgjJ7Cs2-yB2;M)G7q`7SdpPjjcE0R80{HWG z9nu#Kmb1amoqbQG`4W~N%OW$?&X;}B4B3CR^JQPOgPB@xdDsqrt+4pxq}vF|ebL4_ z^Q$a8Qm+@2;_Xub-_$xwMXL(XQn8d|Dj;Q-t!P1<*jBV4AHte!MGN{6 z+X@x*CAO6)fM4b;vy~`-yXP#kl_=;>Y%3uX+b&y)0y^(5TZw{!#FZu|+7G6V-73oT zgQeYyuOBS!!Ske9`z5Gw&Z2%WZSRAY7nTigvWoX(R~Tm%?}yHv8?%b{!>}FRXIrQr zM(x}RTZw*f{M>rmD*eiUTWy8VE7uR5Ft5P2P(QS^8E0FlA6hqWqHUpmXx+RyNm~|LH}C2ii_yAyb80O{ z>*j5rZ82Im@8LR&(YoP%^%kRRdk5xQjHb?eVS&ZdfdA28agusA%dP=+fH5?dEO%t3 zqf;+vI{)@Q$cB9Yj1|XW94A9vZXd@}--E|4o0Mk)c{V^!YY(2B4VkiXF9Z+Q1G!)7 z!IS$XDW;dques|S({9HkN-IyX?J za5@jYGjE(bElB0YZl(0RK~Bb;43kLDo9513ojC&}CQ{Y&E^s_IIUdmHR+ z$Mmpcl7@q6<@8tF=@;B-k&*MTJ^h$F{SSBA=GN2uZ4WyQJ?tKg3whlbC*y_K-Pzx{^oS6S(nx<{xh7BKkC7zj)sYU-<>}w=WV7Jl$alN z;soXA%IWMQ%$Z++K?y?*g}iO;0~d{tN|4&`JTMF!zNX6b#~_)#14hdqKYY#D38p^= z%IpU*Fy+?_Uo-Ah(;tIn_K%saAHHTnrRk5NvtJ&*3OO-EW`BA3Dl%bI%-%hG70+W( z%zj47>yIT!{y7#xm;8l+5R}1=RF{$u<5B*1^~Q<}>4p90W5(+%P0{}X@ac7P{|o7F zwpsdPZRxJ{`Y#~1&C>rOX0^@I|6*djM7J|!|4TqB5vx3k`a<5m0T`$IyeEYXz%ZR( zZ+&1ug4h;jaWsBr-FapJCdWSS#o}k43ycxGZ*)_92A~+`zW8hhABfMWcle?B{L>xY z6+e59!@J`((;ePpHNb$MU-N{;81VCJo{XQtQZdN)E!>MH!Io|g&2qX+66=5WXUXA6kBM#+!ClYtYiz?5&H&aatFQ)md||w?(G;Fe zIM9kg&+Pl+AdAs8`~J_VQl;^PQiWdf*K^bYPtsvK#}?LtZycHs+h%VwroglC<_x?g z1F@iT4BIpC)(pHY18>j3t_-{*1HY1icV^&S8F+UF?#RHeX5c*;xHALq&A_i^AX?O^ zj^(C<_h;ZYG7xj1W59aU!Ea{Zw=(dd4E%NmekTLJn}NGB@Oy;fPSHVe3@%@l_8Wwr z*6*vfTMdE>_xox{Mx%b$h!YONz|zm&;)xByFxJnmi3VX*>32|b4Is8oI0!>bzk~LQ zwV%B>7=)pw-!2hWbOT+>LNsyzxM)*Qgof?EQM4&S!{*mmxkYH%{F;EJqiJ1-FGAbq z*IVZ*g@O^!1?3*T0bm;A^YDbI*cxY z`TGCO^1yuk|E4;?e);uw!YG0P2lTQNM$z{vr^NC`q=V`7C`qS#&Vb2!-db%Ba-6{ta=`4N_`^%Te(&QCW-ZI`Lr^c1DpeFc zf!nDYtSUc(iq5Q0602E%Ol+I3XfJU%-ngpC6g@?(CjJSr9Y2bGO04F7n%IsXMYt|< z<44iYh}GOb2iCEqXdmfn%3l!M0i@^|Vm0e8iHBO9pCwLM{43(&7C#4EucrSsacR7% z!W2CZIKDjIG}aXThVWzYrc+JP3xuQNP2)__i-cp;POso*%$?R``(dVAXwyQ@^7(54 zz5$a0*z>P~@O?39yy!LHH?114!}MQQFZn&lpI3AJ0a@!~CSh<4M(4_}m%If-FnbTQ zcYTL|GEndO4nbFRo^7#}GeojlQ(GLDeyROu2)b(FyHdyyYJH1NDFZJpwng(EbO^D% z?idPB%&)JqbeW{9t>uP7y@6e#=Bb#0e`Mct^BfYscnlz`QW8mu}A zSj{_N)k&ag{oc0fB*bbZwuuUc(k zq@rOoTG6HQcWw!=IjNYe*PaBZ+lzX(qQ$Jy5?i}sRHNuH3n`XLn0ON&sufEm?ATC@ zN_Yos;l)x3>zKvT^tN)vQVCnR;zXu$#l@6fBFYXtD9RQO2Wc~^iB7n;xWt$twmTO? z&!V~3+lo&{eaEY4!FDt+K83c`Vgy?o7MGH4hmqnkV%xmMScAFYqIeYKUt21sEyl`r zNJ+WHxY8aRsIYi6oc8qj7LTE`t+043_$O_PBciM+K9%OMURXSixXbcXvaGu-9uGYJ z9*ZX+Z}L8iKhDnefW=i<2$dc}BO6mZk#d52Ou!2;jdtUu$dF0a``M;Lq*G`wDV_wK zdnd?RT#a)J{ug^+0v<cG0ZyOIwK7%*oD#+>0Ygpfdh07*z7KnO{IK)4A62uFaA5C|lJgapU||65(%Gd*LO zxZqV8P$P?>b0KH(;<4ls9@1jOoSrVlm_~(#98txH zzrsQe=Yroz5fh6`Ks!x(sTcu*9K#q9Qdr1AS&Y$lL}2tGf_X6dg@qhB#d7pHT8a;* z?(;bQi!uC#rP4q;i!3}%cH3wj1^l`cV{IbH-C9Re(}hew26%f7;~3#u#>WzFkPA7+ zzVLmSQy0h|BokIMD3^z%r({n}Rx5sNt({xO-LSXX$?>eb)d7iZbD5`;u+pH5u@1z4TkZ^)J%ht!eC= zuZSn_3siMDvA5H+_sG&_k5T5~^@E9f8O%^LVb{|+6p z8QL5|)YphA;8Jo-D679ttfb8*BGP4rF9&V5 z&+2Ulu=;RrR8qLV#iKnIL*C*DGgBW|lC}8HG0d=*^pn<|RY?pM{b5CUoky0H)+) z#u1-&g&L$@Mad#7CN08xOnji`thLs7N^6CR+7*=3R5LkOC;h&vwFRx53Z*2b1rPPS zzHW-*M%_?_-=u35<7&+)bj>}gW|LEc?Eziuc0$cx!&ZA(z=^_jXJ~@f5!TVYl)UaG z(|!Yro^y(z-?cP z_9s?@c5)39*Ig+PuXP`}EOol(dY&~!?aI4Iky>*L!-U_^e@khO8jt31(SDl4s41fy zT@S2z;9OG0r#4KRvJj1zpG=k7&?^!5fjuJyPNPNLkEjOMR4a_F%&B&7XQ}Z zJq`XqfChW{`4So|;n8Z%F z%ZYl>e{4gCrPj?Z{ zB>HDhcZfFfq=j^S@O`d@I?kS^WUz-i@djGxW0zM3+L(Vr0$KG-`T*EXnc$F@tMDU6 zMC0J&g^tSBo7UQf{=THHwbm)m4Z(ZJ%hm>7r$P@w(pr)~FA?uSTc@n*f2HdWP=44~ z?=L?>+jEl7t5)byDw|juo3mXR`vYRdbrTsoy;T|u8XKz&Lb>2hVp7JV41?BrO6xr( zZR`)VvdUPetXAI;I@SAHYbU8tcBASPn9h>W75!s{kVSafBHxtVNHkm{tUg|cu~644x0{ov>aM{v*8*QBW>%4|)$1;ne-dejJK ziLK(6yFQ++S_$U6vdY{MY>nU#rn3WU8xP{S^<_W0S_k7zfQJU(NR@;GW{AbY#U z{0)TBP{;n8wMNXR8d&%->6aeiY9rfQ!9{{B!apvJlBB(sNZkfl>E&J=ati~L^ z;+q*&-lFAwR#|2jX#av@+@>2k+iR@EGd@zar#rQ3Al7HVh_Pho*JvQ%-LK)cPmj`0 zR31c?aG1_Aw5_DF_A(Y_wiKkVlTXSgD4S8kHmV6D%hp<@N|COe*PlwjuMsV01_BhU zd|9Dl=)jp5!M=7g{gYBg&%B>X=eRefRHT?j{;TM4MNC5ESIBL?jC|rMRU*pi&$q9g z=ZF|hMHy)aQ+q2kN~?*I+%T1YO&Ks+*Z9k`RnHOlBB3g=U1DFjJ*gTDkE+oTjwKlx z7mc4)QJqdK3TIH|DpWqG2$`~dqbgxbNz#rW6|CTYAf=*UwJK0cW($5oY>-lst=fSR z?X(n|rSOakzNhr5=uoXOTeLp(mjR?c6-}!0AEu<>hb&3yLsnIMSLySnq0b+Qjr7^4 zq`c#i@@JO9GcfpDvIp0h6m7Gb77@0HI;+WA!(I)(z%8)$^rG%XY@6O9HZ|(AG8Eg( zn$4*xQ8mAJYSv)UmK!s)&$5EABADvoV)r~G3#Iy)btLj<{c%)*i}rJQwYXu%ljT4x+LkMhtlU<6W}g(3g3F2SGJgPg$0p@z-NbM5Ycl zYi-mZx2SWf>Uk`l>}-RF?x>(L)TmxYKrKG&M>_zUCeP+8xQ)tkgsFiQJON2$nNdCw z<`uxwWr$8`a&3Ts?x!}}Q_80jE(odpCPNas148KVsPIQM0&%=KkU;G$jI2ps`%jzmXGpFobYpe?kl_k=j?V+L_k#RBI#P?w}`Tr zD9-Gr!`q6hBuU=TmLo;TtJ1RmibZ`L#FoEK6fL$AEy~{|iV{0lc7#-pOEXEaBP7WQ zBO3g<0~iWEp^#fddl(ioBRJ+>>KS;&1KB3eUEm2WtS>E+VT$On>5ok-j`c0* zO#gTp4H9PeE@ybCau?jJE7jvEA6EvraH!^TkqABK-NdiQt;b-My-7QlsGU14(}>l1 zf7N!9@0T>NLoh9?j#0kB2v=g1mLl-wb+;8n50z7OySveD=_gdBLjUl?L0N_jfJ+Yo zJazbLA{R=sa>_c~X&v4PHG>OlON$(DAbJiz9aQ-+BybM)-0P5JwIiwaTB@alJY?<9 zskY)kwXaa^tOM23{fs4Vr+od+f zdZn>Hwq#1N>_5@dZ1C7m(JFx)R(08?WCEuyM6ljm?Ns89iWevQL89S$juxl+*H0&G z*}tOpfxZ1mNX9n8egrHfUu+vOe>g(dw~g>V?xH^Q#6s7PqYpauF=S#tYQ`-~O3y<;>>M;GLpm-sjY+uvvExA1UpwWWn;- z1W+C+EqIN$y*8+fN%Rde^I#-_tEU>OG)p?{I1z^%U4}v<98( zHr>9&VHV(Oxg0dnvv31Q0*e88>@@PE&R4r+ z0sQk-j*|wxrckQn%18pB3XS79s;y&sG_5A&s! z5VAoX&e&*<=;WHfKd5F0OALI7ni_>al3eVAz%#`4BKsil3}N;GVb~>g3p|S!+gEnA zZ4(y#IZ~11gyD@ zCs@F#slwl~ME6dar$7CL%Hq?!=Mps?JQ)Mnf-0$SXwAngUo={QpP_gI=HQZIq7fLU zK_&sc|7yg{Tp~Ln#pSi+HlZxKi3}i%KHkKtf#7)NX2Ppb`4{D$Tcs}QfGhAL)=Z7T z)sV7euJX&(gg3R8!&U_=G^B_OTqB!G-_{&UDp`Tcsr`{!_LVGq1J|8Tuayzg*FfHG zDSw|v1)}3xOa5MRTUBc(5?sKkscMT4n&tiM@1uUu^U{FQ90co4!mw$Ay6=qm{(E)jZv5htdIr@e7pvO4*A0ts<<3Vm@Il zA)+NbxJhRG00?9SWqZOo_*xJyg_UH4jU%nZl$J*Y8$S7~Y6XJz=1O_O9GDJc3yOM+Wk4^YeFR>nFo8!c?l#xLMT*2AvHtVay|C}Ghi z`?W5j4_xvkk!6qbmcY6MJ?thj&noNdROa2d8uxYg_`!xp52Y4(P~pDm5vQ_coz>2t zQY7GL>k1BaYa5iWoyN|wwvk;1-mVPUL3Cw2ekmUXp%R6K4xGTfn*z7?o17@z8s0X@ zS0!bLb26|xy$70BmvNxE5fh-5RK^vwtSub`urlEmNC>6*k)-*vO4}nzDW&ZuQ(G)E zq^)XGhco`m{bk*w#JP%~&eZBk_BLsqU@bt(fyD;++8`0USe2xA}9b`Yg7ksBkve zmzPRW;cUG7y2^#^f>|<%Wf{{mTo!_wg??jb`2e#7iKUm8tT15CT9>N0?d8OM4ykA_ zCnVR^32d7^pDJ&YmGH>&b7XUyGRJNqt+ZzV({BJQe}U^zo_6LmveL$ag4ZLZ+BWG_ zKS~OM9$FCKgb1_~wyPXL%v0&0P>>xHtfA($vWH*|Jw-5}>@0{q0iG?$&Vuwkh5A8e zsU$kHKy3{d7~E0fK9{+pG#l8mAY3|zUdyk)f$LCq>YyXnJ-~G+qplwrZ!Vb*3z{hC zR^-D6OY4Y$f0nMJf12r^9(4!Q@T|jtpq5+U`qv0x^3?w!u(z8&-@z-TDp)rlZ#C4( z%_7~_Z^`{^#hPUUo7z$hU*^ z0FzWA+#pX!u=97iJ_$U$>!m5S|2BO^j@FASXX$MQcEWHfHXHJ?Fz4`l%}wyxlKY85 z;7JW$A^_(ud5iw}yYlc#dfu=^)_J&Pd+Bqyctu@c@3GkAtXN4hw6XB@iXUpl@P@48 zu>EflRy^o+%73BhJ5E!2Gi;rFvWwdbM?4(2;uCK(xOe3!CTZ7$r1gOpSI*Z$rK7wD zMH|lcR9Y|y&a2BHn{d@i=Uo6V)L{u$_gq`3Wa$-*PMY|jOg623miTbJLrqsD(6sh- zDnoMZyBhqP08)qf7EYt`{;HtUM*12fv+@@D=MHM{7PX|yvaror0x9Qn8IO1^49lt- zwEkSLb)7rXb<>~GFb+f5IS9D$9x?2bPbLUwIopF?;2Gzo4tcM;>Km}C>~2zkfIRTg zgYc1@+5uLMUpZ)e3JNYQ!qf!!(u1ig0g$Wq;CjqbQ08qY!!KCi9L^lgMugM>Z(SQF zc`H4)u8q!3@2AIQZ3v&;G@zxFFTfE>xlJhaFcKwJ6LS8jCbPaXd?Vv^CT5iY#p(XD6h$C z&E!2Yqi!~-=54Z@pP1boYuWBg=vo4$0dF_geV%UAenF(mZr(-Q^1+;<%L6!it3_@x zWb`eLD9vP()g{yf|KUuI>7FJCL^38^I@1EX{U^}P?Rw^x-Hn-B_Mn;+>OH5Wa-vXEEASM! zUx%or&r?}8gYTC9o=VW3KNg;f4k_??O4!3@Qg*~UOGS_40i@<}>VxT*9bU=|6Fxz$ zlr{6k1!t{$N&`5H_iKvxn<%G?8t(`YIlBP-;~?kFDmzAB;?!{r@mm-_MZNmJVE)ReZ|?rDPgjFP0uphUgYZ{2b<;Kyvxul$Dn^jmi* zG01^(&L_+VZII{$uzW{--4=>k4&8N95v*h)#Yl+K2OT)+b{GE0fssiLEQ&cWTI;|_ zi35vVYSA$cHB#!p$>$B|jvd;RT@IYO#DSAfbzspl2Tp#`f!5tFyv7Or$<}O#99`}} z>!%K!eAWIcOxo*Imkf7cq}YK4;~ZGD$${24T=-2FUhBdeUHBar-r&N0F1*TxH@omU z7hdneZ@KW>F8r$$>?6j-RGka~$&Ilmn-^?WX<0rT)obPO(&EX3hr*w^L(RTFw-|BL;nUkhM5`DdTvMGUnD0+%ZpyE`w z2<5~yw}`jwRY9sl%mncj)>QVJ8A;-zo%RJ~t;R1`Oh#*}zj=HEcMR){ML4eU>KC5ui;_;-#0=Jo` z(ZVvJUFXp8)Wy&RYA@E-kOI}@2Wk%&Rl<~~F+O-zD zEkjjIp|x_9(Z@QrSGjY&>o#K;ar5ueBha&nT2uUPBy+TjggDY=BPE15%G65Ru*tPj zh@;(DC4tAd5{MnAhh@k%6ffGUV>N+|Y}Q5cIFnjTk~8|`sn#+Ti_DB)Zr7~Lrp79+ z*@S4<(2*lV2ZxOiow~K|xl41C=EpgvWEzb(t2UY1o^CZtGR5||wOVGc@|LXcQypYd z2mNI#KAp6%g<_b}P(n^>3~#bb4Ups!B1KA7j_=LpWkiSpmmtKTTOgO~T?%~;+lOVw zcZK^d2=-nObf{@4@9i`RYkUNM3*9s@^C}I6i8axrSxuUXA1NIQssjjf-xI zPt#yJJ@Z|jYBw-6m!Xc&M(=2SUOp|?(=DD3sml!VA*l{yuSUY?ntrB3T?SQ?%sz*r z4OMT5IiSJb3N876q2>Rg=mTo|nSDA8?mV^kjCALoQ{ShN^J$E>rm0g=U35MVL?3d@ z+{g*+*?&bkps7ZMwb|*}JGuv~(EP>(HKGwh%*^G6skg!r;!b0F4y!Kku5k3(K2su!NW;fT0<1|q~lMRND1662#!?9>N^vY;Bc8F#})qa)}!#&=eha>ht z9(5Sp!FNdRCSs_NI#6^DIS~$|mxtL1BM;qC=yPl~=m(6{<#YRiDm1&%`~OT3_h`w& zPCnsaVec^tzVLRNcq?>kGrZja1Fsq02dZ#{d@(l;(adnNQ~TeI%>U`g@Q$51?>rg~ zUEx^cy2zNv2K;nJUF)AB{_+>)GZZkOmSSwc3>Zj$>S{o*z^H2|k?!8f7i4aQZk~09 z_+ZjD{FncMF!E%ht`{ST!KPx^$D~<|JD3S)2p>DQES%`dcAB{(>yX?WuSw>r$?v-B z8u{s|cITny37?6>{bILoV?+`vd z{6&rnEgwyHC}kWv339iJVoelTJ46NdW>T|B&Jc9n46T$l-d3)bCOym1%A{&p_P`;o zp~lX~L)Xm4FnEJv2!;bDVu#m_cJDNB7~CBp7>sS8!{BBiW3vR_p_fCanLB$7gAAB; zu0Y_FmzHi9QP(+6b2mGrWBO+PTNt6@FuAj21at>qamgoXL-Ts3g1e75R#^k;4$MZM zMl;MZvYx%eat#}LD1EoS*-4QS#h7vB6StZMXKA{JIwDCP#3M34`%tPHD(dS0&EEFE z;ioqXu`2PuMot()vCr#vlh0Vz45&>tQnUeettn?H+EDdFh#7)pwlwyYx)UQ83)4X+z8t zlXIxnL(x8~jbW~lNe%cvX#8jDV(bvyO~z1GeHtx{Cs1pRCsN_R*?+f+FMMu25Yw!*F=csUmxE}NE2;2(IYiev_U4NjAeIWW!GK``28l^iib~9duHG_XX zYPuoW2#BGn-mVQEEzFEqV?i>Y$)Q^rF=9Zc_CUin1cT9$Pgi%h^f@aW>7S#e<~2vo zu*86x)9~Hr(b;L{MxP+?|RLV(wtw3a8l+BsU9qb#U6a&eNm=_()e9 zj`0oD7YPH8UdCb75WN`gH{ei=pC#0*ua-au+IZhX7oAW0T;lgafn*4(+u7NRyac3MDRImaP|2jf`{^kE6LDSD>YOQ8*hTx z11Gu%TqF00ouas6;)MbFs#E18x5j9p1*dJ7Ux;#fa2jj0cImo-q59`=&nDdrzarv5 z4UEZZpL>$ql|eV4ZWUN)aJpv+#_Fy)jVWS4U2D43I1w5e+JnXkqQNqhun-R0OAQ^} zMJ=>PoMRk^8#8JsImTlZQ&-JuM9F7{p4r~GyVIh~>d#C2|6h#tjtG#op2cglvj1-N zsmqUWS>KFXif-u#etM8=Rl9f8r;2*3RF!r8v8vprKJ{Zu{h7sdXVyHe_-<04JJsiN ziti3p*2awVl{FnNgVGgvmp{d9^|^~b!}qE3nd-ChGd^on{nz=^v2&`TD?R8p3*@Er zw{~;U(stg<<$#iBY5f&lJi_%t@e5tA>=6-Ff1dihR(B)iqc!G+39j((7%?gRud7JPff}6Wi{fRz}`dc@FZ&OEW>!$v`t?@*E>-2bYOV_4D z%Vw3$+|!eYO0W}YFr(&t?{qZDdcniwJ_}R+Mpau;pa3UV>O))u{YQtaw<7<)V zxUEZ9#8O>7@xkV9-5RB2f4r58x;MxoHf~O8b2XvCc2WlnU44k1{=S5&>uA-D!}#WE zUvDbDjcU^H1=MX&ATiLYii2Hk@jk~E)RQOJSCUL|0#;E47_v%i-A4 z)|_f~%g$IhZIqv#vK~N(&>3&;Hw0`>_BXeZ_0W!d*9Qncb|tnjtrc;rs--nd?P>1D zurO;y*)CgN(6#dcsc$JG=-yu z_BDYr`?V7yl3E$AC@i)I&kF<$DZ6be*CX~K+p4j*MM^6sR?LfTjn&)Rn`Ty(*L!&G z3|h0M&B~u;k6v!~wD(jM7SAg#C_SjOYHxkkwDPs z^)EqdMZt=%l;9T%itR0_?y4ei&nr2&r0UfA`H<#O@y?JnreH;Mr7~h>eNj}xNO&e% zb=m{%c3XSZk@f5C;>xN)ssbrs8{M52ve3gur(JmjM#qNrE5S_FE^E zMeCx6M`4i1QRik_)zR{T1qaV4KDfNF*yERHf>y;uczt4NahIJPvHRP}kG15*y&LQ8 zCtGkxUe|tvGct!ezyEXYoI9FP!uiSX#d2D1T4cv|3LkZb$xW^ zM*HVJhJWFQ6QVhuHoMaHBb}CJ*=L<-*&m^`8H8u2SqlofWbE1(pU_0ko8Qs1AzG+x zX|SIQl$As$PO+~#VV|evC23Y_3al=KNp=Rt<&>p%W(4s&)!v%2Gs^58r$jvsZcMWl zvY`Cn1)jlp5bFQogfjcmKqWpSh{IL(C4r_H z_AMv1+rJi-m}$%H%Ml%KoDi`u3zS85g-6O$kaDk$|8_?3S*AXlobpe0l+CaoKC#KZ z!;aVwg6ZdAx@YGpD5vZXPAr?8UlJ{xJbPhDVM$SO;iLk@%&Nm@!~AzdWZ}f3Nz*1F zmZOs5)F50!<^{MNthtFY^5pn zWO`*3g&)YmqjKi_K+d8^17$}R7tV;VCBIj1q%v_5j9cD7s*JmomplNL}rvk4=RlwTv9v(ku$lt zq`u1jPbdPNqjqk42Yp4(*IYaOG_c=ot;25RnNB-3B>2E$e{h_d4OKJkMeTKmdxHM?3~MZmmbrU64U}AFie|&A-wvjv zRo7-j0%=CJcr(Kqb86JHn!E=oyN~jO#((zbI(^uFT;~t7#_Zlu>Y1ol4zuhg%bpss zo8Y5^+wHnC`>-;*uF{^n+^&t-b0fe}dtQ?#eEtmK2Q8+tEXt={0TSaO_&A~%PKeUz zlYij}d@LxaFD~u8)YIwNnN}65{BgV|(;8Fl>F0_}glReA$R4r0Vq`(>sz2L_Yv$D`IKqqt~N0mN4oP1N`@jqCbd5=l($?i;OZ! zqY2{DXyv~nMYOL4BGF*j{`CoE`6zvmSvj#HAHI&xplo%WWO*U8iC9igwS!dD1hyA4 zBhx7zUYlBu(o>lv?&ega-V?p2WLfsR1D1W^uqJyr_FNJBJ#38j46Br%7YvJ(2W|U1 zvWMS5f^FZBieSUBA)2J=`eJ4!NY|z!_Bv8?cNTH{Gl@KM2$i3gE&i1xd|DPvuAOwBgh&*zh3PkZGiW8(_nOu;FglfI!$1u^$>Jvu__ppAmeP zsZXZgg|WacOxi^beN(FVb*caFCB9tZH!>-e+BVgMDX9$-_xl#b#SJHtdoPlzz0Im! z1l0ykLI0j~bT?G{5mb8&szILw)PYJ50rDr*MEOyvQV}{kOLqOCRO3vEKa%(ijY*@^ z5%U40B&hIhslsnrg>OTJLF&hoPae&(7EZ)2byGo6ad8wWzO=J{W~V2Q{y7VKMNiIr zACws$%0Gz`^>Upu+{)dU##; z%*2YeYg=UCX#3>!cKda z{Gzxj(Ffg2qbZ~{cN0e}hFkW5xJY)!nIEp{{YHkc_9=2YOpm zRNt-}#bT}9@#fxvei#93@wY}2)V;hNm!~7Kwl3U6)1gRLvbhClSHYd?nPdr9{(;?P6n4-Vuz>WDfKGqRWiR1tdEqdGNZ=AGu zHzzymYGSROo09`Qq;QPLWcQkQYBlL!jXU#}=GM)SL)voxIA@@Oz&RJX?d|UB-HcCC zI1x*Lv!kmG<(}5WOt@ae26_jQ@ius%y&cCas8994gw|vt)z{Oa&UQqsS89#ASTf!! zV%>+%ZkC2fi)h58KgD3z##M=~j;>yq-3)UF<4Mw^uRqn?!XW}J*3fa$8UzCd3rMuY zF;F-xYoR|%&>P>{(1#8%ghC&QsOaeGX~r;1`%}${RO5%p0n>W0D;{50fhVEQm5 z2%(j!Wb5p?Gi40*wWkD3Y3=SyQb$W0*Ho`20kSd7uq@<8pt)0z@WLK}8Hx#~7>$U4w^fz}`%$`}3 z6!>Etu|!WF&ZJt7^O}Rek@FAKt*xC>xyD3%MKeY%78}rW7$72bh8Y+=5BYMnqi{S&LbaK=5r(Zl#GCqcNuu z#@SsP;(_LO47s2K!jJ%CeZ4%@Vp}Ooz#`4RwW}@FiFqd4lb8o`s-p_Yt~&{_G7Tie z;6VAIdd|lZ&ApVIJ9^`75sD}D(9*q`yn+T!Ake6hW^|z1-PNk+2A?&u@-%z8Qq9TD zUA-NclWS5KU6qt$ixTnP=JMJujA1YG4e~ScXChus2$AFvW;tj!PKn`P3XfLAuOLs* z9Kevn6$uPpb21Kb@$NR1df_DMw!O6z(GIhUs3Q#duCbMSf1Rsdb#AQf|#RuE~u;DjK@Tc$O1+=i)0nMx)e-p0uX z6I+|RQZht)X++4DevG0_JkswNv<+P}*OJM)8rit6hcYFNP zM7uj)>JW{XR9IXFk_o-gV*wiEq(d7C-}V*G+tJ$$eR(|LADb@7vsktTY(I#tHikxe!t~kPy9P;mMN%LHb1vasq#c6AmQpjm?DgskBP_Ns8hi z;!PPXh&^(FM$VEhbw$Xm(%0UOWgQu^y?y_rgWUyfIC=Ka$jEex*)C@-h7emqC6BWd z8t|?I`NEj{ys;SU+CVD}8BF_ZTJu^v2YNRrV@e55K5e|RLha-FkalGxLq*!P@h;=g z*@*G3UOY0x-dOH&&|AN=Ka2IxN%A7^Bx=li7=mPgM{u#^RxA&lv8~M@@)IiFG`6tm~zRIgjTrf&U`*jl;TB7a~HEBCwfkPt~Zk?8Fc4I3I` z)s5?7i`UgGTe3E`sA1Wv*xI@kOV%{hRg=0c16|#1&i)ZOXS=h4%8b#CU7=b-D`*ST zfmN07DR>{|%X)ObBG&@GYul>kbYnB}dz)w*#Oj&gCC!<#GUnmKR=EMExf)wcd-{~j zh~@HMbS;Ba^(OPR%zwD$qX2g@|59@DVmZs!kkc{MrC(^4%3YDnKh!tvc{q8DYgzII9J0ZYU`qdfwyE(lS2%gv;xVLLvxo>xs1v+@s#6W zGKq62hbZ5;Ve^~lz;0r@vRUplX;q~qfp#j%&Vf{0-_~9ZS9fEoJ%l?SXB(1i?&-(M zj9W;Alw5A*(kJ)Mdd5Iw+KYAfZKVw#$1bgJiBzkQyFA>Fb@jDS8sXbonFIO0miD&| zbn~R*S>6-_chFt73?Q}Nj16|Jj$@wm^5hY1eFJnm+fZGjZfvFSibH2ZIPw7{H%i%@ ztubLc=xKFl4-#KTb5BpRj6@*n7lSz%$K6RE?ivxyxCx>?Q!KfoUnF`kA+X`V>P-7d z`2vErkY*h(8nkB6P6B%+d9Fay5DOBIlMJJnw4Z0;P%~=fs+E{b(rBp}wu`vMB4fcjgoA8cOT-frn;^dTZ%5+W2y}=%;R-0 zA!v!^?YyMOX(eL^FM9NEmpAjYD|hlH1vB3fqtgW4H)FS5LwB!ae>Fxj6<;Jb!nk=a zmp5IM>IU7NtW1#Pe>u?Q*j(rvR3nRLK*AmZgWal@a@>W=!vZf; z=5z)JYZ*2v1GJLTNa39kcV$~VkV^IS)=(bc)2z-oZ`ZJ|M3TiQse3TkOJ^(ET%5AV zV-Tq>7D%;`;*pm3Xt7=_cxw3)@;F1SwDOKn?Rj|?$%WKezErZL;K$lZH!r+2(ir&G z30}0_@sXP!L^e{k9NHNBlv?tR(cNXj5N{@>G~LhH1!1JNiPCxj#W7-PAMIH}k{Bt^ zeIzzkbl1CoW= z;XO5N9-%OjF79TLjbUMT^LDjctA#!kc}TBoWHw$)s>@vvrD?kVC5!0h7t3d2J8gc- zu?K0D_m(n=|+Nx&)EaCHG zIlR2gBJvYBNvxCie`YYq%_y7^Z*QsPiN*<2o;JJhUKwk$XCJAifI2lo_Cr2z!~0!W z%IHvpj$~->E|6v``%-yM(cHRafYuxuM!Dc| z=o{-NiS3K=IErN}*F~z!%Omoo!^rd=8qDb!)Is1x9Gg6>mPGC!s5)%UOdxti5g$p) z2UV(oGn}^Ra%GB4?}$uaRS}uq-ivo3akkN#nvO}(j5tL_yFU1yjx0*E0;1bVkWj$kh@~%QIk#3sh!)4sSN~`7VySz7~%~(wj z(iKg?__lZ}r5^0LRLX}uoDa8prZ?_o+ha7^*hte+mQET8ITr4TgB%bwah?6^R!krk z%9#t3n$Av^^kV--9n?YO>yQt z!24Z11(J_i^w|U7%P8x~!nH^fIQE662r)ViZyr?7jj$KxL@FJIgv2ppWEei_tE0q5 zjlqqP#_Z$MXCY4uSXFe-%zEQu+%nQc!J32-1D9^i5r{^0jSYB0JU2qP4GkpoeZZpsBQrQjff!mbW!>xo1H%(J?>i zd{iZ(!LBCthz55-IOJ?~4ovBehIAq$cms(%k5+UHI?zJTaByGUDyK_(uY4&Myj@AM zZLmw_VCg-OX^D%=6J_!Wr*hIX7Vqg#Z5KEgVZkv(4y`0~Hb$I!P4}+)b+Ejvr$e>r z!dVYTz+e}Sf#^og+z#&76pI92d)R32ti6n5+Ik0oj2i8#gW10>*i;I?Mb*@t6rdH0F!QnFJ%Z{@8iRvnsA z-t03AI>LP~4KlCx@^FHW!1TE%CYRh3 z$yg-gjFoLpg}U43^+k>x?gjbgn;-Vb#Nge@P!`|=b2;xi`vwvMQ+X!+Qw|%k0mq}e z7A*dvgYzq9nft(d#gY}6U${dV=uhcGPOR#9VneAC>%Hu`dBLk4hl!&z!L1pVO_~K z#2L@(HF17$yrikRacyknKu-&jCEuCJ?)Aw5FEnzx^&@4G2DEM=Sa3TZ^W1)5A4F$S zl!W_LKE%vNWW?#V8;2zn0rZ#v=aecj!+~<2FMEMSt^5E&o@L67n7lV~PWO>4_((5v%u{xq2t3@ilGQE5n??U-IIa#0JvP5v_qAYw(1b>du z_^J;52*XUHeD|X4yy}ca;!3;vDr-s3qLZ!&?h70>EWBvR?_PfC#cZ)ClbQW84l!gr zvN(GrL@c_>S_}c3(0I}BsO3rql2iXE0t!~sqU=Zw8te*eSxd2r4T|Qs-dx?u*u(8E%hViuCk7G)a!H*x`=Q$^53-{ zdt56f8a%a2v(uphd29*H%%&=%Pw~#u>^!m&*6j;`=}LPwx?5_hDD)3LP}@z5rMyL8 zttGv(MNMW6JRk+5-r%)L;XfKP9BK=<~Ah<)JHW8n{4>a>BZSo(F}np9k_U3U=k)F`cqEK*5YH{n&I23C+cXRYz?qqi@{@&`F@Hz3+jZj-Du_!Zv zLfwnXASu8c0~$xOOh4vfmi_hqGX3a>G4BKKvhH;}60l(L6~RC+xzRiC&6uCfF-rD2 zF>mUy3w;GO1nme%H<)NCYOabLrl8mpXUz&D#h&_yXwQ3lv`uuax>Um|h%ThTXcJ2#M z_s6)M)2vbnSh{7Q{8#>C-CN6f_lh8<;!>K$HF9bOsF7SRUZC!fwwAoWW6F&iTp59y zTFwQRhe!tLU2|C&il_hyG(%La)?P`geeU_+ngUH*M%HpJgfNvRIv_#k2&lp-LTX^n z-FuhIHG!;m=5Dnyca5FgpS))>;M<)}9nn#i-x}0B zDC7U`g#zUo=R%qO{N*r3xEqZkOesHgG*#gGo= zP5@r1%0ZO3DJ(zGp8DRzG^+{iwJy4z{2o{J)IXK6zmnHllxeJ-3-ZW=XE4EPM7_tO zsQ2@a0`G-NKrQ&G>|Ed|CfHi^2~TVH4`9{Ddk8VDD~)prP`B3JRhuxFO9Y~&MZ|DnG6!+hnrzVcUm<->jD zDqk6~Y|+|97wLBj%B#32%R5m%+9)57vi_T0#DAKqlOM2Wk*{3sD=+btm-)(dzH+^< zyuw%3x=J$oKf+h<{zxS%P>)}iwYDlA(tnqa-}7st;P?EvJIY7-__c2&8TBz=eY3CJ z>MN_c&s4PU@YQ$v%AP+J1^(lF_1(U5udm$iDfNHTX!njF7WHIkR&02GUkVSf&WyuB>DaMQ2SQ0f&UC2|5?8B*}n2QzVf-g@_D}U z`M&anzVZd||AUG)8jC>?F~WC> zyyaY9d7`g8%~y7EqLMe?SHIj>cIJrUKiyY7#^5eepv#MMR|K(##qWyC$ z$^|IHhw^Gexd>5#VV74r%2AX@8|4y|_4<&7`bj9OoNsMH8FhAz;(r=t_{P>b?k1G6 zUfE90VS8;Shp4iigFC^G^~}~W_8iJs&+IE$zI6x6SkLSmRewR0XQBLKRUU~l#=?G7 z*B1)`U2PpN#D5sde^B*#C}VxH|Hb9NyC`FQ3i{$9=!=KoRMlR^U$DYguJx6jHGu66 z`o=$aypR7>Rh|uf4u?K_ef77f@-Ea@q5gg@hwnpq0m_g0_@DQc-}06J?Jb8wzVdiq z8Dqj1+Y?&iD@IE=_`Ne zEr+vw<%qA07~_lW3s?Kf>wV>BU%A^?*72?M4?8(i$-m6U{~cfXPG9*~zOs&QE&pv_ z{eQgWG~`sixc@W^gQtuf;VENId&<7}PFv%vKSq_$L_99SEsM6l5@q-@P3Jo*BX-g* zR{T_6hO*9gRIWq$N2Lfrpuyyc@)YzpXvUu zmeu%2$@{*qd^eY^d(r-Aw13D~|648x$R9D(|3&eW{)ol&PrUpYBYb5{GkKBxRv|KU zyg!0+9Ob2|p7ckq&d}pa@;gyRpYo#o3EMMtyhl(z4rOPL#P(&Jr1;N6J$N(rs`9lc zWB-@&O;x7;`%%70mDxZ1ScP6pqqpk3uTaK@db;CzpWS(WST^U-uh0{E&(}@#Yo~Z9 zOt0ecR~yZO@e+jROHlOS!TG8ZJyGU&y!Bg4#=}7Uc0w7x7L+QR>pYI8@9(Id=mmr_ zytkL6pY7@|E2q~np{DQaC)5c&LX}U}bU{9sqi;oN0zF@MzBmV>|B00M@wZXJ+my0| zM@aO@Tg!95?;zj3^L$ZHKE^Y@0pWcd& zjUQhV#MdM2-kG`r$Se)HgsBBR!xt9>DwG33ML)>TmoSkN2RO_vp9GQBfne5KXocE8)CcKjc@F+&8=VajAL%R6Z_6|N8xx zSnNP=PVWEWoBrA_1R8I#d&KYeS|{r~)Vo6D2^x0wrA0s`Reed#DbrJZ{UBF8@%Ps0 zr{Su-!ht;hB5sr z%vVGpfxdg8)FDqRmF44h&-=#uOC}g54b@vK2YR^;DZ&|Z3TtEoPuZ!5NKd`LEMHR~ zj{RPTAtJJl`zr?y7hV!DU&KG)7jCfR;9U!RSxIR?uaW5`SJG(O$#=^m z3JZ~{6zb>i1w-;aO%-f5M=@h@*7P^E!^H6{bHlq3IU%cj$9nEa0Cp+E$mG{-PRntPGjs4OHTY;ZH(Q6LVQ)X zMJze-hOu+v2b$=yv*0U@DSi&5Pl1++dFSw$V|^exe3Pr&nplr@1C)U;ojD8tIJO^a z#O*f2c8rT-JI2Ma@d?9rjD`kz;!)9x-Y?;d2LHYv39q2Kt4#Nb{$J zxL9Mfb>ie8!&eo`Mwly_gt$QSL(YX7?=*aMwZU_T!E>L%15r*~q2CEw4t#jN!t{rE zI#ujh$KtkHW5iO2#%H?x^xU~f$2LBTg6M=U_|3_6R||2q?(2F3zk{LF{i4Y?G)7y8 zj(Ks7rjK^#7sa8TYgVZc-_$%)4LWRec)AUq-9lWe`Qa-EW8A-`==iNQN1p(6(E0>M zy7~kReFD%y_Z6rW;@esde0!b7@U0{Nba$)+=elDZfId$A=LvC@YD+nDoA&c$VCW~W znL>O=^I%RnYae)=wXaf$D>TnSAvWvWk`Ur1Ei+}%agOv|O+OJ>_jL;RH9p30h8eNDdySkr$c#1Az6Ff*ojAd`|47e;QXy{F7-MmV#)tuj z|LX?N)dtTiLi~7`97SQhYhd)N>4AvbHh|cUEBOJ$lI|9V@p+e)dAAUE>wfPQ;wPGZpAh$G{Gbp&)%X!1 z?$!7SA%3Ru(?a}QQ?=R#{w();i<07Fl^EC!|;`Zp}&JW4cv=YeY8y2wMolN z32}qcA-vPwkA;ydp3?lt6;Ek?=&WNte7!pd!#BBeB>W>Gey!UgZ~R)fz1!s%h3;IS z{ilv?+UM)}MSEZegRbWn(M{~|z$Xs9(r6329G*ruHt7AJ-O6@a%e4RLJ*Srxo!%RJ zSz}?W-QaQ7ZnSmQbc~ThuW|E_SS!S(TF!+A{aS;5o4f9dr*XWl;*j*~1gQ#@(3A6`r_-7mZ3l09YUjEZmzqGe>_Th*_XCHouyUxGY{4#vXP(jTe4}5)_FGyGWd1?pmvO78;!XS!I0#|5=>BVm;;|q{ z@Bgi(?*89uaQFZ82N$*N*0Bce{v5h>8oE8=>Sn<|T2E`atEaWz&~vAu=M9FQ-#7HU z!_f0?LpSv0==_|aXPM!{3d4srhMw(iUvv-d+!O5<;vMBTagz{#()d=lFLAGdp@TDa z2O0g64r(lD&N^cU+x1w8V~l=NM!(w(`DYsVLZdIp)cKZT-oc0yJ+JBgLT6qho{!OS zf_Oeg>o!q{_qC0M?%M6SFYY$>ga_h*p3c58V%!TL-kkfdi!u!GDVw2QLMN&P31H0(>On5z~R28IQrc38J0x*v-I6#-Ue%F?Q6}{xk4tjKjYL zK8JBWVol&VAn~Nr^T2(Ki}nEHc_7gv#{u8WIGf(#xr=euiNNH&PcQdwM1cv>@GnRNzC;9Qro8Czy zJbFGb`jd1#hqZpqcsy*kURF2^{5IprGr<2~JnAC6`;);q9clz}85d%#0)>pTL%^87 zB!4_)1Qsbe;w7+x@yMS8<2g6+WF7&024mVg2QFYt_iBNw7)P6cZ)98qn*z5p9))oZ z{DN@^b_E`1JaG;%-f58bJ`areCOl>}@ZT6mK0<842BOpZIQDQw|2^<{#^Vqh_9Vs= zF+XhNK;kdB6u6Ob?oWX6jGgFYuZ`!~l4k?(0ORy>;FB54zLYHmUj<#+l7~H@t!xQG zcU#3_)*a9fijvISvw=q_InXhPxRia>0ncKbnFG9lvA6-ap0NepgV2fi$9xRj$~YZ5 z29?iqbAgr5@nh5?sC9!Mf=ai{Zv!hok0&|G&jHNGpz?EWGqCb=*28%JW*YaE2A_ov zV?2C0u!{NgKLR5TNVhzUd*~R(xr>1}GcLf`g%D@NGXiribQT8{VCAa-=23c-^&h?uSmncLAMoK!4}KLG z`HuXS2mRC6F^-G^ZectM@tck|#AE#(cqikWkAYRJ7CZ+01k*=A-wdS>#bHLSYD;uA zUbMf?Kpc?F;4Q#9#yWuaGJRqg_zK4Ku3^S?j6)v*f1mNVgMkqfQny9G4>B(NA+Yjc zBnA93)APR#{1)Shgx_ZzK#XO4!Z`h5tjC#*qs_qM7-x8to)h&J7B~m>7Nw?R(=>wJm)c;){|kEGp6?&he2=Rk79lg z`yOL^3ozoC=%X=)!+y!wx)=B<#u*m?zohV4z=&hwANB;+1~nJ5F9jaK^szzUe8v%s zbLJGr1@{2YVmx{&@B+p(&ob*7XTAo!fpJ@iu2)+m$i?1@-V-$)R^X@?<^JDkvo7NVxD2}S=KX*bAAf^D&sN#09N@S4Bo7d zm>&KFehe|r2Yq-B<8h0C3mAtmZ-!4}oD18B&tXjOcMk_2`5}4=@CwFxabOkO0gT;n zl!?ba1Q@YMIA>HKF znD)Y>CNR#&SdUV=MInFGT&71y0oO1NKLOmRFyd~M(k*Z_@B>QDEx^ck)R&Dh8ud2g zf_Chspexa{UI12OLGOX*s=`Oy%ChID9Fv$`vDEQ!d6p>fD9A8DL!aci`a)!~di67>`1J z8ePJ8aW(en_Wqmh3JkN79B8n2>G zVAvqr{t5Vf#=%Np(MT{qI z1y*An!CV`&LD8Z6m=?zAuw_gS|q=&0#@@Vf-xU+v*I5C z{A0#N#{l2YI2WH|R1OIq2mF$f1D}t1m+{!!fz{jzbs-kROt+xt*c`?Y*f_R;F@4Ws z>@>!K=Yi)iE`pq~%Jw46{jn<){b#@!Z}ROJjN{lXjPvgUK7nz@XyCIMj|Xk+MT&nJ z@HZG2+z1T4NzN$5<5*?yaK!akW$$o|^H^o?$o~Mp#QfF{U^VVJ={Tprc$1vmTY!&d zoR7Rh=NCi|LC0|^#s%HLyA;oDz!*#7$twj$j1tb@416o&@rcQBu%GB7&I49489_{q zdz$GOMltRc#$({)aqln=;FI>;)Rx|Hrt?B6ALE}ll5r+{k~fiYQ8DmT#<>`WyxEK= zK;OKDj02|uH!#jX+~uK6GRKbvhJLcI=YVfzJp7NqcQMX^j6B38@npOTtmahyPl12O zbbC9n(tpeV@CSU>=O0#W?G5;H8Y|dnDtJ zU|fVa91p*coMEtOJjRu95cy-gvMaC?_#29T4X}!toK?UoW(rY19&)K|K4M_JiW$oD z<5kQQ{Tmp*AfB=C&-lMHo^THKNf;if1IAAYt zAHtaI%CBZD?gU=Xc-R}jh!yH<^}jkI2;BU6Q?NpK42Ax z>F)tAV7k=@T(9t1z#AA(ya2eBG5$!lm(og$N#MLp(W%^NCk6 z9{wNT8yTnn8u)g`V>5vtXFPER@C%Gb{Sx>Oj3g{j3K91tKfD}R%|Tip3)LK?^|7#-d7{V}g*^(RU7@nKXgsir z)v@qXp^DX!(6R6e<`*9UtNECYI4RUIjQLooVmNCSu(G`nV^OGLcvu(k-&s!ZSlqKg z-|hI1E_#oK^v{X|D|;z!iwYJ0Tfhe~&OQkkaX|dTrUEZ!JoX>JD;bZu5co*ObRSmK z!I3?PZ>~_#U#`8f%kEpp^bOiQ)Bk-(H(=o54y@!E58IJ}u z{a~g?8bC+gW=*eD`kV-QEuIHy`UGmVWV4Qs#@NmXq z%*|*X<6)Rv(Na9iRystdF+G1i=yUM?fTqt=Z3jSKigy(>y`JgOpMt&t&*C*5^NnmD zg}D$_aWb+TSjEXGd`1y-w`+ct6NZBp-HYe)ntn0MnSi+;{RY0Krs*mtWIqV{T|#Wp z^n01V=rPbAXFL}182z1Ui`b6-mwK*57&%bNBn-dF=S{%Hh#4spV_2MS&~p_1M9{~& zZHuQUI&w(ybVY9hhTo(d#BcF3Mc)YwzsbI8fsax=e*`{O@gO%8!`D(bj8E}7Yzv*q z6<;F6dS!3%x0#;yHt63|ay|xzAE;kz2{7gqjRpCk_!*-u;*502Ku#!r%b@?spns&~ z91kAI)%+!Cihj8eC0UC8F7S9ohrdgTl+4+{hbTJyUGf!0hpi=u59tT^xTKDG0+3yT zIF>fT?h?!$(x2|PO19vujKFl2>~d`{`KoH05Bg;auLHh{c?xoYZ&37;fp2krQu0$n z<}Z{j$T=myHt5e9bi@z&mfo!^dDEc3r|9r!$v+hRdLc?xEZGx*GnCAJV8jo}`9GAs z4}4a2`Tu|Jd;jkJ0R{{hFyRIU44E)s!qlllh76fHVJH>JCPPP#Kf=(NBZjUdrJRXL zNjejal0H#UQc|s?!lI(0M59`XMMZ^0MTzozUf26N=YC^+z8`<*!Qp`fK#MAgG6BDPH1ni?iuNxr^^GKR3YZ z%_beb&$D^hY;H%VUDYS;QcM{nFZJ_9v%$9bD`rFc7u&p~Ha|9--RRVt`bok^xlbL& zNq-fed2`U2Hy4EZ8%`ha96!+~zWJt)W!@J1_=D)w+jXHn*6A_od@OY(HvNfhtR25% zV$b|s7uw%!vC+0;Z*}&;K$tR1Tcl5fKVZ!MvG-eBP{(7pIQtRUjiq0yJ)dKrGMhHo zj%!(8f~g<1q0YvB!(w1w9DB%kEBrg>vygExmi}|C#W{|)l(J;r!z1mv=7*Ta1*N78v2IR|#{n_>}u^B@3J`{jg-I7sD+s<}BK!B|JLSm+lv`+XeIb=4}ami6jD|JHL z8jtAzcJ}h@LkWFC^<%sOgz+QgO?($-&QYdsPOv&mkZwYW)3f`-Q_T-$op7b;4CD!v zQ_^NruM-$o5?hRVnDB06$}xfSA=QPMi?rRTw+Zwy)sMgrxH>;?D9kag7C*8~__Why zu9&df^12m%-uMOhCyse#WiWw$6}IVw-fakfixmj?Xr@zB=>iGO7OG}%cPkL=5 z>gW6qIbEKQJO2r@uYx~gya@iB*%ZK(LF!GOk30Vd9{<>U)}X&+`f8XyBX!lEK70OO zd2ItM%lU7n>U?6h<%P{e>R0S#Tuh`M)II@^wsHwi@|Zf2ddvM8dX;BSUz9Rt66Zu# z^-~Gce^e*7iPVXvC6=q3B6X03WJ(doC+ic3=Ul@15%vWlUzlroKjb}f6%GJ+^tKc(1a1}AjQaZ%) zrT>;v2C2iGDKPm7XC8xRnawZZ8mG(k(o*I%vB{#WrH#&}4{cI7Ry~J47Ew+m?RbbjnrwWv3T?5dNm=l)LmhW>1}$ zG6ps6T=-SvN8#hV9t5AVTtJ;lyU6cx@?Sk>*;Z?k{B#hyGPLF>Lo$_eDjFk)MGvc#|GF|X7r}rBG zb3E3xwA%&D3lY;dl&QlD4jI$F7aVqdBcm6lUB!RDo8i}t?}Y#9+0aka=Gh>alrTOB z_jjCM0uM88g~u58!0eM4Vhu2Lr}5Ol3yl}Sw;6ARA2Qwn?{wvrYrvCUaNL)1I_c+* z<(}cB-|*@e{L3=wgwsb+pOap<82+q}C_0;bc#zo>*JSEN>NB7&Clgz>`I&r$)8#we z)USE_jX8lZ?g5>rE%N$#*+_#1G*Qnf^ui zBTgUH41dD(zrmk$`k>YDXPrKP@jCenPM7oN$@CS8X8`?f^0%z*df@L{UhJDpy{Szb ze8kF2Uzq#{XCvp#lTVt>X81p5Q_pL3$xrKN6FkvzED2Ydf67}nhu8909hP11^ufef z)@VMvVfvZWc|PSUqpt|dJ*%<}WYoY446I<`P^pZszKl3G5u2Jx{L;N#)jG# z!@n?Q?3d97YD3w}XjiF+fy7uwpNVwJt4y3z82jp{10HTMGk;GR7X(+3R+cFjI$i32 zN|pJ13Z8A{qU=-ZOy37D^wL_Nk?%57tj`SO_%>y&*(725iqwy^%anVaAGsGZ#pZ#b z)ZvuJy%?Txoc&Jpy^huY_dGwexA^S)OKe_sJo29~V_$SB%hb4INjsG>6UH!=IZk*4 zeSYd>&;Am}edse&Yt2T|5=WGlJ}q3pd^vTU<2e0!>PE+!??)VKzTJ+c>{I{8@i69< zscc`0A6ceSr{Z%ku}uAmWA#JXq8_{n<{zL{6Y!Lm%VdXV_1-II!c8ttoj zeFYuAl6Lqa_%YLI!)Z@iY>&dbQrAwWec8pI){XuRXQO4L52#P-W7Pv*b05_AI}` z?CCG%bDZA)@9=!nKLg)j_S923<3;oR4ZOzj;6nHgXCv3v%I~$j67c=5jB)y1`6C`v zFXCtLEOf@I#GUDweIflrW1v4?c*yiY@NZ0~tuADa(sFHr|6w*0VCqxTGS5x#=QyC=rdwUf zx$*RgPM3ETOux)HAEv))dr>FT>x@^!?=U8>=~fRh@lP4m{xnR#)O-{07mdZ|cZ}&X z(|=^#0RP(c&w-=hKhpM;TbAjRWgVRMTbS{sJe%>9!K)@c?xD*W9Wigoi4w3 zoYCPi<3w!achxg`EZ?W#Z+kj(vh+83wqgeTK-w|A4L)l6FJS6K{V;ZB{LA#eqNSN$ z&F2uO7m8No>GT8fUpNeHlKCg*3dVx!%taM5&Ayq>YfQfyrXD0;{sk4c8&lsEA2()P zR1mk?5O2jx#wYotjx=V{UPOOY?u3V03_IYlrXPc+8E=MXn9Y8eeyDLa!q=G%d0xb} z_)IH=Z}a#bv%eD^Uy;o=k3VfTlGhiEpMjtCY{*;l{TBKUO)rOO57mDT|K8~t)X7D( zi{vGIak|;iZWl9OiT%)Qcz|a!#`GjQZKP>S;pwK6*TvR9(-y<;ayDu7yNlPQ?rmMX z(e!ro#~i0i+D{o*!n+)2EP@$#npYFdxQqC>s04SSjD<@Um@f9qjj4xA?lmUeCD>`&TKIY6#qe*8 zTVReCYQxy6%un6ps~l`P`Bqvz2UYM?r^h$LbBy=G)X^g1l%?`LrtgE-8q+T-+l>#v z?>9aOf7tjC{D|>kxZC&${AuG;Fnv#Aj-Q5~bIkA!D#=guv~>6f#tE1{r+OZ2ZI?z_ zD`^|m3*gs`3t{Ge(KEU@=fW<>%5~{*)3>6R8585Bvy8XHw2{oK!$@~&J?Da9+9giU zC$3AIZO;5L%or5=;Td8Ze$|5D1UI%T|czw19S;<}W& zi*)Kv`jzUGSNqRbu=%s6|I_rB&|f!wQ4m~)U$Gx{9^BV_R>9PR>Qmqn(_7(EOWOul zn$2u@rrA)&%idv3yqB#sUJT#u`QiLZ{W%vKY^(eiKnOvzQEb{?E}*Xq<;ER-YU)$)F-x8ON^<%D&_~( zcfg&_KKm}1J}};5sA3*d|1IdWhw{VlSDpR9kHX(J{p;}eoZkO>_-Cg79{!d2tbyr6 zTDOPczdIXwmbmJ)@fdz)O8%kEO!|i8d)`cR`i90<4^v;tO)%}Q+z#Jr+zmfuyc6a; zR&5T!KQcZB6OZcTKl2}s<=pa$gz+M{z?ExgF+9q#w9ysJ$x_d9AN&gXp>WPO;5tu# zxA7!&=4Y`f6u!f8el^_XSmvKAb~)}d9p39W4c}J~x1`PeAGp_XQ9gX!ap7;^Q;y~O z%q;eay?mdVRpdCk3NCS+MZcPLiQ|4FVA@9P`=HHQ=vdATX5Hj?#58!NXG32R`|RJL zZ*eT~&)Q@5+u(hUX|`b2LB|6hgsso_r*F(U>GYgmyX#NlGlP1rrVR$dvQ!UuHd4>k zeuMKP(pM}jcrq{ycA!W(qJhqy#DlGF)wUu4wlj_&Jc+NQP!~8RwvWvac z$!ywQxacqN)n@Y<_+5@;^y}G8jt6}izRhvoAK-T8Y{{2p_D3yF>R>i$v|Md4F{=&z zVz$LRoc=QVJI;^9aAlg~eqVtLJU!`nFtJ^Ek=fh}U*%Zlt}Ct2$eeuTT}~g-52oIv zTr!7Tx!1Au?JHk!Jec;p@@2;w1MQ^tpWs?DK)sd?Dws=Ch{S>GJGl&9zpp&%@M<_J=oN>q~O|s%DkbN0!5_F0ITP zH5*gcrfTjt|Etj%7n)Z+Z0(yv``3_%#5Pjm|C(cIyPEGg)|jmx3w=taGpD`#CJj++|Le`E4#` zka`$NADK)2stxrz_anyC!`#PteL~N zWBMxEMq?H~@9}JC8_{!^SFd`=@$gLe(~i?e!t`gc8E`H9ZO1aMud@Cu&%0iA#OZR~ z`zkA!JTpHp%jxpW{5;xT{0yTn%(HeJ_H%f=)8)G8ys3_}e*<6YIKC8~>v%AAJ8z+9 z)8JU1L!M`2IoS>0;dFU^d>(yB@-5s1Kj1hJKaYF*GmiUl9yRYdPyasWQ>2w;-mk2m ztc59~o~wv{#&pVCOIwC|Exxp0(U)sSn;+(tTKcZ~+zP+jxCef}@gbOfYSRlpVSEhU z?O3j7)_&Kx7^Y9CJ!7KwAI6J$-eG{*&@Zk|a<9h9a`iM9TavoJntc*y@J@sn`9 zm8B4FG@ZHmYWk1b{~4w(gh$a&uWs|~KWO?W^bcFU-SC%<88=tIU`#){8ebaQQJ&2S zj8DS!8PVmLglk5aUI8=S2cgSy4Q;Gx8OPU9pMyi4ZH=u8opG)0QU`aKO*y=kei7Q! z2h{$(=(~*>>(_kE_(w2fN$rc^@0rhL_$S8nv1@*9_OHW~NAne(v8ri1VfKakwb`cc z;F+)UT-wq7;c>gO0tdnwn#%x{aVEZ5#_I(2X@V_{gR-)BCtz4jsF z+hOWKZSrBtd|qh(O|#j8ejs&zbuHypn-cWn#b>wMj8DS59LwBT_q=fuev!UrvDN*~m>B9vGurg)vOFGQ@qdx$9BH%2hB}qD9?clK zZj!YH^?%(ZrsMm%nPy)N6TjLsPha;go=FY!TIuoooXwcN*f8frHeIGO2VD2C<<$d! z(sc5UBQzkLqaiOL(>~ zw4sa<*YeCns4ua!jDz{j#`M$qw|O?}T>LT0G@toO@+!v1{11CJA2FMQ=#P2)S+k*^ z%-?HV4^tO17GkGh(x}f4nDR#YuT00^{8v+H7tr4%{@7-odu5D>z1&+_P;U0Gz?V86 zn-5=UX?MU^nSCA1c#wR@G8ZnedKmjoxXH6wVK!~(j2X3;d^Z>~|1a3&cw8L*sPSa@ zapS9D@|Lvn?B{~d8&fw6zH0n^m_9Eyo%uxVi{bgE{}FyS*Cs+gt4)6s{jSt+H0nD%n+Kgu z3G-R~Bc>5tyV^@^e>0u7sDFd+@aAVBZ7lUx zLc1&+p8B20Lh_Dm$Xjjb=L=_;&i;kfrhfyzmhT~=LU)CFnvJIE0ote zE?R=V(PR39*kn_#g~SvwbFXmhMs(^YV*0mm)(z;)4-tRbapEiJ^cB&ScRNm&qVMsT zGKkGE>T)4{DdO)r&ipGn`$Si!UkRtvrVC&4xYul^q9676PmYJtHx}Yc{R^LT+?RS? zc*^55j{6kwTZA-^a~v1a7q0K?@gT>2>(K4ISDAK_yoL-wryoQ-(Q%w(&h?W$rk%tl zdl>q~9?x{#?*uw+BR0y6PvO4gdHr=BFLGS)Ec#-PmpYEqZr9)9@k+<%eFWY5jPe~$ zAJK)**pa-H?{+M|AG-bn9)HMj&R@_OQ(~{Y)p0Ik`uc4iKk2xD&+9+s@&7m;N*}!b z3m(&-#OEmHlk30c@jl1t0s4NAf8;pr8uXuf{IcUD{pudQAI?o_-Mh0gpfGc<77hANTkP$H_71PkFr4Y$*2)G4s=@?PB=j(Pl7#|irQ4S)Ce zKgJTG(OCTa#h7*psQ>FFW)^vOqB3Jb{>F5~ zeT?hT8PBQycdjvIk1=nnF1*l~@gaW`T6N(@ zW6Bb1_L%%4|IE*k{|&}9*xzd`@#9Nv+Tlk%`^Sxo(V2(UMwoU{E`^zgBc@%H#sAlg z#s4>r+u;2kA261Df0}C3*so2OI(fyo2xjc4|8n?W#^e>xGTsE|8gGVamxb1*@sY;# z89BbHE_}W*eIt%v)rBjJ#pmT7&ob^pr(Gid?=Y@Kryr;;++-|189R~xHOAs+qcP=` zcWtN*>EawWBj&iN+>FlHiTD%7tI)R_OI|yS#s3~-@xRx&3f|}0?>Fv5KkV5bF)l_w z>hUq-Qgr4wjYpU^Qm%xV-y&vwDU)wnMyjpT7++AE#8PUEBxq|fm9660F*D?Gl^ zxE1|sW8zF_4pcu917(YNvGFeSTa6_z+FNZl!L(zHsJo$6Aq z$Bm_2Pa2oOUo<9`^kg`YQ;IB7@yjimT_(YO$%9aR^m9hHmV;~t+dE=B*B z$F!r`(|6>zouU5>+AH*#f!~PntITHxb6~{Gfy(%od-)MxXk39l$Fra3+06I&de5G5 zc#ZX$j22^J$yn?09mWz5?V|R=w2N{jyxC*gMRd82n(;}~sn3k3jm7_GJ^sA0_k>9gn|f%>0pY#Ix`9Y<}QPbk3VWG z_SCulrjq*4{ERX6pGlpoF8n29>OYe@S6!HKp!g1C6(#5A%40W63wG#AEW)yu{Bmk7pQ5 zzMRWxUXm|!nlf`$R=vlI9LI<&i}n&5<)w}_-xVI;W=tJswRzlbEct%ev6h#%i}K~z z6fx%vniqW|YrDrg9BaN`@c7Hd#n^w%<8K;EzCU%W`Mzi@PEaq(Xo)c%k2hw2g85Btgqh!zD`D1%tBhOF zul4K~csB3!_(sp(+Dq=uC9J)IZLqbMa=Y30qKECZ7Y^I&FdUArqp*!H=^F_fU&=PV zVp2cfbv|Pi@b`_$C-JhUTU*3x(O)%PIBW~C|F>t)oF;V=Lznlo>OC6jS$^BBI(cOe z@@&R=e7^B!Y%cTkD~$J`&-2*oImSGl&2dEi3tK(QbMM*oC;6?eEZH3El?&n9J$|oo z5qhV`n~W>bAMp4g$1!ZPKko5k##_;Mc)Zh?PkGOj#1IpH*0=|L!Li2q17oSHLmnSC z-iH2bkD1@pr{v4Hi1;<*-RP%0K5b0C@>_1L6Ee;jV9YTghx0Vmg*omhx4^|7(}z^w zgFeM$#)#_luN>MjV%kwSMx620KccI_lF?p+v#K{;@KN9C{#u8hb$L(g%XU;ty z-)k)SKIrko#@o@UQ_V}b+gS2tPK)woPE#&KXHJXwo5n@xj3d>Be`H(<|J-B7m)a~w zXBr|GvBE$d@5xxzi(H)nP=m2jkm#J+X)Xg{U{u^(O$UJ^n-AfXH)GsR)oID z(-)ggTjehEc)9Vl=&Lh%x5C-R_{r;IO#jcLPSr;2lb-$f)cI9jsh76Qn0)hQcsA9hSE1KZuRyrQ86I^qBJj)!WfIHbp$ivBcTuqSQO(`cN-w(}rGWya{GbQ(c%jOIXu3 zdui8t%-p5+UD)62*?-j2IqpP$7$a&=J;?jLm3!eYdHfZ#FGb&Py7)g}ENKsUeAw*i zw|#!^*)uMpy#D3!>nZ!bIXu^8ZQYmSi!y%t4)S=Y@mBPt$Hm4w(We>H)^cA>{Vaw# zrbNs!MOpk%{}I<2iy!*G>Q(Sk;~IFK$9Ec&u5X9O^p(gb$9LrhY(8ns{=U?|>cZ52 zWd8%6Wen@#$Hqx)s9V*Aj~KVYuXs$ItBv@4&EtO&xV zw23~eD)l4!db2qWf6(I(8A}=I^Xf;Kwh)$c+J4WPeguBb(+?Wwq0_h3z7Rg@@iF5v zbmj-ODTm)Qrri0YS6w*YxE?MsW`BOEF@EwdGsaIo{WD5Snur$}i=S3w@zZ8ZocZ^8 z%-pMK#Xo&dS^RU(uPlCg97}!X?=wCLhy764`eAG_jGd+xK4MI}`w0%(0RE{bnyQe8gksUiCw}^zZg~yRpRoMaS|t zGWyde)#pC=>&6G+Zy8hf{alKg;xb^f|_@FymV7g{fa<>TJL}J-*TS1Ul!6Vk6}m zu-sVUX)_z~AGSpcyxDZhI-tu~{7}!c@FUBB?Z#E`Gai4=Sp0n1yg4&d$@ALHi#?-m| z9fzjS&(BizGw_IK(`#If{a=l#r-6SrE^_Z-*Sv_KAj@>}mG@j+YW@r8tIEabV>}*j zycm6waRWTnm^vt!X-uClVBSzaHE^wGUuWEe&b$%jyVO|XTx(2O3hpqLd^Z@=?gjT4 zOTG^oOFWMli+|>4^)LJx<7S>0PBX@jy#GRNNIQr+R~8%Qfk;2!(=Re!jLoHBqwId;CFnc}$(F&UhL0L612%P<<0ReLZ5vkMaq0>RebB z`MVX$5+{8=V%kDj{@&1_9*_4KOPoLS_$Q9z;{P{})&Hx;;{UkE*r|W9|Ch(F8{>a) zhR4~C#lQTXP2;S9i;RhLFnvYzICV0(#JCAA^O$j^HqGd>90xmK<{9;Q1ZJKQmTQ26 znP-$~uffYbeTApDdwPd4ePM8yW4Z1+IBW}vjk?enME{g=CH$7g-j#Z9w!GUy(yC35aS1m2JwD*2rT!!PUmGW} zXZ}&W6#je4Uf+2k{>is6%k&PoZ|WW0`u>a1W`x-^VZ*$nK82Z=lqD_mlCt=;wvfL+ zUubn6r+o{r^Xwaq=`-@TwKOelT1dUWlYC_A!)>3-eplpKUXe? zw|czIxCWi`lgQ?Cp3eD6cnmG%JTUV49pf_6{@hFZvX}Ocj^#J1h4gJnn?XGn{?p_C z7*i+mK8w(1Xdh1}eHg>gr0Hn#Ti?i@vPE3srKN1D(-uQ(jj3n(d#kDoFEXZH!W(RD2TkV<8Ct8~h{hBc`%HLj5 zoi-f$f^j$el4t)*W7=Zqs~-QsnEDuc!eio4pW>hSJn~O@l<614GCj^QCf{NGQ_r-> zyARYpKp$mX0#7lnf-f{CuVJ%|Tj9CJ9WZ@f{p^Jo8t;dfrQTyOY`Jkc`fVPsGoFFo z?lFGPm-?j5hdp4-=CFs1sjFek^J+u=4EvO4&pbcD+F}^UHo?WBTcE>RfgDv;3A)nLa%H0%Q8A zy!$|P$~&AoSFVDoTje(R9mbL`bsN6ZVE78-Bs%S+x-e;!X-D~cG!frpEHQk@;|Gn! z|5lIbTbi~T{b`RsW4s&v^B#Z6nEoJtOG(oTKW}^p=G;d00A?;ymY9F#@o$YQ(Esf5 zYsQu6r&C;nFZHvS-*x92Q^ulx##`WF#*{_==7iesg=rUM;w++Fl!>#b${628^bge~ zZLP<&ca(OK$HWo&X|eYqh@aKQZXXXqyEL7 zbD=1H#!i^8ypuvWsNpwf*`^o4`6>JJ3OxHUp8a^wev)TD)w5?DssB!VGLDpY!B-pa zfv+>(3sVNQIRZBr_rkXtpMX~xpM+_bff7HhW@C>k2{uk*PO>V z5*ua4kur5Ce@8Q7VpXm~XC4#Qe7|oj_KYLdg&9Z6l5elaM;*)kvhz4!QXBfC{w+rF z*#Vz1n|yvRk!D;14>Wt?8ZpFll8j*N=(`}|@I=pMvS%~hY{Y(+*&Kl97$1Uf;Jb>I zYs9;Zi_vfL_-5mJ^fu4F-M9$-9*^(!>=`3D;=cl$PZ-l)Bbcu;!+e>qlq=Eqdfa1N zi%$KkjWG4Eya1;DBc}e9SEF-$kN7vnQip%?_^-y~IpR%YLLEt+YFgqM$#Fbl&SOKL zBL^98!e*%Pb~tHFUL&bTwa34_Ye1R(BdH7Jo$%$JJ#7@(&rki9f8_PXdDy?(udEnk~vMe2>bVW%-B&~%Jo5y89S;|w<90%n6ab!Y4lHe%-9iK?zfKIS4l7}uhI#pACT zOJ0n-C||~1AV8uebjgN6PXQ_A#{ zQSbMdF{QecrOV?j#>deaJ8Dx4bKFrTpHZLpnE6okt>}A=cfdWy;^#-kwC|{&8cRI1 zi>4K(U6duBS3UlNvG{r2xC7=Gr1s<`zt4}DxlVaE`UFp>EmZGCXN*LAvGMQGXL`)} zfZCAnXy&x=H~XXCXoGxj@liRW|1CGeL${;F|1`ZqoP zws9vq{k&A-6sFFF<(}r4mp!JRt4{3lH?|_CpDFJ_r=JVUGKPMxJcIIOdYoe{bwK}D z8)5ptGBFg7^mvS8`F&OK`5x0oVjq*V7pDG(VDUws&T&L-h)v!vp#GC^oiTM)e1pgD zGHya=j70G;MwGkJX-D-b`QB#S1$UTDJxm$YUi{o|EaiH@So}QZ*?-cQHY)zK$DcKp zw2YT19*+AO18r3NEswurEU_Ilme>v%OFg{eSgu_c|K4<|+rN1HH{%xce|vTNhUxf} zcS2|k_#B(>SbUBxFrC=O4)@sFRPJAlWq#AN;)nSy@>A(p{ZyG=hRqz$o?}g9|4z^T zM$dkkXU`an?Awgf@kw2)PV8ehJC=7gjwL41gOl(h9zSY)8hyLRlv(|V&#!wNwo5Vk zkInut{4?WY@NYf-ouwrndGCY9fbVfOcBKE0>ti;;Hg=@{k1I^I(YPYBp&a9q#wt>Jk9hn_+rogGSB{Mv)_%)b*57-;}&_m*qE}93+r4staI_d+H52qV%55mcX5LO#FmnMC$7Eo;~|CFR|ZiEcP5$MhAAfxO0Nc${raJo0XiFrM+&b^$SrCqGTg z=lBxiQaEfo;TfhA&-k$Ih-ds2rf-9-9b>{_I}+#k24^GnKfcLW@@?^WwedmpI~>Qv z|6Ru7Go0V3|MAv#a_o@5xu)?8hi%sileg;PhcwDk56`CFB{Kdw<0Sg?9)H)k0{!Qn z{maHh=$sFP?;aV?oTe=HZ>HWWQo{Js_mJSfgyT`feT~b}&-3g@8RNfXif7MpN7IV^ zYIeIPd1jTwDN8>0LqaaJ@5`bm`F%pD(30p` zD!T?ET$8${5!Bf^zvzqXd{wx?&Mk$h6Fr|4Ud?%Pm~We%*NNW2c}A#j;#d`O7jtXK zTN#rfche6--a%c2yeoBGI@puCCNJYKypIsW=SE^R_8g1ob@p74@S@c7X|aaX`)cHPGbfB~wLOO^_HFi@s&I!rlPtW+J+BT1 zGDqldd4#vxZ`Opn?e~eoJM6ca!n=6?RG8Nu-pv$p5AP%jdB6Q8SL_ek?~8>G+waYV zd+mJ!uq=9wf^in48=r&|c3mP5X4PvQ6>y>T+bWoGqJ6j;P8zqt#g65>zw~*%#wh+7 zKg!K8zQSvd^4kODPV_3r(zXG9MVD*f(O4k=pg#4zSjL5ZM;4pK#^fX8LciY;W6)xp zgjX9AmwX>n8?h&DW%3N#jcedd#uD3RW3-^ln9pE~F`vO!<83gj`s{{xc;j)WvBb8^ zI0^4IE{1!&F}u%L?Drcd;RD8Ef7r%s4SdA0{I){Inv7++cMu#kUJReGv785=G|q=l z85h8(jSET7rrvuhh0~3zVbbV5IQ&R^E2GKxSYLG^OD%;t~;%(l)a zlD5KF(pDPR!&SyzFmb5;7MSuYZ-r}(yWvH~;(xKR_-`;4|4qgvaI>+Lx5bzkWn8QO zR=C}`17=lyFWhOoA0|FIcFPhYKIL?n_>`sIwi)Nc-Nwc6c4LWWhq1)4)0i^JoS=Rv zQ*5_!6THW`6DB6L!FR03v78Ub_8AkS%oS=QaUL>GhYuS|oJWlF;a=ln_^7eOdCa&B zK5kqApE9n8Pa7}d`3&+44PZ zkIb)e{3;i~tBs4`R^uexW=xsl?Zzc=hj9hmX-vHFO~zI5X5%C9R>v|%^7EodK}B~R^Hbk<&t?jzTa5tt%HpTg zSo{#H>f)!|So~BNi=RqkKGSN9n_=S9wAR^9=38SjC&81I9z3(vdKwi_3rlScIL5LX)IsgQAz2Ol!dhYuSUz(7o0HO0uz(Q)(sPr@^+Y*ly||zq`Vs@CgmQOn3VUy#l{C=;#2() zTxv{Q=@rHj197X3#871{F;p8%3^m3QL#?sIP-iSL)Ei3-i;N|P#l{jtgR#WW2SMo5+;qrEMqFY)0ncRQy$f;ValUS{^|HtZh*HLH^DoM@sYmM zcoR%H)t>$7lvA1g>3fWizp z$ule6_#m7xCZDW4WAe!=^lXZZ51}WGi8rg*SkjglAA?JckHclg#F#~0Xbi-dRpB^B z{#ljA`EZSK9b9W%53?<4<$GHe+sdtQL+YAIR+Di7db4pk++th>uQq0X7U}hR3;VM= zJo`@1ev@av*|XnjEHP{|J_vUkAA+|VABJ}rAAxro_riOOCGB2gN!w#AY4;gR+Wp4I z-~*0h6PnX(koZP$32@9#`WkYjTgbEj2FYFjT`i9i}TY2 zr<>jaCyd+RJmYq_(0DIgWK3BTNn^^IC^qhe%Tm|D5|r~A8Ak=^6~@@gJ8)Dlfvb#5 z;c8>jC2EXGm#8%+U4pvMwAd!HM7>oZVWAWc?EdE=J#s6w!@!x7J{@aYjf4i~x z-(-yM#AaiBC%TOBo!DZG@5EMPe9QY-HD-J#x{W*G?Z)^{>@wyvvD=u>#2#Zl6MKyh z!TVF!7!wDK3(yZ5Ct>XL9c#t#VdE0`h;bR*Yg`T=HLie97>l2i#^UFcvG_S{j2~|G zxV-Qq@9@!l@spizTn`r*FM+9sI%l$&AlQ*MPzjoV=IP+hpvxE-!C z?trU}x50H>ij+Q?2NRPrF=j6^CdTZ=#)WW$aS=>RYA@v_CS~%^rtOt0Vd7B6M|Qih z#7rEjZ-qOJcfnn$YrNT8jBC)bTPSg^hPN4$PTmouI=ixW8W+L%QauUpHZF#HjEOgU zpE2=f@AvqCvE+3)b)7l;h_S@eYb-WLjVWLD3D5qdvBY!ASmHTtOguRW;|4g-xCzcT z?tlx7JK;j(O)!41mpa)Dm)JFMK66Tqi7lthSp1Y5OWF$KEpVmrR=CEv9j-N&v~|Xk zSG{o;yvSJ6E;ilQ_os5Ur=G3N*^#!)O>C|=gT(-me zWx46b#FdM$@HZW~q*vaFo^RK{Ntat-+zuDoHDu9?j44xYGH}-$MWkOxBa}(MC#sU9!7c}lg~VSh4(S@3XIY63RCwq<$YEQ zq~6f-lHC5YcFZd_M$4m4!{eH~+e*0$z0Br(iKpCnJ6vINujrM=#F=(~Y93D8mYRFz z@6CtvZQ9=%^ALbqcVSznwK(po=xw^ z;XjLKJSJLf^8HKZ8CkMkOwBV{zfa9A@_k{d*~oW+X(7{Q;XVDt`Kh@gdtz#Skn=0O z4vhb7o}ZCxXtLz|*&F*wZ@lwtPc+7_^u{&Ml!o{8We&N*{K%XTUdzhmna}D_|3_+U zN}s&a^t=(NF_?FIYTV`V?9EkX(}(9?^qL8A_IV~XrsQ2u@;ytIe&bVPr{A|y<0XG~ zYK-JJr^ZG8dsAZ}e{-t;=Xa<2eEt_x{XG8N6at@ixz%GKSCL#5Z~R=G6F&_jvlg)L2fVEMfd| z&nrCNNb}-PBmQuVr%|_&eN$?@r;%5rGlzy_Kkb00A56^ya$hF0?@i4KX~#YNL~4GJ z`!AtAO%cr%>BJoA`KftB?x#e0GBtJP$xM7k_Qz6lW|r6Pavf5?r{iC)8HV<9%}~D=i{9?(9jSRW z%d3Yh>LEPekn4DnpYGIrE7$8HeOGGkmFsnp-jkY#vkrJVb$GqiTh<9rKN-!>lh)q3 zqP6j+VA9&wHSV)Hq}F9^t-++G#@5DQ(oJjE29rdXv}DPeWi6{3n}SJvHip{L#+DX# ztX8-N&Y&~T!;oa1@^wzWYuUNKX$*Pqa_1Qbt-nn*3V@u>y@ikw$5I;bXC*xmA6b<-MFT8QpH<*NU&>`H8xFJx@zUx*41lPt)4Wc zEUHAxUA^q)#&s>{t`-e_`O4)qfM3m$c`apK@Ly&1_snkl?^Fx5j?SGfweMUh7u>mW z>ABO*r*!kLz52g1qkiVs&-!nD!Lru+l zjj(F3Uov}9-L>=UubIi8wEeHzn@gR}vfhyDrV>Nlnq{)n+?aB8gZWYpQrHOp2uPN`k>R*y8#|F$biRkQqmP4)lSwP5*s&uU$Xe`X7#)8%*dvK9Xw zP2HMRt;?3S&Tm|K%em7wwl2Gp{=V#{bvNI9_Vgj{-!c~88nx7(>m6s;pe3tkN?W() zzw%A(UDonekFyxmt;=T0^zhbQQhWc4Ubk$`awdzV=iEPk*@{)SpWEfE#+6H#wVX2* zxoM{fyR+9%7ql`X)m_aH)Hz$~X+i6%)n_Z3Sf#V8rh459XL+_vb~h|XTDErW-0HWM zoC^Ejce+8%A%ugCO{_~+-Si$Boe>zyYh-9Gk)y|w+tw{x7dD9;ekRF8t^1d+yjgnl zDpjRa7ONb+rc5f2b}eaIyL!oTnw|+7PirNUB}YeNv96SUrF8 zolvg%M@#6h8^!ZiSju)AtN0T?vQIw0#_IW#?`1L8XbJu8LGk@oHbm`pZrb6v;38_-N`Ecq`pIcrLgBuo~;NLvxZCPPsWFEmF|cQ zmHI4Z6@PgPlk(oir{^yr{mOhm z5yvF0Z?}`}bJVl^9Y;UkVJ&PIvr4`)r-b=_3ika;yEU+ei^UN8B!Y02?uZSOI3#}Y z$91~M-#1~;pWMF;l9Se({ z_~SQyXZbtC<~jOlywuWE@rlVW8CPwr(jH+S7JpaCURImOY>cwol5-?>l{eeM;Gux(=7n-@^!ge9|8qSf#v^S!JL2dzMcxzP{*kFECm{e_ufH z{1p|kEq!17Nt=fL4#1wjev+^GfFh2+3j20FZ0ECvOPFsjf}ihdwu@OM-*Ve0e^aFyY(N z1uW&bh*kDcj>6@THmi1=$`+w(WDfb9;}a0&gb zMezNdW?RZD{w}qB;_qXy?~ih1?n4Wg&>y<*Zv^?uwMz9D)`j@{ESl$U*dn$!v4%_N zZwG=G-y!}w;}KJj-D_Wkv;UCA0Qp}+4V`2NI(^cvqR+b9111bhC57qNXVf4{Rd zReX|SOb!2s{=&J3?R1%^e1B5jbNEXa8$Z5!&)*!|C;mpkzCWq=bNQ3FeSZyXhw;s| zed15j`u?Oot69TEe6YyhIz7u@3)^9P%(H#s?;Wt`uZVsi_kN-!^e5%>0R<4 zYZa^b>*4<}zUyGwC;s;E>H9myc0Oykg#Ne(cb31yY={09*go<1BJBAakzlhOEnGr> zKSA*0JHd7ftCV-4?Gt~0g*|^GJK5gJ8ZM!~KO%VkiWjq8#wz}9uzmQGzs2hNOJWlf zpW$NuPpo(^pPj4{-@904pZKfh z)AKjFhfUUK5j&QQa89by&DdD^ls+T=!ehPolX~#{6?ZV-OCI48`U~r*N_WJ@9^rEb ztN4>SUhKqQJD;Avar@ZJM+=wG-yI0TRk|ZKu9MF;R`J)!D*MErYiP4VTcL%;TQF@y%?9?YqqOiN7Dfp1%nVY@)*Wxt?!LEa_t@LC`_kLA`yqB-zbcjTo~s;3-(t6g zZR-4`zHVyNwhCP3~8ON~`XyFp(`5kZQC0w47x)OgMW)1z_3VZQ=i|<7JSD}SV=!Sh zcfgXSjFsi5pW)e_7ai;WvX3=!xBCq3{;`qmv1;M|3+=?Wur2@CLE3_Fi%-dyC2>Fh zdGWnWf6VAcllY|1T6{r&*yd6w)=R%id;$uWFfaMEzAU@m*vm6!63bTBHdgVM&nnj) zJ%92yBC~g+g^T**4ussyXk5Eu(yGbHWOB-dWz(iisVFO(kxZ7c9sWP1tZe%9>B;2O zsneaDY{=O#yY|XhJPZrBF}BR_ z$5`X6X{_n28LXMCS*!`xY}OpsT-H3+KCFFN`^C0vehopqvZEtt=p1>b{Wkn}vEIqL z)#X#s5S(Ax(c|{th5m7;OF0^r24zx?_U8E0O-qS~@=2N8zGTqe5G!tP`z_@id1mI_ z!Dh-DR4fgGURozV8Fb}Wu{N-Fuy(Wdu=WOBbcnA0N!BXX2G$PNZq^>w-k@thz?x*O zVr^jUVC`n@VeJjN1_rE2)+*Kp)(+Ng)*ja0piAP|PYkD%LD%Uj)&|xN)^64w*507& zjes@DTE*JH+QHh*+QZr#biEm{CRwXk8(2G7yIFf!dxNes0c(=AinW2YgSDHrhqV_U zZ)SY>nvNjZo`^r)6${e0j5>2l>Z)mJchKJUincM62w#}ecUBN@`|4MoZoiFn4eMIg zR@QZ_x3k{i>^ovS*gJ|JUM13=ev9uD5B(;{YhV4Jr|TQiM^)XeKM;%A_R?tkPT3#C z*p>+_CM!M*?jbFH^UvY;*f*ZQuk`7r^c(9tGk3Lj#ELcEwm&`H-p+a_>w8((v%c?7 zS}w`AVQHK)xjs+5)Vh8WbcAIm-=gR6O}>R;zLni)&NMuA=C$^x3M<-|71p(P4l8I6 zN?N3j+JnhE%bp4n<(+3vRdt*>E}GN+ zckKsQUoERE$?9J`v*XN3fB&VNem3&cyowH95V0vJ?rIK-z5RK@^Uj<(&AN5NvG~)s z(AbrTj1S2pw&7T+J=!Pawmn>O=G6MwthTP~Aidq~8`bed5Oid)P206UF|kcz$L-r* z=+55!qZ1%fYGFg>N3ltmD*HngNw&GS6W<~mEMi;8_IBNJ+oRdu<87B3%fu`8GgwKZ z6R~VpvmW=huO+>|f068yh4iw#hyASr=I?f4S#19Xw-s$~ddv0$Z`t08zXPI~zo#gs z#1w9Sk?l5b`#H9cdE4Ki+N9o`{dUj) z*7~L1PjQ@fHvf-j1fxep{09X!j<@|^5=-fuQeIgoOFC<`$Ua$yvr24LtSp%a`H!+{ zIz8+4Hu-}=2Ao&XaOTW49YK;~VXqt)ANnS9 z|6^m?ICd3re7UTB!|*nlSLGbyp~fKZp^Y4q_D*bj=!u}9{g>0)IF1(APzmjK4Zm~d z-LbNbmjwBfKdAZCZTR4cD)Ok=nB=C#gfnNzGk6e2E9H1KxP!F!;8W(`d+>V?KJOua zj(tTOgOU=L_-2kjwBh-`w+UZVMI65f^4HH<(6+v2L0fw-$H8OiH?9w2#r3~`;LVKz z$L&8{(pGU-P*Bku#JXM&svoQgsyTktKXfc8E2U*PFUntE6+GQ|RY$PCDptJV{jaob zc=}K3eV+jkzTVzhQ&4v-|Kj@l z#$Q(7nVh~paZ!P2mnP%O8z;P;ye=m>eZvd?{`vZ=E-I+MXUNyDn}uy>{>2;qaO$I0 z=A!m}CuEH0Z|Hob&BlGA{mFmJ`EJ36C;!yO9H8f)5;t{JBz9^q`y_U07qKBWNh4*Z zeG0|?|Cry7Ngc>okn&zmx=Vh=Tq5~0w@5umjLdh;W5Ldf4X)2@Op0F}_w~{iv;WYj1r&5CGil8%v(`Av0ui7wQ;`2Y&L$|GPbKWE}<`9=K6Bgwx9sk{&o>%Tc3U1 zB#CpwQ8z}V-_ZV@*8c4hJKH_{eZC*)Q7A~)V~iXu&syRMIaYDDVIO){kd~gYoTu~R z3Ehe(cS8q;{`)`vSa_Sj8WLY`o7L-dJ zE(b>`W=ZOgJCw5#hZ@Xu%_=*#47nsTJ?CjYPitoK`|se#4nHlb9_ZgqJ>)UR$MVv` zGUg<5oQgEIp85QSpmLH$zQc8cYBII7|<#dU#w2x{*Mw-8_ zT$(8UlJiG7<1d-NC6cSvStI(dtt2|H{I9Z_PpPu_KL%*VSmrNT6XZUthWShG&>u@jb@>(KCacS@ z3ir)la?{O0?sMe*Ppj9xlGN(*c`3Nn<+r&2w>#-#`Y!xRvE%P?PMcNY`1|mv()=as zZVGaLC_c+zBKwg*LGfSd?0<^=_$tST;2E>>m$Z=fMM+!j^q0lH*6}akU3HF` z^3sBiOxFwn3*1rdQj>eA!cD8w*IYt=2ZK7qdFsxIs!=ZyWE$?3zV| z>?fS}QPVHQYHVu*TaU(SZHt3N;W;mG>drVUHJ|ZSF{cA&W}RgoJeO*nj6aym%uy*D%`CGI<4EpPXU@=Z z6c4A)%sIM^fA$Btv61w^QA36Ea${q#-{fi|HdfeLHzr@krd#XA#a|2e7WS)ZF}A$X|~(Ot+KJxHd|LAsBxShz+?IFRi6S;C(Co##~+#wuRSQ{IcwMiQ0K2Xz~C)-pi9o@Ev z`1nxar2e$~cLbd12@quTSFaKH41*j|x8o9d;BFN&P_ zBw1(90bWo?@qn&Jj%hKOV2tDNs-)<7v{$T_BpJUV$-hR)HMGQW-PMOqpZJ$U%?0mV zW0N804&Qx?!CReL3a)op25xdF$Iholud4|9_2--XfYIxwOb_~TY|B1x^tx$NgMI_S zX^e*K8%M93ULN!#$Lz~Sua#Y7ldU(!gMR0M%j51!*65qXj@+`Ju#+o23>EfUg!G2a zy8Wo<@TlJJol-n^EbK?8506Cs77M#0Q9lMi_8ac#(~th2{f3=D)Fv?s`q8~}`byPi z@6b}^bCQvLqh_1vpU+Nrpy*E#bE@5evOi_asZQ6{${DGt`cu}Nk(w&6Kh>G@0S&hQ zU_nbo|H}D*3${Py&-s8G{W(`T4~+hth3cVT0L_%ss~!fRc7zy*KxkahOHEFfQ0)k|okWiDt9IVWLV0 z&e;sj)P9%dPPeKCQmEYfG}3_#klX<-(t-5->>JCRE)9I6JF6T>r_R2y!s+zZ>>DfH zS>-?i$(^a;7L<_xWY++LEBBBitVDnA_+8}!iw$vmf0V3}tXsp?JkyJrBHB@V{MU5{g zdN>yDv8~5rX{?m0_1t4yPpd6etX5viJ+;+SJr&9G9dpjL_euyJ+k4ORxqsaCA*|n= zbIdWv9COSuU)Ee}&qiO&*tCfG!>%UgVJ+e?hRBREBjT_qoYn_Jbv0^OOqd!A9CnRh zGp`)BR7lKRXcz{bb#d6R!NQ%gJfoOln0VG~Ek+InX8n^XH3z--8>7i{Xf>MCV4BUf zkQ~}A{W@bIIkb&yAvv^7zg0$@9NNYyGvee>wTvA`oE+UYd8Ue?9PF##HKqWur7|Ve z%8~AUljVOc!?< z2^gT$mmD&f@i~3T;m|xO6(j6l^#ZkJp;$otddCLFN`mu>^atrg{TFKk898JV z((fUClTFu389okm)aMD#AA!#Lf1UEV^#43*6Fh>Z?cZdYc?9h_AWO78Lbs+0RkQpY zpiC!|nSGE=HbB@9Fj*FR8?b*f{ z9rA|$NP|-bs>*sY#V?rFCE^+Mc#|M-z}d}6^A(!fB!u1-RIrhk8d>avhOg+A_&kZnl8IDz z=o^NVkEQ$wK^iD$=t+qpZP*5z7M2abL0=LXZj~qjHw!>X!@eVcYh)lK@y`kF0e4GNv8?@mv2qeS0{8A;O(yb#?}s{=`8s^g-}!B-k(l3y7fI+FaHMZ#}Lz2Qf~kb0>`!Db#|%JWBK z;y;u)xtx2T(C-l`)I0QN5{FY6Rv|zxr(DdMjOKEdAnY5`E{{uufcpjDd=dtz0+~JR zE@6qi4X|g2xdzT3C;NnJom;gTN*O)L??dphNpifIT*K*!L&_z~SFM}0`T6E& zp>vHd*pM*!ubz{_ILddY3Nz=Hq+Zn#(d*EuMz17z+ezq3CC6ntTRW+11(oRFS6r?C zS%PvoL=EjHO45!6Z>uleZ*`1Yd2uermqF08{ySjdslS`!URPcCZ3_B=)WCuChd6H& z4!xUz8QBS#zCH;{joi!0%gk4@^$ouy6^p?9DMNL=WKc6r0G}l@k6AkZBB2y9-Y|(* zNm$L+Y4h;aL;q|_pQq!E=rA7i71D+cGHHa-`5c``HxDRV8fDmg+dYOql2Dg8vtWeA z_XVST07)|W1H!CAGxOup24tBt!oGYzBNTJK3;mid&|m1jrs)Fxaevn&;X1=AkS-+O zG4aftToQpUi7xGJLqci&u9;U?)2NR^q+geeU8i(qQ!wQ8^)SuJ&}kALe5KY^3Qh-S zIUgn2T05Om>)}hWpP>syasl)n1F8f_U%t@=Sf`2kI{^zw+J&(WT`LCV8SH4yocj_s zIbLWJA=kP-#U59X{h4HcER+01{fmgQS7RB;sD{3R&KeR=N&$Eju7&!4T9leOlIJ@* zqNmMoBJqM`8E&8dHqjGxk5FK#bRsZN3xjNo z3|0RAQ!=M!mJViD#0F9%kUGrC%#;*|Kw3W!Svt|}coA(OFVu!lA?Nn1=> z)&R=IEafJA`;Q?Lono-#@1HCnM5dsTLoyB2sVQ#pgFGx#FxVmLVpam#L!66;8%c(w zXr@CG*-}KlVKy7}5vDnwAY6tgB+$eoY#nsqJX?7k7@5q+G2p>yqJ+{fkkX};QIm{r zC}qZQNeSBss%s*0b1{MoQLe2aAK<%O%bOQKZ>59XYF?BNCs`Pb@p6zuSQi&MGlrXn zk}3~$2Bk)FzA;OepP!Ow8+nhqfV_!v#-8t7I{0cQHf&kuwYnk4rKn2>3)%QgVwsw4 zzs12+E~OrYx8LG$;%nzD%9}v6GSNlCLJD+QTj$YI*r2 zE6Wu|h_BBYeyO&r&w0Yk63&OrtpgJPZtf_CvnG25n5jPC2F{(}Qv5gM zOt9YIqQpIw5lE?|cy7YE;(bMD)5?^?UcNhVWxXy>g`9PXG*9d~74%uiU4|?J+{;<( zBISvtlxR|RPr_#*cNsb{7b*C~Jp9g;;L>N@f3{{)V|N9vxr?cSz0O4gnM;zmpHmW- zB6Y)Ef%Sc5JeOs<8PC}=pPeAt7Cp7z2M13Z_p*bet(-H#BdUi_U!^1~?ai~^B~9G> zPVGC^&D6WE^bY^EbbXiBcdX0X(+54!SAVwAdHD3wYf?u&6B1>dt64priJYEZmdKf8 z?J54#Q_mqolG9&F;3?Qi`oW$|K1)JE>ZCTDq#gCF|7S^X`So@Nsqg#$BPBQKVO%(t=MK1R zda_<_&iH!0rqgLjkJx**xy!>CeP!9Z+hg4OaTD)&nOV~Rcl&=D`2Rx#Dc6WS`(6z= zANTL494<=b&zU`C0v|19qi^$uOX|05tlca@zF~UF<|>O+^_1l`wKuG(lW*I)Xk+#A zjT>&P-Mq2-lG>^jb<6A4SFhbtQ@eZ}uRq9#|Nfdhyc2jXdSqF?s=8NMR}@}WSmc&? zuAF^Ir#`K+tE&HthU zV-@d#)NEMg##PjqZvyncg;t{^KXJWXI#wObNPr*&KSdMNQ}rc(N|oXOxuK4{9fm~TqPG;GqJpVS#D z8u-vJFVGmaI#j>0w%P~C0WJjFpAaRFij-7x^+`)JOXI7Z!!_=b)YSF zLS9#nf3@R3f0;iw?Ega8U$@LZtju4x(myg>6!7_HFAF&S8O!|VhY9Ry=^*q&Re0&B z+|?J14*31|wuFg!R~6>w=3WcMQ!OQg|5YuU;Lj|}y<@_q{>nn4=N0;V^dGlOR^0v{ zw1oZ7sWA7I{zIxP-~XMK4*&D2?6L(DIDhJ-k}cK$&6YygolsKvH(J6Ab)e9f?%_4n z8N6^H@3$tocR0?B^JkFb9xdF(lKEQUV~_}ZaX2>+@c&aw;dun^a!PVX+RRt2t0kj2 z7Ty<=j$*on`Qod5n^j(9tD*aiO^X0>I#1Zr!-a%z0Nd_vv`Z@O(oOEpyFEw7do(8VouwhLd+N@hqO;PeWU2RF_v5Hx-IrHa6 zD`qa5|M`lmK7Z9*RWYk>m9&i!6|=+^s*P*sCVGv24^!GzHLR{R9fvOv z*I>TVf3QGn3c5ELgEWm)Cogc?s#UB}Yd5T471satux36_KrPnMd9ic8nmn&`5$e3L zramFS65S6JEnK17OuC+^<wyCR~X#0u^!(_wCmGWMw^nrw!wd-qUUOoRB9SKMM zIp&Jmb+wyU@d@Xfl2*D1SECwks90ZLTWws*>e@PV12fZErBNkKe^ptWh772xe#?pt z8~IK+-B$>1(yfkfLcw^P8{{}6rSg$(wHbSp$y@yvhVb<@x(Rj9cBcTUV%>`R%?%rF ztj4`*H)N`P#U#^kdRR_$eNmZhX5BZg-+<3r%SZ4L{>$s-!_US*Y(H70-88E;TGJ^wB+imixmG|O1om~6?{S)pCJt?GZIzJhq;Xk z)@c>szVv6vrBb?1E>GMm-|sKdo>6M9S=hb^=QX;nH&(Akfg4uT>+Vq8v)PTC)E-Ux zoi=rCP;Q^FRW`lC^s2ebW|v1RuG+FrUJl0SYU-G+VXgAnY;1dxG>o2JeR+c*{poKl z*=D6}8xzzMJXNu(iX7TigFH4a&VXKRy5@>1da~38$3oxK&B83duDW)P{18aRI@9@M zi|8WBZY`Zu8x<{~8^YC@=m{5sVR~ z)>f_OO$V_ou_zQNouhi=7J6R|HbJ&kGXGq?u3iQ`@r+`|b@eqEk`yb2>0(Uz#*f%E zt9v+aM)j-h*nrb8PC?1QqlXHH(z^Q16=qzZyVPx1FMhdNkB7SNAeHqhAjxO?DU2vr z+?7bRPO?!EaZP%#(mmtTmK|obH9@=u%L*9^Op9S}X2jFlknvwzL(<8Z-$!B8p(JCm z2_0$;CPlPuR#C6tK4%*4jv8={B5BQ1(E=)5%V3MSyIxa|WjDDRsJK+suimh^L67&E zL}X5U-(P!CJ=};!>i7W|6p)a81OCK@CD}84&A%!Zo_*=1VZEpeU$TylyY>>s;TypG z_Jz2KdWqh+W!mR1F9OMOlbimg{WKe(XV+Y!$CB_RtHPIjeq#8NmFrp0Hf*k|Zn%WE z`>U9Yk+4#Jc0k(p65OQRVZBn;GKnxVgY~N#R*S{Tct$^D1d#45vnc5o82;)N^s%)Y zR-iA>5arJ3v@(sSt;ON=H9SX4ubjJN5g#%@)#9nNYtUoOmi1fe`LcoWs!69}tkn!* zHMQ0Z*Vo?2eBg!#B&Ox78fAQ{SbN2!Dm`q;h=AZSm2%sYu4q_P*E4az%jj-tCLI&u z!HsUN39(PTJS!JwSA)~PCeQO)5 zwadbl>tR(}6)nGVJr1RwhR_prGXR=dqv^^$+CIh~&1{kvaXtu$Xhdk9-d}Df9gEGt%c}%}kv+J9Xa7H{XyfUra>I z5+3?;cc>*GyVsoBb1!GnOe5EQ{y8wc-}iu1g$T0|NVqK(oD_y!US5K|VcGfa9rl!^ zj?eC&gZwjf-QD88L=p3({!-pNYHunp0#1_u%;f|Y^v{{C^*8qc2T9AxHp^6bt_Yb> zn480M*Nq|Jfa?CECth~e5@`}oSZ^x1G=%w=ya=!XCnw|OaylWFaN;6e&gA9Wh$Ey+ zIB}6~^O`8a8Hq#yVXyuqY@0AaAL>Ovs8`rNok-9R?Ul~akmLn_PP-&8!sjJJTAuTJ zg-7)Y=k^MZ?iId}u$)^HJ>?Hn-GAa<&Y!+)WvY6GTYH5QM@lXIL%q@u^a}r^SNQc_ z;rDGg8|Bd+4%If7;qO?TIEzT9ee`RNn!u*(!*&v3!|s!;wqVp3Xn?qW@8ku$@GD=3O!glx2wLx9KL?VN=iEJPQ@= z?s`n=3?DmQ=|SMreKNCwUJF2({Pfshfxx?+8FO06ny7A~FL5~axT_;Q2OIDYL!Z2Z52 zIW8vjDSr>HFgW!M@bw1!klne#;J{Jv-x-{78~9#>)3GB5J?e5#f`4vl&Vb)EIIsi! zdrNaQm^ui(?-Ty~2B+)?+q&>VxbmSdp~)BqzSz=#4}6)yfqwwcFgUFNyvShH3cl9h zEXF=xt-<Rf*FJz!Wd~41Hh%*y=f*whLH2XObSUdJfX&0juYJ z*iT@K$(wZmywzZNzb8Q7mwKhr)&cY`*vFB~z!L`d`zJ8%C-HI*9I_Za1b%91ion>P z&}4lbY~@c~3jWB%ry)xU9Z2(k9X!ZjzxcLM2B$!uGTz|S=fRT=&S(M8GdPoWPFZ5( zzYMN4SZp9=y}>Cz2RB*#4ET0~v*@QOy9`c$6a1*bsn|s-eO1?y{+Eic(RIP!q*mE@ z>?+mrmrvxR-fZGi=nJXTS?K-Szz-SRuN~~R?`vReQD`#%41U|vj0V4FaMtx;cxgWW zX2t};@_t9!FcY787dX%6rA}#=8qCL1RT_3I^eN~nZK1(gH-c#=iC0g8ZJ)}x6TI2R z|2vpGLX$}wreOzy<+r!e?lm}tHczvO53J&SsHYcX8Tv#KKymIiTAGp z=NjDaIk1&S>@Zkk;xn!Sw^?b|_5le#%>DJGrHiExn z;(c?#R&3 zlLjs}@#04_+_q*slCe;ibpnhWf>XwTX&b@5e+AQL1j`yFSGfKMBm4EjPAbrX6Aoy*cs%SpYm&Nn!d zK9rSjaKBD4?JYDZq-T{|`d@*U8!Y`StKML#S5}L`!B((aFYGJp8zw$$F4(r0{LV<$ zw@rLt5g6YmWo4b=@36r#56b$P!D)xU^m#46$a&J>48eakI0gOn^BL@iPrv>Kr_x^i zM%efP;EN4TLqGj4Ggwiteq{#tqrdd~lELyWcE1LLvuNLbZ3d@8+t1o$$__AcXkG1O z361>;7M=8`Ji%fE{cXAOrg8sCCSK-c{jF^Tz7F1Q>2CqwX>dj^n7Rp{H2Qx32Q7Xd zj9zs7TVVQw;NaWfBR2luz{d?%KLvkaaK`hz5Ji6w`pnPE%TWdgDQCb12Kz4uk25$x zn+(84g+2w|17=(Lm%!wg_yA?eM_>e}(iaD;GB^!89Z+wu`XSibNfth2fVGp%AAqf$ z$UJet!#1zPf7@d64ftn+Qw9In;LIDrZyKEOeemxM?w1Mv(BQN&Y-RW@4uh$@t_$rF zvVB~}w~%ckA3Q^!Gc;N72`x2PzHS#1dj=})0%6R(gZWZN--4TtWw@glxT zJ_e39IPETQp~1lq!Bbd^(Oz;5oMGud2A85cH-4FkSJ?bO>ORPgzrjQEWwVBIwn0PP zH4VH6e$~c54gQ9WZvgMMdGRp=|A)m<@OLf!QSfs%9{mmcSBtT$fj_tFH5y>x8zx>v z8hFambb-5VSzqT4ovsV~;|LpyMfX z&~-Mi;4KzYmq9zMo~iqwd+2*sZ-e$E^*IRJ7CsI(Hs~o6FYoLQqWyIIChpH$K7+yd zQyu?H?msi};`;|-Clc=)$o(x7pYl8KA8ong!T(`(yP6jo1D3uDobHLojx`_rk9>ki z%Z&VkFSqzOn7WCL$-ewx>fTQ<*Wh(F9y=L)qvi8WaFeB>9R_26lGpzS@O}7hH}5`A zUTi?i@Xyfjr)eawt#1Z4KA8Gux_Pm0EsvB-9d%yP2mi&Eg+8<0`hEhYzB+Ff_(Dsw z9*mAMEYIwzNuJr#9wPGv(9l;kO&H7=A^QfZi#s|^U}-a!@pn>IARA2oPhk3s#wEnRX7NVw+lG&< zLIx{9@-(}EQbG(#TLVJ2zA%K2-_Zl zF4B-wt|8V2#Geeo2DF^m$&iN(eF{Ei2=<`kUj-j9@oC=yV-FIa(jVMq;{B~)>Z|$F z&O?4~>$MI1TT4&d4xzr9W*PVc8!z}jZ9Hu_G&SiDhf;S8f6(%XZ18gRob!;4$6j(CwRwxd^bt+}G?+f3dD2gFUNAi6kC;1L#M3r?;F zUu5z3h{sQ9dcj2&KMkf`bi82NMPvGOh>zisi$#DCX=pRrivf6jw{ zWUj4n9|xEBIZDMTfL$LLO{FbcG>%ki>ma=ZKxE*|}#dm|h znVd`e@Jo7Loksi~4}RR@Ao2g4oIm^UKYE@l^!T3y#{anUXWtP!?-e~z2R#SI_I=bL zfq!pt7V)1X>E-jbE{&hE6Bs&;xy$@m&lTY>&m%OR1V*3R3of>JKX{f0 z&ofy3n;)GEy~c|z9!Wg?LdOfHUuZlBywZcOw|D{Z^cPJdnEs;iA~5YCSe1acSsVr5 zX|c%0IHG9|foU(DSIVWmG|mIlUI|QlX)N+!PlDw`PyS~uUJHKSgMVx>_Tc}Y7E8H| z-8%29;MYC)HwMev!GFre3;*{l7Cs*)eWw4kjfZCdQM7ExFF&&2`d*nk>ax&JAScNu zFv>%d=i!s@;WNQQQ{v$hv6%V>=6mo$i;**MwZ$UaH5OCfz?VF@%3!H)V55x}IU6kA z0KVB`;nQL7?WpJQ=p#ToYFq@S9TS*#)Hq5!<5U9UFEp+s{-6i{ z(BdP+QwL2W{9m(J_`m7FZ(A(<|Ca~<(c@3Z(R?u&dA0-e@uH|Lzp#7o57uj)KaB*^8p(4pSiF{wrokz);NIjPpdM>R8 z0m!6rHaKW8yyY35j*oy{*_MH!)A8s*WYbva^E~v(spExyyoVk+b$lc7B^K`hM=X8{ zJjdc^!N{!X4}qf=zW|1>j(-`992&m^uC(|#xW?jB;Ee`5dEf?%kwqbgp9Xi?_6>s% zSxmjv3l@`4p2xdmqI$*RF5+Lcn0)FrgJsW99kDnJK5DV(;T?E z@p$lQi;K_~K`p~1aKPeXaL8hKI@uOS!8sQ12P2a!zZ15&i+IY@@rS^aq45GRWoRsX zC_`i6Q)2Pc;E2V-hq4oV$}Mgpp8Pt#1H8=QcfiXnJ`JYLbbq0~;@>si2Ht4#4se6T z!l%*VPB3L?`bWUzar>G>9*wh!Cy&N?;JYo(2k)|2%H3`8Brtq6eK8om8kd0gT1>s2 zeHPCFKW(w_f7W8*k6v_M;eW_t;s1ig!vAH9h5suS3;$Ow7XC*qj)LE@cp3P(#g*Vw z7T18^vv@W51B)BLA6dKueA?o>S-%7=-Ve^Q7}C2tq zeA}lae!Rs;z(q-4>YJ3@7xhtpZ5u*Q{RKOVz>%bn_037Hn|uqB{#MSICDv=@N#E;> zde(jD$o0d%DP&PWY%`h(bD>x*72e)cV2JO_th@aFPawW7o!SS z)Yq%R#E;Mx{#Qrb`zH0AcJG@&pZWGAxres(!SO!g^|A0i;_V6XK2nm0#rsH1o)+&T z(LFeBl4@#KY*}UAoGLW9Y6V~Mxxp&QMDZ3>k8l;QNUh?F2woO_M6H!qjV)K&LhvR(5 zUI7cna~B*j;ra9jnHT8a8J2kY!_H+MrfjECQX4#M;S%};dT@?*W` z<>#YMN?%W0F26=%y!_rFoX6i7{zMOwCi3m#&r@IDA%csDb1$Kji~SZazf$4x6o0~x zwNrwh$m8J`2oaWY+{@+n_e2Pen1s@2xeJ}}le?tJ{RRHK{O}Q4es215`8`j_%TMyT z{8*PK`27~_<(EfT>f&B5Kh`fj_({9D{G?7oC*f}Xy!^%!KF*(ex%~b@gy4utC_TzO zk3Xp|dj&2(J-74lOQCIL>_}V|JHu?Ah)F4vcxiLtC-xv=a9Gp`RM8 z|Ch43W##?m&=cR$sYWUGM08KBj5SlU4DND_V6nl3!TX5UM|0FM0n(@Zza5zKdCSK3kiPr zf+bH8e_WTfGiLVIGwCva^wQ1TMED}fVK3n!bpONL-RPP0dzsHBE|G~#zcc2Q?-Y@* z@h9?)=1?DNk^XOXnBaRr@yBlaN`Fe{&(EK|<`E~) zBNCV9x2n*wLb@1OHUfUx^8jNG}0!QDHTgoAH;&A&XgQ$RUIc)&b=8bEcps0&pm3H8V|}G34JggoRTf&@q5D^ZDG-m)H&2&eiym(dab__`+L(L#S8q8^4rQ;SG5Lm zEnUWgW0k5ZP=N#7TS+UOmv%(dzIO(#kNsO^=rsMyo?pnqDj}jF*NBfsyy5(zlU8FFU=+I?Ex1J*a#K@{xf$h#akzVDc=W(@TA^lZe={>08}lNteF3lRr%Zt^LX&W?C4`3H5C7-OLc6eJ^U&VU$CUH<6#xtIUB$5yvpi$ zTZQ8DmozpVRgXrG<1dwy7d>|88R)Z{PE2j&o+EjLKH+=ttyRHRCA3oBxUVRw|1Obt zT)T3lf5uDmpLF|kQ+ocB(Ymze$bD+tAoR-LF6e`@QkPwkzwY2-K|aS=t>Rya`cYZn`33uikdQ(G{)8hOGJkF!Y?-d zEpkNe>uzcrtBUZ!PTZeUR9g_hXPno#lQ_{)@t*DvVry>htXiW&(LFUQoA!LMQDkV^ z<8O>DM25frVk7o`8XhBE9_24qKT7_Q!nZfSo^+Q_{4~1g;nah|GghD`ifr*Qmo*B{ zj+fNPKKRNZEnSE57rVX+-<)%l@1gtJh|fl+>+>1->H3_D&Z8e)ZlC(WCI@3%VSMGt z)lcwqTG&&3&9$M}n$$nV)~G8cuTe$Olwn`4+~X*t`%hXilTW=S!=m`8@gHrYRrch9 z?vKW8S3YbxU;N7C(QI&5kGVm7lWY6M)xKBhpL#57BR)2I%y+Rh9@ZgF;yH^dlpJT^~Fki47b4^WX?QYOXb2l_{kImf{7Y?iv+4Kkw#|&5q@Fx?v31W&)?HOv-Q{Z?j8b{AO#fT4^gzv} z>D}G&U@2`GcoyA^FYZ)H&UmN=xeeH1w}9T3~i4KyFY1qaE3Z1?Xampr6Eftv@#!aWRAmF zTQqaGdSu)-<)c13xceDro7!gha$*HHHa9)Kps4Ba!bX|5%!;Ty(jDeFubA{-HpkN! z6iJ%Up!;`-kHqp*r?=c1Q8N#oei^^WTrqXJ_(f?4u~q3m9dG&~M&G`OwYj2&-KTfc zc8;DK>+&Dd0V;sg=rEdf#m=OLu>7`qbUX_K?b^PRpjgA#;fL zWZu7M-2J+(KA@gQz*5gH?o!Xatu4NsXiY_PwED*8mb!2e?H7(;Ts}E+OLv#>FmsXj zm}7K5JEN2Gq|EP|a!HFcJ;2!s>8nQup{Q>RBB>fUGg{-K$=?-iXCSJGy!GH>gy zG&0|b%#UfAiCbji{yR)*b-A zN73PHMu)!cnYaAsUVLC!^ouU%Okl2hCH6V)D;UjvDvS-w{56Ytt6s;5?>yH!KRzeF zT;{H_7J)uT*8DPejXaBe`&rwT&B`X6P5(aUT3W{Toq71C(X5%-ow=%2ulbJ3*eq*< zshwtAZh7MOdfm|SICoh$*fm2u!rntEbLlX94`p|rk^021Thci5e&-{2su`{H&C{lT z?kr(!uheA)7z+YzVY8-zE=V}YJ&Su5_Yn6G_iXOj+;h0+a39HiW#)7yr@a@|*^5nIjXo?ZHyz+f>H-i@Wi8th*R@%zCRRs|~sEiwCujMlOp3_y~Ni z`hfW095#ofEyiEK93KA>53?@7cS^lmKf~NWWN_D)$npn~Mb?ATHnJ|o7c3XwCix(VPh_mzqXM5Mv#SFs`@wV-5FM}{^|S5_#Dan8jEj>F zq$t_X2^}E)0PFw#CzNmhyUBXCbgDqkFmUs#6#8m+R`SsZu>! zS>39dDnA=P_8GYr=8S>Ta2zQ4gbUdBOeT=N-Zu;!l)&bIMG4c75F(hu6grr*-H9?^Rp zk(X8RQ6+nYKH2Bk)vaoe*3@$=$3jM$S`{^qEpEu`y$Z$rS9y1(;j5QvSXKVT2Y6>@Dt#&Y`2Z^f>~ zpIDpDb#2?F8*kW?@IPK?0V=u*=K8NIj@oRkj$MNDO>DB%Ey)j8yjR@LpVs- z*j%Z#xl&_u#2eczHMY6E)Y@PveiPfct80r#Mc3EW4@eOtBJ zvuQ;t~zGtTZOq8DvLlp*EPZ;S1` zN!Lky+^7ACE`*1*&yTRnENP>^mIrOuV}JZy_HKCpAGdk!cd>arXF!&-Y~F1b>5Isq z+`Vt1Kg!=(r0|&bMkfD79Gl3ZlZa%!Q7y`C`bIRe#X&7 zznEe6_3wI=k9-^&-!$PVkHeUm$+K;C8`2p|SA+gWC@h zp9;>l@j=1T4l<979&495!D%;g<$74KOdz|tgV?I;B z*m5!Zv=^%!qvs;#3Cxi%rVXfzjHh}my_m6-I>_8||8X;??0mtLi=70-$89{^{Ts1i z@oyquXJpfIeqyrX-o3zboaT5(7CqZ z+JM-D9=qrlx=pcB@0v&ap!9opFGcoIYE~~$?p{_+^?cP)XY9!BgT2Nyc_wn!Gc2=K z3H9$J@Bb;erbXuJd7AipssCMF=(O)~wojQ7y0Jb{>jt0LmoIFi4Mi_@%*l~?g17%L zCwotiS+@M%eyR7IBvCfHvU7^Rx?Mh{{yE+@S^7rcI+<@s9sXwd`)Je2k#qY~c_yi! zLsjag!mr`iWk=_-YGba1T5d%82fT>9}T<)0}1 z_*8Ca?5TGC_DuW>^-JMwzzFF(ufXq>bp9UauYkYp{JofzU&`uHHhj-nc5aR?`+v9G zrrSr~^xSCb${O^!YU;jKjc3iY%kGUY()Ct+JSbgsV)lMNVQMaW@60b!tAe4h_^h86 z@F(|D>Lm9%{NKHs1b@3NHQq+`@S9yhid4jrzd_|JW#d$9DwysArx^U-}05=BNQux1~4Nj6sfJ zwPk*F2WyWz9#I*w9diq>`H*~N%w-CG-AGxXrQKUEK!(hC!N-kF$Eq8b=G2U#%#?WW zpBtA>t{D?A`(oqLFA!Iw21ctN8rpR1`NpNYw_Xqr{-kl~_qmt-ym9FpTQ6v;UZ|fz zG#z`pF}CBOq4D7Fc}~oovSMo<8Y=cx+{!tX+om=)1=0WYOB%&TFb~qcLTpvS(jRqv z9ln}50)FMA?PEAZcB}Gjdsp@qE}yvVQRW!!)sJpZRe|WS)PvjSA#cIx#%+gHYIM)n zM#wYwSlQ(hqlc>>tvR*?8yVMF%V&DyWtUO!shp*ed7IwnsFL;LF6JY$meY3zwOeTK zTWIgCwD(rpn{y92TWN33JcK#(kjMC*&v-VTdA0Uc(*LAxQpb|Yz{+V6|H^5~x3c7@ zv$C>!<;tou{(>u4Rvufq^0U;L=Lex_ktqFo$+h^zAyozCvZtumm*Pi_oz^_++Nt;g z8BdKbz|Vz)d4jtcgg*b9_isUm`%Z_07fg0kmfOdg!t^M&PoJb*k%xP+0cu#SS za%S>edE;L0?D4R7-t4Zs;~5L@iRYL8qUH7l^6aQ_+*Y2;-lu}al>z0hQBLKm{K>g0 zC~}H?vVIWRo5G)e5?O;HYssEg75y*dMTgPW)xHjqFIv6lU@@iHy z;jzB`=qkdq>O=BOQQMW|!LEc3`W?ET7~J8(+XP3ee>Gj`YN{9NIV$w+<=eiL9}7~q z;MJ^4Bebut-STReJjgiGh9B|p+bej&t>$@#$f4T;IrOvLGT(mbr&3?^w?CGj)?6sh zHt%774f$t2)IG=Bzj%JU-|b`6OWGlSg6Ijm6??{S2HVon6K$@ab-8*viJmg3cRG3k zYdsO(o}O|KePBOjD$XAs*|dN%Z{eBp{M7wkyAfNFF$3A1@j)}b=r+KnL|39G;S2xW zQjW!)9=yxN9oK8RyNx~rovu!Iru*);`R*24txv=A5jU^MFZjw^@Z_egyh5kCH<6Qm&Di%u+N7rHS@K*fRs2d*^>lfrEqYqpmhamo=Ut-JDFQ;uz_=FC)0T5&XO%nj(}5p=02Tm0)HWEn%5<;ZpS zPiy z(%&t8O@|}bVE=?|-@>OS_FZRmnP(r&If8A|IXAj{wBCP}^L?_WVeK}OIY>70KeBy# z%H0x&j&n*Xsb6PGXUn1Y8}WgOHJh~E)RXLkJz>^FlS{f!#|uu%^F`<0>r%eXUP(aK zb9X(Uf_MFZInNLDbGwo7U)1vU$9iA)T>E0J$ii4@*1(J}jF%zC%f!C!0&E6-EZ4GG znF#M|qddEhcwFRXUKNshOWowTkL)+wI_~x6b^XZpQtExXu6Oy=PNiD*{=QM3b;f1i z#&f2+q}AwzGr1~0n*HTbvvqx%>dtFSte-oR&&sx6$9PbQp5TpsXseX3qlaK?Gy6AE zSLBjChu-yUdH#LPm%2sWdWrlqj@mkP)Bib-WY?r0fJ3(3CW);?tJOjA{gkQCb9B^^ z554Fz;Ui@-ZtA`A&Tje_c^>2$g3hD5cg5!~{-yY9_8!HbET5dgGn%y5Tfjw4C;X2} zUBuQt?T>ROM`P(9N*>Oyu{XlG7MU~Yyfh@~r?C^}xa!~m&S!}XpH=3LDi!Q#GyBi2 z+*=9DSwh)AELK|PU`$PWFPDAv=*gkaME6{=IeIwljGTX-oX=Su=5x{Z0nf&R3qFd^ z8QmBQ#`Ym+<>W|!{jieN(b}|wO(#Y-7XL`?NAAS_qRjuJFN9bJuos$!Z`#TpRX+9} z2{A{^FXCKOk<1armsgc_s+|}6UfDU{%=M(+wC5vLW#tn8vK!CZH$~=PZF$IjpNdNV zl5^eS8)IWQqmz+S7`sRn#ur?j9WV7iDrY>!9~K|=i7w@Afy_tt$vG9FVN3|L%|w>%`M&ST{1%xGCHM(1c#`(dHf?Y3eE7Jh@VBfXE|a|5dgmqmX;1p< zM1IN?S;eLizt8J$*G2GLy2v`WE&^H}tBW7>)CK&Kx_G{)E|U4E>$9G^T3sablHTP> zx4IyIy{HzJjebR>a zneY`8ZFsi{kNK_*?=azEQ*5|N!qN6L)^)7k%SJca_!{Do=jNk?^TZ}icx{ah&oSYI zybkdq?|2h`G_hrI33%9A8F#h zp6;23?V7aZr0wpRh7Fpu2x+Z7)38UACbm@5GY#7`X^c_b3wowur#kJ-DbmJ!(_%qv z*6ul3nirspsI;)X=`G^qG1~>pPqF!z3;5 z&UyIy&!+uDlJ;FCXRcit0%y}6OVXay?}xdxDQDBZnWTMJuV-D_)U#=SnWR0bT0JtP zolX0%N!oYK`Btlk;Muf4PST!Cm3gu&L;BgYKRB4wZ;sIB&_?6Up1jk=o%7Gm(Tyi7 zy?ipy=JP;;PxM{?Tky%V@@1V(d#9$Q9NuwIevf?pdeP=bkEJDPIV10(?SD4yhe=xI zwjSC6XVV@_(#}&|9@@~^w7*Q!&i8xuFz{^JA17(&WqD}_olX0_B<=hnFYVy7X&+0{ z&g;_qF0q1O34Jg-KD+eE_~^21(Pyme8wZ(Z>F3E-{~5h_@lM&dH81IZ_$}8qhU3Fu z;~lMZo-Z^r2Hp+M;68`@@W}m6_T-DYyBQZ9_BXrSF`V;6+0t(r>x-J+=6xpi^4Z@F zvHs6y9$=n(vF9B**!>E7tny4PGk9Ci^OqXB&J1l83Q*H*?{T?6<{&p(%1UAYK|NH1mydjpZ*5C@DXA(VrR4 z2kr0)dH580_{`~>&s|?Af9adM%1<7++VTm&rvyF&;j`SxbNYCa&nKrfp9MSr^v zO%E5w>&gp7KjodT2YKFehWFqmm3JMT7hlD*r1acEX*b@7c?26c0{=ltIZr3;|NEcp zhJS*$tMBqB3ZE)}>GD67pIo%h$a$JM;~DACgFSpA9yz0Z^J!R7{?g5z2D>N&j zD%<8ThreCV;iKHs*}Dj|@|>|PAbqF1%le&H$KA$U;``k%$LHl2PS{47vPLOg*jRpI zK*{2C>oW?l#W4kinz!oS+cuAP6%@XXxxIdOvkYHXfUhH-`Izx_+qJK2fWPr|7bkpO zWqeG2Ve}ZjtpMLvfNzuMcJRlB<{+!_CB`pKB7X|~dc4TDcq~5QWc_dB^E7Qvg7Plb z`;{s0%wA~4cNAONUC^StGaat(7LUbOoILQe#Tmv|XkV*kJ+qd);wvIH?{b?r8lShU zPrb*-T#MbGnIyWZMgPd%3J>Y;ZuwGwDL>@$SUi^geKLA-aR&W+p5*`J1IdqGW&R?4 z+~)n{h{^lOtI53d>672wwK#)5ZSp>C^R|;$`t<@M`zM_?@2>c*M)vqTRmgMMGmFQ+ z9>jhom7k*jvd0#`_1ePtJV)eMYk3vJOZu=YN7V9KBs|3a7LTRRp1k}|i! zOC8RfCa?5cH?OV#C)D4~OFun%bLZj=`l-%)+SdP!)L;7QJEjh&ZT(MEe>X3E^W<|^ zEzWo?X!F|on{~SE@wRE-mDVhK_j(Uo_Gur`=f6kJJg7n)4=Q<|-;rmT?q2D)POwM& zc;EZF?AxSW`F(SSRb%^Jk@!*i_kz{leqi=r>4%QqL)ycch&>`agIMGrF;(&a9kY{Qb=Vj08t*uHO<-Mi1 zs#WMM-k*4DvEak6&Kf+hFvM)ydXm#ramF@fWvrmynp1D%L zu*fcag--9Capp(TCI0+5=G}u@&JR_UaaNW%DZk5>&lwtBKIdC>`Em|M%Ks^JQvOc~ zYrYZo)xz-Q`JlWvdww2#d7q+|J&G#MV#ss4-t~Hpdj0Ws>XZSm>-j5#-&n(MWIN{+ zsE?I5zp}ku?~O~Hy!B~%eB4d6=ZsuriI*)7#mf9&m{z9Jn6oX@dF}Ze(T}Vlo7$H& ziY}OkSN4|Yv*@|Fy_-3y-KU4Q%eS~aCBd6>@_T#p?%j4*(H0_icn@+Hl*+p*D<&6g zlsR3olp%GOxs99++1TzoohUP+iYh5fbkJ0T9a0zJW$1@I15u> zKIuW3Cou2HVgAE6Z1_e1V@z#Ow|@?EYCXmn+BALs3_97jD`KvEMXmUJGye`iEAN?G zdTbz~7Pz)0a!rd!dG;Jp`+yRjc|T&_2WaIyin>D1+sL!P^2gcZAPpO;x;G!$!0g@Y zy0uoTY~i)7T8$E3f{DwDR_A|Uv6OKzi9d94Fk1Z`eSX2F5$1U*=NTm229Ma9{15o9 zglgT&k5RXiM&Fn7wXF{m-b3C!gdZjRyvpA7WA1NLA6Y9NM@GM_2R=L~cEz6FD4ubi z5!)Bu%vnmBR-f019qto75>6GJPp(vv`1YRP$-w8nEawIANq6hH%n3c7zAAIp;!4{2 zUDiCuDvR{9XL;w^%v18Pm8WCDkD9R~2ffMsBpBWPQFAOWFnv};b;R?hWXI=BWG}IX zXEFhvhb;buyeAzmxb_$F?EyVcA+Ov;W|5(ocN`|OPl=pi)=~|^H$J+OynF+ofO8$y z_{!>8*-hIo%x=_ zaf_H2$~!%SsQ1X#oR>H6oR@~S6sYuR1*-pKe3Zx=-E)NZs~0xz9IekiX!^RK@?FaF za_Ku>`slGE&AYbpO!0)Km*=p~y`xn>DL2}Fq?s^hPr!$dG)MQm-W)yldNc2iD!z*n z*iW19e_LfhpOwh7N6xT(|6t9YTKe}m`8JBKL(`h`Zjv(z@?6vGQx2OFPv?DfrBu~e z=4zQd7t3USHj{UcGIcncdk%jicP?b^#(Iu9UB~u?YShkg*wQ$jW2DG~p_GG@Q+a+~ zzz=5Kruw(8;kz*_wVP)xl>=f;L=|RFML?@fpO;jD0seNdFI2@5AS`Vd&@fr4tjX| z;qCvdyhTQlPk0F*kxzJ88PDP)@`;?iWhAfI;YOP5Z@%QYrOaJ;Hr?Z0we2(1s5Z{N z;S>HM??3W>*{D|M?00Rje>s14v2+IZ5-4hczijVrAhgn!XZ#GG51X`O<}rC8U>cFPzkLOik)a5x>Q^APQ2)M~|_0 zQQ(it88=xQ#Dd>^P3#Kat;%0~;%@0@$dDs45Z5Vk2rd3)j_~QeMW=ISk#uF`tO|DO zcxYPNMymkNT*KJ#1^PL$>?0E=ebB9!+&Ql{(dBK=+MUv8?Q)s-ab^wuWs9AsnV*UOEXyBx6KDA%p$j-8m(>)3zk~k|&MExN@>W}Zw2|dE@^od6@Eh4w2|wxC2B&d$ zK;$L89GSDqxBqH7dgVK8DvV#!XBmiRPbBSNbk8upqa@?2oa-5ZI#Yi;09#skN@VWM?<`qoqEl>7bSmYSZ#OLf9qo}q&Z;KH zK|}w|*IZe#!;s`-ex~oy_Fr-KEH<{Ly+->t=z?Nb&;|BCZ{Deu^`7Wc`%%sbMu*Gxrnb9#6OTQgb(Fg5+$?drww(x5~HNf>T>nm7I5y^IdZOX&2?~dR_%~ zz0Da|KVv(4H}|q%^Q{LMcd4Je+h(zRkHN+AEe3-*m*T-*8u?Cxp8IVYtK?gMliH|< zJ%`jJ^EC88zYOF`T|`Fg$1PX$X*-{9@LVU~`k>v}%aZY%^IAo+H@WnU(3G|>k+1ZR zg);Y+aa-ovt#WRPdg^mi)U)^5skQlNm|@_nlC*WRKJr}(DJ8ULC+m8!=% zf6p2J&bN7A4!z6X8Sl9@Z?9Gt#PS2pvbN#7A{97%TYB zLB5qE->lUaVB zkaH+y&+zv$^YlY{o*zA?!jcEsn`M8F?}4gW5xzOJTcy(8dpA`whuBe;jVwD_y34X# z4%6Ph`?wJuWiw}YTAsMBh`pTtk?(hxAgk`X$f}T4{6ti*t!XEBt=INN+M|^7|JcG- z?BKJU{cm|ZsdL869W8Gl$Gf~khwV{DCmC`SmlqwCu{tj;&0KP`@(Pb|-xid8b0wb0tSt@;+urzhjXM4@`vH z%1nK)vObb^A>U27vpIIrjm^@Q(c^pv>D?Qfy@?JWWJGw?mwFF6@5QGVVl0c zHsMx%e_VUs^-{A&MhyIc506YS!42z9q>EIA@)%$b2RSx#hv<|BXSb% z;ghsK!d~2OJRo03(^lpy^dIq=BBS;Pw3W0$U+u)VId3n>~!SnE(RRN#f!@h;|fBln81@9`;}!BhK{Dk9SbFpiP84>ZHDJ(j_sl196D@$NV8|_xh4|A!d8?z73wI;WMLQ z;KlgoI|uDP9{gOpc+t5M!-#*x_AadLv6jV|S3F<9cF8?(#w4EY*u}QFu-fokqn)oZ z{bYHr33_f>&GfXNwqvf}6>HD4+`b?7g*o?AKR^fiDaJ7FqnX;7IIHuZ*}=Z8E)CB# zrcN$u+G(GatG#z~7V~e~dCa`kFWEL(m-ImqY<|Bkv~@sT_2#Um$%BQ*=N4LLAa*I| z`<8qPX=|vW<$0`G?=d^-dR>Kmq0L#fFHV}u_SPI4HP1a;!*?Cx42wKhQ&%!+YVFpm z=A+%d-`o?=O@uaQk;gpwybEFf_ehpW^D2K1WrFUyUMN%Xce9b*^&zL@?%uM8!@I8`!&*Z$PT-zw0?9FZNg?DoA#2&IS z4K+&{vqSpSyi{}|V(G-@qfe1ol6u^Icpt`5v%epU*R_GVTpZObon2V74)@w$s@zcX zanYsCy$&G?sI=c_{EFy?gJO`81 zu~F_jVBdWy@6q0xe`eaoj?9z#8NUb1qvoZ%Z)Bfcvu@EH-!+ZTuG#-zvWsg4-+tER zSU+)&_#wx0#4O+S9DDyV?oY69Y394v^(-{ctd99ueZEe8j(h7(FXNu{R@1e9EA+pB z_myn6&wbYO+{x~eKC7|!jOU>Gw0A11Oq zCyRUGhHDhH&EwpI^9{_wtUPa2e4JCV!cJMst;W^>C%|&Nw8jRgYgL&|a2dk&ro%Kbou2@g?J41Iu zw)Wum))&R>^CdTet9P?;e{o*kJU@(Pm}Y$Vt!1Ieq#^M`bYbn zWw?+3;H~-1!_ePEFm7Qk-CPpuZ**QAy}yd*Vv;#7qP_3u*fSD+WF^X1zStYh=PNkB z!+E+L=qpF#IgJmwkBxb1nDamE+u;6U^8DJZ$pf11Jpy!`yDKrpJmX$FdD2uqe^Ptz zBs?pP{t5T*xX(wwvoBu>o#+EU4FwY2`GLQWhW$=3t|7f}& z?}5iYcH5Thwp4DgwxrBFz!vPm$~~z2OZ(y8%!VIo3!ag+XPS5NTqK@(0?zg=Z3g%2 zq#dBXScaPEwGSrNSK?Z*aq(wZFJPZ&?a=esw)643qS$5H+?;`i@ z`SC2;cggP-wBc`;OPJ5d9K`Lfvrk~Z%z1&^XFv2jB)dZTlqBmTS?6J&o_>)WLbCZn$U?mtec4#VC>=hn@-HNP%2yO8gvsNIS6ef4nEFXm7~rt=|8x=9dnTvc|Qbai}1evKuh@t?f=CY#sRo53f#jpE$#p2GhbY94Z1z4 zpmrM1OO)4?C*fZEWZX}fjQincb5`9f%;%?V&Z?-#9z4$HZCQjplFjhty(Wk6x7qSj z+{b9C*LynN^ZN|$D|RM&WvHXav>Y4D>EJtAF&rYm;xD08vB z*R;R1?#Jk_su5f1$bTmG9C2RC#a7*qH)rAbn6;W7=SFP#qk0C}`zzno526SA>^8l` zR9Nk3QC_}}C-)W6--k8-0$;ub_P);7&sXdSnacW9Q(;mt_uIEu-p_F_+78a2;|#!J z%mcXZjx*qR7eP9HyJhQ$wz{+tZPM3GM;l%iPT`!Yp?WjMnAp0Ju`O#*)Mfvk#%o*> z&T9y5#`_4+Uts=89_J}i&v;I%ad9}zK7n*OM>o^<8O)#acg+7RIsbGo?(eL#>B)ETO&Rn#d6cQ2yjj-#BN1QdCwNx&HQaw&A$X72)@HQbOQRiddAu*Yvf%zrT9)p%opRE zXZ%U$S(*IWS)X$J+t9u^-(YWw=M@X#kIeQfL%2`mJ;QZwWx*a((ef$QG5_Ftw*dQ% zi66BM@qOE=A$j*)TX1Y4-XT}mw%GjZ zweDuQW&GkiaEV5q|*x0w&yjOoSuca%r^U1$e5Gc&aGJg)x+;e1VGa4Ej?ogRL_)L`W}W;{4*a?)1|h(-sLAvM%ADjkrI*@ionZzG6P~ z74uR(WeMde)bbQ0l&9bamZwb1gE@_qr#E5}}-6L|;m^3GkR<{k7i@4Rp7uSdUze!Cd`b8qyUrRX!u&~J=| zE@_X?{mt~|eBrr!jrp|Q6n^^bu0rZInTEX#-pEzXm__>)~w0bM5<2 z*@64Ox8eWSpkw@KZ`srOX?rT>uRBoxJMy1{txWgaF#G-KZKm+K8L}r=sAp@s9CIh$ zXIbFROeGJ%Zw#^>HQ{%!JlGzFy}39C5kQ_eBeka(>GIpUr)+GiFc-E};=eop_o7dE zs~7v<&0WwR+-}d5wJ)@Dd7Nuq)z%$z!R~m!Ch}w6nx~${viU-8MGJhn2tJek8-7Ed z-5Y&&Df;ZPSK#AU;Nw@|<5%G0SK#AU;A8aV(?_Dudv2XACwyz3`xyTGHT?N?>c7z5 zH}p=DzI(%(-%(b4y#W&$RhfgSk#V*P3V_w#}ejuxywIWpaObCC=wyY$@P-)|!*cxjx7K zPU?JlW=Gffw2gb-l)-adhH}$q8os+4>v6p2bqUvdZ_md*8}@aF;>>39ZvIvT*Wic& zzFVU$vI*yDh6UDBPt8oeb0n}Heq7Ieal~dZWAos?;;zaU2MbWZI~I0 z``XFf%6gRFpk9*8Gmx%kA;ya|FJkyc45cImEc~5ikfVy748L;|qCh2DMi8l|y z8T_N{ZznJxO%q|7*0l%d5;}Fc{VS=rdr=o9VR_bzd8531c0l?R`0Uj|x0%KC8{jJS z1=?^RzvjW8{kdk@gIJ>lFxQLqRr3D8v;cn}+3oEnA%F!N8){#{Eg{v)M4|+bG6G(@BLl#Mt`;obH&hW z*l&3a<0s~)A0y}{HuT? z=qIxqs#EIW)84>a6rT&c3vkXg$*%#9Ii0{V#=(Aj|04}`h`2_dAm4=fkMlU0{N9{| zHCLK^=jwO9es|ID0{t%3?_&M#t>2~kU8djV`dz_qi4)wfRND%$E@_0_oOjahQsA|~ z1B&DM&34YmT)88F%fRRQv;{t?0USZUM}P3ytro!aMK0h1!1O~1-)KX4ZVh!_Klw{} zCnwuI=;eGi$lXgp8a|sso8AP>bhPJ1!2Er!FyLqK&AIhs)CV|1ebmc1I+#w(Z)z9^ zI5S>@bLTbR5D#S<59O%;3i^p{i7~;oa{EH8nQk*x?N`dT>|0}<9O4`l@f2#mvL5#` zhtIS7ZHN=h5D{bi9pf-!tN=RYc^{^6JfBy&?)(_ik6Uxnf0zTu8d-FKkwyAwR z*Fi4*Co96mOxM;sRLF86wnd-Q)8-kj?1C z8`$#63bRqt;`xNOOwH4?c~Y0;pP&c6+u`>&)^EA5-DUD$+hV$4?G|d;g1N=}(k^ph zTR!~J1?Ql{u%!Uc9_8XUne&+^^*jHuF8w+a+BDO$P3J;h&i;RkJnM(@QT{a4nO1h_l;kwGZKUFcf|$v#Og%9V*Sg;Azll!d?3Cw&ac(i>$d zMLyBkf?XS!7uPRXn+$E=5o&GgVK!pDQtsx?Shqwz-JV}eTiOO@e}y$oG1fGt?e%+W zT0K+S-V&~98<71}I}Umc+GGk_8%*w7@Z(zzrhxPRw#rc9i-2DQtpz;hM_r#br2Gr( zn|>_Q8x1D>>B7{0Z@iDX^Z;*3-H7tAj|{P#Z!EO+^ajcXpBBFc87cSs_+}Yh+29vf zz82VqwLvl04OkzPVtr7K^+5#dgQ4(u4P%_Kp=T<(4BP>`x}hKNOrezJHft-}7S}E4 zXDW~{)}3f;)zaQ_SHeEl3-V-NF7=Ik3$Zro!h9J+t_{O4nJ=Q;EPv}ltex~38+>!^ zl}}%_fDRvJqOGM2x;etpiu(8e5 z7q(>>>}S*$(ti3LzQeu%aJ8Rw_>sTG_^st&dda6HRQySU=@rG1A8lZ)eliRBBEL^& zNgixhk{|m4`s@4TNB=XwSU!?(G0TU&stZ{T=#@O6Hzei5x0LUDlrOWh%yu) zj}@W9HWMm*ec|`FIjU>m0lLIa_6zhi?UndJ>>Mg?Dvd2W&O>_^{i4%s?ndg>7! z)OiR!Oj{X28pQ3&?tCBV*CU|zkQe=}_W{fL4{iSf_xZAMFXF?*d0M6EsqeDJ`Fb*9(Z?%ymwyaR45;9!tdIq&>qlKcKlS{4?;^i2n~B1v9wY@c%}?_ zv~Vqnd@8t>#C$NsH9x)!?Ajl7RBUbVrNKMvi2aMm~Ty^?R{ zo5|n8U+nmdyZD$3T*TPJJ;cuw+DNt1|8ig&PudUCY(9_|=&R}YKJmo7&QjizgYd%2 zn|&b9Y*k*(L3oRmS9T!Jo25Li{}OERw0!^F2cGr~JxxRC;ej^Ie|bjINB?=d(qB!W zKdbb|66gz*ep>?F>0caAU+?s@{JwnGJN>l@bf+KZtem{`Z6%s-VFF#w#^L=*nep_^ zJFWaziS@6(`-=7N>pM4VU3~R?j84BjsP=rdKAwJ`qpymm-|gs4@$~fr)t<(9dRHeu zBA$MSqnE|guXXe;@$`osJqUVYOpLO5|7X{MJhWkHC;xf%K%VzIDH!BmKPSDjzQVj-%5WJ z7}&saE$kL}pmt|qz`}`v^|XsNHSUa9 zn@R@bxzIsoO7*Fx73tuE4J#qvzgqym^&41U899pQUV}_0XOF5qa|3YX)0Q~qBcBNG zt8mY{(#$~L6uiUXalFWBm@frJaBM_fV6WjzoNd9m@`+v>_OUgu!SgCZ$O}00>K`#Z zQ6~OAG4I*tNnA}d&sy+Z zxJ@6NGVjc!^3vMrcxE2`%T;MO`;2d#hw_l$o6sNTJ`?7MGVep*Gmw0t6@)wTo($ti zzZ*!eEEvmJ$`%^>xXJ>|i_=i9639kO`whdSEc;jv@@PAGl@aWvAbwz{SDD_vcgl~w z4O2qi26@j!=G{OYL97*4Ln`!|G>~>KjVdnAPtk zHLM(%gy%|4hlY~12K2eW$6EXW@-G11Xz}&rw*a4R@eSlJ1b(r_A0xjNIPNP@-xK7o z1iskf&zSz*g0;Yx&|j=WlqFa;eE83SukzuK0)Nwo zKMZ`e58nvvY-ShLUZHI$?v_RTIIe~;xS-3a;~ z(D!J%&wX_MUd!i7-|M6A1%0p5_xb4iK;LKSp0oozs|EcY?D3?o@EwfFdw9Or3#xp` zM-PD>QhKJ3o(Xy;>1>0Q1tx>=j>GZJx|{JHzRU3*zOzmK`~C4AzQaxNp00RT-5vO! zkNeUcWBxPvei8q#0Y=}7GcF4PkKz9b+8o~pPDQ_s z@ep>9S6M(jCyF~+o*`T?^PPE3_2$0XnfR^hh*wxU`MUj;5srCymtr-13z#wo`cC{MTFGD2;W@{>Jq!lna0s z0L}F+q$Pot1e)txNMm0`U%S4AH1<`=pt-(6NmL- ztTzwDGl>K6{QvDHo9`FF{lsU=cc4x-qpsFSTa~)y{6TbDo?RC}KWw&jZ0Vk+Vcpw$ zj_GpsFLjN%gv??3M~uuxP=*G~`x@$od097iH8_80W4{t}V9rU|w%BG7_u;xw5YNQn z*$dEQ{s21W5MgaYVcRAx&S$sDV>+ehQcmX`xuEC9(?vc?e{L_@QDFw>WHRsB*Rr?u zrbaV#Uu179`=-q>n)Mc|t6iu=Z!~q5Z^plk-Dux|{2pNbsAs&ZC-4Aq&EL_(3G}sU zZyC}Y2HskvS*vL_sICa;8$jQXpbPz4TpsIHS8veQLw>#3*^*d>D%zJs-kMwRzKN6h z&d^ZBk}FJp)8cCUE+)^4zCAxy<})DQ9-%z-R~FO&kNEJ|d<42u_7&`HWgpM8u6(~p zT}e$Z`>e$<)JtFh`o|ShN~$qN2U=m{63U)A>~DAnj{asRXv`bD#ajL($YP%CO>HQd zIyGiTAOTNGz=H`met#9ey&6kjOFwib?(#xBp&cdnu=(Nl{7UfqebI8`_xu#++#7Mx zljmK~CiCtZhM22P<#UH2&chWi10Htx1=a2UbugYG`l_LNPXY1%kyOszgJ>(s_)fuh z_!l!w;L&02`{@Ur=X1Y1NO`X9TRgM)O6*0**+A??;N3P87GW=9Q3K9=V-Evo1!v=| z;9T5~yBPQV_>QEOku8{O@*PTRaaLUS35K_SiZzeyu}Ae&PHDb9X6(yVZ|<>D?8SOc zzOgRAH^!1AoGFrX6fP~-k+Anvls|G;3H*U^rmmy~&*R$XG?J_MVd*E_A=(tUhVr;Pa}Mrxn>6X z1$!S8?`MtlapgkYU@nDw9#Ve0J_qe!Wj_nLYZC2|^>xhV(U7SOzkALWzLz>e{WPGSn10P} z)Dxa1Vm+;SS>n;)9vkado{d^qjeA!1J@mQw?!kLbxSuEYY3f3#Tbvg?GL*Edxp?@E zj=o?~K}3DOt7)nJ#^tY%nRopbJn!-D@qBJ0SKqbM1!pbtn;Nkfw+8Q{?>St?IL>kI znrMP!9>}a1^FpYid1y@y+CXs4dnRSgvv|+ukNf@+&nDu(l=KvgA^dGpgL7wLz~+L} z4Bu@v9XcQ@X+wbVUJJl!CQD>+P#@2QQYO3x=PjFd*3_W=rZ0H6U+xB+yL-P8Te6V-_}@E$wvt;;=bj%6=3nD9%uN4f=ZO8o03SU2Gez&_j$=Y4bdy^7Be>@y}`&XZ)| z-hWGtK5rN(0KIGZT|5(h9N$S7R~uZ-dE4+4A>=hT?2D?B{*{ zblN}GJuk^}(SAJpaNNT<4^me9aq|AA`-b00+r@62|D)Y=clhi++S=Xp0qi~+ziVyn z4$|)CVfbyy^uhDQ{sP)RG=krOol85#KG-QX;tT}#YdqLkfHh6Qz5>`N=fr7a$Y-Nz zRU3P&jlF-kjb{3RzHR4w@*?Q}tI+q$vt&HeU;e%+Wxh>jApKHWv6IhA?8mby!lOSO zuh{b1XZIh%=Ysa{v)}Ej+e{7hlsj3(M>(He#J%;uARZ{2@2}UUB|Yc)>lXZ1ZC@J> zv)_3%Iu?XG3LfqE!?}W^k5TzN!O=Ie-!t~|@D;#+68?j}|Kx!!z!I+SN=r!Q&;?0J zNda6AXRbhEc#=sHTSN|0G)k@{5kxCV3MQwdhSJhAGL!8k+B{rN)c>vdF;85`Te7#9 zr3e9HRx-+_olq3TB}qKyOCMDjCxP^pufDo%;Pzj<76Dv!1>V>9m@$LPjCmgLvn`k( zgU&0G*8RV=RmbMP)B+m*BltfR^g#vq2h3}53*J$SZ`Q%tSOX46tW{aqoQ&^*1~L!f zKJEhi=(Wec)Z`S<@WfO*d}iP?)UcNv0CCCEWy>E}_uxY-uDSNQ^*?|3k=B(zyMDu? z8-KCth8u5s?D1dzs%7Doi`LwA_dScR`svkc@4fH-)i>XA>l05t^|T3iNv|4YX4W=I zv_K&clgSVN6$mnxOdyylUw92Yv4F*b7){~ZVDgMP7n?vxuz(e@a)@fv81QJl%_VRQ zpi2W@C`LI6;F3T<65CW*YnT%)csjsJ3({p9)DBCT2Fh>?qANGs0wFO=C`kl=Wx@0) zC|HJkc(4-Dfb~73nXRA10a22!F8k>+IcCU(lmY`cC8=MLn-%wFcuYIOv=6Z zs4^CQ5M&PzgbU*#ASYSy5fFA~20H-rT=}yI3p+Ir>n-F%-F5Uw{V1T7Yh#}TwrqWWxP;oHFAE$a)uMM&PyFZ zxTPb7Qb*Ee&sgM4LGX+_zUM&bSt&?2)z_MO4rpInediKXeHe_QK5IarCTU3~LFW7= z;+(*<(3#YU|EiNNOFF!h_$ZWm36OzSGvXj=plZHMG>Zmvsff-^eH<}}oBP{$5;5Tb5{4UCUjcp34e}$csCs_K2fXCKb_-{-*-Q@C% z;+^%wn*+$3ix1H0`QU1_ir_VD57-$?4IluM-#Uy~YCwX{C~_*S+!*vDAwQC-2y#Q9 zDl){F(5hTThLTgN$S`o$l_@fuoN`6b1BITdP^1RN?uaOYpfpugikwBxP(?-|&E^q` zjHXzPB4b$ET17B+gf1ML4?YSvpK;B61= zQEVCX&k07XE6-PVC+~}Mx1j27uNm%6-bc?Tzf1A=p!}FPar0iRc2YX1%9J578ObcA zFWM2i%9QcajsmXhOqnG(^h-ItZiuKMhZD|B^?E{nz4eB76k)AhuL%4qtzGYEa5jc) zHkZ-Vlv$!6E7cnarOeHc; zk!h&RtQJM41L?X%kr~WqjUqFdX00N#h^P|-SRQy|A5+eGM4nLu-KID8c}32rwpXP) zMU{oJ#36@A@vefWM)5v^A7+l&lNz`f@@J`<%LqG%%>y!N9@C(g1Sn~aBo3z{&=vm? zbes)*RTnT2_j6ex3SSO-pJ=XYB}KkDl7g)E(Auu}cuFGA5*{Jh+d=Z{u_z7wNu;+T z>lAn=^ob}67=#{jO!C;lC>#KMeF5nq)R#AxNkB{cQFnuekrozK8iGFUM;4S^dO*HA zVi$?=UzHxX83I!ZNmzg|#wDK&X|!XTZ+c)Ygic`slfhPWwguU6XIZcSV6z1a0bXap z-T-g0U@5?REy%(6H$|6}n@o(UX-%*wZBx-DeNQx*7%|g+Mtob*CCB$OnHbyB9w5HG z=#mr5OePESi=vB=G7r!N6SVeI_a_ z?JWzUdeU|kT}p)okPTRBcYqx&NDV!Trc&cEu)2HERGPtJ9cKmlK!cs{WgZV|v5cqr znPZV|cLoS169Iz`%fjPWPj(`diPr0e)XWKl?U0&@mYlxZ4x^c9$mzRvCN#GILMC$( zNdIMwq~CxFPuq?f$&naIwG+1v14tF)I#dyqWLdW$ZKVZo1z3f&9>O={bV-XSYMD#}1b(}Ik#l1(;hDPydp%FITLWjt$Bp^7q|)l{gS zjAw1Zvr#n}n7N3CMOMS%AYCgOD#9nDkn==C_!KFig)0DWvl_ycgi|b?#ocCSCSkPQ zv~65r7!!^Vwk{11BAjLErxLdA4G#vq-Om2P^wp;Pa0517h7dg5il0Vnjh!}9- zZ87ln7>G!40(Zv1H8Jq67>tP`Tlff8g=7o8AT z8NV$${o;8h_ad~m-yks3X8?Fh0wbW|!I;Q;*YW=0r+%)~?4V6yFug!W-Z|Kcg;8U1 zUAgHT{27!UT|A25^#F$!*P(yx99#vsU-2k`ZvZ^1xDLHq=irTiD~m@7d=ubvi%%06 zA(XzrPJB8C5k%QRG*Zb6p^^Py$%ROZ$UsXdnFeqTL9b*IKtx8`ra(ypKtx8`rX;5Y z!I3>zw1hebQRUftM9Vtllxnr0#?w;+q6Iaco*EP_sPXjF6sHB1p8ZSFQqVd0BwG4m zC6_kLMrKdJyPnR~ItQPI*gg@<>>PXnVgpp{MZy>}VH!Hm@JRJ!GE3Jv_!3AxC0V$0 z@PB|@qRIY9IF<|tx$RwG)`m$w@>!l}||02Pv>3 zoFHtsGsMox=w#Bi+Zkf#WOV!NN36lg==pQH9nsP``A7gQC371Zk#kqV*4Rw|Tg6xx zE6LqJnsG#K=j37lkFti7O9Bn1ZgghULf73`5lKDSSN+cd@u%uoPV-mO2g(Y1?~SIs!0ld#QzwAY5kQ9}zCMa2LXMft`oC&+sCa4)14p^%jPgGQ1WG7Z6@! z;qHVtTet`H?67c8!XH|=knk=GA4Ry$!bMEG2c zH=MAY*5r*KY^QN~rxVt8F_N&hi!%soyQm?o?cz+pM;BQAXA$mh;ZcNpSh$wv;0HTc zNPrW>*a_CyNZuG@4okLzXQOxnOnCD7vrXPONN>*!HdmkTY&9k?TZ%rlwIjlw#cV!F=0FP&qEZZZPJ+eDd7&*sH>S_mdjunGFWICD!+*J(1UH6`|wlINqz~;ETKJ{O}O2Ijw#IVm6+Dz>Oy$dgBQQVMpjK zN)gB29IGE;oRQ<#kN8d7?kChG5=O@eRvm&mZJSj$7C}_$PmL&#Cm_`02?+R%F8(Bl z^_*>f0wO-=Z9f5VpYu0A0U_Tp;3pvPJC<3(u~KBj{NZgaJ6d)$arjNI%mV(AWuXlm zk=oMYSpC2{!m}*239#0HW$|fNbRiy-N0||1M^s3Vg|xQNYL4h_vvmUJh(M|e%!I({ zenV#^5@sh7&PycBNhF}b#VbXta|CC`d)-ZeI0CVJ#GAI>5Xwh5l2`1uYlW|M#K>qJsE*N32 zMqgtuuhW~zuN(vI)vHJ$u!O)#{J(KV|0!#LS4$rq*$rbm{Q&Bb-3TV)71PhZ(DE_Y#Z__XlsFtS0ABaJGr${_^qE&X zz^e^hX9jq6fl!6rb^F$F%^ztJxVbfj$%DkIqKQ3ywI<_$3RsMswkH*17ej+lquGu6mxN}qhd~ZQM~ee zRW5yUkFBa4)R=N0KIMw3a>aVuGAdSR%c$5#P-%|@BN1OP`ccG7 z3|0MT*1kH;c~Gr>a1eAmN(O%K?`CU|{7u z)qur`zr6EQgEWw%jA{T?G_W*)ZIq!?aY&C+x>7kBz&TgMYp&Nqhgs;OhNxyxQA`&( zf>BQW9L3FPq zhjn(|mvaUrw@Z54zvm1V1j{q3E9x%lK=Y}KVxo@N_NclciR#ex$yFxmT0|XaK6Oz{ zod>+AC91I8DICmwW-mu@?`#>FvL95NkJU`dC6l)$6VQB_L@})c;Mor{mAV0n)D2oE z`KXhlduTo6gX`+#0C*TD@i{`)>Ot=UWvZwX6;-IBPE_PLS>%jX4i-`|P8vCLm6PV@ z@UY#{tCSNYXIKMr7fAJn+bQ#~l?k`|Qis1H=S}5&MUEfVfC}$XZ%&{$i%YD>NVWZ& zttN|mwbjO~z?xaEOfUR}9}j!se>pD7k-iuaj< zMGXt&w7x@`n^oo=vCxJ@_yx78O$za;76MdTh(z3mLHH%d$3y{*G5oUZN3N`Q`E5ad zC25-977@199DbUdp2~UJ&v~4jO65E*9JO(S+K5>$L>kp5P;F?sOjlFE-Ktl6Nv76~RTQn<7ZFzZ{nN_b#H7ig{?j}8k+cp!!v)&@V48I5!ULb0Lsk0LC z7B?g*|9=f1ggkNG<0fliEFyUYLoCfPIzEyb>vf6w$Lkob@hg1H*R-fn@d_DGC~j+^ zY!Hf$HK|orcB&uKg2uRm{oJxa6Q}xdl`eN~teQ0OJn#j#J;#A?nQa)+G#ZzJCtqZa zKkCk-#S}j&b03i^nF0~+j`dgzRN8D$;we;Vy1Jnhe#x;(E;oF$f zC;xqMS;zR&eXclTC28e`1 z8XH&v+S!3?@Hx&a9T2!6!|RLB?BL4mRcOv38&Aj9qI363J^2i1d(Zwi1djcwZP(fV zW~Ceo*80r;m$l4DN7CnL>t9lBeV%SiUu=ZQRp@1ZjuE!+PGSV!alr2#@SFpF<$#AA zaHj*Vcfi#S_z8iL{J>RshB0fl0I&g<{fSV~k1*i+>{0_k^#>fK4vzZ^Q08TS`hULw zWeEj%T?=p<3sCxVEdZ!-1|Jf)VV3;{<^3>5&S=f__Of@uVVl2K;n2eSKExE?wPt#2 z!TdRQ@v=WgsZRXg$e9LRO+|6>&_#3gS7g4Iz59FRNZ~_7;=yyxPpHJlY$Ybuvl9EB ztd$6=t;D`$d)dIV{^8a7xO>ScI}fvu>|a7yrpsmLO^QRMpUy^$QT9dPMzJbcGAV8+ z4A~E(mG`aHmi@5UpqzE&%u&udKj$8D_ABQea{h0_oN{GLPIhjQeXo@8IP0n#_=T&9 z4(->hE(6s%wBkY}j$v3u`Y^gL#$z^7%=X{eH%V4dulQ<*yN>c2xTD|G>Vj*S>!Dz~ z$jrV@G^p`cis{D4Cgt%usAYp{jW4}u3f3DIcZ=Zc#ZePf$z^d$hNuTXjZ-3cRLSL0 zC0gNgQI6wpRomw>tsfrNzy(J30d&8NR?dZ@S+&lj*2jm|7v&cga|8N9V}20D2=z-C7%?~PZkU`%cIw=Gw2S^Z}Za@t+h zo&@8|E>z=B65U#?y{MF?2fiNn>c)yz_w;xWr|b6YU;F=SbonFZo+4eq2+e`}GFMc}F<`a@18=MrN*4S7q%HN8y*m7$ql8u&yH2 zhIS%uqsa0--BDLeH`EjxlbF(OFlBuv#xqkJrdjXC8L(ZGff{E(6juWTj~ZYxXMn|= z0nwCd!23}HtOv8+fS*n}#`-Di4d%=4P$BeR3Qdke2o_7T^^x^IqEWTsX;yR6<*Mz) zs5T2xn}w*&LewUZYQtg_QL4^aYn>BV%-T75w>k&ZIOjxh+YYntb9}|`cX$m;s{W36 zS(|b5t^nihNs~w;FxCMw#UrK4QLq?^&HN%~7<0#BW1#Rv=`XwkcFI%(}yScDh0vyBozMpOjb%V)k=*J#oI(!9jRyG zbGJ7N-LE`%npg{{R?L-79{PjIDAj7?BwDRiUe*&(c=HcZSfx(WRosaaplK^tYP>01 zi!~V5aQGO_k1<$`d1Jj&Gm1rHXLx84*WfTak?UeMxKsLSgNx2tVt6*XNDf}yHP5<9 z+AImj@x#mdDZg;ZtmBk=iuC0NohfO^XLuHo0I?!c}qtsa{HO?m` zusrRIBxmV8)~txy_5h1mv97Pp3RKQg;xN6N%M{?%m2$qM$Y@h*)1kxbSVjZ(51Y)+ zR`8*ghh~ws9i1#KM(lMgtApI9%0%ymUU#%&@DOJTsN!3=a)slkhE4Rg5xh+RmH_|sI|Jo*NK^6MJm@0R{wx^ zE6$%Z6IwtWfN|SRLy5CK+!~?7-@*Toc-h>GvHIxH27EX1F}{6j(EnNO!!x}OpO2*w zx(goVu*WyTBYEFDznq_kEwjGtu$5v6`QEf@;2YMLq;@R!M%h8N!;8)lioYZiP^9{S z_{*-0cJkaIimSdu;)AUZUZJJlD1V6yybd4u@qDktM{-N$us@wD7N-J@q zr9*!aSHoyQarm$V9L2JHE&Xs>?Tykf8$n+%^RxMZ3zZvrSF@VtlE!iODR)Mci~fq& zp!<|_p5uH+e2$YpiE7F&gBLD!q_XL8*u_(Tq8qnGD!Ujfj2Nof&2#KT{D7!GC!x-t zwsoF7o_2U0y6_9YSXT9^wc6xB?T8*K+T@5!Wox?!Zri%SRvG>Rnpy6 ziS}0=I+BS??mwOS8#M#eI5U99Wt;2FnqX6(x*j7nYxB{VE)4v=WN*Jx1p+0Z2;A012CTryWq8yGMA{@ttvqEsQ?zI;*aqvURD*d93FD4ssPoe z0$7}iSL0P|Q5CWaKBQGufa>!EFnYqatxUm~N{fZ9dAb&T8frcB`Pk7_=WI;r<&ydu z@_}Xns?SPbw!SozD6W}29dGqxs#1dRv^-S_s?Ta**zKuxRy?dpB3HQi-#p-utH&hrhL6iFR zp%SUFbhglf`yw@l+j`2dHx%H>|83k(u4Gb~@un+GbjFo|?p-HUm~mzN$zd?W)^G;e zv|KU`8Qx_3AW~y}5V7G+l+wZi|55Wd;H!BQ+s8j7ZsRFK_}(}h4;i;;C&?9wH%IGf zB`lZffLiHqhyUER(hP8HD|J=6;sDXNR1}v}*XN0gF`>92KplC%ue|DT=l+;_hLxI3WQNr&;c7a`eno z#%$WEt>yq&cOWvRd76~l8Y8|OHU|sIj0Uks8RNk?Jv{6@JWK9nj2DguO${@}CA&nY zU!-9Hs{dR~25~8zk1yWVHgJ~X+u9W`^5X_DwcNc??vbsw+`WC}1`Gp_qdG66 zh+nv*Oe0^=GJzUbCgQeCs=I)?+pO*apKibqJck;+jI1OWG{_2N`Gf#_bJW3MPBOj= ztV+|rqSCuXX*#CzS^u!LN!Te(-xpK*-C>u(hsdBN+h*`#%<6Q&(F{KFW$=Swm)Y-_ zS(DA|cfQO3M>BiPm)Q@3H6YS?7_a6@IewYG1r?>6juuuolD^&E9Zi2uD$~|@dNmTC zIZ&ml!O??s>4bIk|L$NLs^|e%378 zn9@Ow(+~WtS(N1FPdeJ6ZCWs6R8Ok_m7iXQHb1JKI05Oo35c@@zzW=r08n}oA@n+< z&_T<^;V$PK+rZO{EG;;jHjUELd!)wML|huU9Y=+aL&{o$C^r#Lu(|lV*i4yH8g+o( zw%bVChBh%u@B6VAas!aSTF2iEBYx4@r~O_EY5kB^Y5kD&q4?opTTW6(J?u6j(|Au_ zydc{=Ih{1Ad|^lLFHBlnV4aW#>ZpgQvkkbM)N@Pkt;t+iOPU(T^@Q5F0XyYHmlHk z%*+p~ZJ{?*)e_oPmt$=s)jF+0CdI_x+g)T%97PzLgT&f6t z!E#ihbPCI5_KbP3O@Y2DLdXk^785L00(;Co$6L-=$5H%j;4;}7XQfAPSH?sq7~THO zg)#qCZbOs{i)S5X(=zAr*kc5nwWluF*n@GkG0xNZ#a$1>uV`cW6bn20=R-+ zXev^V>JQow;lNnAz?lIKZ<$XAfD2;_uUW%DUIK0QNn^Ku=VPd~mV_IfN$JUJTodHe zsB-OLn2%kh{s%R#K7iZ$(BfhSId&D(C6x9|(0hHC(yDz@;FZ#Lpe)}Dje>%+Tq_Qu zZu#pFytIJ#yaRztqXk5<;5Sz$pA*I|vpW{PP~bq(`H@qp%nO~UH!wooiGw2BF=w~R zB9=ruBa}s~50yo%;L>xdw<_fh0+kPfSIG0`l+m(t zx5kHZPbG$`%G5Ti(Q9J-j4QVuA=Te466e09EpzHWh%uc#zn=Oja61xNJ5zt7N@bot z?iy7JYMfHwKBdnmDE)0z>1ovFr9S1sz?W?Qm--aA+lEPr6=rD_WJxWkeP`-pO#8_& zk$Fs#ij07|eolQLnxXMz-)H=VYB)G{Z&B`Pr9S8c)g4hBA>ez2J@rx4{C9nD-Wkd> zpyO9)Au$NU&szLOa3+L@HQ2`s-mp#CgNX@h8du21 z$vLN`Azn*UoW_rZY0Nw}v2%ZHgDM47|Auu8moChQvZyii+fu`a=ZYJU={zsx@38FL zTWA1*YaMW<11@vGYzNdkpq9W$e&Cvip6JGo{5XOiJ^0a!AN}}o8b3zzV>CbN`7slz zY`~=a9#uK9v#p$z-?Q9)SgO^MrCJY^@Jq*Fgv~rWi<|N~6;@py1Lxt9Tt|(8bD~5v z6=mZIPz%|hNcjU*Dg1^Hev`1P&S%6Sn1Zr8Ctlo_sFwmNHbr!A*kWYZ_id!0x3oQ^ z^JmcZ9VzSsZP%&qB}kE>0x7$Aw+*BQFJ&XYaN({Gwq8iNpYMesh^vZb)aO?4+)Iq1 z>eo5-gXR1SUZjkK-q>+A>BRr27)B+v!r7OroQI4>KXQ|?QfU=02^dIf~K((@}w%)0A z*1WEa2FHlA=2PWPiE?AsXk|;s1+zY6sT*rBtG{+HEdpt_mx4yp*jrnQH@h6KWKJfl z9zae?62UtOAE__~Lb(tClN%}BN6<0&3D@V8g&&6)iK%$&8!;Sx=;T|`X}9hsjlg@t zOc0v}F`kq?h?spFCKGuc+&g&(#Q4KlxTxeyf$-sRR@RtGZU@o`1cXTwUl9l&o_D^M z+2pbm70MW4zpvW~B@xcrL;c*k<+`1~J!GbCmHLCYY-u$cKgx0Gd`QbAV$; zyN7(`oEqi0p7~g{sD-sQMIU@j0hI-Gx1drGTDH+^v^2J>!cxbGMoT`_9I0FsS^J9k zic9Gm@1>NJTxn6?a;*|`&eb5h`bp&{e{I=bKKWDYZ9d8EE+5R2V0j8Y#;(#xQj4cN zsy3mP)F$UTT{$~`>FMf|Qrw96IrQnDcQZ&#PHNW0YX;=>}PGtBCGkg%ZG8>$W# z=0R)-#1cdBWaJ7P?B%5#Mol*SbSz2!z?f+hlpmxQrcJQ>GUWIxE%|S*EY>T@A06nG zsV}GpcRAT;J)#eq`Zwk7jdJ6?l8kmXt-~R_;wwk;KOo1gD_>KJIV1T~aL+o3Gh$r~ z*Rj(kHAGl$FZoY=>zs9goghwoPYr$B8H$};OaYVs;v_W+ru|9<-*JNe@=p67<-Qx` zstIdTwa-n)bSIj3$i0gx84X^8N^dz%?`lWUWc1IR62$Jt$Tv1Nr>`q^tssFC4*8V2>bgMD2gDPhora6OZRcZyG zBe(w4ED&~aS)A$1LaTPh&ou2Qm)2jkGd3vqoCCP%ux9*Dxi?3-?4V*JO>%8~`%SJh zW+opINNm3p1J7Pw@^XlsauP9gg{{(^5SUAfx@P4fJG8t(8ZR&TdZe0kaOM6+1)tAs ziEmV2S`}1s6S()2+krF!2OFP~S0@zgS|sCpE`zCIrM`5E}8F0>ba@ zVx*cG^C?)XurYt0G6 zNiZwFJCTw{!mVJ2l@Bu@dT0+K$*`! z2Legyk?2k1m z9=f=5M?fGcy&zUxraF(Q1}CIaL)IQCDZ>BWd&~oJ zQ~h|R7n}v(wEF7o3h4QJw8PR2kk_!;Rvq@$gKP1lxYcmmu*XRwfISoo-0lGEHdxA4 z4!E3vv#=cQz3nxApq=^Ew|c<`q5j_QrM^E*xZJ63O;A1bX=aQIrGEsfKZNR`J4hh# zrUPCi;B@f43Adv|gma?F5zvnrbK#E;Opfe_zUYF6$xxtWr&Av;*fgUS0qtxo|7gPnb*!Or0>snR??bV(OW$`g6Sia=)k>q|X%P1R9x)fW#94X|NiQ zKl>{J(!M5!PZZX9Wq80)-v0_se#MxYN^!L_#d{i&m{z3gv3%v`zw_bQv{ZM`gy>-z0r|+#7URAyQ521IoF_#?oz4gMY zs`unW=p6&SSATE4@T%%P#py-3SM+9#^6~-`p!Z?utr$X_074!Y#71lv2p?Vm!FxuYM3%k0z}X1qiWEf)yudm5xjsHAUD1s+0-b~ju@k_PE8h!D zgc#SkCtOJiflD1QlYqasxf3IOLh^bf=REHRCT~FU*M4|%jQy8o|M2AKZ7v)6!;_=e zx$K%Bo_q?DvwDA^>(Ir{%lLlDN4~%s#Z}=2rXzVXl8=0k1OgIU7!hi+Nx@a>W%LB2 z22&}KsOdt$1w<)2?V98HF_0g_`7wqcllgHzBoQhjXE6z`h!>cF96x17i%1|aj{tH! z<8A`DkR#ji8BY-*@CX5aj%RFz_A~y#k9Ya8n;&1|qb2}JHlQz=gqIgU0AJn#YEDlQ z0z>y!fefA_3!D!w_kT`!Aj*AQxm`T|ZsFy;9eBcTNOLB1LCD;(J81Cp%2K`)25XA2 z7q|c^e!>*U2Nyo^CTM$sdoj4b1h;HCNdy)UaEiky!kt(1qZJy!m641RUf@zBeUm8= zF}T33yG9^ClXNAcAMh|h=ko!=l1A4Q82@&cG6T=6-@|H_X)^5bQG zY~sg8e%!~8Tb$EE%=G}1sT2&kf?nWqV}5cBlTD{@(DlZg9%TBl{6IgHkgOTWCVjVL z1K+lpVcHpJL9&~wG0lNGx$xBT<^=pX=2d}B0J$PwU?CFigmw031zqVPFzj}ow!VGN zI4k;-KN6cC4H}sNauQ2@GQ9h;SRY*H>`uIkT+n?aa7S-2OMC|pbzFeYM zr82~hcP$0Az6$#4pzru-OF3RfE=Xp2fg8cSk6dIc0eJkS4w&hHa~&W9ma`}m`K{?F z=GUO^<-(A36BPap3TxJoLI4I>U?~BYoW;MTvsl{?)nzX)0K=OLkgDI^q!75#0m}%u zpk0G%K|%Z0lE}*o+=Ha+QR#gfPUg$KEE$aKhoI(v_ho#{{Bhqy{z1qu`xf~U znWn=wbca8O{7aB8ks2i+HAn#cXsnLeFW&X06sM#o8MsiK4M@%wQ&K7v6t*NyAmKiW z-)ZGWXi1*qj*wUYhMpaL-~vA6FhWK{0#8$nz#~q+_)~#I+bcJOQ!ak$Wm>1n?j4guAboRMAyasTV-6 z-a=vDs>wAC4$iuA8t29e40+EY1s8eaey#b8a|6OSHz16=g)AC4?j?bwl$(*To(bP4 zjlds;iKv`ls{p7M_zlG7gFB(pamQP?2=_T~-vM{L^Y{1-6eDG=18yeZn#E0>P>h@S zR>GT(;zu8ToWzfaG?(!gQks_+_$`$GhpKGdjKLn3Es1cq!qB5DL{#t>jahg!q>mmZ zG?ez}(aJ?|qTmaMkUKfb?V()scQ1oGncU+Xx9IIy+E>73Z*g=wX#k3(qbKk$NBM|= zt13qLJ=coIkA9d8To?;qg`Pi9kBicy#cQmXqgPoeifx0~9*W&1G!*kF*EPc_zc=Pe zPH~Q!NiG4`5g&CHDbCUNpyH@_E{V7>Z2k^Oxh^<*DG3B@7h8>AKKKVoxZtWkjIbcj zgI;+R*V%m8YV3?_AQam?>kE;a?NZ$BjGcZFXir3wVNuTYdEYqppM31*IQBWG8MCPK z0Q_J=Dt?rKh5+v2gOBpTMT7^oKuAq4+kn)^S$kkIHV7Q&_{YIH6C7^j`Cm#@7AJ8L zC1R_8K%>2Qi5n;(>v(+B5lWQ!6(wXvj*mJ*i4t#9Le|#!uzME?x%`(BvP#BB9iapr zi@77`$$A$bb%YWn22w&+uK1`Ulqk_i39RgE18MCL354)D8nE9bit;=)S-tKN!gf;zMc)(Jvrj2BfbVyFiVLlMJ=zC9~W z?59N(lURfz)dna*+fPrYm;_`jWaBgKb*V8wZG{+1lhF2(z8KgYw4Q8hm9M_K4RE2* z@P_6K(CKQ^s~8UzkEsf@Fo|r&t*;RlV<`CP@1io~41ynV9sQ=N8TSc9KA{cF!yQ)X z`fnx*^+Y|%Bcdw27Ty2VKLSgSygM?cS68EeiR5CC&!VE(i^=4?z9yT6f#d3_T{iA*p^2|=G7v&<^_A*o=Pfu`zlqmjRe5 zy`-eL#3t;TBz)lBz=74qumS+&q09>9Q1#HGgl8I}T7sN2M^mb?WD(2UV90Fwy zh!8M_wV7){v%yQ+e>#$WsCbhX^qiI^Bwh-Ch?b@QRbUxvTdt}6^pbd!a9J)N3rj+I zTsR#F8*#Fiw9V6mPcY%>lJF^CLO=X8>3X0$X(Q#Q{n+M;U;sxotsv(f(R7_pQ|lq% zm7s5O=KR!|GZIRc=Zg}AM6?`d9swx< za`RLxs)zFo?!=(E+b$z1KqEAvz*X`N1xwee3VeYSD>~vqUpxUH_<|`kKNFA}h^1#o23e$rM`VSmuR zR)Ic754_|B$lLC(Ne$sc!!}A4-8G%Wamw2R1a_3(EbFm7PQucN?pHPHM+a~FzD9&n z4o=fk#*1$z69Q2y*@ zhCPZh^8bS_aQsX+MaN?R8v~gCX2xa(^4K*L-@W~xb%QqBzK!}}2yR66lK}{P-2e|9b zb#ll5)#xrW=+uTym)1F@R=-61Q`O9RglIdpQA(bTLL~!(66Qr@e@v-#asUcUX7l&l znYZ`OJTqlkCt+PD+kn})KsJO${(U*lj4b_YLQFN+V{w7Me?tRM$!}27%F5!ul3>F! z{W-%Xakyc7w~!%9Vb}4^}o$Jg7Fr!qWD<)_0&7iGt)c|=<{aV6`$>1wk(@gJr$ie8 zQKHKvu%Pj!!!D7Kpu%l$07M9Htv{o;AJW@*>FsOu_Ib%6OuZFnDZuuuY`%Bq0y&JWSsN9pbB^!6!w`x1aa zk0X2Xe%xJIAQ&hl1eBO>5>ZN^+krSG^qA#+BaCv7cjyYOksdiCcRfbZ`DH26{ohhT z`n4!$|cJl9#(@5In?~9$Kge?0q0W$ulM1MwAc+SETRyIaMf;Hmsq;AtTo4 zr?-uo;U(`F-+c*2sXw<(m1|U;uG~tMa9;32rSnnpQ<6fu9icu+4rU&uXzS4$zwW~Q zV%`uRhQZK2?KA{s_z6n9j!Gx6#69QIL8iul|o^Dp4TeY1B@bTH48XJ_d3Q9{@a&tish8 z{^3C?k>HXMNUxA1e3qbUoyz$#rJclgeg^|NTn^Tt8xvg)$yvFl3GJ@FkDw{>m`Qxd zBtAh2bbR#}OyaLi;(I3XZzl1wP8=4Lki8AblqTe!BnY|sgd)U=m4|5n_q-idhrS^N z_|W(9g^M873Byanch4sY0@DFP-O&3-2tSp4Qg-wvsEPY^msR$IK;j&hK0)2wy9P-1 zDJ1*equcH?NcMfol>E6#e8VLEff8WEzMoJ6(!1}M$nDRk91-iBpS~#jISQK8$tiW% ziy!c$w$i>+;s&SLY?-nw)$Co=tdxqV*`>M}3RT~Al%U?c`uje*s6CLh;i!C`2%#y^*|h5?)(vT zf>+F*PG4QPEANIIPCj=%aqAb}HoNHjXcwK4?V?|}*rkjZ2H)~Cg#o|ofx$mG52WjR zFjOhM1OPyB;1scDivh4e8JvF;?#1J?p0dY z2mgRz?v_QUbnfS-C8qDAUE`RX{KmK1djZ;bTH|ee$Ryrp5+9`mM7Qx-N*qA~-<3gK zI+tG;64r<20qgcJ%2{?V&OWExY^UGjMjPkKhLrk;8k^uaVdCX0?7Ois%f9F{)W*57 zA^GsogP>Pk*Z@(r(mg$b#4_j8$q(I371DKd#DzX^S*x51iBgUZy(*Od4wUN72Eb~t zDU#!?`KpWZ+f*U7w+Cg-3j~W>B&fykkQRySc2r&tdgMB~yg~YPm+!Rqfq=`~?EO^RLA3z6TskK-V&~Up zR8MsGZ=KZBXtnNV3Wud|6x#a<)m-}kVUTu&Fszk=0K8JJAO0C&)_z+0HEaJ$hxQ5T z0qPnrIqoyF3F^IS?w#9@ayNE{4tm#KOP~ZZB1u?#Qfh^@w^Om~v|grYJ%WvAI;f43 z7xd*^^OB3{%>AfTm%At-6%7Wk<{rX838`ubsdL9mdOc@8ivHIm6^+jA8&yRI!TRzI z+BuhRYG+u^wVCZStVd`GuDV5oySHYfMn=0; zAD}9t+_@Sf7xE)?k)s;2Cn>0YyGh(>5@$@}k4@rZCh-}Q_=-t<+a&&l5=VgfKkP%Y zQ|a@fO!`=l9-&U#2?qMoAt?NtxU1s~&nW9KG_CyMOyUK$lJX@*=K@hE-XOfN~!Bdgvum#XHgD(8BOs;WfQidS^i3F-r@AyC&@ z2qvrCT<2Dc6x??`L@@Z1lA&(5K#*1_K4Q?zl}Krq`dyy^sJiDsi7&|R2uk`d$VmH4|xF^n{ztI>`m6-Q>p{WKP+_FFMJK z-sPa3ZC~LQf8I?Va+94-a?W z=oh~jLl44RvB=*<}G)EWKQkejq%P?+=_agL|uYTXxsE`XUuR?|<}wIz1-oZa@m1#Qz0 z%JHq6VpU7P%cr9hMstnMzkw(7Wwc?BrK-Vxbk*)pxlQz}?wcBvZN!to7JY5HJ zH^wb9OovpsEAAkCL)Z*7mO@kKHVuR0^=vdi+~8&{Ym1vH2Iy87{qjX&xu~|e#KUn0 zxMnFFY8 zw_CCu==Ladch@bV275WtjdK*)`=;B}cK>u6-?T`ynfXJ|M774R2dSP3?hs8RC9dYk z6yx8ir0cM1MnG?jL)=NS43n;LTd6i$A`|XRu<3%^A_WE`Xlw^&kcIU|imcdc9FVZc!^01~FT-sgv+rv18b zy05bVEksZ@w4es{fOR&FtX3r?EY}$%YBWP`Ej}k_>I_4&daOW2qa8N&q;owy8Zm$b zcFYA+os7B!!rO{#0d+LXaXBSu_@+4K#=(n==u$SJp59C|U9)JQh)ma8+zd$xZtr>u zfX98=2c7iPQP}8L7oTwoSRG56>IKKGi#IjLqJ??Z{JE5rd(*Wn!yjapHV%%_(rgmlqqaDNFl9#P9tJGx!>xU&xv!EguIjd!J zVcPy?x^#Pgt^F`=GMO4QXf1@u_Aox>sxa_O?igQWoXvnZPlTw<3jq7vUQDUI-=v6) z{o?`VVgf%kY5&4W1iXX5^HH{e|rf8P0;dsO7M4=F`vzIRT{%BSl9dF!=Fsr;9xGwgvtDe^Gq}OoUnm`4xR2bNh@?6OY?FzN1;=f zx$qo@r#T)Eqry&G5ZrLw$q_@{I#bNNf%8m`V~e|`a5~B57z7A1EAk4xLFS#_ji%Vj zCE57Ul?NuuMATH^%85xzJmmo}Gw>-6TsryE4Tx*;wdGPk7gHhuFb4IEm!bi+oIV$_ zJPJ+gTd#cu0jaz&on<9A6=N&XEo;(oSYSg0tUd6 zrZ!Z?bOTSXamx)Xn^Ui6!73csT)RWIZFFFBsaprY-P?LQHUQDA+(FjFW>_0vuoh=z zZdI&s<|~UM1>f5mD`Wbx98M8!J0}Gk^8sT!O>J|aHsmlq2ipY3u>Vg6gxFP1rnfYD zCMfFTxo0+gu>Q&P&W{iH^_!m1u)&4<&aR3vh5xe#>#jbLx&9nhy%{Z6Aq5$$0L$Z& z@n}LB0}qzD8rBr%Tr#Y}fz723*s^k9&p{9IfrvX!xMQ&0xLK}p(_fMDsOoQk*Y)xW z7lo-0xnI2q|8}D(cAlYAwSj3<7~IBnhFmz;{!0gGBM%XC%T@JKxbme9mBk1nUlA!K zN9v_o`~?-3!lh(^=AgcU%Fe~d;FS5>xwv!N)U){}XRC8@$4pXs)-h%|aH0FW>P#d0 z+A8y6!BLhpwY(=zH7|Ez!zO9Xf;Se6$hViuBgJg4a@X)(R&FTM1&2P@w86n#06yIl z7aIh$afwA}gz!Csb_dn&!ehEdjPW(?>L3OZ3T|mS=8$ZsIyYl&iM7({Zkte1H(z2TUspBpqNZbt?=6JG%mG8-sNZwH#QN^MF0b zVBHD_)-|qxJ;Y$$3IiKD?H(0Q!5LV&o8?uZ>)di5n2TwqNm>%b&4y01^mT692WFac zlM+-GRG&}hcU8p(+zOpGmuV3axz0@+046iw5j*ZN070E_L3iNRx%@R{6C$4&AeXgv zy2xds4L}h6Oj%&i0jE!)%L4{8At|}mr6DEfXjz2=o2$2TaZ?PkARdGQ<}0-Ntiv|w z0>};QfvH2&bh5pQj6I%|$#x<#A-8b=v8>1|^XFb+#+6f|UQ>m^J}YbeERSMj4LA5a z!&%w9oHYeGYjR`D-6mH*hQ^|o!Z|3Mk&}*DIcw(TtjUcncbi=O7}}WuVjD90zDo0A zW|${kJHk*nZCusFq#!uyw3$$c-NuYH00K_dbDD0a3r1w-M&=e70MF{p z%iI(Il5?pU92~%d;kSe@7oX2X|FXIE&IPM*#ybh;$~#|dA`KF5x2BKKZdy>4yW^P< zz`?}Ad2Glm=|D0yALJOY6_t1VmAAN>d0NJ*UV8cBa^V&+ScBdp2Y>Wt7Z%J2a90?C zd08JgJI-{lyQ@VEGn3<;E(hA3BQfHI4q8X_l7rC|Gr;T(gh5zj*osyc zyF<^HC2oEioS2LkWIB38X|()r0(#BQS|e7}(|&(;T>HJy4#DmDoJ=?i7?#@;n;wS+ zu9FY02YdhC3a6#Z;JnOTOv!k2LE!&gsD8{tHP1~*HJbzn)|Do3EST-y3ez%l1)C#x zhnAz5S%~1IgLW-L>&|m1xR}{cmNd9nPo^le(M4~{g4p8rY@oOvG-UxTL+i(PFv(6s z0cRkS?KNmv?xYxcgNO?nL(pC(fFl9)24D-Am>`CP-VngJ0A>bEYCxxfJp^D2)r{|T zay_t4u|NXs3JY{bpy9*(RkFH0acl;@)T&HBL%h`2r2iv*APeeU4 zaKW0Exqbi$h&?d34ghEOEAldYjLx83BH7`Cm)k+Sn}qc+UGS|qL&b{?D62jfYC@SA z27~AR9xFEW;y9aV=0dXMv@vTVd`<2|nbvGVf|F=l=WELV9W<_}G94M5oOWy+H4MCeU^qH7=mj)|KmNBi5)DJ+f)oNI}ktwZl1qRaYHz|uHO&MeH zj7&lP6-x`ntBcFo_GLl%30yG46xP#MFR%j zvdL6tj!IFcf-r`IO z25?JFBl>N4-^)(<3UHBunQ3g~;;ESHmG0Qhj2IGgH;7qKgk!7OLI$wA_4AA{$9wR@Mte<#A9H-qE{ z>pbm;KU>{z0@sA%{5s4|F8Mfr)Du$8*~ru9$8HwvWtYMEMG(Tvuic)l&Yed0()eU9 zkTb&wDL=rx0(bxBtuQ??PZ$8_84qMyJI5l+HO~$i6Ru-d@1u*LecE}C)S*a@p+5@^#|2;iZ#7>I~9dL5v~6NvBON#^khJtYXTr zwRJfg+_25FSWf2>n063(?+dhR`hy{O?yBQ^DqNy zXIEcu#ncUUoc~>KEpxdntJEji{Z#>o3{h-@HBFuYra67Ac6N2zim6-oK%eG4Gbolc zJ&1y^OC+}it^vpeVo-QIa98qk6tiWL1H#~CdWW%{l{$cI5e6n5z=@Vx03d{y9n3iZ zxfY-Ukjrv80J+590dR)`8kk?@08D5~+{pljfI|{C7yknRCZ^tmMIV51B&Rz!$6SCKh7feVuBgcWAXb4;nIgQ-a$Gn)}WGKsyKHPQ=DtDzb z<;9Yrtn1C^D9!=mbm6K3rYb{O_sH|Si&?{SNjj9dJ05-{%Pi3(ia7{RpBt9{_RxlB zzO&D>XH6p}_}-QLnkpRZxz-Rn=-aU zoFZ2h!?dul0n72(dArV8;j}z&n(~iX$N9HQvHg@7Wgqk~Jxw_-R%R$=tDEFa|Rh zeD$+1RFhM(Y!}90@YCkcpDP^aCyNdkG;GMfaVcfY@p8l=#`V1cz|J_B`<=7GLE`Qo z02{nF$XVeaaZexkMLW0D0X(}dV-6!fuj3!;;%S35|EDIUp8mY4^_Tne=L!eDuziX* zXK*ozVM(XfokBKgPHisD<^Z_O(L0j>2O!t%Isop30K?f$BVQYQ8gi90EtU(!A;aDH zcs@Olqu33>F-6MQ%M>{W2yEt%aGsoC8|QNw<(TOg*YMm?=FgVD?dH_+F}V>@Q+>9p zItGTb!X3Y<~`*?fDA^CrO;+a6b^vPXEr)hJCnW={@lMLeaf8+@vGGa zi8bxiC3oiCIhPmBltp=`E=9!*UNMhVQgJd080qqR2Y9iEuX;Q z2bvJeB8g>%!h-hz9I7J?@;mRyFlaI|c&^vG=z3VtcY^Zo4_2!M?sd1^{BW<@5e&alXF8b7{7md=jMp4& z?do6JGd-H8M{T&#;GpWWmHqGQ$ioie9_g0#nE%K~=C9;)57#Ek8^Qh08xe_guFH3)YJoa-PsMyG8Mn}b*y z1Q$@o7{xyH@w*ULXM{ncnV^ixcYvN@TXQztbM22c4Q9`|05B>iM0PH)USv5b%2^S_ z6wX}tb2N;prcq9;=U!n@1}=dKgyC#$CmTRH8;(Gl0+!aK;U?Mk+_}hFOva0GH5F3@ zJQ)n&mKv_He$QPXCqb#{Cy>LFl#bt+Bn0&zG{ciDW4vTb&c{}FSsKYD z#sG1lWd5NTOS`ZfCa|3wk@8$I2x`aH2um8QY(=u9sr9QEf8N0He%Y7;t6f($sM?e< zlT8A^zBrt+>^s6tgV#w+3_3On&&-&5K4Mdr_gY2lJlCJ;KeWk}AXCQpn0Ne!Ab=dA zWDtmgfJS*tH&GcAPjMTIezNi)6bo)Cz{m9Q5&i1eEwfbW5`61j z0H;{o^I9`{=ZU3_qr>s7L_xqe3I*wTZXXQRAbNult{vZV5W?Wb>n7KjTRcNyFv80x ziIADivm*@prY2^KP2(WG22&XHYyoX^nfcHy_$_$fD|Cx{3TdhW=VY>NgT@y` zcTictSSBs18z*Usg8B_A3ljaw(ihY=sE?qsfaN`(0&-WWLB4^z3Bm1t<_=B{RP}t<54H~cF%d18ZvkUjO{YcFKLj9 zG4{3CQ*X!D2k`I7o_hNUZ-EcoS8I??slJ`B7i3Sc<>SkmMg`Sb`XX@#czz`YAD`^J z(Pt8_Od1H>LZMmxQH}3IzN|6Q!#DWQs4A9z6v*IR|mA1N*8K_ zDki4Vm38khCT{7jLhtw{9Qf;k+AxbDW66Np-`emdZQg@SFsc#u+NMHiDC;J!@l%ILe^1pn5i!wj1>E&Y{7TzsGyAEWiKG zya9F-&A>67UPL)7OiNB7yB8T$eYUcIrU7=DQDcy?qDfNzKevT5W>>%D)F|v*N<@~$ zo>>D2oqOY#T^JU_S+o5iZl(_M#(uyj!M%5zvw}4?^n2Et`_(f!iX&WrZ*_?MI?5;c5nm^>?E`v+zx>3fL$ z)uul-cR9p7*X&Q+G8fg1v>ajBg{xPPv$noaBl)R>n?laVl-iDf7f}Unj#T5#CGCmW&;r?FmdIKOv-vFr2-GJ zRN$eP3OxOwVEhP}_sV(1iVeGYbvq%SDhDCCNZA6J)r_QqX|h1`k_rlCfo3NaOqT_k z4OEaHK%nc;a0-}G%t_!y61_uUk<2mzXUYOb;4E3d2%Ieo7=bea2z2kWc?fiig9v16 z$kWPQb3v{0XY4uHYPl9^8N5<0ChH)<&n%|Al9QTP!7Eolx{i6=6xVy>z53Axca23o z&+U3Hb*1D>bv^3o$Q`}6BQFxu(fR8I2SYAp-~i;(Ne)0R)#Ct6*u^<}`VMMW$e|a{ z>$?D5>Vs6JJMTd*ge!D8EP*?ldB?xbb_0BFd4wcaxf$=&F>Cs(7Pnc9e3#bHarexJ zjfxH7buBg2v98Ne z(lL(kPN+(9jbdW4cZbImw$pL0u`!tpo*9p}2#BAu&VV3b-{eu1 z1cpJ;FNS)8F{V>KKn5T5EulF;XDQU`J4MTHD0JEm1m=CUP+etYczuBZf0*~G$@ zOPtJrSqu(cu;82n@S2wjp9}}9JF+QR&t2&P%+aQeF&2z-+DteWm*JE6IKu?ax#=~K z`rkoEIb_V`o~+@;2?zkX|1{9Kah~m^>$5^FYs6UYRk=v4|(se7^;U z$K6nX$n*Qvmg#0PoM-6tOebv;6N=;nDmlmE&NaO`xz8#b(sE5i&PBi~93z#(i3|h~3zPv8QY$8l2tSASYU-RHDmaDotwrVjno-a~3c`|a%_T(|V=7GEpygF|h znCyC03ac=z$UkmP`!$auxGR0G)V3x$ishAlXZJZJ~&u3;!<1GCY`@tKR>IV4LP1+U0$r8d-c=c)%02~`07{a zydFo$(696M8eJdOPff3_+u4RbQ@%;VRq3bc?>j1QuhivF=;w>Rr>57|;|=L{;&}y^ z*QcK15#6p$KaE_N=S{l2RX@!*4ZOenDGis^PeZ2}$6Q@*_+Oy&roUXzSsKnf539T# z)8%RXT%(^0b^Vuhev^8JG=D9F$Mhf8aHjpeI{#k%d|W?GyRa{B@R+Bj%Q?%?^o9(7 zT2*^z9-q_r48Qwy-aHMz%+t_i#VV>J{yX*DSl!tX*_alzz{Db;w=1JGv1*+VBOg-~V{uvGb zoPHX*4ZZ&7k2IVqH*}kE9M<&I=|P~&b04U<>oubL$9d3(fhM!=ynFb#%tZB%Nz95@Gq_NdHT6VKTSWHj?iay zxoNMn7akWlaDf9CIB0X^ z!#$n8zShN8$E!?_xmpHMXPs@ZJ)IL&SAr{+)iWCJB*rDWlHKjYec42IES=26dx^a~ z-8a~I6s7n;V%I)v~gw{-gp%QR2GceQ^KDUR zFIg_e!YjmRczFbG(bDMBvf`x`)n%1sk?0#D(b`ZRYjU%&QI49D^3p2mKR=vbEuZoH zjrv&|xiY%3G`c-1-q>9$o_`4H}YnF=7q3okb|Aif{ z+fY_1-j4=L&==m8Q(xbHYyj;;`70U0x9Z_o5;k zUnY*n*N9_n=t~@ni)nF@Z4)!_9u_mgp7-mT#LTd`E-q%q#XuW%I}jHa$Hmb$F%Kli z#k{!aZ4(Q_qBkxU#`l$9RxJ*<)%HX@toiI*yV^7G_vYD)cVa?!Km;OXl^$98x2bk5 z_};v+THJji-Xnf&)l^qkR&T6cT`7L_=2JKJ9u#+k+A78WdCMuxXPfxbx5T3rWs%C} zp26K>py@{Oi4$#+va+i3<{g!#Rh5ylXlbNMy_J_ls%c8aqjt7@SWIuL11~FALk#4| z!WdI??UfO6ZQD9=yh%KDqA9k1)j?5|jg*PPxag@7U}Se#%&if#21@&NIMFgy@ zDl5Mt8WGnJCgkI2FW_|CNHUIEm-43*zGT zW8qry^Maa#wYAY6@zThtNJXW16#xTGRng1J#RJE%#<2eW2}O4!{ci=~NUeCsv6?lq zn5vEw1gU~$%S8sP`vpK}w~5wMrO~oTBqHK%p=oRYe_3eA6+ani67K}TKLmH*f#**~ z!jTH1{i3kM^eD;-!=k804AE*SFTpgJkyNg#y}EXz^RHHX1xVgl6A|A=qyIA!E)#!0 z4R80N^dedpOC!J_hEarN0>&UCJHp%put$7qkBuvNYFx>))9tw) zVfy?ykiP&3l&c5z*Zj@CIo;k^QcnMx%c7N6hYHxV{1*r(i-8%#D@vj&-ZmVT&tDaW zt7?a9d&C37H8jx?Fq7W32zaOe-wVSYfqig>J!eO=Mk_M$4N;Sccnrix3++TCC*%IK z(4H@5)p*ADkJIf<#j)aWtVdG$N1EDi61C!~VJu#(T{GJe@rlCl;nHaF252n|&^!9~ z&#>o;)5BQ->hXk1i-;FUm){Oi`A?M56T0H%!gy^|yd9ZWFidVFKLHFk9^Bw5`}_>M zGEy3;s4hj1RU5>whr7j#Z^?oHaVKonk6^Rz!t*&iA@O%0`AulpTgZeg-Lw^+P~Hg`dRpD|muZsDmev``)xR z4{@Kf?Kx1K@ePr3kM{oV40}TvrR6xu-( zSBhgb&9RaytR3#IeB~nCeIqZWCckRwrDf4&C8cF+V0y=(>5hjZ<kvK#8^Bx{7(Qs&0a#%D5lrMier~7)k_1-KvrZ0%Vwb3W`uQtr`x|MvhCQF zwHsiDVH-WB;ctsbD^yf^hW5Q8aDsFD`67E>$p<4V#4I=g;Rw9BnGmh9__{IyjelL3 z%15Qg(i2~|0(P`iKuKo8E0#sqMMY111=KQ%YgQ2KNKJIjy66fNuUiM@y<8lj1TeJ6 zSF8YHD8^M)SQOE+@+HekV#QHdh_P^aG)jJFrRab1in6k@a{MhNNVo-Mp25C*rjPjd z&IIx0rz>c&N64|vBW;i;{&AFaSDtuqYMh?r)#a6WY95}dApSu?Rz}eM15@L*SQC|3 z!f&qXDI+YKJpDg0)1K?&=aZn|3fP2FEE^B(r)S#p;oL>8jKGJ9tX>J*+_M4G6p2=~ zY>3ou05x_#QD^7(h-A3A`pU>k4}u?g5G(}_={c8=UQtzBTU%At>|mjh5SGqx8I2TZ z^EXtL#CE|kI_Qyz`)1`J_R(2(MBE3D4C-PO)A>E9jQgNK{sqrR@kBma+8Zq|kD{84 z{<30vk5q1kB&6%nsgPq4`I{(ROmF1hi^G|%VTZg*8H$|ajZt%mLFaV@m(rq>nG6K_n_jdY0T`0 zX4Z)QlOEy!#w=SrKW2*u0rNbToqBeQNAtrQ4h}a)D#bq>ZxfGA3Bxb`CS0Azr-VIw zf*;KyXLrZONEtMOxNW!%s&iFwq`a)WQmF{q8)4;E9atv50Yd^SCH|(67P1)iD&${a zgcx~VbN-Wf6ws6wkZ{LPj=Qc6gRJ)#%^5yX%KX@^8_XkeYh^0-%VhwRBB>wnBjeLI7Qu+6t z2#e2H-Lhxsu2sqA{7=3;-cGZ5EjQpXN@Qc zV?~LQxHwWH!eMbFjI9@(Oi>P3Gc3yE;!urP78ZxXVp)?oP$Mo0ivwYCNnGr$5i7%D zZ&<91i?#TWiD>VX-wVu852J8c`b-_3$U-VpENH#tMr~ zVLamElNjb_ko}|_Ph32S{O6H>68X=g{$t303Hgs9|0U#~K>o|fKY{$0k^eCAUqSxE z$bSWSV%yh{{{Zq|vzj~#=aU!P3$G;E5u_?bCB2m{D~mKo%XU__OyY0TS`D_T_H5wI z;!`J@R#lZ9@GSB7V2k`mC+yPb^3|XmZW1|4A2<=Oyt=Vj4A+nn-B?14s{UY0*+J|V zqov|=R-E>l5p4D1S5~gyjI!vJm9@ET?Z~%~HvLh6skRHOmI`T%O;SpjpEC(oC(eNOG zs}B~gS7s9C;joKIE{ci-_w>&K?`qf;K*zYQ{* zNxD6y-vm;k}r2gwv(+lg28j742G77$nx`U|eex|al*0b&U zfuFXYPyr7-yy%DcB^7Y$Z&+;4^Ax;ovAqa8`6}P!KDgK>m$VM6qNahB}Rm z47U^mKw3@IN1`n~o}t})*4ppaJ7fZKM5>-rWo7m%Chp6aE*v1&|e@*oofh$ zl2N7{s9LI(v9#rsg6BaGo+g)Fu~cHJ@@Ryw729)aqoo*1X~e62{|*$?mevvgr z_^L0K*bBCmM=8L8xVdL8{+go0Nk9AW3WhtdS`?eP* z4f$9Jg$bi&F;RRfcGDG6F|Fn%IQ=6S>%lV7fz=X=$689GD>tB~R}41A8mmii3{?t? zRRexCZ=kYm8`sCStzJ?NIzW}G@JQ#$Qs_WAA6$3cQVQd$*zPrprvcs=U5R<+HsC&h zd$jJurS_sFOG~0lRxF8@EGsD|t5#lGT?IleK@iHr)DM>0^S76kd)V|bAcWQ#N7pBT zx3s(jqmGtWR$Uoc6RB8QTq~s!(!8^T)_Vx4W+)tN@DX(E5!t5LrIi67hb)BP|D@)_=TN?{%r3gpE88Ccuv{@7o$y2%G*_&)`Pr?p46!y^I)WLl zh*bY^wDb`tbyK9IN;19@-u2$t-{52jRF#Utf_PP=q(xO-CXQ!^J>Ke9%WSddVML#B zF7X-c)}A^Mrc<5IT49`u;W#jY9i@kJKSl%Wp=Apnw||PNkDRa(fAUqljB$yJ$h(1J zk<&qY{zxelZ@Mj@wAo_?PlxTraIsbue;8*@t5!v7Yp;c!I1I-K#s_;V3L47Ps*(yg zOpy{C3&+YMUkc4-9>Yf!5&}FHUSYH-4(dcCdv$dchC=~pSuS?R*U+X-22yGDEu{=} zUm0zx?EF*twcu+q6tin1a)VPT=7jdxp$gXBe}!=@v%0MKQ&29E>2rPXzu=EQN1c9O(OGZi&f`uX|M<}+c8S+&}8@v*n zL8B~6``{`MG2afv_I+Th#niwt<*V@r5qo~4H~9R5Y%dp;cped!GsQLH`<-4N#-N2Md6ONFyoL(_P7Tm61Ify|*1voEpRgGNOad{;HR}Z>9D(mTT zY|{u&SmMFS0g`C#NhEm_)qjx zEO+BL#i^vA2i#QkK96o|h{f@8*$RpvcIk5PaXAjslDK!#2FJWy-;Y=zV}lE8VD&R{ zv#0lbc&HO)SV*X4c=EHFz@%qHo9H$zG|iV>}d(wPsP z?Jw7Xjd=dem&PJXBIV0b0oP;63UF&#>9W%DVnsPW+kZZ0Z@QE?9>M{HxU8wPstoH3 z18v2H4tSqcqU3QH%u48(DDs$Z9MH-`%0g_1=-LJfVTkaDe^uDWglX<)$;z&_$|^L3 z!K#eti0%9uYIURyCoE;6R0eB{CG4TL4W%erileG)5U34TiG83Tin54U9tH}W!!+ zYVpqrSC!IwogY`1tj?C(A-gQ5@SZ{|{yj~7*jQuqkUKoN8y0VyDNDq!((+7Cyw%A+ zOprbFc8K1{M^FvL%Wsx}Lup$i7P*BM_g*hiNWind5q%2b+2J6~lI%ATytuJYk@#Qw z%EXO@l5}|=k34@{yuB#2(w3>W9hY@7NGh$N_{9`8PahF zg%!Z9x|M#62RJ4>kuBB{A$9cTGD;2?*B#_Q++xYU3NPsIv`pM8{YV>8Z8_EA?=3ps zvk|*ia`ZEuzkNV)^*?8;=WROwQ=RwKOKFkg7N-=X8=a9+ZSnA;0@;I)IZDDtgXE6k zoU4fVR<|PZ*+tSNYL%3KZb(%=d69a)Gb5jhm=B)tR^Fp3#lOx_<$talVpAF>qG~_o%&R zRC7?gt-Gd9+`PC={5%t_7{u7S?_V${fd}J8s!L{ORu*b+PqW3kF`f4Xm8sV$|RVVDl zUDMij>=6Gt(u6(VtJA`b6cIUwY4G=|5&Aa4nryt`I!JT$Z zt@!5bCh;teRi7@#{a*FlA_|)}!^~r=w_1D$+g>`n#X+uku_G+r9SMuCcQkpnk3U@o zf1htPUPi&NX9w_KD7g{VS^oFLRNlHAJH=+W4BpV$ZOeg^do%Aqfx_S^zHhnhHNgNQ zBO8$pk;l*f!{zoo+<%JEg`j0pv65dj8eikxDLe@bWoJkj5pg+$0H(ARa9R z#SuELfO~~&Fi)4o-%pNM*|7M;5nKs1g_UJjRaOj(k2+n&cl2%`GB-v-7d>fUI?&`Sqz)*X7 zkA+M3>l0b4`C@@TZsg2)Mt~UgB{l*jVAljUG3RqUF(ka%uzxC)D1)J#~KFl zIf(s@4O@0m)7GJ6H?H<4yJUB=-PTn1U`uMiv;jH0(iV^pjwFY=`v#A74h|1w31QSrrP?#~eeL~e>v*EOKWk-@eF@NtcTjh1 zD3wiG$$_rTySMEpMz3B)#qAj&>Q5#*hQaF2k!)Xb!0H_A%K)>Q7^}CvuNz<(cQ!H9 zj$SQH-aw+C*smz1xwA&QxAqNZdbf;9rY8DQS(>rY?vd;$wIzg!*1@AmbYDkl8ZUaV zMzg8Dq^u>rOTN?(_6-hMiQ$3aOj2?TQ+x=p+2J8#Z?+$!>C6me2m3oR_^<_}!AcCs z0iZ6CNp>2xNNlZx_`FMc&u)B$YhasW^S$qtHz#z6Hqjl{We4uBrKP_>o=357QcDE1oBsX`-MUc!k_P6&W z_kwfvQfdb}#0GnEN($y+x5NYbB8vqe z&f=?KT>Y<6HXl>mL?KoA|6FQz}a{l1TNZu^JQUtezdrUyAgyBY;hufFlbFE%_O32Dc(7e*0@8zf zt>J8E-ylen^Q)wZCOFdz?uCa3GO3<{WS8V@Pg?PvtQrkycXFgIm6dB}H*CeW)*bkq zV5(EjUZOFxt(8cmnlZgnAjyynEELS*+SP!A`s+tuLxaa87AX+a$Qo*grUYO5Qv-4x z>mJ*>ceiJBFUhW+BoVGgZr0T{N7~59?im~CbTrFo_p$a=7FsfKtS6mwR1_t}O5}oN`$%>KT>UCC6dw+kstje^H zB)bw2t9B!W*-@lXw|wk zYJNb|<_^sN)}i)(GGU~9$c|$+q%{G-2c-tv+TNKZ+ead?2cwsh*8#gOXU|N{2ozsx z2nJa$T$py)-_B!+L0F(Yaz!{|COLx7BjS^XR(c4w8(n8%NgxRCfv!u3ak0oW1+E3=j2mtgG67TuD2O!s=C89I)iIMb&zLob>~n zK_EumH`vkM$F&wsf|NNqg;I+j>uDu1R?8ACX`#V3Uk5*_1DZPx&uAc9?GdnjndDFd z$!7-^F4=y3wwDwObZ%$=s@`K(RxSu=N0?MdN37(}ZH5eD6xvc@vKDaRMuJTwH4 z2RusodMaxYdUFv z>X^<%_V@r<0!6vBKE^jsj!1vgI+iugRcmULRtni(Eat(%qbbM=nK1bA%FolduswCG z<1xsj$4QsdnoV^c&8SbSE9oH$c1y)i|-5?YIjBJ87o-SS( zH`w~2?rPbxQ<-X-V5zJY5UgSKH82IJO~$|12d1w#w5x) zh5Un%^n+YW0XAptaYf{*lW^y>()405B3kM0D6>m4%$6Rq}OIF z=~g@D8I6E!WH4=|lF20OK{u(pEUAW_v=cx_B+>`A%Yl;BrXeQM6qlgNPV8nAnXQd2 zTj<%9!d#Im?Cxvt$*i)nw5a5M0ewJyk@G?ZX8?}in4TtO{ZIj^>+7?I;2_dI7X?FI zQUIlMk!aaf-<;UJrGDS;J&pUfB=!ZBc->%n0|*GY4>J!K{8 zC~)9c9@4kl(LOK?9*;?HQMrkG`jSalGg^Gi!NWRkNM^9uu^?z213k1dJQ1nSK_v+$ z!W!6}Q~anKYX{n0KE^OST89I}#8}tHyP5}H8}^_u9wZOgD`2u^*A#J(fdO(ZXy>Hd zBa%1t2(1p0hSt?0ok(PMawSRg)HygHqkABP+=D&R z=Nrr-7DcqU8iUqj4>^4lUW8|m7=RlC$5tt9wRh|q9H!k;LT-4Z@FGR}0DP9wP2!3I z)msMoCJ-sW3F@4d9f_S()mYg)7_e&l0dlhH2M0zlEEOr$G)prEVzDwHX)?@d9Z&bQ zOJBVk4s##*4j@DFYYPx0BzH*DSIH$|Tnb2=9HXS2Bqq_-2gTSu=t>O?fHex;uf|QW z5@$Lv%DUnH^q#$@$nh{7X;rZGgRP)WZtYB@*MU$zN=Fik6G2$GyK+~a#U>0J?!GRV zC$)FMSL&oXlhRd3)CUneL~h67;}0Eo||Hqj%_$BLaA%s5JlN6ZLFM4IcMM+%@@4e;}lqxaaA1z z(jCGUDP03U8l8YD*dJ0JAW<$O5)w!6H)Ifz(4AuX5wqMYd8(+}>mCEBVimRMf~yPx zqKJZWEsh%XeG6z`YG^&(Nj=a4_@w=&`-oa=IPzDFFzZ=BaPqsf@MT9f22oWauFv|JU zS|3p0UVnNGy{%P!k5S)_*A9X)o^%R5Lv7YUE||VDF)LV2x#2|+llla&9cF1&rYXTh zL&)kI5vjnLk31zBlM=3*VV9BYqre(@6A<%SAVG0fUe2+0xd>^Q(EqyfF91ldgVH614`PaUs_bNLghZ3 zO*s5Zsb`Yi9qx9`Rdae!P&TAdDL5~+1%2U`{H`u?L95oN2^sH_6Ihl;hb2z?@e!ru z$7sxmkoV}AqKtA#9_qNtn3d^F?QQ8C976P7lR(=;T46Huw@QW+@oi?A!35SZg@Ly1 z+!wB|t`5tuSqoS6W9{`-z`Yzn8bs38EcC zXrz)`vz}Hug2l=-Y4=i2Z!ji0!vN$rz+H=9Zu6FR!uc69lgyN?7|i%nT5Ku5*^s1 zk!@fxSO^*9O~xRU=akjq9+Wx~D#OY${s6{TlZdQR?MSY+wUH7~+epX(`bv<_09OD< z41nD{n&@kXA{~||)W$(T4_K92&+b9giX;Y-=bCRIkSAJ>!jQ@WrSv$|$zp(9)^QqzwLnn>q+Xr%}?W z!NQb6p25LA3fNGvo2KJt$1-zKB@a7vX0<5~?zSq77GAK;TGh9F{Nd&u&@ ze+Lr*L4j#UT^s`~suOpWW1lXG04!OR{nD4!#~E^$kvXn=+5x>yNhx${=j7@ar5dGg zh=oq!cV*JSj@>l3v_PmaSn^pF!9^IW9)lGuo3T#{&m?I8&jOQ)LoRO(ss~+@=8g>!6?1c?HlS zPpU`V3Fsbb$Ci?ubj&U}e6-{93#poqJqRvJ#WxCnN5&x)G9EZ2hSy`EVM)W{Xf|s% zdL)Bm9AcOXn{2@m!4RDc>H~a*OaqZL{9j&w_R_>t_@|7WJZ2E~8 zYLY1IIg)B~V`^IXHD?tm6nvJ;)To6$`xKcJE!FOToDMh%^7@5@lfIT;;*{af40jBs z;R5tnWb!iVh=E)wikWG1i$41hy{142oN4KxV%D;bA2mj2eHbbcta;~IpNb30K+`s` z?cgD2LMd`8X(U}uf~J*qBC!wK=*-c^q3aL?!)+So5WoX$RQ?e);DJlh1e#GJDO>>{ ze-06aA*=)FnQB~g0W7!T=6$uP;bHg^wY z;=vhGVPx}((By!e^v-^D@`jzI7UChCo3GItog`PmW68h*(<$?ajJ@q>@4+cN=3iR> zjJzRmob5$uA2ig3fIWhP`o;kbbYBauP!LLI=S7lfHSWF&)(T!IfZ;CI?bhxhRF2w1 z4gm_RK_28Geof~Xv`ryJBLizFrr;+2E=L#uHeW?W9Y01|G73-94Ij@sf()qe2BNp> z$X#_ds?M!2M2g75Fkr8NjVTVLy0rUBQp0xm7}jp$DP-5`ru!1?YK>YF%#()>(_GN! z$WSUU<#3%6M==)ZX{f_L>{@pNR!0pw5Ui#1S9u>vMdenlfiR*2OctreE)}++lOyT^ z9PkQ`kpNg3d0sBXMf%AEP9!>;SuhH_zuv*&A$`va!CY(`$sZtd2ym%-p-c3bkJA98 zrLm;XC`~Kr8nUf&S3t3YF{?*Qp9y$^$#O$SF$MUHxXGqBOLe<;nPa~CK7=<(PpLZ= z)rbm)2xd4AvD$GPyuAlfL16#;bVQR^IiS zXV@}NZ|Y_5#k1Jt@a)}QR4{F`RX2O{iS0$!=KRelGe2KRU<-ZuyO3W)73yX8Z7!Ns z4+LlIx`#vc!1Bhz{LP!c_g&zcUXNs*N=j(nZ(EDgZvz?>5kQr~Dc>KdD+&Yc=KJ&O z9+JAeP(?@>;*D01jQocg?o)Mqyl)H~FVPos+t_(n6GYD$yW!yw5FgXafIv83Zt&$v{@5C@p9h`> zg$Gz34z*yC^m+B3;x zFn~B6L<7sqpGD{S>%H}oW?sL^S5Gp@NYFO&{#cGd`MBl|mB{w6O? zR;w@Xm(4a`{Y3Cj`QWp@{7PS*=8n@l*O&LNdHYNI z@@sr~k{w2${bl6C_%p9f9=+G-%qjJwU!nEzCx#)9Tc+=k@4Mu?s%5w>Kka^Ah0%n= z6Rljf@7+-}YiE(wP(+A)b?@CJ>$V2fJ-!=tps69ikMYwK23}5szur%?KTmwA!k>QG zZO|#?N5aa%Y)Z942IQDusW5(8hwG(nu75aGr7mW?p=$V; z9z+q(`}LTQM|J_=Hz_pqZa-FEbcF2my#;mmO|6r=uR5$oxx{FD_mGf#kL|{PF$;(3 zpS*&)qSm8~z6OT>nJq=Vz`qlyo}BTC!lw#8ng6N0r$Z0SesI=9GaoKGb5W=X^3eS1 zum9_nU;R>cVtVk7>p9@$K0z_pL@#Bb?LHxR9CcObo_o{93H<6_+{jdg*atsR{#GCSdSBi@|Nj1qeelE+Mz1{!dCsRQ=xGEB7pE&1y}8PJLC+qI zhh#**Y-@8-E7_-~L-n7`um4ou7Lr}EP$}${rL?L>M@$RL3caHD+GlK9IlCSEkakjs zoK%~Wa(!Jl)#}s|dNw~(^N?rjYxa!IMK{Y7+yK&JnxtLyU;Jmj(IiIIr~m>XeBdvd;j`Oqam-Saq#>a zU%nT4D$_4}uij5QB$RHVsp!L~%#H$KqIwyWL4&Yqg*n0AbNf{?gz_d>|6twHKtZsX zJp;p*jl|SEdiTGavOMe6|KOGQp*p9I%8?KG>QUsrkfE{Tm+9zb?*%aBjSQo6`wrxZ zfApgKX*^fUoXX#>)A9j)glnTN>jgf_AJlnj|A0=*2jIyDwCl2kfTz6kLVY1JZ_)*K zp`P;23-vT_Z&w9&AL=Rpum+(1?ne5(EPp4`pJ4fSApK>Qe^9681Ncdp{!W**0YBwm z(s{yv3Vbs>r~EsSH?l-|l2zvge9&q3VqNeE@FDNMP=7J%FVQ76s7Ky?p&oOCubES? zH0sS<$r9AhL;WFD9r_~bk#}FHU*P7Xd@KTdR+r5HJo4@f@JmpCn=Ya8Q~o_VPvg4> z`9ER#d)?L&e+lZJQDsx}&>ngB1^i`hPQpig`KT{n?#mn5l*Pce%vZm{m%r4Pzs#3k z>C0F6@^N3j%9mf|%dhd}*ZJ~fGo2UczXJUFYh7>({6gM+p`LW1^Fn@ulR*OcO}>1c zFW=zHZ$*DU&}Hk zh=72IltGaWB1JmVyNDD;MMOoV38+}2#t=33D0Va!j96l9F={MCu|+H~#vbeYti9Gg zch8N!Z+`#%t{*-=>wDJOb?tJ`+`Dg@eNCEuZJPbNG~3UmPA2~w(yrf>X5XA<|31yW zHO;;)&EAz}-=1dQk!Jh3-N}^iuC(iSr`h+W*}K#1`_kC(V8@&3-@4{vgf%D9!$7n*Fad``>By zXKD85Y4#UswvSyW(>`CPUH?y-{au>CVcAGT2D$Q<}W>=@#e(XA#@}})S69=XFcTTgrq}kol?CxoH z&osMNn%z6iK0M9tn`ZY*v-_vnwQ2T%H2a7&`^YqVV48hYnw_>^P58OaxzV0O()@>} z*~8Q95oz|wG<#H=kMDO2+TgrmbWA zVy9lT&nm9p8eGRty|~U=mb@ppj-7gO{ba5`7F@?py|})b>o2L2wUhj@Q!lQc!u5Ae zk@8`uUR*zw>we8C<~nxj#q~8@|Iw7bT*pqmxPCgbc%CVZxQ?BAaeXb<{TwUTu~RRu zpTYGCQzU)t)QjuuxbEjHxsIKBasAAcg=dsFE6qMT&0e2opOa>vn`WPvW^YKdH>TN} z((KJ?_Lel8wKJoKX?fHSJN2SITT_;+-?lV+dzyVgntfrKeNmddBh9`z&AuefzBJAD zYnhWN@2}FXU!G=Pk!D|+X8$_PzADZBO`5$k&Hing&Hgg=qI}n+EZ3gbrrEzsv#(3D z)Au(wq+P!;&AvI!z9r4}bAyv9->$Ulccj^OrP+S&@b}-Hc6~RsjMu; z%uKwCJrKLdgbmn3uv?fd>C=~4)Y-k(V-Lsnd#E+oBeBu+rRC4^YxrKSAIDb?x z{VDbg9^n_7E%(pD_VumCo{dePx|g*7Tx^T)<27;@n4Dkj9stAX8q27!>)J1UXA^k*;2n#_#;b( z+4e9#C*SOSTtAKLP1R0x!ag0lgI&K1oAoh=7;~>Lu&GOq?_aTr)g0Q?y`;Svt2xwJ zUWvWfo3JU9ypodNR%~12GTz0$5ZmVb%q7@6ux-xE*on=xocr|tXd?Dy*cRWBjDP0) z9N*t!Uy1#``LD;m3i~UwM`JUe=jNC#?Y$Gb%xp>jx7fb^;(s-E-@yMGY+}~E9^g9j zc`h;IUMsQb%Ur)_llEjj&s}fVrGJ>ebA5c5V&8;K8tyd^n^@1?Wp*z1@3HroE%mz< z`>%n08}_?_&Aqw4zT!_T<>lJ-V(dGxn+Nut*gn3ea{VrBt8bzToB2J@*LNBAz1Z{Z z{_fbjvHc#Z44b~nyFjlep2lXZ=J_>L;`JeH$}F#>#Pc3({<)WwkG{=&!ECAjqu9QF zGJf`Ae{0tz|Ht@~8UJ&y%YY}anbY0t2JAm!_cr?$>_1~O2f3Hz$5`T2e0@p!&tfws z+)J)Mhi&z7^ZoPK*V}a|-(Rr(_>}f~0h>JJm5_L%ukznkJCgQ&3HwvElM+9Fi=ukI ze@0`!ie0YP-FSQ*`w+W-KiB_`-QR49?>Dihn7su1E$kBm`yK4{W=nj%hs_vqFR|ap zrjOlA+Uo;s+SI+Ie?G#d%3f{CH=3lef^|=|ATGwYb5q}*vwh-O0LKL0h>9=b5-G4fqygX9cB~1{5n@u zc&*t|A7ZJHF)Oc(8Q3kcef_S)uEZv$+>7y)XpK!Dx|iJFhCc~geC2){YG=yzYV4kBC-z|1U=LN>|1r4eXtVcooqLOBnl1SqguTpcY46V1zP@62!S?kP zyBqd3=KnEvckDZY`zcG&!)8nS_rhk3yH_3XF9QzZq%dq=m{}kB$`1C?? zU^5o$SDIake=WA}U$F;Z`~DUC2<&m@zXkh9?73z$-Vy_`{rHvsI11b1JCgE{R{e9$ zzZ`oo_BOLiv4>#W_)ZjK)Asdmwd>Me!?7O<{6}CvuXaN2ABnx+uHS+^3Y#(OUebQ_ zU2%q*iCXN@*uRw_~_hRyJuLaoSv1h57h_EMMuTnetJvL*Z z*w@$gFU6bndQK+Sr*ZvqwMz=HiKXJJ)rK4t?@F^DPqUv%vtLcK{e0)s``)fgd(Dob zl0vhkedb_Sn!N*?zAf?bFc5nlHht<|67LJJC!4(tdm;8xv!#BEu+KERJ2rDc$#%1) z{gzPG`4$zS-2 zHja9Z7N-LR-{C|Kj@Xj>gX5o_S?9=>&K$3}vUB|HSNW!-{5*lmauk?;zcKZNbiLB! zzpvDyUdb)E(-O(dj zAHFuLo}$T_qqF5y=+1|B>2X+e5)pElhVZwjz`Cw zXXoy@X5h=;cDlIb(v1^2e1;r+6l0GVyQNBWh#mi7=N`phMVGIa);;E26uvl{I||S zP}5&JMj1yvxxv2uERAa4@(+~Y@OiFNJULd!9Vo0Bg{EC~zo*01I*0J2dRI>_mCXEa z@1zp0bJTH4uJhvoDyM&C8#O%b7?X)Yz6kHjO5yxbKA=C##eS4R)AXXW#Lu2F#f^F@ zj-5~v+cV>zYw>4g=pja$t~|?An2JCbx(k>TjC=j^t8+Hn20&61C8>GjL)f)luXd1rRj7Iz{$!R z9L7an;rXjpcz5OlOhb_v2TjP4WTBlp_BM8Lr+tJzGK-C^bC)RN>L{r*^Wt>kv#?{u zPV7@#4|MPos5=XTs0@B1iz1j>_i!Swr%vJVimRa%%kHDToKINCwv)J14!*W2WgH3D zy-BL;TQcPr{N_NNEbQ!^x|;shOdTyaY%G%!`9}6@rYi2fhb!4&ZQr&~M(EsZ&>~xJoDCBTBpP)4@vFrz*JE1K;a0|cS znm;1HuIf){Q%B7p-u0Pl92;pDQiosQSm*Q)y-|*+iQ|?GQip2!GT0A<)HUru7gr+t zJq4+9XxDLZGu=>sa5TrQ)ICW$IDaKh#d&ZbODx13|IC`Vq7KekZCpip$AHiTKDMaSdwGJ;&S0;zo!x==FW_Baa_mK zof4{ka%eRqBQHF_SP$2UUE*J4i?c_K>rQO|$UYv37`@z|9`^qF3pZP_7LR*f+M~V|6!qRLz zjW={+&*6r5e3uCSeJJN}pHkh^s4b;H^nR|8?oc>)G%$`-H#|mBGEDpBy`Mi2nJwH3 zj&ur74-1dO`-NY=BttiCre_%*z>JT?#m`7}&v(@MH#}q0?yPf6o>nnkVr7een$GSD zi}c^ezT(6^b$%4f?h7}%_KQvKX-|2SIP7?P?$evc&e_KOV0*qBjpOmB_u0gwXz#NX z_C9y<2-W*M9;EYBkj{^(dlSi&Pa->&4$sk3`SK|FD4!-i(|o@8O!N5`1$yH^=aE+I z-z?BO2Rta?$pNp968(L?yLr^>`RRaPi4uLhejvpO$~?$){zj0P&ff*(#q;|(okV5e zQyu7?qQr6L&)EWr-adW$sMd3Bl<4PqM3k7}{YM8n{T1t^In(=aZ_Gja^If%6pN8#E z8^--h+s5%gd&WBct$n}X-`e*JK2=_C3447M?d&&Q(sxv)BS-`8!Rq@hxzv@dlV@)N-#ppOx=cx^zUBbbPxN^SIu(Ieigx z>!57yg0gkzalZGb&105$^K~B<`2Ru-CuW&{E#+Hk{%~e@p1oVyGLKLn`FlyGr74_6 zn|L3od!?@n?H`ZvF+raa|8f6L4d#Re!PtMG?ii2j@>Ecl&r<2|j5(eYN-jlNVc``X7Ro^7-8T)J^9bcENsWg+cNqp~RDgTJB_j*)G zzxsY8-h4VyO)8zJbHLmi&rz8HGcUzDK7PK6h})R^M2Qo9Ueqhr=cW3B)h&*x22 zd~HzvJA%HrKj@33>0PK{w&}v7`6!jow=_zu@XR=k>&|@Qx4#$T>R!o5bbWay2KwlLX`grvVjYQ@GRJEW zv2nUjXJFv-OX;i(eAWf&tPj%J5cp8$c_dOJ#75)o#;dl=2`b5&6rvHoDXY=#EH{|=@+NVJ-tmAPMQuz`KAj? z`jVI2OF83oBu&xf-p-~A6MJ2J*~qJlX!0WcI3`Iy-aCal_4;4*u0DOz>FU#`oK6>; zc5u4zm>}QDsq|&<=gX7$U&<5q1$B(eDP<1I^Z(R;DIMCj(x*e;Rr-1z5u`sX$d~%Y z`AYnF|3Q4k-KRs{n|Ymabcr7$jJ0@Pn$E{Ky#FlN`_BvbO8zwL?`0no&y8>Mkq>|G zKVX0FfnctSg1qRLI4{~E&Wreo)9DtZ(>=(SSdHu3FR1ULpuWq4`mPD;`(jX@u-$A7 z5+&}lC~>_cPJF#+pSW!s@R3TdvtOI<>)SK%m;UlPWsB3HY_WcBpl=QIs{{R}K>uT) zKNaY-f1Lg&flhtqQNCya|0s*&4KQQa@eMHRk>jV~V&hL?_N7iA0#o0GL46ncdj0>f zz6*l-I=1>cw)#4@`Z~7yI+pqp<4b&fsrwRN-_}7pw@bBi;{KGLcqpZlQnXn1^E(03 za4d6suCbJj_ILUknD%$P45s}Z&w<%*IGzaezQFMaxYD>5t}^ZpR~vI(KKt$bNl!l4 z?U?-8Upbb~w#nzSMUM{fuaEIQxYqc2c%boKc!=>zm~yy#AAm<2?}En}Z-FVd^Vtqh zHQoWwFun|?p3dhMI6u{%tUJ+C-xt9+jVSNZOnmKiJa%$72AboYF!gl20WL6J1{WJs zE@@}yQwx_FSHtDT_)0sAPvRT6%6LDFpVRlkos6aYU5urU-Hlhmy^LuCX=iuuK)BYJ zG^CxKPPwF=g`@BJH^TT`c(n0Oc%1PrnEE*XyI}Hgyc?cj`~W=1cpoe=?Aw;PH=dVj zenCGe&`%BgWsdUc+!N^ErgXQ?W|Ai_K3^95Cx)f``QBGthQu9#PcWtuGQU|~2}$45 zO!iLc@?I>~?+^6HQ+h@+rDqfcx|GM#&zKzOK^-%KI%a$p`2U#l&kV|w8I;Gpzwm9< zIOQMji-;W;|57huVj^CTa-*oNUw`5FnLtpN_+D;}(-hACnY_|<+M!)gwszLGvX`s& zIx$o2^$Yo^yw@*>y-vF4%XrxfpgCR#Q)b8O;R5C8UAWlz08HGAPxLYW%8WmS%Zb&b@_@9G3LrcJ4IiaF8pn3 zuPfur?{($z@Vj!oUm`9$$PS)T30_g-!Ov=!$JXc>fwf4{GmvFZKk$5h=Z zL%iqDPL)C4FSzncU8D`AO@x_q;(GNoUFy|4l^5UrN#*swq|ca&)0Z@*A0^FxLHd%W z=u(bhb<=nL$TD8yewQ@8e@oNlUea;8#1-i{f8kL<`o{+8XYx^1A17seOx1H`lo;l@ zI!cW6+$Bm3_sp|`5uTssBeRf!^6c8rU5Q{$qeO`#y+3>YXMCKWn(~j<2J-{` z<Ff3;jdACW;>Mb5u9j&ojhf-2P*Nc6%~P zyzTq_izxAqv3t*J>F_!KxSicIUay}N=%1z1ue1I#E_}Ypb}4^)JK7^_!2*CXI{p-9 zoCqf?Vdes-%Q)qquLwx$vVPD@_!Q8bpn7hsm zd^QF8hk^b{N>4D)`!xAJM?8m1T*dnGK)))`uMYID(5;+_A5%U_>gDI~B<<$cqvW8# zXIM%nt`b9h{IJ#!_S`yX|C*qGX@|I976tkxflis@cz8L`-w5=FqC|J!&QHOz z`}F1SEI$3@5vG%7a+K-9V^ZlSC#TX+(w=cTADTbqOwzW#oXKxZmvm?!A4?h8sdO?f zOr?`?Nh+O;%TwuOT$f5GBTKDO~Mk+RFHC}83tPLnqLU($^I|Ccfl55MI9 zvwhk!Xv21?Hgsdq>LTlcACJ;jor5}d_I1Q3jtxoE>#c)W>Kw$x5hTcIL7V#B0U*_eoPoI2UI*h64EK5gtOO%Y?t6t65 z9sRvG!Tw(2Fs|?8L0(T;tcu^W7OTQ9SYD;@SC$u?=$1++A?3I96O`ZY?fHIMytkL< z4}Nd&-Ybbe{}Pnbmq*?Q#pzIHKL!)GrpA=SzpFd@m&D6f9ypnwN=McypH8xIs{ND4 z20qgRpILzq<#Fk=S4vVI#}qY5d0c;qPI>&?l4OiKU3@+a^iP7kK1=0=TOyME*a266 znvE>TwcV0 z)3?Bnn=VW?Nz%-`5@H|dcs)$n94~<>o8xgXWpmsIrfiO@V9Ms0w&Hn$3hH~~gc#g5O$pYhv@Dk&J@G|2r@Ji!yc(t*#!y4r* zX`gk7Uhif@OI+`@DAe<@MXr5@0G?<{+-InZ{TZ<_rW(9?}2YI zz82nPd>MR~v9#xI<8|-@#?th>{&VZ%zG;p7SZP?HqrWgZ7O7w)k$8nD5K^A&+8wJA4BBdVQ0sSAvdIaB(@@w2KYUqpXdb>VF0F5k}C%w4{n zv$v=I&X|1}$AMb;vtLO)v(5fE#e9W7ewLfV81Vg`!`P0QF&{HA8uOeK=Z#9u=Xs-} z#Lbp(-i&~kGXGnfEzSI= zU~A`m#*u&aQZLE(^v$Op_Z6B?y@J$pn0no##K)Fqy&(Zl4R~3=>jS7s(5dqV-KFtEk^RAV@fPDYunRfWpxUe)zeCD}RzykxOzTT%u z_6*imMeG@BtPP9W!CtRP^+*!whJUf>?p_{ve`=nxCp3%kcS(x|Y_qnZk4<@W;z%@ z;}w23NauyXhcOtZ^IDMp8NA^hWUR-34Aaqo2d_PP( zh~B6SK1?|$3$9hplJCinQZDTXk5_J<2TxWmuYl((yK{b)C}-Yw`SwmAoo; z!<&^`-w1D4uE+coU7_4T)s*XKT>2p% zth={jI&5{9vuP4%tKRNQc&l;)>Xo=$x$<`ScIAe>;0Ki(y#@bCx&8|HYvtrf;)J8= zq?}34LrB(FuDJznu3UW`++Mk?C2V!cVIPw0uX-Ey63OAp&2E4vC^xTyXDinbgUMye zSu7mM(@m!dlN*&=aAr&LV&yiE!pz}Pws!0zlY5k#&V`>*mii`NRc?D4{GM{X8SuZA zC9e#tOFQ~K!|KwKI%Zg1vM0lX)W3vtE;3dqH>GSDXDDY98yS}>x8=E8#x=_IIp-te zHf342ITO#7Ik6soLb>@Y_^-K z8N_6!wR0J9m}%`?vJC!}<|XGVWnQn`fO(LyYjh~AL1fik~T&TqpUkyLK?PuR*|Lce5{n?LQ7)j_#EXN+Vq-%2{!#81|d$|dv* z?+u*Z=w^7DGUsGOS&Nj5E8&xs%h>B?u}(=k5(8NmDmUB$?^Le;ILzEAKBbJ2tOt~N z9vNjlrQDc);oLaqQ*j==TDcKtb!4BTEOC`>>6cy&|HgbCf$vjp@eusDa&yX-ZT*{Z zF}z>(>Y1F0mZO|I9%c=dvbB5%Zlx^0W0TWaIh+2+CtHl~vFDd)bqbQ&yxEpBU=i*k0Uo^?HJb4A7Bu(ef(#_-?N zrwM(O^R6<_ETbG7Urow+3(Fou%Gquxe3Wt{;x^aHBXO9!!S3appxoanN3X-5C};f@ z{#H5vEY2Qdosu-$&=+~uR&DUl>tz02;6BPN2f`zj+x`fTRc=U{d6Se|(>{5}8Fzr^ zDYu{5h9(>4jOQ$2qaZ0lNw_OSI`<2zwLA3gwEoVVWvv+hfp<QyTjvNvGuap~7gfk!FVZvb1{He~Iq zH`jcQg-=xOuoL!UmKdwIP4()-;VYDzGFQ~IIjZ>+@SUo691UAt$~VD(Q9YCKRqyZ0 zRib~OTrmu`IjVdrk5V{t*Tv*^xKOzbXGj$^RhG{x7qnF_W)D!%)qI|Y`zn_as|7=q z3m$=ID3=}v`~8Wq%@6H~jRNZnIp3+^HT7>m92UH%%=8%*So;^!{slj%-ugSeJzOu#Mj;$;;-DwmGn^eI1C0LhHM>jD65c_$lh3T+aMc)Ll8h58U5; z3gBVNRjlY8#+$gG_rJS=Lo@@Ry;1iXL8B_IdR_?eKzE`>3V%XxO`aam&q{$ULo+(qG#NBX} zatU)_@zKhS8Aqh+`c%#sEIwDc$+Pf<%9*UQ#a7OG7s2QjFne1UTIweTO6s}F{s zRj!!}+c;`W|Cani_59)}YLKCvu@LT|-0)<0s`*gI1}l^s9SPeUn`C`yVEtH_4_~G} z_3nkQRW4xOYhbaRcn^L+_1q%(N#$(Dc!L*}8?kR}uwS|93ixB?B;&WiH_Fw!*h^(9 zwZKikQb;pEja@8;($}|99BNc*|UPj_S!@!ON60 z{tT}%o&IgOK{?R{-eLS2yi>XSBls5O_RZkk%Jmk(dzGtygr8T=6MdhuJbQ2WfpU{W z;jfHIztsAx5pi2;b#J;4ZlOLc9*1j`3yAYlo8KBSca;uQy{ZFzjB?Exu*Fi-?y!yD z_N-r}tJSBtH++tAL)OGni~pL(V4Jr)Fb|hneG3nVZ7h_?y*7_EUIYJC(`j`SY<=Bo z6#P%s*%L*j-zqnFi1)*`_iIF)H?r|k@f~dQc@_1gZmv(Os7oW;`&C>F4^h2{7-(ek zRlVi#Eb|`^?^4bee~ZuNx55^mt$V>1pXKMkR_69oVT;cOgJ6r#l6#_v?=iUY)b9aX zAGKrtZ*1|IHwCu%lxLKUEk5&^0~=d>R#CRb(=?q{>^B-OOqH2?T>4R8o@?6Pqxdhd z&F8t4zlp^_*;v@-lSYTZw#F4b1KU2NLlHb#)8zR_)MTDA>uS_wxpFhwt;t&BM`7Dv zRsRFFIlOTee2w}vDui!SF0BvSx+e8%@`~zNjo^2cOIX*Me5%~?IQV<>8N%K@SGnV0 z*kYiDb*HRS^=9lh$~q}a`elbHXMYJFrCj<)*kZnj4Mdr>t(3FO+E&V0wkk+xQG`5#^}U<1Fzq%dc(WXALQA-*KK}o^gcTCb7QaDxX5jW z{$`XY^SW;z_C;m?(lj$9ukUzfZaz&T)!Sdl`?><2!+X8N^mgdX4~KibwdyT?kIvZX z<@G~UZ$+Fm?Wf%OPMCF{pO~xAL7huV18k2j-uq%q_KEzgBhjVo_7ZtbZ2Q^lsIgzk~h=&z!x#%{f^s z(O=*>v)BKo{!Rah{+V(|;-OigGHYzqjJA?}ZzXG4v%bpZl&9IyDACi>X=ZaKd&#KT zB0kUQ^%K;;O$GXCe74i;>r`(=JT%+F=RCcBf$9b4qyL)Ed3yb7)r&Ww-^ybyuit6@ zFQY%qXGFceSM@x`MYHGmEU4G_tKPl``bWymj^~-0)i)Qtc~ib8W&X`=4#_JmC;S|Wdo>@cI&*o{e5P`J;;Ol|1M5=Me7)*qna=vs{5|8x;SbfP8EaYdFHQdz{?YO!9?FyU zY?irQj-{3K`5S&z-rV>RxH9nRVEUWr-He$V%ZUxCOG45aVE)8s`7!E~qzvVZ5%(Ne z^f{(8kCh*9ybNZYb?NMb*Oj*}Kluu5ZP=2rR!*E0q06iM zkJ=_BH^a}Ue+F}1`3tHy-Uk2Obmrdje;Tvyl>cCS3y-mBHi|bQPP%I zi$1C+8ILW7Dd#^0&$e`)ffuOW@(y@~>7T>4-)PCWYjL*fnXHd3h#85EEasLLmqZEP zm%3Mr->F_oU$n4sQG684JRtt{3gPFJ+iifUqtofH7N03s@!X&V`}2C1Ci_3QhLYwERZ7)uZrF{QcT|DvB)4i}^bN^Mk}#CUI3^^Fv$KnhF~iId8)UtA7<^ zq=NZ@|J*56|Ku41&NllNHd^gqFKRc}gcS1eOKKM!7O+zn>_l=9?n zhixp#^OlO6RHxaZiu;Tu-zSwNZYo|eo(I!DuAGw2=bA6iqM{1si=V9gm3gX5`77Cb zNWKNsy|Rrl>tkg%V`9FNc|d#$b6~4)VMmx4aQgA^QsYbE(~Td2tzNuek1DNR{2ec< z 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

ypAQ^aVw2`z{Hr# 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%0Ak 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ś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 BJeB|e literal 0 HcmV?d00001 diff --git a/wii/libogc/libs/wii/libbte.a b/wii/libogc/libs/wii/libbte.a new file mode 100644 index 0000000000000000000000000000000000000000..cdd097f252b476e61d7183da183e6afb08f914e3 GIT binary patch literal 471864 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�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

yAoRvMfT@5XTQ} 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 W@K=mKw{`(;dIizG0&pAc1pf(T<$kFE literal 0 HcmV?d00001 diff --git a/wii/libogc/libs/wii/libdb.a b/wii/libogc/libs/wii/libdb.a new file mode 100644 index 0000000000000000000000000000000000000000..e9f68f660b6cd45fd4fe72ca914535ef23df60c7 GIT binary patch literal 521512 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%0A31uc-6Vb4SpQ|B(_Acw{v0wdUYn?DE3z zDLz&C@XIpL7E+g-Z$W#=*Y2vlP;+=-ko19sSKva+IKJio#@+rF%pcI zNB*x;97B*YzNY)0N-T@rBT@XoP<)9DcOJ4|lAPVx24}n^e0XV{n>&8;_%}GPBS>Pm z1*cfB&ld~{_cYY}MY@pfb)pwW6FzUrUSOLtxn#Mab=y)^Q%;|%3vOQOHCviNtXnE3 z)-BB>_Nlrh#OVriO3KSnI6$1Ka4E50ZhsMm+g*W{?@=WS2zASq#E~@63im?FYzURO zQ6?NT2j56-dsud4jOMq?{WavhulTJb)ck^MRqG5^wEaQ%WHs>8?NT|mhr!eKDL^X$0R;& z;hzIfnB>Fjc!c|x5LB`d@>7azNqNfoIO~;q{fm{m-mhrt*JF z`bvf01paZA!f&JBoy!&eSIAkhLgDv;XRT8BcdXlp;DR5LkI-Mn5+Gw4zK~DNJGwC{ z9Gx5wxRK)K=IW$pM=|BLNvD(B+mM(IDerRV5}DxUeUiyUicXXvE6=ABb5Xo8T_?&} zlCKl>PAp(ap-%9xUF<8?i7E*DQa~r*lp?Q8Cl;}!TqhQz&I6S?v6N(0IxqlN}cKf!Q-}5I<*}=zsWYBQ@tpA)^a_8X4kB64LDMTSwz-pY%MHv76b(OU!;e;ic{;CG|lxE&oo< ztCEpT!1X|AHyB$qwgKNPssG&%DTVOBY_L0_m%d)6AV=0x1^s}H3T6S`tl%WToeJgy zerw!@LXkWS{2b#pOu1J6eRt30+RP;B1)Ap8Qf_IR^g?f; zRN6`k)oGffO>CNkTxbi0a(kp8LJ>qngd(V@sE8M|C={4+Gdv;3tR5##)BjoW~O8i#>v zG@e6UpimmU zkSvW}M3zP`CP(S*C0JQ!=!$!-ikDgyu|fD1KcFgV{ST63DgJ(O(UoNJb{|fv(Ka-ES_(g3ShR;DBM!fx!7EAOqsLCshuNn|Tn;dZAE%$y9PdmDnUuJs zhGM)F!NXO5L+Y>Rh!Un_;`Spdsia7yCS$2^Rc}&QR0>_~MG9*OwnQz*YJtH|@dp%B zSOzfoTAn5+QbXNaoD^J)FH5S_PTa2Ztr&Bpa75)vF%lU0rt*Z}c#eEiCW@JRJ-V4< z=3b8;`eK!Pi4=c;v{>by4q&m$Jv}Rnv8czFmFN$khY^EJF_!GYhmO=?B@e5=5%o8! z{^qH_G4(fJ{f*0fDc+5*2atA=X336jNQ7Sm+JoWFmoeuP=LK-Wd$rglh^ z$Xvu)%bBgU`lUtj2RM%Ubhwz=x=f!A7hgf1s`Z(zwQ0>C1^3iwzMeWWQ~W)5e${-u zr&i06i1FG6iyJlHME$1Jc6>oi@qY4LE&l}T9;f*ha&v09!zsQMcxp>(_$>aW)PdGZ>~U!?vzi}lHNv6AbPZOxl3oi2-e zG=GUU`!wH4?$`WfaP6SxuP{AEG~;DVGPzUp-Q?YxzlPDe_I%Cvk}uZ$b?_Z~HGc#A z*yWnP3I5YQ%?BL(_`o%qA7H<()BGTPxIraaGL7jTZ>HgK9CQ3h?Z6+1n0u*n&EY$O z!}`b#=E!5g5msEL4}aAh{!`B3LYF#X{7Ebk#r%0G)vl5LO{IHH@po`=zjpW`)G_I< zI2_1Lx>Ih_U9qJ5BQ%rH`rozE{ZZdJgAnFXC#CbfNJ z)G3(_`LdZ>zm7UbYsUFiY56R5I#SX|`D`7CKg-CLJcyA~;|Z^sEG1twM}CDPC7pQn@_5v9^lprot+A;wnNYChba5aAgrQ?qoYD!V$oC39(8g}3Aw;tY<3%OKT8 zJhB!rRBtb+hQ>0x3L+Zsd0PQuTlkQzfdCh}w%{oE`x7l-cjF(?-XQqNNm`65@E83w zZJ|o>BkpYbD8?bRLkoEH3Aa8dJm)q9g%{l>U0|$^#T7+;{-59%0F^D#O(9@q>wK;J z6Hz={Mf4O2)jUYvrxmof5ajZfAxjkpIn4T46qzvU5p!>V zp-bzuAspewES#uoV<@L~xa;b*5mgVz`I5qM!zl8Re;Z9qxVcVMp%hab4@?GXVb#Uv ze&jM%Vtu>`K8OFCi9+or{FpS#2jJ>^RC&8y65IFVXb+D{nXC6Qmgn#f9(eIGeuW(T zlQ}5g3*$6BiHV`K{tUG(^W3$eD;$1>J|ENHD+i~)7Y8rm!7I%-$~a92<>17VB&&`i$>zt$;9 zL2Abd`rtwiw{Qy-Yfn_U6>eoEV*$gbER?%q0RkkI*e^6kkCmek6z>&yEYA@5Zz29@ybfor=So<4N<439n-Vyhn zfPSs$KM9*s_Eh#psfY^;Qc(P2OMFd z`h!l3hTCb7h{tZuw~43L>8{|2%%4uY+u`!(E48MK<{VeXX->i)>3QxtHDIkY=Xy7? z3Y?m_SHc59GI^r5x1R^4i#MybT6C?eOv5Pl(4|S$;*x(v&phvHqqzuQe}$n`kA&-8 zhdQCfkgca=31B7vEL^HJoWw~eZNh|Z*rp}N=%+aoP;sK)8#ABhRPn7|cC@8|d`pXT?eES$f@S(gWj{#~zn5wt)OKv?Jx2j1$XEDxvuv zlU`)e>4~^%pdMwew-#=_icU}Lq{MW!j9q<+e_oSu<0M|`IMt`=n(WpYa5s&r)m@ay zur{8?>4$~OK|{WFjq9BQ?Pb2USZzGbS)~n5M!j{cCqb; z0^7utqZow`I(is!7<I#O{UmkmKHT%mM zO-$ z?EDp~^PB^R&Hl8kjf{|`6v}@S5qj$!Xwf~#XqnSvH_e!2zAN(pM`Q-8H9j16)wju{R(oV{uK%czahx-ReJ?pzml%ghxPpPZuavu{%L1%gNt+QF-9?znWg{N zMy-_0Y=$2}N?sW(JxIySo+BLOI-a>&_rR<)Oz_MdV=G8^$0Qz_F^SjBpy08SL9Uu1 zL55TZxlWyvg;3UsgEfy2I#4wZjj5&kt!sG;mD~`vFl`2<`&0urNdx{7$vv1T-p@)B zn>jeWsM_iG#upysCoLF1xG4d|sH!VzJ6dSdbzd^(Pqd z?z*6a^Y!({z%yb%wK;8x7=Y9=z|vzun@{Cb*&$URwW_eh5z<-U{xGM?XQc|HRuz~hKD8z$k+u}?hHsi7(5E;97i{0hQ z?t3NaCO<1DK$GxMWoo!?PcVJGm#IACb)Dcmq7%G{Z=AU9`(>1ftqH0#Ku`vXL`?Baai54<;gAsE+-^J{g~b zb#ulkdb#30$&HX_i6&Z$a}V*fFjxv_qwb}!ccg82#us#BfsMnQgwFW!;gr~raT{yT zjNgje;#c{fS-uj!oW`D-nH8VO5Y=AMj-X>A>63_deA~V%;srY%8`SQ6$c*Ias{Zd# ztW`(V>$?}tXzHV5idbWc_fr|`$b?@L@Mv~F;eWlg z!qFwUGCFni^jsMYAALfu;mUWdVo-6Qo%zZ$Fr0juVN_Q7a%+_TSzKw@fm*uXbI-t} zyO04l);@I@YpVTwbA6if9vJz7$lj7De6?SWiJ%{@i)hT^*He_2P@*!0d;HYURlFop zel(>LvFaDbhK~NuYGqSbh`%`Dm%h{jXN{<1W6nVrnbYFXnK7P(&NWron^}8x71JnR zf`~<4T%7f3IV>`~rgUa~eT-}XGQ1E{SD%a?mZw>Vj5pTHS7nr!KzWfuLS2h%SgNuq zWA)bq`ECrP34&{mV*GLW;tk^_Pg868lHf=uy|s)=&OtF*`L4GNms)>a42yZK5Wa^i zQ~j29wZ7nh-YweIrjMe24co3xYFQ0~=s3s-9AQzdO-Cvw%MPQw0c&2nSpqkxZDxbn zW%R1{_C@IE4NNPKDI&|YiyH><(;Y6lt2>~T;i&c)iGd@(Utg{V18+Mdp}HGPJjVi|5_V*zn|y4CR2AkWqftLE_9JvLHw&S%-Fimx!N2~E&1&|boZ8XpAF6e5UW4l)*LfJmIZ7V7jtRNB6GGH| z&t^_5jonK1dd!3}sdfdcX>(jlP>r`&5o5pA6@l^h=!*MTQR7w0#uhBLqqK>~T?|FT z9mweN3%LlRo<0eK6B=$MAWO^da8S{IF;S)}K4!m+z+wNou)1*Bn77#EJ8VzHTB%G< zJcl3)5v~fOo^`DO{xqJ3din|j;T5V|0ave+nUsjTy4En}G6U@Suh;g|&8FZK17{Sz zkGQT;jmEyXhQ^grM5r_{%Ya%Lwz7mEJ&5z}aiw8gKEA0JG)vV{8h&MIGu?r? zrC;pYvkj8oz2C>=1wMu@^D&X~ zF?msd7dvjTJ1tpS;3d~jD0Wj=8ACNrLBRqDaDS~}3~#B7cf8~Y1t%7)KolcVh_Dcy z;1(3{h>JpAp`{jc-4&&j=4YH0rS%1viKUiqL7;majwOoFF7`Y=(Qa}&D&h9MQrAlc z4d4zwFQ)xqrDAn7Vwx|pOh#}Y!Z>HfM7-%f&Ydw)donJfjE?uKMd;rIsfPa0Xt`B{ zm5IIwN_mp>K@}!T=T)I1sE5n*rHDi`TA#|+*-GVH9UHW=a3YVSr(;MnB1NCIvjyCu<<@{cT1eX9%9LdYR}=t=bfwb(#IP%o!eV-OM6 zYC@4cXDt-x6d*TCq72>KOYzNQ#cm_;7$D@0DzWBW26?FbszqqzSgrHnMH8uZoK{mM zS~%WR!P1lL7R9P82G7sKi>#UI2HtT*|CLj8B)h-sdE=j45F9Q&(_>y+V-L; z=mgc;3pS|qSsZa1RmYbQ@CKspKlYrts=SO(49xPtobhW#Aj)ZZB^x=_T|dDzvP#E+ zA!!Th%$S%{>tri<_%b0~x_VJLYn_6jRXL&uX^mAxK;C6{3YRbA%Ja3#a~xh5G`T|c z-A|zP!I2pgb%5So0KajKz&}zj#?5xgGE5MLWrGZ*6i=6-lHwUmmBvz)DjRK+V;p&p zbV#bbS4Oy?*u`n66-_leHd)cd~qv}#7_K(SJU*CnwIGmmZd<3nhu(pXX(H4Rcy2}48l8WyVQg8IEZ@8<-JprwWItR* zE5U+p7{z>?`(Ei(RF?!6ji~gkB1_8{@U9F6dO4mMjhycG8L2&4c%fY$Im*^VUuP5? zD-c$_!%IyiYaBvX;PtaSEHU1_Fb~_56+25Iz|e?gEfCv=0~3d7z^-o&S6=Z0=bBLb z%{M2Nw5+PBy5dH)O=&VuWn|xy)wx4g`>HnLfK|<$_k>z&o0pq2;_yhrh?mBBq z9_fH@1Q#OYVNF69S#KE$qLq8Vuc@x=s*<(1LigR4kziPJ5BNrc69_1r7S!|=awb{( zVH6HKCG1fQ6nvxabm(%{qri@}%)sllfm3#~K^y*zb|g;m3E*qTg1 zHtRP}lnzYW^D59e;sM`ua89k?r7{QXvu(bcB#$vlV~R)6a)YgDOojjCh-t(M)Dc7L z>mDg3ti|r%>iP;n`s6lj6zu6^d1(%NyX=$HUDoNd(Xc96JK5o-xh@=D{fIh#gTZ>v z`%dI>c=V43VX&5X+sR;k_v-}n<}e~_{v00tI>FA&`%%rq+OQ9g-W9JKU0j|Bj2PkJ zTeYOVVz6vj5%-Sf#OsztX z6s=BN6Kb9o>{aHlogP5~SiaacEwP2hl&xvArE0BKrj~W~U@Hd0WJ?1N{pxQkI(*&# zQ0h1N)_k$M`@d#u!+s}qjT`So_nqh*A%E3)q<1 z7aZ`b1+y=A%J~YxCJqH_yUs1CFKp9w-r)hifnb+LP3sidSI9Xpc>6P9SKgFFT^O@Y zimd~_-C!O;cf(=kzZFvT?!2m*Gx&knw`x_|WQ6uLW%vK3)HGma;eTr1a?9E!0%=aa z0}bOr&f%<)I__c79L^hcc!?$my_ML9M^n=q#$Ao(VXu?H>#D;`{W|J?9aVDw9r|^G z$#VE}jKfP!b#GYRk)Vs#1h+8f+Mjo&eKjdq%#WmR$xV~iMdZ-=cwc(V!#mqPr91m@ zr*zi%1s)hP`RA$eYqTy!n?qJ8d{HprLc?JrbwaxWw){26EskWcS!e~1X}*R(OdeVy8@?N1k`n$=4#~{qkI{pY^xz!jH5r^Aq8GxNG!te5QU5H|S^mX>Z~G z|MdSO@c$qJ$ul?)Ly@rik7OY}j^lDt;J>^0g!;bT%|qQILj$viM+duySRB~eIeVys z)U~;Obj2E{^Ms9E-Dhp<9T^-NFf`b?ad2Qq_t0SH?Cy@uy&HS`JNrhvx;Jj`=o`dFHeQ^D~*u)J$ehX12E@ee(QOt3pvr>6@NgUzy3&&-2bsPsjhv zw2G=sCWJ2q@a;V6xuv;=#|oYrD|lwC;2;E<93wA`Re8yCn<{ED;gEOxxpk-ErocZ& z(%v6-r@aq(Y45kY;hA?e=tW4b#q&$M(=)x{w3keye>L7 zHU{PW(R5=@k8aO%7eZr7b$!D^Z^wmbF(D%?DOgLnQpjJ$hH=HgXNjLz9AQpkv#_Pi5!vuYsZ4+Tc|y zgWmh@W&J9z=t6I2bLJ>-RkQaUC+)3B=M2bikTR-B zn#w;d{FBUy=4%mm+(I~>sjN{Qm|9hxn}Y9;y5pu)vtrwV85nV+Sy@w@;M+l*;Q#QBv|t8^^)MXOgS&E{xz zbz3!RdfRkrV<^gLk>l$1H?Q{A)OnNIz1#ORuR7X$zgxF8(@N_llzm-c@_jtyrgOGP@A1 z%JiJfd*;_;z1z^R3IPc1IIV?RaIvC&@*LaoJ!JZWF^p2ES{&gdkrcVPjBhQl6zv~`~?kD z>+7qQU_C%GFnyaFSq<~JLCaWDvr#1zXLTsbaq=)Y-`umZ-a9sZQqH{mw&Rv=&7IQU zg-BIo!iS>A@Gp{jrgwH-^^{C&Va@{a@vytiJKsy!XQp}=oZIZZ8B%y5@Lw7)I=8tk zXMw%ZtV+$%c{#TB=^27dV#{H6J-->rolI}=Ms(J$j5buxsXqy!Tfn4>dS|H|k2dG5 zCV#}9)rrM()szrZU&7M#=WJru^zmZ)eQ(}>Nbd*ys@QnS}n=aut#v-hBX+}qZS zl{Uw@1H8o;wbe?bCPmHq##uSB{A$F#f6+{YYKGd!IrTGDRo+u>GlKK^^P0UU6nzo& zBSm+f*Q}>kU9{~iulwGd{r&~ly%zn%vag(OjxO+C!+Lb(o(oyt%0FsFQ|U5$?p{pq z2COs{nd*v)X%$$ml_NMm!p2)&bG#T~)I!U#gw<4#xERY3EXv+h(UlwOajK5oeri|q z{8erBRZ}zGjC7^9H(KZYZCARop{4=`tGqXn@(aB;cWv%@YxbFwjahR#gn-CrVg z*vBfXy`MT4)_bEj){lCBKfB%A8yWG2VkPzSy^Aq6{|b+I1+Uh7*)8?+w{P|C-qnmP zT0C1l-@7xqvVQ(nZ`(@mC%c-D@h*)vdu3QZ>%6)95F_s&J5?aVQBI{$^hB;|5%g_= z^8c5SbR*_ZP34qnlc!Z9EcIRj=SJMCs<;m9Orw`oIH#G~P}P8VPp#VEefjL>dL-BU zh2D#i=0#Ww{(&X?2hrwH?~Ii@rZ$W=)qB_PY4^V6T)3hE<6MD7tRP)cQJty4)JBBr zs~Rr$=HBSV+r6%4oE5Zte?Si>#Y()@`@A2*)-A|c`%LE6sLS0CR;KVtIe1;oOyq6` zTaS9GNKf{L>sqjmVXU!Vm~Aq8dXu-Pu5m*n7Ec|1PI)(q(+WOMuWvYGs@d=Bt9Z&; zlx}KLD$UXQc>>;#oDt;dm-jSJt*SqJzW2bnb>25ZYW+bZ)uMvuwoH8`caaC3x{P+x z`yA%_&qMo^nYw68JvNR;udtmbxTSSib)Hg3^!&vR(LyhI#xt?*rcsQ9TK&9iv-fRB zWwvaz-lk^n$#a`?*8RIZcYc-1d^ON+^h7m9VsTD4t{ZVWH)r{|W*!Cmq5RTcWy z(T5j!PDkf9_`QC`n(W#QtFvpDu3m@M;JvXXL2$AI{n_rFhz86JI~`j)dUZ6Eu})a- zM=(?+G}Y5JFa$e!FdzRyWhv+rMpKbcEf@W>INQlZ+l-TIybBVI1+;*4;hW(bs!cw}YQyfDZgZAhr)c z@OCe_{R<5B(jmO;HeKuOM<(EM!^i-?^&;DL%HmboQM4ls$cTl$BcZ0EqhwqC7y(u&pD(^^-o%QhNII&@hW+>Y1%&|cKLm7(t( z7~B=OshZN$A)6i9p54*ap^qZStc!X>-NU%<;PiLz$c_w*WcAFF;ef&8=nkv)4B*Fx zhS8R~aDWj*2szHaYfb2@ngv;SJ_@}peFMlvRe3uyG~2sN9)O)VrrzbLmmBH$UO-j2CTCiUrpJwqoWJi>L=N$t*4o8WVZ!<*U8&A z(7!dU{*2lgn(Y|wjcj(*cS{emGeiS8pzGqh zcZa)2oZ(&l{PBhE{;t+jm%ZCTQYdGc23=0JdwciL*6#k!T@F4?-QbM&YxyXb430o2 zzb5C*(eBZ1H4thwa?G&w4k}Z;Zj;3yIHWEo>2c(R9VVI|m9`bDSILNU-~-z*zf%Td zxVzJlnTNTgmch<}{{HUH5x6)!x)~YIbxIA~E+z~HyOV#q)Li6OoU&=X+Av?(=F+w6 zS{JpgSi5}b5;ICr)zW&_J*cz~&*kUyG zI*xUb4!{j@03PK|YfKi2m)PfUnWi=~E}cCcLwa7=1B2*df^qU}S7F2oncXtVSYqX1 zmraA{2$u5(XSlyByQ9ya<7fs`3G+FNUs}kj^@^(}E(IbCTmnbBaji~yq6VV}OH?;g zbw_6p#%lnrGiez*<85aj7GuALG}wf-M#(V|x_WWB5L3IW8(G{ruzfqGU>h&F8VgK% zY!yQtTh-dh#s4g2r*HG-Ap1^TdXijvbh2AJU`1^jAmri5_Kx9g*ig*Ggp0m)giOa# zX0PNtGpwz3?YeC1;#E#|bBFYSs~EQf*7nkK*2f+L%MZu87r$BQazrr>r zYq19O4~^{9es3QL&ein!5C>V+oi`ViRRZZXT`hVlF}emuxoDvaw2d}pOMvfNjF((` zvO9))u?nb(gL#ORTG?RsVtF+SWZ%FJ`&>uuV!p3xV|C8z=~HnzE8EkDjd0lM^FyU) zr&_4glEa$n>}K7mt*h6rIpx%K4t^C1JsIx73ZqVddONr4T!05^(WWa%&rVEc)jvDu zw_w4u-5c4VSI%Xt*QXaZHm21Z66x97aRSyi8}DYE1s>|gDcJVzVTuPw=O24a1Bh>x z;Axm4n=b_{OkK0pPMn^-H9h;3ru6JB{dhZOWT>}uWH!#LI)-~O5od4V!o+NzjqO2Y zHDom8mmS1=>qrkaEfv2ZBsSOYp^*`_RB%u+T$~KU$XK2YngPJ~NvjRtl(QY1xfC-d zYOdhj4-T?gw~!fI`v!34nRB|pHFQ@u)>w(7+G(*^_G3>|d!`xck?m?lz}Y6xSA!jX zv>$scHXF5ztC@{00&6H=RABWxOP}Ly@7T#xfNbBqxgF}vK<_buahw4SkM!V_sYj(8 z&w$b0U3dYqT`z=LE1qeRMux*sQc0;6MYAjEMTT!e=@e6^ z8VEnuvK}n-m~nn`<;t*P z^)j9!bqx&+st6+Dw9Bbys&^p$&cbP;+B~;*a{=h)V&(Ly^>V0pYtINXFWcRC7zgFBLmyAJd@$FVQuxwD0cEuELv(i(uo@MW2Bd-DtG~aWpNnUpQ_ zeU&pGwX9~b86mZ@{VMVGoKh$0%8HI#ws&~*5L)O|orhSbnRssJL~{@@VVgBxP?`f2_TKSEjA8_U!hb4%#0~I<3*x!{}S} z)!i*}rwCnj?pu;fEkXxw3@y3IMJG1Jqpgdc`vpuDsN-$wulnQGv?ga#_xk9Pk3~N2 zopfF7qj^hi2;Uf5jEXn89jLnOxnKPJ*=K(C)2C@*akO=LP}YWyv+Oyo$?_$t?UO$4 z!Nd*Wo7`R)STR8nyevJBIA?@-b!JL6pXS^BD2_z_fdJw6#@xO+9(! z-?liJhR=&`a!-PeaX7RN?y8VJ!}zwLv{a1{OQAP&4u&4dDZ;QF?~RL+DcU!Kf3g+t zO~wn{aDC6BWIOcMUr_=#t}Nb{x~k|y$*T*mNqo5A+W1HE$3`b|QfX))o_|sTnY=i9 z(z{Ih{N$-8pZM{Qe)#xfKcJ_uZ^w)C!7jI;Z2P)j``T)J&04!F+#Y0ab#+75zTJSEPR{GSIbdVaTNWaZv$r81Ww4$vgswo_> z=gOKz$>R`5^kD^5?6BSBo&(c4If%Me&c|mW4Ru|l!xB_y_MVDLGPz``J1xc;j9Wu% z^0>vQbYtjbR2Vx{Nc=CL{>or@WLWI@Im`9h#6GPsVOwN67qsP*T6|dwJ8%BcmjZCp zi+_xAl-0c_Mh9j53mz!oo*DfsXn2l6nPvZh{n0kVK@tATc%H~65xIFI!x5MKA^v8|SpD?C8aZGvg znDUe{<;pST%$RcZnDVqSQq)h#_;IB!U_SOljC&X*^m~#D?a^sltoH6BNP<~is`{6&!{sZ=p z^$P%$j~`P$aZGvsnDW?sXdQEWG0F!;#{S}4^@9i6TN;#9`^(0ZSBxpILit6Jt${t3 z{Rix|VOTKd_z3O8ag>7xj-QO@%A4$K6bpBKmG&9b8dG=Ir#h%v`{v4Q`JE^xTRhn5AMg;<+1A%^U;5x zKIgmtKzZ!^#d;MyaJ(ZZDStZ0l)J~2w~i_Ij420S*?2ki?`q#_x80=$xc0Xg4 zu|B(BvC0J~KVX#;C_g6U1nOgbcAvG5V|{iHN%?6UFGBfmQg*cexNkr|*gjkgX)%5% z1LabbCEuOFe`=xB`{XojQaUAP?=oh-|y^L}O<(K6+#|QHx^sn6d z9>zdDc0#`zSp^@|V>!y$54@RD-iY!Hl+Btqf-?34&tGG7e>{JVN!ia?DW5I&#DDJ+ z%Rbg~{z4lc;d@}e9_3H#vQvR_Bg*$kxdmmcMYy+5Kgvm45Iz-_4_=fxwVqTe>amB6|=$2a*JS^u&;ukGN_T>p@{ zU_k@H8`HsC`}z`xnCFEVVsL%LF9mhws+YR{QwNtv>hu){{RZFLUMI^r=wCg1ixd}& z^c#r!x{)}CD;~JWsFW2Mv0Q#qmnDqMzW8Ni=6bMSR+orONv`ahqJ1SzUD7cJ)J0oU zurK!Ox9@qSQC}6*mrRtq8cii$Vl%AX^)dx{>q1pg*9T#V_JS*yMw4&+k=5H(f%V+? z&8g69zvHH~m0@Eic=tmjV=poD9gN(!!ug}{qU^uDA?4gR_b^<%V+6yZ^n2xMooSju zm3KiHFu8;r9QAKgF(Ui&e(;_tkE)Wn`NJ2;yLf(?H*|Zc61Txc^Y<^sAY2X7csKe%wuA@=W0In0$mQ-65OdoT7I9p>#VS%7f5 zyj?JcQy;@vcDu|PUxqEf$jdEx1(rr5Ph0W^$LTimx%l2s!_AJf)o=^G^waPXobnkS zne^N^+g3Qk?5 zU3b65w*}1W2!5<)I*#vuixu0Qjx%EXIS(&)jn5Z?jn8|nc5!ax`+N;P!(!^Lahx57 zZ@`a}8NSbPb{U4xXB);jim#9T($~k{=<7dg={r_z;g=u(ge6Z|Ie@yL!KBN54mAROB<3D^j*>D@a-`MaziywEKOH8}Z2mZL>K!?{j z)=6DA9oXc#vhl}-P1Bb9bTF5BzH8bIT^#81*O-kye>ice;`0Uj>&bfwP584Ws2mJ~|$HY0@7K~%~K;UN>=b^@j@KZrsk+kDnD)u9oN5lz^f88c;p-!RjGy@xflfZoYt4A&PY>+mFR^qmE*DE*cn#9zfCKyfesM5Z zE8MbR{<`qljJx|rP?vdY<~U!Q81@ntqb(Cd@A1HnhrSqjI2`y8js@#a__|Xvw)+A<{eJaWjJ`CPx)qLdm6`j{_j%CLIS|ZE*Rgc)8ueJSFN_DnZ}osb_WHBW zwAE(qFKdE+ITu_0-w?FLvGDhl1CHa{dDz;&9u4f!H$Nued6V!5eRANJV%X!Sz!fh6 zV_X!!22KfMo#1;#N`4m@aaMc}xI%cZ)-h|f)8aTEGJQmQe&72npU=1Azu)2m7C&Ld z=V_~7@bfIOkKe-a&wrSQ{vKV6-?uj7*c_}m^v&cduR;1g!yjM&a>x0w@&7tY{;go2 za*(V3IoR`-%|n*_<)H6wO)xjznZerY!cVgYxedWuy8BHHtx48BZ@2Ux4*Kq4EX-W?4h3=WUJvGJ7-M1P zH9zfd?1$mM8H@0mz-AbJ8k^z4z-IV-%MSeUZQc`%R~T_K=g;A91?Pcb_-yud?MBcq)Az{bR$Ke5 zw(hdpdO4VbkyiqpDEu`2ik1cIRWu#sZFIzvUlW|?NB3Jgw*~VkdPgvKxJR2la*sBg zS02PR4{ha1j^(ulYhd2GpkH}iL0jC%&3clDJT$qTcb%nwSJ1CKjH8Kp-s6`1*hxwNWeb2uk$h~~{WAZQ`{+RgW zBUZlrWs6^ToU0{Pd@}utBc5h$iB|;vK*c!$`$*&tKv)>D;Xb0|kAf4HPD&X4<~~B5 zFnr-YqId}y_Ep`B!D-DNZPo~*-?VSm7Vb@^Uk>W~^3}LZCu@#_wQgA$_4pVJ^4|sj zm-LtSa+tdA!@*d%h>wwnP~FUZUQagdhBgNCDAW_o@sQOPe}>$zd!MEMcwnFB4~#;P^kFkIS88bv+%|P~Qu7F`m3;oi+M3TF1Q&@>x>%M_^o2W!=1=f?G7_zY50t zUz9VK`Cbt@iPtf_j!jNrZ25a@-;EMSO4cgPPsv z!PjXn#F#jr)STe8TUF zb}!Hzfsd~AG0_LURm%&|C+0kDa!+%Ap*e96_(iFUIJaZM5(oC|&fmN+MV29`L-;Y(QJTtuDobz4Q{;43t{n7`qVi4R`~!!G+0 zqW)Jjr{;nm&>XoK{FvtO_rcF*HtpwtcC$Y+djXa4Jes|8vlUTVIfhAVaVX(w1 zc|TZU#rJpfBvuLZBX6g+?_Lf5FX`96z#q~aLZ9+((j0vfe7okzFTr2a9D5)5JEF50 z{A11e@INNG>OBRXq2;M&u=v9~WPR1glfajV4&{$)_Pz_294mMg{6AXG^V8VhMdw`X z6A{gM3&AGGUIS0o@^}<1^Q92umES0J5eIz1qVmB*{^v^^iYUKKY$68v*NV>1!JiO0 z+m*Ro@B#3>T26cU5|jL2fq$gs;k&`V(VVy$EaM(SKEy*>&hx&wtT{2{a(up)N0CeM z<(m20F1}WC;T*8Uljqv;UM-J*3XDE5wlS<5@jW6(ALH{uCe=mCbqJiNeo-r)l=E-V{j8`7^);(yx5Xxq=m1 zCyxFWtk<0P5paiQUaupp4(4(p#+V%WJNVAf3C#WE1zH|O%#$C~?0gUWQO)jNFxpmjo&|! z1*n(&rRX51lE2p+T@U`7X71rd#iD;Rc#7yC=0&SC=idXyx=i~K#J{LhbTHOMlAj68 zwIa#M#6IvPS|@>c79n?)Z_j|SCX(aR!JiX5@T&-G9Oc||iXIe3o)$f(IgIftLVfBa z(61uInw-2C{3p!?9|FHA`aj2|#{$hR?D5xNsqftmuGSpc0GP7?oYwUIWqfL z(xEvYV_33XbGQ^NbDwKV$yHkJd>*%49VLvIlu8VpZQzAko_8r2{p9V7e3U{@we>g{ zYt9NImv&=chaBy;8TpXbkC#CX|JE7#Mbd5qq18Ukd}whX6cV{9m&Xlq2(#`yAoA53wGPiC%8+vx7&+$K7Q=IJ9l&r4uAvz|UDu8M8Feu?t~2s;w7jqt@=Jo(`(>Al zKgi{>>+llW=zl@Wqo0HP-r$-*8S;j4h};GF_i!!6=>JmWC6NCfw@?}Rt6J`@h5TQ5 z??&X~JS~sG_i>9gJJ*9(!?w}s!L7lDFVi|jtC#9 zjhA(U*S5!_KIMFUIlfl=97}lZezL9T zT<|2#d<`)H>oDbc`@zR*jv=HIRtdL(F@McGny^{q_dvc)7~?ZxkLLU|7(UTv{&KL4 zbw1YD37?R-g~5`C`Iui5Fs3Re7l5DF?3{qhiXq{FYj9hrY3mDO z|8dB_taX_46VVs88_oyAmeNN&Cdypkb%lw@QD6Rs=np&2B+OqWPlL+>-zFh9lpNze zsYbU|@D1=H&GBY1e4Q`8O={P2&do`kV*kTnv_an@<=~xKr-*eg68WdV$P>mP@>B5D zBL6n{I$p|7KPzDIKy<1iV%(tbD%{<)4r9OF6pdEC|uIUkcT2b4cGxZI9$RC4%I zf%=Rm9~F~v$=&cVqL2Aqfpt*TMLt(xy;3^xy<(%T>qfvB$7)meT+zP(a;#CRF6ME? zheU_%qAzThuiYy?hfBw%?zct%E0F(K`0wDSwLZ_=D}JrzG0ew`LsGW^&+tRpxdG2d z3*U$5b;1Yn{9bLR;QQciT#lA@r(i9jpRrcRFV;GIO*94P4@!Oo_!=$e>!T?*iTq}; z^d*Kon({@F-v!2h_L1j)Q?Pa^JLuDtZ)thnL@>%K4x7Ng(#-SKDOgXG{;Od8S9Z|m z6s%K}^ZLissQ8bVOvM~j@^WycC2tZ&pQfU3s=tWO)b*l24}7{M-!6hj~Grx z9xD5Y<U50N`DZH@)r2X$JEC~{w(;H!TG~f^ik=*hV?`G;-!yk@`u@`%3hYafrVke2>Oy-dcWxOf$tLe&%juh z>3_i=zz>KH;*tKd@F9GZ0DA*<5(#jLa2h;8>$qX?Nus|Td|EKpnNE?TUzw3$>@w$z z9DZf45k`(=J{g?HX1*kH zzg5?YoOaOXO=v4h`&jEHns&df?H3}RRoI896G4tuJuUjHz`qt9?4MN_8|oC?2L6-C zZv~_8$|jzxV-}AS9ju?#(}HuA>e<>(5@T9@9L`t7pK9cmV%Wg<3hSJQtQzxy?H2tW zjQ$>D^!I8xugzCqt=mdw!M6y10DQaXw}B6c9CNT5eOGpnBh^03ECv>17|-n5G` zRd&jt^O0bDYi`v3#IP^ad=js7j6UW*{S2Q8Is7X%a?CHvdA(wqr`fp*T%tLS_)MFK z*UzFq4eK)Xd98BVQq4sjVCWSa9oV7{uXRj=|K!jpcn_{|7@ZrmoO{YN(c5I0gB7;pJfD6Mc@J4}Kr!xzR^`&iA4dAiqW!{hR&?;pf1g)^)k| zPDg*KpDG1EAUqxXkk$#KuhV}da_ooG5mVLHZD82qd)y9kZTkO+4(v^TJ>VHQuI!`U zjA)=g194Y!*5>0otcY8{v!BP%_Z0$ zW@61(`Sx{ihsf7~w`e)n&zXZFhwn3YX&>CD!5i7YXTj*Z8W+lcuI2b)NJ=m>-2PU>wR?!Nnp+{EnKg zIgGv>h1^m)MAzU7m9L}x1)sqw?Wiu{js=9|*Ip zUkN`9en}W{J4(ip@2MV*JZ4*bU+m}^!u!A{3cmtgqB(|`9KAuf4J>}fUIw2f^4GxP zXMPzNbI0`YXc>$AHy}s+Dd#;wM`O;AqvwNvCu4CCjNDUkI~)A3Kt8KTMU~`tlKd%P7NaSn4Sl5(JJNQz~vEATnH1j^7S+@yq0^cW$n9O=y81bA1KWWD~ z1pcSy5V*Ebvj@LwtAuO8vouE#w^|ch_)v?oIlrw%nKmQH)!N=*ZLBpu?}S|PA@2t8 zl`=;@3H~TP`bdB9sJ&C-^HuQu!oLT@f5vlM68xmD%WJK*&xw2h{JfTX4PeZ9rH{VX z;ygjE`51><^jFEhgpbpQv^;bHI3aSxVfIAL}$2W@Yi6(m+^F80mH6}?RDVKNFFW+KOl7<1wUlTCC=rP|5S7^ z|7Ih$%I0g}ziRnJq-qQ#VcccJNVRe-rpPsf(PdYZXS!>Q)M)FLkF_ z`p7HxaU$}iu0!|>;2v$?fnRmI#fNh6$AsI!&{O^(2kO2rjF{BDtl3N9xj?uU&y~VY z;CYVlK|Eu8X(yb(^Sgx^|JKMj1J*l7VjC1d(I@Ea+Ms1{f4>17~2Ne@^v~a z9oV8g{4{hB!#pq_4cCZ2wE1!2o57zFz90M*ypA>c-wn_%|ZH4N|ueW1;lnLnHd77_n@`98@|L;ElMq(C80{4)&8q)KPNk zTrP6VqejdZUw*4F+x@a|GZ^t=TNPpOqm~@&jH=rPIo1}%XulEuEBz|Syg=SGUbqj> z(;a87_}O&4=(j+QHATtG!Rzq3Kcj=ZQZ_pv9~8zK(6meVJ}}DEnKA)(io3vASC#!G;BN`DUCFV?wcwxWd{F#L%?@(7={FX?tU0e5a*V0UEAn48yBMpc ze*`=Sive}KWAO3ysKtev`9AraVvFIEvWfL=4#v-Cv_TGC0r?Dz>okWOA#bu6aaQ_R z^XAOA82zW5@AuAGZZXyz$`kN?&RUDjT75O-Sl_ARk&(OPyr-!J4d=Ck4$!@hc8EmeFzO0^a@Xy%&0?*gEX;uD3hgnW_3CkgL^ ze2vA(JyrK{$j`7iEBrL%=%dmhZ`T~^0i%zUE8eNuLyVn07GETM5OS=I)c433OLF)g z@P{qNJXi8ZA>VKDt(qg7Ajg_W9mQW1hA+-nEyh})blBhfE&jGJ=8=OolnxpFS9}os z6N{e_J_Px1EdHHlzPIJPV)1Lj4Ui+BXfsBBQ*(Yf#tCzQa>a4sG~{I#Lr>{!guK#X z%mpRi1o_bxV=gH9ZIC19$sxqdZ54hTyj=KcaGPe1my4XIKKD5HG~u~m+mIr1wcY=zDbz=e9Gd_3U@(%r^R0t9)bKD7T+&Se;&v6efofh_k?g6 z7;CALlb;i2JTYEMPR4jCMqIr=S^QUF#E0+QDxEaAPCjG- zFxm>w6K)1$9w{9%=8@tSFviPg#7prK$cKe#XNNHBo^LV6$k)ey$M-88`icEc@lNo~ z7JpJ0@eAK>@g2g?LXJ72>XN^%nR_wsU8h{}cZA^!Kew*r#?{CSH} zR&`&2{C_liGr<@m%ERbR7<0t1BPAze4OEOi zM(Qn|qnV#Wikx8a0^uy=7)RC(Z31H)759MGSiDXc^DBb&Q0b6SU-3=gEyCXdzfTx( zi=1iks4(IbIoIL~G&5F_y%t}tnQ@C;EzDSbM40ixd{jQb-w5WT@Bf#C?}7X)!v78a zwq|!O_z_|D7waDDIv0awj2yHdg-pqx2g?|7-;QEVQLY&0=ZbHDT*fPOK3K*p^eDJS z>nKJ)sULa;a`b`BzH^^e+yXw);)TLXAYX2An=oY2wHBWyOh09eJTlfyW&a>p#>gXM z&7?f+fX}k{Y+=MadZ94-7k$4l`ow!CSeFmJccqwZ-E8qEHFK^-Z`Z8)dxvJ#uFO-O zUqxk}h7p_SceRfDEwIc@_j}+cMgAyQ<|g;J=pm860e)FC_q(Xf!4UobtH{$}GY8R^ zypWc&UEY(yzHl7##t9?OdChSe`|UYaV_MFEIvsX6l4D8VT=@)fw8YCM!w`-fcL=Y4<7uyhT>)5%Prm~yd3gR2-D7|EFH{| zDaOv%gpt2_2Q0=IC>_K+4`bl-W5Nd^$5<#i8SA9t*TBzPj4`5|&E;XPDILZfW1;wC zI6uZ*^BL=*;wKP5uLENq zsdg#9OXOYPdxYuR0gEwSzW$Fzz6m-%v2+kS)h_G)+R}ejtV9X80 z4}!D8=xctb@Z(_2kqV3vANg3*6vM}S>^nYRApA7sdo8|P_%+C{wfK6?ZVYma3+*Vz zxG1iH{BF@_yI&Wc34Xxh?+8B&`S&gUp)lKh#$t?-vY&wb1&d!4X1i~QKH81rzv^Qx zIM3n&;pZVQv3R^N+Ks0zhF#Te8RWApt{28}-ut53V!IeG#n_AZUbW9_gbzZFd8FiI z%p=8Yx7*@g&AiViK4|fXFx!2<=(F9+gxT&@7GrOseV6*5w)8(|>D+1YS1tXAMZOMo z9~Hg{jCrJdCSx8cJ_P=S#lI5%6Xd@WW*>jAS@~neYm>UfrR}^7E|U9O(6540;TG^D zi>C_1H-45%-RDC-N*MElpQ}>xKJYQZmw=lshFzs|JLJnOUL|}FFa3ce}4AB;Jubl69nV<@JdKNDu$Fs4er7yJiH{;DwJ`8SLI8R+xAC}T5$ zJSMwgTt9`cz8ra}| zvDxA+!aE_yf8YLY;TYr>S&V)v9qNBn?pdNg9~Vx8Z?*U~VaWLTWOYvz`OCt0fxlt# z{lfP_jvO-gP$ixaUIIDRLnS9;JyeXmO}rpXn^+H(9AldJqs4y~hJD^gHBsWp&$ubx z2s!4R&zN_LH$gtd;*9XKkk7QZR`?*~^DI6=Ge1vXi1G5<#ds+$gM6LE?ZS92%nH*c z_BEw{2>d>a`!(~k`-K=A>L}hVjBzN$I4U_A=+-xX1aI*REh z#?fbtqv8t4F~7P^JTbp~`2)i2%Ok>F;O`5wUr%UOK0hr?KQX?(&0mY0KL1vjequiQ zI)4{=3i5vm&%}EVk>LIJWWFUY6mEeI`bM8!a=9>kPF4n=qe)g<@)^Q|(5bVyNq8^h z#|OS8=UehtVe~P%+~PK2^eeg6s*4;rMq-=n6z+o#azM$+$N|NOXL6^-$N|cEevxF3tIpEubufCnTMGk+HUl(RwjJ0nE>#E`r$T6nljQ^N3iW87y zOnt_fDuymUx9IEtQyAk@gmF}IGRD#97nKXwLXKQi@&+*WM4yimo(nnVBkzymqX_G& z;=900EncBHbUx&3EM6yk59C-^SvN$+7?F8Ru?Xv`&ln@c*FZjE@lIjHqiB!C7YQGP z{4$HL5Plx=>ny%O_+`jHr z_Mg+td(4V3cFNAN;1?~%d{pvHkYl}7Ogk7;#fQ{O=77T@hkf2}N1YIPg2-VfHC;2` zi%T6XI_Osl=Qc_o{Yo7p%(~5*J@hNpB8-0V^Pa{Zer8fJ^-tHV?7vsD`#R*^7WWFj z0r{C0k7{O~q;?C_AC#4SjCtx3VfuqPsN_$8KV&iHppw(in}iX!)GfmF^G?mqU0^e& z4j6kV>xSCFGN#I(hovsteN>qCv4>J$*^x1I>HiCs9T`()N5+olt0~M!*5!B3@!mvb z2e$dySjDi<`vui~Q)r^NT6i%SW2fX~teJ{8fiZSIW6e|ye~O{!Gscb_y#eyo7N4p) zZzJURPaVauOODTkd_XhYaf-1{DVw$6vn@VP7%?pVFN-e~raxC({1MG=3*jVz z&>Y(Yd8_dG;H8=wlah6sl|P8J?*ryvyYEx=C#KXoZC<*#J)T$ybpX( z_#QCEi8_4$wB#ktku>;K;U4f`gzo@j-cdjDEq$LjnXxL3X?Y&{QJN4w0LEHMoxDfE z6ExH3(y7AdgR3<2ngKt5P5n6RmChE%c<~-t%3}w?EyD1(^c2k@^s98OF#1)BJ(2qC zS7}x=`&GJC82u{UCX9ZS%6wG)GGoeq?a?}_Ul$4A4*3TxzEb!A~DnqdQO=AlJQmjLcFM> z#_La-Rloi!O#j~$hW}-rX5NciR$y_F@Dj+!3!`6UlQi=_fig3ubHUR^{u)^3Y(BY3 z+NBeYB$( zd!OPoR8BQbleCFVlaQn|U~2;{+5&13RL}ygqNgY-C<|SfvU+&H)t_747~1F~?kM?le3+_kQ=D`+d$YJL{igjydL-V~#o3W3N5tIK>U1 z+cAO-j;lBH_+H>S275<<=NZg*k&avJ;BysIhm{UqrT9hA8y(ziFzs{PTNJ}4$8{>c z9(a?3uTXp#^Z^I&Q2blauXFIb4d&W)-1{8-0mU;w-{;_u7#zPBbbM$-KC?Ow_7z+S z{3Qo}MKSyPO@kSq@3?O(rv7$(iFJGf>W`0%7cp!qnEL<5!Ot5k`s18Po)~rhtKvSq zFAkc}i4z9L^S~L!HvwlA?*$&|V5~c=%XbGDuOP%aXX#gbPn~q8k!L7=6xjLz>@)Ig zL-$_xFtDz%eD{9j9}S)UKk{Y8utSw+a13o#r3{Xvt*R2mXp8Uq z%eat#v|{L0b&|nstLjw6XsfEh;MgMIX^PRWs#%KJ)>#HiTRNt3wzWj*=of!W5Vou9 zE$vyg&d`0dQ>Am6eXP37(1ZQJb}myl9pB(3-~q!E%K`6l@H-XPf^Nr@*v?pb;|b)NdP1NtL! zh;>Z;$MJki*JRF-<0}kL-~m@TxLR=r^ofe0&++w&4+87B1f=V@1c!ljT!gOU5zN6;r;Bg~-26=?6joq{FXsEg)U(FIep# zz=p?vP5FtxshB#z=Jt0J$NyAu4)k9-_}7ZZgZ`p}Us4ReKK^Kg8KXmF<`J`Egklf) zc!vjV2oLHqUPs7}_0Z~b0@lNjXRd=6I{cS7{QstSHe{}KFy>AuzaRH57%vZPo`A6s z3_oXl55cQ}u?7n60DhNZ)H?xdpwLn8gnf$Rz?c_8uLj1rgc#!@7-M?E!-}T?e^v1+ zV9W*Kfxn#axZ*xwjD^sNpHWO5UU2Y>ig$qiHwR-Zr0#BfFEK3oJ;DV%UFFyF*9c>~BvP zdqnUk@L*g*jBybRJCC}>;lEXJ73g<3c)!E{1^h08PgcAE zc(P*nWc3uquvv9pf5U=)RWDGCYmjQRA-`=QK2I_1Q{AM$Jt05FLVlA19jhTX#NCP^ zulj0-|Luw?6Xy=$C%!>3`d_>OEKmDz`;LK zOgkTT@Datd`EMNjyy86Qe{%3&6+=(Hza#x3PAG<+{GE@`q34P4OWXGoFTD%JPP8P4hx!GdqEZ^CoSzaT`_ou}D z7z4{Qfc{&&Gx}Ydw_D%WCI8J(+w$zyXTqfKkG@~_?$-CsNWWj-VIzJ>-=iab#JodJ z=pEAahxiF|P9*dWM{A4sTy%c%UeI|*o|mF|N42J_Zu~xs->oz8{Sp~p;wpW2h&X4S zO8|QOz1EqQzaff6z%sEXe8-C`o&gN`LWghjJ5<4WV6-K88E~cI6~Jg$=qrJ%6|VwD zyYgIpKQR1N@Lj;rLGZo6Xq(s{07l!y{4Rj+KnNy%k=pHMV6@F^A&+vllAyCEw}a4SIjHrukbG9{_zITHpK~2GdUd&Sf8M;*I{2i4I!6QFFS+94QkFnutnHFFTn zdch=v`TRdwKGewYT{iL`k@{QuLkv|l}p7z{b{H18zi_u>@)+HE6uD493W1=xFn;(rM&%aH| z!}G5lN8WRWbohi_KY5-F>F@`;e)7B-(pN=e>kRN8iJ1wmyg6ANc^!k0Jlg$RBuq z4CyyVzQOZgNZ%j%3D0*S{r<>jc%BOBPelI1^HfNGF7hSsMTh=UCjh2J|DZ^p`-8C|6`9hbhKsH z&)5?V{i$eP#NpFc&p0x6{fuWFdSx_U;~%e@9ZiL$*m}OVwX3_YuD!RXsjk5rf<^X;FRW$d6*R=%-V51e&-X%- z?EGFxlKtNcNliWLhtdRFhMRrbhtQH6!Vf`~z2S$T>o)O2lyF=4A;{4#@5dH~8@?Y~ z6z=^#bdhW%e{7L%0)K1)ws@Bv--j&WZtp{>ZnlMQ?CI+os?=@?f2>Hf)!Ke}>kyTq zz2A?mWw(Jpwj|mSeuy%&Is6a>cAxkpc>|*^>U)hRp8tL$%|U6f|S^sy|j(Be$*RM6cV}x^ZnI{xx#08;@@6 zYwo5!unHW*@ft-OR8x!M+B=blK?|+2wyAkT*Sd9Bg(#hTAaug7!u-09CW;C3?cHrH zP&drebd6@MDx?jr*xPzpfnaLi)Z7P$)c%FlSt531fzuS}eeD}t-R6b1QA{+LbMp{# z3w1~3j@C}p6HmdcuRCq#RIHgM-`xfOJZBEme#eK z)}yQIU~q$*)~@YoyNTd0q_#;+CB9Qoo_-yCxW+i9UDmUS z7XwU7@NxCSIiJ^oVX}M+K_SkYk^_5j#QEFXgiit=mNCB(A6MQB$S=dkCM&NE1Xtc& z$nU_1@={txc?0-3^7srv`j3MoEAPF?xqJ(dAF99qK8TOH4aJA=6AI+vI%G(`#|H7O zMxJ`xWc51?f~z0mv;Jg%R@Waa%H6ym%od7uGD>PY*Q&m+xc`Fa!i-z)O2S>l;VdN|EvB}E24g^;oZ89Do>c=&O zW$f?AadhRqh&+AECM)lwAh_}lBX8y5zB`onHDE`cJcHZ*0;l4SP z_cLHu9(yHu9V!HmSV8&Z)d9_|pA2LLZT5eI5Cr4m78~j6v+J#>XZr?^F<6{SG2; z<#CN?8Rad*(Uo@?`96GXvhvOW!IgIidD~yx7Uiu6-I2%NkMTKPn5?|Dpt$m$!?;;_ z6Sa);t^#)C9rrTwL-lt{p}emk8}@gymQfzQ>viSvy(d0543pLGW>6gczJj`ZrZ3}B zuVs{n=UT43>MZir_}FCSeHsK;-o40ECjAB9$4VLHeIMBAZ}lYP^Z3|g<$W6jSKdR& zTY0Bx8Rh*J*p=6T{9b%)vhtn8RabkcI1toglrBpo2ICI79w zcMp>H1oB!|z<2u)d>kK}6vsaWLK+`ymsgVarPs;Fb#k!0q1t_J2)?2E@zU$#OALFR ze7uf*9r`8a48b>qeuAh^GoJiBaSRXKJh&qU3qrAL6&6YJ%*es?*-(oye2K9 zyx#!3^2j%oe!tW@c^r`*eHs6(yk=n4FUce2X{v{xokrW+q-BYtAUOIxhBhZG0*&iS ztCm52lIx2jueldG{}?ozv@AIe1c$F3>&S`MSf;2fIU3k$_s>|XrqYINw@u5~F0UyZ zd2ff^{XA$k*>-t-8p-n~%mCjbpiv%ulVz00HQ1526Z0xye{Hhz=7HeIn}lqVJe1dg zkCk^Rup{qU#EN&O_|0`md#iVZI`Vi}muu-ByR=)2e!{ojuM!`4->b2aRogPq62&b73&+n4-@yhZFI>x->lrwsIE z#?qtzcofI+I3BE-oy=3`ZM$9)ovAPFLz_@%_91_(m)`cPzx8kX)l26?=VIs|*nY4N z`F%$lw*BM}{Tz>3?0en|X04GInx@@24)bHH=Y8fGBWGqF?fn{Z<|E)#%!_Z?I;#IO z^AX^tnR5Q|ob{#p+mrc8nDz9?iw7d&Ae#`^G`9UAg?STfLn6(hFOQ zax36B>5J0wIq;p#mfObl!@nxGY#Y_T4{dJSu_8bB0U6s`%$fAoQ|DD~`{oNP?g75! z>G+)OM?G&}Blxa;AwPG|(Zk@$a6V!#<%D*dS2b|E7vJ{G-{5n(6vmv`xOQCsmiAHon2&v|kGdUupTP$9 zuuu0dkNzEgo16F!&j&q&V?6($S3CD6ZzcS}7r%JM%WjS5S8UrkBTpLUz_c5Ry!gH% z*kMV0&fZ;KF@0xi@x02dOU72-1NuFSy<+QAJo2-(IKKjReFVB(L4LGbebuR0&ze1d zWph&2CHVgfmY?HuE_A~m}-OjIbW2DI4o(KXg1YxQ%Vwb9t3tyLH^s{;S4? zvR>Q`o9-L0I^sw<{7{DV8~On5hYkPWGU`EF!QN|zu-BUZuDu5LnX(7d)Sd^e z9cTmE!s+V@*dR^+=hi|BfA!EBLN2Qq~)gBV$j*iQ;lD z=EX%p3gRi|gLs06SUk~=@2mm_zyy&o%W+^hd~@9*QO>=K1M?8al=68`TM$SML*Wyf zD}z7;8w##Zy;=j$1AM=>YAEYLIXy^6>@mXIq)?tT87LaoOEU?-6&y9mc=Dq-zAQD9 z`vJde;GLw(h5g0wt4tC9#n4A7Elwvt48pV$FnP(3;9ouWc>w+x{{19w%*8Fn{o$fR zl6SXX%fuPI%fCSTUPdg%spC-m{&M`o?*;2YJ|NOkc_bP8A1F>Zwnjc`F68>N!@kfc5?61~n=%`Kq1kt+*$iN)c8Kz48-6@2Nsi4M{5bH` z`Ps$})cqmrE->^TlYg1PPXgb)!r-UT@Ag#&{~UUrwc6k#z|+_W<|W6^TCTRN(FGh#JwY#O9kR|^4%CRxa~{siff5v(rzZBnFXj> z&zMXUun>3Z8!9!kh$Ri0S&Wi_X_{Hek{O!8vXj1Hwq{m9*#mjaz$v}@1)8~lC5tq3 zA?mz;nPx5~+X~HG!rrdb%#~nUys8T2(Cuxo^pE^Sn%jol2mNK5!$~c@KX^)WJJIvy z!C}qqLfO5+3!1wY@|VQ(#*|Ad*)$CJM1i>_tLFCKNTVmdKu-8xGAQ8mz8DQm;)qI1 zR!2P2PBM)t4B?+dtOM(xjPiON zSpO81>`I$vmQ&T_JP}Zq^0Cw;52}DXu@!)|CV4QaCGZUI%8Y0Pb0;5H4No|f;>H-M zALvkE0r6_AYhelTms!`s8j|{fb*(ih`QCV~gB8WAw?n=bnLF($H>0I@uTr)a)S1?% znO0`HHM5SHe$A{$JHHsvOdB$P+^Ly%wzF3=Z(*G~G_!%3yEN0mjGZbQnK_^(oy@4I zf-XvXR8~^>Z0Z+ckmJMrA0?l%`E)|^Bk{A)RL}=kJ5^tKNdlsYFe z52M1zH9rb6-iZ8$Y81fbyE!0=uK+y}w)$47QRSUTMh<)Wt)ubp2Jt*Ycst4d0h0Ge zUYh=-aNmlilNkE+K@k*qa6Pmb^RcM3D-M9Wa-^p*UKnsf?$+ZiH82PGCIiOR*-v zlUEGyEP8~NDOxLSrAvx|kBZC^{4c8YvYneYdL_8FE2<5$c%jWJDJ6?J#}$nhbu&vr zQV30o%;i`H<|~?G7&ZVdHn11)Gy~sC-r`}UaM9ue(r76hw0O4ZU@2U(cy?guml2y& zb}1wj&rTZpCSr5)EQRkC&n`A}_)YO_V}w#PQ#_mdm&0ea5@+!%r_uqSKN{jyBx<8q z6KkW}iM7!k#7T@JgN>HF#Z=tsRNUoM#Bv)}yiO__{&y0mvwV-W^xed&?QUY#_6B0r z_D15Yyf%YPIya!<4`kcBz0z%2~S0mmvoep>Ig1@}JLln2O~jHi3CuK(C+ZUl?Fy`O8K!U^+=MB0q3So1qyYllyGW zUs;C%n5N92V!oAbs|Rf{X#{x!t}Oi0zXI(|1(8!-lJA$2smFCklEYImu<>goG&l{xtdHzRQKyhW$C=Mjkn;D&&@mJ1tRLlB*ax^=Gwf&!C zy)9ck3&!|4YtMom1k8rKBO=f6JxRWvS)e{CRMW5TSS2BgUfZGbQ zw_EYF{a#yhj>z;XF#hFlQU^NA(8||)M*XW$Q#=hCRY~iQvUQNP)6KZI_P1Lu%HLtj zR93}V7A#SBtysd=u18a*5zGZ64NHRzarQ1_78Ed+I3BT!ZILydj7tB?Qe(7QTWYeH zD#bF%rbAyetolO1DAVI)tTisegN9D%XXdTEx_~As*0|;GippK`hqPOf5%W~f&*2}F zcun@VwhGqO>=TisxrV7?LqziCIUX(MuSm@YsSUg5vB=Kc7LH8CG&+2qQpmH|U%3DW zTvQ<~l>hiw&OIPZD(5yGCY3O|vC9$%LMppRQkr=A+UP;Lu z5OA5L5bI$4IBacpM#-#_#lvx-t(gQf$&r3Z2}`(qrAi&PwC^t-PHIt&w|F>r$Sof3 z@Z!vGMb1DOcA@1p0s@SeNF!w@qY`>H+>ez-4P;R%ZS-KJ3Moz4<`Ka&6q&&Lmm|DW zj`zIE5&kL18%;(eMCfs0wFLDWsnyUQ3axUokaB#efiRz-eUQv3?Yv~Fqk8y~b2wC) zjn+rAb+$5Qno$m|oOL`)a!NpV4WR~h)z0BpT5;HF@o?Lv-vXg1xQqhb8k>@1G}4pOP?w(R6?zu0>6@quEm<#aKFF*VR6}VhU8Acrt3YBOW(&(|?Z9~!nhuw;Bv~wEx zZ&E{{k*zUCD;;H`f{=HWMPASwkMI>kV}EFNThCFv&^tngNP|MvhG6jVh(ePCLsFzk zNOES@u~Wp+&2dK8&E(=3_E%Z0nUq-LZ3_JN)wnVOzL#)a2uNf~Lefy{V@}6CwFdZ;YGwhpYsZ zE{f{>pW?A96*x(Ur6Od5)8x=(m&Mj|20Qs~?@F)QkrKH?$Q=#7Gu)1=y3~Jy_toXc z`nw~ohGLDz%W40$YQ3V94%LD)C8BQerwakOqcsm1+{rL86b(~=>v%~A^>~vWmCsW? zhDnfQ`FCo5$DpHT|0f^fOK2DW$8rB}c!=a9L0f$M`DfI3wBr|!eLY>1dpC8r_AuME zzIk#_6H&|B`b~>hc+F?5ZfU)ILwjF$PnSjA&8xe+Hn;Y4H&1SDTHC(5y|cMvQ%mdW zjZMvM{H5bRQ>XWe-dEy>606rY4{Gc5y3^_!Y>Tf{b13b+SL^TkX1r!+-*Cg*7@pVI z(z>o`Q%7H8-xb}hy>)FgqKolM&<&u*Jg>K}1-!stdU8u_B<$b7LW~po@Eaf8-mcL;F+MgW@HZvc(hUNw;Pv z>)%AxY#-}`q|=%Ee1F8maVQJW|EXhYrU_eJvcBfzSYHkX8hz5Z`mraX!LhL}7-x16 zIJLjy`^U{0GkI=-GEd^6Vto*I*nW;ij9mHOfd8>K^4}$A)sLB3An|!Vk>qI9;Xi)x zMYwEEtUZS}D54?#3)-z-PL764YwGJ8>Iw1MD*un+|C$2!YXd*_Z@#f#!yDOXtha74 zY`UbN?cIUDyr%w*^%$mcuOP9prMIiGt*Nu6qcxl^jU7!_;8);{z3o>zME>CXRcBnd z!qhwS&cep#rarF`KcsG%Hp9DU@ruS3^Da8O@q&eCN3FKCHnp(XR{R8geQRg)6<#BL zso&W*qp{EHSc`{TjF{2bh~=dZzu`yBi_0;k8O4Kb^!8Ey=4M1~*tk}5t<3gHzE=s& zZ5t?~qpNd$PX2A`>}_A)+1irhTQK+%eVud}U;UuTM*MQT@APScurxGvv;uN&Q-p1@ zm&F^`qLt0f+DIqEi!`c!o10yI5Q+dn9h#&5uQ>0#WgeQDaysNhYEc_ithuepw8l4e z8S6}L1YXQ z8-z;~dWujOeO-Nxe3aPO+|{+AoicjYcWi1kdWnHd%z?)C-p1zsCSCSqjSHhHba!=i z$dc9zMLIT!IVJi72U7HF>Dq*`L?f5?u@{X9kI>sHM&wvw#MF$|am2h(%Z}-~PU%CN zbqJiw+M8P!&<`5db)s4E88d>kq1V#W)$OTAb4ZPquw;un&1+vTU0dI@abpuaetjp9 zhwlMtO4z7{|9g4X*dRuY%x=tA;6YYrR6)<+er;>TN{CM)9j0}M@Vj;GoP45kDB-eA ztuX!ip03T2w_I@Exl!{it%jwsv%PC=FWd!lwYLp16>_1O9yKXmqUJE&Gg2ig%VwC7Hse{;kd1*F#c8HSQiQwF#4iyy zy`mK^E^bJV!AVvEvuxtDM*xNO947XTQ_omWT_{>b=BiyH=j(2|qN9t0$Jw~fV{is6 zJlPd4%xhj@G75yt~v0AM9>z zZeQ2l+M=bXjW`^Q8=Lw!w_ujar4%MdYbyo`E6ye^z>SwTals*VgD2;k#`cZfn|ct! z1R*vcy^BlRy6!G6yWv!^D;d;X-`9rohZslfg?J=#7DMCEpGMlq^;4DzGsU?gn8jiv zCb{t!&RMKQ8*m=PINAkjU8h{wd5ujiRQaN1IE#3V>s$M94r*ni9tOuOpzAxj5P8Yf zJ#@O27tCFL;fnJvSSdavEr(^x7B64w!KnNy8W!Bt3*+&Oi4z%3M)fz#7|XI8_8&$^ zpE`9=8aqy()?}tLrgr1HP3XC<+wj)r4RnG|aS_u3eNk=G-rK^KWi-Qe;GE?b<>pVB zl9Q|S+~kcI>5j=b2VV}{(~7lYV{0$T-J8yQ!}JCq-ap_V;abkr3{GM#lV!5xCa=#; zK5uGn^14pkqxAK(H}_3$>S%B3ZO1uz@;a*9*WT4R8K+4eA$lFp@nPP(ysd+_ZtTHz z1RUEr@iul(@0FS5wRX15z2KaSy}qXQj>h#}nDl1sX*}8 zr_9{cnUklSYPu;mf0?65K3=zvPT&pX5!w_-&rD$xM>T^G%t5nmIvkdixM(%C%> zz48$bp@kgg(m@JB*n`W04xDyE&2V|(6xvKEL+=#Byqp2U9524Z3~xKbjJaYCv-T1? zBM_!l@lEAXYWt-BxJI9vRjgWDYb z4!E@Cc@*xh*q;{3_h&>rjJIs{Wc*TFm+^$hTRA)Nt+d5^9r_{%L+6k`4mYw+20X%I z%$*Y~h98dsPS?O(@IPX{B*nEz9Tx?@{cz>u{`J#4VHJ`W*Y2Y2Rh0qC;lnm zbCiAy@G^tFTY=wbaAGg;n+*>B6Bu)tbrT1GyA4jh2)xzc*kiy~EBz?&I}HxL3;Y4) zxeOT3#wo|=I(L`Bj9Kg5V{l>uFxntb^3%XyS9%NZ_Y976{rRP0^pEqG{IN?R7xS4o z{!w6zm&n-xT&wtc;OPb@jsWKkPW=Y>BIWrJaHG=S0Q?q%1N6(kTelIu&5aB|ZHtuG8J#W6dT` zeGK?CgA-o^K1=JSfR`EU!%lqjnEc!eAZRrhR`UXkhseR2&zJCp2l9eF1}92^?^GV> z5`5O+9a z8tj( z8Tg>V-g|&yFOhRG@Y9MH0IU9qF~Bb=9pjux7#yDhJj`I)n0%Cz{uVIoOU(Gb3CtPd zSUd391~VRW;zH&5B=8!=@PS09@*f7?VsPq7;A;)0ZzgUw*#8;uN0t6CY%$;9#7}^A ztWy|^}*qw9_^NBx)68seKBL*ivgRxX!jsFxFbAUW7 zPpdx3&A^RH|0}SLmp>l(tA?Ju9aw!VwGtR(Lpcf9D*c?|(}DkBFyFaM|HI&*4X@6@ z?!pf{bN^b=0evmHMCo&YVHeW5#uPOh?4!J>OL;KPMQ=4Y{!3uBPZGXbbfclC17PS% zIq5^dA6NVX;0F!no*_lwF*v>x7=B59#^)}^U=qh~0j@CEhx}r-TkJSso#Q_GQ4AlF zy1RhSRQ@*rW6qEs{2X|-V)UsPwjiCaaToU)oW2KmKzZOl#n&6`{W~!1CHmY3e23Ei z6BvCEIncjY$4J`JF$&n09V52&E5q;C1OLNd^7EGsq9^!E&^N1F$ykFuv{h24^c#TH zpX2WVzQE9vvw?N&QsmiS=yCXe$<z|Ol-dpqKGNgA z2gVo>^IE+GdK3FtM@ybl9{7IAe;Lemz2rsZC(qv$*PyzNZ-DX53^Q~e{m6_qIQ~Q6 z2?q1$4w-odr+xw4qjbgl)O zwrz~k8-U@%Lcbb#x{>d#0e+Lgv2%fY4Nk%SWm{oi)w4|d;_m|;z9n+L34Eu@q0G;~ z&n!R6$P-{3%D!WGc%CWykF)y8ekG{``epZ?DA#`RTCqHq46zDw)&1K+Ip8DNYrWyaxqleJSRcw^iy|xkmxdlZ z3;GKx^BurP75@Rg0H0&Ok{e5u8{1z#l3WIC!b*c^2sBIT*HM-8haFs1xEQgOd%Qw>r4PV0^RhRlttqCuXvH z;_xC!a2`bXe2B{x!*BV#Oz6ZXD8|_F8K%%-H~uC_@M>V3k3&35G5p$_=U|Mx@IWsQ zYp7sA-rEX>Kl2$?h|w>>@C&>o6|SEid_dOH9O&B|yj?NdeW!zOP)z;zDuxZX=ZnZ$ z0sL{rTYx|1@IR;+WDht$ru2KxU@n^|Gp9VZp@fzT%4nAEme8h*phVmCHUIzO44#pS>55|{k zy!Hz@VgxR9>sak_eJLdo=4@pkOuuO2j8tY3;KPE zVFUk*ife&!Ua;pB|J#Z)p#O)1f2b=yb`$1!5BNC4}gv}B*bSb-T^x53!Qk8;_HF2 zh6tS)Ypmd#fY&PafY&K*1K#LhtY2YUZ*?%{S||tOC^(0@7)Qa&fNyc|t%}(%jH&Pt z->DdW72KnEC-7$#Q|AX9{IKHPpg-c^M-{VQPeteP;ILxa?O6x^M)5(=F?RO6&);AR z-h%UV+QFHKpXYetfj{#eUT_}xR0mI13_HZ8DP9FULvaf*)>EkqyTz6&z77~`dnn&t z8&H0$(uvy@9{}#x^ScKOz2#ibcCiMA_#KKd{xOV~(ANNCyaZ$1V;HXxW4r|K1^o^O z?^pbB(6KfO4|VvA;v>Lca4^kz+BF~&2#*THuvJ_tI-Son!C*2H`UAOF0AF*k({zvlC?5I>?A zdd0uzV645uvlH~6IQVAKyPp`_=FDq6LTCqPcigQEOzj@22+1t6I=Zg&5Eh>TO8b}cnj#89DIf1 z9iZbQa){BMVD|SW2j8ri{k`46A6EP_=pS?NCk+-m-0xucxAd2G_=)|R6GqBeHQv`;CmI* zo?ldqHj`gc{2cJt9E@uu(V2C>>);Xyy6_N&e>oFFxFw=A=Wv| z?>%^5Cwe{#JY0FIflqMoXvOGbO6O@ntn-xeQw_>PjQ&eol)o^#7fWGo%6%DhORaD) zd`Rf4L4UJ@*D7uS9oIa1k{RutvQ_lOu=%ZXC5u=~>I@Zfa_nzJ&ZHqkUqrE2gRz=tI-Wt7+AWxg# zLlGm%eFs5YF^*nZF^+upCp?fx{lj~iO2s=s&nafz@rqfuRx#^NQVjdCFQFY~D+Vw7 z720Hh!Mp}wA345~mg!idoc#@Lg)tR;5OlN`+6`kY_$JWTI5upFuGMK1doRy;%!1i& zw`1ErXH5GYJEK2hbLunT*nEfLouK0r+WC6LDED?dV*&l--WGHpYo@i2|M$oyfu3Jb z(+dtqeUD-8*#5@Qck3rHTqoFm@w++kNz{$uTwwi#*Io9$FLpH2Gk&t8TP23r+8=hY zx_Q$a`iw|V+AZXV-NLcE-=QCf^!L!0kpD>37w-j!{$kWGs$%*5c+^KmP6_GI+4k4Z zIrQ;S-~9%Mj=oqs_-h<`OJoz@>6edw$#~&6>;J@_o3guFxPza(+%9jD4BEd>3giWn zp$g19B14tfS4N_JGDVWUI5LPTua69(@gAh-6+U8A<{BZpoku&GG{O&=s`o zn0*MH*K&^Cq%e9n#|Vvf$#biTwWFfJmCSB+|37V%2gk=Xtj7s}^NJ++Z9%g0v<6h- zn3ld0-zg|hzYe}B;2GR*t;*&B^H37jdBJ&;oq;(lv4Sj}d>MR};N!}}IxTBG$dar) zoX=f(Gjqt##)tA~11ql?*pbKi87u(JCMyr;`vQ4rm*)kMM>|+~TY(*U++UdAp@qrH z>j#B6Z%SrjU6XeOsb4WZR^Cm(jy&!U%)O_>WaVLPcKH%m(|8^YljVC56h~fS2J%%Q zmuZ(-T+bEotw6qo1)8k9Bgnh*?nQoqWx~<&{bLZ{OUUmWg6}U{CvVDTK8_>Dop!0f zhw_le56TMKO%5Qx10S2TU4Dn^>X#yYD831xvn-Df(#*s7XWOj=W*OT(8%K_}&W{xO z(3(fyCh{Tq^s7O99M&*dz8#>@evUk;XBjOY&cg-z{T6wvAIFb;)bDm2U3t5arye$0 zdALs~kjL?`@^D=c%ESG-$isn&?_N}FHdy|%EhL}gPT6^Ukj?-uI|widpK5$qM*Y5u zqt*fPj>mO9pZSEz%6kG7hp+k@Xq!6QWcj`ig46DzM{r(m1C8yD(K5FC9IzvAJjbUW zADgVaXFzb|UEF~D9(*XTM$0JgWnfp{lgRJI$0jQe&maoqJ&J0up~xGjWst{r!CZMK zy%p7#gJzS;3+&pEHwCL&aO4Q+ zvB~mH13`6Q(bU7p(k?c!U8I2X&9UFA7r~bUjr!p}%<3m|S$!TAzPk4tsn8(WiNx>*k=Rs{rX!)hZ*&^LDre* z5B4!YTQjbjBRDevKI|o7_LqQ+?Wm8K^s;XU>xd0d2W=lx{Hk>{PW*FM<*`2m_5|5l zJ-`3ebi8H0H+kj~&qu$iZy4ugZ$Ldq?=^$;UPHYZPk!63*hkTq%<_SFP5pM-##=+% zvW)vF+<4gI-WS!cwlB$`{_SV~w0?&2t?aqC9oYO#2G{xt>R_0NNx|9dg@n=oho6;t0!&4$(g6;rtxBBnm>TD%2vwIbp5FE%g-YMX)M0k1TWcVbaY{ojW%^^4L4 zG4&C1|2W*MJsU;W|NAS3)c>5EUjADl^*`r?)c@SEA@#p5A@!R?^OB{wy)v=!OD+U7 z0r5-z4bX(iFTtf`(IUg!3ut2Fm%Nn>#ltckc%rpKG|k|fh2l8h6~w~;xK?r8gsIP5 zMr@+2XCR?CZertS@C{mV+{DJu;3QfcHxbt}_@=u!Zcd09G*cWm(dILF`c@ogZ2Zgs z&;zESt4P#FuO`+;aq$~Ax`UXp@iXth7YS2M#hp$?+&zUAuXQS3Clw9UTVK*MVp8$W|*J;ew~ELM6u@D39jKl5JT2Q)T*2DfD;Q{`GB z&X>YV-Y)#593VVHlL859U-G0BFsOaWlSb&^p!P-2L_zI~o{56m7d;aNwJ&!BoPrDJellf#A@I>%MdLp zmbVidzbtu;Lt2g6$@#Nx5JZ4NRN&b@d9p=&|B#Utfn}Mx+Km{IL9d<22=PMA+KU;e17p znLVk>ufx5@k}5-o^A$bAV9luaF5=M!!}*FH%NcwN@L$FojE8AO&(vo7HuiYsdq|&T z=8qb8~h346$XEb{3{*2%E7B0yvD&T4sJ8} z9?I-6_|wFl27dG_RdYP>uPG{F| zmLD&aY&4z8LZ6CTv!?1vz+X0<$({`SRF$FEvSX$**$M2hnXlQ2;Q4t?c4OZrFFTnX zt~LC1>1z!EoU2=6|HLh}Z)Q8e+wE zL}Q&KxeY#qKL~rGWCN?$Vax;_P>yxv_?h8YM~(;{@Ju_)SRJXG?F^r7+5wU6M41Er z%G&PcwVr>TI3D;kHBP@IKSz!l-q^0}=IrXe~s~SP-Kh zTJUA6Re8`@Ff53&2iWYO>=c@TyoH7Sk^;&`7d;s+Mj;5z6dF!U zd5pbA+z9U1wAYBwlk0Wb3#x@1DF&89gYV$NZxNsKSP86Yr7Bp zE-c!oV@3(Sad)x_d<**jY`YKcb28M1A0rEPK*6>j=g6)gK^4NTMEgq|vuOr5{cyIZ zsExL-;C>Qz(+}N4V}dKFV5^FWju^BUZ3BXBI&!j0#^i_tZ&D!>?qO2TSK1n)?KwPe zN>ofOrbcD#&S}n;AR-zYf0*qrrrQlRur1KFSBIODyupxfoL7ZVwcd;{hp$+;Uxw*_ z*d2Toe#}lA*x~~%pzYZOMP@ND|DDj`{8_!Gp{Zf%r51%pr-G$9J2bo+NfsPo;7_wO zIpQ2@VeImd7c*Z|VN`reWjGd1{zi-N0)Iic`d2Ej{5*4Nast0Y$i=u{d98wwA+j)P zUJ}&|8CF^3F}RB+@UDt@U$MZlJBCNiH%2u>h9UdnbSq>W(sGUwL&jGc11R9^s1dRc zJ?PQ+hm6s%4Ap8>!SRx?F7D$s4b`<*uNx_d9t^eBOvKKM1=*RkReAKy#JKvMy>o`8i*DzU=MIb6s4>}d(3FQTaP#E@nt>c1|8Fy-=fEV z9bVG{u^h+2fBs*a8obIT4(prErUvGfpZ{088sMd)q4zRq?;dJj1HPk#olv79qrL2T zfIDHCeX+6r@W73*f6AczB!75K;700y)bmF!tvPMf=^kU`FG()N(La;_MxS56_*Kup zAy$(+ZPaP8H_eWX>yu-EcR#}Y6sBN1g_|ai9TUSI35IcbU2JMyYe;2 z&1)GiUTR2qeT1e))McUMOTpUY|> zV#e;3D8r522w0AA%TWySg5c#6O1}$1pD&Ao^P70$=u+nfgjJW;O~B_3t*zaNBz!qS zsY__*0&}6q8=HDJcww0BV`FkN<|INbBba{__gaH-BOWwjjzdumJuQLejS=|-#|F%& zWzJr_yz!E`i&r*I@ftO@Jk*ETobb&ipgioVp{H?Vuyf&%nEeuryg=Gi#076|?Ix3n zm2D!A7xWQvsTuCy2Dx@4XPYSKQPgp?s1feXh74_+P317ueY6)r!GJWn5#qyG;wCzE z7~#K%v7@1g2{f+Zvo)->jm(TC!L%4{_OPjw)@}*6A!zRw4!h$*7}1>_GQ2lr#8Sr=Zoa_+oki!WTXaDk2ZjS%St+Yd1GH}na;{et-y zFYtOfOp(povB!>NIRPcYI(ltFnD_LF(=sA;%cgD!>V@mIcX^x$Fn((f*pA(w0?rrt z9@~N7-q!UVei>p%R^oq$fxYRiZUk%_?7z3OrEzn|6bU8|pAG|mb4vomap#5sHiSK! z;csI+Q)g-zW<830??%tJ5&3n43s&k_Yj!zcWc9*r6zr^vya{~|Eyl-)9F1jjFI?F; zcm7h{x}RFwQBZ zVe8p6$5D6nkRip0BSwE0LcE)`itc9urR#1Y;Z77`Tz(F+39C+lvQD58o#l*X&S>`R z`TS+)T?iNK?CI+V11BzaB8c`K;e3_8o23S;zRn3VT_x7Mm{vDL2xlM`MC?Cdwpfs1 z?QF4e)1!@4jIV^71L%T`Z)?p?6w&4ay5oWNgeM<7R%OrdCsR~(a7VUpvz&+=-PdvN zfd6Ts-Y$?Ivpypdnv_Vo3&G7P@#o5C}bbVJ-i_nWahdmJ0)Uj|Y3v!K~K zu@Ou&MOv5c+laXauOAd*Ut|5FNjoWJp9kFtgFB^2gnzqrLKxuREIGZseQj8`+hhVu zVE@7`a_lxN)D3$_w8-hLr}y#}J(HTvEx0wnplvn^SAMh2i0<-1=Uut@+=X(gGn07n zg)0{>*Nsy`-!|p$9z$5sIE!g)nkSqfbSrKgq1(cQZR^rU!-Sh9aM~xE%8p*FuFGG|1Ks;<9Gn3bR+ntL-9IxTlfKLqyGPlnofn#Af62GeC|J zmV{nh5Ol~O>-ISXn@JSzSRgy&gu7?x&Ng&8>_}ufZnnu7VqcfYa58?nL}B*g+C=xM zkS$^Cb~|SCl7gKdbZ-fmdg!e>bmNw2yC2!BgBwzq{X!b;&K{U7vSSA?lVop(a4!nk zs7S^k(iirB-J38B-h;v3hx2Zd_vWvbXPH~hd-rMh*mU#UvZ{GSbG=(*^KJ{~nLQGg zVY`C)*iwNT7Ayv|TQuPNfH1vm_I8-JCqB=udMT=g`#YRBXnzM+j~pbuTAt4i-14EG zA>e_qN&koTJFw#TgOg;K0YE-AC~u!_2pQ$YgUYFUsnYnueC43>vO)RsL3#VkMaYmp zY*6`NdH6;vO5n!>@hBmWr_xbE{)8we{i`07$G7280)H;b3IEtZ`5NS{j4YJpgCu@8 z#$&v~JNkPZ&m5FrhCCDbY46pN!?+_)dvDNuH}bUiHqDFE1K&6(|L>Z=8T=d%yu2al zW#l;?U)OvNdD{OeCr|tTR`U!p4Ey6A)}$@S4~rIQEPduu1b01kr=5Pf+11IA!hHZt z*1fqj6xkFhS_aH|ALYY~X~P{|?2v^Q*zT%sX+z)GqOL6Rk#Md#Q4Zy3MD7O*h`01XVC*aRodfvec9G)$X%$*KK(?hlk zAJX68%Xl;PWAb4zSD5&XMSR+ic_MN99|6Y8AII4-hHero@)w}PZ>8=n!1zX&IQ|9T zywW+>@C7~Ti3fl$Fu3ShV0`63dg^DuEe5CQSNK|2_~!#(Zg7%M%-?Eoz^~iUNAeW? z75JS7r-?tHnDYT&FNhqrb(g_G2k<=x7taPhU@&9s(dWtUp9}mwgVQ^Je`#=h9`NrB zPVE98<^lQBYk{i`#-59wUu!VqelZTe=m7owyupld#V>wHXUr|XQF&^B-(s+TH?a0S zhNt9=!%zOyQDE3wa4+yj3=Z&onQ{0@PoD++Q-fm|Xa6_Ka}w~M4fYS?%YH0Xq61_G z+Ly%Bz@rR3^+2kC-(jhyiIvvW5(epo#Vqe{KSlh#CXlb#UBLzl)>@!!05BkKMkxl zFP@M2pt_|`2QD`}>>uOslRvc`SnZr%4Xk!%{G|9nXnj~QIN5BNTVW4NASoH6nQj{|>KdDs@lp7f$00;~RU_-*_pLr-8$U>tst zk2QgD_(cxIo>CL)mG^g@J6No2pHonx=jauhrvGPU+N}<7>A$yiBo~UsC4*33gasDy|9t>)iZ#r4ZZkIVAY3y$TYFDj(Y(67d>F;>001#E6)sI z=uI7BR|CVRMK{>9=y~P81Ng57C);2b^@jv>EUq&2BCMUo;}w4oxWQom*TA#2?i}Dn z1}EMRyi(~4fz==4*8q1Y5A0mrZ?L}r7`C8p($+1C+15vthi%S!`tm0fl*5<=B|3IV z=w6~@S9A`r`Zi-Ym)xlQzX!hE-~hf;@^Qt_0)It$aAX{Q%8z4A7*}6(z8`p)@>~Tx z+Tb+omO0(vBFtIF)fe6N1MAundmpg+KV$o4TD2~0%wIAHKlJ4`!PGCGU zPbvRbf&XT3{1M!Cr3_A@AEm<$=H3ydV+>B53q0Ro$}H8sr!l6b|7Pg1F9EMt9`v;o zejt5^O-i>JoWNL@LRX<%cXD|v#S0{_Bb4}B{8 zoxwi*x$N%-b1#qbB7+lXr+kF+U@n%|7+mx{;K>FjCjie>o-x1+4UWwLMjg@fS>Qh@ zKl+jl45kk-Mm>4x1KFtt(+9GsFa4?jUScqPAbYX$Tn4;WF?=A~X)ybey-MlOJ^N0@ zX8_-9a53g%_6~#jGvDl|3@$?dvdFXDB>X-5Rf9d)Fnh@0#Akrj&qdGY3_XC4WnVNn z{%PFelxSUyR|UqNGI`BdG0tGd2xt6x+sBGo1}BR_KgZwzzFz@*k;j8SS8Py>HF#J| zG5lnh+R(#%ABH|ulOJhVor!NR7``I?f^Ng$t2Vyeuw{-+*w*f+Hmp_gH1NO0@DyPk z9@eLH=s4_3t;@Cs;6t|EcRT#*x5=&GQNI;A7)$EIxIx3di>k&F9C*qgdgn>#~h1U|*!;6z~9jWPrHSS9AWVA!K_p2}fel*zq(H}FNua~trR6(0a@Q~nje z@MGbJ%`4xkJU<5Bq4*`>YaRI?QVbug{H)?bz^KDM#@+#Z1Z%wQ;~xy2ep2~&Ba`df z2%S6W$AOD5*Oh-nRm4ByWP^(_Pe)9``eb=9Pi?%!5zAHP8^FWypblGr*C@vLk7!qn zu^Q2%buqppF2~2pyvFeG{%i!t67)FM(Gl<^X{!NvkMiem{J8Qo1K+FoD&Q|T^8W+p zU@ISXv~eam_IB>`d6D1@i13FH!yg30&fHfb#3v~32ffC@Cn-kX`7B%btAS@Irkrye z`cj8}sm|+4@W4-Gj>F#Et1QG=>jlGiya63|K*kpnABJr2ItRnog?I{cW=B8U9XIz0d7V5~vHgR%Ag;$Zly z(4mW;axlh7=)VPhn1eA!LWiDQI|M_dKS?q4aaON{fAV780#63linUV_;cd?mzN9DewD$p0RP=N1QJ{s_-akb|)d@qWeB?b8na zoZ=&(Kj7ep6;n^FiDA1xR7^deb};6u@Q@#VAUF?v5 z9|1m5G2{f8J629$#|tupNlK?2J6@Dy$BS~X##()XC61i)9gMX%)CcD;!IXpbLNMiE z?GEK!p_n=hIM~iF>SN~@<=FW}IkzeQBH#}xUJZPwV)B1N@%_LD9R7zK{;xay-*WhW z?C{tzqCUTHcz&gr`q(j|4j4ac2R^$K3>{*rh@a;Jd%j?tUcqtjV2nbH^-XXFbc}^v z|6}%Ca0=*{J3=SM7zu_Bv2z`aF%o(U=$Jbp#uy3S4f;9oK*}zj3L;v{cis3&z zzlQva9e&s%)M2H=kGUgs%3QA)KF?>DLZ{3g#TcvjRSy3(4nO)3^6!rLJ@hw>L7k1R zH~2lFy*}}Bk*_l5sJ$L${8o{PvF15f{G2!+T>~&wTX+qyBDz-Ry^Wl&$&Vy*Ae+|) zf+3sV^$DH^oKXxr@H;u7w*glw?gq{&X5I0MSr>AJpLHiGUIYw2p<|4A{SeATUj$Po z>IjBy*%#^K0^nteS$Bov4&arFSr>g2{=0xzD}D%gjpBpAs4qN^0Hcmz>eicaLJU@9kAg{qIoR4ZL45^~XorWn1_N zW?T0veh3(Op&tZ3pqTx_$6m*Jk1EcBe#r5$#}$+QgyU~dMQfmU*zvt1io3!8oQ@G7 zzq^(3LSGptT=XIRMa3@zzvTEQ@^ZbJ!?_hj)>r+wV$#!*-})KFp!v|%`mkTAcnj!| zY5N<1-_9fM>txsbU~<%#;NnRCpg+<%zLjE`_OUzS{*nS zLV9ha4}CtQ&xmwmeBY41DAJR@9nx1tI(yeU^xcvE9P5z(P}CQG-yYHrNB!d1g>;Oa zy|4FRPfO<*X@CFw@zu>&+9tqy7<4`So*VC7MPbU7m9MrA3R52P>syGgR4m`U4_U~s z;RmKDP5x$ZiQW9#}Z|8?BmoMt;dKpXIs2#qsVA%gZjCei@jzDL?`AZUfxgfEO zsRkcnT!%?|B|e*M>anv%k2G3gzLx$(84m5A!=rRvxb13*_}7KN}y)qg<=s*MJ@U zf)?a+_}FCS{R{+`ZwK-@%Y>ulqb@Gr9mvxjHd($ugFu`&1=H`w(e^hB%rfNp?nHsS zyO7_4k4-Ai9|?jh?*Q^v-Y_krJo+E?QGbrrY8eiath}Yju^*bqcO2!|q-7HC+->&} zTo2v^CfXU-xnVyp0e0jae+E>*^=_D~Jls3DeATTGaeK%Wmht;rx4-AC#`%YS#dhh3 z)QSDQ5=W=q8q(YFvB|cJ`$|{d@)wccfe+>3{wkD*`~L!Y9mwWDv&qWa1%hLj^ZIdL zN8hJBj;YmeAF!j}*y~}J@u1mcumwwMW4fr6P1ivc&mcjC$ zW%&5_o1^7xcq{VM%_hrd=ZDf8_M&duGT}&_ko<@7&(-fCGU&&5sI2b+ zc^5)IKHCTr+hyW05G4Pm>_>J0@ML`Kcw~W#@Ud$%;Ivv)CEX^G$M@2jdb;bn>T{A_ zGp_f{=`&^s=j(~skGHAnnZ@0N)zVn+4u&zlwbn1Dl(;%kvR;c>u=%$Gc{x5hG;@9$M!S z!+V04$-nRDVTsrM;L#_xCR2SZqfGM6^Nt>#`#$fkm0wBDIdQ&MS%00peCBOE<$}sv zie!Ui?}j2T1G$;2Fax)qa(>;G=2YKy=(ZhtA~tt+`GA)@vDT|Ztm(>uk7L0}Evnmg zjmKEf{aa62Qn~9?FS~75RetV)qitKqr24jwTiU<$=+V`$P-j6@XASF2+d3L`CP|&z zZua$RuNJYg)0aT!{DViA)!*(hhIr*A&m`wS?(D6xR3DCOW~@1S6vtJt?_r5e{;*f| zzu0>d_^PUFfBX!0IQQlzxd}lKP;Np%kRc$bK|#Z0nG|FYR5U;mNXn2%f&>KtK?P@@ z`l{l9W7XQhr){08ysFhYRBdZ(>rfo}(AKv8I;wrj@B3YQopbl40rmI#f1mgHf8P1z z-hB7kYp=cb+H3D~?z!i#weH4#YY~gQ`pQL4=E_Y@7O}u9VDCPV`BTR7))?teuWRhx zxo$)6&JB*$>0t=rwJVsstiaUbGjPt!S$t!m2Yf3)pU(P}e+T|&L`U2)0Is-p%AOD4Cx52QvCtiQ2k;@Mb{FteeEB{| z{IFu&bJTX#?!Wd@R-r^~Bt7I@aj}n|b%vI~9oc zK7ez(>2xP{1>|iz9rJsk%x~@b`l%JQ?>X+av~vLFH@EKf$=|r<8RvlYeW!e5{Xvtz zG3PzlCha8HX2XS(>&D$6aqivGb%As5u};Z`EpLmDZ9B%vp|9-RL3P6x4RT_rD~C_^ zzxSxgCPD-?)v=Pr270i#b2~4Xl^5 zdv~rseO3j}724(%u0P0lrRI9^+dp$J1yu{x+WIus)}4bpX~)o}`>-c+IRp-U``-SrC+tOg!gkf0vB%M;!#z&?xL}`)<+#U% zy!+b^>2p_LjIvLo53wJ|_voG{I0ovz3G<2lM*1cn`yCR7`^6mNJmOZb+ub2QG+u)&ZGw?k+2Lt8@EK3vn$`lnu4_tcqtH}{ZD2SxKZeEpX` z{Kop!gwFL-KKlLo(?6~_dJpy~`2V~;*psGUPXhmjZ69(^qW?Rz&%Fa-AN0Y!hyAlJ znJ@Isy+&*n?KhaKU3g%7;Q8mwJ@os>T=OQbcXm0aZ-3KC0jFzGzSeb$t{vxOuB~*6 z^&I|bC|B+Ok9*j{J%0o5YkTCt2Z^u9^`jG$t2tgq794V&DCr=E_-=w#hJvdb=NR8y zuKIlXJgne#*E}C#2O`SxKrMdE;+X-;**^0-hpmV-JrtRj}MzK>!HY16hO1dh)fH-6LPXo_|S%Xg} zu5c*YJxA?_>umQNp>(FvOp-{u+lA0im5?FDDdJoM$!K7LM%!M5H{8K&!uu_mSa1hK z{<)a6;7-6F8h96}^0S&_V0b|_^~;>pVH9ahWw0@o!NybuXUpq55y=`Y z?=+V3X5ed6Zz5g~h|YRzsXBEeKA?;+9ntSp;nY!9Pe&7LPuMELNlD=}=xjHWl7cmy z?G;AOvBW(Mt|RVa@Hpa}L$AT7wA57ee1@r+MrhoDkGlG2Y^0kysS~KPYkpP6-wL1* zqw&4*VA>=D>8tWC=d;BAV@4ia1dp{DTn|B^%@%?Fq>f}U@QAJAM*b$q^k3#nWzuu} zSG&t(1Sx#_j`5KJXoMS3Smp+=5y>LKIYwC9Qs2gn=@I4iZBFVt!dYIw%Hh-HP@%kj zjgxwSP&IfEc#_WAL&PQJ^^2D{sfW?`Yiid=$gj41oC8-|K8XpuE@$+33iyd?gP#F@ zcc8(~!kxV#<@Ku<%frw9Yr}z|*$dRH78t6%Ncm$7KR)OtgF1tM3fyx-IezaiKPvEF zn`r32B>!}SU&S=uIn&@bFzy-i4SoxH9=X8acYud1H2BwS+stQQ;AUX&p>N)JAh#25 zpwsg4Q?Q=nGq{r=m3+#B117FJkfoF-PUmO=Zjfw^*@eI^WV8Uchofp?5~Q41p#`3r zwh!0B6x1vkr3JX8v%OXe*nd-N#%N(ChIC7v7T}c5_K8}U#hS@ln2k2;r)%LPvdz@O zJdSpb7R~}&&HP@d$KcMv%s=K%*3t%)Ho4Qav>6PSdar3|D@H!b+oh##sJqVlKuZ@w zjq$NMW6BX~?!==7=9Z$G+dYp)PwW7vdmsI$fYZG%KQW1CR9cdu2xSJb6s7g=v4kA# z0?D4TguHN%Ob(Q?JPHLZ-M*O8WN!{PlXClkzr`5B?N6)|>kdHucAZ%F5Y)5=(oJ#{ zJ4+4}0VOFHTTSwA6;MYU3cy~IygQ*aa1&=AA$(>1JZ>bPI8U+FpQ$Z<>bK1EYr6 z0i%Z4|DuK$NkhYb32{)q3d1kHj99h3oLIHJf>^b^k~nMTV@NTKmnkbp&;|Z5BK@c; zd_Ij=UXI@^JH=OXOugj$AgA~S>RAQ%bZ#jrM$>WqIR9PbesGitS3H>|`(zUDk&GCb zhh;R(h>>~NXu*sa*zpY=YYCHI&IlDHSUQ+|L(dUs%9-oB1m4e#7+fZqB_euwDP$C{ z7S>XTC|+$um!es^)QB!cvvg@tj_+wps|bzFN~^(snYmsm#V%fazqt-99RU0zbL~=! zbr@c|lpc!SpU;`D27~9PmF0{P&mTV^M!ca9BhR4*4+qaXgUcCxt8@hELyhMDj*}4s zT^C=5wV!zyZ_t`!Dn2```Gydq>TgIj#z3a4L#7|)nN0JCxFnwk%R90p!qvXe?Vh-RyGcVb>WHOG*UvD7uh~b$>Ty8M-n$+87GP2lgO40`y`YD*a zf#yOoi(RcGZ6+g&Ph9DN15C$N*+r=Nt7))UI;Qhy8^Cj7iE;8QHkuOt1`Zn=Ubnd5 zD?N1oK3w5qM=D(^a`}^Kq>3>Z>#HPf9F4(fOI_n#d;~W2eAayX!}$0m{Y;E@%n?1Q zbgRrsQW>yQm3G>J`Q1Cw9&^XTo$g+b@1GkFkpgSrFgUF8H&`CH%yHej!*&B1=EQZs z7L^&(#&z$ZB;jsD>Fcr@Q5-~)>q1TzqjT_miyYlof-rWlJKH^Musg>K4jt^y#kZY9 zOl@{HYVZIkt1dO!VNub2EvYDrSC*ViuPx!vu-U=+p*ko$!eNzd)nTBfU|1|e9R!*_ z!?eS;fn#6`N?SuIGUR;83>llMF`W+T!f;SE6o4+P1{zyj%kD|RQbk|^cQ#_xV@M2H z4?hh}umxOWIHXHtpqE8871yC=Zd3!iXp>S3Ze@kB%_Rtj%^onx*B11Gl_A!F_u_C} zcz87FTWOv03)DKODX4xsMV*3RtXJ& z5tru;;2skWvpXzPeiDayap(dgDG}Yl;mcP=L!B!I?b68DjHp7A{{Wgf=x#UYpg}Dd zG|I+1htYRYvId>nYtT_y2bt!Y%@0zF>{4B!2%=?K=%BlO3_a-haAdmo6$|0{-em_2 zc2COte>d@e!*Frr7Ts|f(QT-KRp1t+;MzxdjZM~j>%EmzC2gNo}+2dFR|(DmtdfFTvSMVStYVV2Psf zC!)*-5?ep1c@K~QfN2l{WH|$bZUY?tOXoxLAA2D078GfBan@#fxJ5-r6&)>-iu01N zXSnW^Zj8o{3#=*KYPf>BS-fTJ2HOCdsABBAo2V8K1yVet}8d7L4s|YE*qu~p4AJs|<2kCI6aB#jI0^4+hkvaSvduK0|Y8dol z3{w@u__|8m5R=3W`5L5dh%z$tw39c)_nEu_o$%&Fn7l!YVe$qo9vUV`pn8L?^aw*t z1<6B0o_vZ1ZH*)ib9<0wxM8_^JVrYr!Xr=$fQ=_pGKG&|a|Fxrh_5{NMet}HRF!_~(B zpC^677l}^KD?2?9H+~K_6+NtqkmL=ws!tB7j=y$8m-H{l9?J7mdn|FYL$YIys(>YA zuyR~PB&+qxkZ7AQr1|ZY`9A&2tU?0UQ2ng(ek((9T~Crlg{iH~1J=m)S+UQ?QJ=W_ z(!=7lW^td>yUz+H-qE9wC#2fxHj`UtH7lS3Rd3* z^iYv~`%Xd47jmQmFWaw}Pz!4+BGPAhKPJKU!Y)_HK6&<85p|#U9)6V6!*ULb3Ssuv zlV{&&MI;X&Z9>uct<16pB-oy2@#OW}C(k}B!afVUur;JQ{$=)-n5Tyf1*1V$EoQ zBiPgUIe0>O1xC%EwYoT6B-c8Z4M+^ip9$=yp}5#(1FnpP1*fnSlC2Hhf>CYWqMvET zLfb_W@;3B4mgMz~>hnF=Q$Ez1QK@=8f3Jj1^Spx5-e5U2WqoR$PJh`332Bx|RZ;O}9sr=e9Ke ztgbBw$-`8qGx6XxPF25bI5PWM$?7w#E*Q;%km|U3*pz=(=}~@`T8fn@Ngx( z(6G8W^FO?e=X4g9<>wzD@n`=$+(-1k+$%HqzxzG*7mmmM-T&a!JNt{#jifjYM=d}$ zfMqQm$nO!NwuS|W-o0RHL&Ji$)-_G5+8Ty7En3{N;D})(hYeqVyb#M*HzLPL*DVWL zguD_$mQUsHJMj)8VB_&Bq`L7PXK8~3;zj|EQXgVinz7am3)t~9Heh_RjyTX%!hT0A z7zS`cQvcYAcMyOdbXVvRkYo<|lKlEDU!?ZZ1a~!{3GR4Y@4CZ>RQC1DbNmVo5V2T z^;Zu&+_SUyJn6c}9(1a-pj=OK-gr&J`&RZHF?RUazEyoI53WLmpBR()mrDQ48~t?7 z3vgpHRQn?bPYSSpzPwW<|KMuLlM}LB?7B#uv$z^np5HkPBC8HM#9x~uuM71@fjDwR zfm*+I-R_mmW6KKUT;RDE_~|i&`X4lcUAhS~=Hu)7*7TE{JwAu(_vIT6=8H1&CdEFa zQ47D%gnkDN7*thx3<}U~4FA>mr=ROr&aWvL-JQOBI5eGr7d1Y-a(HD`RUa`3^Bno| zHk7FEjDG$4`D=2ORsF%(uc}gXk$ORsPpCS$>f{lAPdv>)pTiY1Dvxcm@M+ zGTnWL4<9>xGm1<_go*P@awGc6KoV5gN6=KfujboPGb;O5j`GhMHo!k?iN7-E_Y^1b zS6t3o;XB69N)6pBCr-Acz_`EkM3EWePw|W9pNwWMX525$`5iewv)B7nzb)r?&lzPz zx(xAPb|$v5&^TyTGqiG^-<<1L*#~pqzfWbQ-#*N*%=xQ~En1g1GTR4It~iaF04E;~ zdar2J;g3xvFA}+!dm-Ep@B|gIdNg&J45_K3If_M%X1tYLm>S7SiG;-|a+y3wlichx zH4=G|wPMv;$-Xdi{M_T}XU>>0eSdk9#?34b?)pdhJ6B&|X{zTH8R zBC3kq9+Dv?N|hv_p%wXRrq7r#t$x;|33F%7o^sNp`Z>;iawahcgs3%Z#_`AxP?$i8 z7KCMtIhHU7OG9hxvX&+jUOdX2L^kH8sb7K((HLcoB*6K68I%?+Z3-v2Fl~~UcLnp+ z>@P`Degxw%0_HtH+N#Ea6fAk;&l)$6)@Wb7yaP{VMv5<5j?Eq${>r5}d5iK|@FCpK zl})K$b4qAFB`ftyy{1-@bW5L|U#WQwPeJ=iuM`b-`jiuv#$h9NJE5FXK?fO#unJK#q2MzknS5@rD2MuZPujYWR-p1Buw>-7qKrc zEZOS*pOPsxbdfhHzspRTKXb|~q&K1uV7F}2DHjjn=wuasMk*zwKxzrA5DWY9)0f}$IT5_It>>NhzVFo|ROax1_U4AJ_zPm{d zPl(}W4MPbprV?A{vU(=G<5IQK$^9476Xm;}bo|UYCu16AKB6RkT_-8xise}iJ4F|n zif9tEk0K>eexV_I))z@&WTeOvM6SCovl%r?{;&O|G;+Q)VZu?lf#x&k%$XB%tD3MC zwm0Pt8$EQypqzZf^B3hvG>5xzTuF8!(hl9|wWNRb1~U$siZLMvK9c9gmE@SC z=tl3jvT+->$FGmw;NRr7BGu3&WGQ;>RkoUl!mF=^nTpV7zP;Rpu*2QYr!+zGDNVS^op_@M0p57D4f83H zZ+ghh8y`Bho7@RE_!F*=O_UMd=&?Vx(b1ulAM1&lV+jM7W3nZ0>$sAEwAJ;o2{(Ea zd6Nr?r=$INN~5VxwF@&*h!QsCn_CSZu`y=Zx!IPy@Q7>dAK>$ zvm70$$3qDD17$p6lRr?l=all)JcbA5{4F$)P%h86mU0Ek;any#aD3~VKfr$gN~4vs z1NAIN2kQ6c?-^ABpuX2$<=%Uhb?k-;{=R$FSMF8rw^zCUUgc_(CxkQ|Jf7o{V+aOM zdoI;-C(5+vYAv&#_B_{=-DZ?&&&#zwG$x*h;o(k4J-fJ9ig?rhcAB#L2R7L!S)z7jxH#rgTavl|uqg@)56I4V!_($IC)LhkeV!HGwsKQ0U)nxJ?ye%tyq3 zzQvE_64AjM$=MfuAbtW6%52PI{^+tw=`Qx*kcT-JLORz-b;y&m=%Xy1Av4nXOiQ=3 z^18Vlc>c}5ZpPwoJ_pwf~Cy~xLv;4)8=nQ?_YQ@mkh5bqQu)omSb-c{O<8Cr^{{!GF3{Jibj5gBtZ@_mM%p3yl{RX@3z>g^&0sM@? z!O_5P7#t(ddj=<=7k?Q+nL!G;!eIA(;GDt!CBQ=sjyD6>8XTJjJW1&X1J5+rh0k~k z4E9e4Mt_u_d>k0I77Uv)PA#zq{k;d3{wXl#l63x_&wI&W_hVq}cci;N23Gz3zX0P! zdi)WbDe#{-xfr-u`C)(mK!bhQ#P6^C8-Wiq*qH}>tih>az!)3l1SbNcjyQETaHHaP zfzLHK0o(YO8O-te(3|{z9bR8G*u4N4>x6XaOUJ^zIKGZ0_6e|#CA9^96BvFztQ|XC z+r9xj&fxe_z$YvHW#A@*-HU5Pd*Gh#L$Bd;L!#rzX^Pt!SsQ|9E15|^#uG+blwBpW-#*@CC)LJ zIiC`kC+Q3JOAa!axvG+|9qEjDPy33T(}8CweH5^+uh?2(wISCibBB>X^#QQjFb;i^ zYQx|=z@e>f1rFyL=Ygc!%G(62wo1bHl4`5iE6_=8m4jGY=R)N$Pfyux623h-G5$5OypKVpYQ;HwOdW3Gdnm5zNbfbGZ= z-wqu5YAI~t8G0IerBom0>`F~CblQe_qS!WF0{k_D87rK>vL>CjPd#q1e+cl8431;2 znD;e^5Hc!Mso8NnjqC_lY<@6*#MO?2*i|LV5syORGPm{tB%Azy~?g zvkZ>|JEb8@WcC97vcaha1F%IWKreg`ntjPymGpBS8~1pbx5?rXs6 z0}1x~H$#vA3m!m*U8LV?VAxmWWA82MtvnY2!$zd@Jc)0qqP~i7z9F4`73q3mUq$Kz zK5SD2JCY}WZbh3c{!0uN{%Z}6v#;BgJ`ebN1}E^%?smh#jBe`GN8 zNiy#f`{n19jM_hO3~-I12d4q+T=3kIIoi;@iNGglTi7+D%)GT4F;z`%V2DzGY41ZR)d}MfxmBX{4U@h87ysosr;~K=06OM?FRnD zUDwi0TRwnaqV`N52z`S~S!FQuw3M7i@~*c%a_XwpeSW z>NBYYz&(|Yy_dgsq#c4cfw4}A<0kYk0`yQMyg}4+Xv&m+m3`Izx}Y13K177^k`PenWS!0{t<36c72~m()}Ac|qxu z!1KD|b-=$<{1)&h2D`oR2^4mu92dTm)jiFB7Z^S*bc{WlQyqo_A7e1Dsk4|T>gK{u z*)xm|u}Wa{R{}bZ>_vH7_EW&S z6xRX&+Q<=|F@J39W3S7?x5GHfWoSb>&+lb$bn3=yeCCM~J+YsZja7`fD#MtCrxUnM z@gu;OnZA;wV~#X7vr~3gevDsaEDU8ZBbb^6fnjpcrx%j#n87Ldlu;~ z&a>rPRVIA096E(Dxyx@fbow51Oo@D~`*K~IP7^T3EA$(HpHd8eD}UMGYX*i-5+fRnYTyr*4m)&@E5;tyJ*_-{1gW;Bdj>N4(hvB~M#1z90JZ}k|xK#JgKEMZ9xR>IIpo35L zSmJ?-;lsRdBXr`CiZN~na})JDMKR^iwD26|9}YV77CFTAirE)z74^G9G3Bo_SnlU< zRJ;K6trosm@p90wwD4CHcYwab!nY}g4CiZ#cLIM?@r%IUweZ7=UjhC57RFvFV}A$q z7cBe}#s3NVTZ#dh4_wAb`~1Pee^Q(S{bLJ%s<;|{2_FvaHiAKOCn%l>{3XSdkM$;Upc{YJESUNyDV$vEES@K1MOd<-v}^Lkv3#o&!AF!t)ekT;3uJ zHz~dc^yL=DoQfQdWsQZ;R?Kl>9?8SQ!#oP6&evG@dgaGhy<08(RmDexj`O?pMf`7y zITrLGbmE*nro6f-%4R zEGPIm;O-U<=k%wb=af!dtr&g!LoJN;NIC4zuTwhlM8(jPIi{p9;uDoW3p`&j?BFj@ z3>khnca6Z;fgVq_^}qAU@$*> z@*bS%KzxE?%vXG_g-=$D@x~i0jPs+k#oWeMS{Q3n=o>*_XJM3u&hcJmu(K2RO2tnD z>zqpdC#+5KGxtyY4hx5K4cqg(H{l`vuHruf|3L8=;Aa#+0Q_SMhjYsDzHaFJ>=u7h z@qFO-Ec`pg3qVI7(HK8ejB)Yvr09db_e};uuD~7ES>nyxcG2|sKu<%8S zn?b+9VA1Dh#f_lfY2ka6pZZ|FB7HDlkv{)!;U^W30{?Rseo-;|eam3!_dgUb1RZlk znGW&)QT_^G%#rj({GW*Zj&V-JB`I$ewClCx$TnGAa3y)Gf4Ro9fg`b$?r*C`!e4K@` z2a@jQK!^P!`3n`pRsrXLZHbpDejgZnozRKTR19AWHd=U#!7j!TTx4O)QPl6v%8xD> z<5*-;=X)%SITAW-9ANE4_+f+H9O%z0opN4MOgXPu_%)0F_e$>s&mR?UG@tcF{x!gu zBf-!mRcv9b5urZ-dQS`YQM?oMaK4Dc`Fat!7JDe|i6b>eG3G5b!NOlM*j)(vNftk@ zJ)~_N=!+F&PE$)1e+Y~{Et0?1;@@PjTMeG`6b}Ku%HqGq;@_dT5j?jkZUcrbL_YDi z6n6qYrkLZx+KKdh*1|6+o(UeDgM^0|*A;^20KaYF-HIt6^CdjQm@mQWfd6jcJ&HHt zz7F;`;n@m|{Y~)wz?eJ1PXJ?oBj#Sg@8ASa2hJ&mZs|iTJXrC3&~cs;IT&vmd!67q zV63kQV|@vxJ|`+>zjGCT0KCA$3l)C|daH%o4HiAmQcT@&4N3WYu7vltq%Z1og<|S+ zt%Y&Uiu4KRl=|Fh==6>BH!X~FmdK}lzOR`5{y;J9@G@TN&*@(%hAq?YVQxbD?-cih za+sG2rSoyOP-h2qvZlb|LQ(CFR{-;(4l9fKkP;9=0Jzep&j^q zlwj0T|7cv0E4UN%I%|v*6_X$1lJgfJ@14nctr-|&lzTX&!w=-%3+kCqRX!h)zCiVV z1bCrklSaM1+6rAi&X3D$%a6soH?KdRPYQMRlX*S;K6%~vJWQw$pJ57h;PVR6T)>{a zLm%jw@0T`-=&(s-PuL}*ugmMhdxjDH;=FFoH5UE)yq?U_8u8zg*V%c;qQ9HhpXaTR z--VvxSX|gGqBlq5`hU-{$>%Eb&us3Mm6DbE_+}S1CNU?TAzzeFfti0yv#SPtMzagL zd3dwyitx$Ju4~Oxn_blL0nTB}qbUl>k06G%^LHPI4J&vM)inLzyqXTqHQbLJA1@xG z%)jV8Tr(p;A;w-R2l(8Diuo_5c!=UUQyzaC{=<*CR|yaKGI*VUmnDziHMu#^!XuP7 z1q9+cQ!)M#{Kx(#@~BHF4{O4f=iQGobqSA9UIPfWy!TNK^`jj^c^iQ({k&Z$cj6Tu zp}ey}u;fi34&~t*Ad-i3qAky#k8)S~!43uT`k+jE(SH0N>W4kDK;9MmZNcliKo@CUh_hfJMp4C=o-m`9SY<N+TZi(+^HX)GdhQdmsKQzs5%J#t^|LJqU{YZu}~g!*;MCC^^ZnhRi&8{I7OlYOx6 z?V~$up&;_}Wo};Xq&HmDvkp2kzi8*+iyU|J`%Vny=SEM1&V4^aXYibXKqjHi8}>vx zU$wW+n=a-T)>A9iE$cb61{nF`GBumAaBtkRZd2TGHciAhQn6#^23s)J@fC9?bIgZT z%$;h=9N+pu$SF6-6FZDU-m|^?SU+g;hnq1j+6Vc~Bp)elgg&+)SD=jWO8+AVuNopYfxhVvfIdEL3r5Y98kH}N0F*KhKNa~k$J_s@lMzp!D?9?n1Q z5$YxR{?2tC+3`5?tL<`}jhpcW&-vn?9ixxKT*vl5*R?-@uFpW%r&ZT2(Oi$&ThEQy zMb_<}TEY3nJda|ZVSmUOca_e`Yuh;IdEb3v&hFSTY&YjU+9)TBJ4|ByI(PafNZ=dpq7n@>v+*yYcpB%$O|kHSqKh9TK>c;XIRx z6{F;yqyxrPmV1&^CwbAay%cXw&m>M2C$h>*Dn9{!B)J&xq`(Itf#IGfYd`Scj10g-F;FPk1A>C!AoMk=oN( zVm@w(55~CRfT4912Pjbst%Z|g{43vb3&F^+c= zWO}$4?)^z+(q!I8-NZ&gay3qheT}p;303kMkt`CNCSh$$;=~=Bkwt#A#7cK0v4%JP5o-ZOIFRH6>Z*N8^t?ypPqcyeJNB`8WrzwtNydDIUlfot^@I ztJ>ga;C_jL20sg&8#3wlmiVDLM@wF?dYHQP4J??vI6u@&9*%{>9g zoryQNA1xp2#Hxs`;CeuQv?TMR#UJRwQqmKrbF?rXT3!;f3xQq8Xkj8+j?8Ld5*Bo8 zg%&2WX1Ernpk~V`Elgugtrm_)&DCSHFcZq|tkVLV(iu5X3$s`=Sqrn#X8Uw4oJ6*n zTA0Vt&e6hIU^{+(Pt;>@=fKjhyOXuF0i~PV=~}``Ah^eSO-oxb@>$+4Ep0>H1KtN( zx)AbDh}9WW&ZuD5FyLzi=9Z$G+dYj&k3UMz#~_#Akjm`H#5j-TCno-`N=xMOJkn1h zgC)dAJQGLA67s@bGjW`hAs_X)fz}t!*Z)A`Ow#QK{tJvD_)!X9ZE9fv>PPCtx`&|V zlE8E`i>fA$69FYjey&P9t!?UvLjl-p5>F?z25#bP%ZNs>RN@uYu-A)8J|LO=g<XSkA)zT3ErtBU)I=!V_9( zrL^Z{CxvGw-xGrz7?nSgaxyFjDJl1GdVP@eI^b$URm>XV&|sY?jO}C_Y>rW^4siMDM-_+@2#2FkhH(!W5l+vVmMurx=(6Ty9`B z;5h~k2fVxzIb``gPVm=C=8#R}?3Kz?GKXxs8(@!0ypcwjm(XG_Vq7I=n!2I=NHM)Iu%2}55^x;Z-*!@1Hy+R)(`>A;*Ri_w2N;17Cm zTYNon7O&!sK)*D^O(bfk=MrnDn~Am4EyM|Gdjamoo9mzAtyaTrRzvKkQNxR*q3P%n z;vgI4TMMh)4vJ!sVDR!^aCuYJ*v3XJSnw5?6`=HcrGwjk9 z(v4r1V&_WjE_bRpB)U`oQtV5a+xxNX$UDyoIPb~3FYhsVkIQ>P-jnhk$a_lO)5fY5 zrRyN>eKA2PoFnr-GYplULnEoi8$kV|F-+-3(b#aqYcd~Z#Tc2}WtqIh_o82mVRn?l zV@l^5*7Gn&-Hgpk1*>Ra+MJ=bNKd_#&LYN|Vx~BO2)JA6T;m(1@Hg1n(BWgLm(2BZ z=|!AJbNyTjA4}~v*L+jNf(gTF)EY4CT6*BSgEW~*bP!4DB{G5BHNOSc;QJ>aijZ1AJN zFI{f%PT<{F8T@^Y>l%X}rw-Q}NBb0Kn$&Ax?7-PeuC_|&0)a%|D?K%=zBFHLYR(F4 zzMijP!`-I(s<8T{g6g7Qkw=B!hb^LXcUT`%e=hD`UHSuj-+Ycy_$kZX1;-+KWP*96!N~BBrbiKq7D2R zigV3AS^5j&oN)Xy4`0ngm^-_rKN+Hc>wR1-m9k?7gv2;_kc=lR^70w6Ojfinl_u^? z76hTW-*&H$UVu*4(Bf9z@&xaJSW|K;}GQK0vX#kj=_r> z5Qup(xIU30QrR_xbwhA7UYJf!L$|u3>-WJB0y>0x)RWwDJMdAH-D8HqX`4RV|UoulL(Z&}>> zD|7pobVF*c-X(K;l(|`44|@4*U4A}WSIkc66}QuECG2!tNzG3s*}8%--4=e?ZqjX~ z?Q~m3d0y`C8IyghIL!4`Vsd?zMyatRpH~)*tmIr}QI;*KW$G?T#)K?e7;HC_oU0EV(<(yBfsqEn+{;eR)!RHITjG>%1R2v$1Mo3n$Va(ixyY{zMU*3B=gZSJ>0n=BCnN6BP3f4h50b7d?yj_ z>=5nMvAeH|kl#+RV5L5>U~G+(!-bX}Hh)O7I_Vnj!x;GVu7@?ih?F;#-xv-s@j~Y{Ium(JBht{BeqVPvtJjS zAayOazcP0i=~eg-#(lEOa|32j7Q~Zvmb+Wyvxoiv%dv*@%gd_04r@EG9L$FE_G*EP zk}e(1@~5sDLOGTe7L00JL*(pdS>%~QZmZAzw6iqN!@^A?5}4l`tkrA5kkNJ@%iS!v z4-T8`I7s|JiMaO59~%wi?}_EOM*rh;iX46P|9|5@KTAE`-~10wWV4TaGymjFHTw&o zzqG;8V4rv#W#5@>_Mfi?p72@uYH&S@*wS64!@=bgo`?COnQU->&!n!Q&{jbCj1U*c z^oP0KnFS=lbTfWpDc^^V#JktxcP<$)WfUHtaiiQZI~@f0!mVU~Ei<{q4l$TbV*>@Z z2;J|QlTvdI$zqlc9ogcSOs%Rs2sHGQIO5={%BtS|`&3T{fvHlaBjbpF%CP>Ge$T1? z>YSg-g$&I#1>L{uxc*7*=Aq+`_d72iFvUM)j2E-C+lBAG*@q-J$tRWZr{&Pe(xKx{ z^@mKY>|5hc8#azvSv-Hl)H6mFbntt}?RIjR$9y|{?g)mfXN-Tw#cx201cboPm&6tJ z;&2)kGhDY+F?PALs9_nBgD|A|?2}KZpFQb>ISA9evc9RarGt#^&gxZ5+xE(9($>0s zId7?1`AsCkdwpB$st%`Z6`pli0tabXx^mHSiTGZS8p9-@Kstmo{vo4@JbdhE!jff8 zO>K*ox15QT3x!EbK3}d9n#bhVsBdd;THS~YC=JUb%6bDD?=p78*H>20!5_X6jni z)Um2{X#486rd2GqE^QdPYSDrXL9lnV9}z){<2n;;GDC(zv<}E!*kg ztqvCfrlM)pnTwD6@)6FG7TkPUw4zD8xDhI};!bmvn`FPqM~nzW#Q%pRBweK)(Qy83 zw0tpAKgd3h3=oS}tXL##8pz6e!{?ep!(j^&vrZp3drtkh3DX>tiNvbb%_?dkDG>f^ ziAuud(B4{)(@sk(GY(;-O^a6I;SP4q>EzC6knQU8q$=TDBU1!UuaZ`Y zSxWdbiMEbaGTsT(XUv8Ru3Xj8sdL+kWC!)o?1)idmGlT*rY6Bk!A7}eRSPmq$tL9*)Fn@nlnPXFS101Xn62hL*v;*MuY<*ig>w zpxV*tU3a(D@J8{?P$UzQh1pMN-W7{FBg-yo=)gJN_+|ZPXG1|Mn$>2p;Ac&%k(y&A z_S9wVt5;yb{ePMDgpLrNUy#F5_7AMV`mVE`>@(5H7tCnVbrO?$$zLL;fO;B$d$e5H ztXyG2_Tw2hObf3FozI)jUmv&%2`J-}O8!7uzB>ykDC2RN{DE>hU&1pz_=aV# za`9f}lD*2=y~=nfCVxO)MZP5R@qA4FKs|0n=MR)|4>__YpAY2+c+zmV9Vqi7)F3H3 z&NV1=yhmvHIg~lx$y)A%GRG@l<&h@JT6-d)F0(ugud54|hFy>>60*>FiKw3oC?2-q z@4w|h*Xi))1IBn@XlK+%zo&)YFm`IcIL5X17lV^<7q^@8V4mHa!R`~lLk#xof${Ym`-%?-R-44w_GIOOF8m&r zJh8WdR~qc%wwSA9_aU2c<;at~8yJsT5HtP>$Rj>M@t;1+`e z*ulfx3;jIca}~qJ-VTG~yMe!MFvsgXXt4KxfH4NP<$Xc#C4;3e9ZP`m@j-m@#BK%F zv7{~q9-wlL07iTAIL`q?C*j`%yhiDd18+9ioezAO;v!)93i;zt1Ao=v)W^X085|n{ z{IcnIq-nh&T+_yP0+r61iV%;ZfC|WFxdG8 z@KpxKmH^*uu!}Xz*jUt=u^?g(8|=Lgj4_bztpa}8;1v8Y_LgF{RsCbc|7qy)UKoGM zVCHzhx5Y*d{6F5$U>|FjzAm;!Kk=~!Ct(N1pCUat7kHl1;cxLqgXsft=tLg>b>NMP zv8LjfOVU$W;Oh-eybFx=Abr8N6JIjegMAV@*TG+b7aF<`ze?!d!biIjy1ruNz-mJe z?vc3J@TcAYRvX5kPeN@N>;isEdF})b=ej4b+KN9yNvf^*bU%N3A$p>JK3pbac?Vc+ z#ozTO)mHuuz-lXrsiL;x?+24=tK`1{pJC)UHvykxaPSl0iwt(lfUhywhyO4h5c}nt zV0+Q$x4@4n{bFFO4btO_F;D8NF6JeG?MUZ?r-AB|f}QzLE9uECz#9!_E`Z>N2D`5U ztB)n&hryeM?!5y1zVblF;BN*q#vOAQP$uJ2G6s$4gFT9IXM}zk@F|L+Z)%ajDa;|` z!jLBh9aF26=l8&BAFij=g@&GZ78w2~^4oxKQG6G$&O3AJr2gH|ldx^-#|Fnf28K_t ztv?+YzDUe-Me0um2UCGRH8_E~wE9E58n{B~@QbwCHuyF0;o25*(&G$HjRZd4VD9&P zZdY{vIdGF=(9-G;%mb2MZ|JcZz}u8(7Vy;uGcHp4Zi55%^&NwyukRZyeZg;xIJq78NP~lK0%JZzKK!U?rojo=uV|@a_;8W> z6|XOfE;95OY*zFYgPjL}Z#CG%+9`ruk$DO5Q_6EL@P8N_dj!`(X@lK0z`8b_glgPx3X_aEgJba74A#8xz_yt?4E8afnSV2wHpx6~a2&p$*`@r; zfcF?2yATgJ7by?cT5%79nfs@>pVCW#zhp3F7VFrPuwik%q5Ee6LoW5<^)Mf-7L0Ke zZ#Fo7H1K6g$6OS{4@Cb}z+W{ufpb~$W6DFB&l>D+0RFkb-U+~%8@5fn3H*2E!Mrfn z0_pK9fOQ@DM*@#i9`wb$3*>~Ul>QplPVMEhmw~JPW%}7b%Qm=QB{7Uf1K*%{9`G#|&o@y9e`+QE!>__PL1oq&XO0Asa~XKv zRQwh&_V>7P9L%@yzz*dYqu|xR&s#jZ zRL{wve_*il6FeP=ISb=eb*s^~SeM;u6@Lmm&fvr$z+cj~*8oq;W2h1N67L0wKV(5H zvT&*5-k^s*L)=U0(1meULZ4)u2f-Q8kF@a7irIF&g^yEAIk0&oXMy4X^acwrRZKbX z72zkw8Wc=9@X^q3dEF_Pbofn#uT;DfboivuiEmc?1n`{}zDMzMpu_JY`QKMeyFFv! zA1Q_m=Vir^!Ot_&_5t8s7KYzMI{e^hYP4j^q;jaKb)#6`lVeFH_QwyF} z3%4tt4*EL9TY%Ar@KZkKD_qwu=1XuL=vZqJzEN>A=&-fWiD7HO%YpB+@OKrXPxs#~ z{G?*)09!~~;ujTP1N@d^2lzh}4+s98g|RP0I{e+jdlW+-4|5ml=3!G241GM&1J+!kAOGbvr=E+=(38;V+6QALoEjK7act_**zP z1QyOHegO257RDYZ{5wHE&BBWmKMneY7KW{a{}s?5wD9*7zXSRcir)oBd*S~x@Cz0W z$Bwb^UITd;(hG3?``z0ir@S3D3HvV>0jp*pk@@F@KM zvEqgJ|1-sn_z%Ao9*+G@#q01Nb1HP=_Z4r%f6SfGp-;k741E%qJE22E^BE}*7pz(T7@F?IwaV;?BRp=K3 zqc38K4OgKUe#^eX^S)E9csb}{zgvKZDE&5I$d$1GI%BMH)oEX(PgMCBJHKO+a{=ko z6<-59Q)QAqNAYvO^Q|#1$X^G#f6MplK~EVM*qPTPl<$2%FVl}%axmU<+Mh?yyc~`< zqGPdU%9< z8$lqh!wbjoKjW<$uikhCc(E>n*Ohot9?o|>{5$bRdU%kJ^|;oP|4R2U-fpwBz<=c7 zaW`I8zay|FOSzA+UwmGT`o*(qdk%a+!LAQi$=dfR#r|f>~CS$E~ zEbO;L>o~4A@Cw@i<~HK34zKVC>wW=(HI6ACpbVKJ5BqI2jz0p2Z2)sS@z#u2c!YJo z1HqCvwH9T{q<-aE2mM@J%h>WN2f{8DpoNFZlYf@HY2f3YE%M0EI?5}6pa8!dQ zJ-}djXB}R=wz2t!Ek?P&aG1A{?@;B_s$p9J?D=57I9#^1^=m}A6EBVzJ`w6CF|B-* z^_cb=+TxrY9qg9}|9gVuZPP3>w$1R79Ao_o@Bryb)Pq` zclR>)zrK<4tQwYjn0dcF-Q~h(AjzOu}&~}o8#Br;M~9ISSPk^ z5FUEi<^**&I=5}u@^)wKdWroQ@?XAbtdkvEx67G3$VqJ2Hj{Dn)~SpnWVCH~`|q8b zHz4X%zK;c)PIEGBcg1OVjde0NAMJSCPIcVD+y3_Hy{95J-wn>f(Sri#UeGr@@uyD8 zVEe7FJHdu+Z+GHC*{$7$3yB?g-GIc(TE7wFl>RW*&9p(_-?15E-pnz>7Kpu=gB%C4 zUCKsW%G+o!+6}T?vD>=dowQT!LfnYBp9cvA z6I(yXzvI3~5nmAY-Za69Z5o5RsZMhApgnsoN#P-eG=E}^c$zsp*zx$EI`2IO4+Grf zq$#KNVJGvgbL2z2OZ{bRJDok~o11~lac#z!WNiBx7w+YKMLd3AaRonbOhF%$?#!@b z3i`P4br#t%1^HEj({9HU^f52ad3H=eAD6k#Kv}E)48U9L@PhtQP>!&}3rZNkyM#T4 z8zGK?{M_Z#@C}z&O?a|(Hq;$X0Z7Yy)$!hK$Y40Qx3wBYr+i~^@Oc2pg}>fTAFBbr-> z5FBOobTqN{G=^Av;a5`fgA=7-!VBW^#JfWV5``CJ%60D@Bky!Vl~>PR)n=GQ?>9OU zoGHAMG`!#)Fb-4xc^|7x1`zNa4KEnrgRVcoNX9(}eE)Co8j&o)2AoA=&bHv&I7OVq z@Pfg2gp=U~`9&C1V0gjc0YcT_LEv_^xvc5%Q}oABO?vsx6WwG88~(EK!cwJKE#9<3~)W-yC%F~@B%e6;RS;iDSwRN{|Weq)*1X$;ISsW zVDNLcooML4B>!}SUj=@6rop&AiFM33_$}x;b%DX}03W;1;9s+?2`>oujxnT)ytxdi z;?Bbx+>e%zZNQ~Ztb^+T8-3ux0ppMLU@4IBf;Hx`!oV93Ew3^$;Iv?3z-hsR7Yw|K zXj#J;4iqp6Z)ckDf`NzK(5V@&HB(S?kqIvtc+*&8!V3l-ww>U56J9Xj<67=hb=n3_ z>C{Zr!YtO9SaSihZ3efP@PdJN64_=d+dPiegcl6Fv%ogTgcl4Xyx=<;UNG=Bz#;F@ z@PYyFeg^kxc)`HiijkkJ;ROS48|og@@PdJNA>_}E)frQs#H$RLJN|ZoxuvM)b{lE* z_><)P0pu1Ja5_K8PfYv|DlKtHo=5sgbi)#Iu)Y!!SFVQ%FUYdQmBYy6sK@8izHp`? z2NGujep8UR)L4aAUWrR}VqIS9)#${!hoI&v4KH{yRZSc(0!jiGTTS8x6;MYU3cy~I zc)^4h3>b>UInRU_JP-6=$s+fhUM~jTso1)A83BCu4$o<70b7VWFLW*JA<12#Yb`|0 z>($DJ5jr*Dlw(UlyiKiXKu_11@PdKYh&IPIYfTdiZCY5uf(b7eNO-{yHfl{X%;jv= zLJRxZp@lEA&23s(#)1hi7^Ii(1$oq9tr z3+BnFi{QDbKhO@TZPIUM8sO0eVk1kPY9OSiCK(7jX`I5$GQc)NZ3i?l8u_G7YLZ49 z{H`b`(FTt+N=vlCBQ@~f88G&d<`gZ_29Hb_{?(+Llchu(Jkp9bc%&JaL>oM^#PF{t ze-v%-14Gd<)o{& zR}ibVR}vRQ8@xJ-HaK1tJ|8^awW1Av&H?4eM_TLg6$_=WUNrKl-QWQ1e;H~$e6yQg*YuS2TPWr zuN@hQIaq?trf5gj>Bp(B*-JW&ve!sw#feT5FF3_?AsiC<* z%N`2%|4Yua9Soi~Dzhs(Ry*0D)XH3-WrvaHP{V^=qxkoOvn%nlq3j6KhsqY0c@`#1 z!-U1xVuQ;(i8pA?m0EmWSo44oqv{8wx@d@MS33Gs z%C2#=>?n39K9@b55MzhW;Z<3Nc`BK*ugMg8Oy1+hAA>TqEjdqyTL!a*{#b_dJN*&v zSOyD*?pQX6I1#pmtxCRQ+SXWYVK%fibeJtYB&K2EW>QZa63eah2Ml=z5}XOgA&7B? zLJ4exkCO;bh81LL&?n{)tBCRS^w%m3bW!>oiF1FFqQwQTSaxaz%#K{O~ zAAUt4M+Q^Qp(6?u02Jnd;qWLM4>!E5}0Q$4HH_Y#yy$B;V?YP8o-KJ zfS7i!nUX1ok?LLQqiW1ZgSoOtF;X7833iX-kK72;l~@&EzMQ-UUO_05Qhzyul{`xO zN6=dx!IDi8EFF-C10z_nC4%0X2$r0S8>AYb?tjD69sS=Oo{o#Ca_<;*Rd$TJelfQQ zq5i^1bk$*my8e5|t{Y%Slq-lQw|7vwd=NJeYjse*dlnD1US7SxD8;%M*h}+~IlE za69hv#gtnvYlLr~9f4?t&D&K>x!Dl|p9s@~i+iubUA7kiYaCn3UWYgBroAXw?dD3q zfbO3a zVu=t(|1H~CFs$}Zxl&GgQjT4cwMrq2o1ZxgMz#6bD43XP^YuwyIL}+!=((`*zW?K9 zh=&%R{BMw^qiPDnp0H@bp42SGhq>sxB?;2Rk^~<>)+&{d@aGIe&F-T)&}*`Df(@B1X~? zQ-^~6_#9$14L`W5d1xh)C!wJozkuqC!cI$5Lo?#0w6~mvutK0xZ(M^R5o#DthcOFg zj-Pv6{j5pH2@A(v-`unaKe0z>q9_7Rv;6YDp0N%X4E}^BeI)Yk$wje91!WFAo^56``NRiI75h=)Vi#tsZjoL zv&MZX3Ikz6Y{(oJgas-HiXu)CE;y{Aj^*`HWF3jH(b8Vu(77m#f}@_Yc=asUioO;9H_HmQTs9p zRU;GAuHHd@`k{mgg5!lwvt*^j==%IIPGp@nIE_tbwlp+Nq;DdE1taD}F*_v2kJGrS zHH;-=MpEB`&Kc6i#GVQxPK<9^$|>I~Jdg<}g1}UZ8nLdL+PRx8GwV&~0!(q!H0#RQ~c+NJ~0nNV6<#?G{*^8^7qq%9(4Yy=gd(4vT_s0b)L1uck* ziZd!ILy;n&JRd4m@FDqsziY33&b~?7Mt$$6@BiU^a&x|W?X}lld+oLNKKI?vr{^CuGS8)EIqlzBl_v(&u`zOwdw(7zR*?@i9+&!V-b>iR- z|9o$i>;)s0uf;w`vSrUgV+&{RE_Mc5x_Q|uY!e9G==o4f_9(Jj!PvRe?0yziGOZp? ziKcTaJFoR-Z=9ZHEncx|sfTZfRc0qFwp29bu4KT{e;cIdU}l*jqrQ`Q35~r>XJc>S zO5JfT-b%@sR(9xGxLL;Cs`X1aOirIR^E7uSDXmEAMr*UO&5|N!Wf5oCuHuGYtJW>^ zR+37Eb=F1=cI&ER?-YaGb1qv3Wn`Jh)U=$Nrs=M9W;;2%cbVBJX5p%}8@6u37CYFk z%I*Pn@rL!>6N|l6))LkVV{H603DLDamN>({N|0wRl4*1kV0)~sKGjRPI6BiEQaXX5O$ z>(87s7kW8+49R*ubK2|~rsHKYz`zy1*FEfDP7V%P<-LWME?l{0A>T}*)AT|yDBEoI z^pj17SZlO)Nu>*;4R+R?GJ3I$@hqmPXP!Nm7ZOaa-~Zyj%_?7sW*=y7hr8V{`m3>`|2UJrEc2 zxJeuzNb`ax%^%&#+=-U^ zucQ^54BVzQho&dCNJqByy)uF#gL5G}ux(igJiySozfLgHU_Rv*puDte9Po6dqy9kq)PERQ z`xH-ud3@A>{5*nf2In*a?=?7pj|87IIEgj}4=NAwA%jx~fpOc3a>5GWXAEXte3(G= zIRjYR;(r`i+rnpl=@Y`U3HUsN*^cmHgA?$*aEHNs=9{s5sdd3AHolyM)>~0ed8%pXhuAu-ZBCS>Q&c zzX*JT){An9+YIJYQ;B;F4&f(>FDkwe_;G_%;7$C%U~eAqvr0b%{F-94FQNJ;uY`Yx zO8*it>_y!Y9|Z1gaENi49Bgnd+LAog;N+vgQIw}8>df*%0>g25qlNzFDmH5VARCQrH+c!j|^kk6O^(f<_SUCNJg zvhn5WcMjFrq$Tk-iq?oCGdA#})5 zTc!2@tF5>vP>$Lvg}%*ETje$YtF8F(RgT(<4`1dWPug+`@cRwUxfd9HLwfKtV9W)? zTsN2}^hbdI!(i_q@HZ8I9{48)r=Vk6eKk1(c%Y%DVcWFryBC2`H)W>LCu!|3?=QeV zH1wQ2VD&N9$-U3W&sfIvUzO(*__Z^sbjabJS)%hY;GPC^F3HvLl1c+ZC-UUH0K7xX zeg;_W5Wo+)Z<5HV2L7<}`~q0Va*}lTy2u#<{AGjFl%qDuy%zY#hMv0*_+^6`qmZlp z&UjPqw;^=}zy*qL2kvHYxDB|kmVE_yn8Aszz|cd=mIBXE{_()`4GvZVFEu#15_rAA z+*2y=eFmps!#rz$w3yysp}c#VO>WI_R%MK zZ^!)k+F#`7V^<;*{Q2tVtSf(z(qX6ki3TTL2cD&Lj5$76#j@!%@Wsk=HSl)jLBHkW zLmuxs;5!XYfj9rN%JT0ZFL@6hM@zcqBuz4_3IGJ{dL#zCJECn|xF zCeDF93Th1I98)ks>8}Exru3P>3k>GVh6;3CFow7QzAG|`b&N1>vS6d32j2tMHu8F* zK-a`1Y*t|Bx}O1S8`GF83ZN5Z@_M{L`$)=aA91cNcthoLEzMDkFR^2#h`x{+oeeACV6q=}@8cPXfax!t)j2F^Ycx4Bw0RXFBwGir)m!1e2L;Uz-XK3 zd=U5+#fO3KHyFje;ujUe#>HyFM{$(_Ihlny`bXmxuDc(S2~UjjxMwngx4 z#qg<)a~zEJNP8~_{Xz%BcBCgTKXqK`V9e2^^LtXq%??K2iJaR(-{Ii*D^7t9zZV|j zeFlfn*Y3+i%)|OHe;X8xxrp}*A`JTqeh_rnJ;FT{!%z57mCym@+K4)rqggzJ8`f3C4Ql%4PUJ#xqfY&*Alj84!zDqIXz$U_fFYwI{9sVHn zL!e_^2}b?iXB003#u$s}Uvua`aOfB#!m|kc&pP<9!~dqk|5i+=nWQZ0@)L^D|9+u^ zJ1X8_#+x03d>CIa?CKA5F#MBrKZ8%TgE2OQJ`i;DeT3n+g5m%ESq{d$A@tFpLqB33 zKJ*g|*?hJk!thVwF9sd{8DaRRV9LMR!PhCK{M!s>tUsT)5Sgoi?^8^k2bCZG>7!pF zndle6AN~ehTvQVmZMAho=PV ziuMuZM|Dkg=rbe!zh}>ZP0QCTb~X>dT`hC#ti{Fw{K+Qkw>6Xhe{j11uP1CSgOkR` z!TxX$Yv(c$i9^ji79Yl(+@n1aAI5IWdZWi`SOxq;4*09!I+LtGe|zX>_Pfx@2cPk< zM!NDicH7(s0P9PZyhTV?;X`@wVacOBtgRvsCmsRX+Yw_oI;>rmgF+qZOisl< zQy%;}l6NVvEd$sY^D6hqjt-lLwan$~dNuek=S7F*yAl+q-cz=rYZigVda*ARcvL5}P zgc=8t=#Eb@KCFx9TznjP16Lybd3@|4^6+cr5*xFh!7<|Gs!=0GR9B4{mC00*p#Miy zRh@FmDaao=a&)!O7v=3dZRY7d9v_Mh-zx!j2t%H1WTu%BByRssXjFaJ^X}}281S?g z&P#h^a87JbPy5-feuyKV*4#Y&YTPVOH#ct|G^u3!;HmYDH=lKfm)ZYYi7S6+cB7YJ zdB&b2UY~LJwY&20#3;%ESF;Y5G4eZKigWQ)*kl)aQu#}^PoGqR81*-*7kM7#)nq)s z`VueE1Rkba$gi$G()`ZOYpUxYe{>`t&(6*p1o?wRej0hD+ow-2As=MF3E9n*)wrzr zo$95{&HHekyEHXErg^?g!*DvucuhiVNTN47i{U#3@LIp1Wgz=#&ReYm*`IR***l94IrQ*vY9RX@ zCy;%PWJ@6XM>xx9Ap0XCSpwM~`G*79AJ>SrRcR=H5k5bbR^WRfD>8xXGfYJ_ApAcL zWWUzbJOi`FwdO}q31q+431q*>4P?IvSK(~PbQHKv8j>Bz{tF`y?F@dQ@)ojHCP*ob zUJPC^;aTY=z%w+E{Wi!9{)-=#$$*C7s2j-M(@4gG81_`jmx*KvS;z`xpAiMJ_e8fH zKahQ;iEvAQ8M0Q!f$YJbP0UpK5!T@ZvQIa0Qt5Bt0`kF((dk>j&zBqg9b69tCQd5- zUEp4EAbap48F#_59))_fZqwL5ykUjYG6hr?d^_gk#uYm8XH~4wX?W>$X_6Zjl z`Vn;2=tTx|QE~#=S7Cuk@Si`O|7LQ%(LnYsMa;sNS)4SG-A3n*6RvK|GU4ib6K*2y zCXN}%zPd!&rc#<4$lhp!bZ0Qf4PaaM>FU4`C!*Y;H-axqXQa zPkx!4xL`>IS)ATi;*LokQE91OF^|-f;;ml^WFIL*C=O(wr1MP@`5MSx#>)X4$iBxI zLIT=j=fCy&A|qnU1KF=If$T7M>S@)`2D1ND zy8<_SysSX>nbx&1hvfX!y4E7}@{h~43}%$_-xM0Vh|I^ z&h$}9n?QD?(@9Ckf$W2{>dTNfNG%@Vk}zFk0@-^KN|`v2eVV3iAp7cG&_M&)pH_T1 z2og}q$inpdq=XyD{yuzlPdAC@iPNR8qBr=DkbF<poj zTYsf2id9b^GgjTiYqpA2pJ^7c{PR(x?uF7SR{cw6*^pTEFX_rZGlK%2#HxRbhRIzl znoF#@*3a~Be7AH zQR%sFo6zXOt;A;SWmJ0Z+a?yW5S^a;wpj%km7e={9F?B?b`+IqlDq9`Oo*m!|jrhkF^pXVm#@^=apKx23XCx;P! zjS-FvBb@SZ4PfLA6xCrL$}_hCu)UNyriyMy%B8U&=0ESBJqX$!(R|O(9SjSL7Y_mb zzZs3ppVvIz6PMWHLa{tB?18JkTks97u;*}tsc03VS8stXFIDj|M*~Ml_O0YJ{qVi_ zLQ6a2IkrMP!h?9n|JR|VaqQ%T?zOl!D08Dq`?|rR(>iB`i}s5{Fc}b9?j%d$$g$i2 z$pJ{F8O=GZGnofEN#s_z)nrvNh+(F4{CV9L4+7&@)0SbQ z*mljtkxqk=t70V)ZyKvem$Ziy1DPG|ctVB~mJF&6SRv8*n1zm+VT-mUEo|5sSK%+P ztkF5xEW~^rp^LBY$N=BuZy7hNtPh^i^rN810>4`y ziJ=U>ikQft=fE<=JR;6f0vv6eWiP)}neHT0Z~p5upsZ(*bR-S+OU8+4H!RYGL2lTz z9HCvC7Oz`|=lPugM-%SR{@6xDHT}BuVX&$C#D)?ccPW#J07L(Gwd)5m>_LgyU(@or!0a*V$*Yo-oi(j88Y_ z)Anrz+mQ~Y&C9oB$K6RmeP^~r>x^t2TqisX`HaHs+KjKm)#eD}NVe-*$J6~YL37!` za_tL{lUP=XjWc0!HfAa^ZyXEv&ji8!1A%Wg1n{4Ydqce3`mN%3moDau;oBMUhRzy! z+_1NQFxHLXl7DY-TNKIGW~5qMfoW}op~XRG|Gx<>!_3xZAX)o@ojGa|6x2HEti1te z1yHkk?bl$TA)Ssg z0g%Ssg!n)jUpC?cY1~SP52Wo^VId;jG0qiv`1%na$mdPB=s=qGu{uocgd5IC<0Qu- z0Jf*MlV*DcYPtmZIkJ|cyJfDHRoI!?1xoamAg&WQAj7^Vk$uVc8>VpYfVvBQ92k1a zb9(rm#`>e@aLNr&Fb8zp9w5KJ3Ajcv+gE3BcoFbv278YIqm1zP1D>yR++1Kh6zK`J zb+zI$;0*>R+1~922M2+7D}5v|Zaaz0W?NABY@pShX;X28Js|$2NRV3Ch$yy<@d#N7320< zu-sr+%?mavKibWmhbhxX9|rpk4zC6Nl=7gx!50lqkmoVw|10qK6i)}%wj@r5-r5%0 zJJhz&ufx77XD;xWS{64`g zojeKnMQCk49N60YMdVrCnt)X|{~=(tvo`}+?HpnrNLV{x0IYTn;U|f$TG!*idkju? z0^Vn^e+}^M1_v1AiBBs=zb8Cqqg!e)^gNVNsI%=bdf)J1o#SV<0jw_7%cC5L_5jD_`aMwmHsv0&nf*p z;IAl#ZE~Qu=unC!se{2GY|eNR(v$F=wC%gcffp+M72s_KbAIJd?IP!8;2$Z^PT=PZ z4sQa64~fjxz<*Nue*nL0FmFNeect5ZyK8exl>dXk=P3O#;0u-i9^fSgGwzk|-<7g2 z0jqt&jlfqKdNLmvvP1{?PwpKCryd2?eov8(GkqfDh*D{Fb~8xWe%8eUb5C1uF9_;H63*3A|qUSypupehPdS`~&*)$Vb1} zci#yE0imkgRyPp ztk$y7v7kZmr+}|D{Ji;E(1fvK`M;nz0s0s9nhN?C9MZCAM*;K~eVzk;+TlT3=zjnm zV~P6ko!|vXi*C1r7kx~eq)~8K`|vtaFwVS&jc^CW7*F`=KC%ygf)ZPy-Ta*=!c~fA zf)4u#op`+Bdf?L>3||$VMWDmJg44hY6~l);*v{J1+pL%};afr{-l3TCuXgZtieYEI zn@jkKu|5f21dRR=%z8honDxTe(l40LyvGy|1;!Wyj#jM|O3!s%Zmg`fS4k6^YJAHn6o z1&Uc0WJdDQe!-+?oVrjZvSEc&FYFTaDf}VwG1ycve96arXyyB`gUEsSpl>WEIKwH6 zGR3y-u5QpFqC*EOhjU*%~R|6u&>$%F+s-=Q3We3Nq0{66)6 zHzeR+78Ag6#=eLD%YnX?XZrbQ~t~IjcT@Sm=1I->* z-s2!R@&;44DtsufqvlaRT(5{c=HV#$wKGqUKzaP&I>hDc`4ZAt|Dwb4y$*`i0kBsZ z|LP+yqZ5;_;N$AI2I)okP(Rw7dDM@(hWO|)_$h$5Z3<^w7tcXV@3jC~i;%{3qud*! zykdNE@p0t!ei&(OJCMr5Ot$IoiV3JWrOLz#v?nIu^oB;(#1YK(X`ol$2y2eZ@LhFq z{ApuKcJ8U?bM|$+^1L*k>Bsx{M(+ai&TH!Ue1C<5mu;U`UAaBCw7zLF%K}fEQ__^@ zC3c0l8Tr~I$f~Ym?7*%wAnO{uRF}98vi8XP`+6aU0OclD%6SmV=6Z?Qjb3KoVb8-m z^N#FWBSPcv}~#5I`>UiFh3yr!vM0-rQ!e$zlW`yt4jx*^?Eu_1wv*W{Tvgl!l1 zynNzrZ^MRfdtn{UL$2B&?+k1_sP(~r)vgy z1&fw``ZJK5*tV*)>)fTUzT0c5SFmmA)cS2-ud0WQHf;Om^pfpoj4YvUh@VL8>PMYM zRPOt_#A6h1A6Qknec<$xec#6Gv)*57>^B%~&!Fx7JjP8FR6{21E`9s{y1Kfr;*}lE z&96`VF!~!KjpcVu^U^!^*41tAKcj(tS$9YCk*19F&l9v4_#fGJNzcn??e;R(pV(is z_CqfCh-U(`uk`(qZ*0K(AMu{U0)2O632a?3_eyU}^_5;?$dzL2n)D-iP_3SF-IuKfWKc7uxS{+b({!Z}@94liATr_)Kw<%sSqSk-?Lz<~N9(Ps1|r#mLY-(slTE zoR>Ym7b9byw|y^0=Diph1PtI-O7LEc3~mh!;IxszU4Gstz-3zMy%-r7XfxWoT^ zjEqFo{5n%cZ~Lc0W$YUs@dig5D#MpO+BZD*h~Dt{`}nnv9gZ0)^C)i+c>hqS%%e`I z%%e6`M%pK#GT)bI2=m6uf*ELZe|}H(Bvj@!16PB3rh)GR9Io*(TSX^{k2z{Cb|gOL zs1qM^)QOKd>cqz!b>d@=I`J__o%ooe8gYW#Fu6yg_?XX`O7Rs1ZyYmtH?b2RV=KLq z^e8^2pJBe*DY(}ucnz^?d#w~S{J6Q1d(?@KvD)q<-HDH}+T!LmwdMU1jgL7yijOh3 zdA!1_@MFwYCqCwL?pquC^}|U##A|KSkfm;She$W;hjOR|iK@yIPk30MYmka?3Uy|k7lcHxW_z}TS{=< z5#U}lk4iM=d;=l<7Kr*7L~&O)USQ*>!grDLMi2qyjx?{r^Sn`pQiwIQ;7g?5Xm56) zF-Y@mZX^A3qt04X?X z`Oojc|2XcFTCN^POk(~)32;K9SGJnHZIVA`;Tnl?OhsRtU@+LHpQ>?8zdbdIWBRQa zFu0YRCXVT8QyT>--ynsfm-szvii4V~#o_QpUo(=LL{gpOp5@fP!=%VP(b7Wr zO5}G%XTa~0@Vi>H2b~o8b%nn_Dg<{f+%%e{)Sb<12j7di!c_OKin-!=D~qF#OyE`a z>-;+VVLCrQdYxa)%xJ3qW!|*T2yF7QUgp;#KC9*H{Ngw$MqvFjuk&+bvbbUlH!)aM zeBU3!s_fhTJa44)uD?;1%o3xsUiEh}Qg{s@3!maff@S2rf2X=JTh*~4aDxj8C#Y;p zTsA9)Y^?jLLd+3ygjg2aILAP+@%Wg{=rJMA$34nQsGC)MVirY)oBneGxt!P7WyhAa zC&Q7GUD#H}mB-e(-XagY?z{Kek>SY6E^K8wnmF&(J0aB;4{vmW)GX1lKtwv*qUh|@ zVQEgmcD&$loh?SYoGnX=P#h`Q8J6Fv*^h1LP>)e8?vrd=Iz|pJTj?kg7qC^QukaeY zUbVeqrVb6}=bpZ)78$k(pFYte_eR6(6t`K94we*d-V#^iO0hM@x#5itt1a&sqzw`` z3DzUL)G6(h%3?u$wLP-vPSGeI&+6zAY_+3Y+*jctnB5!?jTp(92jV|}v=)kr@K=n$>%8Je{>FpRSj;5D;mmQ-KwgP{? zMbX(c*cAnFi;gi=oa*GFCN5wlIs#kDnCZz6rCEJ>mzI<3Okf>aKCX%6kjq=3XEc3S z&;N_3P@-u4$KQ))J#jSaCImC!YYXGn{{7wzil>~!;ldt%*BJ;m^;4A$I;~BO8;{`B z3Ff7rm8oWhGJ*ie}j+4^hG5A*!q{Z6W?D(e{VeVtb3a38_2|LJ9xqtLB8GkwZ? zm-XveURGAtH%q`{_>NvRylSPXK6TFUvU3K7Ju_0*ip*VQ{d<=Um$!+gGO3BZhgadv zwh4a-{spP&_#b9)izBY|CC~3--&Hy#OPxP@{>WZ+EDS-zEzhKr%Aor2sy=0?#Z*(9 zswxjJ*%EfmWCh;t^Zi-9XO$&_q37~7rE@dG!%%E!(a6m7gE5eH$`F=|Z{rlgCDKG4lmtr0(zE`S{XD&JJ5uZHs%*iwGa^lJJ=A1q4 zoYNN0mDlUF`9jQpS_3BIES!-DS`DkE{i6!P$s`5U}|E;*-4QsZp zSh#Zin&o^MD7(zO4wo;+ZRhJSUE5$9|JMf$Z-7RB-wP@6?o=7P|IRO_JXZAZKOPW_ zE92wE1oML1eRPKx-fo%~;7(dD#GSNkP&E`h_IPGeQE~1>4==Qwgx6B8z^g1LzQEU5 zo@Ris)mdho4^J#AorD5+1XFGgO`!!SG#T%|WUK9REXc z$!QgL7cLnSz@4plR7BjM*l7H`^8S>?rZv1HkB>`e=GwvP&kbnYo4>x7UsvDPSo{w}tC4&C`48adz- zos@;YS#`E}gM)8&Fn&vjcpxCc=#L0z@U6!B4_vLyddE0A)H*uMbmX`)(SMN~^i`z) z8*y15^;#W#d?~k>eHE2OzeHsrKWaPdkZX0WbofU){H~q{oi?KENwzHRK16k0={HX^p->1jtyovcP7e4=8N(|i@N8jD@LkIE%SAmXSZHWCl zfNK;_0SG)|d6FLm-fl2s@x0wi zzYF+!rH=x>Rq>~RaW_Wf{{r}4#SZ{~!Qk-cz>gT5PIJt9X z0q-|B{37tDln3o)96fmwXjAZ*!2!lf@I8a2E^SK!Ixvo2WG(^Lws4+g9KFcFI0(;F z9<-5h^rSNeIoxb8W9b-2FLG`GzE*jlJLBj{4`<->af2Bb&NzC~lM8^Y%`X5}oAaG_ zjH4Hsj{>W1{!74WXU1hPj$Y)C1GaWP2&{Hy+%DtjrLI1}dlaMXiG3>nOTf1q%wKsE z7z5Td1v4R{~pG!9N*CFZIIT8Anf?GZG)QRpK$=)0KWIu-Xdu z!Mq%`RcaRSTEi3k75EB+lYa#MfWiJdz&9%{2EJ1<^vywgSg*vkens(Zpg(DF0ybkD zJ$d+kUB=N9r=|d_KJ0VG(F=VI@HT_Jmw>-vaB?Q_j}$ipA2B$@Sm1j_SvCoM_+C+| z>s72*YB&G8z|foY#6(~nFDclPvGckw4d9?;POO1~XPL|1zbI2HvCm7-#wWl;{1x`*E#BJLAa5JWd?~_(T2!xaP6+ zZyS1Y0O;s18)KXQOQru1bm+?1bCL5myh=|o-z!R)she<_U7&Q>xS*rf1s^Lw+l2qe zz-Xh$sRG7WC7n;L71Sw)4h7Q`qaO=qJN)M>9b=?mnPQBmg7wN%54>5g!JuftZsoZS z7-L+n%}8%je%PkqCb?^7j2+?^5`0Y7lU|(@OkPSlKut77XyFElodU{ z?#TR}@;m?@^s&@S-JVtYo4~&|^ze3I%vrM60pp+KZ3qLXXOE7i5-obY4KL|Q}UU-Q2E2jQ;JNVOzF(2@Iknj_K zQ8D#L8KDy&QhXQ~{VsI&#m^LP1AflIFDkwo^j97Hx?QcQ;dGJd!W$|{ZA?V9^m^NjJ_0^=o7BZcHZ{CqZt0;|H#2u z?}P_3{AV3}Sn-pfzvAHEDSig@zbQsn;5SSoCj*>zaDifsp#bAc>LSMY61)Mp%)yx7 zg#K~RD;1+H0p~u{!3P<*mI$5;e4645fH97QPKyCxlvdEejKhi!n!It`j;j<~qTnfzcNcMqdbqZNh$vVYd)-jnEr` z(H9X$UkHY6LX4dVW9$e%2>R&`o~{`Bhi5r>o?`fLc(LLNV2mS?GZT2DgSRS%4Y_}x z@DT4(yaxDc2SY#MVY_ZtOdW1f{4nqV2cr*!{}AX8D6R&6NHOa|KMKzRV61JCeDtGW z%Kx6?*MXmQ@H2|v0R2S=zicpnD+u3I`n|w!DSj2WImWy{Aay|w?+-+{v%z%Hg!ZZ6 zlavnmyoRvX9*I*Fmx5mB;3hw813Nw3ZWA}srUk5^o7v(13#k} zvJ;r!giapJZxPR5<7<)x+Ar50XfN++L^xM5#trXp2%Q+?%U-MS+C^|0^q~&VC&`&b<`FR(H^1S3|ycXwq?DM4!sn^&eS2&r#x;i^^raW3xgg6&jp5Vk)ESt zAEus>&b5vm>Ky&2D1HWVraEnzsrWF~uOGyE2DTr;9-#lMK7pOPNWUenH@H8pEBK=$ zzXU&Z*}ib?fc8dov^TN?+7;2!E?Y16dWz`KKe7Yt644jL`tW{uL|+-}#%qO$4*jLS z5F)hs^0iwQFTr`sCUahC5x0o)Dwi$Zve>I!vU#)a`6L@hIX@3MFOQCX=dnKwwak-W zhFTK!N1~Qwv+Gp+%4+x5B3BiczE%{ijDL@++ziDf&F5$0lq3BA;%lwtH&pr-#=9Kw zovg$9T^XpvSSRE-79Zvm`R(vTd?UcuvfjIlX!)N|jIqo4fpZ6sAr1Hkf0g})NaqLh zgm(r$uDoZEF2~0n|y0y1A?R9 z&@D)_UbdHVn8)*7__*@!L7FzShn0tGn=E-OXXWAhb|mi+U`Jlqi1cB6>|y2MIw(ut z(@5L)7Hb~$`yoDQeAKTJi*U)ze0x}VFM!a3Pvp1c!!>Vv__zdQ^@3R+1fZSqebL&*F9fz_06YH}Ohk)S7oAfZ!i|}DPaQzpxV+yb<@4t{)Yd2>K;<-LJ4$0g|yut4vjceuT5P3_MEOxgt zJK_7yPZ@d2$k7=d?b*xh^&d8}y3tZ+g*Vb0j{TROk^Prm^vb!X)J=DKy{Z>s zjon)7XKi*cwxy$A`5x3Ec0--8Sw?MkpXwrQf<803hnChq7kxUFeKULy_sH^B-Z{Zb z580di{lwe-WzgTR-i5wge@o{-e_CY=-tO1l>7{o*|KGCj8OzOYKCN2`^~-T$m-fc&N1sGAM16>9<$CNw|O0~H{g_=cf3`H{oQJ13?0N? ze2K3&a1S}ks;PrcnYlv;gLmHePmFJZj$@y1erNa{sYKnQ&GmI3YW^YmYYOeYTgS?7 z*mMu6->WhI)S}Ppq|XoH!J{V<<54~w+ido?o8O!mzwJ`& zL-(=fdv-kc0QD%}`Heqej3>s69Z(m~dme>v-p(=RJ%jej+(|w99VnLk`LAJ4*o8hh zgg!yLmJez);{ZJL{hiH!EOF%xKhU8Wyxz|DzeNA=8gIvqn@5|kc6r=-gnl@hlcRA3 zABx7+&S&4KCm&^rY_wzBmA@{bd{-{pGWK0x+QW8Yyj5AAU8i`7I|q3M!?DQ_+IkS@ z6!yM+a#xMlYsWVpXxQ2ByA6$dwa$ak2lF7yj(wl!vyQzP&~|x+pp{}g7CN+oYY!uD zk=K3RAo}5qhMljSz5zVkw464xKHl2@?u>n&{STwL$Z5jC|(>0k6-WO}L*YurN8ox8;RL4W;AIL)g0*n!ypvGwq88;YXi@G0t`R8L+m@@zc%7&pXx&Mx z$uu`=9rd7qQFr87l+rZALm5 za?O66s0XwcKud$x)8Tsyv;edo>?e^AzlJZ@Vy>-_brU{{`L+u4?P$!m)n<*Ab@EyI zG{)P*@Zl-C$LUP?bv69D7UQl?>bVMIZh6m!#zx46Y|@78>HGoiCp*^orT4%K@Ee_P zn2&27?jhQMd1?W4nF(F0RhL@mQU_h8K$of1g)&%%AIjN>I?xtxU!(Y<$aQ66PP~t8 zg&leQ6f*Bx;Nkma4LB@)f_z*bmC-iL-@MmrtlJ$tf^!|t37j)HZ^5~^ZnyU|&S_kq zd7urQzaQ%b%J1Aiqk(lifa@N};ft`{xiHOjo-|&c?R*#%(>oVp zJ>6SZX>GB6(Ao6U zc-@iLfW2||%_~1tw0-(WtPNvIsz1^E4I13AJ>9Qi-t^rkZO=QqVcwuA*vENB z1KakYa+$lRyYvrfm^+Hue`sGH(8WItU2J;NjOKUmqpjJ`>|?fX({2FLV18Zy@Vo|FBOSeFvbNXUkDOeNy`~ z*YaCBWE{gU{ioq)@Js(*oZ*-LbvVN>{WUnlFa4P~!!P}zIKwaf0-WKOzSxTTNFC5o z{j(A6?MMG?p>JQT|MfaHbFl`APt9n4=XKL2u@mP|=`YZa*f~Y>xn^_TlerQ3k0`wk zG|t_&+*3-=fX+GG((hGzG3cDjE&V#BbDiOwZs}{X>u+vk9(cO2U8sMJQ$N3}Yq@ui zIQ92*=ubHH_i*TUIrVpU=vOM8{!{AEmu2fE*K*WL)+YEwEz6Prz+Gnj0xgqWCTfeU ztMotT`?JienBz;i4>aU>xTYz`Iw0$ferG)dzvf&l*DPZXoB5d6%n#_=RZZFIC@m{atxC4am&R$L3k8*B% z4G+gm^MaZ>Z}vy0d5OjyI$n7_sPgz7b>e>SUeR^2m&SJqSy%3a?8*b)(jj|`y^Vu$ z{ruJD!xKN`{cz&$=4ZzqmTR+uQ}K>UeBat%y~ux4bUcW*Wv^+_rTJOZHNuWJ@^SuW z{pS0-H&bZiy}{h0ntI^crWn^%gGsj^u5n!7FprnZKHd7A3F~5Xe}TNX9$sVHHuiAy z(c|$CKM=lx{ny-g#fIaM0p8n`$FUjwPT+`uavd?%m`T%|< zJ_X&`Ho1>N9@O|}Pwo;XA=H!q#~I0)7G;P?0@H*6Vb@TY-aOqfQbJ_DX^ zqC@KQpnsVy&r`SZf+bY<33C!PgOQREd!@fw`s|8 zgU}c+XC`rDC-8bXv#GQ1nZ#L=NU%G6WCRDKA$?TdzMKm|d(PB!5uwUk$Xc}}i$Q-$ zTLN1IXI?Ek`2`0cGx!rfDwAClyxm!Bl+MAEHenwl`BFla%p2yT5+cD{F031Jz6jqv zvv}bKFXv0bS-fzQm-CP?7B9Ta%XyekHNXQK-Ws*#mx+st7cRNj%lQiG{;S&c5%Q}o zzs`oMEx+M;$%ivWr*8rOy4>LJz!g&!27ebgGqf1{J$O0ar_3r~X!ZkYRt*f*en|PX zhW{tvA5drT)4-=pE?&3>Wq;1HQw;r=)e+@k+UtsVN;Oa#N zzs#~LC4Lm1nOKV-m*k&68_2K6Ke!()pJ>3SNUY^}z#XQX01lXZxEoVBfjFIsG0h1k zLCfpSw$7SJE1TpLXkrRVjw;r~X&BJ!OEfW+IaQjNhMX%$Yhng-sx^UWC;g#XP1Hl# zLv@;fQ+lJOXkrd?rfTABl(}uDCe9&Sy(Z?fwR1IrUpmsW7L+0%joSfBKj%-?)J~)h z_%k)N2aNXy&uZ#ww0ur*SW|nE_i*rrrmlhf*@-%1$}>w?H4OM{mboRV=Jqe7(UV^# z=hq-NmBs0OE$*1)t12y(iFu@+Q~`#Nx13%hLnyGbX6kfFLq78HGO<2zzW&{b3v&E^ z;QxRzgx{Z7JJuh7{88Gm{y^khpElLZp{l9VML+dH81tBwhU#eS84)Q@~by!;$kKmG_eBpyw<3Rl}NmOwI)`vo`agWgk|p1#A+t) z)x;Vm9@NBICLYnmIwqdb#Cl45N@h}cX3lG3knU0XZAs_YbegZ@^ozTBJ>JOS6Qk*2 zD&{g`Yp@0+#x<}ECP+Xj)0=7jf|#DA>7I~rF4F6JApPx237&?Gq4))V`W>by*&Ixn*MVc_w3HY+Lh~2 z9o}qLm%Iyz&FaFCr`(^K6(tXjo%>V0D5%eX$;*S^=Kh8@%WagF~1TXF}Ct-Qc=PlpU~K`~#K z*rANLNJeh{Uqy6PF=Q0xiil!}D9kmYi&?DFh%RQa%5?FH%e>;ggvNZu^;wLiqi~72Vk)knhUSW?crcvv^^B=%2zXYO6|dd0)hixGt;`iuaV2>M8y*bo z!iFKm>$a}-ibs$>Of)Z;2b1Og1)2RY;}o2Uf6$tPr?7*~nIyz0dy-`5RSMG}%d{kB zGR0@3^KxHjtukLFIT1=lS4$c{(4qUh;?b^8Zkg1N7fFBagJ5B~%sTcS~9cLi* zs>#5mbs^ph#qFs(<ErtK)2%puouQh?0eOh|mK63wU(WTparMLz!Wwcl-x{Pc=iw ze~@(3Q~npJFyF5Xvww+2&7!U15Cx+u^gQ&rv;m&OqjR4j*af}`3l^t;+=M_i14LB51mm55SI_#xJmj(y;tC1aR|b7JRZq_Ea;S@25c zz(=}b9LTZK57xtN_P|+8`V?fMS!;Nn95k&w)zE7y(13T)M89f?Ki3~Q#Gi-l7i=cP z7MI&h6lN}1&hbYK@#o_aEz36^e5VRuL}Jl}anY45I+{gMPs^g4Oi{IX%`}rV23V*K z@cdvaM1GeBKxa4x*v1qsaW#Po8F&-c<&wMkT5d1WX)Xl3YIQPgjoW~VivQcxY?}pA z$D(ZAOp_pUIK+RA!g=^%7qFf$eF6iQ{167FM$a-c+mSHPShj0Dvv~MnFE~aYDGQ@@ zUCi8dCJ(tjzAAJ)Vtc#mPG;12UU$n-;`{4ilkOc!u)SRZCA#;95?Xh+o6(9Ojb57z zBD+Eax`yfGAIC7AN{ki6^H4twV{LQ^lt;gwjV&(UjELx|PE%PW%x}vyT5zo=1JMs& zrqlai{ba2SMG^{gYd4^)feOwXwqfxy;8(~ojBAV^yow@|hHY6(p4VhiN`o>C91rEf zSjA&K3}1lYFl7_sDCW@X+{X+(=9r;}_cRJ0RyG`PVJ%mPNj2JAsOH0L8}_M%>2R6{ z+nIMi)RD;#J_`Liub!w0Vkzwhw^6TQ>(*ZeCRCrhVzOpDfy5*iL!Sg_r>a%n$9zaF z>8Dl!0am$m@ft{yOf9?}jKfZVcTmo-RaGd83kfK+YD5f2#&A>wmy-87;ay5zh2&L8 zUV&x-`;+Po$ClnKS*Uu0P?&4xw*X#}JAc^HRqW5zz>};G@bZ>EQ1T%y1wvHnJeJZH zp3j!pQnj|!*R&J}g%B!Tf}RBD6qCRJF!Ep1+@TWm6Tq?Q@(4I`P zCx@-t1a))31iP(`unH2oD&%7(kZQVo(2!6vukBqAchR(x`S_2BAOuCg#?N3!O)T+`6$NVqHEu7d&_g9#vf(pfPRLERGF5WRk+88Oy z#{yG|g68n~R_szPA*Jw5kIxmCev#k|fKSOXfyJcsdqLA8JLO}QDjg#W0@ss`>1b(h zeN|98OZe;>SaWAo>;@0Tg6r`gmjtNJ3a^0h>nxYO9>FN)5nUP7G3EPJuwv;i)rt@j zSrIt0qR`cfSd-(v9fH!`JuN-NDNQ`gj_h(K$T?U!NtiUun0SD2sy2PdRj*uq$faID z9Ld9lf{}NHa*|->b#pn3EazRyNrL4p7EbjCOhs~tKlHd){Q=Z0e?U6RAEJEtLyvn^ z1gx5e@E*n2hdI`{=8sq&wHXfigo=|7WRQiV4&RG59ELc5lvFCrBz+B8sn$2eWw^0!D z7ffr=l!vRWZWu#yTt|ENo&uG-iE#+z0;d#Fj4h-$u|G^6IHK2AJ?}0!h>%;sN+;tgsBMgRBvAQW_@pJIZvUj zop9m8!@rkp&HNJjcUnUNK?4D_?6jNzZs5OL`7Lf8={S1%{C%qTYbTqe*9#Na-}MzB zY3!AT|CHaF!9CxfO=&w1)p0tTlVDA}cEGEgBJQCO35Kt|}qwHh2r6EGyBT zw!Vb4)IjXzDu7Nd{iPM=2mcLOcSBYw8g5pjR|vEby%xaaL3%u|#y5TgbZ8QlE-X1g zU7c-dO3D;L(s3+pC1f|C)aULBnR8FvfVpa%WV-eSua^!XYekHp40OvLK{gXtOPRgK zde$n@S8vNR7d#JT3&{F9pZQMP0x&AOVCCi!%BUQ86PnUR#KOh9AYb;}>~elF?<;g! z!8C#RKEX~)xz>V@Sb#~;Fn^Yy9?X-AVfbjcU>^In=an^~M$?6MtnvH$)U571otIZl z_#SP(uIo7M`&nx6Fr`CoSNNzjhyZuz8Gx!t-!hBX;Hx9q4jnaVz{?V~m%yssU4 z;EvaEq`-{*9&3k`7XH#g7f313X@`{K+vFFJGVPzT2_@Xv4n11f1pd^kFI@&l!uP)i zDW8RuUX?;YTO)6SoBjs5Tn3KqZS&;LAd5Kz=m>s5nT*DD%eNiga`5!Wb*-7O+BtZ- zd{gwpKi_`~;@^b$F3&-=E}Iu1+*@td z?Pkv#n4}$U6q{X5Yx|=klVb1;?1yZ;s}vTM@2<}6Z%k1GPhoDn{9th#h|T-*j; zoXx)w{FfV&ofGF~7l+TBiHnC1(QWX1g1l*V_>*XD$=z_ElKV;Jq}!VS$9_MUh#xiX zY0;Opi!#gS}_ z#=mo1g3Py&8Kj?#mL#|-J2d+ev)K3HDT7V}{Wu2H%ceQ4%A)fI?P^b1UMpIwK)FF5 zhB9H^z~V@|ODsXI#jl`Aao}2fGPwVUD!R+1$;pQ9$qxb_37Y1rbM^QQTW5X`fS;KQ z40um>&Bs0S;B?FoqbLa?Wy$U?8YxHjyC~sgag>Zopa8898*K(tAz%jubR^NLQi{uI zuA^2J{a$iDB{fC5WP7cM`pWSQ7o3QOYz3y?6PpIJK=1DPEZzi{9xw}ZI)erg0eHDY*BXEw9h+8l^;8P*&vNe zFjQP9KZ8c20iAT$@eAstJQqXCwG^hzdaQH2uXLPo>DNf5xS7|Y>{%##_6f>XOWB@M z)}3H+r8oR$ls(=AYZ}`_CsbM*Um_5?24LYI9q>Q=tO#b$1=8@zZ zya!cNfjT=6C21r;wFOfM&>kMu--~!gFpZUY_!0j5Pqe?gv)p_NE5l;8q0Qx{P8SQa z+{m?4Q{6F^o6kTJ`~Jk%C{qboBT8PQc07FUT0Ck#1eE-lX{&Y@zJZ}jAzIo+rgapG zrgs#|1!r&8+A%7m>yy=8%xU^R*1d(4JV?P0rzeymo)AlMeJSJPAt`Uf0Z2KaA2!ux z`yp<8VZIyjtM-&_IoffH5%bQ-_W6H7cD-2R%TV@2{%^)kNvpD0Y)A5&;0fE?a#lsX z7)>MjEXaw=wwP66E39Xu_)Yl4W#JTVAHi1rQI?kjCoYQ~8AG4KO{!l;K;%Vp0Cf2! z<&_9|{ar;b}mA-LOu`z`pY1>dpYrxqNx;CBSn|Ihxp7^EdW{}u3` zxoU{ogR${lsB`E9?UDIqW1sA~vd3>w@_Ejc&fptu=Sp)GYaFzI1<~F3b8CJGjULmk zn)}D|QX~Lf@nZ;(n?T38jy9?fYFhwoc`|=fI-ZXh0Rv+J?#%c(Oz7(%;P0IoPdSyf z{W%3kzq^Va$9U!afgSCw6(G5mQ9 zKOe(~Bj~>t!Q$!&c3dAp|MduVye5L3-i~0$9WlH#f*mSiI3R}oBk2D&f*o)0{EmMA zqR#nYQO}}z-8wP^#0$#t#**V-vP^2g>+>x@VrO(dB}b@TJ{nd2jo zQ|PeaDt}sMQgh3^X`P4X<6+m%4sU+UTaCPe4)UgyLY^qMXaEY~iPg@2SQJ-Kj6!Ln z2McwS+@!6(lOr;T)uxL#5F@Uni$Act(WFaKgm#UJC8=LGEr#|`XsMHglyZcuDk%%i-74&agx+YCnm!vz9)ijcriNgzn7AC;`nigfiGw8|UHqeb{PRXWO)X z6)4SHY~^tq^YaVy3-YOQ|5y~Sc?QHu+-$7$Cv=z2OAhSb(eIS1EB(kM(WoM6>VrlB zdVWx>AcYLxyW59*ddqdP5e_po* z`R9tcs*>Iasdq#^sJOZqt?5w&m~>cx;%$MG^Px_s6efA$gf6FA6=~mUDmkLFC|To{ z#hd^>&opIhCH#ph(j_wDw6(DruqTI`pVheWV3U%@S`$p&ADYyi%GSljjL?ZOx93fY zE$excx#{r~%Wsu9tx}~kg5h+V+oHqHpve%rq}llcyPL|UX$xfFOpkN3^q&zku|H-y z{UK(UrTryBX2(LThG$l4e?%XR!y_2Y4_Y6bzcP1t4p#F%vWANr$7`&M_TH z+Wbn7zQ3->%r0hnHUIsyqf`P<<>JOni^E~?&ux*13*)%B?4)TJvL&@A!wSyH8`$wi zPc|ntBoK;Q5?XO&6RfPZb#t_Fpe>WL*_&EEbwF%}oEuvZ!rY^At}XTtNs0=$Hfwkz zZ;|QYueZo^prr*>F{h=4=@G4ojybaX$CmQ3bnC%4L+SzExorrG862+w@4Pm69UqCC za$+6USrxn!>#)}4ZA*uk!E(0IXO4*+OTVY-G5YmiYSW-C7mr;g>gCw^PTY@K-syOK zwllPyVJmF^c#M@z$>Tin$Z>{W%Pd=sqmlz{Zd*zOOXxd_7bPm%K zS~G^}sWCAtVaw&-n0IrK*WBDA=5yL+xq=(<_*09ctrj>ljpc5Ot)aVs`uWcA!>vmquZHu|xb+IKz zXFs0C+J=@hI6XF|r8&OkudzhWftHrtkCy86i6!M+pGaNj^^L1?mSxKmoDpY7v}tY7 z+R(VYWmD3-tz|kYJJ4$3C>vbgdQ>y8L=OjAQgBsV;#k=7x_uf?q-|4enbbxvmFC9$ zEsij~sC7GoHYU8b)|{|uPF&b&eiq$U*p^Vo=_0l^uIbu4%eS#C;t6gmIXVX?$68xr zm_ENXF=$$0^P}@I7~{^hoMHN+))K??1+9re({fuVIv;~ko|TE12-@lwgal;qFcGHf z+p2kCE5@L=fwPcX zAwkmu3!`(;)+Ez3KgzctnBG=9&av6iIhfHFU;N#|GKT4qtr^=pBAS+2G0{1wX)P{j zS{mhB5LCCtx5Q>g=b$b1;ww)_(-s#A@hW@F3|oo2B)ZtVNdDy?K^t#F{tZL>exuzg!|Wt&}zN2OXEZC24Vr3Dw}k~ZbxX`vQJ z+k7)xa2-qD^mg)1YbW2VcJj5)b=w^JZ7dkh1-aQ6qLmhYJSX8d)mGWTWictdycg~| z>X9o~AE|y0$z~-l^Q!yDZfY(#$=Q$3t7ad5JT>t}$heO#d^fjsC9=ZWp^$RBT^glYFl$?n`5z!wWUqIHWtY?`4(EOqH|kwfHR;SXp1-l+JQE= z&4JR!*v7+(wn%htvusm5v0BEq`R3T{=-f8nSy8?PZS&zbxE4p-d}p@cI@TmGyPbTk z*TbNxjcbCe{@voqXvkU)ZqfSexmeTJnX`YdIfr`oZZ>JYHkL>74Ra2x&}Al_^_n#$ zy?1)g0`FPiJqx^Nfq$(9a=LIG2u@1)|6NpwfD<3TihB6?lgA8SvuX)8%i6Sl*ygPp zmTzKm{fec-HZ3Mvwq*F$Y4zUHF&AJbq1CIlY}mBkq76$g*s%Vx<(oDv9kzV&l2sS1 zTDNq~)@92tSi5-X%2n%@|6OG^U%vTR{7~Y86-!&xbxP%^$|_squ}Ze3op-$Uu2_14 z?BOts=keuvOKH4?%a&ifcbv0^|4Gh2URhGgd6M;&EBLb=8LT8(0F>120^)A;JbwxhQwTlC7*%dDku9 zvdT#=-lS!hH>?6v4jnWp7YpGB0{`4T$B9`E zCw;$cc*nqZiai4d#FDLy`gGTinH9q|Ew%QrtlU^o# zXlLb&@P}chsw}*JTPFN|m~qaP$f*sFY@0rOep%V5@FU@Z2_wThw^h#QAO0$=3_r20 zHhebBj1N~`9CoV=FR2W>X2R#TO%L~k7mpks1WwIg4gK)d9hKoNeg@}E))_@tWx~Qt zxH%KvyfYKN4z+SK;br7pFr!adpYUUTZTS3-%#83(6bC2+B@-6ZhCkXdeJdHh;7<>K zup=`rybpAMGEg$%rpj}dmxoVp&xH2|nZDr_m0@)zyzod(zux8H+dHO*w}R(4Q0AjJ zudf_8v1j-OijFNC7Jd+v|Du?Eer0$REZ3p}o^SFqRpHA!ro$fLhrskZ(Dvi}nuu8d zF=40La9t+sk_jK)S-Cd+y0@UN*MRVI$p0~9nRBL%^K^6`+7dnkXEwt)4a&w12QTZ7#SoPB`Ow~74=wI(WCijT9H{< zQc;nbQejz9nps)=K5OlD&OJkz`8>bx_xI25=x{%Kowe6qd+oLNIp@BdbC@{3dt-HQ z<-GB$#s{Y@9nZt*tAh_CX}n>6@cBe~Y-Mn0!@NcFCkMAD(!nn_R0r2CrEmv@=PBHs zNSx;f&umy3bl(}=pO{w>wA|2dP(PI8Z?3o&UxKMCgSj^htEd`2df4dTh4m}v2Rlim zKa(Ht3Fb|mIwcrTT`_V@@Le+Ov+RhyUPOsE_#v#fG5 z4o#-(KU%*u*b&@t9?kuR481S7A$SteeOP}I>$`%L-e3!G*iTgYCfX(v&hoRf{=K=xnb~nS z8RA~k`g+@S(<{#!HDctbid8a%zhw97rIiy$R#Z#~%5j$RN3N?LNtrehW+TJ#6uHntysCpe#PKvDGrnTf1;K&!-N9>ESy>%CPTp<5t~(fA9h6j0 z>gV1ka%IJtP(z3-CJ(C^KfZFrsF4+wmHn2W2XcL4%}s&nS7%dKM|)dWldh$@K4w~5 zy1HXUTjIU8`ZZ3gtGmA2YiaA~>Gm@1Z5bBN?o55>sxGgoyScuxvD3?}ZRl=avw}6e zzPrg=*;>!OOlM8495*uD#4FR%=9pt?LlX}{&vdn{YO8O}uvmLNZBl4zOtbuZm(N|4 zSv2$Vi!zHYxnzM>=OEnC-rDMMBl(qGE!Q@A8E3z>rEPV4Pq#XS{qD(=GPu{&+1b`E zel_D3w@(&XM!cZg+#OS>rL9Y!#xC5^*>a63;Cm;BwO$V&yW6p2a(&u*X2B)1=4TdP zIP3Dom(9K6!psu7*Hqu=W!9|d;G_bwtenmXhD zIp+yZLwgUJD_h%14sB*lOPiNzS<}(e*_7$%#@n{0-tLtinR3m=^{ZMMvV*&L#>Mzk z-_}TqG_TbZiUxl1jJJlqW@5dmZ{^g&Yi(~^mDYdyWlg5OtD(DPO_SzRCewA%+yxhs zl#K){(?bt64!rwzRmwcQrM5HWj*hR&cUJ$lacGI`W*R zGB9l}mpBLF6iS9l8z6(bI=kD~Hgs7MyD3uZbxB%qgK+s;5b3pTslMF{Mj&FK?66LOhZ=>(&TX3~83ety%oYP9&X{4bAm32g%Dd z+6z{R%*r0=3X@Je4r?-+tVk2Wr1k0>bS`UI=1@bEqD(xU_>u?`1<4qhQ{o)Gls-1L z(`qY@tZM4FPU?heX2#oGaEnD}Z)6xp*ETd0<@Oa_M8!=iX-H}^Wm}o?Oi*msV;k+R z#umXzLF8LBi^G+$zA+Y+__Id({gq#?}; z?#}75uALN?y*e9pKy>9{!KMWrWL;MpTUM^jtdTh=COCSmpdV{HTUcY5{*q+gHO;N! zP;2CwOW7zm*^yqdc*erZ7G1J+!^mz6|_Z z7G9p7HF08EFB#M0)-;fI$@2r@f$A*NKc34SQqm{&H!{!WCZwQdE&admBUupOPRgd#Ns+s(^Mwi3g$#>`wGq` z;>R9YH`X<=g2>>9=PBXL#~9}m?ZhQ})aYsJ>1tw9=mA4Bysc?1Io7*|Nt$W6rkh?c zVD-IvSZSSFQy(5})^Uhj<7RATMeAzKZgso9wLy-$?sQ9XN*i76iH5BGZp8W>$=cS| z^S(f)P1ljNgozwroHE_*96)&50}{;(IpVMc6Nj$$Of%~T85tc$c=tl*oE~5_0PZ}G zLmIPF`XY-`Lr*7H^IZ*uC_DqRC0Ew3*uqa1%fjtuKZn|Ntik-#*x8OTb}|%AGSfUc z7bw+N|0IoYzLAPsb{9!aGET4T*wooTISEnpFeE%>tL z+3?Bo)yCB9BBpu{>3X2=G1%ORI!CAUn3}NzvYeuX385=-NBufZW=MgRZTj{@Jn)Q( zj;l?6IYD4#GHu!~mpXbvW7!>^B++zj;J)xb%!J{kF z(97c6)g*~1=SOyo4(rM}p@aj4)!LF9KVrp!iTJmzai>W^p)x6BiAdvGMZU8MB^w`e((e@Md(2Vs_=jnyOfN>x|;`ENy4j zor&45m6^{xt&P-V_58gviWkjx{-AVcA~CNZcZMp?D7;AU>1T?)8T^KTZFaU^K)pJt z_n|y7{=xj2J5w`1oICUOoQtGecloy!>`Er)U|=3yJM`0^{P^IHei#~x_i=~CMFv0pw*FE@eg&wjR! zko_rMLjOzHFXd=se*uNFOt6*xQjRwEODyV~z~9UMcx=SJB%*!5$-7&w9Db85NoPm8 zy6#`}CBNTkvK{D4IojCI&oI3WPLMdrekn&A`=zh%bAp_s?3eQGrjVjNekbXD+{)5E zKV!{q)aM77*^Tm$Y)Rua^tiIb?z1M7RUnL|il{H`MH}Vg+dIDh=|~wszw)^9sN>3` zk1L;kT=|US%Hde582jUn+dr1_gQ3iV|Bd6y-#xBu9}Gu>_1tm$e}7#0Z~e=Dl(Viq zf8cTZqnO!#@liJ`Pdlz0eOt!%M_=i%a`Xj0E3Z7Re#dd;>s&dJB-zLh|2@a;5A(~C z)xX#FH=Pu`la$Y1I;zh; z?wmnXoPK9-Osyt%MiaKgdp%ZJj_}njU7hvS6Ya?9-c}OL@U&mpT@?t~rDN>cK0N7) zPEt(3g|JZco=k$s<-OtQ9oVi@t(n4R5OxjYJ}BK*ca{S9q; z^f%(Z7~_8=-y5sDKPEpEM~y8xXZIq!rV*jiPe2L8^gql{O;HMf~TY;KF$+!?F8J7)jhn0#NXE%GO7_aLVu zVY^59G}Tz1#T@aFY)ty)e_hs&!!dp`#?Qw1XqFk) z$WEdp##J${jq#iqFO4xihyEvGJ}0)tbneZ@#7lGYtT1k4IVF^No#bzVF(|olPN>6} zMr+q*p7I^ax5n)3h}GQ{vq`&A-N$0%bvWyfj}M{$eqD_B#&qt_&LjU7PV?lv8lUAs z1*eMd{7F2+ahG_8xsfRMytJ)di6>$@F(33!;HDE$x7_*|jLGWD{0i*{^f%(ivOWjo zWZ0MF?5s|*F*_E?*cc@@WqnH$+kw_@k{E_LmZa|y%0n4dZHH*7Zt-@Xo!=Gpk zX^pKRn_}{$XR`;W&DSviak^%xR_B_s3+{8963~KJ;4?@F6-r5|i`7x_vxu zD`fl$=aj!WI~RO>3+I=7(KE8MFUGHBSt^}C@!0HE8;B_IPZB%gB%zB8XoL8_zZjs&7qS+oV*I|w-MH* zEOou@{Eas|KY`D4oI||jxS;l@!(1aM%eBT8jthPS^MzWG=gW0jv&qZgcGDLhx*aEe z2VZYG;^$3{y{BOO5IY4G@STqHiM{tx$9d!6`y3~}0)N4A;f3(Sj{T3o-!h&8|Il&% zr(oI>`#ExL^C!otCs=>*RsFvaPCHJ#1s>}-c@@m{lIY~pC*NX{!7L?`u27@vfF;-5I%ac~5l2EoTR^rFFOwY41dkB{~-K5$J&PtVCzdE zb2>Q9=_h^;UuJb5fisSC8Lwci$(fe{W2yZWo%b1w4%eL`&ufA|?zr$#`16i)$kV`L zUU(R`m=`W!jLo-vVv{uA0^*zuY>s*q$`Deh5PA)l+)9EN&D(Ampi&f#hu*FK&zdVao z@`G>~tNY=%I)A(+u*E9>Lin8~XN>ZA-$eRVun>NaWB+1!r{m;T;g1;)gg@svcQTAm zQa5=M{DjGW&HT4qOGasan z31XK2A(L-|Ehech__I!)=fPhwJ{z{a1he5oPM$Aq{nl~rOqltgF&x7f1dhGmz{MsX z2cP0Nk8v-ka-2(l3&xwAHVe*mTtLniEHZ9`ml-pT1>}nMg)u4UcAUp+fyF{q~Fb6g;8G518LK-&75iMU(O9f{laif zKwsASu&u&s$3AnX@FK_g$YlO#U1Wvta4e56E?n(6^&otMJn?^1<1p-=m5Ok>ej+{n9h%2+EbhR;V(GO z|0Vp0=?sLw?O3k=ihg1G;=><|&*YqOi*Y`@!*~dMm*eEcFnyM`3YNpfUDzjI20Z4t z@FDn+V}11Z3yxDqkz3q+>=zRPshi-nxX7{pNtpITF2|f=n+wtxd6<*PJz`Qk%dw1M z@gvoV?)g@CL_u*e>3}xwqJ1E560abN>^zxgRiI#UJB5In==?_2<{f zzsR|CD1X50OJBahX>cfi!fd{T{3$+)2<5-!W2un;=yb&Afyh*+94>Y8#9!c3d76aj z4x|zAzuRp4y$w2~I?eE4V{DYBjq$T|ig6!2*LV}mdaHFe z!^>Qb6^IV8mHhX~%~ICSd|0;9pP6sWi_+gXP87mNoqixTSsP`%oo(xjzH z8GO3codM5w99#`Aa-2&J58i70LwKj@e+T}uWB(^Gb5Lx0>tJiwI}E?#~~)n&auDfEZ&Iq6a-FCaHgYBzm+KB>=f{+;l9P5vj?VvI^Bfx=WFtYrGuBKlPy-?l7JX(_fY2^N>57&xINI zr;g?N;1qn<*y6(}XF2xi-zgT)06$Op4=4B5z#ns*`cHT-v9Z3NV*L#UAh-So)8Jpa zz64G1?@eE9(qCCyWE&co&UU!Sm>d{-QcP!*)ur!4=Nm7FnN#WmeIMFqOy7snUzOAM zp`Ug>C#Jx}SNfZKG5lNRw)rrOILjCXU*dQ**qHGdR^>Q35FTgx6X1!?x5RF^&U6@) zVXQ@BC&`!$yDX-Iui6%C-7s03q}^rk?Z%ATu&)@`!sM3f^ujhr^1jJ2mNxSZsnX}h;a=}tX0mqoJvdvm~W@jXSM$c~+b7FGr zs&CE6*BGyd-)Z)H;p?p~?T@(G_#g25OrLQW@hRhN@P9jL4FkZu}&Cp7BALW02|yue7?%o009tn_$LCbzX!m{_eulQeTmSiVD--e+=hApI?4)|T`$ob!neTl$aI z7VV_}X57lTaG~*TnAnPMdEbRkb)2H_6{i`W3y(McAY5zAT&bAhSg!jk7FoOaT(QJr zbuZj#I%mNxG5Iy7zZCiVO@0u*%k(dRsjqz@o)yGJ;xApRc+hm3;YVU}j>n>(Am$aX z7;on5LG)MU#J+N%>8Ih*CZ7Y(Hr@*3lf)$dI=J4LHN27>Q#-`1@_J+XUAe<}In0`+ zK4YWui`G^x{B^VQ1(@;DzKHyw=`${suNrs2ubB?^M-7PaP}A9jocXJ537>B|)E&hd zt^TvFj=C%+$3NBIg}l$0SdOB;`a`Tn(HE`zGx$R>`8}rp1akVKc7z`{9bz)-Csy|l zFnOppMgF4cKg<3iFk3mVq9%HFC(Wf+7_{?V!o@*Ct=Q?#Lt2pURTBB-A>=f zc9o5bd@fXVuj!w{tBsMr9}dUp2yA0iFcD@xsQpWLJzzF@tzx|re|*NL>bI`lL<(jd z6yJnLhxt|oPj>qJhR+*4$M`XLf$68=dg@DG+TfKjdArHCBHw6rkHUO zkMS1Mk^X%m#-BDF{5*PTa-pP4Cb!9vKK8xo*_{%1z-=`Bd)e-)l`6fC)H~kl3j(IXhg<|vfreDWW zTwqMh#uQuKC*cvMPri-e+(u(Aa`dz<(XTc65qOU2kAp8Yo&jHFOm2+H#PnOuPA~Eu z#(nU|jggJnZ@d)#h4C(!d{7_uaEpC>R^AI&T3a{3XBmG0CN8S;AUrR|?=T(4`3&N( z@e!TSw?&F5_acFg>78q z(WGNbO&=e|p5}B0B;fJJ^lxm9>Fj|Q8t;V}3$Z`oOqjJr`Fyy;bnb_5HhvJk({wl{ zj3wt)pS5!=wlr3c!In$@6R;hd2Cz1aectqMfsdH}0ltrbuUhvIjIV0*Bk)LL;xw+x zbPmJ#r}{6#_@Vlb!*4Tw8eVQXFT=F0`me#Xt@^}roaIb@$^&clAq)0gXqY2amG(G9s!?kIy>N{#=GEF)0qVK7+(b27$x??tbJl%zI!sB zH0(sQwX{u@IK)nhBq>cIUv1hw9IRACAc_ z$4Z)!ABxqbzuK1$9$0yY%$0pLY zaB?ZU-t<2Mv!-d?N8p=H2i=K#jCNYE^CXNP z%J?LC*G4gtS)U%Uguce-7re>ZqF*&TP0n1Xx!aiBuDQo_7_XW~ zjER5EGscWz%|9Fmf)azgFQM*d2y?q5x()_uoWbymO}r_`p%iG}uYKRi9gb*4jKrqX|{dkuVfOpYzB zdkFarj^(>8Q*SeU){Lol8Q%%-F&%05A>%pl_f3bKnfg;>){m*rnhxzxr7zM}4*s0Y zdaeEtgR{v)<=?^9mz-vJs_FN_thu5yI04((4L%88YC3&zr|~xUCeuF?exLFAFk`1a z?1af1<-PD%O=mIuE#sB&lcuu|CO=gFVVJR3f3D^Gm3hXuz|48oc>+Gom>ATaV>%y! zFEsg!@Y{@uYi*R#mRi})JH`F}vp zIEh^OddED&&YSkG7}ICb$!kSUpCkUDt9D9TlpF#e!7$0_=cPa8CG5)<{xz*aVm$J-= zN1y4-_sjLO`yzyeF=pIVPR@80d=5dox{WqYQyLrN3C4_%$GFSqu(}Z=W#+fXxJS&m z3;Vl}Gwu;H?#g?SH^g|A@e|0~V$9rE{X@vt$GFe2924btoT?)}+-jVLcgJ{-F@2KX zVXD6H7mT~%uNsSQvP6p{}JQa@Yjr&!as<~ znG0H1K~&{Hl#&T%E;p~mc&hiHd(Z!q48{C&n^hdfvP zu`pv1F>A5%R^%Ux@h6PM&I86`=f91|z~sEv6@J`!6a2jxGe)W-c7A0%9sZ4RH~iO_ zoa3qLBbU#Q^>bU=4F(w#2YDYy<-)^_i9;|d#-|(8u6*_!**VXcI0WRA%7y0`6NliE z7++>AcAAXEpB7{K9(2SQzttvj2>v6+8;!-zc4OiYe85=xyC){UHzxm*ef}%$G8Xz- zu=vdS6ES0k znXyPRMldUnP zzRIhRuZ=Ndp>oDI`CenO!&s=CI3yXHh<6#UN6vbsa^a5~i=8hU6Z7O(jPWH&{8eA% z#9vwD&$`bXY1T^~HZFmg3;G$Q@b4Y_d)@e}9Q~Xe)1kjPMKPw1>KsIVa*T&L_Lm|j z{-UEy{FS?rPlz$Ts(c6X^JC1~rE>A-QpetO_;TY#Fk>M)Dra6Oi~L&SUido4q9)(7 zSDVB$XNxiOC5O47a^VjdvxepDj`1F2@pGSJIZov~XmauGQDd?HjhOxqO*VqHd8QuC=ZA6Lz(fF+N59d`MolB z%^MlxQO06tiu3P0^wKHteB&qc1x7%5Lc{wK#lGyE6hR<5IR zVw`VGU*x+EYX4rCxGU3ciZN1~>`yTll-Zv;H>SfnuloCtU&N(^_{^4C6q7G8{uc7L z#dMmST;iW%ol*P5IfYM=9o8I`??%p=qx^aJT``>xI=QyXyj6e1|BuG_<5rjWq-WDG*QooP!OIdyS z?uhma9r+EVu)Oy!zaLS?PW~X%Uj`2`CQkV_UXtheXF0jYmOtLO8MZN!&-(LcIk|iu zls_-V3yqH;zud8WUY~DsO6_Ay{n>=P)p#>(<08L5%D1_bco4QZqVf-z{!Zi{iSa$g zcOn0RWBEN%zKw+^ef*}$r7p)}@xj{-|IAq0`nmBT_zyAulQCl=-;@IG{0W#isvTkCsQfH^ z*s)KX(%Yh4E~-E5;m8RfiZBZ8mO(w;Hd8cg1ve8@D3=tnqsI3&tDauf=p& z2h@Ha@*f*-gDu~D#<%FVF&)+c)!)InM#7l(1SFUEBK%lI(z$BkcvzhnFo{B%s`Ipdd+|Izq0_!Y;AfX~{)SfNu~VDhB<3|@Rl z6u~1*UItsNL%9lJ8X(|I*~- zXK@&-R`{^})_iSc`l4 z*!-gLZkYTO9o2u_%Pm^cfoKg{chnb*qV!{1_j%(2*)?+t`@N=l8N zKu*k6{w#c&@vmTFuJQx$ImSm|Vy%TLv@{7k-x{0`H36~5b;ycqOZW6}A7 zW4YhVAd8jUV`k7dO+FH~Sjl@cgE+oOUu1j-g?T9b3iI$k-FsT1Bi{!o&2jqjxxajt zFY<&3pJL3qT57TKUxvq-9DhnJR*5t`!{p>cDPym8gcleSx6;e_UOV<>E6tcZ4L2B1 zhp&!tn{g|0oBML^T55AYQ43ohD&J!Ib;xb*CxmV8C&bQ2Vm??-YF(TAiDq;jF+0K* zbFKSCtnSmMBR)JA(|;kx7Jscv?83gwcNa81^u26A)=pV@jE5NGe;ImVJj)nYW%^Qf zR?McY1JakW^J6*}8xz|y%VF`SY=*Svg zzQXh$gI5|Kgs+M5wZ_D-++ry2gO*#~=9~>%4Aq~HIQ<;PqTFJbgD>Tlt2y{mZZTAy z$4!3;a*JUOu_}Ms6n2l-Be_N5ojHQoqY40A+hsL40M7Q>uvaJ9*a z|KRguIx~%TAzy5KKYWGpmtc!k&K~$`lRpSstaA3l*O~lVa2PAmdB4e@gu_^odxP&W z`EOv0m5lY^|8nx=TVRWo%D-cBV(ZcON?W7662>;S*kjHRs6Eb5d?92?R)0p?c{3&mO`BUBuZ*%MqhpDf2 zs^Fc*;@d7`@$Ft4yA-_FxCp+_xCFl6xE$VRJOqBwSlW8ncnSQN@ltrdaU=YMaWj0- zSbR8STnj(zSdPE)`((*0|5f;iW4Z3|UNoK#A2ps0Q%Cd@yQxD_a}xVs)cOu8G>g{!Ocf6O=qKWRFz!UtkH_#t&=tmHQ~ z%H{A8a0 zEdJ1c)xnpsx8PmR;hv~6KY`z%NKWZ%f zec5;i85|%j; z)EXazu^XOK$@d~uX9)5I#})ok4sSKCgLlSscExmd$8_*d+oi9;ea463`;Cvl`-~aG z;6dY~@WYN19{iYb5`NOL#3?vnOq_y)#!KNt#vL$ih!4`&fHsu-VA@coPr=K^+u&D? zcfhY1-^(dU%J@FG$Qa*~CC2!kEH}pYy`uM8r z{|R9qTr^EG8<=u{D9CLcJ*9$r8v)_Hq>GPuR*5+(7 zuA&XD!^8L_7G`6j_w2KF6Yt9QU5;6LE=|L7pHDd^$|mpSh1WI7E!n;#?R`$s$(^0` zS-!Ioes?!7mGw=oP0lcz-jJ+sUR_L%9lh=lqr@cACnnLg7=4fAeOdp#Ju&&c*}lj* zcBKDowqJ7m3*~Z78}?DoOCves8(zoxn_}|K*|C#zxk!J1HV$&G70PAp4r3zcT9LdY zicfXdx;5SPE4*rXVwS!(hs1*syS-|CR9f{49=lr2Q=RIoMOwW=9`g`Bi{m)CJT)UG za!>4vp3o87BS!w|VI8sk{h##}+aVQC_y~{Vbi!u~#>CEM{Ba(!onn{gcIX2uV&d>Y z7W$Bj6Ugm(7bn=`ED<{mm^~7tx+@ffPY%gS-19?RIs1e)XSuOyMb9et0I+Ju^(%O` z=QS2=C*rYm{mS(`2W(YSI3P~v1R@@&*2GY23k<)}4o96kFJdN;8ZNt!( zxtD9TYL2TN&dUnZlaoZ*UQh3I_NDlHBR$@C`=@qyA`7>q!B}2}>s)z@@O1tr@Fy&P z%p1A)bw7JgP(G2p*~q0%9e-?F>i8$LCou@^ErVlm@f#^KC!E(V}+mK1SqimnF%V&FWd#gT08Qo|L?Hxc8vv)}1x{E)tH`?}zJwB6) z+iRw+9BDV)LVHIL#O>{2c;_G!d$PvMKJ3Z#h}&E9dCt=$$HOhO$2no#-jNq6OS@w4 z4BIF6_)~i#XX}1~W@KK3o7m$oak6{W`e5I4{3HDgw@^=H=7a3Ip18>SQqd;;U`wR= zC)VE=)>BPn;>S4ttiRqMIN;B=UlZfRq_D(m*p|F%aNNEdu_M>Pp3GOyztx_U^ZAR} zdv_fs9zzyxYOlMYqot#|eSF%siBl#_o;a~~!owGbb88!v(KKS z^5q2^FI;eup9tN;tgq`a3`lPiQ`NtdM&G+Uk?DNvK%X!FQ>~;K&o;Tx8f7$v} z;+`E9$Bv$tW=7R{>05u!m$DeaZP;CZ*QnlU7}+p4xQApZnU?Z=_EpWS^Ip4tE_YVA znT6%fV=s=si?iF!UX|LQ?)oj2<MqIj=*uC%rVU!)M&- z?YSQNTQ2a@<2QR={TW`}hhXG8uBSn@|Bxo?-VJBY@4fy^WLvb&m$%XO#^?Xmi<&>Z z&vET0{jlQSFYo5f2CLIYe{ZDk5~ua4;GWtFzH~vnuD`%bZhY2DZKI9($Bu0a+sx`8 z`+Hn}L&2EUQ~fnRw|&A((e8nBANG7+pIHA9dY-6AJEwL1Paa-ikKK$Gq_hrEi#6KOiHP&Jo z`5oE}eG|KJn(vRzNybLTNc**F*gD2(M>scRUYz@EG#`r2J?8l{>%3N(3oGA!%eiZGoMqq#X@%eInI?SbGFH0WC zxJmz*duhq_Fek&lxiPOMfN4)d}5A%cHdiu%Pz^&JNLpEObc=@e& zd&Ad1c$UO;?D{)K_1-$eDa@#=kMoSudaXI~~ns(K(W9wfC?%DA6 z#pTn^ICkv4`8?#NfSmM>y(%^~yk&9u#;eXL-wtDE(cKq#1siXkqydx`G^$zS4Iqxt)YSG)eYVZG$=bg_H<-!z(#wQ)m!aF48w z)9O6$j=7qDugSRS8elmgda@?2Up1^(byMW~P0#mk{Mc{w_!j1ltx*TUwsgH%PW*Ry z;tu|@5AkVQ`q;7Uv@LZcH{Ph8 ztT{5~|6*OMy}mAcyyo~+b$vQq*SxfhLHyV)zJ!0F9&`PW$ZUN)D(m+8jl*Q!lH-K> z&AOfS{{rH^T>J2P`SdDvi=w))=v&_DasJ=vS6{qe%(2?gU*_I~)G^E=Vi|YHq2REe*HYw zENs&!wGsL%#{xMXg~uX}k-ARS?K-y8*3g|E+c7qI&2CjKUQ$X)y#|mAu7BDR@+>Vb zV3IlV5+rk4c&9NTKgvUxaO-EqdG>>%q&y_hueZMQW|&{EyHj%gde1=q@rIWQmdO$oPkA;tR^ zQA_6vTT9c0ttDA@CzrUo=L?rRW>$NXhd8bi9`1OCa9S^oc{3|DkCs2|_RJS_!AmU= z?kh!?6M6C3*Ei(6)TLTT%5ccz`Vybij*K*W+fr{wcEs6xhoITZNUIjJdgQ;eo~(ec z+N{Azd=i_9f5@NNlpzX|Wg4SYs)vHyofMC*5j4wd)v|l$W0R_Oq`p9=UR9Fm@KU@J zgl0*m(@T9x6-zQ}z0^KI^We+yT8rg>2^W`SR;=_=4^T75;`*TITPz=yj$16h#``gk zrkzjUfPY)%_;KE%A2i1Cx8SqJmSlQXcq!gL4RR*Hc=lcKtQN+#C&m7Br~efC6YCrw zfM?7q$+S}UM^bmTlmA5Y7dZYY{NIZlKTW@TmpbM>7JuO~$A{rr%N_qh>Ne}!3S?%o zcd-5AUkUkd;~&ybBA>jGS&{73_j8hSQgWk`oJUV)x0gz2(s@>xiI+Q*@j@zID6+zA zv0P$>3$b!-xfSNfo(Wc%%bxeio#v#S`Ld_h3M@OR-P5hG2xq@lX9bdy8|qnMvFw>+ zh0CaO&jKr4A!>`P@K)*V5-VJb+R~*%*iWO^k%CA3IaXq&PJGf|V5J*T_)_AKl{VA! zwIo}jb&7Xdn-s9PU$$81F z<(`$*(ROlAW(s+%lDRW<3MIl-Gxt(0W1szA${$HGO*lokDCLhr|NSly{%BzvSpPKk zPqu;ePiN20lxybg;%e@tYM?mfv()51Wd`bmLj$ZexlhTR52Q`f#M@G&9ucYB=gq^R zPo@%YW4S(TL%{;VdxKVB3Gv?+rWR{R-r+E{mb2&QRi?&@;!O^RoF&EE7mjiRE#0}) z)EcQXtJw-f$)D9>g_Tn1wZbaedAZLD&A6W2Y=stSXSWrumO6W^uv!Xxti0W z{j3MA&?be)tk5pjp3s$)4&=S80XZcsr{u|u{;<5LT(0Gly`e`_iEg|Kr^Q;~FkrnD z=5WxF#YIr-oGN8`!!@YciFI6FxB4jB;RbqLC%R&UlCL%dT(QHDKr^9cUg zt(oTp9}uzsEfIeyo299*sPD^zkJO_S__DSbC*bQ;`w!^~*`3d@G46r| zlIwFE%FMdTVH#|8SOs3^a4fjZ;RNt@hqd6RD|>3a!aY9|YC(^wRe&jtAso&1k#yG1OD z`STpIyyai*5bOC%91^|!ZinP${zivgV8-Eph^{)G9Ducg9(8a42mO2|neAX5Ex5() zpqYY;_$w_YwF?6k%0uP~F7+If$_1Au9KTc89qNl|v*6NPC+`t<2i;5` zBzUDId_dq8e?a;))YBm@zC--fp&7_@@vqbo$Ss-4^6c`WWR@V=i8Xc>rFAmpxa#uL zz`{RkosvPr*xRRF7{q)o>T^vGV)}A4a&jhW!RS;;Yg3yyh#6Qg+I4METDYjBvuUL_ z2)_zO7wh~kI!jHLmy(D@FO_t4Ht3JQ3PyV+jYOxkQB>V9l(MK6T;!T5Wlb%($c=X? zORAV&+t%on;w`4tmC_br*G2g;S;6R1{X9)i+DDhNS`N6VikV`ce)`G@{Ws8mf2vm0XC5D*sprpII)ws~r zC0hr+;!>-0v&P!VB}E6iv-;Ba$T+$)(Nam#(e6yN^cLX}PG3@VVA}DA;ESppe^_+J zlytA@^h$S$e5{j`eFXz2#CW3PyF`Cd$r`?^RJvQZ#>qb-b!#1eRCszxSG`xd2b@q> z(shmD%#zOTcCYjvsX5zee;giok>gKD%{h)gDe?u5_lo{P$DbBnb~yfmq(`^oFADcM{*v%|$6w|nv%!6i|4Vq2 z;|JjJn;m}zUbxlqLvZId#}C7scR2p4^lPW%N5zL-F46Adz*jI7#laj?_2hiuD-a^d zy@9WVyT@mD>zHdW1mpl2lW9j}~)BH}CfZ%Ey9;_$X-=qgeOAd;Uz4)xAJoH+@4{JDBepc0Wm6(7|1bkE zR;A^)gOjN%&o?f0=YLjLemPnCs7AVE@G#FSJ6*dum_t_nJQwM~3_$)oxitx2%3uWY zm$+lhU^!$hb0aV~Emc!;Sj@i~JX`(Ca|?dS;8BR&tRKvnM1~oY$S`A4)~uIFYM@sQ z3~&a9oJ6VY+v>qd{F}egd3MqO#LqboPAV2oIUV{__MA(ClQ>wH`z{Gi8U&}y!%Ob6 zL&Uf2kcPIbS3+O*Z9*@XhvmNR;vb#xc4b(0B;1`2cc*>>+3xZ@IzbImFy~h}fv^+M z{r&=i5DGN(RdR(_{(W^`uJ6jf&mpm4h3Au<17C3+^v{r7avk)^)clREgN|JX9lI=d zJfx(lv(xj>5`CBDj@^_kzmfqfzmmTr8t;+j@K_`VT@UbvE|K;5H^&9z#b8{(To}|H z7ce2pdgFpg(k~~VTNw4f>61~NXLJdYOXt!n5r0b*`AUTr9ul3~ROg|X&cmuhx1<6` z58amd98CxReXJOiBg(lVHKX@Sg>jxfUe0Oz^6jL-FVVI1r$j=R^ouKLRAr+BvW=?s z@LZa?Ei_5#HEHUk$F-?QPU4te>NkR8<;>32yGY74Iu`y;?63xKyLkD>_vO?;m(JtM z<~kGkpIn#LKl4Ve58EI1VO9tW!_Ks1JL7BIPJT%{6UnVJl;!Qks57$Pb*6pgN}OLE zmd*L7Jhg-G+xkA&DFbe;>44Tq{)#2*R@(`>)xq;q-}SoPV)!apnB3<3eJFno<%;t~ zBA`B>4UEyjXXfaFl_%cR~|*jPJZqj|1!Dnt|kk^-DqWRx+wYnTP08= z;gHic3AJcFpn83E|Em3DK2zM|>;j9b$@h=a{RNhPD)Pqgt|HA^Z`LaTu@_W)H{bV%v zf9m#yVciyH3Vj$l7?%p)=cTGf=-OTx<`XN#3^n+BJ)Ecof4BHGZ1>D?M`^v#zgf)J zgq@{z|G+ini$bpWM>)Vt(Jjm`QG7bFeU2-=EI~?aUpkvU{X&%3hRY8ph8~sakt1b^ zJ`x8Q*PFe|i#J@RN{M3BwR^%yd^Us!L-@PP`|-26GvVO0$?d^~!nm zovU<*TM*q?qUUmJo-XcDwK*i@7bPF(>pJ))T^?x9jpA{|ec@gvdn`e}!kE18g!w6Y z;k5GnN6~vAnpIIQ2&_uy?Fnr#^#s!At(-VT`Kk5dI}{oNSF8mcxRoT7IxA@;D{= zF=CtgJi`8R_17Go%EEG?CsWh7A=4xs4KbhF%Ot2$vf})u4F40;y%D-$$ZS?+& zH7ODLSNfM-tbw3VFcf{)%737%3p%euq|V4Pm$~fV|kXGk%ENU0t`~S!?F*u>G4z7y@=z)` z*R5|CYvMa4EbF;U`WK5eIVlf(WloEyhx2p2%fwP*XMpR&mpGPDTik$9YA%+E{n^_wtv}d=t^y5Cz4>Wayf>j(S_0i+a76jlq!?DuFfPc*5s}T;W&f;kimcEq5BU$`I7GKWdixHlj8{vTU5e}+~ zuuL95<+jqFM>wz`!mz zk1j4N42p*pUw-l+zvN_QWtCT0cs?RNPc%$%3^>UPiq9!Lw{UJ5?w^}CS?9GdJX?>0dl|i(PU|D2b!lZ}jq5M1TyTo)NuNeqRG5@LJ831swH`7- zlG^*ZWnmAi#$ZI=UKxFIzqp(hHEopTa%VqXrw{TL}`xP zo~Y?}&ds!)7_xmPaX2^J!LJzm`{9CeUaSe!&zBC0hhYaVD8y`OE?+6m);_KeGon3( zl6L+2H`DsZXiE=fS!-6D9cxX8=)$b2er7JJX7D8?oYQZ~n&E?Ui;7O7xuN1ec{0yN z(wd&1ttE~vhz+cIa&b(ZxGaqIgW@IGX8QTL$VK}DGf$C0xiqUax6FCIIBS;gDQ5S( zy-TvKaCoVw0FaFe&TY58k{EpD%n;P#or5v^p ztlgN6Qzj$uh(W1?VPB3mU`=VuFHjsJOvV;R&xZT|PB|3~3@-JV4L#B%t`Q0Vpd zJ=UpEBbMCgUY-qMY)7b@SeFPfdX4!N%3>l+#+LT}rBMBU8;;oYh_xJ(h7JAenc}yF zdJ?pl*RQ)H)Q?3qw%lUm#EVV;9g&d}t|92gha|h?^xqK~vFl{YC|r>p%t#@7*f>#u zvU|e{$%15TTIO@5?|JLuhpABUL~B^Cs{gYW$IJgu%;Q)p5Q^Avh7QL^ExUxG8y~go zj{muO)L?dm`;T61roHZt$jH)=Jf9DqZ1ZE%EQWjIL-TqZ>b`E+-u#Zpzrq>Zin*RqQnKk`7q5j`1yxu^>=48~T6p8xI1!<%gO z#OiO#i8r_y>fb{DQW(4cdDu>D@Bg0vk9m3q*)J2qLb$NmtKV$h-E6P-+H0@9?zh+F z_8RInx^lEQ46*&M*=ty~$?fkpd3bU)+sb3?b&tL7w%7mv<^PYs|K$kezFX!^;vGr< zZ^Z*VpA852^JkqizO{v0CU$qWkL&8`XzG+=`>KX)0)7Z3ZO?^YN++6X^)ahE+^?LfaxolO# zacxblo?Ja4Z1MGKp2)j@+22(S+#pMD4b>pgle=KncQ!OvH%oN6Pv*+{p4RS6_qvXz zE@T|&;>>+0S0hb&URQS`x-cI`L>kCDo4CJZq(Z-7-kIjco{jt*-0fJ^5Sq_Z2iiMi z2hEE!+_NfV2P;<8M-p7k?#^_q=n)UBBAv<>^p2aZ*xj@hQ`dzTE$c9JBIf-yfVv#00k-FSy_LhXmJF&kU|jFADlLPCqX=X?n0a zy>NJi+k)bB@UoX4G3wNb{AfIpyE6Cu%JK8(&wtyvilB4)q+o4zP*xqZRR^W%pl5o} zUEQy_+kAiWuo>o{2A+8u1iO+fA^PGjI5}fp$R>A}uKn%DH}ysnhM1RqIEm)D9J7X$_A;F>fs zyzRP`?4Ymkt=CmwIgZjF{OS>vBS!_@s-0V%8w{NnbnUG;FKC`lhl7*T{etVrj+renb3w-=B2m z9!Uhk^3jdyCZh73m!5yu_(~Zw5^w}B<42BOH2*xd8NoZZjSq^egRXQiAf4c5Z_ylk zh_<)MP`;GtPL#%W{DSXOj2}NCksFi!*7MJs(9e-?QvF?0{U7`;Rk}YfH@J5COq>{3 zK{+`tD)kHhL835n{K)epY>Zz`Wkt}sG`NL+|8WCZeM_Rd;)0PC~WMWLjIgx|`ZEe5Ir-m;>Sj7?YP~Mj`})SlPLGAZzSV4X zwXABRz~bvx)Xdt>7R>at$&RMRwA}WiO>Q#X-rm*pPLI0=tn6yJw#myl!`zg3HTQ>B zZ@KSr_vA@LEyGv0=+Ww?rjGj7mTRy!ajFHA#krwlT@)6*U9+y_8Clsq4%Xf6^2M*r zf=g!2&n&)h*5!*Yn|sBDnI%yb-P_qz-)R2Ux6&QyS`!VgS<%V&dMp&gRg_l|mbLZk zOkFfX?B-ZStDPL@>KoMyJ+#puy4TSz36NRIow73x?d_{unskURn!7Ob)){k`WF~r< znJud%JPqyEBRPa+R&vnv2o(XyWV+X6)-qbezp0BOF-NLvS{jH)7%5(Br4>@`|OkC^b4G<~lt)YQ@>Jmn^NG zv2fm!xwB^lmSgwEk!lqN($oSm>sGbn>yI02+a$&o*~lF!RD$s+|#q@0jCn zZ4)M~F>#{fN}YV@nEH+eV+!jflR6TK4K+>c>s4Eap6RWV+g08AR>*JHN@44kkjJRE zwl%is3{zbao9hxAo5t(x%J4US*MrwdkI4$t9tJV7rL#^uMus#7#T(#| zmQ@_2nT^&eMgU8k*wV`cwWeMN7_tJbt4*UPeqH?)>+4}YOpUrm?2j95cM?ceP{OeB z>Ft<|3whyT)H3s2hRPVevITW`qWc=1^SBCZ&{{ODS|xjMl~_{)F$pGXAXu+sT}`_? zoiU~$r1&{WlinFH3#*qbO;pcZpc1QUWE^w_m}C(Q+BI;dF|Tp`qlYNSq_SCDYZB|2 z+Y*Uo3z0<_3OW+ROY3!lTiw`1%Rn1F_gh+#=Xl)`^ucM;-jZNOZehxWb?a-I@k|?< zjq$0oG2)A>96Z^Ip(1auYe7k`ig3|tq;j)3F`qWJ^PA+%Jvvp?Ht5xW;u>4EcL+IR z$*&CzSZ(PBS-{A^sMkr%_(%up#v1t6AtE9qU11cpT4TL4FazfJxg;||)9y1Dp0@<^ zyt%ETla5c=lxZTq1&Nks(y2&$+~jJVvUGy3YgrFX(Tmu!u5tD1#5!gmD8Cx!*9*9w z6PQ$W_3fA;cBsMfqLt7KncC3M#8Ec|!#C4PXB)kx&yXuCF%$x7A~N zvaY_J-W6zrqAG^94w-7qo8f!boVjEI} zNI=DEW)jBOSXfNQ8fX+0loi5YO-BQ_KwOO5YBwbKhyg4sFeUd_OffXNTHVlGht!v7 zht)X)!&v1WjT3{}1#@*xQ_CuBvYeILtO)f;cqXp&hK623Zr0W!#%4*ceP(lG80o5i zdzmiNW7#rGv}{W_M@{@=Pq7gZ(76t= zpQzo?K`SKI)pT+LkZ77RsYdS$%u0e!OP4Foan;`5(SW@VtO+@ccJ4_To6M-N+$QX{ z*O|=5TDw$GUG1S*# zh+H>~gPL{b--xipEamK6I`7=sW?twVId93**^3k&-hyf{=@^$yII>j(5;&$JcVM%`yhU@k@u_QTY1KA^wF5iWAb2+*_2D`N z@r7x~w8-F~8PT0y2CUKPI!;1mLkpTDu)0$)oS>DVp8=42=-@Tn2$&>BZ|NnA9!C~! z$5+JBNOSOBi)m4}ihJSuw$*x7<AGDplWQ(*SK}pZ09jd(^q`8q z!Nn<#>mJFzMzpLP9H#736F4JO63sfk&5Y8UZk2$dt@X8ys~ge388a-mxcB0&lNX2CX0!(k_VR320iwIa%Ck%3})ms62KGD2RUksru_O3&N5nzTz z_p3QGXPy}^h4*n|bn)Vuar|0PJr@7?gsEf4k2DEb-w4j&Gb24b;<-8lchvCFX-zeM za9{A0a_ltaNg==2Fe@u3wOY+S;Pt8Q>Pkzlu6{X7Rj1Dn(2Okga&on9Vc(%(VaE*J zZr1(?+8yxD2mg$hUt&`u+~qwyJ1d4hs=>J+4J_y+eK8vd`xw(i|LvR?@Xpe#b9$A* zIWxgyuB$i_D5#jmb5QA>vkWKXWp88z-xy1IWNETs~3Oy zix+4MX!OD_e);0BUV_DEWR>nsxiy(BZuj>`^!Om#^)=sFs$hq5d@wUB&*(k}J(zZl z$_0!~*R^@+jKJoz!JwtOF>&aEpx(sL++Jn$ zSK{<}5MyObm_FwPK6h9Gs3#mtQPuOOfC_-y_dy-$DC^tXmIr104-XVLSMj|_eMG^` za&Vv?_xtTPk?_DaQ+DfdpI!A60_#~04z$NDe^p=z9-eri%lImhKKO81V*S-9oOht! z>Y^FYzIT~Z+kQmhF!))n(aiYj739hHatsCSGo?W_o~MS)58Pu z@Er>N)|@`_pbyKzf%+jq0RZKpIBgIb`B@GQ)E5Q?0F;Yx+A1{Ki{Em;PRgZde+KZ) zQa*_CXyAiVo`v#o!TJPw#l6bC>nSfdz&|o50H93y!GZEv6zIrL*WI8a}P!Z(DF zhkBNS1NGyA0szW3HZ&RK-u~3z^0#eJKha{IQJ&nZ{Hb2$slCe6dX+1CmGOnK@PPcP zu%!E&(W^YGSNWV?<=H5I4=>EKXm=mggKxO=xtr$5F{kHxm0#&qeydmcgHy|1FlUTB zFNj$wkLbl8*i7nY_Nos)UnKRbdez%_mLEU!w)Cps(W`t@uks-&clOou)%&KDkE4wF z>OIzr|0hyjiF(Xm{rg9nB>MeM>UW?X^Vxg*)b@BgKn}wnu{od){QZ$KZN6HHGHe$K z=78|y`49T|0QH#Pk-*1NZ}XGbBVz4Ed6?gkX4Bj|h;k9in?#=F-`=ZyeXsJqUS&J~ zZ2P0V>VMd){7kR%$zJ6@o?7-1_WEdozQu@o*i;{fP=;;%5-CS9n29KtJ7vs2{$8^_ zSU=fZ^x(?VY>?%G1e;KO8RYJo&3!JH;_S-}S#F%+S~1ekdw;f4 z2FPOg-T_NiEB*ex798A%vTfZ9KzmCvycJ}*c)1;5x!+<&>0Azn!^S-|%gt*>Q=#v9 zS+Xt|x?HQ-nqEb@HZrWI6oPvlr`$F*jON14iaezxcaII9F{{D)f-SrfWnBPvxW$OrV9LE<6(+pI|r`eRl18Yw>BN^8ErxDE+iM(t?BN1^Zc*x7+ZWUb=+HIL4NFU)PpKml zwhDM)pP=n5N9GEL-|EltB8UQh$X{%AW-QT1=wFR+;_3n?t{7vi=dr_yrNfTDvK)TK zs^y=h)CIP$VGhqIhX-R>YIzo6n{VR^I;2}USZ9}6o=@rv_Q|n4@U@LAwb;RSyc~-i zFEQlXwjON0T;$-vE@8YOZZER(2RmcoxU8P&%gRyRn39(NA*C+07;-MQ_><(I-(W5v zRxh*suvNn1Dy3Fh3_I6YJXfhz7HdDsZ+__fAoy}D=hn{6z*hebrD|>4EAe3}%d-U! zeYg0tpj-ZHLAQ9HQmbuS#KsznkKh}-7C(S(zm5Or@f}@DKk3ll#CLNo{XJZUNWUKT za-*d$53~S-cZB6ZY>cox1Mod`ONX6HEgk+EZs{X{Exinvbe28=*wW9$vxF@DEMQA- z2zBNcCs&Bh9&8wl@snb;#F>wXw_skw@4?)M9|QVAhku1L-}97eu(pbaI&ga!(Em?# zK)*pwTk7bu($NQF4|3Wy4*zuyKk{CXf0SdNF-kRB{V#Fm)Md_`YIWumY#Yq$9S(-f zu^#@&aas%?PPRN5_z4-{RPMiVO+cLX05Glzh`D{`^?e1fcN7@qslfVxzsRGnwQx{ibT~)ITj(r_?p5RXdBbSmtb3ZU1GeXP<#j6H`Gp+*0{2)CAc2!pzoO&K` zm%)AuFl?*kd>44P!QOme%t6vKb^_mJaQe@H?=d*G2N-S00GdPR#e`GMfkk7pV zdAu(H|JvY;B;fxsIH?D9D3T`)5q{`8n{V2Gb7_ z@oDDGz=&JQ%%}kFHaM#Y_zQw>0KVJcROmwe$j|Xco)8QfkrM_-3V~lVn0@&&mQ1wq zWh^PUmh)vSSr~^u-thbIiGP{F9`x}qH#lWA@HU~31HRs1J`LT!Rp{RYzSH2?Pl5m4 z;H-y%zh`jrnZRQ6tY?A6=2?jSsOXjsn?yx7A3lm&J6{AWc255mu-G|uFtFH}&)kn* zWBSU3&!aaQ%x^?QA&YiPhW(;P431<2f7{@!$AN!faI^&&*T>|i?$MLN(+K=u24`*s z7X6biKpbPvkU!;1z_|uTV7H_q!5;#b8JvXtk%ZXQ{Ky$ea}7?P47|)>d^JTStrGf3 zVCY1C#z4~51}9;@CSh)np7dqB_8OcCJ0*S9;567N3BJ*NO~v@3E3uDu$>QtG0l;ew zopF`iX>j^Sz%sv*lYqsB5%@4!Y?y`dCW{SIW&w*0GhPQ4TV-KhB#W&wF}@VB6@Mlq zMQoM!KCsv-`4M2T6@Q-~MQo*h2Q0QqS`I9>%7mR##8&DtV6j#DY~amiEUE{1r@ekAOuV z#$l}4(9_d^VRy>RIt=`*w0#sxz$#(&Z9hgf}9}@Z|;Nu3TVeF}* ze{2!3=pTc>Qr|Q@{yo63JM~Y8AJTFRPN@MNVsP|lz#|OykTcUH7iA0wt`r{Fn|Yja zQs)6n45!=y{AokaSODB;u>S_|2I0R9c$@J25g74GIT;@Si{CS;+r5U)=i;V)SK3B^ ze`s(Fc1wFk=qsZX2>ww1?oD3S*Fs%>9modv=zMYh@*kJ$9zzqf~ z#7oBK3{J@hzT4o)g}~nup6$So8=QU!7~`b;%yGcK7aq*fjCTxjsifMtGVz~`BB z3_YnGc!|LtY?3Lyi>(Gme_A)#DHDDoPJR{mh{37Fz()?5{dJ^V+7WAM@1s$>^_7r%tpa<#9ZJhI(=Ol2Y!5PpuYp%g*MZhbC=Xu~JgOf1s ztWJad&j9Zd{*l1@gr^_yQwGP7H?p2HILdw{-ja|zvk*_zAq{yf>pg?h6Xsr&roRN- z*U&Q#1EUS;G3b*$%HSl}CVPs($)IJ=5PTo-BH?)!_!5KDJAmN>%AwD*+YIK@O|!Qc z?EeDzT7x}|EBj`HBgh%qUp6?3IhuWs!Lg~p-w__n>+ByG%=w=EGvRp}7~^5Te3EAN z9}JGdJ~?PZdP*wrZ3Z(2a=vOXV<6{#;Xw@K{HMW;ft*(iW(?%~x512ooc9f84D?A6 zj2P$x->@%^rOybV$ABjY9t%9(;4Ijo&pd;f=lU!)I0Lrr13yttD&=2puv!2tc`3F8 zc&njP&pux;*nbdsuffSb0fsEf;d_{U9x^yOANaVz-r2zLA9*;&K8RQ182r%ZO@kwU z!L87!!3y<#a|Aa7-y#^X(-&jbeZgOS#dpbH0{*tp?+2E?qOSoe{&(1^z{D$MjPTR$jgOaiBrb_%iPiZiv8)Y zT$wLilXG7eImi{ckTo4`HUE2t?rq2AcrxxA2)%#0q5J5oKjsPFg67db-_V)k`eFo_7NL%=@|3{(^?7`m; z86tfRKzl7`Bj_UxPYT8|V7$=30bDH@Ib*>226NsGxX|!3XAY0KfR;~NN@Xq|TfUoSkErvvvJo@gK7uL_3W z27bfgfsLq76!AOo2O?)VFye0Q7>9Y7BRXz( z0wX^Rpw2k*7D!+4dER2f6Fmfcsn8DsuN0Xlfm@xnh#Nh2(DL9vt@ES6=p&%tD0IYL z-d<^21^i{f7*`(bm2UNU(DW4>2|8r;xAYf`oTPHlUot$Z8TfUfpAY;;(er8GzX^Q@ z@JFHkgVGG<`a5Wl$btO^l?eX>z>@?Y2gX`ybr^&`IL4%3f_|YxuQl{!$R2dL&=FIE zK4;|nu)!d_a%C)o5SR1?{W9n=X?r&CkAw&P4}!0?4dIhP;0v&fHyQb9&|AWv3ykq< z`Pbp+5fB45uMQp{^dq3hrC-=-@F;v#LG&3sRrEX$bj%HoF&XoFFvdVVxsDG;UeI*t zIQSw%=l!<9HHMy&1B@6Ve+J@faI4U}kUs@;YVh^Ke-rQ? zL#KZS-(hePd^-4k(Rm>-<^}ah!5kV4TWNd(_<6yv0{_b4|AWv!0R2xwuLQ=rqwRp0 z#IJuFJPSBOFl;cSzhLw`q(E>d@C3mJff2`A&Jo}m!S?|p9yI+$V2oGew}7#Z5PPuG z5E)}SbRL57^aGv85X=RQ#{eTIXuJ~mNn?}reBhrOoQAnSo21`K zz!;m3TZ|>Y+rc|U4t$aif9tuw5cn41$pe<$nED~`5r_Uw)0X!e@*k46PXnJ23_Iul z9{X>xVLsMVE&ok?6fcT>iqMCq3H<}mi!c{0{R~6*Ab;pth%ZZ@C-f@NWsj7M^B~;l~lSFZeO&>t<<-m?^wXc%Wn9R}4=SV=cTF?=9N4-*ei+2h=ljD0qG> zJo&)S2`&LXY518N3o$oJtsMBw>Jaxu4&pHmziS@ksCc2!yMZAqpigt~*=8Pj2f>3F z(E5;nsYCy?(7z0NowRKQMr>%A#E1=zJAiK#Tn@a?=ovc;SmK279Dmf%z3&45&fql6 z^*C}3$CZV=Uerh0g1-nhBAvg+RW#D!neXtxkK{?mxu_o3!@xX>Iz|6q0B;qH98mOG z$sy3Q2=h_%ZwAIVHSPvJA{c%tg8rJm0vLYO7-KJb8v8BV*ULtJ7UHw$?T|h!Md%~& zs|E0pp;R!!CE|TZDc)=$Hcm|1P0J z-(g=8I%OU*^z1y~yBs>kc!urkr@~VS9*i-dV~o@x8!>-~N|EGgr zGB^qGS^OIZzix0Ad|r$>qva64V{j_srx<=GUE>~ulP4gKke5i;IL+WF>`{{CV8jD? zV!s0&b0NT(3&bAd5wQ_qtP{jO)`gOB4xVCgGUvgW4z4yh+86ZM4qj+*dIRW)Im*-+ za*1R4pkM0XRe~P_eRYTtA;I;&iVDsJG2Ox0f|r6`t^PEqCZEoVJK(yXRLMvH!!k^nn=Gn0jt=@Mi_T3HmMv-y|5Zr*3ob0l^=D{tdx^ z3VBk?hh5b}4n8Kh6Z9WC_(y_~tJKdN{G8w&pkw}MnUJA=Ef{gFUK326@zOlh2lG>7 zK)x4f_2K7*0*si{_!#1>kAo4Dn*Idn@K=E0FOAVJueUWupZx5i#^{&#P&B>PKFvjbx5xg0At>A9pHV0#_>bB(nj9?7Q+bI}+^sK*#t-q+-e&HehvS9d; z^GeGk{<>i5|A=738-I08^HAo0gt6rP+@Zf9nDT$;@Sv>Qz5_b?(3tW+40(9JCQo9L z@6Btx6uEeSgRw@C&d-GM^9KPg6uS;pYJ(m`4F#C;T~}cQ_a^t!2hR$D9f<=9I?N{|gRA9@KR7&)=I0@IJxp_ilr= zKKBYH{XqwRNBA>9e^fAa_`YEF`?P~k2xh;?|3SaM6ioSlFj&{7G81jAaX*s)q#i!~;;L*ZEIo7A3@gAJ!N5B3I!LI?& zbNJ5{%zjr04^;J63TD5UYg!KRT8DqVgEtAT0#CPtuMv#6;^$%XScq>Fj9BvbI{0?M z?92MD0{DJIXI%N1Yc@ao;xA2qQrdDX&pAA>QPA&6!R+@gYOZ16X@S`@V5n{UGk3%Mz<>YKLoR1=*vheX(EoOJnxC(!uaoz`sH0o#44rFl?W))xn<;d;s*D z1hcPO1jFyVf35pk2#m7E=rcw9qKL&W{Je0=F%y%~Ex;$7w$BPC&#MmoHHQvg*qBfG zAmoWD!RRZN67s|_$E-dv>lfG{Hc05iLj|K>-e0!wPD_U*O;i1tZ2{&`C=!&(Qo2&O*p1$lVH;0uirCo%Xwz=%IBCl7Swu>jvD zn0kK2!FLI+0R27(KOh+K75lD(9}zqk^dC6*DZv~Ie5d;*eqQiO;FlfzieQcl>%P{X z7^lWKr>+o;@urF&F)WoTe&lzLQjrgXwpTfAw>xb= zCzyJQAGI9uBfk%q`ennT@twk73cB?pvGpV3FxC2z*!qz=W6u`o|6{?3Lw;sb(}|xK zOnv@fFu#kI`bWXn09$_nr-{EfUcR?MIg0dL!K4?BN|K8gB;vw1aB|cYzLBnuoYaF!e-k(sb&%O)zYj zw$s75KGHmkLBGktw+N=5@R#NxhQETozV6^}2xh;J3ueDR6ihq(#KAukOqnk__@rQt z<@XMLLonsTUv^ydkH(On9&>PpV8~C${IdF|V}4ov(~BHDTrlMGeIU(K4vhH~$e-z8 z>pR#jeUZ@Fm-QX|z|Rlqw#1hShEMr^lBUBx=~oCI1KjCg_&ewq^DDrg6U@G__t11= z>^(H5{Cy5SC>Zk6zv|$-1;ft#%&Kln{Gedk;W*|7;~z)*(}JVG&p7x$1;;?gK0L+p z|CeC$zvJL{1%sdOOWF6WGO`4NKcl~cvBqhhJkUow{Nn^8k7i79@R@>hK%eE{xq>O@ zBEc9J->cK|DQA^~R|}>b*wnrkmeC=Ya^M&HUKl@Tt1>i?`@%K4>(UlvR`@QZzaEdzehm~uV{-(SmwEd5>^_%l-+oG!T3 zyk}wL%67c^beBUbbCBaugCVXMv+sgct;3m9hkQBaGm6a+u19bRCzlTMfE4U7L zgu{=$cfd2=!IK^SIf7$oyTIYWys$cFVXX<|)CgVy{$__~Gw#dFe9wZ-HKuNu3jv1B zHRiZ(clhsccn&-Gh~N_NBNyqmuz%Kf1XG8n1ylbMg4yqjj&8qk=)V(8nYi`|#`rg( zQ$E%d-52C%BQIGVzCWkwlR(cGjM&JA%>#beTw{zeyE1$~F1t!Fbjya#_4{kYu(`&E zfMI8i6)@}^@H99Way1?LXKxUE5co>LlyjY6*d%+GVD`1o84F@NkdN37WFqGTd~&^Ssb8zU&tTL*H!JSjYDNtK*9f!7H=nI{%Fm8S)Q{yV&gMw!P9}+wl_^{xGz()jQeDqNe8xIMNfqqPIF7OkAsq=Bc z)cI+_ao`hzsq?dfOM#ykJO=nh!PNPr;JLuB3Z_193El<#j^LYs-xZ9pst*Jo!}UCL z)$jX&%x8UQ3>rU2r7_N4u3(%!j6u_J_AmyGarWYZarQ6X}k*jzDe*t;Da*9F+T5* zVCr^QFm*d37&`L%?KU5J4+)Nfek{z5-V@=T**hNQN$=@!@9mwCxv$XnS%YaC@A)u) zdM^sz0s2Xq+|bD)8yKiE{+w z(HQ+kVlvlA&k$S(oFg$zdal9re$|YvV zKS?mANr2p8Q1sK z(boTY=%Z+E=$9yLVsl{hvC#g}=R%t&ofq0UsW!B2(icN}CgB=H?~Bk^(z~JElHqsz zxxVCr&_29Zuk8SS1%0O3bw4k(iGr^KI_zuh!!<6TLw|eS%C#(@!*|whTx$Y)cW6Vd z3jzH|Xiw(wfc|`FTQ3^YnR|md;^^Z+A8T{Qw3Wl0X6FcVPC(xg`hqzmphGw77tSwB z=lrtQp`1qnJva0hV>O^7R_%2+V=|zx4E-2^O#(V})AygzXXFWoemwMV#Ia8V_6g?5 zyAJ;cq2K+yknZP)G2qX2=+If>p{#w=x{jJvs*I1b*5?L`@XHe&s!Tsaylho_yDB50 z%slFg&w_Ky`gw3JK|eXJ49{M!ajE7RY38wbAFGrn#X0m-o{HztjSkM!-9A<)zg6%t zx_-3V$EfmHw~x`~k!~NO>!-Up)bJ^N4$&xS9`ELmo#*&DRKskZ`1Ucfek$9?sNvJs zoGL9r3sVj?d`h50G+p9h_V&kQoVxH~g7kcuej1z#A%1mF|He;QTMNU3u`|AG5@LwV zMy@fP^SDE|Qa{?TO#ik)ne#A1qkthpO7H-=-gNr_x!!d9kU2w_U(Dm<$IA?^S%u%Y z*&v27B#1htT!W{Puc=3@>&P`cry=1dq3W$v3|^J-mrnRg3T`|6s>!-~%Fr1{Up9KP#^mz_{M;zcfZJe!C`S_FTM(tDc>HJ5BHuG-g|ox+D4#l2N!=^~apj#vxf3sY zSb2AY;K*CYF_4e)GNq34p2o|O=PyT@ecQvz`ymL9Jlty1p9RzMaDOw|y179|Tw4(2rqk(4+pO~Pm#wm`=)*)r4I7+bEO@5=_^oo z5HEX(JYH|Q^4hvlW*ku7XuL$fND(mStdAFtbjEVIhUSlzHwMMte5Z-i$XVc{eiKY{ zEste;P#($=u1AhMs;hP4nTPH7a^T*4EZajcuOD^4GLBD_cVjO;_9K01k+$D22)#;E zRU79eh0=Z#@gg6}eD>Ta{ZgOP$@_}Xt8m8Ab`pQAyve{;-ebVDmmLRrPA3odt2Mm} zXB=&B;*XVw_n!iJct1wV!-+>m4yO4!gY{qWP2}e&v7ahURc-Go6<-L<@lM6d>i0Wf z$DifMBhg=jW)CaxZy-2)ld)gOW^CER^1TCs)9;>HNVoTa#(pcM4&(AufgO3XFG2Y@ zUiOeWpRyczM4TUtT_C%9MC~@`NdqDl~m%TG#A_=kWKqgTv!}7uP1=zptB>llTWYf1)a%UWFU= zvB;g>e^BbCqMnoEKBv^48kMp6w&Kn`cc|RWR}bmj<*AZATUE}UM^)aQU#tAB7)AAd zRW%hO+&M}`$L-YR@~#~fRaM_pd2``!(#uG{S>=KE-Or4|2iZ{W+A+7P>gJwTD^9BM z6~|OLCf-u&Fm)8}6dY4$?oGqF8}uqQ{+1_|cgyRzsdu}|**i}~D-NpYZ9A1;(WsJd zdlDbsJ*lR_fZo)&nsnPM_$J)#D!R8=d75uK+SP*p@tz*x>0ljr8*q-`+=jD{b3M*c zoNI7S!nuyJy6S$}iE=Vz#2gulb)b9Qu*r7XDdyj~9k$sHTWyDZw!=OZMJm3iTg5r9 zt4l|;(oV}prku6;sj7Q6|6%Su3wnAorWW@cST-{GtkFAFQq}Eh63Qo*jY9cam5Opc z%8%IkYLqK#d!D4stBV(O@{ICb`nz8y^Lwy6 z==!%eI=lY~I~d(Qcz${udTjOcrjDc@{+K;?`1yMt_2YYf?U(GFr@V33s)gw91kQ_b z?!b8_&L!R8-HvwJ)@ZXGZMLILMUh|1u}@dfyKYG5)KbL2Np(JA#Y2olZh1{_=;?F% zO#LG{6?ga<6vo2i(!7xbzOZ8YJZv(Z7NFekdZ@9;A!SHe&5LB*r6 zS*`Kkf}W3? zUX)C$LLR$AjhVJm6?0DPybNE)OTc#5YCk{Q^~1M287p0-KkA%{pIpCs)coANb9;I? z55F)+$0zLG^V+gezdnoe`RWym@432i?mc@;RfM)hxTxD25Nk+)w;k5W-P>A$99j<_ zz}8of^zZEQAIJQS7Im)#?;RK;Y`?Ww<AF!8VIG zUpb`nMo*RASfs|>Sgp!$tWlG0+^Q;WyhByq_-i!__M8h_E`A9y+D!bP`B$7lKNIvbzX_a&^Hh~_+jnv9R%6*e?WpYuJJO!6E>#cr zoOEni0$ZM#b_{Y(>i8OC>yV3!G2ibSw?Cz)>-G0?ude*lJs0&PpM`kxK%e!G`l-IX z=P29i80ys?eLgYzfa;+icUIC4J&#I$pN9NCY1zn}Gq3*C+_I}bH9uE$kAu&H@7KUq zu{)L{UMp1O8g1x2w%NYE*1#ZSoej+Zs2qw{**h zDYP5gZJh_3A@5y1FO0#8mB=&5Np9QCjc;pzQ}?c&?=n9gM1Q%IbL&>DOL$q^W8OAU z2K2mc>zU}I3cDjb9)CCR)ialLZXJbuSEan&pxZWx@uqEvN5=Rz#N;-_66VR>3VGBzr92i_u}-lho>UkG7iEeq~{?4wM&*)ri{PT_coaAT zvG2pzC$~Z->}S`dTehacH)ky9>^e{dUWGNme~sm>BLkie@}Ry7vHcowY zDtb{5_BK^LJ2BU7kJn=%6gycl(|Mko$`@h<@&f?H?WPhW)KQ$OBno@9~bk-^&#r>)fY(^u3-J>0`ZKVxLG`V{MCZE>(Z; zy%U?;hhW`%?|4_@8Js`b(Y5^+1^UshoAYq)d6j)}FI4^I4_||gx?%edwiJKf_ysHn?O(EIS+djGNcF8@ySnS-^`!#*TqMwMFG z{Tl3vYctHTH;0Z?8Qmula|x{V-N?87v1TlrSBCi&<2>7~kPAj3E=#%QUcIemWKL{1 z${YvzgMA>L>%O4pZ-t?q$5qulsj04^PKymxo-3xW^u;gn0q`q|&LXrw4nbF}x-~UB>Rzo_BZ8 z>-hj{!CMly$2M;-)-kthCHma1_oAKCjv=Q$^>%01lW%ukU8U|^HZOYF)p4(6+58(m zI{P5<=t>pAb(*?5v81!>&>Olv&!8vM&w|q&toQR{3L$?R)`Mf}&f1r{Ro5}E1nY^% zF>J*P`;s2!JeHB~^}fCvq{&l0RWY?@Rc&4UYQsKimC_BP`euq%&eX}@NHm2g z64gEV(Ioy%b|j`tk(g;s1|I>TmPGi}3}uA!OZuulqVI_bg|{;|M)*W7%Y!Yk+8K%H zKD02Ox0A;hh)?UNJ4FFQSp&+M1~vjd9^p3*MV40d>$;N9vR4Ksv9pP~$7HV_czAL& z+m-7UPcrc#E{dQocf=`rSvB@-^VUM$HKM zB}{Lu)**%OkDSbi^10()lb8YS^O|&ZYyhh7BKpv?ODXR2JUupQC0e^Ls z!OsGpKQkxMgtq_5wzCZV7vx`P@GpU%T5Rx3829$&2LA?nUcAEKSAiF;H2Ak{+o12v zA~K`f`^z7%4#-=LKL|fgj_CE6718aS4=Or07C`_e{bV3ZF+P_CTvC_;Ee}WCLd-2> zNMRP+M9GE191+1x%0y0qSzDg-9hO*C9NdZBrCeD(=1+1AX zg(Yb7;6f=}NVdgNxQL@&DupY-*04Me^%&e1#;rG3N?j;@(_1K|?O^y}Yj ziCE-PET`{?KafT6p0N~=N4(WGzK}>#-m&qu5;bp@2piIhnrQuwyrLeruC7H-_beB- zI<#5TAO%>-ThuCr)hu*MVGS%4?Uq6V3b{L^(8zucO5t+0IV6R(EF6(S6AKSW0q+NT ziyo3fGYd~hp@q_(*69>2Vo`07K|wiJmvKRhHmonv<$-GOTd_z7%67aPiLJppQCNnQz3$8l*e~GA>5>+I&A#|M#|HNL=f+G6!4=Uz+OfU#T)c6tLo#amS;zcB-!fo(7 zA-^xJ<{HT9b%}v-K(lJ6l>lxr)G>g&3@it{%|I@hN1+BkI-FWRj6c1RdWr5Q9l}%V z4b++!udh%UeL&2E)YR_c_2Z|g46J^sWh~!Nynf;YmC+Ay7Rv{U*H4+GGAQJ{;&!w| z!c5I%&3B61*%FRUEoS-2;&!&g08*#2{6g^t_A~_W+9=dh88Ck8tp*MS{95q_3XB6j zVW`kD^;rXl0lpfE>Ou)jG`e^-^}y)UX1E)`j51Ir=!G#aV>$3$dL77s=aG2~zC>Hv zU`#{1HfF3KHfv)BrexY(WJ!L#XGwS+8C(zhB3{JLZ60VBa+v;Jq%(Fe>J4bIV$!HdDGEU24~iw#1$ zxCbG`UtmfP;>REhM*n;XM}Jj#T)8u>aK0kXEB=Xr`az+sM8liOCM|0>8s6LVuqO07on2*nCXB~{D$JN`Z5!|Ao39+nU7`Y0LmO} zw1tr}Z=}&OU(kP#LkhMOC;FkEtgmZn{d6}*^?vbCb%SF$a~5Bq`oSAnU(d*yb3QQU ze%8a+<;(=cx}AF9NX|kF@5`CF)Zzznme02MXwJDyEPg0wR<*^)j0RX2Qg3*|V66D5 zH~b*y9QIm@o_>5Bqs3t(~jAsd8#@wVSKGX{K~8yy?{$ zFXU=(nkk(NE8C#U)n+zc&W(p&&V^~SJ4>|JGDd3!b7A3Zt^rs=kLQ-)X4pY(n_So_ z^SJR;F74E90?6P#h6kG@8{7N=m(&9$m~vsu)C1sfZV$Vc<7j0p>i22nS$r=X{laC0*p6 z37zrY7FjD%_q^tK%n+uNVBlFHJUfI{A*_a;CPn3jDT+UPlbLNKAVu|=Lg|PAc8}s5 zNzb|GpirsV`oo>62XsJH4uEcb`4l&NXJ#77#-#(GXX*_mq6R?4)EoHAec*wPsW+JD z8UQ6zZ%8xrDq<691E}T=S%ywMZ!n=TK<82ubpxPuYIj~vO^q4=rBk~H8FnbyH)*iJ zbAa(11e{mhgnHhj>%U$=9j(jBW~L07i!pv$k8$8FXfoQsy&=3cgjf|U!@dyS9>V=0 zJP^WzA-p4mUk>5Fh44@azY@YbL-^GY9uDDMA^chh?+)RS5Pm&`_k{4?5Z)KUZ-nsQ zLwJ7(9|++$L-=3_zZJrxA^bKWf(|!|Fe6iE8CZ@)`50rd-*L?SoP&mnsoC!_12HrE zy`mXj#|+AWVRIvxLH&-{KbT8~6Z1AVlbpHzEaw=@q}gNd3+JRz{A5BM@UOoVm#2>R%e%PQ1h{={qQ>m!#C?!h9O zHgXv@$%CUef&9+MB^rMb^!_84VY56qdNb%fBbR9WCD7v|&(Roxo;J^1$qtSp)N_BN z`yHHw$=Bf)?V4W-hpb*ci3|qWia)>`}0uSlVtRHrb(t172H59+R}$s+ug*XExbr=we7|ftVPGa%V}&?1zn);5rscXc*-0Gv)?qJdIfHmc~&%@RR;S3EoK{+a6We^hM=dqcNuS^ z8JGy+N<#FJ+KoPN{cjj*P%w7^ywk%~AwzFirmYuQ%M;AF!ozwxWEtFq0;vdK9KFls zrhXmGKnSOizZsL|%E<1OrxsV7T3il?@)$fxq-?cP7|!}Y><+#_YBA|dAN;`Wh^K`E zowZFy8S9%lJl;qe{8>0%DfoNDV}=ZOk9gKVd`~#?dGH*9mwAkA)SrbSV$*L=^OpE; z<2yuHOn8jM%pd$S5WNZ0yrueg(VdDnSTW_}6+@z|IP)|WLs?NN6;_37KMt^F@fi6< z@WYgBuzSTcZ&_sba`Q=O3>~>#AGzK>EM>5~caI^&D(Syr2aUf-9d?j4XSd?3jvl{M z=dJd4KhR}7;(deu^>^Rbb#_yIGwP*$q|4ae`*+r}{U?;~?^XYR?XQZByvRzP#NGM# zRJYY*GDbYxNWwyw{oRK}i3k!+>H&ZEAyG1d%tECPcER7nb+l2c$8Wgg@0bDFy)0YD z5C0BJh=Adb6PPat;570e?Rg!(z`c}x!Jrg5&AX621xgOR{Opc(tq`71CCM?QhrbfiWD(BYGqeJ(7ct?uSKpC}4EAT|R;?_v=PlC`J{kW!+QIB<{gD zjL*eAy6m`TW-s^5a^3S|>dC{4EX5b+&q3qizhc=MW%z3>(LH}6u-19X4*us<^9EWb z5{rYu(*M5q;FuC@rOe@Z-&ZPrJGw5x#y#x1yn2oIBtPX5v+QN6eNw|n+R}} zdLB}F!ABUTK1y-LGkhl_gM-*Z8m@crF-XQ018SK^!!cH^2u!RTd|7U~w!#0Z`4BYU z{J(FWkLKU~7n`r*pm=y*0h+%-Pa?g$qdjUzOM6-VJkN{6{6kK||LxQ9=X>5T@X!Ak zf8>f{F{UdX?8RW;bQ<CG}%hT#G){v`RX)j^2W zr#B1Vn2P_7EN*4M^>HAgN8n1TXaw3Z0qbzNFPMix|0Dkjrt>KL^Sb{VGB7G;2RoNp zzm~0UV1_WM!L7T7Q|AV(Ld&ovaw~4v6|s+3d`n9^LTSC4{8ZQ6cbXb3f6(B8kJk)K z(ltj zKZsd%KzI047SGqayq{^Eu{?uxAMgQk{rG})_3L!mt2@75ap#x!*7>WIhb>;-TjrbL z-j^)*`-U53aKq+%S#drh;#PsedR$3fA{_fT z2S(RKkl0Tt3vAiu>B`f6=Q2`!(IL0uTo}1KHy7y zH)@s@gUMD}$I2Um-QlQ93^Ow!qAVB^Qe!ZrrMR}k%z!sa-k?_Svi8Qv#stDY0=0+3 za%O7^`xr3H0wg!>q>{giV_=Bk6((D+1k`ziJbd2U$T4v6@C#WKrAPi6)Ip;3IjkVw zfxlR*QK|ty?5&Sduh(8PvU@SLJ7ud08kYy|G}S884z~v92CyhOfZjy`9J(cd!$t-$ zJ|Kj-wN_Y2>leV{uh-e?Vy`G5mjs(X70(K&@jfB!8^XL04h-R-5Dp39;1CWCVSWe; z@Ox?A@T`96e%6qzWdr+oIRi1vN>qCKSs>y5mcSTp-wsfI)|u(k(&zO<@{~dn3&{h$ z^mNvED5PXMY%$N9*N@cHA~mnyxOC*AehzPX$XkKBjBNDFw{vi!Ts(r9r|f>7pA~kH zgGMo<2OIU#wMn-7zK+Nw+`R6u&KLy8_V>;hWHjlYq=gO$nk7-cfzk})q0l_12q}XC z4K(v$8G|kik-_Uie%KCIjQwDVO7vd9-q}mxBx4)&a`qtB#77_;iiCW$< z875}jWUch@D2z9+pB?LnQi$UliDz(>G*#(9YbveINT@>@+DoItZX%eUqr;;9r~ur9 zk&X?iXAdG2QUcU%}rd(R0FBZo;MTnV@?kyWg z6HH7;!1YZgoHSI8?{@*{%hNAL*OP~OVUhJy*am5264)rRf(&d-elkqmxy@63Kt!4V zgy8Wy*rr_zdL(c640K#+D{$+lOr2&Z_^#i_hj_CY;@KF4*pIfTN|O=y!ID$$)Iqr! zNuuSSlfGaYkp{UY{kNQQ@aqg zfyd8H_h_a?d_3WK!kK=?Aj7#>_AXf4WSfBM8vTv`b*~1dXrM zN+-ayDQld7f`nC!kIF&KStiXXRT~oUsHLz#uh}%tGnYj& zX{mRYn(fpI+cHw_FkfP+dQTP<3~)JZ)jvyfM&?~^8>?P}3@a>$+YI|ZIn33aE$QP%Woxm46wJ5B>4~Yg;D{KB-?jK5p219j*gH+gK*2 zfdhlui!H(@%tLrl2t%r+xhgu1K7njo$(GR;gR`T(r8%V2sT_{cVGP=a^T?9^fnw>{ z{TKLT9u~Uaw(YI;KPm_9HsL#OgF|_#2JrcnaOs-H#QA4NfW8UL9-w zE6_IgQ+vV=yk<*wBg4`n6GP6_O?V3xNB+M`vcjCM{Oi3?%0EGOSX>x}h~FLw1= ztDY`~!sh>g^AoC1Bl8nDtw#Rtqg@s&zKPfSa029X)&B19hV5-zfA@DjPIPqh)>+Qp z%Ry)W%i*kY-dam!v(qnlmg67Im;cjxzuk$KQ+(~WM?=RugYMNL_RlamA=F!8J5X=A zMaqGZ_JA6I-V*#PI~^Uu^mPi|wsr=B`!x1AbuqWpf5v5&_muDq!{W5nVPde=u2!cB zose{@qE55_(~8q*;S@|o(kUSm#)N-;mt*#jZku`fUZ*YTv%6M>duEsFs2T2m90n`y6rIAIi<>;1 zy;jibdW&!!5Kh3z#*nPd3sB*9rUL6E@yYjirahJ z@~>C)7X3*oSo$dz4&B1XWk$$@cMgKX>lCPOeFNjZFOP`6i^_YCrW~s@XO(Nt{27n` zclz`i_5&7l44e!W@Z<3hrUJiG(cEI-np)daic#o__4VuPQHQ(w)UUOz zv8AoCV^c`!xI+K7f#%>37N7?5$-A+pqqd>0WlhN2vg-16YuZe?wxwDBP(~oy4qX%A zX{cD!AziQOM5%3kEft0)8yf5CTY^!7P}kUAn`q=1SlCc!z?x2TUXLGK=xAxHStHWc zH@3F4QWQRH1e|DW4X^>`2Mro&PWZ)?Fe%7}@|ybEwJnfoO8R#k46H>+OBc|#v6&-> zE$|kIUbFmbeb4{w7SDgri{l)3&!6+RZi!z!ZF=FjLccpwSv{n5I))Zs z;*YGH?zeqsG(N5vHowRBVl&4#RQnHgE%$$gPc8lmCe51fe;=n4kuv|^a6Yc${;n-$ zql*{%6D$35SNmtii^h}`73TZ1HF0WLQ87zH%KUv^ng6WX@1I?{$p7o+GXMLk%>Ql| zbUF)gzW;4N|0#$AXz+iamiv!%mHCf@@NidUi+^XNtf+9@m~#KOX!f_wvH4(G?SBWF zJ*A!-=YQGT<$uwu^lw6&H^K4Nma?L0MTLdK3WoVNc=2I)%Hr~iC!FQqd3B}#awP5_ zx;j4Y(}mN|nhD3}mkcfPyM0=Gx}RC;Us|@pZ=LUtuk=6PRaP{%NJXMva%FP0|KF<8 z|Lc~r!g1ryDk&@~Uof@^wIBcQzY7KSqG_RjPT6!kSQgEfC;Ou+*9e^M{|S=TmihfF z{pzw6q)z9bLjEc8Gt2zDF^uD?Y?A*|jAPt_1w}=}ii-Rr-g5sZTjE7L{0Cvql1l#( zSn{Y3M{F)zQ$5+=gkH}WGHl#gMbrJe{j!<!a~;ern~o_0x*R zO`ksf5;WO&RoTU8|9dd4>sT)Vi9^1inYu z*xX*<){$7%s@fZ`tY?~3iG==*m3lBG68KcadXm~#tAzgLo23^nu4$V5sVR%wTGlM7 zt!ZLqV@o2;Mr?KP{&Y|jd9U?Hm>YhinWR!OupC+a&JI}-TbBSdknkq+pv2^I62J7%p`_>9g3{>YQD zT}=~R-GN`~S>38?*SED{S+&3Kv$_#Ko|9O&stt;oRZBIsG_Q$69oS)GD{QZqQI%+1 z*Sfx~KEY4hAV%7`vaeNKQ>j;5lUh@Um1_N}L}POuenhGTQOEU(7NnjCJGF{-od7TB z$O{5tT?@oAf|_bJ!4mbIwe_tXjTmQpeFtI#jz^F5>be%R-N@iTcZrQ_S{o6^tu<}! z^;cr|SF={twO~`Wfe$cX5O4Y?_Azz~W36Hqa?Fx7&GmJ0gl3y+-_%?yma$IKp}(;% z!6CFaHP+U{zk&G;#)HD)3WS2}6%>Zm+M$+QfUhgy&v>=I`IJsDB*b6csx`1*dq;gM zA$(BZwz>x58~L#%Y;Y5`2%Er#Mp-yx4Q70O8_W!$t@X8ys~h2KZRC20gM*h|ID38D znpIQE=U#~zgkp$Le6I{m`HM!0HBBw6YMNXRpR*`&?(A9fmYtip=z@7mXD^vObLn{( zEKzlBEv;(fn#DA{mXB{fC1$j=G{FtEYp=Khqy7Kbd-wRbs;d8gpE;A6Nis<$m$oTQ z=;YEiy`||5(wairq*vM!n*^%XXPV~L(A>zSO>0V9s1Gfo6sX#Atx^!QRumLakSeGJ z5m8Z55v$@CR31g-QB)+~&)RG4bM}N5>+}3xuiro4c{QE)UT5#M*Is+=%Q-W14x(hB zwI2S1#arp#5!#8C0Wx|J*WIv~pNGZqKl?n4NEAoYb)njtdTf1K*U|Hu*7nq+A1Ds= zF4LQFbXWB#>WMyhsH!x&!2yX6L>=Za3<-=o9N0nOsM8#>sEI}oKUqs}0oA3; zwJ*D=TiaTj1~9_l6oi(Jy5^oi)X~w?peJlS);4tvbT#!VzkgQNuUuQdbX~*JTGiY; zsO!a~*MjC@2hP)RqN}MN^I3miLO+cuu8tj;2RM077tO_Y!W@){aX%TJSAaj<56P z(Hhh{zn`Z#Zv=Lbl`>8f{o6XQ^~VVSgy?1pMD$3af7!~_OX~y0_411o4J+3y ztzW&eW~oAylBb(7@oySz#}XqGE6qZPS~@m*Ygevl z80hZk*+c=)n;%4PZ5!`?cw+7t=xFN1N=7@7{&u}(>h993E0&%?nrX1yVe3Fchz28% z!$ebOJDqrL?m{57H+6M2(MahAsoItGHHnpL8A;>YwPU64u>8dsPu5gH43<% zw?Vp(d9td-BLMZ9iVY>Ek_7EOw)#sL^|Li3?fnsg8h+g@A&MYGkCO#7Yw#l7i}@N| z*VmzEzGl6p6AO4A(IcED3%v(u!6sp-ZPOZ>F}c^Y&v}P|33?k=K?-KQFThitXeFQ# z$7$5Qt(i8BQUi8A+}K0{4>lwrHle%-%-PC2C_Edm1$yzIOdj$WZr!xWaH4kVb_qZ7iy0ky=1&d}uCoK5L??S-o`eI!xXTjrDq9x5FjdP*U6|VGkCAtSYJF&LWz7s**B!|$i13lZ!z75-c zJ{{_4#*g-_NHw9=+O}y$Yezf2bI#LSLdX7TPjR^O^(c}BkWWey6ergFleD@>#B%{G z&1Q##JzqPPC)!u)&5t!~vpqiZ;yLk|ZQZzHimq=Sn2Cw4388`mZEb_y zI4SDso{4iLdWY&Z+BtY>Y#h}dvWC%gt1$IdvV06;CXJS+57T*4IoNed% zl{d&Z+SK35a}NzwjQ%Z&&L)3=Bxa-QX=t|b*rZbxt7qFb$pVjdHE%(%AfjlrClY$S zhJ7^HtSOTQvWXFj3hj0s!L38B%`}SI>2yd>3Q%Y7WN==U=tHBop%@O)mV-tsCUreK z&?<&bGczRywH_VV0*}(eQyJ`#>Bh27PD8{%%>V7w81LN3> zOBdIg6OOGNGA{L*E}WqkLX04pDR>rZ#c7&80qNQdo9INq>tgK}u5_rYV}NEGF-5O` z)?9#9YbDmP4s4Uzzgs(S)=uquTPEs3KI7!`dM*m-R=VY#C!>o5SnW2o>F`Ii;rs<> z$I48GdRo%1tgENnPhld~lbGIrV0_f}L#5slCGgy4y8e;qr=<;N_szYSA3JbKV5mu- zH1bspj>I;lcWS0MWoXMOycy^T+9{t9T@qMP9%84zI^>U z^6kY43G3Pj+N=AD_JufYz`)VlKpsj7IrpLc1J9&#)-7k+G->nJOJ5-1h)tS?b+l~m z!98eAI3gr5KVji zUNVk(Ti{>{fs1Jor^`VcHjvS(N0U}tH=Isq8@Slf(cglZYw7x$x`xEs!LCh+YCX-s z%dLGl$-UgfI;NcMoqFx!b7`6+kONmG5=q+vOvj{|<{dMa(n^HEPn$FBYUlz5U3TGZ zr=En#)wDU(V+9>M&_h|(@|v23@iP9ntgfymjwdO%Vj7RnSuk_X?2b0keyl{iF z;l)vW_F$fbrVlwowVCnM#cIjTDNAm3mu4^CbxZKJ!0k?;HZ8Px=`UXR`SU-^REzO- zWqL*VP5)0Hlvh~kTb5`&i=pS1AXF{6El>k(w>yo#9?HJaFB7O;l6iLsl`p>~h^)7| zRPid*TTAs)wQDHx{Lf$b1tr!ZvCJg;?ITpiI|BXYLwcZ7yEwCQ3F^4rsil^!Kt+cl zhr>68YHv=t)x8`gSLjy$^e4}G4fVg-p(0gFGB=}m&BxME@}|(m2V&P}-H>@>#=+=E z(?6a{s%}oXCCIi14nbX=QTO8?{qWfzeE)mTcxsdUM_(W)^L^oLsL8BAJ*z!O^g&k* zbos^o+|)3W3aXJm8K!r9yyqR0wEpPG@n;W&K&RV;!! z9M>O6nG86N&-wT!dU(GD$0_Z-aGZ3{VnLu5$E7Zo;5dcXN=`X+oYDzSE4mqdp|E~K ze){2;`MM4rKX=seETp%KjE=`g9nVJkgVynhqmJi}N{>NW|B8`@0Q6DXd%>QuNE~57 z;29jJwD-bs{JcOt#DWNwr?mINar|gNeS-!1IHkQ8j*my;Sr+Kyl=faYehv~Zil7(z zDeb**e1ew%AYCvjJ=(vc{W;n{@loZAMx{$erAtSpCyz>7<3QUtZPf7@qtfN0()4S; zKO0$$;mzbU-4udfeB7ZJ&@V}QK9#g*gQU+Nm4D5swD)B!$=^Hbxc3b$Ij(*bdme{@v(sZr?{Mx}ou{VD9MU>Iks;u*SIlnL$ z`f%zfpB&)i4Li&7%Jb))kIM{6*HAfmv3Hek)U{ggqbA;R%T*I|wZ&Y8dE2gqx9hS^ zH{Qa2#5zAq+RLh|`h($xi1 z+W$OD_T8uXSmHFNQha`3UFS7UH=mV`y1MFJ!l3T+J_GYE)B2)OAB&CpID|f>(A#x< zGGkq;wLiQdHm4xgUe>$V%>j+&u*j^p7^6jIZN9+b|HN-SO`dDOCeIBPpTMso%@}{t zX9sidT#?f~%t}QM{d%g@=-GfJ-IT?9p{WZ~L!rsD$+F=xtKJ_o*I)7@F zea+ABVE&sgdFbwNri~8TZrVs+%skKJ!5nkG;cM{=PQwr4$D4-H_JxMu@^uEVW*eOW ztS_dnz(Px2h2McoS-O?o1mg#konZWMuJ1$IGZ{UKbecS9i|5;;_^Ei8%w6zFmC^r< zC9lJ;MvZ*EB}aQFo3fZsFEsZ2C)m`57#MHlAG7Sa338L?HmgrRiTjJ1{C8oiV))be zjj-V_SZ(=|6$4*JS)=otC~Nphlr{XEZ@*J*G1jjPX`_R^j`0b;+2O@r0AI}VJE>$d6ib_`&$Zg&#~CUHHM{ zr+r_!=u^{QF8pBH>pt(>MsC6nfAuQ}o6DqsgQ(Y&!#}2M@J0MK*yMj5KMWR5!Pqf* zQlKZ*$l)tbj#x7Gq@e9)en>fD@x2zGuo!Le@}IK!Ri7zbOrB88;(XtR5NtDj8mjdD zAHrBOc7~Suu^n3F$98D9->%RROFw+&m3`3SlfJLQu*di+T&7fw_$Le-JU-x;4I@5H zUxZ)wIf6FUO4$f}zSJ<V#nWJje10NMRY*cp(!$x&X7&a>CrLr_uXie05c7q>ePI(Iau*hMfIw1@j)#Jjj zQJrKCl07J+^}t5;470l${H(~2fS(hFjp}(}*r-kk9|ONA3>($U!mv@j!W=|7dQCBF z5O{^*e2cLrdh5t!YhBoY(|#E*)bC~YQrytM$jdBw1;X3N=UMVPrQU7IHdyUK zo2KFPT)(2YBm&NO0V$la5W93;0e{5d?O>df((StfN5Dn6IR;q2U<2hz8$b%zRfq!@ zffq5S()E{G=IA6auB}j>3_8!hgxOsS#?6yR?tB%zS>$wHg*K5qYc6;Pb8I7c7juyE zU(1}E1HNAPLtyj~m5sp1>K^7W_CD%3bN2nlM%<1s6J1Ba73jQ#2Hhk;ikMf7mZud@Rifi}t!XE)Y!W_lB`vi0F z0kHU-?)F0ut|UE<3pTc)uY+P+h*oA=E8$v_13zkt41`qCa&h_@gXOeG!bd zkHI*Kg}=k&nAM%&Qs%%h@NDK(#B=xp z=JfY~FJjJupTlSa>50K-;Z|ncHA;p1BtLu`mNDg^Pr~pQ<&RW?4>RXseF)#hOwTb4 z-^ZMZ@e&qa<&ysIusrRXVDuB|QLlkze5E12BIPWn^Rx)A!%?2pZD6s7;x~dg(`A1H zzF8P;jlicQ4>W;aWe!%MJbXv;*l}>CTPb7EI?o{zx?Bn2BEYElZyioGPHtIjh zpVJSnV~$-0-XeSoyp`Gc3;4g8UGx?H>9Rref7)2d9|adNXa6Ty+D=dRNt3!#cY{|+ z*$QwYa~fhft%*5j9av&J=MZ>1%QLY7eA+e8jKhs{n6LK6PWYf4VE@$^nw?#JmoN0 z+M5QSr6V7eO@9!7?`O{XFt~#`73Ip7R_SwvwKdUx8(O1rWFC z-(qE6Ton>H|mr_tKJtdCh8MlGaf4bi5 zz|cjU`**OkB{UtpndMpVZ4~jO^FIZa*p9})`&k}ByQ2r0^AJchM^OF%##dC@mGV{a zNtVa%2LFOt+ljuR{ArUQm;OqB3${vsg^IzbkMe}S43_@NhMgIcSsq#mp2M68A7@;^ zOrQ5;NPK2tjAmTIa(YHs#wO-$#7;&xb1r;C^B2`c&qByR+!N#?=+*#mL%z2B!|0VJtga5|tV&2P45k3a)VJ4qset} zX1>5o^IRt4l5BwcRi?y71pdnkusjvix+05^OS1^Yk10&{0 z?ji=WHZli}f;%NYY{-Iry54EvYnUUy0)L!2G#7k_$e#v(jydIn;IA+%#Cw*+yaS(Q z{eb1!=+mrUFyqNDDof%d6a@d3SXW-wlJd13WevG0XRIT&VEz;;gV^lU=4IaxJsRb7?yItTJ%&B9*(vNAM z0oSuUinz-D4`zqtmod}v?5)h1@N4#!%ru6wKf;`|0DKd346&4b7c-r!Wq*M=47(^U z$<7%3ko_cc+JAw6#GHb)ARB4QlR6FjH)i?_E=TOoK}_bH&+;6^Th0>Zv>$@kFo*vL zUe6qYFLR{7La;5To8?)Tg5hhbE9-XfUdjJH@O8{|tvyHD<@vTXU^RXeo5p{fnQ_JJO=(Jvy1!`6Iws|JU3V5yTIo%W9aHf z@KK)B)!=z7R~LgXWDflSyoxzvI=GQJ2pzc_CC?|pTbQ%q*IeoA+>e6yhv{&TR05%%SgqpJq-$zvTXeIrcT2U%AXd*qk?$If}8Lhjos0 zhT*fk8s^k5fsv2oDHs=d=qJq>LwW7YIZuH5nX~>3hQBCJ46;1i?Mu1Ko~-@@`BVsFgd%;_(J?`KX$$Bz-)a!SEsoAWX7bDSsoDKN^A z%~{WaUlm47jd_!qZcsZGlL+OZy2ipLVybKGRA#Dc?0n`hbdHr+()lm3@^7;8oAHIZ z#$t{mow<*IZxC()-^QGYSR4Ck=B%+`_>}So4uU0SXbm6x63d-+;MbU4jIFV6F~<-) zLVScd1>oTM zSlUZ_>G80S+7*2lI2UaeJ>&CPp7v$POL1M@$R(EW(`Ypwu{7SujsL$6*-|c>f;bwF zHfsGhgAtd+S;xVbGt>Gu9yXCYy&8NqGd*&1ytFq9aWVc@mS_G9EaNB)AB@M}SYrcx zM0!#_1NjrU7p{>@>?vvs<|{3Sz2jft{M6Uue=BnI%lJRAJlF^RCvz%%c@FxW^k*Lf zPmpVd`@rxI$wPVIS)%7QF#Mx!dmOxk^Q2>LIcJUJ`2zS--~MynCps%3Zx=c0JO^d; z^~v?%Z5HnqJ&4b9J|y{1f#GXi?;BvOahf-R(SFTGz&{YCw!9+zAUj0z!k!qi?KC9`qV+6PI!UyJ14=?r<$ct={m{;j30`Dz}?`tIDgia z_;?3xC)=DBFy| zEAneG4@Fo{7_nLiKT=&`^l9N7;VLlNL-Np5U=w?B@LrY&;giDKg%M+g_i$YfbQeA% zbzvPS{JQU}!e9BmD*TJobqIOHPNy1QFNDvv{U^a$qLbwLBL5ka2)s=OMausFNXXU;ctNNWKN;FjtisCa~}}K z9Cj}1&~-fre#YYeBYFM{^52X6bOad z;xfs92)xeX7AbokfOUkpYuADO~;I?oYsD$Cs%I4)cYo+o)81uqaeVls~YAf0YC zxLNX`&iH1L!zb|_%+#*F4Yb8$$_%>$xj5Pi!X8K$>ey`*?2!2u+{*3=X_$c@# zVfZ61?V|4##Q(Y`_WP`hYeD(V!zAB=v{^2fnq zbIP+|^plpq2>!nC>)=3q33B%B8p--ZgnQ$-Gc7S{;FpT)3=bcXhV#h;<0;9-%Y zy~Sb=T^la`2+P9bV$2C7r+L2kr1afy!QWvy&F#hT z9mPgC4*ogIbKs9+v`xz|1^?66S%SQJ4ut*^%wv=%QVkw!$tQ~ZGRP-O*~h`>BQBAj z&g)B7i2P-66SFe|+{ZSgz-J|hC9km z?52P}#H@85W{zPlDuo@SGqeyaeH8r?_zB5h0!CcvdLIM7;pd;^GSm6RB-pC+pzI`! zS>i|$cq!IbFuf*S#Bw?xoz%=6L_L!*W+{KhXTV38>9dzfPczeZ&L_Po`LD*_Jj(2T z0$e8fyTMq$Ql+lRs7uEK`e!o67wLCj0KZq{7}JyCE1d_vnmojuin=E66rE$isE_ib zE&^XG`Zt0f;5^yr=gAVo>T>W8S)S1V{v~4B*dsBVihaRk%oRFrVfz&HyVn0La0d3j zl7C8EdjTq0cm9&L~S0{W0(azuq#~uj^d_ zIsP;cfDzA{4}e>RG0&7i7s=Ib@P4rkJ}bK!@gi+6yHD!^FXVmi<9=9zh=XUAGYWxJ6Gn_oz1LzB=VbF&Se{LMf;md|BTlr<#NTEPJ`4V?#Xn-EYq3** zYVog_-A5t+KNe$dBAs;2chF9PRSJf1lf z^YOGoi%Xe<@b@(I8I{#Mi#a_TaV4Azw#hQyC^?>zlMIxqd6apc6p3;X(m0epIE00 zV86$(U*{*C^%h?$j5&dx(xvkdZxSZ`1I(%uJS2PwyxZcv!nZ??c-Hk2Unl$=_%>nE z^GV@-;4cV24#wQ2%Tj*K1)2-MPYPFo5qq@H(XSVT(I$m?K+B2Im&5_m^Qy(K3*%kA z<+BrDrW@AMd8yX39y~@EexU2-T235irm^fy5r$4@Ivuf|)+kq3hrz4^X|Bi->6->s&63b~~7hNFJ&H4_mxjcq8Oj zTa3Qb`Kjy;7Go~b@;4wyzj}NJbC}xoX^W2wBQBgTTKo{R_78kVdgwcM)HY(;!_#*< zHRIhu{}Jo2`B3mA4&e)n!LY}I@W{H8GU1%ehwgrA2zCJY^cJZ3r< z2owlYo;Wj|7X-?Lk(bV?sIHXN;CaGz;7Z|MaJ9v?!UK?_j4n%zGQ_mc53CnPoq-L) z72p=(jo{6~Xm0>@=(1>U0J=0k3?3Ff0p86_d;Y*a;X~kSnQ8w|*LkUIWCj?=G*^L9 z2XV??FzV3y$u`XI#6kEq@Tf5A31Ix{vZM#&S2OAPiR2;q&xMD;FIxFuw(|eg%Ks1H z73gCbv%%HikjUXb7ke;MFMYR4GyLY}TU;Ovd+2%%ZO;v-O965I2ZD3h4a7%gwaRt$1T2Dm~_e* z45F`G8H2%-U^52MpRSBS`d&8fDXH5VJ_3GRHGqFgyFe#s1zhD03;z0YT{(ir?TIE06RG&3i%V7nk&) zU(8;bKD(m2sJbB51I>ufpv<2RG0tDK9C1O{h&|pa9EW_D#a9VeLw=3L9}z~(1f^f- z+G9}q#n}y(c~ZCQQ=DJ73x1?}bzAOd)@}KQ=p@^o5Uv0}BaC>X{h7A87cBin-!}+K zf9ZPvkK`eL{*GDK`zK-Y;eRtzy>wkn>x9iI5n+-dQe`s zB_DZ^Pje;sYKvvPbE+UeD01RM!er;|7Mp$~+m4Bx_+DZ1)dRxtdCFIqwcoxjJOH`O zjno$@-(k7-)%S$arzy`_{Jb#f$G)1{LfEK{xVqhHV*0vVccoo63cuTpnBJ^oYtbyyM^J;&_>}rF!WMc zT0cXb7Nh-IJ`eI;!eoPtL0b1h*NU9@fN&4^2(wEz92Jg$KV$LdgtH)jRJa2Cm@wir z^sF%X$MgkaFoeCOxh57uUub?1^4BeXgIW8QVj68E4#OzT@H3vp=`+Tcmcu{cI5W)G z-@VlO?*?N&^cdqy=dXqw{o*nDMKkHIwRnXv>A#d&>qmRE&fSo2^3SQm?UsCt@ImCk zJgKiOpgrMjmiz<4Moqi@3)Yg$hHL*Y|koKt8y@vnqm0-Jt+87%!y z*ZjkO;XInL4pLdC6#FOB*Ti9wqYopQ!ZW}*!t=lrES@NgexyB_)=7*qn$eFD%&X=) zPo$dVsuJ>A;oabitg;siw?KZ0#qSj+otH6dJ(x?iAJ#)Yh-=em7ri1oEcq3}n;|!S zO>FwQ6O6vrdWb(JOm(48&9%M=`cyO7k3RMIOTzmgf5hUi3Eu+w4}{6K9}B|=5%i*u^cel9neH{yM@Fy((AVoQ8Z-&fF#I7w}@82zQ?@LTGD#qh6|S3$nZ;;V$KA^)(&*9%j7 z4_OSqXgy@(T^4^@nC$($#a|SzgZx{9z3e^Z$J^Bs#Z$Ljn~ zLH-3$8ex7hI-lb0+;w2&<#`{W(*9gOJ>6cjiUg4v7m;QB#rGFjrAL*jl zpn9o1G1Z0n)8h{bqrcK`u-NqJ0myC@IkD-}Ltym1)yHwFP}@=7i{H zEji|1oo4`fzASaY$I%m(PSd}X$Mi4kqTdRd&-J1|q5ORQMc?z+Iw{Yug~?a1SovSG z^uNJ*sNbV+3Zq}>w*baw`rJk9ydUp*!q4D+g0C~9OytkueTFdV%z$29mbg+Fb<*d) zQ_;8j1^s%DL5X}>JBZ_0Crlpbr*WZQ6{3d{(5cU-h^zhYJE;|N&6(tQdHRFGcvlf& zyi;)NJa|{e9=t2GSIhBEwrNJ4sz7)*7`EwkHV&R4OnG3ZS$`G$pm{aq)zX%`!SJk)Ccc=4kt)J?B zS(xg5MVRV+m6@&q(z&|U(*i~vnm2>r6o!5$!mOZ^_7GbCF)+$&J_&|THKQ&kpILui zP#{e5ICJnIxKtSJaLSlNq;rNaeCAXzhYx}0F-K6&skY>`!ss7oh44}EYRL~PwS2YCxKT?2GB3zKb~%yeyp)Le6=vOcNK+m<|D$UznycU!C3#B0u$$z;GBE7ZjQoM9 z@If$aHG1fpl&2>yd0z0`g3CdcIeOPP=BCW81>M6q2;KD zzGtR6AG}&P4o3U695&Kt9Ga=@Mqw)3B1~mB3&WN`r*H+hS9l(HKo~X#hJ?vi!@_mo zeZtTYxKZg$pA(x&&-2VQ{@fkD{VwEs z9YG%Vb>GflzHeI)=M;LrMV_E#LkRm5^L=3Yt+DnG8Hc(n5GVQtJ>FWm+LFUBre0cW zy!;z|8)!cDvy_|z9zc!tSYDbF{^Ui&|8(`uCYz!`Z;>$R%>s&TOJ>#d*)fWz1!zmvNPXF&(36S zFrRc&JuAcL8_4mYz8*5V{PYL4{cEfwZZqu*=q||SnHVg! z??lKBktY(;<0i_Pn>OL@cw41US%iDmC8e8ihxvBgTisT18c`?RS6Z~9O$t5R)kO~i zvCHudjd@6&)&JN_>kquJFV-)Njii?upGA-oV}Gt+XUaDPMlAUdzpMVC%5a} zwh?Knhw2UE&(zxww%S3TeFthGGcThL*F}@`b)p#giS(t)G18Cnw!R?ROLMySGWu?W zgt(fIV7^fbI<-Dr%ku1d2yEFGilcj~ATuwc?|ukueW%ccPeDfZWymqI?^*njKH5a! zmAL``y{eJ_Gy1-Zq@{287>Yat8R^TCW2Em-__OSzd&SVY;Ju8#S0J(U?HWd!%9Flq zIfgXdb0kUMMkL8b^D_G0g22|d5BcJdk-l8~(J|6Twpj5Tdzh<*lwYFHDMixGcS71L z+4M26v*hjhsF?RM`syJWrSG))+Rri{`HTE4<1%&v+>1Z+GWA{$0p**+2eK>hZpJc+ zC?AeH_wu`mgY0=oQ$LuO(f2h7tai}vm9>u1`Eaf1tn$5dmihj9cKK*OtJ{k=dXat8 z+L-nKc5kVsxe-&~}veAO>w zm@PM%{9|;VOs%_`kKKVj8@C=z^_Jq#)LR3#^sSwRH03idQ!lP>+4{arZRo@w>69Jsqo5v7mfm%uDM_dfr)i&#c+=E9TCgU0E@EZaiKQrx*V}yQ1Q}^UjOM zXV05csm1Y)X}gxLUgiXhSy1cfdDs#J8+KD|^XNbHZA7IUEc$2JaO_ui9dOja;cWeW zXgEi|-!h!5-;WIE>Gz|F=RmBkqMM_nn@`KLEtCioxO~P=zvRg$~z*_pF{FUDv8PRg| z#_m1p{^9HX6vz96!~5L3@c!`de*J!8c#nQRIDFvOBtJBKy?(!C_y+xcWcWt?esuVt ze!qM8qx${W@W=G~y~7{>^<58s0$)^z?G1Z_zcRM(UaSgs!*|db9lpsW-Lc`D^?T{= zCKazN3Ou(O*T;0Z4+f76A8|?>n$^PLzJJ_BZ68*_W29^CZWXul4EO#0u8qygJ)3-I zr7!30^})68_(A|$@t_0JibfGlr!A2T8}(D&!rhpjHAcld5>6Z!t+bo@F?2R&myE-TPHf2HqrB& zHSQ8l=B}P2XeGuTAIy@)y0j(WDec)dx26E3G{6iMeMj zT~AF*ll(VWd2aIf9nN>X(_8zbSCpOQTO9eQFHBny19TnCd(km^(fJCsr5b;Dx%cD0 zPW(|h%0tI!{+%poiBG!DmGmbm%^D_GAJz#`D zl-GyCkkKF6L18>gns=>E|Q^2L*M=LktS1m}dxfMUqoI3IZ($4jzxGU#w zoxaCTUtf#47{}?@{u)dGn$38P5sb*M96{~|3HnUWDJA%2PO=3j6n| zRM;Pb9!2G-{f$#YufboB;{5_@bM+%5FCKW&KVCFdMTXlZ43UnVQ+1v31!W`mG`ti) zZ^1Hr3IC;whL%*Ty8R*eV_E$Wjy(hW$$zQS&>zEhRMbJ|vyeZk^?z~Xaqtt>w~m|` zzUO`07k_eOVEDm3&Bm$W3wBOfas1XY?bBCKcZ7U51GCuhWfO*~_o&qkcSNcdDfqc$pE_!zvHTa`kMSde9hX5%U7u^>^VwdpM!pT6J=gOo{Gvlltbl)@0hOJRCNNs*tuGT zu@_NvZ0EAN;{d=qtHsXx244-qvdy$X4W&xXfR$9Q_nQjG+BHBlQ#`Rr`L6vdhs=-$FlO98dpG z>8IuBCmPGtPsVsz)K{5m}Oz%lKl{Dx<^sBe#2G3zSjXnhKC@-p1$VBhs6(teyRNEJ z)wf^{Eg2cvvs}d*r^XfzU$&y0{I+`|$Eg`pdtj5cGgU>z&Us`fjwjo>uTHIj&RzRf zsMUDixvILZ@-m)}DKF{9oV*?O4M=%aiP%9K6>JEST|1}N)tT~@n_(xnxk}p@fsMbb zF5kIoNgl?4T74VpC|OY_b4cui(^PQQewNcbg7|&aw87L*^)9N`H&xdD)nj=T#djU_ zRM%0gUk@Krews_JpTxc(zYa$NcO5JmIf-+RsvEziDsKFxnpeHYS#7y#LnpYP2L7G`f3J!yL|e{+fy%F48yob8h}cK;e(x z1Nd|C7rglw4*AB}4d3m0?9W42!FR(E_pYnp$I2pAspAgE$bV-#PX5*71F>9r4}5Y` z``g+5I~ClM20K?OwSSTd9(WvcZD}A#a}Cy?Am*9K^|b-W9EJ5~xAfz4H||mS=*t;5 zenJ(XKjY}n(hvO_^Y4YcXTX@N+ zWz-IoH~S1-_FW?*_fYxj+eRKAzO7^kvFXCE(c$Ok4h=steF)8QD88^}9;N+|DbZK`b7i~rEJpnZ9>F)yG^QEKCG$M_i97Lz{8BOjP!MlSkk zox7a&UGOdKN64@F)K1h{aN#NRhoef#2RAOpO>Re&y0J+`;r~2Z<52e9v=-xCuSvU} zu-54d{dF2+G=jA%b!V!37wV|Eb)_EbZ-Qy9((CH*rB;LvaAxf+#claE&UKSSX>m_;+Fg@i6bAk$=8U zlUCNF|Jb}3sT?0=F{3l zwvbK3PoCZu-6rgvp*KkS(B}I)S~^?f@<6newX2uHOx4-3si(a;KG4*^WnnxXrwb^3 zJ)QBUfraskAsnyZmp#XIWx5l z^o0&}DjLi{%IOq0WD@Jcbgx)-R~G(L`Qcd*|43`2Tf#d(QnADq6{cRC8)UKOh{aKh zW3j}L3gd$l=lMLP>$?h0r%#QYS9B}*lSNe;Mh661xg>dBnh;)S)$}f6si}%sYNBn; z+!&Xo&r0UzF<(fW&s)EZUQN6^2YFR^E!pfSPP|(u zuqDEK3o?CCH)NvdI}pZ3BJgL{_aB6!4|_k)XHAg*O*XgsLkiZDIgGv(=VlnT?s3Xn?@OJL<4^t)#|q7xB25tT$Om5E7WDJJL- z=1F1&9jTDSN*uXqo+K`!BbAcC3>5iHl_ct5?2oD?fuK}#YbCLcj;xSGJ<5E3wInW~ zY;}^jlv>*$i5IKH1Y5yAAX@x;-vQ-b`rvLl>H#L}_OWE`I>9qUZNkvk$> z&1Nz+v_UJ#3_F-=LNADdYGR`Rb4}<4`UNi4iO5j~^^&axW!7$%1ia*| z?Uh6uC59x?j(SFROJXxRHEW+FI;fr_lDLe@9F@ctN*t3!CnfHeL>DCJZ`WkWch#{irUH&yU-tZjXHQT>SSL9eFw$B1cH<{D{O~ z_oFm&Qs;gERfjg<&t)6zeM(X=J^Z zF%IMfJGB&e1xsfD4=~a;>So3&;Dg13l`1V8`f?HOsg0Q0QX7j0XP>9iu&$*}C1FSL z;M_SXEf;tprMDLko;OdW!GP3N#r-IbsW3G{M-CSEQ%Q6{>baD@qqv_+!oJjbl)kTc zD^)iEn9w$)!MCXcjD^6x#al^X9C#Z`(eBjajK#pO27)>PZD}dRZDa=;msVhJ?dY*5 zX;Ho8<T3ya|-i&wIi7^%FL>lh8{6Hh%}72w5xcfOT&OmyGk}IZMrYg zFrLy5Qtzad>$)QJv$M2EwNARrRNA9lS2`S-_GnPYMA}W-`gHg*?Iv9+nvT#&rzdjZ z4UWWbEtuiNbcc6S>2P2=_NBVAZ?Fc;F=@{P=*~q53pfVRnLbsAQdoa2OI1Y|Li9bY zjBX5#9L(tU)DBi0#d?+65n}lT#Ju=NF>|GM&`&8b5mpoPMj*PFIFsc|h}k{#1FO{S zyupgrf*bQ=O*rLVN;sagFC%NtVO|b?X^ytLkx<*6uK#yD>0fm^#2eM<3gnxro1TI0 zP31?nW+0lQ`Q(=9xuwX!4^+*VO;XM~2e?3IxDfG5T@hUmhereEKWx@GCsv_ov(DLJ za$adN>FkleNX~i4DeC7F>VAx8oR2U5r0Dk1@08SC?Cy*O#O&@2^hh*=U7Ud~iI%Wi zGtec`a&~0~x+J=uT}jV#h+fJ2s|<8W^uq;W0(>7mgt3}IkFvs-_na-@7-lle7+Jvs zNbH&1SgEptH^5hqO|B=r5%}WdMhwub;6d=ylj}8q6#U1@jTop|!Ho@|NPkxFFw__6db8++IpcQnTE-qS=P=?P`+{d;nDjFHv@>GJX<{!HCuV0b zM`FwC*6EvaX7)v6%ij$yMn8?eHdX_qIb-{=*lL6K#%dZ2-yd7Q)bN9`HT8xcj@2$U ze1a{2Us5|BXU5u{+VRcUGOD!q^B#T|CJGLH3&5Zp~m1X zKHlmhl$i{-`*_61Px$yrAMfz-sE>F0c$bf#^6_pT@A2`|K7Pi>V?KV?$KyVJ&c}Ow z{Jf7}@bNw$@AvVGK7Pr^2Yh_c$A<_hR8zNWhvzn+-{^63_`+Epf;V=Xj*vV^VzoSY z^Dv{EcxC3nn};As-OhuTImQDs55W{`)avu{kmn~7L9s`taNp-)N{QVcsu+`x_uq!8 z@-gFKSeWq~l2X{EBOUvjjvANe^Xf5J5we$P8^=t*(I?r)F$H8x1+v300^FZnO~8mP|xC|ZKaQ~R%M>^eyP zTh}$V9&^Pv*tW57aq9j^tfNJZZ6tGejvIRkG0$;hFQqIz$BkVNE!*R)<~^joluaJ{ zUaC-=F%A{x(8Iv+&9!mxNY0SXJ`Vmgv&=X+)b!docry0f-3UD52$!<*bt8BR%||1g z7Op&BH-bYlUw1t>E?+l-8(nSGdFMsmI^kdKz8O84eticQ^K%4MgMGs>8; zn@i7`!8{WtzORD096@{AdgfUaY`x60Vdk}mVoiPRDt`{S;}(|BB|gGDkLo(gJRjW1 z-I#wK%HD8{<>y1^l6#peX^MXpos4!ZAU*C0x-LN1b@Hy|u&2(<+e!b+@W@{XV|izo zUxj1Gb&f-N6y+}>0pkTeUg%@BkBea-kHdU_Naoj4lUW0XOT~0B=2dP2U1=m zsdx|>DV+axdVVi{+T=J7(ZwCgkHJ>_djfhn&ckrWt7unAh|+-Ke-L08>aRJpCZ|Z)5ysmQVX0$a3HM{1+)(wjJVaUdypkxmL;FD=2k#pIVZ#GgiZ>_`16e|G9i z0vvq}bjxLWQHV7Jt^hCpU(%_E*){sAE-JDvE4u>EhSn;J@iLU z*K&RI=Tydl%I~f4)2!nczB&s}={B)pkD9@OqHmC4=N@0VX|PQ{6`n`UDy8Prq|!@%m@2#_glV zO|0U^c?Y<0NSeld&e+T5dr5AqmrSSt45^FhKj$*mAK%AD>f{<7NkBFd*^QB-QJR_{C1`5=Y1X3C ztOdwgntUyzQJRYBi<Rea2~ ztkJu`;stDtcYv)y(pWP;*%~j&){IJGffCd8Q1p_?LlJcpr@ynk$&Fj`&Y8v4SVg#U zxb7Iay7>3pI2^FU2uW%jH(9;Yp=vwC|yHLheOs^C3!6;dIm0i8whWY-Q+;I$E)a}SQ^sTM9OFzG&z6iy(Mrd9#Zt(=aZ(KJA*K0N z5?aQ47U<09NE>uwf;3(y3jA{DpIn$yh1$=h+NqX_^Vm4la^ZM75}%A7C=w~!%+g{w zS6YY&ny>9GrG}68?AZ`3?gtM*8rQ}R2nU7!U7CN(YsrdTz_rNu?Qq*i%RY7l* zdv-bkDhE5UIrH>^x%5T{=GoP+)EYbk=EDQh2+DdMRk6-#97k1<-_B1*0(;8+S31x> zTSwG_Yp!%uApiO$uxX(=fU`N?<8fd5x+qN)mJMOAc;rC_z60;3`yy5N-j^<8rS1$g|AMjl}K0xR{6&QXv;;G zk-F?^TcFe$zcju;>DP_bI=N=@UtPKMx7S{$%-I+Yllv?Kt@C`pdK_S?UNyL9S z^&Y$Z^k5Ttx%~k<;o6CypK#t|3MhAbQt{JgGP#`wLn`=Zr@>cf#7WwWFtSw*smT|f z<7X#HFiGOP*W^}jKWGj)>kTP)$hOp%n+!<~>h){(j{7a~M3zr&rD%}rX zVJA|p#P(7v(QhS;ah9W!qs?}vABLyTZb?18XA$vd93!3*E6j2JC$CXM!9QS+oYP8; z1}k>yBA&dg_Maic7L!%|%M2!`s9^mc_%}I#hpcta)O`BoYrE=K1q%xNsEBCE zVoPEa;CTb1*8@n-ydJ#mpi%U1tOu?gqo-|wy>j8BX0#?!Vi_-@>6XZt@&8AAtT=J| ztx<{quvRc*p%pC25#nXAqBUtbwAY$59q^R+Gns9kJr7&*)07&uOS59n?YGtrONpLT zPk$&$nN`HXq%592{-!6{SC$j45obv~4Zbs>!S+?I$M1E&k z`x^^QRiW1m@%z6@o7_phJ9ENhx4e!PSs{8h2RtQy*H|q%V=tLvf!Y47WMtNA>52UC zO*Zi~8SI&-f0wU5xuDfHtH5d0okpZ1+Zq8T%m219mQ80gHu=Ci*6jPtWV0%;8hr+- ze@a9XLU)tIObswWmm_Pqn?ml;zh0Tnkj1F5Ewp3698anI|7>Nlob98j z=d3&5>INT;7ONMNw>Q=SYo<@m<0{q{xo`aJ9e{cWK z1OH18grA~u5O^Ty{3A1izE_9uUMT!IH4A6qt|oo0xRJ?B+{ClBkCM2_$;`ecqLxjn zdEo{;cw$S(03PaLsJD4TZ_l>YzTW1UtxcOcHgt41cMi6+Zs=-i-b{~x_;K|x9UNEL2F9+m(t$03$mjx{b<7-EHxU-B^6q#NvQsX_@PsQ&3bg9qLse7??@_;Z9G%K;b<1eQ~#Lcc-l{ zcKgcR#CmsX+}$3Zf1_Zj7kaW7i$E{GSF6uPzX zBIGX6x#z{_!rCcGR{TOaYf!5@i~gHP|B*TT-;7B~%^tz+atcc6=$3N@DVTKbb55eqEkF)37unpQ^0Fj@UO~2sIkVa? zqHO5U8K^$VS0j#->o&#RiE;ctn-uoA@#HLf1J2kvWcEP3=%P8r+BFZ&DRO(_Nmbnv zaPnqNESfm$+_{Lgq)P4#IO8U~zt~MJN5H~sMeP?=Tr`QIdEylM|J;(o(xMVHf7Zl` zb7vP;Yo1qHSmJI)mf|9M6;CYIP>h4`z0#c=ci-QJc%E2NIBRB6(YdpViju1QLBMgp zv2&nkk^4v>?q;oWAJ}=N`{h8D`>maE_n|=i!uOEN;Mxl*Bs7#1pcePxo$*CU?fPxN znO%5cQN=Nb%JckiIprZva_dRg$xHIicTmmOcRI&)J0A@shs5_?XAJrWEiEjXRa8td zNJHv@omK3YrvmXp?a9k}I=T~`9sL6eOGIU2Ky@_@CGbuC{*E23v{K-H?O1r4I$Lol zk-*n~2U``UV&q69`rA~ZueGT~HC$5H)H(nB^XmF~+UqGZ4tDe;{Hb3hwqd?+Rk)A) z;&sa}p}OYIA&pJ_&9rtT=zGwK=B>B`eYff#?C(WJ`WSiNrt`)He6`4fJ$v>c`5}gbEVfS`&`pj`Phb(RtpyCarvH$9pdB>uATX zwag>QI$8$M_7*&WOdH$Y+_JSrH4Sw2!a9B$RzKDet(2Bt#op+`3XS%z9q4bKS6QJO z+|xFometkQtV@INDPYe z@iwQ8o~x!3DB6k@y+1*INc40k=zjbO{DQL|(x#T};`BL{E4v43+mtRf2jvyM^gV}F zkk6Vrsrzt0f4VJyTL+%hmFU{k2RDnuI(xd?<5VnxWfukXc0eUMx_SruS`+l^G<0!4 zZA-Q&TDHlYzE12Z5Fct2Ic5%eM~8^lkzG9~irqtRXA?dF-rNEIP;Vu=dMGPa_x{$d zrUcsG+B^V5=eeooO79FDq;pUFE4)|UBrZv$)Pf2UIWa(gE z`=;|MR_s7Dpyv=GxOD_vOiwmTw0HJwYU;F|zie${&C=SHjcXE@u3Oo#w0>z#!^P|B z)wcFJ@>F6;Pfw@X+}*JW9%|ll`Q>m9)M*b~x}3ALb;HHYojv`ns*^Huu+2V?MxSoC z?s2c_B$UX2p9GAZ0Ud{JTY}OVP3(IXiu~ab~pPasDl$6!*B0;%nvl<(R}4Mp}t}9 zx`xI&njq(BM~O0y78Lov?7a(kT}9RKzxO#O$w^MGP12;LrRfEz&`Wxu6lkGo($Y$4 zYnwuW%4zNiQa5mBomf)qhS1%+1>grXpz@QQ+p!fU_Z znpv~YBotqLzvut|p6CDk_tW(JX6-d=X4YCWd(L$a%^=p3jU8vOlC=lMs~RvfFVkHO z=k_p8v$)KeE%EL>wm&cvK1yENk)d~sThjfTI@ooy_ZFe}p=$&3D4@};1c_f$?`ACb zFJ8*8S@PK2!7~hQ7m{x6Y-sDB$@8CeJpJ&V3QEyF6*YEMnCT2#Ac)#|0EFG|<@4qCFNzHY@C%ZKG5j)K+S(ACRudK(6~0Cn4yI^EULEg8|> z(bFh-Z7b@XXd1Gli0dEDCB(=ZT7F)*v03_e*Us^X}S1r%&hy80Pi-lT6P2Jc1_4AR`!zJC|3zC`DV+a&Dgz! z*&E1;V6KzRTsH?>8&8v^(8kQ%YsX%6)7>qbxbR69o6F+)ay1@c9q!XIdAF%aHbvS3 z7ku5vq`3vC2>S*C>r`E1%=Hty+*Z-fVB*ZGEWYdOYOr(Crm{Gfy`o&{@P^%qXj+NK zUH%(a4vqF9e8qVCxI)OQJZ9XRWZanrwx5@R*ctZp4A?24xo1>2i)yqDvuSAdi0v&M zecp0WyKGU-Di+oHHLLMbi|iZu|2#IL1AVmB+S}95!e|$J*^4#m<;l7y;6<#iboYkN zPBw<^5<}TN4fJesdy7ulF0y^JTW2pDTs&J^8<(_nw6!w?++#OaW-7mX85RW^QJt3V zHWqc+yO>M0H??@7sJ|!O&W?wPc*^oMRkbr_RGC+@s-||a`R<&`%U~Pfz801{_BtZ& z-7x>SW2+%~jg5zXS&`;zLGCO&)y$EqscltLSIn%M+S<))c)WN`?do?4_EJI}M*$NqjZ$-LEslMU=t ztP|{>);XT;4D_6r?rg~9UwQ`4mz-|3NiADjFFLJ__R>gBvrm-^VA@=;ytPGg-Zda$ zwEH3?Y`0sQBsbaH=={NepK)xu(|rte6V*5+&zmIuS@i5g634g+qE}*jl{NFv>x15t zSG(c%%`y+n&c|MnI{KG(_qX)Pjk&mE7pC2qH_DF*+T|hI>+9?e%m#C`FC zF2vo<%Ve?jE;+#|YgdWCRuDz+St?^PewRHA`&XGdX3K51lxf{~%f-!3RO5_eXX!Vfr6*UQPP4NAv-bknqct~9_gRMP*t7aZQbq4qU zl6O3KzebMygB<*%)|Q%lc?-wfM@}B)koPt74cY(h7*>||8U6F}ey3lS_bdJK`e9{x zAJjiDZ>sv`;pgRjQvdwQVP$#W)IYy$Sb5v9vh;5@e|m(E))vmqtqE#NYPQ}GyD^Nd z%*(D>_}sIFK}~9r;Iq#OTJ0&W7LRW(ESyZeMY|K!ygn{>zPPZsmWnrqbvMMQv_yxq)HGk?#HVK0)XLDz;rmbCKlaPZhLwlM>rn46o1_xU ziQwQL<Q06_M%t2Yk6CITEq5?qK zAFGtrC02`a@i2Y+6>$}Ee#EfzWy8uNhm|Xbl}8UNj~P}zd|0_^Sb4&*@}yy9`Ob25 z(BGq?0zjFs^Jfmq$7D+8{M2FPX~W9Xhm~gxE6*HO_Hx|VpEK;d%+KhcKPN;5fU=+K zQsxJtqL{5E7?Ll}r*}}6d~rUJ->j2-abswwEcxQvoJ(2qWg&m&(BPk{#r2$*{HfRS zcFK}J4O&i6mi%#FN0RemVo=Y&MOpIa!&+WRnSa5jwCs}YreWnfhn4Tway^wL-+rd$ zWt1h~Ue)q8%H*5<6=Y;GK713F>v?T2oH(o;#n6sF)b~%rN2yPKW$T9$YbyKsk=la$Hl@OmxFc**DRb}ftl$!Gbs zHgoKve2o7Vanq0&%ghUBX1|enWis<>I=epIV?-~1MK7@H7R0_zCyJJaJZ-Tyb#L!B z{oY#-oYD6+guEvmvNIA9J0tTlc~n>4vM?`6ISIRjp-&;a6W;S1PwHM)AGX~X^1Ncm z6DzN-9g5kA>x)GGi}UssiC(*tKi_Shbr0-bu6Wm8YRI!h+kiTK$TI?>$-JE^b5{;> ze5%ZIIS6qiC$}OwIUC6rdvdBw_pSl6-B&lUcdTP<&T(xqU*@>B$nA)I9r_c=ef>JN z8qOx|M)t86$)&Dq%eT*1BAfI#(vfyufBbf1EQQVvkMkT;cfMoRrW0LV?96wJoq3Lr z^x9&bjM|#%aU(yMAvR_0ITx0?!rdPCdH%mBX1C#T&Rju~T=8*?&!3;u)UOU6~r-?OlcOZe9w zzY_$tYA2i$1a*#EweBSPi62Z|Vf+v=>sVCx99g3EV=haljwQI(<2yXRk)M&@Xg8W`R6oVl zB@ZK=LQe<3R)wY|bIm*gPJNd$*F)iwTA1sSaQ5l&D1J-@Hup0h&t(8M2XPdgT)9TE z_YkH@lG$?3EpVOXyj$U=mQ!LMyGH+qFxM<$`Q^u;-E#bRnE5L50vXQ*%Krs#Rh>V= zJ1iID%iwC|$KlkORVbe85+3qhjP!;1!k&xbDlRt3{sw0?c(< zIQ|5@*>cfCFg_A_&ap6aO}Id8eop21KK!cXC!6bwr+f6|7^4v7d<1w#W-Fg=;M5eH1=T`7ZcO%kq=UlG~ymk^?dPYubv# z8pjm7fQ96tcRWLesZ>sX3D0P9%t z@mbuBKv)+nM4r5RJ-g2C{B;HaTaw<#v zpIr-&P<`T(HBNP&g2`{O6Po}ZZ#j#3leO4#ayv{N(Furu)_T>s5bm;^OD^$6E~6tk zkVPHSw-3UfRQ>nEdo3qf7qh5iY@Pt$XE~RCWm8Aw`LDqm>*Pc5Mk|-R%D&Wc&Kt1K zujI#J^Z?e^g;dEGiSS)tbSFwBXqxvfU^RW6VV6DheU&R)|>Z{~Au=*;G zdO7MVxz|RH`l{e{SbZfwK9}Qs^(3sml51uTb5h2eO+Ry3vxG}n7jtg19R3N`^)UZO z@VBkJ_%`@q%ej3pc8xz}EWcJc`H<9HE$W5mSb6eDSoh4?D9(8}|lfmwG%C&idj zXIU;H$5O493$c+RheRj952=eRXWb89p*jPw=0@(P;hU{IaUA?j%Q>tksRu2G%;S{K zuVT#R$E`d*9xk+;MegNmj1u32HAaQ!z-Oxdjj+!5yeHw0S-IT9GM|1(pCy;`KWjPh zC73)Gx!isxA0G)9kAi<-x!^V!TOu!{bNSC(E+V$F?ihXilm9o%!42eGw&lFD;gOcZ z1U$jATpJ56u^j&eto@9C9oD{;(6<6|TI`o#qky;y^U>j;;1Ol!i_963hlj&DM+(Ql zYgJCp7PeR}nh9THS=Pux`YLr3Tj0-IE;%0FuX4sD`5`(*Z^AmiaxaEowDRn4!aCQo zZi3&o@~nF5s2}96Nkt`Ao_7yS|HNh%{wO-ia(FCE|IAoUgXb&L_o5}1i&L=9yJGrN zbdHr5at$gX*G)gkpP~WP|317`<#S=p&-}~aPguFEb47bpe-Zoz%kgrUc$oft3%=iS z&fnojEeE3ibIVzG!oRkhS_W%w#Jge5?JW9OthrstTrV!P`o&M%oRhW+pMo{dlYfOZ z&vQ?LPq6xV=fbC24$gp2x19J0+-NzMSQOK?*vyl<7g#P}UKgV$@|>68k6X?n$BUUi zB9BdhZ?`NrDk{Fua^h?7&n(N{v-nxdh2vrTV(R9SuNwCxc~LS#<@l-OaMdUNB}ZG9 zye%OHQa5oHTx(g@l9J_?3qB2>sXFwrq}g)b)o_pHtZG=tSkec7(#m7Zvyz*&uIPWs zav`xRdC;=y!{e5djIZQZmh;G+l2jANBq=sl5vk9x5Q5NkKpH2UI+iqa>)byOlX1SJYrHh%5whK;Ug?(UkT5! z9A5_OJeAvzmNGW6pO5cL*I7=|W@(${9Mn- z&&m^%;5n8H$e;3sTDKlvp>pOyd6(rJ##_!9#C{x~l@m+D@4)1xaN-nL$CzCS>lkDB zp!~a5C;J$fwMO&{&VvtFF8mDqd&{|usr)aNORzl>U8B#MIWpgJK7JZmVY!f;9LX5R zpeM)3xj``AvF2xP9&+ZIk#B-evvuW$kt4ZIi~STaAIW%)ojRDc!{}cNf7FvRMkD_s za@H2Z^mpX#+P5@JOh>yu{KV>nmMbqa{*$lrQ8)E7Hp4f2D^#G(RUJ3De4D5Eog ze6;d*c%t&-F#eUXlrWZxIlR;Z%TcjXb%TCrSQRZm{w!=6EGz z7rDfxl5t8OpYc@ zc{;z-x}C%-t~zJHNl#v`a?v5rrEl_FeiUOj{5(9<>c_~9QN-Q6zPAJ>&qXJR&ql5C zDJ6EDM4;OlJN z7;zuXU%6}dyINP|`>jrRG_3Pfu6?7Qu<~4DJ^DGTpEn5qL7BWB{if9^`8<43C|i8UC7T@z8hwZGWkqC z9Cjtw03G9DyRBUE`LNHa%^mO^R-PiC5BrA7SvL;5$I6S=!Vg(_zVz);E0_JuVNY3> z{mfzisX8*2H>^DN4r^r0_Ca31AEVcr*fsEMuDjZ|F^p0AoFGTWELS_z;nh~2(+W3O z&ffwPW6{rl6aEnU6=#Q7i(J;6F*-N%SHgSMCTr3dVk0`T-y4I!BxmxOqhr2lK7;>UKmV-uHzNPL)sa3Q&e+9=1^DT3U84%8 z!V|5Iye4`$Wzi{YglAfLj2t|Cp33Rt;jG(6=Rvq$+vWV>j8o=Ia38F5zwjlP+z|aD z+CO}Qr}JU0yB+!EDt`*zrTWsh>y_8QH+wo?wtdUrjhs9wkajr^$0w$(e)#9!*flqb z$gjiy=#BSnt6xk$jLTD=0h1fXW;I-)?cN5HCt|<&ESNRU@Fg&MX6&Lf-`dZ83qFP1 z*S?KguljqCw`BS@?gEuRk9=#UZ{zTZ*e^K>`Nyn0)&O6t^2gyDth^W>jMModu^#s$ z&kjD7yfSrPuq^MhjbnYtLoP>EjDy;i{t+HOulx{?U-J5fAEa+(@9_8?E0?)8Ui6TcpUfk%G@Rz~ zIc=A@HvTu-xAn04r~G1A^SPWhNmZMZ=uDu0rq9f^35?(5>L5IhI?@(xPMECx2bj4R z>6~EuCa*(GAlBLF%P|3;NZpYIaHG}9?SgwO$BFHP&8o8szDVWF#R>Go)cp{AwP%y{ z(6lS|_o@z$6TYbYD14Wv^F6IQ2{~({sap**H^hEL9R8&;c`^YXMmqFE;+6FSWI2{4 zZzqmNhFp$`v$d||0%JEeZ-JMy$8kChDt`(2`IalOH&N%c+>>?Ur7CZRuVgKBb@!!sl~2NqQQE3}8UD8N+wlFipGD*02R+6wGM1tS z#_67y1qtOUgei}Ul<~8?w`%l-$0$#MkMQ_?%ETg=>G2%p1;|hKxK?=?^7ng;pG{l! z$j?x|3_e?VC*16DyYepNo0P%eL&|0FB_1=f;qQ9< zfbsxxa?j`sMA=|k)&kGYN-IsTK+r9@2r8(xomfyea2$njH*Yf!{1 zl=mY)-Q%;AA4A^kF*#)FzKWc6IAX4ghF?eiVdVh6T)7I~>G3Y*^~i~lsVjW5@)nr& z%E*P8BZj3v#4BRrWmwwf`f6C({ju_iFtIaoVb&yZDa$A40mc8R0W zf#bAcn0Dng4#UXe?CT8ER(!O_hbyl{&fGCN!mMM4=}(;fL&V1^)1UZB9xqhB2l-Nu zPg9n@o#FA>%F@qsm8GBE%4P5-k3XbLzQr%|n7I~>>ne}0Q6|6QyOm`udz7gccX1SU zaU>7ry)I)@_*=>{-upd%P4{#%cKr+g>!H$48U^25mg zk>Lar)!4zGa<}t{U94Y4Ua4~7G0ON^Uc)l_37GZ5Fn&&)sEmIST$_x13%uB4u1!Xc zuM+jj(g)_bk&FE{W#X7PPg(2_D2x3;WwCRyveH8kqggN zUIN#6yhwQ^^5x3JI%}2kW$@V^r3Na zGvZGvHzU8viJnzil}-8M(&V@b^_N{b9W|{gHmM-WnG90gqp> z97?+`zQQiP(yoiIu*O%~%I3N$HVrd34P#$klXdN8v);OPvybptV;T~dY~m+6hBc;P zGji5jBNtw%Oy9CuZ;f1-_0}+b%dYpBc`9<#Hy2asGy54MmwxuCJ~5K_;EkOru*O&R zQ`r}*d^)_{V;5igo9*Je7k2Swer4aF`ocFWe-~yQHf;&B4jY!S+-*6QfcGggC$iBq zeHMN|c^v$R$3Iq0czl>;@qf+)kB?NQKl1v!*q46F=dujf!y4;Ac(KZR;WL!Cz&dAxJK;`Gj-Iiz z6Zu6RU!pAf*Lw2Z%E)qV_xMZ7oX@$(o#>l*eP0@n>?Hr$5uvIl*I{Q!&~~>fAB>0nbjm zvgmXwOMfo#SbZD26FL1e{S>BuhVO=TF2sbdQ@Qk0uV1EJy?({SzWUj)`Z=}_`46vHy589 z7X4#9eb$9YXO74C+{ovmU*qv26nLxh z0{9~yU!g4RvR;|K2@@m3E8$!9y^H{6F1Yt-a*0>O#LMtJbnaD_zI{)53(QJ9u zz6^fK<7brVi+tAB=nE4&!@J-&JpQZlZOH$T;k=kKxtEvnxJdb{$VV#Q4UblS3?8q1 z0Os0c+Ij+{6exiE1wEN!)T+@UP(4k}B# z_|E7{yO(+$E6dy(Ji@!iVIwG?p_JMx`|6m!$? zqwwRF>3)!UQkncrJ>xNbHTp}CGan=Vy|VP@&mMFAa`xqYN@4jvV?OJztD8SYM=1g?^muv-tRFn zGID&Lf3e3OR^EbqhsQgWw;{h#xf;GjnYhdQn#QKczpgCpe#hhcm8D%`Vf67|{x3ZF zE6UZBmxLwR!T5`ko+tFStOt495TF{Y_!~Z@3c1{}Jz0 zo`RhDV&uZi7sE2Ho0X++T-S_z0RE!KT-S_zJMw)V-=lmj@&`PANO>>vAA9^$<=2rD zJ7ZJ$SITd}uPV!UIcIcajGT*@m>QnTV_ca&7ZOt=r=Nvf*CH-erk{nQmG|*@xU#e} zRaxxJP!>DHF|tD(4e#WUm>CwE_|Y)qEhN5%#Xj*h{1%Um%3_nbX5!8MlLp8 zti{enD!-3M7i;0mRsJZCANTl^%8&8LdT4CoPx-vGVfVk-PKl}kS#R2Dz{KzWeI zCp>;iS;q2`@;n|{_l$k<$Di!A;P46XUsYbu*BQ?cJacWMRPryE?)bP*QkAbBA?Bc>z(wiXpPFn&Y8+$XT7r2ZT9LCBlq6A ze4gHLF*?L3;!BieEX2sjg|Adz023o47ygVgJ}h zz5VQk8*j-mDlbDm%j4seE0Hhsc(L*%d*^7j9Rshc|kB zfik)!!hiR|8akY6Uy{|M9O2z84%ze$%shYgay>AUl=B`q4|DeYW%6pL$1EVk8sr)ibe2rX~_!@p4W_}qa?q$T(u#ETP9)D7K zE^^{)bfnM3*Rb^S^B#XuS^9am@;;b9qc44UNLlRsP+9E!%;TRc??g^~O=3)C zF0nH#ej|1f|5jQ2_L|3kRHiNY9HFyWk)zDmD+;v_7s90~#}5@1%J{6}a8HN1X6%T~ zqm=PU#WYXnM3vM33g(^Bm$p{&K5NJXahGx(a>j3Tga?(E z!IyYU9E}d`R9xvXaWwL^$Zt_jz@JmDhQH+TUCPp*Z+lGajGYC@zwhxQ%F>@FJbp@9 z+I@-F`kfzsuUv`zPagk8c`l!uAYM+tGL_Mh&t)1pbt}gySHV*~W_}qR{9H*aBCb`Q zjQsr`FISd!o0W-IWxKMp)$1{_FgB|%**c?$CF9`8^V``7UtRsB$TqcZ-iyw&5| zm5Fub-5&2##?O`C_4om0a!o#mYV41Jf1xbxzN{=hc~x2LzpY#hAI!*uY@6G-fhT4f zM`3(na$C4c*G6G{YW6L{)jD2b+BSPs;RU+q7ha;zPlf5Xd;Ld#%hmZOSWnaHtDv3d zA&z_5`#K(EkL7q9*ILKhS-TzYWQ}lqEjj0S55sYMn|@Z1?#TPl=Cg>x`}DJ#!W_}q z6Uscw?=KoTk3qgNeipwOc_&<^Oy46Pl1K7cT%)rEu2S9xQ{TuhgR7Or=4@pi#kWRh z3CvtIycS-dybi8YmOh{twY5xn8}gOP(pJ4PeiHwiYah1d^SXwmt#)N}1MIr%axkd8 z9XaDM@*VIt<-IU%82MxHPR*Gzc$ab|OxtcREuZN%EN$JUIfFmsJ$3Wi$ZYsd7nC1^U)P*Wz;7xi;kT6Y;dhjm z@cs?wOiqr0IcK;UE>>O-mnnC`_`>M)!qhQ509Pp=fF~)_euyoT+t>(aD`O*^t6UGy zQx^O5$-KWm054M>gjXu>fT?42_QUHl^F`jrGIOU4dAl;_L+l#4^qD`yVxK?5TVUES z{1{Bx@XPS_%sL~VJ$BcuaHr;EfX*)EJK$?Imqfl>`E_`Y=8VYqD$~dCw#>RDpIbI- zIKBz*%&bxJopZBZtw+8uvtEVwWL~cb@6#L;`}oDZz9*l%a_d<5sPbFrFiy9og-VbUD&*ej`Qe!9bG0OBMR+U*xW0SnkU{B7h ztMXeIW{q8jesyMzjm=ixg&g0S91#0Fk2Y%;96u%#_xPomSj%sVnV5E zyf+hTS&Jh1o=n_j?niR^>2g5kl#|PxioVw{$&*jcOA?9D1WB) zZ|>r555Y9KCy9BK9}zYrzuzBBGxz?O#+^xmX(E{B-<->nm|q>X<;-sn+j8a?h^O%j z{tZ@``7vTo82ucvC)3~1wZBK~$umDv?6+dIwW~vZu-L2WegZi2+r@`E8T~l%Ax^&Q zcZv_K&J_SXj0eR z?Z%T2`AK6>KIGSpr}gzn+Dvnf9&+a^$+Q{MX46rtWNMzDkxGi#yG)p0W>#)!U-Bk}ciQWl%;aC+ScgcsNo8(!eClE0Jr6F2%nl*NvWw@}YXc|U)?J+XhN{_(n)ub1GuB+oUX!?nxn zn!a9^nY01_;ZJ|Hwl4nZ!cxnzma-Q?41UC_OhkkHvZfpHaO(@&JcSC zD2uN2Px40e#Gd4-Z*MPU@r^s2JzlHx?QIgdv?2CJ>p8Kv1NQAbL-A2$?r`=#ia>aQ zJ+WySk9YGY_Qvoh=fvI@dGzchZ=?Jsf9`PhMDE!el=Cu9vBw@XvbP`h?B(vJyq-UI zID6kk;M)^h&R&(Cll~3M)7*FLULFm5ID0>(=-VS# z;q1MDz_Yixj`Ae_WW4ey=fvJ$dGzcR+(|jfpF2d4BgSjPL-h7hUM6SsaC&YoFR=2> z?L0ca$QrNh#(3W1+ba~g+JGXC9jUxPgh8-*8~@R7GY*+M&R#9-jiXS;u!}!;sO^|s z7laqs6PtJN==vvpa`t#{!PuK=^$H~ql#N96XfMWVoU!|PpY1tD$3@RqF(szy+uTKx@-(J#F+LpLY*K>?tzQ=0XkstQ~_S8j2 z!~W;=B<|AJ1y+15k4LYErCk}foRfARoBpcQ|`5A@J<|U=r0N zXT;uIJty|wf~8J1e;j9Xu4K49&d1}N^z^#K))7)e4>>1#CHB#YyRaKu=}J6GpE%;Q z?f37IDe4#L-#k4hI$}@S*5lDmin5-$L)w)?9%F{ge?8kUzXx2vA3is274t}5`t}B@ zsJb7SJB+=ymZtN1xJmr9p6OL`%s94s){Gf*t7purs;V{;`~QsU>N#`fR8`HIIdkS* zBVV7lbROFJ)ji1e3NQm%5j7Zc8$L>!s*liq72e!DO*_ zeAUii%gL$1ubmtuv6&?{w?6R3pxBsufER8r3}(;0FNkq2w)KU#2j$!u-}%KwUK`1# z?{H4*NV~$cJzI26#D+U3ecAe(w+G*=FHT=<)ZBaU(dpMShI2u9^D^##YD<0f*fkC0z_*VX zWZYGZKfrghW&GsLBpDxLpUk+YT>2YgMx0z9YHkQ#*m~j9gD2kiSYTpueXv*jCv`;c ztM>;<=Nr>!&6l|s2T3_k{dLZkmg`-abIXRbb??F3>=+Y4%_RqSZ@ug{gG0{W5KKOC zH+l7)g9pij0kPxGyGP{Bj`7XxEf+qu5??cS@HIZb-;?n7WahyXa->>vMD)x&5g&;j z`iIhsd|5;6zJ)Kvcg~mB<4furUsC_Q{TWtC|F^FD89u!)IC1@*!Svn4_xj+Tf77q` zIX}vH@#Q{OhVOJf(D^jPuUF1zetR)o!~GR6eBaZ9Um?Go4d(D(Sp(esckw)w&s|%_ z-&-DADSkG7#82<#%R|{Ab}~0?EX2nyX73S?_v)XF+4$t%gF|!g-h-LkyZ7L-o6LMN zxwhcM-I7!P7-W4tAaQ0cj5(R{6URzjV<+w0YS#g=kAK$9ufjjbj%O!!^~4|{W#y#D z`5qU0T*g=>7wtG{k9@2$Yt|m@Zp*Bl8pB;C2Hsk`;D&>*yY*G(1ACiY_6nLX*Auxw zzUzo3azqxB+i7sEOJwodS`bT`QY>k%zve%=eMzu77MfQ$tVA}5EitoCu+7AdL$WC* zcSF%jcT6^am&fF{SDZwil1;G&R)Du^2dtzG$qBJ!Mm;Y0MRPKq7oq9wEYnO@*n;?o z?1cR0d?;Tk<5ig3`0s$l&x_RT;n52ZV5btn4qKGr{yB`^(6m%uf_h3LA9nZ1Tefb6S35Fu2uhC@XWOBmSYWmNP>zC{CXj zk+TRKr#Tbd`VEzK8}UwNlD@?2n6ndOs(<WSrXDne#zpFI#)(2&%obw5lU% zK>nXPl1BKf?Z!E=+p!t@hy1BcaalZ3YJ8N;*+AiFYk8xfTHa(V8w){;QSHs)IYQ#B z;&gA2^L3+HobC&9zF`!L)0={veS+G9Z^E0@m){aDEKWDJn)`snv(&Hmh`##r0U5aZ z^1&d;dZ5bo=^^+}lPo_%`i-1y`G;`zl;ZS;#vtd%^d_qsre{Bqp3Q~nn(V)4&9nMH zLx0W!%REQOUR+zuy`Y1fpG)03EB~eFFSGnK{N0t7pJm*GYc2npelA~U`31Okz2z6B zZoAo{l9`FYa{Vtn6AI7fKhjS;pSYA+kr4DKRQ@a1rcmbe5gLdP_}aS7&rgW7%VvM?s6Ej+sX>w{&KoZpzr_JZ~J1BcrNE3Fqg86Vd;a z^+tGvutqmLlJm1Py5Uirxjt!|X_T&JpKc5k=7g*_*-xo~1;Wk%3r_Y^*?NXt2`D@nt1DQEqtL_=2HaLZ6oBCL^#sQnPu+Mms%%mFMTOy zT;7HDa+hMlZQ#8VI=J^oY zT_Iyn?PU7o?XprfgsCemvI$Im!6QC8~IfcuY~lGWrAkb2T+KJ7H$bV^2@ z+rL=N*=VZyV+Bows|t?8SDVcE3g+UsTdlk0%ih7Q*4+gXk*(In1%xE^3G3DZLXz5J zT`4zGOFd#;SwKiqZ`#dG0U=2p9HU*p_xX8Dnfy&=iWY|F!I#MOAV?G?c2aobs5Ntg zqQuAX)x$@v7Q6<0<)}5xhN1+1$o<(-s||kwe)Fg`%!;DKC*fz0T5b4K@WG=N8@?9b zjkOo2qQs{$e~oFkD2uQZl!({z-=I4MDU*`LpP?U9EM5oBBG4h(T`*5WY){>Q#A=mb zKhQ^$>2>Hyg7rnWN>c=Kbyf@Gx)g--j>17XYlq6 zej$T*Wblg_{89$LoWVOY_>~OamBFuO@a_zLErVar;5Rb3FN5EVQ0~u@zsaso@_n_U zu_k*<`9F7`&0e{EPSH%8y`==WXr|3x+4vXDwAm|PZ!7wM&E8U$>7w2;w}ma5!VD^! zVlG344@;U9jV+UekQ(L`|C!yb?zD>Ly3@Vxbn;iY6x*3&$~hPN-6VV{Z5zG$v7DDT^+9Bqn>(pBw1EGB05X8fMrLHQR}S~R7v@7orL9xP7zOWfgIrr(%TUS zZErbYhY=O!o>RO#VpOAQv-(;F0{O&bFl#m+i&`LOy%##vY?Fh~Al zjVeEXF8^(jlE6m=j%Vau0&;}^i&y&Z#lXl5rReI7+%EpPCU*5&+N^j=PRS9TjAq3f zf&woKm?{{r_=l97JI}-HDdLE$GVVM!I=hjxz0p}(5pU0|4o{c=&dB(E)Ws-XW)-8# zJCI$gGS*l*Ms0L(v5U(N)sWMSxB|!9L*6JJ@nh*eQ^tU`Vs%e z&_^tc24^#A$k0ce7o9!C(4&z!*x`JN*GAm>&#F2_yf)%nI{riX!|AO-@72hl%XwGB zWcF3!8vFia_yx#i@-oTfvY*>r<%FNf6y+rem&s8zo5?JTHj}Rr6*d%}sx|=Iv3lE_!-aR;;r9(OLOLyhFs* zI8N?P9Lx&Qe`B6_P0ECmtqFV+{}J_1j*VulrOO9zzLfUI-c_1 z2DYI~qy`O@UvpAZdv_30&fRAXgUQz;3})F}xl9yJmIlHP3(o50gJ$7JD4wk*JDthj zT9cHWNiaOqnlxJ0WOv47PsU`gXYzw;a%817Ntu?-Dx5aBv7s{v*Mpmb1?UFh2N=`H z6Rq|KjLJY)ZxF8LRD<@D&9NE!$S$i!*%@Vj3>u?Lj8W?>65H0e(bk~sYM|h1Fh06r z19FVi;7^XXBp?;LYmA>cVXuo6gOHN!&w^l~8537Td$QJaftixKId=8>q3iz4e`BUp zoGfYQT}Fq@l#2G~Z0t&|4ez<`S8TD0{<>eWQ)O|hwyUE?6ht%|3tyC~=G0|R+^ zC2X+q8!tlZ>IpJVty>~>*36)gE2#TeyCm1s5MbbZlwwqTV?$A z$Qt&E#(eM2iJkCHQ0 zM-ssCDrL-8I)OCe$wQLJLb{g|=g45P3%b*72sl&oMzsTi4>B27kQGo@y$WcuZo zgve%?=vH5GNf^W`uU?4i40nP(&op`|fq7TM?87sIn=Q?*3fELfvut2YqjYCZ3K{cV znq=Q%TBdxwuP$Caffo7Fr6`@~w^(JyFfTL4Aeir;m%1l$HuCbx8PD+^YDU!>s>!H| zvleECAjMj*h!^UnsVgI2FOtznlZ&SX66Wqg>l-(N zs9L6<|3{-?AESro%kcl2^nccHG=z-b<*Pq#V26}OXWzq-ULp)}uqXF$h)QJoe>R$b zClIcw_|27RBhNJUWI^v>y<3`bQ|5-#_^Z$}J z|0N}7@&C>^-pl*GJnCU)W&ZD%*vzCGx_ElCap;Mt6>n8N&k2KJtLl55aQgDvwjS?U z(9Oma`K}`W=C79zLef<9){y*b^_|GISV)GK=+l2)|$idL~ z3u{l9-r2$Th6nn3ruJ{>ZRwL@Pg~Q}z6PP@#-QnhbF8pVlru_L;9=pNEu}ANvQI(S@0q zkp}X<7QR*;sW4uc*LBk9^9f^nqNT5|yT@W%lWU2WJlY0P>)X&IYB~JCP)C1Lxt}Z@UH93AkYy7UQ^G-c{!jcK6&L1~E{*z!@b^Oa)FIg7< zVK9x4JZEZM8;0{|#j-ugF=03}-dYtOS+(M@1>@r_)22se4xbipyo9wa5ymU0$-{j4 zZ$>QXRsTX5#uu-RpHLNFJdgjY<8@W>wQJ)?SH*AMIxRkXUVK^A_;KTxj-Nhm{QUT= z_s5T(H@|v({Q9la#!rvG7|e^$oEBeE6`xTRU$`@VQq>UCcVT+X+W0Y5@ip`K|D^cp zs`%Hpwn}Gz8&t)2V1M$w_*&2YQSXm8&x`j}@j_d?Z{Ga2>G8LNY4M5E;^$PwCsf4` zT(px`ZwTkbKTs8)Zps_RNzdX1^Wwh?<_+=hH}TZC`QuMMb^iSMC&#ba+S-0rEY85m zkh$rBpugjS7D+1JyyTGTk% z(UZlkPWTDqHSR-JNsfcaT7#a2UqlcZ0&aRauRHV$;QbO-(I8wQ$tHgyN- z4c#01TbeO8(1nGj{=R{puEu^+vjJP_Zc~YK>He0cAl*4aTRzjPH$H?{K}vc8t4jSOb_K!4Nhxz%PgJ*@*nB{dDf z#@3F`ftEhxr}Z{;&YWFc*B_*rGJRb=TT8yQR6RslA~uaO1LZHysU#0Ri36?dvr+5(PZf+R#J~IM>_K)Y00}((JOy{KiE6 z>5De>wKdMEUUGr$5Dw-OMGQuM7b4x(+0)q2nf8XcczOD?MRiNpoR&Ug)zbP!s~6SQ zuUNG@*wnUCx}ILx)6>ZSFkw1-#wk|Z+KrE+kkhXjbLg-*YMIFjvo4BTH#Kw&1oX1A znJ(}KE0q zHeb-)(A5&S6lm({Ij@86Zffoynqfg_3rR=V+S08Xx|=d5i4{51+S<=YJKp6qi6Rq7 z=0v9X)%7*2>es9srcJtT>^OtpUm-_(kL?dkPDPQ!Gvq`6;-$+L$zyW|mkS({ZtZMn z>z~P`Y#rAU@2W0EdsSbzsiQ-D-re2O8Kjr3s692kYEkW)RjZetz9?PqcWcR-`nnZo zEZ3oF)YIl_WCq?%z-1(M)nIxszZc4srXO7mgW@uT8|hzDXG=pjAIML$Bruh#5lMF1 z)upAYrLV1}yJ@o>Vl;R98@hT~%X%9INKTTzyQ8O3f?!uM++5e{ma+aev(|NYHFOf{ zpt)y5BQw{i&YUwFRq=aULswUW1gskh>XxpqO)p(uzi8Fsn%YI_)%B~^)Yjua^0~94 zpAneW$ZJ_drBcw^+0!r(n7s4is!I?T&5a#REp_~)3)gg3+qA3~8#7Z)yz=g9t7YX% zw>zh9YBGzbt|HO&uj`Lye{;j;V6e6EG}bUY(z1yOD2PQ`9WwR=67HPC5TZd;7ymr~5npI?Z{hHPE zw1tbsKii3ssm+bky^WSs;eueU0A_jKEEks6-kyGQp<@+ql$oElGr*{I^qcw(ogEud z?P?t8+0^8mf}Xi-GHqBm7(Z#j(&+`qTr3!HOKanjmX5ae0gbM?(t24sWHz$;w=q{G zug#j3Ztm|%GtHXG#8Z~9sj8hZqsnYutEP5w_3fO>m1HB_*U}~{PQQqIH_Sio*lI{N z)jagePXx`^0&9BnRFi~NQ`@Shu9#UhwY8f~`#@hu)4)`Q+R)D$h)~v}fsUT;sjT+$ zi0M`_6qQ-E>DTPJCT)5)kQ9xb=a~zTH)Rku$b}dC13l-ZI~!zDaFz31+1jY<6TNCW z&jdr_AQx!2ex`MWioBvJiL#$Aas}<9Lz~dk^?qp=+XQdk;(h6 zQ{W=<(DGp0f8%*)scmn|%;mbR|Ts@t8A2Ct9b5W6wl zMCC4{F_8s%F)4jo}rshUGosic_~K+=Xru29HoLOoR@NRaGuY9yN^``QeVo^!TCH2 zE_dGIyp*GZ^U}9dtRP&*dDmAX;=Clt3O)Y<=S{-cvKef#V|he>1P^OfCO_CH<>=si zX;c6xmk%qC99FIzRvta9?B}-FJAByrs$u1El$)GPJKs61ylGf@>#*|nVdYN@EAP?r zJq*6se+@~l6!JvIZf=I`S~z8%I`ZgN7SLW?Wo4&eHkv%zi;bMsH70t#WG<5S0wO5a zR3nn>ra*Lgk%B%?5<6xqWjj5IPY1aiX%B)b$BcQrDj@)^C4gHj@p&qh;u#+%QE`mm`uC!LcQy!y!{sGuk-ZxdOCM| zI{Py^GH1(p0nr@Hk23mUjw&xM(^xv34xd4dboeA=uG2q>ub?=cg|L&qpJmI*m%~ne zI-i+y^0QzkZ{*W*PTmSTIsS~|yVr{s(O68@p(?04Y*u$&-P!Sj}rKZXBnIV7H#HuiIfK}c>$TXKz&j}{AO z*TToC{4iL3lKd*nbwPBJ_%>{|9Q!`pZCUQ!9O66CkuS8#2fvN}^ROG^XW-kcTz)TF zz8xbv@pIu{TMqd2N%)`2_#^zg<Kt70mDrVy$oQ1DqI+hUM#*Vf+xgUe)SkCT& z@r&qZ)34ZawL^d9Yttf^-_VF@OjGB>16H1MJ-p3w?wK(C6aBnX;V)RuJ`rX;6nXM_ zc)#jQhRH3F$B0Gj8OzdET*s1!kK^Q)se2CW#zJi4Gpsy*5ayidWRo-EFX1o^Ut(Fl z2O4M0B9Axnhp&Yt_v5!JuY~Wioc$7fujSa!VfA@-0#=^~%$J1g8*?I|eT#n@RzJ%< z=o9K^$wA3K)6Xhc{VX;TmuXw%iR6dqB=B+KMwR~wzQb~|2L7hy>^%7Umh&dUKeL>8 z5I$fz#=F1?@<43neF)b6%P*W{@n_ol99*V4yWsJb!>_~BEXQAliKXagt>SNq<$!)> ztx=t?!T8tc5SJ`+OIUIs>q5(kufYFH^@&dw{xbT~ANnC2FqSNA898f1_8FFwH^WUT zr=9Fxl|K(V`;0aF3e{N$?^T`SVcItRxf|B_%KaL$$tRKL{SL<0!m%uvF$gD{SqgNG z4cg#QRvtbMA89#jDm=?__WR%kTK7lrX_j+G!)IB}ISR&>>CXrlKMDtT!53Rj5U(7~ z+Z1yx=Q=BwFSzC0W;uC2tiF;jh39q#KmGuzg!N1a09=VaMR{bJa z`xCnq?$^2>hIc9#!@sZ`-VVQLIflQJ>=VRh?h5|ms?Tt83sr~tk*j{oJq4a*&gPzAIgc^sYF_2ykKFZE9@4MeCoIRr{&ULr!+*9ceaYjT>CdZhf#s}jSo@HL zukv)x%CBI`x{ zNLtSND_o{Jw2?Z-a^hL|ILqN!_*~1zUIiVNL*h~}U^%`6-fB5{FUx6Z_#BYL$naFd6KWaI(9A^D8@_S%%OE_yYjNc942{V6$v&n}-d@39)fPY{) zwitfWvh42*pI4p7Vds;N!GE*zEMirZrTi(l#Bzdu6>YMdx*cY%ER(i4ind#MP70>a z?%pazH)&n`R74!z{TqtNGowRZ6+Pnd)5^P$(;uV5Sc^-Q_rb*8$cahu9BV)KT6h6Z z0kl8GE3`k%>EbiBU1BZwkQV>MiAiz0%GbhOs!vRc8KdbZV=Vq(YO@T!%07>f-?5dS zNiaHphi|bgYg+Lg%7gG%JbiLh^d%O>)Hi$q{J7dDUy6y5d7hGlUr-%n#jkksgQ~xt zNAlL_Plm}`u^AU1R49KK9^>iYH>2}9@}v1fU-mF1OO)|>3F9~Ny*x^N(Yc$)Pg|Dz z9F^RxjNeL#spy2#p9d_<@0^!Br0t6B|FG>Qis9#!t6|1y`Y$^8(X_=pF8PPb+j;3I zSM_g&M<~AqGe%QabgHaeu5lw6qp|ZcTx&T@!pt|*Px>%ogK{N&k@9Wu=al!s-&TGY zW)2&h3t;Apu|u1rq|K!gIFEc4UvZR<%H&?@MC}{-BKHP%xmP+<<+M{uUW%Mgat5U} zR?ajHO4q2(GMF5e@yhFJrOm3d2qteOrrA<=qcZD6>4!Z1%d9*{=FpYON5Y>}J`284 z+gbwOqII{!cd5>$@Hag9k5r#nmp-oY+hEp8=}*po!Y^7*&VqmE>Aa!x8;}!AjR zziBz(x=|j_$jgf?hva@a@pbo1Dxd7>XiVk0R!&Tf4zVjIreZ%_4zIH;>rXjjad9u_ zS|S|hv3!^1Ceh)J@gi|NMdo1UP{_R`~ zMTcYL0~#0R=tyEJam*#hMjlYU0{*M&=fiJnOy}}?3<+!WZ-eob;iqBRFnKFFW34>z z2zY|pse>0Nlh<-DPt%`47+)CP4&w{Mcf!}({%5}i|H88TMq_0;*G3&nC2^5H+vSb@?2-shdjPS`M;2V#AC)IcI3IpC}QL|;Bb2YdB4Lj zeF#z>lP5+#fSkD>@n~gy98B_mn{e66RyP8oah zK7gq!%zQMw3}(JW+^39<0G}AS@K($6x>s$1^oM*fc0hSe&u}ID zHIKik`m>SW=kb1J>F19<{;4wY42YlUgYd7Ecfza{MlQ^{U|9O|cgyB|qJOBIcEc=> zbCqdVzC3E`3Rft1!sM#6A2P?Cec2lci~aCeWvNTdj9hquGQJI$dVHE?@pE{F$7d@` zyN$|>D`fsg?G9Qt?QT&Pol8Cbs50|7{FuidSKfpC(;l<_m_FZve6Pp1S(exJL*}^Y zgYZ|C$@lPE9^b26hWtT~f1r$C5;y31=(OCii*5ltP*CYR<$A4DF zmvWCoQx}dA9>e%kewWxVzKStt4c`rq@R&Jk;oRJQC^Q+=d$ERjIwD<`roE}06tGy>|daD#r{Rg_%QZik997~ zeNJO82ZTSVb}C`b0eOEWc9Y7b4?3?+e{^2UH-BO}ujRg+F*mQDf$!70!uyq_pHEs2 zWQ;nO1F6e+WQ>N&))9d?k%KZicP6#QJaY7a$r0n zR%|bowlwySQ%NK(%7NDkN?RxgQiHYzVoAk{=1i$#Ma4kPMNu(Udnz$#u|3l>A$n0_ z+K8e}W6)rNkyt<9-+bTfqp2}YGB=<3&YR!w_ulWlx3jZ5d-b7GFE+u;&AVZbas3ac zddf9*sgwIu$GUT^dp`BsY+rG1Fe^^%s=PjzsE?WDH|1A;Q-1fttYKd~ZkFFKX8dI{ z?Wud_QC^(paJAvLt&5%Oh?7_&9>sagtk@U>Rh&}+`&@7t{5A?RHsd`Q?W0^b=DPe8JU`Jv%_=`wvgWtO+cLh^{4#Wp-BU%hTLR{LD>h?()F`$y3}*8(Z@53L<_!H*i==7(sBi>`C z?HlAcbn!#xQ*g@fX*i8#nyc|$ml5MH&TYYI4j2E_y5dhcRs2s|KLF2UjK8pR2>lNk zpD|CPpD(#kJQu9f{`vvEI9H7CVA{NSNycferv01qtc%lJO`A8bvMyd|CjRCkGx0ay zY^KedS7&^Unf7R2pYcs*+PpcO@k;X(=(lFP#!P+n9$s}(eVfj;{%=(?&D&zn+v&$yeyIKb$f73SBnepE1{3q4%S2E;;OMHOu~vjPG-K*&#=j%?Hi0!|SQ^ zu=5r3F7(40PnhpVXFNuEG5s%i9R6{}jK|O)LjOg^zce%cdQWCNVV948HtQ$h4QAQd3O;nH})IGJe5Kz1j@m$cwmRJ_4uw5~qGvJ<8yx{pyUlb_yN8 zx0Y}4>JCdSvGmytYUl8d>ox|SJ_FqBVT=g zvMx@!BVT=gvo21#Q@$=(hdZ=g*u-zAWhO>__a$`l(&1XDVqQaoiAVP$gZtq(m`7md z+t4?{OU#?#6}*<~b&92Pv$+AkC*${;+vwya-Fxhim*CfGke$&8Pg$xr8rjGro5pQm(wYhAJZ-mG~3 znDJlCisx*`=gj!*Ft0{Dis1z_e)S#0(8VNJEWf%B8~Rb0aTko8S^ehK@Zzk@Tg}*? z^>#D<_1S8itMczQ6Tg1oKXmc?%)~!yG~@MV#c-Ed_P3Z7^G7rOxLJNv9_2UXaX0+1 z%Z$TcGLu_fAYSJF#`lP;zNi018gZ&4E?_*QG7H^TrPB^EKZ}?8x>`Ks`>0};urmzM zkAo*++B*0cJllL6CWg?dufDS`R$dfC=+sO1Y=dc^f_SR(DMz$};)(Hv?P8f3+lno8 zv|_n=54^%W0pDy^JgZzsVkz()^`&i!5i_wAqh?~!_cNo+AiU9h0p3({G~<}Lfxg|W zb9b2g;oT)GE`5hHY!X+o*Sr!QH&4R*%%|Y}=5z4jto(#|1pSDa*!B5q*hecKGs_Nk zLzkTs&hK1!%B*&nHme;@nis+|=A|&U;{D?S_!+axpEj%fpUtY{^Jc|%*1R4jji?PYYVgT{bu~u7MnN0gJ#;P zMm;M#%gnN~!etZ#KEm%RnD~Mf1IOZAVyST~crU!#d4Kz#JMvtaRjUGV=gZ{ z+s(4G!#oY|?v8Q&w0XSNw9zRS zq*wiu(9|C)eN`3zz?OUN7+brp7|`RBv0a~tN1(@wfq15IVBMB2#ejqXJ;tFYK?Zmn zY;7sM#6uz3QBH{GL#orur$n+6<@wd4fY}kwjb}$LmdeLSF4oE?K@_JVOwX5;W&ArK zciw&%)rsE>S-TFq+gyiI((~AP@wGg9`avGT&$XA3HtM-STczQO0Xq(A%_0ed9F<;<^v~w{l#&>9z5Hmg}d?i~Z`nv@{IYvdzmeHsba4 z#pSL>&^bfpf$O)kr6211!bOu+$LOyG*DSfccqT!yq$T;K-(F;IihZ3gdo3T+{)bt! z_%xqI{n^Bl?A^;=UQY3yFN<7Mj_aa}{LZjXox`s#;W}IE$~&Tvj`cmX>7i5JGNm5BtYhW$zN!WKUXVuX%udY*tIM_c%&s z??%;OidFXJ_}FZ=PqSwIs&_T}m$RlN**lFOzg|>s-oCWQHXY*{H2152yLah9H2J;M z$K>}cYdQzK@*G`zCy*8&tJM**aVQz2he)iM2obO|@cLS_*7PGP}p)F>8ujKfvW307zmD^Nq zi1%Ct?@_BIm0N=%_A*2sbsbSHsv}G77XD=Q-AcKtKQHhx^@EqQ)>*x5JHoje(;nO8 kOWU5VejR0cM%cfK^-5Oxn#0=1n%P@E#r~tLX$gD(0jy4wng9R* literal 0 HcmV?d00001 diff --git a/wii/libogc/libs/wii/libogc.a b/wii/libogc/libs/wii/libogc.a new file mode 100644 index 0000000000000000000000000000000000000000..d2469aba854004ca45d00baa6e2552a438995e42 GIT binary patch literal 3466174 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

-3xm<*Vn3%MNz8&@E)JQL1<4hlQxo@1v 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 z z{qAo9rXLIWd}!+yTT&-{_{@mCn{Aa1;WHxkZeC*fmJ;lrBEESB7VX>90)9U0V2`N& zQ{=5mqmS5UPRMJru_613h!5;1PGueBLp?=2PY+*gcIB>)Vf~Fbr~jd2r6W)5Tb075 zOoKm=cEvlcOKUO4Sbx)J@{Btd<57RJU)%yYEMsGwZDtwxkL_E_eCWCX{{IK;X3q;H zv8V6B#+#|HwITJSUbLa;2s@&$HJs7;Nh@{W{*8U!we_RE9H&0)DSfh??{si~wTmus z)&*U-&z2OMKfN!dV{?-G+}x98zj5tlZ3UfjjbA^BVXd$)wAY)Wuy&|yf!;VD z7#V-xC)*DoLt|raJ9JAzm*tS_V;?R7*~#h-_-+&CQ0`fyz0{xW<+H2ZTVSlBy*ie7 z+jJb+!+wLgAs^%Ho$Nd8(~yyI#=j*AzoR_jdN1OdeK9e;EaxNG;xO3xRp!$!)QNsT z?5rZKDuo}x`t1E|zq$_)TV}t2`!*)7Omd2Zos>=xV$R{#$Jqv_bM^iI}V-X zdsrNg5cf^#2BU}7!O?a1L3M>(jjhG(Pw?kv+F)J=f65$_NK>g zJhtH-_$WTzTb&cg=XpAwufsWfd1oHTX4~NteCOb0@d@>%kF3tJo{Cd<_#C`e--dU_ z3%~6*=sS4slUOK59LSzk3*^}M`A*t)+M9cfuyrw>S7e_N_9&%qp~r00 zTYRAX+ZMF1yZOS_ZOd{$ka|OZ+54s5)}PCEc;1yeyvVSXF|OOvGxkNsUipHTJ#1wu z?a&U4yivrD1NRuV@_g#G9vI(I9ZvdPqDPtMW2}(1CFHDyAEJDJIH#<)hdrRk(slB^ z#bWZd;Jxg^GB4|-hq0&l<4Fm;AC;IhV_Iayu)DnoWEA2aozZ#PSj@3$)E6DLvNv^H z&vsExSG%y^aGWyx+p#3e${r`b2X&7ZnXw~#Y-I!dw9YF+{n7qq=nr#`O4QHI*@&2v z=MeQjzuRcnXKBh{S(JN~a-hQkv^9#gTbg=c%;)oJu*Rmp8Jl`%zSu==PF}9DH15Lr zdrb#yBl65%D`kSO0y^_O+PoP%P8)|9%SYW=u*nv-wFP?%(3$U;W**Gnlq)`Xy0eXb zp-&)t73t6~i*WCC1!lFTy>ji56>re^%d5(_WJ~K z-hg|{w7HF4tW9fLlA;^WuJC=N^aHnk*3G)07wc4i?cIX1?L4EwKF0U6cE5>y=x6dh z7t|A+w zU4__ze}X* zhP2CT=d&qkj=5=>Lv0L^#&)qib+8A@N&n*7fO`_m@AS_cUq7vOQvLXd*Xh-qTXVwc z6LMRbXHhR04{Bvh29od!Kygc20SIf4?(;rlLyKCsP5= zzM+0t`-rzAXZI%LCH8GSar-eJ)~@%qmws6LEpPjP4{P7_wika``@Xk*%+~4Khwr;8 z_Q?Qm_t_hMm1;}HQrYjG^tXTReg!Ge^Sr-J`XtLcJNCDc`#$WyvGc>>8$0)XP~m@a zgZFMe?wdBWd{7bDw3gcJ>F^S5A0+$_5|IxQQMTnnZy!p$viIE{lK2FP-|j^_U#gL; zO*MOWH>3T~^xB4BrQXfo-3+tr$l87F+Fzyq*0d$|(ya7We@CP#c6Rcr5xbjzdQ*IR z*1oj=ZY1qJxYgSpxhel=zuUX}+O}V%3ipY9UjTd!P3-^SqSzx#S`m$xG; z?R}8QeJy)O_MGhBWRK6@-Eq&h=XZBJ@$={5n|zFE}r}y7=$ZyVZXazjNsR zi~QO6uQA=;+OlnZxBe6Af6jjoi2qhln}5xJXusn>nB~C!`@z4}e;eO`|4w=7U-aLJ z)_>Q2hW__~_P=zx{mzzc8@lzMQ2%rOdsO^~Xxi{E`VZ}Q{0Flf*nj`t{nB~C!Tl&R+=lFU3oABRz zFSGwWa0uh)>6lW%IzAjx_d^_leJ`~Iw^Gfmy6&lvI`N&j&8gj^#WA3mhSp<*WzkJp&&m z)#G%u2xxFF|3tCCkleg@&ix=v;eU+tavsE=QJ%q%0Dl-Wjm`NMcuo)T-4~r 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

efuQVptW9mFR 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 z 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


A|!o)It2Yhx9<# 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
!C+=P+;P8#yO@7W_HQm%XEWvf(f_}Hme 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

(-pKE4nTPnjBJ&pR z%Vyrj{iMvp+?Hn^;kGC9t|WOb^PVJmKJ&gLSud9)N%Hy3rAhKa=JF(YG4oX3dXc#@ zNxqP|s_zSA9u_k&i=`1{URMMR!-^g-$lH{A2`;ugH=7A*nR_3)_(lf6wJa$yFvG90N$xxDf zFU#4Y$4nCTyDdq+pT&oh$#CYGN%Hf|)k(4=b4`-`Ds!EF4`QFA8j|GKS-dGpMl!b~ z$?KWhbl=|c+mqzYEWSKRc4qEOlHX+RPLj7W_aw=0GxsIQuFM04-w{Tw)qQfSzdlL+ zkmYPF+}|EGRJboaYD?jM@2G8s`?RBmbzju#j1=yRj@qUBNEY9dB!A25?@N-s@@W3; z@0m-J7k7swDY$=9x+IcIN6N*`K*4N&YW$U6TAKb3>B+ zH*-^x<3Im1x+TfwGPfnUqRj0{t~fKF?N*YxGs%t4tk0;lLZkU?x3O8A_ce^mJdorL z$js+?mStX_tR+$^uhZK-o5c!^w&+hy)=C(C5Ulyruiu8`9m za#qRH$?ubA;C^`~9*`MRGAP&LwQ@aPCpX~rGUKrK(b-sXt$0YbZ8yuzjosJv92@&q z*|yy#+qT=~Haw#H_H38zl-bVi15dSMfZSxaJdF3q#FD-8KFnXw-;eogw$1JF8jrL8 zT$xNwyPxdw9e9d7f~U&#lA9*eORiF8KXwdd`^r_Nwso}k5c+=Er`?x!&&0FkS-3{# z-*dHc9p`Tg~Y*`z)FnJS(-`w=JqpJ(}%`X3JH$PC3*lVmwyg^BY1w`?mOK%Woqo$?giB{SBdZrN(ClC9?++3NSojKh9+IL!82 zgZt%LyjG^KqIGgRUN3LN8{|!x|F=4J{Mvh5-5q#~ayH|wGCzy9DTleS&xZ5-C3r-p zucDnYecA6Co-=@V%Y%52OueGLGWCk~$-{WRyo3Ay4AtwfpW+gk{S=qVY*$<+vz`5J z;`#JYJWZyD;!1ffo-VJ$Rq_@*L#DUlnKHc<&ywk_xLUT}X3N%FjcmQu%DZr#%p4Tg z%gllOzTn;$@5@{(Z^v~q<1VR}8D9y#dj2llDDTEi@*dnQ z@5ODh)m$Q5&34&pE|ab1a@lHj$X2scwwhh3?RYEck=cJqugv~S`s5beFSp_WnZ8N} zW%?>vE7MoWI+?!gcR(AjU297=g`A;~vsvyUXIt=gxtsW~%>GMu$n3LZmmc>k!@K2j zyhomb_sUc8K6x76FIVz=O(IXnCGsp>DpzCnaU5f@`@i-dfTeobzt&**`9@+NQEAPbv@(3Q3t>?9}^}J5D zp4ZE^?FM;29@1mEWq7k(j_K7OP;|94MM@6+USW+-ksGegcSnV+K> zgXho2{B_r0{<>>1f8BMsA-GW{Ho8e}#m#aX=I?3NKl40#iOiTrx66!a^fGxWUM@4H z(H-(k+$menT{6A%dw2T%s#d>Ow)%at)$f6m@Y*Ksw5Jh$bO=eB(E+?LP27i9VD+im&m+im%?Wy`PAa{)_m zy}S%J$ep-R?!rxSH*S_U;+E7otKTZK|1s@J`W!(Orf#eCR)d$zwYWp3moc3(y^LXh zo=-1hdi0zE`ybOQv;Q%DavScKZ7c&axnl-pa>uNdNANm%58haKo?^@x+g}2Hx@HUyBW46mXF#EgI#$Jzi%GUEPc{$!Kci??V`dmp1-Y-+5loD-LhZ?2y z=cYy}JuS63e@dsw)p)90ho_~^F^_;>H8|%b~>IZ^Rsl8%+FG4d5+bbEw|tr znVw5)9B&*KEU^W=(%keguv6gO^yYaBR3h$5^U+IX< zI7)ZQgLs#`7Vnnnw{(w8U!{9x`YPQg(^u(!nO=D5O4>jB99tr@&#|R4`y5*)v!Ai$ zGWEtzk*PO!YU(2Djh!Y_V{D~N?%3%vxnrwja>ve)`FHz%4x3MVJY(!EnV(~;WqyvG zE!SZFdVW2wl^bxK+=%%%&uPZ|o4XD3Z|)_yNp8pFd3-r;k-KoK+>P1Zb5>!tclTnp zcMsrY@*t*`$JgQxc|GowH(~bSIYXFzxHn_=;ogq>QYV$TU!IQHpXKEEId)Ly=UDdV zaog`Yc>~_aLv`fapRw%QJrfVfjd*kFTs__*+x%=zU1Z)SGuE;6XLancpRvO-V;#Fg zW=vy8Wb18bYWqEG?4H8&#bfu%4aE1!EqK4&nk3`s`x@(?9>$f(jBi}2OfTcgQWp>4 zsd~P(8c&lq;L6mway(t0f~#b5$IX!W_i=20kL|Y^&z3uJjogK6WvgG8+8*m2S1((g zCOz*-Y#gVRRn z0q>BT@QB=ucgkIOPip(!@qp|*+NR=ticiD)W!9psR35=)@=jbX@4-{#y?APB`~9PA znp}b_W%gS(U1q;!RdN-cA||+fJAwv+abbvTZv}X8tEsrJgtq&ya1~nX+v=OJ*J>)P$VckW&|O z>Sg9+LQ`hHs&a#lRJmhr98_DkuUL|iL-Xjm;UU@U_legf0c^I!v zZQn~ZVVyh`ua|9pHpn(V91s3FlVzCW!Mz-Bkvs5K+4|g;y2!@3U0#nzQrq+V6L!k& zc$ad_yJf4tPdPjAe#Pl|Vp7PNSR!{4FXu5sdtyiGqAkQb3(xOQ>?%BuKe0P~4xR3jiK`0Fr%&uDybgRK<2=OnHHDnM z!fV1O_RD3&2a@!8cB?Zex8Su&{B+Pu!S3*W>X`dfsP* z_)y{XdD6eTCPkPuwq)&p+i~uWsK_=g%uGC(gh5b3pvNeMg-Mf8n^hs8; zop`k#^SAujawo1SydJ*1R&F9*S9ooFdA;07yg`rcTOI!2pF8NrY*U~0-z;07Eqbip z@>}ID+@{CgExttV!1OvVtFuhrOnkW>8@GJ&{Bd&nE$=KmPF_yk`L?aa=_z|WynK~x z@t(r#@XLGUO5%Nm*W{P?%hQMt6keZSJ}5Kp^0kH6>X)x8e1>QF`oin>%QwjMUcQmb zL^iHX@*d(th1c_!Z!UbsX8D%FYx~Q$7CuX}d|Tml{^i@{sni+fp@FRaj?_hrwS1)T z`v3BsvgPm6WB3W)U3lESoSrVo>g<&($=R2rpK)jT`{n8+nZ*BJsQgJKsdH7tOAGHE zm{gWJ*Fn6z@IHb`Q)H_{PyU!c^(IYAovXo>h4&Xsnl8^I&OR>5_B*5Sc>W~*%^z>K zIOj?$@cqj4Y>0?%&-%)t{YEq{j zcd|NNg~y#HvF~fMajlZ+aZ*p=eGrp+3!lX_sV_-CcgX7W%Vl_=@cxKNgEIS>w6^eG ziAn2Z=4R6R!uuvBZIG*oZ%oq9(y{uRWb0?B@P3L(n`NuBrSRU0Nn2&Bv#szxi%HvM z>P;F>lFn?rJLF}=M+)!1n6$I-88VZ072b<6X?NkXVkYe=yf0(YUU>?2_9gkxgqgHo zuI2s(GQCu=k6zoBKNZVT z7twpg^1^#eDmvtH;+=)}n^bhk%zZ_7l7H_>#VWaycu(PdC>6c3_1{-`PfA678Uv5Z}$>e=r^Dwz2wOv;y)6)xCyiBH-$&BsAEIviK9;cnm{=R7OTH-SckH=1)C0o2Y$-f6@@@#o6@tVT>aVC@J@6921 za$VuQIg{%PpHVZJF@GiNv$62mGLxH<{CjpLGmo1rr;R!-h4=4FZk4Tn{w;ei&t(4J z-A})s`2h|vfgmB7Nd|~9gb*V} zM4gZ*0fMFwG$?H{WQJrUzdD&fptOWS`=VvrxY91WYn85OZP&haUAJY`wxLp&R@*|= z%Br<-%T{cYm0I0ei{<@1=bq=DGn0wf@3;HD`^O%=_dL&Yp7S}+dCre}&Y63Iq)Q+_ zrM@|u@v=>ugfpVPKbmn`{mqscXAI|Wp3E4PG}(DpeU~)jElKx6{*L-aX~sE8L+&%w z_ewsur0XH~7|yp#z8p#KgxssXWAY*M^HfK|$y47n`SK<0ha4Aw-{cEQ8nLg$aK3f& zmD#kb74i!8-IK3M(sx5%Z8+aR`Ibo<>AsNq9?DlIX~IVxUXlLyHK@N4;cHaiN%@*= z+B^*XW_`GreEFbDA{%!;O z=X+3ntL1x0(j|~TtiIdwJt}GV!*|4R{$_&j2}$Qc4quFMy^g8Bf#5r?zU}foqyBb* z?}Yl!%lDl68wI{ohVwTHd@oDd5Bw4J{g>~w`kMp3GwNF~AL{=m*{~n_XVrIMzPBV@ z4f#8U^NpDAoTRG^BNy4;miFhmC5?LJdepaLxjB-~huo{aBg^%vZ|!rD=N-m@9?|sM zXfEo&-Cm556qaO&Hyujxlrn7{7Rkm(R+-GrF_zF zRitAiaLw)oK@#DRh z%z5f;E%OR>o|d^U=Eo_v%b6YnD0(%eqvZePwM`=UrI` z)frdTi|Sk}>p#?47XAJ%&a6-_eouGKtg@G=bE@pM>TC+XWjp6l_&wTrhco-{)VWjk z5p~v-{Ude0l#O<5lK#Q(yvBM-=S)>+M>)&Yc~K7f9-k5A{Ifb2!tZ^~zqgX}x;p>K zc~_nJOhJG9u*9G8O?9?2b-p^!nR=xnqx!sgqgZPSXi^Ar3{A^tlL)B3b?63ojVmHM=&=wtem z>I}qpojUi(El_72G`DY)`njm%0MqU293%Hr>g*!-Z`653?$^~B1?D2>?>t~`asJLj z?i=d-VP>g1bC|hBoiohbtcqyS^uu~?6clc`}Dlq)ZRP~bvYpO z=HYMte1Ykw)xJCLWwqDNLqGp(sWW?$+EdTQoO3tJ(MG&?o_&+rFV99B-OD-yYF|A2 zcC{CtjrRIG*7kHvfA5TjQ;j@sedv0;lq-i1Ka+A=^nLLor7`B`_nn_ z)uXKQs@jLn!MG6nP0S(rSOD?+KlzucJ!U?}l-Ns>&ezmlGXE*Hf6T|cD)xz_^Pbu# z&dpbQ!?_q!ydRv4{yZ%0ncJoIeRI*Dzsqv;;U}5?SGA`r2&sKs0esGTw*u7t`%=FE zI6q+e3u<3h0N?Untl+0=|5bo_mH*B|;SFk^RTxowtHO_~{Z!%S)gG!4K6zG_Rro!% zS1SCa+8_Dhm!C=<{|vPc@?WC%KK@Uu{f-~=-pj226Sc4L|61*30?7MwsT1f{dzQe@ z)IOzXv)Y>!Vf^xbqzLm8??H;-lYf^uMW@tWqX<5EP0EYst35?A`n=dXpiaf>)ZU>O zW&N7pm{gLS^8*8jynQfvNVJZpZ#Iv9guJ&(M>tJHcv_#w514|b|` zdvH*#)q_~W{7&KozpU2e!MD{qeBMQB?LDtZt+(f4-Z&@o&U-|ytLLFD`0qT-$6D>Y z)R}(=mbOe|ZD}(7ZM8O@|68>lUQnmjz$M5zN$Qt;L#=howy5=O8P>_XrY-xdTE~`Y zYuB>xsP$?Y)|OKxX4z|MU0U`#wH94CU9CSCUa8ic3%{(^ndNzEZHWT{^CJ?I&O^oT z-DnrQbFbtjYMp6RY4U2d=ET{S(yv$RPa~qq;agsd8VOB~xzxut?A7G^)Ed<|pve!a z^{Rojw`2bawRSbIW_IN0Z$%Q{^eZ`?BlDUT@A5kOW}{l)nj1BFt6J;gw|1r9tJb~v z4N1ud)f(8`ugQnhde}spvYjT@QM@)bu`h7sr`0;yJgdpyQfp?*P;$$y*3Xt#ll#*yH&Zu=bzUfx-chs8P0aI%5`JT zK-`L}Pk*1m4E?;2^R8~a)AZ|-N*{=%)cY=`GDHLWbD=C`_x`0 z2R~$uDd25w!=LJgUjh zs{Nox^MeO|;Ju+o>kl6E2i_;*J2Umg`KdSbmo?%UXOzlrSCp7tUYOm@U z(d4Jqz7^*`%0F+ZJ#40-d*{qUn*6ZZM`u2)$sbjF z>dawHeoXDJ@hy__&l$DX&dO2pEU(&k;~OGJKg+N7;8|swyh82AvzBS{klLGPHE8li zwNKB|o_ASz-tnFt-}0z(_o@ARmgWcgPUjxkZ?iN%WWf*jvRv~6eUEd9@M}Oe+2l}SNk^9wI z1bw^V$k88;NI&N+)8rv_MnT_bIQr-h;@@gP`SdM@BX3n_7df4pyjPuL&^H&3{-8S3 z$l0&Sht&B7eOuw^A5v!>^bLh0e^{M+)|7=LP>I`f$t)Z``V{AX&tCT~z@ zLG+%#gR@bc3r*GLx2c%lekRAo)B#O@r#dg9_xT;1{p#$9-lccs=x-y8b4HVosxu|L zm+t7(d+Gls^)Cu(@;Y_ag!jyqev>+Px~Nr?N7NY<-Wyl?33VQI(V!;ZtInqIzPHl9 zTb)zky>2CcNS#^X{cRb%SA zQF3~Z`VFb?&C}%h>Kx2lqRGqDnV7d)lP^=}W8QjA-k{FP@IJF+r+1?|H}iIA@=kSz z<{i-FJJorbcb_KTug=!I2Q~TK>YUB{peBDvow<33HTf}h{^mWU$zN7yao#hUd{mvw zdEe3G=hPY9G_R7=d%1sPWwLQf<_j7*xp01UP_xhZ3 zLcG7H^dD7chSN3w<2^m+x9{mAn*M2ZmWcQ06wX`fToK3EjvT*jIlq15y*MTJsq@Ae zeoY=!XODQ#P3c#ubI2JTn!Hn;N#Y$ar9b4HPnP#>?@EL>8RdP6xE*&em52@`jPgi0 z5jM&<_4OI$@n~nboTTL~Ei0N^R(8h{YolA2#}eby)`ho5ua9l+8JDTHGaBw*(U>l+ zsb@>Hdu4Yb8jtt)ChEi8k8=fTc5Vu{ZAquo*$>+$R$3QL ztXmI-ahBIMUdV#$W8Ja7jtgnE+#HT2YBu%6;ldQZrI*$=u4rtCb#JNdh_-Dh?+wQj z}_V)1BO;(dy2X=xv5>FJJB^;2?R*B#!}8C{O5ZfQ(StBdtboG6CU z_3?05YUQYJ#>3mzZSQVNYBD8EY7?nm*VCN}M8lXerAeAVtYM{_pzL1Cc1)}xy)l78 zV{BkePb8XLzow`rOs(IVSRY)GD!nNd-PVgqYE>+Od3WOUl$3^^aHKKba~oP5^YEI) zfO0abU)$5Wo#y#8cy>~_D|O6}(_($Sl)NI`)rBVxk28sPeXKLBft*Wpg39Y-(atoZ zg_Sm}YYTU#wy;)oU0-VN(-POkQ~gKQ5_F1lNQ|aPkpc-qN*fQP(u4(Eb>YM1n06wu z?)K$9sff$*eCww28)D<^zOFkmK?-%K36fw&ZAZAfHWBX}Z#<>cbZx5b>FnWlO?s-N zN#}Y<+%;kJjQ7c{(zT2=@pyRqcx!G-4Ae!P4xMC3a*_rm6ShjUbeTAfb74MA$;BzC z6H;mtiTL$hX*!KcONA7zHoihl>e>CiiIqts;}&E~^vBVq*)B0Md-^aWS9W!!6-Tte zO4>KXyV7Yp;>!lG)X?E&N@QSM3am*7CB;;5>ii?0V`2tLO}nAL3pufv(bfbjySKu% zwc)moG{g87ni7?*XguVI3%>DQ%ECwWsE zd3`k2-hr+$9w-(`;K4giUelR6?CcsW@87&R8c$x6(2A)EU4|TCuX7ckOlyQc(Y$F> zoz-zli^#0-nM_cFWLy&4uM%okP6*dmu#Z37miuYp|ujUTJ)`^?lKJ zvXh)%Jw8de0iILM$AC1>o5WaR47ELto#F0r3r~B0flhMc=FNRkIQab)*NL{xr?QCji<-{i1eI>a7rLM%1l(u`Ra-0VUX==?;KV;$hrKTbYZG+`sJeFpO zU>CQ%zpHnh_L#MeL{3U*-f&B*B}iEt?TvgHhP&INNKCR2a(ykVbub}b-%GP;N;#;qXwHceZ=rtD(384LK{o6bqn&Bj zsdX_r9T;B__93FIWTR-DsP4Mn9v-#oY2etYrE(q6!&fw}iDLTTzOV9)PvcyKs46C&(F#RZ zYTmpy+{f^oK)p99A*rU6THCp$uQ3|Ob3dh&o5ZR;9boztR3Uu=mVzr9>GZWf^+Rnx&inC8 zL3vAiug(m#L^@kY&_nwQTLDLbosraB11){{-5}C}$0S|)Q!_X@1o-%I+(KCJ)H)smrkrdxYMPp z=V-dr?Q4K#2fy0xtb+X~0kLN*W=zv_e|5&F4`9?*TFL$&p`_jcmv6WZ9=lJ)`F zC*$b2*fX$nbBun!(e>=!nxfVtkMP^^2+}+t5f)Kf_@Sc8g{=&o$Ox*I=5ks-ABU8a@p-KyK?b(5xTw9 zTG3ote=}{5YkRu4mM^KUME93Twqs*m?G>>IW|CCt;FUDIGU$=?OQ@Z&+5YvRy}Q3WjMKo_rv3zw|Ac^Vdc|+&lVqN% zl)UnHZzCY}To=$=fONc1V_ZmYvBcBM#d`=&a7(HTG0`ExTmSqFV!W4Qeg`qh>B_;i z1{c}Ncz7po)i|7z8e7^nIAnu(K zkNm)Rp9HPpxekNxz{P>_@V#0R-Y9s~PuQ0w)2P1qHcH2%f2+(Gz{P>_{tg17Ln6U? z4DUeEzdI%HC=aDk{4_4jKKEYm@Us&b?Mzq}8sXtPJRJ}3z2hSRTpSoL z2!V$81o7xY0?#MY2=7MFnthYr0)Ge>2gX|kfsRLY;QG##X@nO8t>H~3-w`GU#*09p zYa7-;0X_;~j-S)61;F zAUV!Th*|FmNryz5^(`Ob0c53in~RI|sN7#7COm3q1iY_m7=EH;V7yns6CDzA>s$K~ zw@SQ1&=Sv@0$Q^V@3Y$D0g(t2&+>rN@kYUuJ!D@%rh&Io<~91e$&+w7f$_>@o{&hf zzV!~`R*6>(n(a&JSJNAjM!w;|cq#qr+s#m5`{sdWyeMd`zVtWI#P~-f0^`v(Jc=nyWj->Jv_8Hra0n(^>0w2qfYem;nc1LNVFW*u*s>WXnB>?@aP zWZ!Q4{Ux1VO8=Wp<)zbG4Y^kCY|=@mcRl2q z|AxsgsGq2Bl}rQgx(&3B=LJs}2d*#mKOJu)_&kZXM5YnmXF%(Ce(>q+`?SmxLJYSL zCva!`szFm(g!d3)9j^rZ04@$}A3axf`v$=WrF~0f8sYsAw2pTOEb8F|#ybv)j&~S* zy~IPmaqN2&w1#)_5%33aabUbL2z0zr@Ii@pjZA}m?v#EtrvYh0xHw2W@m`~bca++U z`*R31r4inI#F~9`UIw40ecb_>Cxn=WAC(Kgi2kx1G~-{LGbK9p5w{BZ$Pg3ub>)y6D|&n_YV;0c+}^h zC)%SyrV-wcLF;(?!SBPxf$@F-fsQu>9{B~{4Kj`JPJ`C)3VqfsN9KZc6~NkBs#DupIcgDLFG~<08w2nu9 z_T%C}dI%X`#f|6?F2YOT&UhaN&3MN^>v+$B&&S1q@lu}WfwNF(VkN|^_pg!;i8SlU z{fN0Aw1Vbx-vX_bTT}-=&G^W8L*@w~rg}VqJIWQ~V-skJN8bh~;XMO>02c>o-=vEm zAUY%xtYcop+^-^_8ISs(W?yj~c&al8(nFX;`yQf0xM1J0X587&n?W<)O3)f!unIit z;RMEuK%(oBPf8pu8xQQH7Tol5d%<(LwAbNscY)UN9=7#xw*!~E1FVim1E3i%3|h1A(nH{@adBY0jSvtW5((D#2!rvs&ry9-)(4lK0=%6^WE2>n z=--=7!W#k)ABy&+`mlWmKx_6bM46=L1h(%VA<^~7e`g&n8xQQ{|Bahok74i+%5rIp zak)PRt>KkdgMS$p2QD||x&KrL6i^pYkKLdd?{&}`-Xb5^G6s`+h$f$wbOheCI8ZvmyIrOc-bT=xeU)I-+Q(~v z5GmkDC5SuQM|&qKi}0w=YW7u9UDMguFY|;D6W%kpvweR7n(;mlTC?vml#%W^=y@nb z?*OtLgNy^=A$U^uTi^FV$mODcIpuy2v{sMHo56SB;=p*r5D*>0g?fA+{xqv`(R})s zxG0VMGJ;sE$K}INrZ(ZgcrQVq;r#&haK<86%BQ2eMDf9CWj%oINLE&Z2 z1g+V3CCYJ~hKvK1i;y`DH=;whP=%+@;g0qd^*soh(okRgU4taNWoMAo2^j~*yA%Qq z?-{fQ{zj6G_ct<)@ESmC_SH1OzC)04V7wI&Xm~&D1<&@8k0_1sXbqs@)x8D285ak} zi$I{`?E@c__T3}X2rp%RzK-mL+zE^~0Ev$G5P0Yb{~eNP;4`W2ntj)iZRzl6eCT*b zY(0VZcQTFeQs(jNB1qedivwXGWFE&&FBk1*G*XHTtoL*9n%?!*;7eEuG3)(jie4*t zstX6Hmo)_f9gpgfrrfLr$$Be1;M0_wRgxah>=OHW22M^(*G_*(75Mmu~KX|f{1LN`B8WIWC4_`*ic>K&I zJet>ZJgTctO&agiQm*HfsWS%{!wHlzkFAw5#CbJntf{?1|P!3f$=VfK*Ren z^=0H2c*kTK;jIU)}f;0>wLn6&O*@<`nx->31 z4L+Sp$yz;{8o<+B#DVet00GekThj&}|` znDWIcs~bCdW3f?Vjb^Muw{^OU_9zCM2AFz^%K%z zyjMXpUdp<&c?4;6abUaw2z0zU@Ti+;k6*|%vhM(B&Atu8;P>Lx@78?qWFrT*?`;Tl`)C|7-mhgE@GhDQTE}Yzp9YWq{nsSC5%7#RCesM72DFZM z7(Dv46Qq6gZ@ebqy#t={-jHd8w-L04x3K|yH7*W}m$Kh~)(Zv3`weK)BfM>hb-cac zL%29FUK|3VLn6U?wgfTb{T4Li(VkhyI|jZE7YEWqxQOOIqC>dQzRyz3c-&TGANfkd z`>+Rm2QChbm+~C^a4!@(SqU-gJr7#Pqy9*`99WO~gr@fq@^gZf5KBF8W{Tc0c+%y- zdKA+Y5((C`&4{_aJU61g-g%H~<+ebU&VOD%m0juFX*9sm!5O^6fjqp;Qzip^P zx_zVfu*?%ejMAUG8~32Zn+%%DBD^ONYxQlb10TZ0f%Fi(-^PvT5H7+S#-05~eU9;d z23p743!d7N1LK{7K*uAV@v>za+4nopI^Hn&ATACPZ`w2nbiLEysn2j=Jzyr4dlo#G zON$56gU+;+ejn+CyaE>o##;e_R&Ip+T*69-S#P!7`LQHraxU+q^pc(G~XdREnL7MiR z_DG7}!{B>yaUeW|X2X%2Z=YG_O*I_kAr7C+DkAV zwULI`(F8tCeW!;~^p1h|OrmPb?PD3HcN{Cr6Wu5r^2-4WTBB=-eO;4F8V;-EJ zwj!Ma<5B-0IwTUT=ifnm7FDBuO65};;r$h2t-hTd;P1x8f$`{huHpUk40yJ0zDy%L zY9|e^i}FjbuM2_!^^M2hvV5yafS6`&c9`mcu9e**jnE)I;>34x}!^NkBH7D$ z>^Ou`!kPw5<_eLh}$ghYb%;#tIucMWK1 zpDzGfx9pcXX`aTDVmpcmrU2g<@8o%VG%xgQ|fnGi? z4vcp>1RCDQeBkNgz(xs-B+{&x{D@(n7)LjPCO!0*+$drVZzuUA z%{a>aSc+Z;_;mK&m7=#3@agnY_5mLsLO${}2d>9=A<*pm#4_-7abUfab^9j+xMK!LTU%bYXPg{9R!d13ct`E zmGM3aTEp87JoheXF4g* z%QV7!0<>n|UX)A!9;y=<@0*b5cpJfUKWLL_g!fa>nth)+3;r}N4vcpa0v+!#s`QYo zFO4xuBfK{eYxeDj|Gax4<3M@{Gx^LbBv|X!MnIr0qCMInlXx@@>3Cmk2Ja)G3=(fv z%6#?3PNXkmCB&>peNwaUiw}Z7kVfx@WW9R`t1gY+O2`O1B+{&3k{OnS88u(e8 z5o_h%GYCG2iv#H)%-W5cu6G!GFQv%9dVdRE)4P{^BGZH>>phyHhcT3HzMu7@6uk!U zX~yNO??X=5AzbJJzeJyM#$_BdrBQufN37ciJIp4?IIw-EA<*$!!6U!$UqYsV&&vd@ z;eE-2!jD15LE`06tmAcpKPB5(0D{=tFuehq<+ zcN}~=y+5Ytjet*6?(AvFdiVP$&4*{TZ^cd8M7*HE&%P2g*~fYj(ByXxl!x>- zAlCId!P6M#zjRWg7LZIs%1D~$k?i9Uez^5yh{6%eYNez4aeZkJcU^#6Ft)KZxF^KA;}0*FFf|m!U`f-~#PC=LxAN`_%&v zsyv{aelX|9ptXMW0F5JwO={eC=KLFIUGHJ=WG@HV$L72Tfv$H1d>XxcI4&c4nRy^#s@_N3^YnLv-)S1n zm1G*}@p{ruvU;0wCWv}Cfyzagy977QzVAMS$L}F&ANLWmufFH}`L`*D2-cpnh`o}d zi0q?4^;PqP`-KMNMcGbZJ&G+yDt=lm9tI3uVaUlQ!l!4R!n3|SjHL|y#==41wfC3z zEb^m-FRrLqvSf+hfB6+lu0Vv)nzie?hU-mBz}T3kSbu1O zlU0M1QYDg0jCLb3Hov6gYCrzfow~e|qZkomVXxpvzh^!&42wltLu2rS%W&h$!R5u3 zkIRpX+yz|3(LzMQ?tA_usSB;#VyXFj>AMp>>qcI3a)N$9@ zk~hvzeuQ|&94+$%kFLbOf>nrm78)L0Ik>#I@^Izj^5Y8Ps=!rsvc;%IyliZLbMVBq zusd)jcz*b7BWUCN$UBX1yyB{S$xTT9Pjj|RWzpR7e2?lF953&*Y$-yhd}zwD(j zeBbIHdTBR&KPY|wCBu)lC_x)koIg}DMD1{X#5*L~Vz|O-3- z+JW1^@&Czt(Ju;(vS+_zc;0yRo#1F-(wn2ZCRa+|`%dh_zd-hLBM<&w=J*>nJ`MZe zcR&1I0>4+l@73gY?(buJZQqmMs9&J|Wz=s+TU&!<4}3C_?@LCF<{(0CfI zL7&7Jl(wZChh;}Eft|%h$=LozyZy6KHpUgk8|*=Bz>fRPH%C8RQw=O*bb)u^#C^gR z4~;pph1we9>&VebhH=-IjAc8&b?E@cSi@aMjnK|}iU-h^b<~bW=NsjA-s4WE>IAomd- z@kcRl4Vy;Z(cNO)xzXmHlZ7ZFfU-V;a$dn0X|>)Q{-fc6Ue3`PjE8Ft?^wr%$Iv%? z7@K)xog4m${Qi@>kRCRIM+;;=!>W||N`Oo0!LdtfC|}9gs+E64-u$BUV?i#UAnt#_=Bb1bwUyeW{*&ccp;?v=Lmx_#xqt;l472dFv~# z2d?zvUuoS}Z`9mllnqaY%(cG!%1aFM%2kGYxpDr?qJ4NVy3O!j=`qaEJ?D=T)-e1} zdaKW$KZW)fp?1NT@}3{|452-OLt(=+wA;wR7|SD{ogeWGo%5d+V+%G0&xJfggGfK; ze`jbAy6E>_G50_p_L85C|0>+-z2_fn+B@l*OZOT@YrbgD-%WeHOHpUz<178;A1__y z`}ifU2W}X2``;V%H0ty4348u=i#fn0`aF#jFXS{Q<>7LkJs6WE;GJg#VL5Y13}YBr zNOvPYjU6#&Fa{kQgG2Tpzp|$o{anL=d;i;n|EhN0wZ|V?a}W9| z=8_XwS0cE@W>`z&jY=Dp@;H>UJ&z59mcuTLmK{J(M^xx8BvPz zbD-~q%m@3tQlIV2lk*JONp&JSeMf@^+vx=^*{SRKphtF+9@|NJWT&o|2R*Wr^m1f< zNRR9kdPvLH?97Kg*%^dB`_m77YNHa(PCxX>PSRsLNl&z)rWb@B*-3hAC+U%$I$jC% z$j%`A<7a=84%te0NGsFqEW?~i^O<;-Q-ApQ%5?*)&%bwe*hC-9Kzrl)fY^=Liayv z`3A9?BV534Q*#aKMK3(W(Z|Kuk+d6fkEA`Ib4LBpLA!zWLjDN!#aNQG7*CQGV`?-6 zojQA5LH;K6#n_UxXd6kB|I0>Op%by|13uLzDvxa3H_si>I7WjW5l8^h^ZbE z%}W!_M`#OAsceh<(U7-P`WZgVD`g-4xywbLchh_}wh3z<^o^snv}SL{nxyqztg}i{ zmmKKWbBe8#2c7(}-M20sb+s;)IyBD)q30i6F6J}4?E}-_9c{~AI@)F=*-vxr&e)s* z%&&WQ-cdY&y^)&^`LV~#t8PV%=j-TKtx7zneOPz;M}O_2{g`KXCHm<7R($w&jFp%X z933_u8GY@NrDJ7QeDta6cWIw7whA(%a>uz5ef294CC})2~_2@Gw=Lf*I%kcsOVLvWyb)Gi3Ql&l#&l z`X!h@m#?cH3$ERP`sP5M4_VIGr(xqtq|MtjFt%XTV@RVscG?zUf7w{aEd!&*txJJR z^KA~#x0nm*Id9LgG_GilrEx`bEX@xz$I{$Db1XggX^y2if#z7u^N8s=Z_lyx+^0E~ zp8Gt<%DI5%b z#6H9{R)R>&2b~AngV>Ka4>3J^N|06ty5#>=eeLJi`5@O>j>VuDirClO*_Uys~$UlM+uF^W#r@0*T#=U%q_vOEmu}kKSsYa(3kQ=--fTn z{%NInzCSUxAL)09{%rSsm5#A|%MqFGL4FVN)1Dja3DK`GF^;6EuHiGknWb{ zW88@RgwOf&WPTc_j8E$y&hJNFy9|tPnV-@*znEWyj!O5P_$t;IUqv7Ps#v2O8O<>& zX$=0q>N^-KBS$}FpA}$l?jELf(DzZFPCP#j%QL-@`N&bMhcE{i=SGaiQ97$=-LM1e zFVE;#U6o_2&_7;Vx%9++m`^>;OK~oQb+7rziC@sXW|SU{;+c9M+IYWJDcT8s33;u(o-(gKc&u^S5 z&@&t5wU%PNWuGy)=%p9Ii|06WuvQYhCnXQ9-}F4h>v@P5dF(PKSclnbFI%tJaEr4r zvMFH1Y2LtmbQb$@->BhP%IA%vWv-?5*pu_V_9)Jz=zQzwy(k}Ni||(*{XI_WA)G%L zIEQfK+|V-!oIS7FXM~tzy;L9IpAvijR}DYy@llpI@5EU^9?oPu@=QjYb5fafK0teZ zF8|5bF*iQ>+kx|kJVS4s_lR>CVOIg#{vM2#Pr$ZUupU4^7;C|q?6sILuf<;AkFH9@ zWn+an$9%mexhn7Azw(D2#j_t2}>;&u|yY^Q*PT)*#bok9` zs?!_i&+I_GyknuIM}PzWyt(uQ&gF0xT7okcah8humf;M=BhFG#?{w#)V(o)INxnwk zbYuTuU~OZJK7_N(Ut>*i+W~L>|L`x+53&9k z{T1d(!f1nSSvU*A-g9gfo^yLp|IE-*@Fk71^toJ))IuVC_Wppfv*aI!>9HwM)Tc?P7_tVULH( z8oRv~>o`2SX^dfGJkSByWc95Mc=Oj!=`spXWUlta8I zXV;z*S__=Pv&lne1L{1$IES_q>jCr^+FR$0W{dT%8}c0SyxU?Ofn3Z5nA;yCU(tFA z{(6_z3uF(q4fPYzH;@l@iZul3jcq|6sH6E%@`-vNAN5hUmXFpW0$=7sJK1H* zd~W3Nh%!-*$QKlCA=dm_d2X2xz7*x*>_hB*#ksB8`<{324j7(0=NSg#9K^(X5ql8( zFt6l+R(^(UuSU?OexvbK)M=X0+UR}V-RgbFI_13`*YQZJcZKz$_sgYsdp9HgbkW`3 z`sw$0?=L&#ZN2y&@7~}c@BMkDXYZ%C7QH2BW&6Ni;;b5V$5}1bxbPqPCH5`1F2(bc z`omJpp*zm+ZZ<-w$H@rh9kc^3H!jh)`^~kHm@KNUS z9n(C^edk6(RpTVb8?>buf0zdd z6MjJZW6V>VQ+p4#E*-mL(_>>>Hoc2Ai75B{XIjPYR5jnGK8D{GMBl`3Hg1vMt?{A{ zYdnoxU}Ek@AEt6enPflOVOoQ$675{_Y8&dXdhNU3hm6u`tJWSkmxZ(GPh!3^8Y{db zjg8(PlrEd*F&}}CJ@4TsHt(TOqxX#U;I68xTqwLPA%m}47DNB#AsHD5Hu?+0jizi8ipNBmwwa}|{{wwr$I z@C4ER)EDyb{0*XCpdT~?L&&LLcju z@glE#RF+BlTrTC|vQeI!%7=cCY#<$3HuXaf*`8W9^+)~rua%jHJov54uBR+h{9db< zDazX=ePT41B-M2n#ufH%@B!D?UT>r+6MeFjo@=9J^`)>utYfHb8V92$*0y%NY(J=a zxlt#o8`Vp%E3JE|{#hpg*i22SQ4{r1^e=F^GF)mt5-wV+^jJ4?PIJ?MdU5fKF z>Ng(r8T4zTRQ4en->?zSe`C`T=+Jp7&AYk|jeFL43_5gH`F=R0L(f4`9@#X3J#^-3 zXk~fmS)!Fi_5`8xe)f8{pLn@oqy7k$SM)BGoeS zBO2b#Fg+r&uw(*f;TJghB8IgF)Qy%~B)~aHy%D#t<<@lCA?dR`c4m)AaJw_`@30!W znyUv&2H@yS)HyM3I=7IcN#%3Zf1sNdQ9=F6_(=-HXo*QqMm9y&P5bZNE;RJJ`tUXFI7YfOOECIR+ zf>k6iej-ZG$)Ic>%N{T?S|EJf$lfj~clHiRc??m(j8r==tlnli20f;$-Nl~$bK*EKc6ECGOUYO z&-S4(Z4z14VUtu(o19FIw|gpXhR2NJzV9M;<^yQ$OplSOY>h3z)Z0<0@j;AAZ( z(#USvVq{ekq}{|eZ8xz^+f8iK-t3kEBkMBcyvS~0>l-lELdmW|VJu#11C|lYx&oqu zc0u&Rv@|$tsaDceM9Y$v5iLui!=BxCXUe*UXrGNkgK&4AO^1lix9J+9{RVY*d_tVH z3MHSiQ&tmccjK%Eq6dAXlyw8yjAemfJ|q}7dEJ8lU1vl^3MJl97W%e(zKw@IihuXO zrm35<&%%(G$(o>NyAJLX-QRTvm~K?fy-Z?K7jiGp6+ZH0^@HiK(Y6vPk+%tCfnY2W zs=ZlwV=m)hc1y33^$nq!-4Zvl=(V@q?(CLrM%ED`r3L>CdWrPqV?m|2~I=R^(xjj&P+j?1Y`%v@0wMHa&J2IQrS;^f&{lp!zU3pNtd-A*_cMDd! z+pHp|Po4}-D*)ogBuy)z8fNlhMvEyOQO@M`7(z4|PTnPkkj0bZ!n%LPB#;nxa&mXUup%fb^j zbE|~eMl?HY0L-TcC=Vt`kRs1q;^9>EammjG#s=_53Xp&<-%AZ5>FtoObxJ)ha^xB4 zF_5E&W*+zB_KN6vw%}P3yD~}qw(6yse-PTgLeY~yhcc!KAj?4C2In$qZjrPF`iUZv z1IXB&ZT&Sg)}dSCXedZ``%^+w&=MirIt-;t&|l#`*KUdso-yyn9}TUUAGT%LH6)zB zN$1dyWez*F#O5)u&5v1kwkESp$!z^4q>Lpk`eoL?m7432!O&&@DP&EK41FYfrma_M zHd%Kzm743VJL{eFtw^sB>GdML-nf)Yu%))o&5y}?#_d$IQPgv5Sr=*snfZHjT^ZFG zboN$!h)AwCAD5XL>`Yb_Wy-lvI0v$96b|PQ1UU2e#4V(o>B1A=c#6n!xXadq&sfMwbs)m&qg{jq0>xP$H zzctsvc@!CX+8rrrm7Fg{ZokKFxCm zc8{<`TO+NRpr%$66v-G$(z2@79|#H^$}sG@TjzuTvpx&n6M|5Ponifv1hzA5+P30@ z)5aA*fK{(!o|qcP#uOwOSdEsjsj3M6p>fmtHI*dM1ufkr{)Icj*hqD}=o(Q+bX`$L zObCO@`sO4J21 zr!F=v>tZwOm&9THH%W=I+Vhxo1R#%FclI*ymnaP(D1d)0fFW~$ZCV1`%=*hIgK6D| zJ3C&`jCqjK5rnbc1p*T?2h*k{rp>J9ynF4ewmsgDiM)_Gd2L$ewHdbO)5yy92%0fJ zCNXV$z9}#vb1-dMV%p4l<4Ve8S~TB2ZsN53b1yW&#?H8MC60@>tQ4WE{#q+~LJk+NDg{TK) zPCaZ|wyMoIy^Q8=3U=P_i@cCId2L$ewHYVxMRr!>7@0n!gPy<^WTH8!0YL+&sjS%nbv87A4Zg*J1wjX@9Ht|=X_kEKH3Z^x48Tg;j?Ko}1jB7x> zj94^>Y5ol4{Upaivs#$=oB6`Klwv>QLzE~qVYFP}m_LW;DeKNgYB+NQ%zu#9l1LO? z)O;1Ba6W7if5Cy$U<>`L1hf8zXd*sKg#0SZG-(c{@D>^2i`Y#}Qu0)YQiP6X!Ve&F zOn4fMFd?}}^Tl*U%DVq0K)LP*MX_VD?ntrgUKZ;{KQ#sK)ct^7@aMT;S@$mhG)>*j zC({{XcW)CDlL*6PMD7|{cSuDq5#5_~sP6LznqUuQ5QWU&p3Lq@VrAbq#f*+DVkMCK zHHi@7zSFFHySjKOZ z_{#`?R;KL@2yJhWNu*(WL*w8LjdQ#qmQWa+qJz%bO>>V4nE=C#D`|V~k<9v~;@M#0 z!K((y5-{lo$eQIeCe8H}eb&4MpOKRJrdeu2@a1ZIE-0k}tL=^`Xs)Z#Iq>oks#COc^Z;5-h8=~3e_9ctXbx{rd- zRJtkrj$|IwH3dIrqr6X-qKmrTzBb_Ow=h}d-R(%_UTfM&OX^Q4?J!5{RiH>Uw5H^Cxjd5^RK25Sj^W_B|^IY=po_Xv2ZE{kcN;6RhpddJu;B zZ^`U0nAIveyT`85HAxkn{V7LUNl0+Y14&yS?6d3&pR$u}8!x^}*a(?!Be9~&wvCiS z3?bXb7n9kSnAL2&c!pyQOVJn?U*bsF#($7DvT;95GVYWx4l><1Vm0F^hi2T5Ct%qO zH2lR6J7%zyjC;zFO5^grmSWsd-MBe3g>jJC#;uGQ=95r(n3PuDrZLj*_u08kF|*8h zTjYjJuNqjpZ`fUBB6bxanfK$u8Afvw*RXo)dMr$2T8Qh16O1{Bso&q(?2L|YL3WH} ze_@Ezh-PtG(cq+0o>L-EgL6*tEgM7VHwgU@x7=UY)id@}*U!I4j3dZs9Ie18pk&cZ zD=_alOkJmBtfAr+*uppoE3l$+7<;G*)*70h#4SkTN_6f{&q^_qevV6)?XXQ6x|a-{ zyHpqo85>H;!q7SxDi~|1Xa($a639@8u}hSC^O87esZ5iWO0LAVZ95kxZTqmaZA94i zuIM9>>3xJ$gnf1&`LnS0xNc$Om2I@yZe>+L|`t$>@BVFifkr{4nZ z1Xw1CAf9&x+k|f+W8YG;<6FVNx6}tDE&70?M14Rpn>EIEUM-_Z=M~vy8>h*6g~h^o zkm=4N70r1LOGPOLMLCS^iy-H-J>{^gMGq6KHB|N|IBJr#^{}w@kZ=@a>?lfh93>d( zC`k)PIZ9-`Vqm?)*pBir8vSv8XGz~FivI3$v2<8R(cj=K5gN`0L~Pg!Uq_PnxJeq` zpO{Vd76fW^BqzcV0`h+ZO*K{YNg{5flrO1fGjO0S<#2cgCdKn zrZ`!vvvKr$5kN^TtICmIJDYw1%Z8%FBE=ljTseaPrUU@H2$HGNhz!bp(JWJy;ZFwq;0CI`pGv1v0@5)k#db`QTR3#(445wfic63ue+rJc z1OZd#m7CYj7A=&qVD>a~`lL|aUo97C^D}I(0?k63E&xjnDcKTLmX&81m)!nI6Ww63 z@O$YUpEM0C@6P2&xRev{FC%DxNLi>M0KYujTtACyu?RT~g2Hgf2IllhBwcLde17?C zyNpVW$H}Y0%Fn`423YD4uoXwXDh+#hl|q%eLa)7F^g1-F%6p}rzH)}Gu~frAJ+7Jy zTi3$)=Ijk<%w-t{nSM1@2L}>Wg1a^uC&|wt&9Q*1q5NdqazQ{+>txPOX`(u5D~1I% z!gUgfSO8qFu}EE^DI>LBx66q?c~tmkxt_U1A`cYPXNRhrq&s>Xyi zXbJz<)Y&Sn-pSR{T<~A3!Hn{ydh;4x`feV8Ruf;Hq%kzhTi4Moj~O3FFt z>?S2xL#2)+Ew-97SkG)`%8Ao7m^PqTElu(N|4dh%$QoM6r5HNR!gSV*uZG@e6E{#1 zgBqk$6iC;I#YsBFX?4_8@IPh!fAgW%?KF~IulKDB4OgvyXpg7#Pf5L(SVPxxaiTW_ zF3{4}5cV4>AsO%LlvL~kv@&w!9R2pyf&6qnQzL?5^a(}D{7gEr=j}@a_`g7*T0`T} zJa3l;@PCq)JpOTzu;-wMia%LP^>$X&e4gIXS_48sn`9?UxFGZe%S>(z)mRe`QB^U$ zp>!O!N|#}$&0;5>uv!x)aMu5+77dgCCauMdVpXWIq&+iT17=!z+HBh6T#>A)b&KS6 ztu|B~UG*Hl-~?xC+kh?xFecar+@veqq-w@uz0*%Th}2-1_?b!vV0Iv#VA`2>9;=Ai zcwSl^HLInc8`XfG*xnEFeE%T!Dja?BhwhPIi=>RU#e&Uu0V>%A?xbuYA@PHo)_ z_qJ=fS;U->-p^{xTc5+Ru?!hlbrdU>#s4*(=f7V^dH;#>Pnm+W^~nXFJ{KBL+zMLx zjz~S^47>nik=)IR6d#t%X&E1s@raD~%6PvWn>?}cRxu?OuPKl!%RB9S7UOdM1Gb#r zmlvT<#se}QwqqyXTavGq>BnSTl@gaoK4HhEWQ~v{cFH&+W7g;LgHoQto6K*N=|^PT zEMvAiV)K@?OT4v0qGzPu|3v@efj_ecGK*+jn@_sUKTMs1w|GqI^tjC0rHeXao8r+# zyk}uwe{VESY)^aJ!gyFxM%&Vjk?7Vfu|#jYhpFDSjlDhFqVe9gh0*Y)*v43QTW5bH zy0I(V))DKD{z-ZIw)YwDXGVM51(FxR-ib;?Z8o;IrC7V9{Ic>2wt1qQ>FQ?~_)GJ6 zo60a+BGJv^{?0^8Vta42ue^iY+tQba;0tFkE-1Efid*FBFz^G7uHD(ww#8OOHlTsV zZ^MoTAmY&|qjiN79Z;axwu}rhL+80JGF=J(@_g4+zbo!{P4~Mx{Y6E^#l?YOps3Il zFQ4z~_ZQ8dA8>utUo_9P-CyF`;dkZu1-0EjKVVtt2olXzWaiE-E{2A&dd)M!)kGB0nuE0 zZ6LqcmF;)+m!rl-WK6%mU_Pu_P)N50R+fhFJA8zZX+j<>!OFQDX1t|wAwY$ zTvQNPxO(+!)Gtujzj}2N#t%*N)=P`WV}I2$XH@LjV`XY~{G&x}MfOedPrA`{ksn>} z&U^2D;$C?bxwe$M`j_q5<0?qFHu+rz{-mN#0P^a>tFOkN98eB;0mAkU{FmgGUy$?` z{AW$lbl-q<&+4S?{|Qk=dwUG1ZcTHq%NE~xXHr-BOP4uoj(^_e^XAN(^LSz4wmFwA zDW2<^>0j(>_ZQsB--u{TzmEv^!INIy3Tx}9QFHxnQ;B; z6Mn>g*E)Yvk2>xmCoQi+hwSekC~`e3GW17Gk?*din)Oznq{{63kxy+iV85B zp`sZ6xNj}TIKuz=_)m_^?S8=(1cFJO^9Lw!^}?dU!lJ_BqQc}!<^`lJ3KSLw0%a8o z7hY3XxQGnG#FEr z0hm<#FQqE|Q-&N}7Dm^ad2?QP;e}I}h0AHY)zPh=ZiRG9uH93}h~LN6n0g)1fx-=i zi+XolT^Lw&_0`uT4Wr*@n0eMrP5**w>5 zzbk?vhp62@chQDLg|0cvZg$<~Zzw3bdcy|Sj^<>y<2{Y9-T9Yy(*H>VdiP|r1rsmz zj{Jha0`!<5E^6B1K*efdV`5T8yKp?-7ppLETTHh~x?M)MD!N@xwV4tKU}>fdbicM}th_~}onNS)evPajI{ z+_bqbwgZ5hJHsfqr3EUNRkqk_ALzZ(TtWB(SdioPaf@%!q&AmN+vM5-+ z1}mc&>I*sfqphcBODt-1$GhmOkKR61jqF+3y)_!|gTc#V?NptXmPA*}wn%t8yMvU- zjy}K{;Y~>HHTt<$Lc5~}f3-n4sy^Jgxu(0F+$)x0Kx^yi2kPd|9-y@MH^kaI5{)RZ zH`~ipJZc-EG^A%{^P4wh+D21|Uei{n~o^YPc_oK1Po1i(*Y4?!p_-!q3~OS=mpr z!(!6_-*=;vk<;x|yT)tL^MHyb=-Sj5PxNeS>ytgOtz}0v-lO`E)6*g`d~NG=EgCkm z$#0A&I(lHl)^KM(8ol>&XGpG$V0|4+pqBz4rJyVxlUBqhE;5LX~LmPwGS% zjxC$}sU{dHWGO>nY-0|nfIc^}7;iLIXz7o^(t>h3;DMe^wn^ku`tv?5ZJj+B7Gcp- zq16|OVP6rW3|gBAqdOBZ+NbtSwp>PJ~fg8j~$8>l-j65X&yrw>1_~t)O}{YAPJe z&e!)$^H23=7&ijy@EI3^nI#@}p_<+afK5$nMSM$^$`3a6sa zZa_MEV62b6tAS42W_FGk1x8DUoCW)0-Azd9fsarynou+{;nCc=qzZ5}U)Q$e#*wbf(#k3;_8jsf&yZs&0*aR_-F!HEbsKL>ARD-^bo_In`>SB7K z23c{#dVlTW#eT6{^)KwgY~8sKo8_&b<54^jx}tp~?(M(&ipwiN(M}vuUjz+wwPetD zBMZe8=wI0GUwC7sf8pkCZ1ofISX*KtCaW+igoMr1hZC@5AqFnRfZj|%4sT#Yv?tJC zTWDO;QwUW`bf9mbCiWncE~xG4#h9YZP(~NWQ>VSNXA_=a+C=NE zM=|KOuBADfTwVht*~MZ}l-PnH6vi_~&af^0-Ti%0F_CP;@Y$Mxt?+z!fTr4(&Lvf0 zF%iS`?R|-87d@D_qIY+0u^*Ty(6K=4ja0}Ml)fWMTY0+|B+dIRXgZADZD=iY72N+1 zd2b(HRdwzEuC@2h-a8?L9f%s_Z39t*B5$Hb1x+9*C{?Oxsih_%2@nk=l7LZBqM)VL zwpgjhwy0Rq+SZ<`$6DL^g7w{^<+R=wU#d}QrB+WtJ*~%Dxt}rTm}|{!Y3sSq?~nW3 zJD;rV?-+B;F~=Np%&}hg+R^ToWgP9@TDm$Kma-N#;>{{|`^QecJCCJUEIW5y5H?Dq zo;3eNJ3f&TCB|1Q7aZLx0Uh)ZjJT#r4jCG{oI=T{t&7{4)p%i=EWO0!L+4hvl)BDe z!Tyi-wwgfc?l`ZZy-AkRvPFJ^GgBbxVL9&X!cXS7#9C`EU1(581CgNCX~#JW%pz#e zxmdj1TrQEo;t)pHn)<`#_%lu?LCET3kA=V4LCj~@A>-8fH#_Wr0nZbTq|dg+ZLKXf zSXx=ri`fyFqoXOL-L8h_9wLzT-*Qh&KB|BataUSN|BLfaG#N!Ri z+27*_y7S%L(XGjuCtqjIJT_l#ub<7EH#5JYl@!+1nxAsa;giSNrEM?umF}g4yehk{ z)Lf7*wQTc$3;)M^^v+pj)x~u|eRxGB?`uB+es(cfR;!FMTs`|F|I zMR2L>n^jh$?SED>9cy z(L3XYkEjf?OEXl~v2!K9rETm0-IuJL9HIXS!~dMC{A^@@p*(eLGec z&@BbD*yYO?`nl>8)O&sp>t~czChCmePT7}z3(+S!UAgZJ;|G5E#kyiX@#{wB+a+=D z(}nXd#4(|tTW3LZ$gDD^D47SZEt7SUsZVE+V zyPdQ;1O_cxzEZAk2bq*fLS7qz5ib?&-Q(ABu{x>~KD4<=?PQ?&iwi_5rc9-LFDfe3 zXCndt%~vbp0_}~@)Vnz{Le%GCX;VMAfUYQ@_b;F;3+Mw2XfIZb{*eXsqYCJJ0X?RG z9$P^Bu_fb=pVUAQ+I$7vwSkuSj|z1BfHGX@@lmCvClt`$dNuNs3+nZYx0Z{(BMR#I zPJCRbKRTw2zM2C1m;(CP0y=)$g$nddE2xj3f3WrOV{Dd=pI@+aEgw-qUtL51pl24) zvkK^w3g|fn^eF{2U$Bb{`lD~H2^Tv0qMOp6j-^fg=>>GZ=hA6Ezo0&TqKpdaKT}ZO z??E`~KUYxy`2xD3fNm-u1!!a2m9z6dO!Y{VNOTwMs8Qp1%;Tb2$})Js13o7Rgw`6Db=x*Zzdg!@@KA^sqLgw8)QzC83KmEQ2!CYh z;8AGuNBF4HQ=zdfbmJGA{1LvO_0`Z*px;os8=CwPzOS_UJN(Gfp-c|>B%#w7)IyU_ z5+hW8H8lAo;l91l0!==Vw;q`y{gF=+ZcT|l$R`OG<5ke)lf=0yFZJY;#44qwp4dxh zyo6GZ?u7HtLg-rP+f@EOX!41?)XS6w&@-Wbp|tp)e3E!k=@w}6NkZczA^swtB-9__ zJZNG)DQif|HfZuma)>3}!b%b&wirj5tA6p-rvBHd%!!jbPv6JI(0&)olyKLrAnm0` zca|Psl5re+MbDkwx$A1)B_+8gWiFkV%X(ggxwz@k?#$^EUh6W=wO@DXi}Pd70nJqi zt(nzp-kG&>yvrZLan~8l1UbT0h;31YGqnHZ z4R@*Eb!5gOBC-9EhM46#aBhr59K#7PVmB?K)L!X~?*y23>Q9Hg0h+bLe(5OLH%Vci za+F(hq!Z+kCSq;>J;pB z3TFQn*>H~bC2bceU-~778Qau`Xe{X7=UA{I8q5FIW{x=`o1JZ9r?XA4vrX(=?)9|- zEdCKY$+MBopTz$MdwM>Jyg$YXUccgJu}f@NK#IjjrYsGDxej-F{9cdm`jz(LTWC{! z+x)r9bI9j(vhSSdFh2aW!~aC)3@1bC&$+%BS5EquGDU3=`Y0Wj;A1`8PE@|gi_b-m z$Xx2lU+&3Y>B&Fn$v^JNKkdms>&c^b5cUOfOhg|B_ki)W!BfGdidTc#Wf^`ixI*zd zaHZn)V2+WD%+=t$;tk*`#T&uZimwObXCuD}JW26pFnt^T7I2N?+riTm-vO>wd?&bG z@jc+#ithu@ReV2qp5m?G`HCL}FHrm>c%kBL;6}yU!7YlP120v)1Kh6oC2*(WK5)0< zo!}nDyTGdzzXk5KIGhGvr~LQ9>lMpb^8Yv{=eu|#Cq!`q&(9V6hx{_QM z$-DKQf`64K|FwT0f3WgJ-q&-M$Nxuqi1DdxreM!h(II7|*YBZTzvF{oG2=AFttlbg zni7mmw3chUwS2s%bB3pr*l2Y+#b&Wb>^N6t1jCE?Vw><}YxL|{tTM2pwu1dR5vC5Qd!HRUT{*Y8fAg`^Kti2F$XgIHePtK;P5YhzA6WDPobd5GTW4=?iM zw|Vlcy-5BwPyWqVKAJl*2;WBjY4r9Ttm|n1!kWF%*}sl=;yZkm`c1~kcq9L8^4c=4 zV?*hPQp#xvIK2T}ZgE1+Q8{m%E;2jVI7d3($yZsK@VD?ex0bfWa*o8D3eJ8N%z2a1 zc?q~yWljfkz9M{cP77^hz5va21=IEhaEszRxJ_jSfLB?Z+5<+f$S1~vzhtp_Hz;E; zdTQZ+%i{1h@Us>dBOCl$@k;P3DkFOSWO3>l@Lw&?8JUE&Uli#W%Y7f*{!cp>-^i<88D;suK{+rfWOJRbax#R>Ez@u{@U{12Eq!AZ_j zlWKFg8(eSs;Sa&{EKZF8FSIzF0He$3Sr2Bt8+$GT_gb7>0KVGdqF;c&VX>SOCy5D> zFFqQ4x5Zg}lYCJ5%vF*$M&`f3f3!G#DwsJFzKl189R?FisWOY@dP$0T62A16(y?T> zfpsiJ%x6l+Qq1*|REL#MG=ev2+b6-dTP(lql-jENhrs9({qjxw)DFdiz&kBY9|p#c zB2&VCKz?FOaO#W9tNOfT8d!Z^{3Ed1mZ4pd+Lrh$*!h{U7pb5536P*j{hU4vtbQ(L z&WnC-`zk&Kyxrp9_h4en*vzQl*P$TFntI=nE^8f!Nsgi8Jocq z!D@f%-@uw%if#sE@H&~n)3U0SJi9P8HEiS4AUukg$+tSxsoMnE~o0U(Dr+;9v z#6X(0AvUB0Kc)Cc@NX?HE(Ozv$Yc%yziV;P80ZZaCw>Xmxz7F>{9VhJxXRpXadrw= z*H`KSu=-G5ADvMj7Bjb*zp8%xDZjua{brwFbH2jftefi!u=+}JLsos2xdW`eO1%bF zUzH@l>Z<@7vg)hU0I>S1cr;jjB{@5*zRK(X|J2$Od;^S4#o^UCcxu2xID*ct}XC6xbW^q6nm{H7}4jiJGIUP7k@gVSFiYvfJE5^?Qu~T9- zISzaZZj!?-;v&X0@H#HDJNXAx&#myEwYa1T{EEeyDI9ud zEf$;0utWNlI4sL6#^y5oY53S&rv6M2Z)J-uU*@8$%i`o6;EOo@Q5(u$*0!SmO~s;L z_p@>yFessX^baaij4g8hZTiJ0gAP{AIv#}GhCdd3g2mZp@QEC64sr6V8Q~Y54`2OL{59|%-gT%lc0 zo+y9F;i~g7-g7xcWxB!BmH&G%F<|70>mes=-e?4~p3V7=;5OT~xD`zM;Z8qxnDPD( z{A*SJ!{D1OmitLVeqv=(W57=-J`(&Zt4Dq$VaRW^ui0SYOmwEs1pi6#QZRlNAIkB| z5c(SimQsN~jc*?YvsML5zZKK8?Zx0(D&Grc&6{yCFBSA*`eGav=P14z%s7os?5XJF z@`&q;c{1|%z`w!k>qp8b-YOnbyc_(iZJVeDGhWkgC73lXdWwdF-%!k&sQ53{N$gkr zH*Xcye)l_6WoB?1dW_=5VC*w`uxr0lZQJAlV8&JH+N#Y({|^5fDvvGu-L9CtvLAKE zZ}@CK#&Upb`=Rnb!>!jOoAURsv2Er2Yk&6pVndo(-Ty4bi@*zQ+XQpFKWltH*Oq)@ zdjp@cp)J(M#Y*@P)QLpv3Ys%dxSXIB@*WYg=OE0Q@5S1oL~qx$1L5 z;(*JwEj~PevCDW%1pkoR4NlLKR!=4e{~0S2ybs=?{Au7_ikE`%os1>Jm?~3>?*k83 zOuNdw#n}XSg5v$b=#sYCL&3WCv-q%bq4Hb6?TW7gpRaZ@uF5YcMn@%aXzZU4)_F{y z047EU>9{I?8IPs%dDVF*GQ^?yAwyj7GuQ?vj{)m`IknfuV43O}I#k<|V}_25bq=kz z{Ne%dS$i_BV%FSH>=XS(%*#;njNz{YvyT>jF*Xb(Rt^7V@Y(F=;LEk=p`D5u?@(gJ z@E3q@Qaf48LvLl@Eb^4052&7p!9VwG+opWRH1tJ_ONN8{tc;9(=$p!C9)|u|_2Y-3 z|D*gK@JHGgwjEfZ7~2kH{)`RScA$eI^~}R|6AIZ*mjp8tr!>n0Yrgw1dgF26uxQqrvOItW9I{GVq7^ zUTq#eO8dfp!^bQBDVTVb@s_>}##X@tS+m2*eWE8|jKf(jYf79}fom-T@4gPm6-`M;g%4dE?+-LdeW5BFm(Lad!8S$Tr zSAl<{Vd2dr#YS1sm$5%S!>d7axj=V6+JopG4gxb7Qc-o_ZmLDkq;|=0sO4RojLmzfvhanzyYRN6`z^(mFdm!otn<-Y~5Q9gbeb+yHV ziTzR7FZu`11Y`eTr-yZZu*1aR;fm#0)yR_{^4M)KI`Tsl(=I<;@r&Tm+IA9nit_&q zKF;DHtf_phCv&Fa7WfTzj0t>_XO3jN2A^kfh8WCahnaW5#HYa@fiLzjIYs!zY4~68 z@K-J7b@W00S`RZGkxx>ezsbYju{iZ@_}};N-4-WUr}=w5{Gi3jMeu*_;ioMwW*y{- z0b?6jin$gcAf>n-Jix<)6ti{$d>hFhq!>TRy)(lXjNc6w`5B)4iJlBG6Ul#C@mAzn zSB5Wmp<>aqT+jD`0Wl`$_;T$lxX{CwDDH#5&co{!zX2crnzn-Rzrnk}H+cAF#eaf- zyNB-2Vp;~_2*vm_tnzTR;^*K`^zadi@mo0E z!*z=BTR7Xp_{-QZ5B?b*{)}S$BiBTXjNn$q_#|xiaHrx&;bW_j7ksf|{2cZXaxVz!#dY;4?lcL`GTKOj9uaHJ^V+-*qA_{(TT74 z_PNFQN1kysb~4_?XvK^-F-|e|%l#uG^AebSYlO+s1~V?XPG>NFO3>b5a=%=UGg$iV zvN$mwyw+klr;vM0My3}0Z^~Z>{+42VoA|z7%c=t76LVc_8u%f-ZZjPGh{a(JOrAN6 zF^9q@&lsEs|4y%s5DSS{70(0z*~9NDCI=*w9?mFkfj>&GpWy%GSjCJzIoZSb%3Nb% zUXrssJV)_r_)YQklVq#niSW^7u9*m?y}{BKa~Wac&ERhMUsj9{lh-Jo55Ac^iyx#U zZ&jQJ|G>j{DXxb97{?PLFJmFb4Bi6%PY?fJikTO=UlPd^ZwB8F|9?1cbN&8ZF>{wn zc{ppaoS&u!d3cE88u(*Wz5>j?N^}}|d~5Xg!Y2+5#?Dlohi6$F-Ut6o#ZQ7iYq8OT zPo=F~dr2|oNI$+ECiY9eYZUJSv!643>Gx|M|7MSmpN)*j-@`eE=%J*r!(j0PaT{Uc zR&ZhieBw63#I3>C!zXTyyx8-qC$n4mz3|^tEPnVf#zpjP^yE2K$||k~mnx=Tx&C5g zgpZuT!YBSB{t+IZ{i(YqQ^fw%;5(5&)x)PN-U@%QCx5PD>?~p*YT623<;h>=$>Vb) zgD;CX{*3T9J^6p=TVl5By(w^1o5s0{>+Xv+s-K|KiDiptzG` z(u9ZE$2oa(JxJ}5dz9vSQ6uuiaD)$4ydM7XiUTmdH8R9w`eYB|Tf-OmMV>sqHGIaE zUhZLh8_8c8Uw2C5TXPL+Jn~=jFupbXjqtzc$>UqYUkLwR598ZN{#j2R-x~ha$iLuW zd>hHXqt~p6yEMKXBJp1ZCRZ3d$)3j;O#I7rD0git!x}J{*vt&`Fge-q--3^yBaEK~ z%XDO>DPM4{V$pMwhfh(w6aMKQKFeaGXQ}c<5Azh+)9qpA!|>~o>GkkBi;W(}W@M%! zvq^Ccc#DT`SIoR;?o&J$e81u|z>j+PNyWS2?@&As{E}kYWp;XaS1d2r=8QcpoL{CD z6A#(_J^q1;u~DwsMe-9AZ-Y-fM||ShV9|pe5uUGjGkp4s;5#1*Mz6?-pR;$y*8sEkC{DrunTN^Aa-A>~KKna&tuM>|&S3WQS$r7bKE?I$ z-}LZ*DgF%n|MoEZM0f2@t`9o>{MuKfvlu@+{l)m%;Axz{Re88tG5U*%T_Yoy{A}<7 zF#A4(8GA9u8wO*4@uxk^KGE=J!~eX8n-q(lm5S-J_(H|w!IydX3dPKAF~=cBr{HT8 zi)}Y6o&>&CaV?nR5F;=6E>Hepy_P8UKc-mhC$`KrM#0+^u-uh|6axDEFtEd{*sbdUapfGKJq1bPX@n4^7zGI{K*fu#kfW>{g%vCOuG_% zWaMdALS2LxDyF`q#luS#Gp>>z#rU&iwc=XvIuEb+$fpL^f32!$jdW_ za=qK>DIKjCUzW-|iGIOihsdM9lsSs<(TYV6xhvB1DaF!uzK3P}q6gij%u$4!6^kD7 zSfqzMX0Yh#^)PG4v=#a5h*z+eo}AUVq53ixFn9_+~{nW$6a3udLPyRQG8S5bOgOL&Z znkWAkPyPeN3%Tz?+!}eo#I4gW_i_x*!yl=5F8E*%AF6mB{3#wjN-;5&JKn?iHqw7K z=WObq+&PL*LcZ0*ZHl+SCx(r@;BLjlh}<`d^x$)YnbX|YJdDo`U*x~%$>VdwmwxZ{ zFg`c@=ivX`!;dQ#JufIG26Om4((?xozp3~RWZv;GbK&ff`&b5}r@Txt_LT4MVdlcf z5I^N(Jj`4~dX81h+9}89hJQQwL=T^=7$26O?%}f(Gp=&yb9`97O!-s6YdpMGvDo<~ z4}Vp$==l$>iRk>6|5&lu_K=4kQM?8IZ$0@J6}P~D-NSEq^5ot~|6axI+>6V2nBxi~ zgMPVh=i~>ERXiO2VIH37$#2JV%E-JjtPv6;0DFgZ%2F|aB!F6 zX80F*_)^7p!oR}9UsQY_{BJ2HP6pqkSoGZHVPgAm@j3H8nB(vWa~y84=y^i1jO!PQ zMGrnVGOVq^uPELG{Ou^_f`)I*6dW<2sHa-TE?>U;|PvOsFf9(2Nz`nuZMslCSONk+eI~jw+J@$H$ zs0n)G=cD9%h~`?8@HfQQ%7W{8R>`&9tk>&A=Jxn{V{oUv&MEBRKE0MJc&oiWEHHRd zuXPLF&i!epa|id59q!ZX>LRmCugMGEt=B6AzaKwiDb3t7nPFD%HNcbm83(J*urhxB zGt9@&j>@s`I43hHel|6%(fcE!r#61JR_=?Lc^Ce?__<&CE}OZxBK*eqS!H>4d9u^r z89xUe_UOG)0;coz!D&7cYEbiKJz#2Aq9sIoF_24SSqK9$0Ywz+M zTZ3PM&lnBv15Z=D6U-Rhwf$hOUfV~X#GAR!Uk#qGcs#gK=M;P8yJqHI2KLJRHiIj` z?TWECzz>FxEkUMgLaC*d9Epcs2M*#l7HdiqRq8_j9>7cqz_} zL7$fscEvZ`Y2IzgpK3 zK9GCdCjLc!qvA)w=yG{7+@yFa{LOLB47Vs2{_S!84DV1}4gbzKmxlK!?uLI~oLA+$ zlkVDYxYf(C*kPV&uSNbzFW+uc%(%ntUhaJ^zULe6@bd6Wip8EjFDLI*Tn~Sjm!IEK zTm^r(m#g1XEb{MrdHX}f$g_)%zMGIp>Ah^^6WKVQCrTABgrAFZd!j-yzDZQZc|I{* z@dEhyIOoef7?b~d;4?P&T@|@!Z*U9zNj4{7mU)Ila+Ey7kf@3G3yEnKODrd9<9$Q| zyN{3zU39g^J{E$2<&I!p?aUMwC8?XH&$3pJ7BFQn2 zJFbxLr@7;b)Y0);PH{}=jw@2l@tT!qp4>W3VUJsz@_k^p9#gN!YcTbfc-<8ZjMrKb zzIE%XXnnka?n$}hip-sHd}bbwV>0tW9EVwa>y9hr-p~ZiC)wlT z7|U|J?cz%A`$;}hS}K8U^| z`K57O$-Xt>Z;oS3_Ms7_a2|);RWLe;4uJisMlBYZ3p$I3~k<%#Zdv0qbJ6 z$DbR=s^ovCNAiEP59;;!>*5%eJRHeyjN@7IXT-lJj%~@45&zLR&SjlO{O97Bm%JD8 zcgFEA`7PqV7q11$V~#I*%-qL^C;2MkSHx>X@=U~^8n2hcJdZy=UOS0SkKY}yqeQRA z$3JdO$@3PG{*CeaN^JJ{TY~8MnZ%tQ|DJf=C7$#6JK{B%%*OmA>)NfyWTnR+9P*c|BCoJMOPA2gB?4}9Aoe;n1t{>C? zZH9go_6_y@SReaEkdN2?qgL+Kc>P=0x8!*|c~2SdD2sk*!mBdxBeQR8lXv6oyT-lC z&8t#U4L_g2+x92yv(9)ct}&hYJoBDB>r<7|x8;4jQ~Tn)ezJyTU!T{H@4ZCt z<9h77^7_epZ`JF^H+ob)o_saby$q}!s6#DFf9}k*P zu$1gCCroJW>Yhrgc$pbDbocbHh;mXP+sjJ*tDv?NFfHB0j~Fazb-B{=_Q7hGUxrbwq}yOZbH}n}{2op}U5i)nBO}2C-U>dU zshgh+S+uen&Ht-13~AZlrM1=6g4XUha3x!alh{O`_`&Jp9L?94U>_XxvAN>(aqpp@zW1Tmv57wJnMC?F zfW7f1W!^;26{nAL6JOtD9Ir(7$v8z$K5u99_1y=3HJd9=-z_i%*V>B9?%>nS2lsIz zeLn|#`sCd`a*Zb{PTvD?e0}dhJO6R~66yO5*wa_k3%!8N6{qh%VR-s3uYz{^25X&+ zm*+P6>DvLlFMV%mn_508m&?3~PMMDiHt7p}A?ICcvJ){n6)a z09iRclKb(`lRKaSdNrFX+HdkO7{1&F=oTl$r;~H}PxHY6?@_l8|0O>M-_ut)9J-#( z6{k=3)4p6Ibd?k0)5-OMeYthe^=z&jl2VL z9z0i^KAu1K^{tn&I{U;Xr|&|rr*G7U(A(Htar$IF1=re&^)eUp*~Gq2u{nKT0gFC4 zmZIb(PF06t2xd!tk56At`rMb?BL#BXq48@}oW2*}`1)Rg&PGyJxAe<(@P2YTq4&{m zksQm2J}voOL6DbYOjoq7Nb-=hueBBHiN8wb*!V^KBX!tYbTFTuzPbmgs)6T<({~IE zPi_|LWr+0Qij$KV^7_5Gg6p{(;K_V^M(d`s(3$`tIMNaVq*g zt97DJ;>y!^_O;0Q@#pj{=&$d=9UN*&42nL*UkZxA1lD7l^N1ar(}K;o0{X zb1V1Lj6N6ZqHi@kX(N4678i3`B=g{k)Ug$P!G1cqPSJ6Y6Vf`7`?_MS>Rg8zY*7)L zC`B9i=h^oJ{io)^lkqlbo!Iy7j=g&&2DPkY9P&I+RKz|havYX4$o%_7FKzFR>Bwgy zpNRP@D>-(*6M8Y5%afuXKlu7qKM6Sno-3x`B`f)b+NQ2$6FMg5rA$6@(h-v<*G!sp zbUr`HaP0rdlO`Q?)KU5T5yu?Ke<_V6Yi7+oF-$n~Q5%}`ACFO1+AF z8^QH`V}oq@`o@uc&CpMF-uP;LkT3u4(vh#W1l8q#?76XTZIJJ~1$Un9;6*&CFu(JH2rRU@_Vdb93(7(6mDAp5F(R zxdGwA-LryxZd7>AQ`ok>UTfP6T~I!XK5(ndZjb4{tueCBs! z`|f7ynuBVQm9g$7O2qcvRg78c>w}z(VRs8-#pd1Xtlhh}*fydc`Cxl07%%dn&-iptt}nTweDs`}+-t`jTOQQDpWAut2f56o+S<#5(wato5QA~Q71T`1Z4D01 zZ4Rd7GLu(t9UGLE{~)N`Ix`qvel?%X!T9p?@Y@es^5rM<`Q?_r@^SctvE`l#R^XFd zc^3Y*Nk83FkFCF$^wFNG-YVYGw<7obsrfyr-s;?!ruNBrbAPP)De{%MT{R!kf4F;R z@AywVZW*(T-5mx2V62rgMj401!*=3<_)4*rZl4)cNX$vRZD+2xCj&Fy z5A#`xr{KfdTqX0G{jjmJGPf>R(Dw*2ax0&&<0Dy55~u6%v#hC^#0oy7-yJ5FX7ITa zds4{MYdk)K&VA@EudB$HH&4yy)+O$?eI(woeI)LV`+yhqk+|FTk$C50eSDcU^#jJa zHpnqn8RPKXYZ))=WBV;Z1^h}rs~PWjK2407v5H+XRv9znlQGkGb?)YIXBnGbJLWg9 zvR2BIGxnD;%UHz*(|;8{PsL*_)F`S;)lj{tmVzwdDW?) zr|$BglFtkItl{$_J{QjByl3~?Udb^jazdWZ(%fs~<#YJ%=HBtU9|@{+lU`Otau=4GyNvq$k zpL9{Kv2kAclID%MTL&|)Dc6;cJ#OP3v3beR=XMhl<=Ifin9IFY^BcxhS)LuT5u5Ya zUM;!Z&)Un%de=<@0lt4s)c#h^@8#x3;XsEi{)1*E3m6_&sys*;y>t< z`1pDL(A|%L$>n{-N$&OPLwEnaH*0cLEK^+|Q{7KS_5+s(3rxJ>tKHb`a)j)Yq%Z34 zHv5ZP@*m_L%Rl#F-=wK;XTo>hJ|vj(cDDHbw{|5~))stw8F~Lz^2X-;`{ltg_mv+szOQ^%edC^kdV})XdGq$n;zixEpPLz^@MQ`= zy~BF6<83WJHa9l6(bT7`ZGBb7{weH(vbkIG7qOmlxyQzBWF1wO&km;Sehj^B^DaVP zzWhs{t3a-r@l4rsMQ=*vMHU%rFLs(^2$_Q*yj%9A%-7w0J7o>>$sEWWVo!DX$)|7Z z8!L0uTv0x{?gL|g^QS-9)7qOVzqRRuJ-4dPwdiCHbL36qWAdit3>~8#*O<`Q-v>W8 zw)i6U2lJ&~4suTD<%OY#Ja)$k;M!XL{gZyf!uQ59@;eufpW@k0gK3*0z8sco7EVTf{~+SOz?#U@Kl1WE7K0(>w-}sE z=IofCIVY0;C(rgoj|lX8z^BVR?1S=8TJi`=-brf%a)ms%7!{Wjhrz*qcb#RRtof~M z88(rTx>7cLX=u%z#dev&)Z+Awhn76}ujD2pBW-*+lW*Wjar(=_DkJQH&+)HDkQUdk ze0t~W@*avr9-i1D=jbvH(OGc5KA;{mw!?SD=xbWp($?Wl*7N`Re0|E4Nk<%oT>cZC zub*1qE4?uzlxlu;XyWQ@;x>-=`mTLAs61ioGr_g52E$M2dnVWr235^3w+GkO1=;4k z?b&Oag3@a*3v$=q98_F(JQqO51^H|E6ny5m%m)s`4-IaBe{yi?W$Y-=92Z===Bn92 z-Hm(SBN>O%X7we*dRBjPY!C8@|5e*_=rhk#0cYoPXP%t-VD-hrdai-D=7HyPt2d49 zxojl$we*<{rd7;sinOR`4I{a%*m=sja&q$kpB$Jh$eX)wQ)Z1lukdH?QK7 z?Bt3y>vy@j`__DMyVTuzS)LzEIvE{&u6}$@Zq1b{^WaAxuDJ@C2R?dlZC? zd~Wr{Lvtcmcf;P7F1;aNi;da3ukYR7%UrBw9#&_Qx2EwAOHy;`V=a1X_8T_2R3oO2wcoi3TZw&I6<-zRT=6d*;Jo5*? z?#7@+VuLtH5g)sVi;C52hV@L_%p$lo2sRwV%>c!{;F{5U-(RyUc^h_&_W9U892+aJ zu~O_ue<1pi%WLetf61Jr^iz6jZ)!C1r6MD;B1b!OY<3yg*?LSZ-@I$gTzrjuvR%_C zbn*K_i%vsJU1RZI#rFPkW$*T1ljfhh?xW3r;N*4POP9`nBdEIMToMHEQsk5T>UC%I-1&td71k>T03aFnctrg6Q2tb;=Snd4HIMtrN|SgYf(sYcfFCJFBta@Nh` zM1Swgw41uR`4lt${(aka8sobph9tid=fh22WnLxTBp0@g3u@0C_uG%wtd$%YR8Cw= zoWVD9%O||N#06`<)Z_q-2U$~Mo2<*#=d!g8`^PbW9%8dra%~g?%yaWzVxTXq`e*v5 z=ZW)i?LjYNU)mhh&Tsy$@hi{WGZRdDkTUx&*;)51iInWigG8!GK9Z@THlAinWDS+b znwAOkc#PGOkTaLF5@A-P6Y>sDG#f0D)saXTZI*KyoXb?dE23B60@`sZrun)Lc1DiFp`% zSFI8RWiYW`iPNQKwi2wh?A3FXAbkWA=PB_S8SQ)}E<)`11(nn@xJ&W$v*B!|)cN8eESa-T$%~T zBHv>j5gsI1CpJ8o`iVNR;UUyqnl;^|XNsxmqm6>HjO2mzPgFszV5fjwlm1CsYY3B| zqtsZ`0skqr@WAaEc{_9FX`KoZNHE%k7AYjGbD>2J$vo{stC5-~s5lTdG8>5S>aa7D9cHSVBK9^lHsgh&R_O(I)+DR^nV~vqg#Xgt$YA zb|LOjVwn*4E3sUNN0q<}!NhGQlb$498ix#x=r;|WiRcdueL!&F?o6VaP#dXgE)eV- z)&nu2N7|6~fTqm|p>ZlPuJkZ;d=|QKI2D9^r%Z_A3t@cVdd+s47M1ctx}1hH?b*(e z{JYXbo@HDt?C>sO-w;P>_7)@kHM&k8P1R3~qC`OG(Lpkl+@d%EZpjNj%X~560*hrG zonm1Xu*Jejz*QE?Uhvw{D{F!ht`=lp8ohGzQRascvu}){`QXtjkC+ma458{Bp~s9~ zdDPUPgr$@HyJ;`)Oe`K@A)_lkJdrYl9vlrqdr&DaJ}kc1WX=*C##*)bY-6XzM6cVM zlq?i%_a-Goa`C-(4^l!P7vHM~0d;wVf)e7i_zCe*ag*s+-tm{%X}ZmpGI_;+H|k3n zT=Cy+xAGH##aM4z?J%uM8DQ}a)2g%-@0XllTamU)PS92aO34X!=Ua+bOHQ!MxFl&c zu#8K}j7{>ov!L3-ZviJVc_E9qWR;n`FtAlO!dYx!8I{GeEu0a=z>7)BFi+Nq!ctK%!UL-1C zs@~u709zJus^kr?`qh@`02}tvM~K2__3a3^{I*pWij5-gLiNyN_zL z?R3|6N=JJOEsvL$;R4tB6)INi#G=kCv}R^hV;<^d4`sUz8>Qc}1yh9-<^YzbeNfl@ zRDvD!k*4-3r^9voH_Ly~@uM(cDVJ5+%9o?cqeKbk6>U@=b2P{8M;;x{xAA#&cxE^$ za01;3oQgoQ_QWc8+lpAJk=Efg@}JKg#_s>Nok(yQqb#}6^=ZkkLr#%KpM<>532TrJ zTJuRjaE#~=FPHz6?PA=Z8P=&VtrsIw4ol1pICvLAWP&Ah(1hTGp=M&xn#cBoCxni1$k6g| zaJshg-)5NZ4=IYePcY5Zu{A=D8$cioPK%v~jtC|XIXyh{fCU3S%kU5T;^iT)Lzqm> zc)zzuIbTMP`5t!y9m;61OnR6&0F|PDlI@D`nESTQ84@)Wp(&W>8Z*u#BGCZ_!pHp4`tH~fs1Qk9f|HLc z!b8&Av{*iG;(vN8kd{`pS7-)7Rwn z>FWLJf5!7VlD9W$>F@e|%Q)EqUkS3c2TmH7-Fx7_@XY^_+42YGV`q*Z6LE*GHhspm zsrlEY92umSU7I@Bqg}x0@bjP(Rnip_C!4mkF@#y)0+Ya{5 zs^5>iW6G56_9JYxpV4=0)+t?~pX3Qs+^6GLDc{kL7RV|2|HY5wZ^f_S-c}*{jWXF=`!&fvZ3Yw2y*wVV{yteMn6&((BHZSb# zxS(}KXY=8$O^ezVwk>aNU)j>Sa9LCHQu$W<|E5jXg`Lp(R>UB?+m;EU zwNzZt)ZM(arDKV$Yg=)?1snomBL|4rgyGEOh56*5eDeJKArYE6efkXUafA~;HD=_b zi3-P#9X4jf*pZ{E;7R2*^6&7o<)bKBJV7Xakq2S{{}S>qwIDq`dC`rDB!T97WPd(n z$@Jq7pP2k?K6zO7Ng zjYc$Cl25Mc_rHG9^yy=cADt|lkh~~=aPp#QW5$dbjY%WNoHZudHevLriAzRLPozEF zKTCxBuN*aI^x6G;OoaQb95wp*k#w}=lzt6LkDrCI+u{M8zv$CI- zKYdJQcOp#YrX@S`$z0z2pOEaDaQvw0ha@k$eC6orpW|Lw?9IJ2KgB3)Z|dp}8k*Wp zZ(Tw_c6G{U-I?`sPHQ-+wY&aPb!T)pt?1?*BP)W2j^z!lJ#F0$O)HjkA=`9ed)tzw zG`^s@yJOiRg088%HE38dwT1v}Te7^Vy(tb7I(E> zM61Q^O(>mn`llOCZzU?lrq&fJmUr~CWp3;8CEZJdrA^CQ+FMry?X9a?+k=L=r_DU2 z;q+NE&piE%IcLpkn2$j%4P6&5Z*FMrSV^DQ#XE`22v)QZ-uFId*LoF&lK9Wc~YpK4mt)@;^P$4bmv%(HV1d^Xh0nZuKMCt^6v z<#?o-cL%jGmKkkJWULJh-ODhg=|Ur0KU=MCXld(eTGZa!u&k-;ynuwctYP`ecE+)y zwTomBtfcJ`Q%n!EU)sT~mIfWk;`WXv)r*BeL))^>l`C2sI(hX+gLrl^O6Wxf=7>WGUn6Skz@^vWEI4t=-~k0;Ij8ORVi`X(K-qUh=*cCTy``Ze9nsV zgNCKLHq8>T$>NOej!t|n3#K_}F{5Dm&HlxTuz#xD4vSyOO;T%=00+q z2_%Ose3%Cvrz=7Dv>a|$X#Vge`NL0}l0SU$a*m03OgRIRb_0knAbhmPdgbB)Aq44DB6@$gckKH|wcYBAB3TYLA!p z%H=D&T1k3l?MO7TxGo?RS9Q}14r=N#i@yD+sZAyqSocn?5%&@YB*TW*<#E2krVCkD z%WQ}?ENVZ`=5LpBH78?^vE;l!s^tL0#%%u_wA?I{3zz~~Mcz(lmg&)^)|Rf02AlB% zjJ0W5GJJPi^Lg_0Ek`hBIQ{lDx|pL}YL!dAHi5^A#G$Pc#>7fXi`gaFToq|%wwg(g z9UZcMxOjt1E_(~J_{=e%MsYuP>gr;z-7gLQvtw3!s6NphlhU_2R+OM) zr>twSfy{5>Mtsm<8$ zIrDX%Wh&^VRYFttS(@^l7F&m>X;>faoJ}?~bA~(G<)v9Xpny?bW~XC!lH{x4q?t31 z%~#uVj(PKD=6OuHl@ytua?IhA$JteG&e2NuQg~c(b)9{+^;E+(|H2(J%JRi^JV}+9 zaZ@&r{M=ZE0Y8OC1xFw0nbQ}`*Yor$$#?0n$wUVg=lvcDd8?u@#q$T_1asbKFO zhvkz~nW#=_bDrU3sOK*(5S$4G#g-H9Kv?MgR6<^EJPbVAqepjeiWZkp+8QZf)kaoo&JP&7w_a@Hm(W=i?m*7xmV&Y(h1FVUmiKMMd$++n-BEM z1(Ws4llp%CqrRj--k&pZ4%dj|0+SSW= zqe8v-BP!5^;}L&Eh5AB&$oxfxdYP}NK+Aka1zP4WD$s@Vmyap|)Q>5k#}?2B70`zi z(Blf|!wTrb3+VCC+-nQ$TN3x*mCnhZmGy2QBfiOX&(| ziHE&PS3(mHp^FKjiHFenROB%!oTBno(8Pm$56Tp&=P&%6(vLzA58(=>Mc;nWl?^}H z`v+@eYB`$p4=|z~dUV2N5`J{5RFM54^&qbBgv~!pL@GKlbBEsX{=fe@W<$JVwIcgE zZ-^Vq!Gopj$+35wV%Z#o+GATs+M{B>O?-slb4^2Yn(cGv+5;#_}{+bV$K(k*}D?G0x5%p08fw2AYe3o$T%uhv;zQ3TwEg=VTaHq_fJy z>pU53aqq5|oFng|FG8Q>3&ELJ!R#BxgM+1PPlQVEktKdIQXjCc)`vz>O*|#}lmXldktzBJ z{1wHU!QWIF<}G~E;`Etd;>Xy~4DPcyyc_(MV%ml8TP%+UBy=n(a8 zACn+g7@e!YQ!P%hk4@BBEbr+{oN94q1DG}#O1^8Zz!&%^;TWtE$v1F>?yRkgNJn2}n`++%TF*d_X)@$1#+Ts*;C5c^;&+?hvVsVnWN~+JZtnZ}yJj*dfQf*65XKi4Iu?Jtu zd)fsT-3C@ar}0@z{haz8SpA%3PE+Sv`OKZ*9*cu-fbo&&N!|qhn#GdWQ_#lFAAs+$ zIKh}wKT%u*eq3dyfq!jrW<6N#PqOAxZ(F_`!lpj3IAom_WfcDgTw!ry8+f$E$)~^* zEH3&B_&AHxkAY_^e-D_kiJcMyMa>o`Cxg#dTnS!dafUom^ks{Sz6EA8W5@P1;}M*o z|Fq6^2LGi$t^AGPb1Y6@4A%9Pr2n+~FnkuQKFqELs}GYegVl!_`bevXVh0&)^rA2#pZx`%&4ytAA;3andM;hRWJjrzDlRTi?l7g zOoxu^Jur3~o$r8|C*z+n;Oi_-d=q?&^4|gzPsVS50zY7J>ImXnV^y9L%a&Vy_D5i~ zN7`lQTYk|iV4bfl^OOCl<%d55Ym62B2l!W(pJ)dY-^RAjfp=M)!p7{o+V&doM;6OB zP>PSYIPq2R9K~0G&r*5jM}D7ObY_Qv)j!E=!T3@5;YjdB7AG$OUukg>u~Dq^F28S6 ze52*d+A3zv8~;oKtAEnWdoi(M?4JpKUS-Y(|K8$&K8yEQEK^*f{>(6UC4($KMLd^a ztI>Zi_z;yR-b##Oj7{2x=ov7W z;}*vsq4KP!0pmEfar_C&zY9KdJl63~u>5om{wW-TIsQD=zaMV0? zj=w_n4~Ks#$6$`X*7CE=^MJ2%T;%w~f!Lp5P6ym6y2S8*8c z(!0}mQq9;vEmg3X>9sj$^Cr(Q5fVoeHeQx!7Htdv8PvMn4^JLs{U&5SFMc9 zuRQ2(^bpGfZ?=5NqXWOg>AACqykP7n-Ue<}`A+a-mM_O>1AnRfyTQ*{ejs+ftbFPR zzOHu47~iro#?HT}%>Tgu(Dp0me`Wa4`K@e-l}QkfWkc1rJ}`bORXfXAzsBZW@J~}c z)4&>I*;X)dT;$}JTm7l|@OxDMXfSzM`prHH{(|!Bz*k$o?BB|+Q$G62zNP%j!M7@( zc4eBk55_*jp9P+&df5LA z!ndL`_zy7ScfW%+=v?K08NT{95Ueqo*#f@M${5^hak3fyx)`H5%5`#0!Q>_U88DUz z4^sRn{LzY+f)7%RzJRe9dBKwviyrb)q=zvYd^`M86pJ3lX!yNg#%St<=!)e3!;^o= zlYd09*iU{m@-kk0Yq0p|PoB)56{BBroXdgoy?cXy48P37#IxaJbCMX1p9%9kess(b$u;}kEw#j__!-rs`*Mf>x^@?kS5+L04c@TDEACp9LlvggRw>IkL(<- zm`@pt;qxii;tb}q-&mL@GcJ)wm%$=GO|i%`E|XX3Q?APyjQ?be28*5Z6^oq<6z9PU z6<329Z{+j#I38r|k^j3DZ%4kzju9l!`P%U|f_uI3u2WnOf4w(HS1YDI*x=3AM#W60i{r5*zZ}~y z*N@CxOJB}5>6r0Mba9TY(frQ!`14|$<@Z}6`Oet>0RKn)&GA^|_d_E-es<%M>#-4k zYdl8T&qn<1@p$F8wj+LDJa+j_?TEiS_CxSt%$MQ0bE2@+-*gtv4n*7dRzt^ipFI}79-)ZxHC9U5*G>>oZ7nvt7KE~bGeJ}gVaB(ZS`{naK zb`Q+2jP8W>XWIK=KF?~2?}~lAF1|PR@jAUj_ObDtQFybguxYdu{TLA5#1hD(mj=GNBjShUzTGre9|%u zL0LTPcTJh9pYFrujnOa!b6jA`Kax9y+AQ0@lH=H_uwOZ@i3+*Wl=1u*Tx+OcvdG-S zHi=F6va#M}|L5zId@T3lqT=+;gyZR(ay9e@Hqj?OaQYg-o?jB=COM9diqrQwIG(;E z$T8-(eGi5w zXYLDDI3Yfr+!FSFenPpveaML&t|$)Qfl+ARKI9VOgHIyIx!EU@%YQ<- zsmRH^X_5ID#CcUzv@XHyUk_zdz|M;s(-!JfYT{>D^uohvF%-x>YohV~#Q zG2@DpI~9ibrq))>;4^hUSo$5yrtv4|j()$xw?p@`x#IMl1H;pI;)l?;vx&Zgv`)rx z0oWVIh1J|owS9vIe4N^a=g@uKCTJ)`bJhW-WTDy;`Chs!_znC9_USM zqK|7Hkv^B#gijg6ddmLVV)I}0u_bP{pQb(V(BJS+#_5Wa`ymX$S`Ni8`^w{TzuLF& z$tJ$Yu@$pv&Hx3I z=F;yM1!*z*n)wD^>;K|?vXhUTa`cqEluz>eFGu$EN@ucS~UM!L54wvyr=ToSA)`hzN50izN2#dsE@ywvX{1N(PQ3uNPFIQm^-yM$d51LgwejY zc9*~6s$Rp?K7L6`l#-K zpma9px4e&a?wT!s>RI#1yFE3V`9k>1Ir9$AqxbIZJ??>AAZ=^{Ub}66^Bc#@T-Wg3 z%1dfqyY0+zZyeA2F?omX-uHxmOrD1}j(z<$KEq3nd;PY0){O97T+F}X`Aa1pOneX% zYugS)upZHPd@3lM zywAoX?U(U+NEe{l8g!YZ2R_~?vV2-r2%4!)~B{JgRh%-_R=X=ESuAO(}8P^o^|y3 zv!`6Kd^z+jLO&(gQcIaad-hLvNdB@3iLY+EyjkL-ww%&D5X>m0|J=T?zPNQlQtBwo zSQw<{G#_Z*KC#S;tY3C5+!LHqYLl3~+<3~|Mf}^5r!?;&mT!Fl{4AIAZ`WD&uyIXY z(9*$?N-aF8&dA9#aDn+g?kPCXC&=FD1ETs6s1=fxvbd-&SgMv!O@e-kgR+dAnU>vj zX}P-GneG!<58OI9T37~BP@i6obqgvueIA4!*$&K|n>PyCRgsoo9z8BRYMRxBka&*g z&G3vUI?Po;IHFFU1PO;)OXabUupsMBkX{L#sNqaMofkrQm3(ua9^SxMoL;GktNFf0 z&>@rmAdHgB<$xUFyBwR8&{9E_(sj)X?{t~hz9bV{gb%t*S+iY9?l!xqe^83yM`3wp z2&Bm(kkvCYR@Y+^nI^PI4GqsuHJ{!vdT6*bIlrZ0Q05rPT(r<-HWR9-R)kP;t_O?N zPQf*GLXLt1?G#HS^TRw*L(j_Nl*XfqI=y#5)8r8y>|oPZ9>;Ru;d5i=NPOCrjPfE| zjifz~xy+ru;GoPGT;>%~rfGbqX(`7cw9v!$GJ#vTbbRVUr&Nc}I7mW7=k}vY zINdXHeqJP`hdM)(5jXTplW{}K%oFQ|C|M(Q(6zm2wx8}zzGt8fXHUGFo6HiEi?z<> zlb3i8M9Y##u1vubK;B4B!GCcIk`Y(%rOCL0uk%uzd7`9Oa0?B8-^(bt}bx5O@BTQFT5!=5WhKf=(LR>ipA=3tmP~(G_LTWXfLnO zp-QLbFKpnCs)LSLfTzKcpFE%ZNn^*Wh=9d)k{vMxBhoUDf(*g5PI%2B)G2p}=Z&`| z)?bIpemUCz9~&BL^Px<0h#+OJRN`zeCpyPU#JW62O|ev#J37weuOk=`Wx22Dh2gq# z-7#2pQ=c7{-3_73Vmg#FBHps!#e6Jv)xfq`u`*BGCnFJSJ&HFcJS5d~#@Zb>Ow1bp zYdmMGn5De&;++tiQDgmgD9%IER=9hH{6Z@qod%yj=CY4m*d_UGjh8 zH%~MrWEuKfBAC5g429Jl64-0X-x9d&Zz&_e&R$-fSIBl@$lP6CZk6$*(T1LmuD-sW z4aE4uLNAF*#^tMvLL&ji@Ro8wF)lZpoHgz*T?-C2DV!xixmJ%kZ%~}86T)FfZ#w3T zQH`@t9YwsYWUfR|uF=UtDS6SZWPV|?_a-7&C9**n#r*nO@K+akDhO+j85Ak&87TZ* z563J@gfZE_f;?r)AkO_k*f?s|m?;}i*)*D{VJ8pbC;r&sGp`D*$;Tu|OkSPrUUkZ} zqsERsW~|hkS*73InM*TB1t&6-GgDHDv7*o>8UaPa3Js1uV{M!xL6`=IOHs4vS0qHLkAlIh zbVUYbwr-&18tyAtbo}czzD~>-W}rhwU0FX@gN&(`)S`W`Xzrq(_D<8xC0ZnYkBM0- zq0U~a-%1G`0+?7+?3E}zA-aA2m5-`|>17ScmJubfHSO(RDo&9DCQL3&s@rTj-6l=fFXN`_zW#Caal{+^xB zx4UGHgZz@`l{4wloP3))hl+{a|Fn{=f7){5Hj^IDlP~s?GI|uLI%%K z8CSve-fvgnA|Bro!_Y^@=n5E8pwAIEgSl5->-m|JgeRO0{aC|vId6q^WygVM82uyQQyoso z7&+Z|o&YZ~JPXV}NGkI;;7+4Y1z%wFGr-*YSDt?GC59gYUv8Lk@?5a$e+T$q98O4^ z?=w6Ryw`Yu^1Pn%e-MmLivI$B*5R-O{+;1>(q@v%a}gN(2oAr%r)2mwVDuJxVkVfo z)KyZ5BV_z39s7l}z3A!796k6c^j4!cgS{OVg1KR!{O5!FtY1ptEmm&|{0`&!B$$5J zdhx;V1IDu*{2}9E?8$#y$|H5%Yr6deyvKNc4gRX*37PN0A3A!-bQNMBEld6KzD32< zncz;f;$2{TL-BRsldX;PTVgiTi?u!Bec(Ch+(DBzh9kh(L2X6565U2W35*@Q4HNjh z^7F5x>}65>b})JfPw-vv`;2}k_GcRe``@#1a4}FxtM#>{Pe8YIY z5B@jfSp@#E>4V)8zcij-f$?K)qwxI6@J?oW=24Z&+?Zs|k$uo|B(a<7j2)7boE(0X z1WE5p=#V_w=wrdnRxf%c@ek2I(E>itFm_7fD=HH^B-a@IYB2M<){7mIZ#8|eLvn}l z+z!6NctrmDjVA@Z)p))HW^Ah*+L*k@^uZ3v2aHGR-5cZiSHofld`WamFeZ|e$%Exc zVms9t+ei$IoY5r~inj3=ERC$iN=Kj6Xwz*wc!J|e=D>|62Om!1Hxk-Sj?@C9qg(21 z;~x)R9^+|`$z=YKdd2ps4OaF{Fn%vF9aQGKjE*j;_Zt5j!5=g_eUZA|=zG8)HTjM~EJ-th$g0G;}@?Tod|48v~%pAy3@4$C~6nIFUSy_U^G$A2RHMu%npp2Q1L zeFS$o9R3X49m5wIo(6qm3~x33b?Dp6n3lS^Q~v4EaJy!6h92l zB{6)d;XgxvPYly%!Y^x(#I8|19(~Taq~V$1Um0Em{*7Vul(o>WmE28qn0CotTcr!G zDX%Yyu`&K}F`mgWe0+=_-&Q&3lbCN9d&>2R(giOyEOlZ3s9x-^SoFlt6=R14Hjj8N zj$y{Q(y^z+vQmtF609AHOW@lLiyUko@!TE5_r&?wP26^ov~ zD6g#veA}<53D%Sd|IskxPS#XUmuncsS?I%J7@t=lwxKp);>WxZCgw=!{#X3+^{e|H%GDr3>C>xD$-eD_!ur4etcw z^GfHOyw31$@XdxF27k!#W8ja)@W%~54}Fi}0KC_*=>N4C{)XW#(7$6?>Sc_m4)l5Q zDZ^6lPYsLw-x(J9e=sca50r6=IZEYFHbvh>nDL?*IjNH2MsR~+IrhQ8YH4lv_Lc?2_#6l0SV<0!(6BgOYY zhcCiA4L=OsUxx(X>seEotK|{X)NL_*hhcms^-nSUNyGR|iaNBcVEjOFC-|Wl{;FZ> zmuoiV5uI6I6jLtsgkjNbpW(;A&%`ieQ~9M|{$d!l<$6cy=%3EUFyl?>TcFn(rrtEy z07}0bJjyWjrjId}X zTaRM7tUPMt`zt7!p9|CY^1LehM|2(*I&%GQtDxEDf1%H}wN>yEyPgruq52d6DZ|t+ z_Y;*~2PRK3y2!0O#UsJwDaJmcn_e%8oCd=p2R)T8awZuTIgN%z4&{|c~d z{7x|XM|N0b_<86{Vm4W7Sm?`R_E}+AbZd**3b|@G(PvG}Zfgw-y*FmVe#1MVZ;sh> zi(#P;SX+RyS5mJPX_s85X~@V0zPUVzrhm_R zO6=daLGtw9)!?P1LARXa+0j3Gj`;uHPHzGsNXPPFKGOr=A9Q&C8v|8v(sB>SH;(-5 ztKef@dr7^WCR%cL23Faeh2PZwee%ndK`F4;N{ruti zu7MEeyMgqf_*iEL@!dmO+Tsr{?+yrpn_b3eIeWWsO&Yc10dTC|By-du<$cD=G;`({ zy__#EZwOfGl79RlpSZleB;&s2^?TgPG;`({-OE=aAL+LmK3?8$z#`9%)F0?penUiu z&-*`6q)fBR8GQ@$=-ptE$2D3ckL!ZCyvps&-AQQvFnJOyI?h+MgL+@?(x zxFyWT&yz3pa(&_J4abzrfPz|nzXWZ9?C|xDBps7CwVCv0J|a)-EqT~E9VF$?}BHk2lLYatXBl7@z3Gp>2!ncO}Hf`G|fc zK9Yxi>SIaHc1-W2>|1?`v*;&>oD+)l>!`gXdw~snxZYQJMb0@sF?plJ=fBR!A1bf2 zt78N2Z(Gj`(sZZq)Ds$~O`Y1**!a3qsZqA_+V|AP#uHCGu~eEmt!c)q-{X7yiUFz3 zjkfV@pgCgkKv0_5#zkp|UcixA+@~79!hShzNb*?trw!gZ=Q8NaV9`r<(VhR2U39&+ zi_Vqe3M{xZ;WpGcN;i~i6K;Fkq4w5^zmHc|`H39Nc5o8#YzG^GT@K2;b$NPYQ;?RC z`_Z(#&o0fyesE8DN8VRuLD-+(c;a-8g&q7`d57NTRf^on=ato|6nsH?mGDtp*p$%i zb8dg0+qZYEtObGY+q+)ZN4Ib9+LWWqYIA+o;T3`l4)d!myrbyw`GV_$9F>J1G&3`b z!w)Lu+DffpC4^5aVU{VOie@Uv-Q=K*dhn|Jc|hglxk5-h5Y+N+#QgCh(wWL(XDWxCsT?lWwr*d6??drMBIFN60rIQ&&QHZ|ViuYpHRs^y(y zL7pi!`G-a@ntekwYXYO%qauH%=h0_4W8fT@K2@e8lC;G7j~v8{Ysn<3a^z}>w2|j`Xa_=`hpP< zg4F!H{3oBe_ee?Q6Y6xj0+X17mhVbgjwZ74M8Og*l)S!ZiFpj@b#<1QFFB2tSU}FD z(=CBZ2G=)P;tX=GnQ4h7H0gn6OW>5j^(~e-OLFF0;%v%%V38%x5w<0kI9FP`)Dmxn z?eyhGkxzRr!O}kn=UZwUsT;#Zmbwhak0qY4)J|HyB(cv@my>sI;(1G5fg0zhnw=@n z7%o*~!0!(-w)24P7_YaE4abr5uB@wOiKtr9q5`V( zAyZAoLnfeEuou8wQ}Iy7a`22`Q9(6gcB%M|X?XOb`NW%;^1tiY5=by8;j8cTFZqSq3uB(d2NtEuOi z0ZXhQ@$Wk=Axr-Cw^-sWQs#C`Tp)?NEU{J+_gI2Uzr_6AmRK)|y_V<^X^)6O!Vd;i zsRkJlrT<;i6+WG-(Dd-&=;!l^eq8NX6SGOMH`rzpCvTQAOprh=bF`!}Dn4%MQOG!t z^g0|tT)tO2#PG$?%e8LR67@kz7^T~DTgUKqje4FV>=bh10U>{^?4`N8mHTF@u4p0a zAr+KxyI1qcQ0A6nL})&l0J~kxmGoD5t;g8fc{!)^(yLbqVQTR7^6i3x#>ptuyF z>1=IxXHZ-wLW_F=Qp@E7T+ipsv0%4sj%49T7wA- z_bYo1+R!r&(*wSnSE#1VCKS~ojNs`IdQ&Irv@|U&vEM1sF@pF6N@#t zO5qo-0&$DFK$=y9_l8B2kBbz3QBVge%yru0ABFqHXjKXMF1!E_wLLnNdaAyo(uQg^ zPW7QBQPKIS!`a%`FF7k1ip8tGQ>cCY8^8>_s-In1I~O=s*zc-cl}SWGr8eGW1wVWE(I?a9b_*sGcbG+i&mC^>{5^TV3P2xt9K{ zzE!MUtGyZ2O8kpj?M-K@T6!~azUzfr?M*kNYjx1LUanO$yI!s>m3z4s(^lWwpuJYP zR28hn!qq2ePbD9&ZQ$|Quc&Qm(X;S^>#16?(>@cexW@5}gKoZEtJpbHEw&8yyGzen zY#Hn?IettT>~C-w!&FZk?=ZjqhJ0m`!(zgZG&(#P)$d;J@D%iE>UDT3{6D&`maQT| z?eSuc8ytO_;9DG?E_L1R@Co33cRG9`Wq*2?!>?ngExp^}ChE;Rul-*;L*yj)1c{It zUvEIjPlzEua?^k~_mD^B+op@!lPLSoI*HWIWF`oe;}?!_iVz$;wG3yKVRIRlr>NTU z6jj?IEq4;;!P_d*6X!EG$V^-8wduL`G!k9XJ3)v&_0YH*#m|iE;8p8FEPh7F;{lI4 z26!h+2XPc1XKg}qbw+wA2;tHr72a^HfW!=W;K3cmw!cFth7*DXwJf=VBQj*GqHqS% z_n-t}t9sE5R3vV~{fi$u+ex z-k~lqLM=rsRD@Jsr>dpBz+q*9O=<2r4hzOHSceY_$Bl5Z>(i>^h^SavYCO`4p`i#p zDwagb$f)_se6(q$iBZ-ZO^hy=3xZNDt)5BkW2APeT5T4cCGj?+V^@G71)!wVs*zss+>4^+T=#BP;i)%hf@Ak?XHdA zU)4RfYd7`s=KB7QHJv@HCwH%38-$10Xp8O38*N#8${TIz+g5!uyW65G`xim5^!0ak zcC7+4QX&rM`jYsF1q*;P+#pAd3uRX+NtRPd_HO9z+0fm8ahcM8Asay3U0U8yUoIN8 zAS&In@-6FD%f?}(b@XsQd9!R1HqrfSHgvUj_BjGS40NeTjt>XztDO|G6}CELD{OxW zR0w(EFAQ~yW-D(6?%5EmZSUiC@S8eY`@7lc$*bwv>e#xnrw1Z6wCaoC*|FN$x~ezm zV|yz$lnt!%N@1=NT6@;Fc5UwNZ)Gj)V~=V3#cR7)uMvSA{XOee8uOB~e$%dy?!-a*1dXt``T7{5&fVorRybd zdt`A%m@D8G(5k-fw<2)WTGTY1y{`kp|7fQtfsfpkXC z#(q=rv?XVA(bvj$?dV=UMcFLey6DWgr?;LpZ|<_Q&R%fNyw;^^Jhe=R?p1vi8+c-Z%<#VoY!Oij-H+iy1N1# zvIC*~0THyW*3Gu9-RpWcZs=<5?WgFR?$xqkw{_i0*OhAeO>|w*+qGd`>-vpr*NRSk z8`s8m^(xbv9&W;QuW#?@@4l$3uT?G$Td8!ToaqYE8`cJH8?*A`B*CDnrPEd+ynTHq z9w24tZ5=YcM(!IQW`l8Sdmr_#!#QyUHY=aDV9`9WeP2Mox2kb4L96UTo_eB~q}6fs ztXkFA_Vn_KYP?pw`C>6CPD2lOukQ>ll8}K^*45D;Y@qMD*LP8(uNPg^km}HW zzR=#;(BHGEgCVH{&b92s>C&=IQbJ7Ky@A2|mLA69+HM)f{cl~5LR8Oo>y4ayPrxL| zKoY&}C9Pv5cpp3atg{*ezNTXK4#ru3y9|?#HSM%g8nI3r!60m1wNYAvgNjyO6jK4C zzfs4w=q|&K=~KYQG%V^AZ|zvy)7KTuTRwNm($>Wr*RAZ5>iRmn zJ9Ui3cg17;bzN`m!B_$|1nMociUAl7l=1iCrW7{t__{mzD?aM-z?(VZTO*cCNYsz?aV7H29>o=wMYTd$2wW)bS8Y= zojS++VzG(v^^2F4=1!ej(kqkFaqIB)wZ{?d<09~eE|!>eU426C-FV9DPG|(lB^9SW zS*=g81f!z!IGx{0$E_|Mcjob><5sQjIj*mNLw862am03LXZa*!m5dcJ?s2SWaz^wj z5fr5ZAC;lCkI78dI9WUiV$h1mty!ribYp$+ROIY`aTmk$P)@RR!5Q<;UbJBDJX}wP zb9uhpxPD__7wfgok1`fp*LQ7V#ki;+P4LS0%`%g=u03&jyH2n&y`dKisXBF_^Xu`_ z?HH}UYn^n&MFG?91#Y#)Exa>2AC+k!=oqwq5=Mdk*$_wxx!!V}H)vItp0g=py-ppQ z=v%aPJ_*)X4XvGhJ*`ffsK@1qxQmQN*1Qc&y3yr~`7+HMbOE9BTWs8!U7T%`SM`=W(j7x>T;eU6N~^!HrQ>Mp$2 zt&C5nU7I^}P%>BPJg%K6Q`dUTJva=9E$}X8$silHy1tRA#rj|77ZIWtx#DhgtBqB4 zFTVu3`O9@E%cgpXuC~s5blnbGsjRoFqkC017llqi);C!|^@{6w=6t5z&A2inl4(%_ zkMzpLc@%-f*+a@~Sl6y|5LbTUoN`@&Uvgo`3M~H1(kqKbU)Khiv0MGJDeM>M5}@;B_P+`F0pgDTf|w5c7%3n8 z8sYaq`5>Jur}#^b+cXEI2kA?`-aq#|q`7}sK1g#1wtSG*n{}Q-nxFrAGg3$?n8iNF zNP7)0{($V-O#L31T_@S|ubzs&UDJkz86?$?b*xD<9 zM206jdLH|R%?{_D1TS(}_Oyk|9ZuZ>?sT}~GBA3meX77)3@--LPOXdj!W$h$}vO!0kpag4a4M@355TMz!p<;Hw;#_qfa6d7)Q8OMJxP1Uk!J zc-7%7@KX*4*MR?z@pORy!|*ivgE1!jsn>$dZ!;%@k9PEm`@z1y81M3)I@Je#ld~O8 ze;$n8g&r&f(;mUOyTPj+&SLMR`C)E9c)-!~+@4P2XTqQ92V-BAPkWR2oZ?>ammChi z1^$M^T9>sYw}dwMw)`4wZOOd|ZgBjGFM{7-WuFG)ecm`lNW$ViyYZ6 zD0{sH%Y#noeGcdD1e^XT(an55eIfl+;dmsrM5fL#{goNxaPnF3WQSAx!T6KN&*s4M z4L=WFW*Gf5D;*Xe$k5-yFR=kKml$pYU+HjeBlv?3S6l%`SLHu|9p^cm_$k=>I@boq z&xA+!5z>Cu=XU5ezEW=in++3;-wLx~{%Ww|9r_| zdE_NO$>HR~;3kI?_23qVWlhdghsc+`=6SPQ{)gc8jxJ*&|5k^y@aErPbZn3}f1q@b zzsb?Vd%>SHp6`Hn8=e9FmczNZVEj+&&7A;#-eGx9cqKXsUE-ruqN`xpzgXGeuw3s{ z;!i@?rvhy4$UXwy{6XT}RGR%0zXP|KoV&p0+p@o^(%O=I9E=~UKC8etnEb_H>??G+ zW~uyVhqL>@<`4OQ0)NlZlb;7$yCfb!4Em&@r2hm#AyHrCR&fXz259t0ojc+&K3^@$Ek{EX`J z3=ai&8U8f*LcvdA0K;&Ap` z;3W>H?gg(f`uD;8hK~aeIGnEsU+J*CRAtC@hS7h>?G7iu4!+yy^yiS>4u|-{5NmI4 z3iy|fo@Fc#`FDpiQ~Bv*?aDj`u61;Iw^`BpF-cz)Cm8*;;OSNtTNP(HoL>cAX!u#M zjq%KrVBe2-g10!HY&ZB))<60}j^g$BrpL4^qEp82=_}&@N-w~_$H|fF@!~^_4`241 zj-D(*x3ORGk6`9a>36|$c=__XO)=-7GKPng>ym%DqJ4|Sa$T}#C6aSEnb@86&I+S8E8_N8Nm1X_}_KfPq52L-kaha5j=;I^)zh;KsehDTw4@gw?M5Bz-4VLld&fhss@xrgH$M?U@kihPscIk;Z&1%G(V_!`95L|S~w zAD(X>1i{TNW9%Z%4Sa_4N%N6BDR%)M-zK2!i7q}Zzz(0s*d8RWm*RhhCi0l~BYB&^ zz6`Jize|XY{_uHMK=2q?+s4-zKK}4|%=Phl8`qL<hfDAqy1-1e&?Cnh35C49Y5p5X>3E|Xv=S#x9Bu^ zgdjS2uN*i=Sl>S&nbYM9-#R83J+qA)e76KUng)VqzXy%?+&!xAo!rhl0Jj`<@vbnK z&O0F+uK7YR{+g$PNwY5v*KRKb!K{6}=kWmVedC>wGbRM#wx9fI^VQJjQz!3>ym

p#Kc;4F(WSjN`scj$r#pb3X|{X9sU^;4jh{hjE=!x*4*cnr z^x<8I@-9Ppm*w;Uue}f|7q9 z;nL33sq{^D)*kwUD;4^vAn(wm-|9rxmTlS>Yw6>lX`8e4A==Thy_LQ?)%6uNr~|7F zX9T<-FZYJY=w7$&Y2NpUY;0Y?=K4NSY%cw${f@4?h0o^+pX5uQNE_^(lFy57yS4{e z`m*TT1g@8Um-13ZY$WBjd^ngcZ4_T!dgu2p5kI{;)c1~t+c~S>+;-sMfy;vI%zfJq zNI%bLW)gemzyay|rd#o~j&i%Vbnq@l{Ap>&_b%~1#k&lzq>toXrqV}s^ijdyK^f_O zkgf&MRrTZjsiGtOv2W=|ct`5n$8Pre?z%M?Df;euDyXN;4I*Fk9e_Rn4S!!MdV8Il zu<0x6`T+0Z^!~&deH*Zsjs?+2)94nb{dd^jw_)bKf#9#O`>vO>J8zjgTW8S2?uT_7 zBK^)*d;g<$P{uoWCh$tzd+8{vp`7So zH}Io=lPow$%jLv1nkjdz3}({6De}d2co*MeGO6qxoc}EBLH16*zUiPW$$!?1u5<7g zc}rwii1vQwvvLb5bZ>>sei+s%a?Ou~kMZ@xlrxv!Ca+Z;vi#x*9x9}&NQGxv+gaJe zvot$*1ld>eOMxXzeqe>WRa$PUK%N=CAjln0-W2z?K8Lf8Md^hYE*9Ahnwv(+FV+QG zUw4+o`Fy^mt>8DCRMe1r9sP2;D=C(@Cddt@sHT$zTTLtj!4#{B8wbIZqAPo<;5vtA z39fgzS+G2>%DOvSa7p)*2Vpk1kec1gF>|L2bjHgq5{ItJG>XYlr?LYY9Jr61=ZkjFY$?nTcP^$7CvXf34am zD|cCwZre%jB7r7(lS)oBI^k8K)Q74Vt@GIg9KD&3#%Ki|hu~Ke@auKLh#A zX3NhCt}e=M(A@nf@_V!EZYgTE{E{@>Z22JGeNV}?_RHWW8yx;Bzc&)&9sU}4>Hw46ByMV75OtA|F_{krrF`gz{k%m%5KoyccpBLqkmuc7diX`@ZC!s zev)=~FL(II=s9bJ!%u^!w>kV%DZ56mg{BDmF#8G@g2F|7;eKNIR6nC4)h*+J-Jm(y z4Vu1ZxTJEr8+3|ZBa)bdmY1h2M-$n2qF{*@N=_+SVjctZf;vmgmz+jREFfoKx+PAR zoF+>!17)wCX^AB$ySv#EIAt)U#S+{_33t!8#MzX2{~}AABWz17ajvv>sU_YD+k)lw ziTezr7nZ<&cqXz+DXe7C-zzDa`Ns;Ja4HhkiRh1>`ZyOTzX>e z^y7oftw}R?c%B$N{aN9}_cDn=oWcF&j!8dl(lR5y(XYp zuou8wli8cG96W>f0jowm&>u4mk9;&IyFn}d&ANgKBpBmeizy^r$kmRK_g%}@(ClASN`W@!PPJ$nVU%n-hU`oeN@f2gx+0b??b9e$&>!C^exuiAwbg563}z{_(#bgN4NC(r%RE)W)# zUI3rZ1Y&p%3aCPZk(-A4{hurT}!>U?J{Z302bf@W?Tq)-9 z{F|&4o|Au*TaBw|fBsEwT<0~qRZzva&QDYcb=9l^`A?~YYAD26a2R!R)0~8A#cn;X zMz`EF*G7knPPb{QTQyyhU#m^5mM%CC=aB28{1amXN5y~g-^?@)L90p)8WIcvJ5np+PdQ{R~Lp2YfQI)N#-4I+q|BTag2wt6=*68Tc!PDHO;tU3%eSj7YL-y!ThhmskE2WFPiQ(n6U7W zvJa&L=oyFU0pHm}>4Mxe*V#icv+wMon7OLLsWTKahYOuLvSl^j?$nVztGQ_nu8GB= zxJu#ot^#q3(SbB;sCe&UlaGrOeqT@rDlB%|Vx+=DVzjC%`7Zn!DJ;;B%BIb#r&OBk z+4QQ{Vs)>&!`Y&2jg|eIRZkU)vNcvVZdSc;WszMHwJe3XX?GPDd3bkGw#GX0Jw@3X z>+pR=*&6Hc?xJjsb$E}{fK@a%ey_tUqPg)86=mOuZ0D>FAEve3Fq{B=u1`#q44(C| z@lf@GI@oBRt`0S=YeDV;cxxv6f%svhaOxsLv< zzDulKr@a{zdB`xR)82GLx{lrq7rI`k)82GLx(+LQr>j#lyI!sYjcFt6XEpyY{b$FfF za+>q=I!uX^xw6Mn?+N1_W-1@@*d&LKgZ|HMPNh~{q^eN~wx7XpR@IQB5k;heo zy5q$hH#j=eRk-jLho?(jw>x|Sc+{N^pGeu~?{fHc47Jv~9d4rD8hQIt5Y){OImtcz z9#3dml2Roe4iM)a@&oy{>7wo=%6<+zQ*-T zruba5qf;(7t;J#On)wb(*GyaFFkO>xU*a%bQ}b5$6KNP-Q+!98qiff6I*i%#?Q66@ ziVr!hPKI^A!XwCKdXe@V(JTg2U3Y|25bWmB5M8~Chv-@}P;_kzQMTq*9Gzn5S6G}* z3dX}Bd;qaq1##RbubdzH4cy&j)Vxd3gmrzZm9OS~l8kc2c0n+a4F*BTlI5fvD>Nqt zO9O8dwFP1AdOFe_;muTZEjF*`BbPJokd&j)1#;B?c4~OGQ}ycBSZ0^r@;x~|TuJ7QqQpyja-{U+@OMbw;d`?F)%K)UQhJhS zpy@UIPoIt#g-0|~)fXk}J<_3x3$rr!y&E>>zGy;hJ{*Ia6yL=%j@{==_l43(H$=EV zpgU)2-W=A8`cYH{-yEg0vV-ZAq2G|albU^+Q3eNjIIbRb;!pKG-X%{*88@Gc!dY}% zmdG;9=L&OTeA1ndk@ssuS&&?Gjk
+f;m}NT{rl%=bdT{w<*1e@9t&zE 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 z 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 !FMVqraAXIc&B1wn4@u#c;-B6={e%hpE+39 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�fO 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

G{5YNCXe@8Y&rKg{Eu@VS!WYxJkQF%VH74 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�_dPBYhSn?_0lHVK2nEU*Xxue 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

cdFF`DnD@Eo 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

5|@aHOQi4OLL8^MxDdOk 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 hiQa5gus$ud?*KD)2s~e+^9A82>B- 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 literal 0 HcmV?d00001 diff --git a/wii/libogc/libs/wii/libwiikeyboard.a b/wii/libogc/libs/wii/libwiikeyboard.a new file mode 100644 index 0000000000000000000000000000000000000000..368d574291bf6f791b9db22cab724a3452b14661 GIT binary patch literal 132906 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

uGtKuN@^99@>FFjnR0vMhh7RT$-D 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%0Adh`o{-IO~BSMF&$RoLt7JP zkK=b56LV#i{|-_lOhm>_Tq8x^tq5<>^$NZzpy|JYZ;>Ihvp^&${fVG<1CUrsh-`S z_h+vz5UHN)K>u6zDni&kDJgq3W@M`8dXUd#uafw?ppVX8jhUJ1xdAvTdzHlB1J24` zDDjQJ3)LxEs^=z%FOn*xM!-?So}e9v^;5G)15_am>?s}v!ED3tJMd-)?sMRN2OecHC^c)J7daNwN|{DA}Sa^T$#yvKn*bl|-X{E-9ibKw0BJmkO!9Qb1g zKIp)Q9C+A)Nbk1!9&zBK4t$Kzi#dXBN0iG+HBUxv;$F4+O~={ah#SY!FJIpLT9WRO z?-BAnQocvYcdvYpRvB+(1^k<)WRAl08}V~lJ4mJq)KS>Nj<`*8P6qz)ESxdkQJ90N zaWX}W!ju~EbCt11&0wC;o9;38aXGmPs$#R z5KWzN?x^Ujmbp$$1*p>jDe9-|3~UDW&$~s4r8)NHWfXaIFhLm)gq0LM>P%` z>fd1gG1&5_EmVv!W9s8t05W3g<0_?(nF56md;R?H+!&Si$`-T=4LXUkq zR*gFF#424IK;NSpL;8qv)Le8P<0)Z4i@yY~61j0V%J+@H5b>{xd!X~* z)WsUZ_#q3%Wd16cVITvJyiZ=RW6~M!4g8$dpwniulLKGD9 zN{D-%5XU+LE5NAyJpS;kVeYhR@|scF#TqhUVds(cIYOC7wm08cWqt>U-WoYs%iUzR zMn#8|yB9&u9#J!DFQJsX*_Ml3!y_988?_4}m6lF-QhaKk7EhPjYF{J8e_;zqhJa`D zjS3@IxJiFfB&~k-7!5|gVNn${178%V0B)Df&;%oIQqLe#%0YR)=9C$Bx;K9F`@0EReh={8HCt$^G>?g{YnI z3TcIQ1#B?kEo;xQ%dzd6aGF$t|Ir{zE)Ae$$(%-z$|~D}NIqjeqJ}^2h86u{svJ5p@`{jr=7KhTB*yD)@RGK%=>5h1O&uNEyqi z$+yC>HPHuJ18AI|GFohAR%|1)oa%IoyXIy#!DMqc$^HkL+|MRg4`zPOmhZ%j?Du3? z{E&)IZ0VqDlTDzK7z@Ur!(-xbtq}Vin}up=QM)$727H_)k8H>2r7Rmp7t@=8#$5~W zgVrE)lYmVIE3piu_6cq?)D3|6j4Ys)C*&jLC}OId!?dd~u!pDH*OhN*6$TuXdd%EY zyGT|&_(z{)Nj?7pe--?9os8cGq{%HXKBVK-mMCgYhvqMh zHWMDAOoHvCmnjg;j7aRZCjAqVori5So802U+9F$-MAFFRomD36($tc#lmCvk` zNDOaxE4BZ7lI6Ty!v_T=!||qJDlDE~cxK_sQWlF7RAJ#+mt$90ijW1=K1OPnTE@fk`jhIiDD342s9V&ctANjje*!R-VAA zW?p}Fz+dR*n-WF9oxQJdfYOxXU7v#~Axge{Qrl;mY_9;bmq)@c>SHW9BS0-7I z=LMqdl;g>A6VGL${10q#ke{VQ(1Bz@(yPKz{qBiqvtoaAw11)W%>GL6@2~E+XoRc# zEgSC5sr|O+I zkKb=Tj`BUZ|GUuQjWs9Sn|-~&dV=MM7r>7Xah{~NES}A9!jdPyE+`|tl!$%vAeOWv%b8sZhPz2*7o|g-iF4l@}qcp z*6|6-Q2Ey8`aWgnR?MoH;Ut`>WWTj_@9q9q_)pqc8hSEYG}l*(E#88~x2$qDuHb

}{-QAB=y7F+JU=tc68aidJ$s^ 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�||I5nmv^%faR+(Mt!F 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 z zd(^S3zf)hR&Vz>l@4sYi|%a9WkH7|)_b$KDybl&m?C;BHi z?m7)N&RnoyZnRXt$GCj?f~XwfqccyLK4Ypr?CEzilaJ$pd#!D*OXmBRMzR*GXTI59 z<(AF7mEqC_p*rJnUqgD`)+emn66Ws@%)i~gHc;1a{G-=i{Utuo&qt|#QO`Ti4Ci8( z`PgA`V%Vq))YT=OrCzm?yg|=`6|D=G)%vjC>vofFE{EwlRm*vCQdNwyd2EbLexP8jR^xN1 zc7AwY05%uh7TO=YJpp!CJr;P}_k{J?-0O07XYU#JxvagJ*Js?2eq-8Asr$k=r+hy7 zmZVz~hfw9p;~)J4Z9ejgpa1NYpZ?^>FaPL=FTMD}57=xNc0R}eG!4Xyem`L?c-*(( z_5?=lvA`;rsHX|;u>$FEFL`BadF7p}3|LT$R9oYCb%28HtE;>3W z|t0dTtcShX@%KS2Y{DHDJZ&*3L%H=*# zmK4`Al+)a;%Gr!D<;*eVtTE;6F=c$K#(ltk#4RcN&IeqS7~3a~*^Y06x({qGa7$|c z=$LZhm~zpW@}x24k}>7UW6IvK&-jh{o(an3WArP=ls)58`CB<=`%IMMK1lGVIyzFG zF6Eu*4EA^JnC&Zc*@|L2`+x12?eP!wiM=gjwqG-*yj#k7u*dwlQ_4F~X8wFr%JnES ze}1UTW;M#Jf^!KU$56(90| zFO&0~ddT*(#+1()Q(iTuEMH!=pNBo?&-)1#-Gc+o6;-3& zGvT*c`8C$jD_M0`EF!g{(igi%DY?7oYo5+Vybc!qWBvV9`UG^ zxJSNXa%_;`@_Js+w- z!+8%3{eUhQ=gfJSJH|QlBgSbiwJ*6tTNJ-B%I;KoWFzQjK_oykG$6-cYLeDzSoLP^5>jC zs{(8u02ksvSUunabuu=hgu2Kfj4$4AMe$$2sF$4lCGaxM_Lbl!&HVK$qgmv?2cxg4 zAN~p$YeI4=zZJ1TGv_S>`%`YSE!S$!WP5MYY<&xi_){l%75K}V6HWmi(wvTM2K1E9 zL*OShCm#Vnr#Xr87d5Lj_)j%w%!T~dqK|ePZ)#3p+}_t5{yX9&v9)miWafzeX<)RO z^(LJGK2tN}%J1+{9!8z~#--w0z{p8*`n}*`&HNo5-XfXuROAcq)L(hHF(!e-3BBvt;7V<{fL_S&=J7l)kIxPAh zf}hvy`#Ja(&8*9owxr|S#Fn;%^T5&;>(^kM=h0>Y)<*XEnv<{}kKL484dBZ(r@aA| zd<)coZ`5+${nWlg7=2|Q(wtlb{-$Oh;%rOI6TbkKm>WOCu~>Xdc^@pk1+E55oKv&F z5@+6#+$V8Pd>M?g@_!o`e`Fud<$Ryj%pZC5A%~P4b^7knobn^^*EJ_T4t`Q|+I!#^ zGza&9k7%~v1^+>FI`YdW{`1%Wct0@O53T{D|H$d+6F;sikl82xX_^yegHP5R>IK(p zHsGTl{X~8KNTmNF&55^yFVW1Od+}qgQFWnz{D_g#M;`fa&>TXn{MeszV=DN5k^d6> ztY+U2P{&%$VYDUCBRc5kfY@h_1+LQaAo?w^S9CUjzp6Rq`(WwcrO{`YHjrLbi^BD>a7}fuTovBKjo(WpWt)B&^b$`Z;i` z=47&rsl;c%xaOej{}p_#<{;XYaFgat#3ljlSM{Pz2@)G`o3IqdMEf4%^~DrQ2b#|1~<#T-vZw(oDKf9X6tG2pEdh%tO$M}IsqJ4 z{F?1OV9Bx6{{>Ib@?_|SCW}7$Ei^-O`h#GJA#*LXM9Wit557=z7Jwy&LG)3mTgy}b z8{8+n20WrUp%{FHW; zcqShJzoq5=F2ub}Gv}m4@yGWZ_)0BLMf?+YYfeL46Thh07X?e7hTZ@_rse6oz}TPu zq*IPQCMUlQ{*~q+`YZ8G;aV_at@<7DNeXCA-2u)Kod)nE&6yZaNtMF$!1Fb8d(zpO zGwQ(SiF_isU32m>@THnFzXL`c%C{ea(f4E@+Lv^rW-9}Hhvu|(;6s|j+riG*d`F3}u>pUIMMCi*m4 z`YQuDkld$rY~+0MCe8eT+hpl4|BK*Tv^;G*7`9X!F;Kx6<_krs)bB&O?M0BnLpQ}0T0&t7w%&B0E0oq9$0dLS8`Z5^f zf%3$Y!JpNfGyujn%DFaAeNb~I`Y{!;qdfEy_`fx$qYqPmtJy>!rlJkh;kDt^e`pSO zpze@n-@RaIZ-DYbEjKO&PuHAyJy>!eZ3VbN%ahQKH26XLfmz@SHQV0?U#!_g{L_Xt zTP5J9HT!A*1!8*NPgt7hvS@JFHpUow(3voA87IRyEbfjF`* z>rU`Y&Acv>ak^&qdxqqpALEGY8|o(_A2Xzle)M^Uw9%XmhJVxvqb(Vq(d^$0{=8;{ z+sOEm<^+tb49UY3^jpRcv^)*%$dGMy0#RvJ2nW{Op6pX&1+`ktr z<13kR$+rOJ^-Sahbwb|-T{R5W=FdkU1g?<<(@k~Iy zKwO8v-u);r{*NYW86cUEy|zP9C{M`lF0uTjQpUTP#*YC znv>oFzpptBW0BX`sFQ^8l`Sz$MZRTMYk4xpMYi~vSp-I3QeW|i<^bx=-mW=yJs54E zP8$BQ(KfPy+|E9zIf!wSE&iM6!))>2NBOU{jhJrM8H4M zoCbe$5Np-m#khnnG4$UHj%s;Q2z-%d{KTJ;d!^>onc#0~Hvb3wUCkWJxkoi~e#m`O zb5a`k1I-+>;}b+@FE~px$L#n*&723uqy6-a^T2qF2Que@@tA+f0gQ$5Yc$jT_-@V0 zzVt8Wgz?h9%D(h(I{J3J^lu397%%;s@jI~euMq=F9-7<0$F%))^v`&S8|&pYKl;OZ zBTfuaZ$x6qdLz@dP6ozkWUknG87%Wsss(P+a`PMDUd@5m@V<@cXCTHCE|Gn21Yf7w z{|@*Tk(YtLr#bu=@J}_<{|SH6Y<~sp@tOsc#~#c3(14utT%(c zU8R}p?z~-^Gmn5jC;F%-Z=Ys=8F;_u#0dB<%^Aq$JhY!SRT~jIvWa%&eISf}n`nss z9boC-G>nUhDOzs40hWF-kAmx94|e#Ncs}k1>@aeO_L;*IFBUoKnz%t2{V);jqQ2P= zzFF*G4x5OW@_H<&e;&UZ>1IRqtz} zUHOYeXB}RVE6UClctuVqh7b82!iaf(pD@~zk35MoR)m z3?u&~n$%3A!JX(e8rDA|D1L&y>x2@ND7x zz$=8|Ljn3j>AVR3l;qEyV6<6XpN2mLw}{Ofzz5u%DL}3&AD)LCc9}~&P8A&1%;Qu6 z>{6bD94R=eIr%*Bam``$MKn>{;WfNys+OmaBO>1lE*1U>c#h`47r^K{WgmkgdWOjV z0Y*Pk9x4W}((;5E;0y2vxlxPPHmwu51T6i?YgbY9qiRbCjJnyz1hg-@L(9zx;OljK ze28Hbb3~LjSL5}YTF3q=_&a*vU;r$Aorv~De=Ks$InkeM{qWbpzZE(1D*CqO&^El+ zk)!JhybeBDGjpa8ZD1cI)PtKf2M>U;59J{r_zS|t;72rD?}MMw^(G)rg)h546uu_) zegHY@qaC{n{CCY(8QhwGWBNjY)pti@}+~w}K0_ez*vXoKF>-ljgg2CZVs{cZuk`N$6wRPy8i# z0KPc-pB5dod(v*LL*FLdqUA}O!3VTF6@E_oFX2M)<6>tA_^2>^D@K1S`^b&rX`=sS zF!GPrQ1~c5OYCF5EMBH{($E*h=ZpLpI41h#VC1CQw;p_z*0;8UF>kV6sYk##o+UZ< zF`uyQ$+eKbD!dl_y4DXa1taE(qF-W(&Nh534ar5D={JJYMg9kHv6g4R=aLF7PdO7j zOMF0lO6r6Q!DyGVe*k=`@KNyRg^`CPPif|juu9$%o{i78WD73`&l84klaU9sY3>4} z{fd!OlkXKq`zB+2DLL#-{l80gHqrak# z9gJJ0^ApIMg+Blz{*X|bf@kW-w?B@UlG0){0wr_sp~hgZz<%* zWZ%ocG7qG}&uQqhEYY8a{!%_5R@0=tsTkMO3Pqq=I)3h(Ua^}6W4&>*Y6c<34yyl@9sq!n?pvc=##d-H?CJ!#@zd7xGs;d_?#`$baME-wQKt|Et*`|3esajv3I* z_u*Jm@NL4h^N5EZ z6Mh}?UwZggnk_Vi@B6F%fsW#Hi`>qbp zmni2oZ961f4Ne#R*TLi5eQg|HRD0inT>65?aa(fCdKQfN)~U;0~e6}V2N-ptN@_RjY?$c~FLH{8)hW67Q9r&$$rp^nV z_#BaQB?EHwt2%E&e%TnCasHF=F3A7K!+#TopFZrb^vNhFMql|b562nvFd6^Vxu25P zfDv=W8^FkU#k4a+7=7WZ6Q+KH@MbV#9@jrd_(8~vLwVH{tT9I^LdEW{b}202s<`SY5U{TD@t z_J8W(UkKCwZ$116Vc75?x0HP{;^o-q`6rp53GychBX0go59bJ@P5u(i_AxN>pZnT~ zga0HCpQ71U0Qs51J>bQf{iWb@H3zD|$bZ@ipfCKGv&g(Q#m}E8ZUf`EM&`r6T{GkC z|FrPE;Om6ZKL1S~#<<|VxG9<8$GjA0%u8gu8uG6Squ+V`i*i4Gcv!RY^HE{e`;=zo z=XZta=T9^nJHbB}-Ua@(X3jnS-)ZLit^PMP`-Z@O6{i0GdiWoj{pE;}Pj~|u?NNTh z$3U8gvozD^zyuGYKd2vo|AEOKo+jJ``Ap4hS744X+7&oWcpG@W@O@y+Z?u_!*aR@v z$iX}?Y{hxC@BzqU9&QzW8uA_w_iGNJeS!5J{**A<8o+!=`=MMg=0nA$;Lixp2JaEB z1%E*^`!jI2@L{m@yPxdz`zv4>kAAX@NB`^K@5sJyfS=PGK)eGldHBb|j6aT3^etf< z_*a_wIhufsP36Dj06)VSkiIsLVjt|seVL#9{F34a!O5DLpIq-!&c05NamxNp$k%fA zBR}J$d_X_)dJvi4IY^K(Yawp@ypxiXYlRV$1R1|J>vhI2ZLZKds@_$?toK6As@`T{ z*4wYycOQ62_+{{B4`xuvtzh`1_$}}=9>$te*)bshp@(H` zD*JC}xw3yu81{MHO6`j_2C<%0jGPHdoS6ebiL)Ozf>GHQZ4VX;H-V>XPG|#5%$Wnh zxmwN~2+EjZ4g@96%z>c9IaCXVA8~)y3e%r1Vfxb}On-(nGY9yYD(=g%7)0G<<e-LZ#tNgiFGjlH}eZesmd{pG*!@_tCKI`GItnChV4+7hkJx!I|QF-hp`Rq5Izjv zCHypaxA61e{T{wU_!YnmF#Jr! zdRxiKCkyw37YQ5SvpqUZ9$xLyzu2RXbB1_b8$7&On00OU@YTYs_f}!nd%&Y}pIoQq zz7GmV!H;|RNn!LUKOd;B>yrOl_!#&#xxPyKzY(qlBj)P5EBVjDXlvrT9>!Wi>8!x8QzN8hQo(}!)sv%%;)B`1GcxCXpecrExQ;V$s)!fgAU znoZh&K(0~K{x^gXkEF*u{B7ZK$iMI57lao;j$@O$)=kD(bFOwaFBW zJH_-3<4*AbFxKsHZWTTPIp$BwO~fIkSNLi0urS)q&$23=55YTeJYZdTr0f!gFDV#z zN>0YOQ@k4d1rKB0uH@?>zt_X}3Bxwu1909KNO?xM3UbV)N=|-BnC<vk-R>|3}zj_#REakkO!}lAM4%!t?5{`l~?v$L2aibp?P2L7)!q+0`X6bgpQ(Ni zhlCLazL(?JPj&hNF-)B-ax%t|(m}tc&hqfdnptn^B9X(-)U!Q0O&(tD(Z_gEHm`?1 z#tYfRI8D6_a|9h;2);tN2YjvY2JmNvcYqP+xIW^nnEGG#=zrCt|ET+3QtDyhGU$KT z!`~N%?|g4bz4sIa|4O(N{I-YR6NVjrw~^Of)dPL$yiaH3N_)8>D&v$4TWUTbSGmUs z-Xq6(kIbmWcynwbF3xeB^OW=6H$Q*itQ(EBdYws=MweWpBlqiTn?!zg$9YeUMb#H* zFE3CkhCO~yRqxE&@d5?)Ucx+R3!G>{< z@YCRXg`WlAC;UA4LE)Fd4-3BnepE9*18*D_UI>OQ+Bfe4!@R59w| zdpwF^+j&pQJPbY}a{6;rnEt#j3>*B+ncA1W9TTQ+ZwbSO@s99O@cY8hH9i!EF5K02 zATxcMnFD4}7&0?i7&0?WcsDpp_?qB@WbFG!iT}jg`WjC2|o{BE&L*QjquChwZgA}+k}sRyM&K|dxVdH z`-R^E4+(z=-k@2%v@@>LF@DAZ9c&BhNc$aWBc(-s381ZFaTkzdH;LdN1k(%pX zhx{HH`v&-4&FlyBK6lMl<&7A%9EH6{yxQ-*M*+^L=-Y zH9yqMTxQ%ED?TirW*h!mL3i%u^+z=iH$jelo#Ta#V~LtSv9I0d#*Lqmb&eN4*mTZ8 zd^kUKju*bu-8lGK-M0G>H|KcahjY&H!av(>SHfJkEeSYAJN^f8{EZ(kvhbNFX&2{w z$7g;vATBR;{pb7~m#=Z#V(jq9ce?H392M6`pE_;iTojidb=%81CoV@H#gCPUrz5Ak z&T*6Xw~5Qqb|)qr*Kv8h8y}9}xE%e&;{_kg;kf)^H*U<6xcnVAhP=M)$gT2tJSzq_ zt{ZA@F)Db+TJ_rH5N=F9WK^g-zE-ph4jL7>1!8jrr4=W*IhALt_qRPf;?Z}3Qn#x5 zq^*XoX7nEF&QmAa5WoM_iOr3=71fDV#@v-kSJE24jc)wjRAV=I@2~5zJmzLqo-HT1 zslI3H$8S&N*+_TP@3d45^yyB~uN5D+SG z;OXnp8%Fh=Ym_O}*4{GQiJQxI^dY?zH@D!|{zfFjw1~Hp*R2;7+?Tu)x6Jm+P9W;x zZCu4FT4Gf2_O7@u@u>Ye2Kajp6}abO1@6W^(A_f3n{odK51hBC1q0UG>Va`Q>fy{! zg^-eM+4@O(Q?NbwZ|LD%^kenDF1GpN6UO*fT&v5M_23or0@t}pPQ7IOEyExElXh_J z!eeFp;n+J15^}BHvK8|v*Tc#l_jT-bfIaps)`z(@{&4IyL*lh}7s{wx*<&0Wdpp2h zdynEc6@|=sP>+wT_#@Zi509VZy(rW&vyjnJp4Hi$KL%Ac=g^#d55Ef zS4ZzhqxJloQLaCM-VbD-TD@&sKVF^ohGiT3<8S!$)ayTtVl`yW!>Je7KfLYT#uyjl zkMT~EZLnwJT8GzOfbBSjKj$I#%t{D6^(MTIGJSL&j^1(zJbJ+<98YTO%i-l#| zwtLZUj5Ynsl5O-4$9S*3^y_sIQvGo3wWCO`)#B}J?*{zQ9^1%mv`4wezYN&pnkW8n z>}`j{V{ZqF=21M+9{a_yhihG4d)aGIZo;4QaO@p`z+>;qqbT>_kM<(?bL>3`rhgXx z@W^HvYo7SSvG*t>)WdZvKC<7!6WSMlP!E4xPma?25apVoTW7MlhkXSGDdGL${e@O!_iv-fw$f+lyPk>{&4CYf`oeV$hiTZ zAAQ;>;Z?R-Sc`h&d=>mF;J&l*H%Yc3PS!TC$KHHghvR2;;t$8(-qCtzR$=%g#I@o! zEL`*P)_eD1eAkU_VZD=O8|%Fj?5X!$T%#H_|2g&Ix{=r36Qw9Wh(FpRGcL6E5MI6Z zo`8(`={y{J4?w_uYW0REkQe@)VA`98KgZtpz#e<&Atu2CkU0;>-ghAI*!xZ!%J<-p z_R3`&{loP^We;)Vqh&qP3fKMO58A_@^(+0#Yc70@;JUO?qEJ6MdVfKYERT^}v2VRo z!Yh5k!}=qhJpMfcU${{jqkkXv9Y2oi!_H&FQBayw!mCqPI@osQ-(7|{b^Fa@)d!4}>TO1H^;#q8l(j}8CX-P0Q6qTjS|f03t>Hg)n~`v8 z)bO3M&9E?0nbn64n?7&3sOr#`(-t0DdDibAUpX~x?v|;I8}2_{*)=xj8`xHLsL4p1 zyK?G#k8d^>Z@90(u(q7G_RyC7Rfoe*FMMn=cUX1-?M&jm=st@fuZscysuRU~gff3nq+3G_# zZ$%t0%RRJjt1*7_{^+57w;K~SKVEuh-xJ2f+WkiIsfW$CzxEpZ+=c;)aM}BNaer!iBZATt$M-EjN8l_9O8Bz3kn(lL>7JWVueVzw<6VT@o^!a%7dG4ue zjcoM!IP`fA`aBDLo>7gHT=aP+>P%aF{G;TWqd2G?@ZDAYd)z(nuyJ(l-S~3c({FEB zh}>9w{2vd(_G;Kx3({+f4gWO@jPfm07rwu8YQp0;FEFNWS-5b+mMP1tZ=Ph7@B0mM z*hVT&GV-p$EWsF~oPSL{K1{yAD5%>Hzb6@yt=H7n*4~C2HQ7c4iy=J-ATVPB;dAus$iv1QC<6+Yef2@^fy(js)BJ2K1MwQ5IH;RC|VC*C_r8O}q^Q2dO#QDyU^`7&o&WuW;sFK9Xv z9-o?Q{0?edf{rmdY)c&kwH>^lVr;N|9vz-FTxS&0X z9YnA(C+eO2K4sdb;vS8Oaa1)ORBrptc8Kp!@CCkzzRpsP2kwFB4;sHrshVu(gNkY6 z3EM~t25=lU8&qugF+<~^UOWX3g5UKSsz%<2$Sl_QUy#45FoCPdYg6!KAlnF(A&9rS6j;-H6&O^bc)_LZgtJid zPQ7I@Q3onv33(fjibldx`fM7yaE>bYRLq}&(mvIY0{}R) z^&1J_P@3V`fRXT!QVhq|8wn2+#e+w{O%ls*lEdLxONWv0E!6$C#Pw0?OWjX_pOIL8 z2dk{7qPn%;1;1IW`Fl8_PA}E`eQ;TM7{AqKB;YL2db$Uvn)L)|c7vN`?Ykn2&?pUq)*XXF_Yc#(OZdj}Nx7@c& zE&dNuJxiX9XF&e@@r3kaVjafpLt~MuQ`$6eya|*WX3+ievq^p5*l!0)9iODDMBQa1*b_`(l3H&G^Ti}+_ zk*qxGfc!V&VdTXG>jL=nx^xbv6nx)J3Yb*<_dCgkSta3hC)w7b-(M&eHOw)_K_>}X zP`K0S_g2)jf3>K!abR>wp`C?(DZnAKVS^MpQO`Tuq|k+K_U)8HH|sedg^Rh*T~fG& zg?pvY!@`47SjWPnQs`yjX({y4+Vc#E{~=bX0y5qy2YsrX5HDw`a*h#sE5RCqSI$6L zPj&*f0fmJdxDTdGpxS35%lr~yaJ7^tz{YtfZ_2|441#`ki10?p)lrsS1+P_mHtP;@JGs!rM`D*B-kcr8>As>=dEjf zJ$Ql^_vcr{fgD*UYm5RHX)Fd_ps^gdPGc2ttHKb1Z`{wSL#IUx!A2r-z<+;yMS?B( zrYbg{gSx-caCl6N}$?5R#Z#1%ZGJnvT zAM^|H4!EH^CiB;qlQBR;MJzusc@XNDRfB(G@yW^jT|CZ_A(Q2oCiBPLlF`&q4$Hrq zJVNsmfVWw!I~ko4`l`l>z{e(!&|nn!yq2Pkp(7fLfX6ge09UKyV{YU3_#})nY@Oq50S|jjEQ^oVKEtFF>$Y6+4%2Qkxg!a=q|=O@ibLeFeMHA zg0h){7$v@->*7t16JOAW?Zku1!xV%l@u1o(IRz7CQo7y?p-M`Zy%46PbiMTANAQx; z_4JeYV{KtPEF85>U4YX@O?WP}UQ&j_IDmy7(1v*b+0Y%@P#6cZ&>aD-a~fH%48oYi zLU$x;c`aFoAY4c0-5v3s-h8qS2R{QAdO)wfcrVA$-rR6=vk`6}j@RmE(3^3gai&@0w34wOk#RqImOokbdv>dCo`d2&9cKpj0bhk(zvp zQaBwkPAWoiHHKBPW2@*Ra)u%GmvMp$7aw%->n?u7#fMyc*u_VPG6+*UREPKt75Z^a=n%h3>_GN3yitFxO33Uo z;3{lFPa3mxnsGsKN|?Vmn1jO#hO$!1X=4KFjL&I@;xjtqbFh?1E7uvH(?!-9pK~z` z7V3=8=|KgT>Wt69`XKG(sJ4maLE6d1ng_tE^eINpAox?|T0TUsau3dFQzp_+rexYo zjOoy?xMLPQa-KqW=*{z-&BM-?G!mM`y;HAMHrA-|l?!>=E){{aTqJthbE@`S%+<~m zn~S;Hi9l{HRdfV$$7^+E?Q&%zFBb>i^eSzln45JFb8)audrk*27gJl@1O_&0)cRA& zI*7UGBxeTBMK6UO$kkItZaI`*P@OtHiB&;SAL#FotV6jK72%68(Aj#4r%Ms5hlP`5%cWG)OTvhS z6iIK@=S~r>71LYiiP{MKe6v;x8}M$=ZS_*v$bw!&N32ibCX+);%J3t>XwPQc&F1Ph zQM(Lk-#sjattkBMSt)G8J`G38@Tk7Py_1qiC1IA+qo;%E2rF5k#?U&M3s&qg~ zSF6$;Qo089-ecY+rB5SVUDjbK?LujX^|X{ei_-Ph>(ZA$LmTI^e==*)YndyZUQ>j7 zd#J8!^(4hFpmmuyDHK~`?kKiipfY!1&%V3L2)pQUn@2ue?S}V zuhu$$q~V%yYl{*26R@&Yi;scdtmjcb9g|4rn~B)viAv>H<~2I={sQ?&bTrF{He~Vc zkSgr4!A41oym1CsUKvJKGXm}@o4Hach;N+%HE{miodrgZY4)2nq9 zT4kG{uF$8|vm$((dR&9fE)&b1&^a=w%o!~B$~HEy$4)a@2#VTl7P!7f;+ZG0kfzNg zN6dLlYE}Db+@Nb$=u@>T3~Ke6wPxTnO@nQWX>`$874{`BVzT_rD1HPf^}u;&8lI=+jG+h`E+k zs94uT%oY@`llqWl+1EMlx3M6T5HGl9Ul$d%4jPuJ#_VK4rWzB+uFyHv%-HNH_`6+Y ztm)L-4bd!2>dqu<;?R}-oHr$PD;|uP8x14pPi6QaVYGG=+3^Z9PI{~3$QGD7SS(&) zk}(d-)M##F?d4_7jNIjPs;jJ-k-LK2BYSLTpeC~+H0>poFnP1yD2eE#qOcR zbWPk#30*Jk`=QRy9Jl*167T3bX2TxC8&~o~W8K6Jt{H9r0`=Xf<@^#FG&wHxD@r&G z{xv0>q4XO{I1PD}>UQRf$0(7fr9IBA*TfT)D4yEE4gMW9xO8fo6HigX@y_2<0dvJ- zQ%2h_z#>z%gg=_fy=W@;CsVnXOyyoSm3zh1=T$o54BOXm&P}D#8Gqr<5Dj3Sx1qty zQ+qnlGk>S^t*Q80+-M4WL{nx9<-bcDnA$@5SQF6WQ`3CH`=m-S5_AMhgw<3sHO;5| zgAyiPp$5xy-yiwCHfpU z+EYwB66sw}7^U509ZVYf_)AInD&1)MrfvDFDlrWbZI*0^u#}B>*ijQ}S?SO2)ZNuA z((OL}I*Tso^mUtxjT1@TLARke$IE}|={&fqDMqR|D|7XWAn*>DS8Jk zIrwjg{}%DzV*VS}iQI!FtNc~iE$0r}UhzZ|rp}>lO2x&T9-B>H$LSpTf{#5w72vhk zz7n#3pWYR>D6iu0_WJ3anRZSLYqpzUh)T>0{F-9#fGOz7y!`W=%7-PJwmoJ2WIg`n z0cRFav6TyEQL!CVEahV5r&s0kbL{orx9s(E>?V8W9J|>QI7Yt-VNb&Gn^+2wnYfI* zXZ3ellpnsF^0`E$q{Krgiw@G`@o|uLbS&FN$$9k0uErlO@=!{m`d3gdzA}W0a|(Rd zS&=#R(VoCwe0WVq?cs3u%ID{k;&8W$zt8VV^)te#hmi!m7RVd<=g%xVY)=dg%lC%L zL(L<@HjR0Br#Ez1{(}7FaAofVD?fh`j$^%5gyZKFAs6>rRWgSpb4S|w`E;6%M4-?p zBhR*%52M^*m9>1>44jxh%#bZ`WovM(aG324xg~{gG$7j0(ITpusw-x(9H+vtQAiHH z+&0{rj5&PRaC`D7sk<}>bz_R3#BU?AXXlV&BlT=Fget);C$<13QP`-gMl3v9mFGmc zwwe(JILucL=LE-p6)WJ`7Fd(kD#8 z>8Qe*$N)Vj!TxF+JgAeJOii3J(lH>PRt=>{h&$;ZqfqXssqRr~`N4&#n_${>`-oBE z29rmH?Gk@&*;f~HE2igUE2SB0Mx{M#7zrGce=N?MnPbfwMw8ksLk!8;XPs)p*S@lN z)GVkt=j>B)F< z9$$l;ZjoubLgdB^+yq(084UF9>2Z_xvE~tGd;P~{`7kM5^Kk-pXZGk|S)*J-X8*ZP z5wykE7wv%cg>su*9riD?|6Hd8o97}<**p(1qTFVq-2KYz|IBQ;M>}Mpu%nH_{_O)! zL7tgzDJIj`2x$u--(^v0&r=Eo`o34+KgFAOCza=U)Mx(#vyqJ#PQrh?{;(MxN&LE? zC!Ly>>FrLWDVb`IPfN#U$Zr&^_+iJjCi*rdd%Dvphq~j(b*K6fEId9f5o<{vm+Xpn z^tL9B>x{)W(oYQjopUmqGY67~F2}XUhtxH1`kd)Aof;2x=Ki#^KCZFt@lQBB16KJY zk(QpsCyA(0E$8cvSm!J&+L~yK^>*|`dp36`GSfFwXPJy&du&3k7hz9(S|JO@qMwyO zema3)afnD1GWc$hB%A`}RM->Qm?1i2JsXAETX;rhBk+w{3JvO|-|#Bu`F|&8=t@{Tk~? zATJv2i*@u;R;JC0rW3JN3qKu-;=(^;H66V+)^W(8^VX(Q?dwS%Qpr@*wWZY&&1_8d zcC;qaR< z#5Y=fZOM)v7)-|@G)%R%MRAP}`!*fDsyo&(d+yAJj1|QoNYk(JQY|NpJ2i^pV4YM~G%=9uiK10b$IY%;-qq94X6f(jdaU|Y4bg@*s~fEhwYs+} z30rrzq|pg#l#Wzadj#cL(PU?LZ#og}#>HYR9#3>o=cN-FnkhC}QF0`!FA<;9k9-Wy zo>*5LQ*W#zDkhC}WP4dmg%&{<7=ijW+L`LIT4M1{(Y6lU%!u~4cPHVLna)(IXCt{I z^y;He>(%UyM>no+a=aso-osTqSYBI{JXfOqZ@nE?Je_WE<0J;gzm&gkC}KX zjZWaX&{4a7W!?Jq%j=`{P3u-hm#<#mxUQ+O0lnIhYJs5)18Xz!7G1oiZe4>bykvEB zRb#{Q=2g)R>y|e)u5YYwTC;Aw)!)9B42B;^_Rz#hP99yHN_7}sA4_&vJe5V`T{ILj z{o>W%`rbYwUk{gzCxt)p5Oaeu=;b1i0k;>4xCo9jIM>X*z zPrX081xZ+_qZJMB!W@vqeJbkGjMb57&FEAB`Ltsaw~6Z-S79JEaOYY0lrEJfMX|78 zb~rhObzF^7SHHrd89CZAXrx+Q7#CJsBGv;hMNK_j8ML;e)j6$x&Fa-Kmc>6!)uL86 zudZL#yu!6^GSx(rp=;#j>$BaY#GVwp@b9_1McE$oM72F)LI@<}wN+M{jgBKIIh490a^8+FD$en(>o6DZAz zZUfdg)var4UdywXm7(q#d>&>M#|vmlg{p~o4`y5plxRyTmTtuveaQ{U)}D==m*~UV z9>sJcD<8T!)*9vCxJILGtyt5eeTj4?iQydWJ_Nl^(?@n7!C|aaI!PsDXV7(xb(n(c zn(E+DnI+3tHqv`*61#>Z+RDB&8~d2!P_(f#q@?T&kAossbmf}*714E#_08+nFF(35 z+QjDXA(uByv8=hNVa4w{wO`(zHr42tDtF|8=j3HNKM z$B@~F)uO+f9WRPuk%)ES`=U`SO_+9PTI(8*imvB*N-Tp_3Y!oeII{R9Iuq&kL|1&X zm9?wmDLngbHwc=xq zfwq=aG$G+etE|pliGD0tG&qM$KF+*HvnYKz0Ts|DN6W`*tn&@6a?vijKPsbw_6Rf& z&`kHS8+{q6Gjy0whbN1NVxmr?vuIB%F6_>#s60D?@zx@q>V@kM?suml*aIzYT)Acg z_Wkj`{a6!r!6b?8BL+P$_Wfiac4&1r&fQG8ZRr#y2i^pMtem`$#1;)zMY}tCGf~W#e9<9uk%fIUZ9brAPij*X3u$&CF>1|j_0d_fp*8xc ztwmNdd_f|H9Ukh@0S0qm14=&1%aF4yW-k+P06i=_9vziKyc0X?Xd10`i|)ZX$*WyY z3r}4-fO)~>Eef|FjujEx|72!)S0<6B<(Ky5;+%c-ty4-4UP@@sG2qyKHSOT}`m8UR zNz(L<$$oRDC($X>BOKM;(c|(g-NRdYTD#YyTT^LF)=p;(q`Gkh)|Wg+ub`YJW6v*_ zGq6?~e%#xV>IPx6-qyue?Z!$=nmaqwzNC7-4Dtk4B8=czNB2ft|Im&amkV^UMVBzf z$iYm!95YT|64yU8kM45_qe?D~L=wq9`aW(pkFLWkxpKg-GTPX$___tF6Sh?NLrXDQ zH*YR_@x&C&mE`Vsyp1Px+y`LIbjxP7_a@P3EM4goW(M*V_2Fb9!B*!h(qtwYAHd>7 zvvr%rSHX^*W&1~S^o$w#p zQl;19VjX5N=LG110f-p@cLa3wrrp~PI*AXu*mCr6J6AfNE!rk)(>^YS;fyOITGHqe zT>K1qdZUOOADu@-2Q5fuS}_&z@~rhc>k*c<4xakE+vO@*7B=1SW$$3n2met#;|2Yi zppA!R&TV|X8*MsvZKGr4{VY*V8?B}F^@l~K$bHhaYwIJr0!C)fpEj#n)(yE$TksKH zHhyYbCy#{UPrc-j=c&b^DS35P{Z-z@S9=y;V=oEUZM!V@a{m=MSNc4s2mN(RpMUPz zXP*AU??YA{KB$myQ^~o^&W&Np+N=5I8{PEfm(Tj>Zw}Kt?ha;;X_{}VIWjnof9?wj z+<$amNaOCI`$8Hw^xPNHe6!BUL7Mc>zK}L`r^@g#hxhwH?lS%(dM?wqF_JyXG>v8(M0<{m{DUz2SPiS&4jt87QJvMv$E@L`@ zWY;y^CDN5}--|lu>_OLtdN;s1Cf5z9-h;1`l&I}JKL%^RP#mIR^ocXQ&=b~W!1#>Md3G6n@i+VYu1R|CI>^is_B;xP4e4C_F>s@> zcRct=;ljD#4ay&Yj}xZYI95`)m_7}{CpT11nEVi5b|R){bXnVlb591JC+u$rUnE?F z+s+m~R3Z7?Z-TEEre|r>GbAWK@N4jogo8W4up8ymJ#On^;o_O#$5rMn@bkicI`>uK zLg;JZD;#vLjWX;!mB+U~Y{#PrNv&jjHhbnw6~lplocJqv}yE5OTz?LUH17RiL`!7al1(8tpy z96A!LeOiQe)31q0p5mK(w7&|euJ1^G5p?w2BkVf_jP{T`*QISK!UuX7<(yw|C)jDr z8t_=j_wNF)6sFh$-ea_!XTaUUq1VA%gmZepXA0vP5tjF2Q>_?wd+$G8ntOw5%w!Q*}Pf$L^Aj&~m#CfoN&KH#b3Em`} z`#JDtmH!&}49$NNjI!ul`XW#cj&WUgfnif(-#E-)>x2u-!I-;QCJxr}$;bQylArq! z7`9*;=;GHoqyTpIYySp+5B`D3*oT3CDqIX7^Z!NIgTD5EAY1^S&CM02=iKC$s!RvC zN;ohbjQ><`-fiFo!iDh7+-1rrJGWUlzX7acD(`YI`k2n8-@xW>5zZ|JpCufIopLV` zrso&ss;vrM1K%q7#rJ~m7S5Xw*70S17yLWThdl#hgo|3iQ-uQ_uv*xYgVFaSQv|!^ zsSU~Z^J?{6yyvYF4vYdfDWfm))E^3Vg4KpaOToP&lZ!se`=XWu{quGR7v2HJ`BX3Y zSKhybX|4(egngA@wN>GbU>yq~^igoG$as$fA0Zt08F+HS1PmM1Mq6$eE3WL=Y)&4 zf!kDmEEw$}c?%3Of=`NH&^D*AmW>1oqgT%!!#Lh2{QVQ@n7!|;bt zw{Ykuc-L_edJ6m{$uA}yFBGPD&7muW3vR|c{F3SlMDUI=Ok7-tckLt3Yv6|@pPn5{ zW0+*<2^Asu3bBRp68f`n4tzWGws1cDF!YhI_ejiBLE)SqgNF-;z5=GYQBHUmc&g^# z3Z5q%fPWQ{PLRpV2d@+k9t&<4wqV;L9WUVpU>z?M|ElO5ktssI7ky3T{{{ZGFnzJF zNc+9uS@6#!pY|_B+TNV2!I)FHy_>+V2~%vSBK3jLxv-sA@`IRbi;IM5Jufa7_QEg7 z@41{e!E=P^xzWX^3j6K>tFH#3Te148XBSwEQm(Z=FOw61r+&j`~` zor}>Ps@L-pSoS{Xrn(%7KseSfhk!b z>_hz}#|RfunK~Z*d%^051^r<71l1e*J6QX%XaIb@mMIsP^dUuGYz^6-&TltuD| z*ML>e!dt-eB%i*pUwXJ9zf3uXe2g(VmvksSLGz(Qsp?NLs7o)9eA1!xI+b4!#(1N1 zJLQ{2llm$ckZ&$OnZbf^&k5yV4P1fG?vS* z7N+^3?3=b9aItR2hufGT5EYr7>IfyfDoJWv>g%IH?CLxkn449NcE}>x!%|0Tw1$Ey{F|sc65$#VK=x$m>$6}`e0#y1g!G3j+IyI zxfpBZtAulAgP|+6y=VsbOyNTKM)_BSN&j*kN1k`VhW_PfGo4E|FIPRo-vIwp%lRpO zVBry_XQ@^Mgu}33MM&89D!5d*;1^)+mx3d~Xakk+N82kVsr+}r+D0FIyaH_?8M>CL zs1f#dfforEKMigW&L06rxg;O{0eG#-!|y7N7WVA`A1566D;VR7* zmB|Nx6Zi` zCGcNI{&YPdAwDK~|zXc3iQ2Cz6!S_fx z^hm(Uy~@+UI_LO^|1A0bI`CgyCR?ygd;t7sE(W7LSw@;Uf_$_$D?i@Ihb_hi~nc>%TZ#~QCQ*Pr4$VZ=Mxl_3t`TYjNhAcznoNDlwl26k^?8pv=f4)~#Q8)j`_Yz$lHfon&cQ(+Wl59}=a77oWrnTzKOXslZ2hTU<&Y#B z!$0^nSKpmC$Np8wAjWv**Ma0P4*9dwPm-Gjxgqste;`B^z~}e{pJA?*F*VV%N$CHo?s=(QF9&3aMZ2#h7JH&2g|9$&_P=Nw=a);zCM7t+~ddkh9n_!|!W zngsOalz}ej0~e4$6$=I9F-T+V^l8I zkU`~Pe_}=O-+4LZ-G>abyzNLY!+$ET82=spo&r1P04Eor9cKWXmvfBPM6dD4gD%0I?P;W)7agPjq_-ir@Fb)s;=l893> z3;r=kzt@p=+B-szk^RE>?~Ebfu^4Z55a7I=y6D~GWMbQbdhBkbN8>-0LG_Xy$;XWH z7WE*V!GGt)<;lnV*+pT6F$W=>%Z~TcB)Ngjw$#d`9VAIyzG;v zSjDSOwIbVhS`9N!v#eEkM)!^h);K_1m*+utT#dx;;!i!$OGwp4w49~c)z%%Y6c*gw%JmY=}o`-)ho`pYi z*9+F%x{K^{cix9Uj9)At*mC*!ff-lRGr#SI+6%2`j)+*+A{<+=9slR!m#a_W|K3{q z&9=San&QK@obulEZTEaoO3z!zbHd-K+3k6~2C~r0-ho}k0-U=Gx-Ym=(z_nU^YoE_ z#lu!H{)h3u1pkNOe<}VCr(?U8TL*97s%1p*B?OeWb@_YKFM8FQN$-Z+;gA2 zTdiA??@i}ARo+QcyS81i*SZfLzje`j(;vyRPN=>5qh;G+n{5xgHLwHrqUXDx3VWRj zTW#IGBeE0r+6jB@guQmcUOQp0ov_zV*lQ>3g=fCktln-#YPNe`Kjne%^0V1@?uPwN zd4Kwrt+2=4AC%%*?(a2iD?V)D38?>1{}`x=OMA#pTTUq-xB&UESLwEwaBRCA!#Nj_ zz3}Yw)-5NNZ>~GlD%)`o+FCt+VC(oP0~egA_2OKrAN{_U`W$^&v1MENX7u+2^lt(B zw;26fivBG_8Ic`Fz^@L%jqp>gQt~O(TcFS1KNxnHP=oT&PI=Bf&P7{G(bh7wwE}I8 za9g+GOHTh-FtFvhIRjhnnmVxMs`1?JgW+p+*M4*tTq760X-3P3~3&&dx_`h&#t#y6#a^LY=Bld*mBhUX3dNyo5e*FOX zI&@r%^s)<*R>K9`tYuX8!DEnrs#Ux-VqG7r-fq!(s=xh7`coPB->~h)f9SLHKf0CT zL#X{GsQvbd1pzx&z>bl9?0EVhJI;k32eTckK3%+k8nWm6hCMOv$bT^gH^ZK{FW8N^ z6}8rg4G-lmn!f-aczoWf+4kUD1DAasaT-p0ap1CYt8nZ16$85#Shc%;1pEF7_Wis? zAL7`Nd#qyesV(t0ODTyaV; zPGidF`1_V;<_wU}lV6hGQ;ZK94_TX@YF*0qe7LNJYzZ!7Tarx|Sa~$=c3olBZoBTa zftoK`LAKk|u)))?+t1$`*!J*S`?s6xuP2yxJCM!DUMRa5?>vU-oqYI{{C7XL+nu!s zwHvWb*dBElZ#0%aSTI2Iz?L5&)(P2z>_hW}#5@tZoWgU=L-Q9}_7xxEyyLCf%tzM0 zE?fj(JN?ChZLLoa)SMzdHRBp_Dlu`@BxFT+~UuQfX>yL$JUQn?DrX1Q zwB|t3$(Pwypm|Ep&9$dm%P8gvZ2l*Tb%OVE;ZyT2tFrR8oH2f&W{(xvTECw3@SyGz zr|vUjIF7nW2dclhI;UgCS$>L@QjGHtrSsAD`?Sms)zvZ5f z9>Te^RELGsU!RWP8u+ByPq5MOt0wY(X`eo#{zf?mo8{Hr^U>|xe@XR+YFR^98U8@^kR3j4J&P{8 z>~dU7{D^mno#ooac)QxNx_xUV| zZ&E2|;g)WGrJgmCSRQ!K@l7f-o9q!ogz6!4n-SmSA~(LtMMiv+XN~wKZ%KTU zi_omMg6Nccjb|6r?==d%oNLB6IfR=!G``6MvU$Nl6Hw4}5txPa1i{(BMiy8B8|T9Z z3R+9?C*=GY6yGGplD&@PmmMJ%&okqjXz}>|Nx=l}H;HdTU&6x2i#7Ojp!g=E#Kaum zWQLfPqJ2B)-Y_$$*6% zdF56f6$gxO@&fm+En{cc)i~=>KB4qdnA9tHnTxm(baJn7@k$qQZ^aQnVGds7;%*oB zxOlCLUvu#~7r*Y}^)7zH#T#6_(Z!ow#CItib#8X?TQ1(>;uUI9b(2e!6RAmlK3Wl`u--G-! z%=jjAuwtNPaLM9D7}I%s=|qfaBfiNVIZTgT<-5esX-13rO|wC1ddC zdf12mz;2v-GkpM=jc>95Ho)hI`^GmJ?>yKVi)YbReMY$_iZ7mRH{+Y^n4$&5P|fN3 zka$lLWe$pOk}~6)qz)M0BxS}oNty9Y-mleq2Jp?38yhsSnG(x1@kM<3cKga|H@?ZP zRy}eG#D069CbmJ$^N=RCBXQI-)!FzaPrOnl_Bai1|JC>=w-1VM(laQ&$pwSro9rGG z-((5(&#;x~wP7)**O>6caqha5;S^6p>TJ^~n9cYm?d-V{-{jBi{2brp1sVPv-{j8+ zh;MSX8{cF>t(^Kg>U&?}n_!R+d!MHvjc@W59&w}bDSBy;6fG@A8%ie*Y6E^dU}*n0 z9A9=o?cbrZRr~kAH;M`$VDIE;|4-=PX#Xz^V>7NgzUEaeQ~?3deY@lyCwi;EH&}6%iF{qk?B@qMZ^(e3Rg8iElCoXM9t4 zGW7i)Gyzl8h$9XnhQnf#<@hE~m@diRCb2ZW$-C8f76?u|86N__>u7};C!BH=*@|Kg z9N*-d2Uo|)ayv-Fjn#Of6~{LT&hAjvchZ4w?$gr8jb;iW2a0nBp8mDO&1lXbiG2sR&O zxz}l87ZM{SzR7PWpKa^LHyNq6#-@cHt6w%*)7;M*-(+XC8{g#HR<#@7heuW_^Y$=O)z{=fW|k0H%o76d=vV?5S4HTEeTfjiB5cz$+YCtfgj?#LM2l) zaTj%?E?peoBxS}oNljO=dr54DChn*4Zms3n;_xFH>oz`n;=0)uwWp*Nwpi_=p-k;Nx4^StMN^4mu}PeCR3sH znj!H`-cgBZsISeE4bcqD1y5*?(<3!Xe|x9yuCSJs@4C-Ah_sXG(=#7C!ya?`WcKi1 zFaP!N-yHty=fAo9H^6`M_-~N^=JVeI{#(d@L;Sah|I#lr;a75PJKBRKtNa~IG&y%b zg9~_~k@zMlq<3>#;+s(VR!-+w`GN8ek$j9d7Udt&20|wFa&$CSd7m}9teo}?l@i{o zoW8>D%An2Rlvt+R&LOEB@(22@WF)Y+GJK@s z0=ZJFF2@e1a&rg|dF7wKpg43@MsBvI6@-|bNfGfdr%-;~4h?UN=4xv8~T!Vek z#EY5d@n1MSvfC(o4`&=I*%NQ6vDbTOF|*)x^qSNT!E-s+M?ZAtyfmf1oL7TDF6US^ zh#+$=vehu;xi_(xWiKSdjJ;V5g9C#MgY+On&~Y&o8-fm-hCp}h*AUQi?2b=qh_T1) z*AQbdWAE1x=TkcjLyY|jHT?V`hBzlkh9IM<35tL>(W&UD)5rvoH^c-uFvtW*!}IZ) z!Ll~egG@s5DLN#+L5Ia8scyJHmMC&6{aR=uu~5F1JIFYaR%NDAltDMT(!>C;pg)3{wS~6tSI}2!# zAz$pc&=C`}Ws_pn1w6t?7<)^6qm=v#DY4<?*0X4OvFz6|wT&Bh1U30}YVr}(0?@FJYUv?%_FvgQ#8$t-369e> zkgdj-u&t0Uw&La^CC#tn0v;tX&xPHKxw^-kA`Zt@J3qmT3p|{z``x7WY$f)y^*xLAMZT$TR%|JqO24?WZbE1rDFcp4zf+`_{Wz5|F)pKyJeCX3Cc~$b)Zt0X zu62$%vjQ&fCcI2eGZXrHgPzyT*EDy$VXaA&*XC1_T2~z3;&l`BNXErT8qwtH&7uYwufebfI;4?WZ&^#& z2qK33t}!D8iwvjw@UobB;O`mtjx#8WYwT}c&n%5^g$}Dp&r1*GALLb zbUDh+u&i}%VrVG4{YQ@*5_hiCnVBdin-RRuh(hN`7*XRO+jNbSpM5vOzirCqLe>l% z_bCoIr`kt5WZ4~AM0sZHxKDAwIhF4XOTs?U$)t8~aNF`}4mhWp2JUh)tpnt`0*<5+ zT+hJl(SM_7%+Plf$6H@URKWe`I)di;AD3q~E#(NB4TddEA97_5c)%&ea4y63_MeNw z4DU0bN6@t$K{!gaTOZU+lCnqDB~V*sx$h2NQXB$BG%y1YC45Gz8zs> zb~>O_44!68$8o2bYPrb zIO1lXeY}f({86{dpyB?9y;J3Z+|ixmOm}p1_jmrs<(W-8pnCrs-O<$?CNbU7J>aPS z|Cl?vt}w(M-2+a`2D_u_o4J{XEdO}JKb=#|esjCW3-Ntk|BmPZUBErylz$)({ogrZ zx-0dN0rcNFVA{tm$7!Z9sT#YXA>M|W|HOL#t@HO&fw{K0%{6kf=eP~b?X@EK)YEm+{j||&gRwyy(j0ew z{50bG(d5(YaSY`SDDD((TGQC?cs4r%cuvQ;+l+?0TOU(=rYqr`Xf$xJ5gY+;<|hu~ zexYk@Z_mJgp){j_!ESCWyiRqWPPW71yU6$e#eLNX+K+421WniK`)T^lcWsSU={-EV zL5^En^nInifA;o&y#@Rm$R9la`B~8SL2*ot2=|{H(fxlm=(|22=>JU2cSM>-L_ow% z$LAdXZ%2LCXi5kqhj6U14m1h3BRMcV-tl!6o&~+7_VB|d%veOh+9y>F4(5Kiy}IJo z@f4f=_?cs7dPhX6yc?$@=~+d8D2%(un-}4?ets)w4l&Ol?xjCWhY(HX%GbzLU z!;&jm=y)l2oV*>s&^syOJuXn<-F)h?V`o$~a-?{t2_IVau(>m4dix{ZU<6;3!dG3i zaqr-pA$SfdD)C4BtgwH&-y5Fp?TUCyBHoiuZJ*`6>6D1~NjoyW!h4HQ6<*%2of4@U zw_>1;5v~6sa_qtO~o#F8sg`e+1;R8bpA2!|F5%HErys4|(52=`3W4$&phSGs&Va7^55(p969ThtEKJUy%SlC|ifGplBe8&frN ztoQF*Bi=JTkqO?nw=T>Ucbccoo0;wnMZD<<{r&sa3x*bakH=nBxd)|GPOKQeVuttm ztqW()8Z+)#(dRNxTa`C`GtNEV`@+`gLr;FdX02=(asHf{)U?TC#?SEh45R$UwnwPq zHQvJMW4yhQNwwqIiTvz4)BO#f8(T#p-poS0dHwX)cAClOdV?(L?K_g?g6st2h{w_& zIlGt6g9D0azle%E4i>e&ENaj8p0v;#B5`WKqCtIm32xX|O+&vwX-)TjW7|Rmg`n1Z zuiF;!K4V2dw}LhwS>^q$HGNQnUpH-XIE|vQRaGn@QF$@^YB(ID4#)1^3<5Yy_(Oz- zKRH1mDiNso=kxo5gQU=3=t@kf_74z&@>{{au7`kZFuNB3L&|k_tq}enkE2?ds+Dw1^`}(SIqhA;KFvVM)8PAp#MC6#*FM&5dz6eaT}r zL}%0qzzrqaK-|iHn(HbfGG=+fAhVW&RrrLTwO~B&p0@ai1 zML2GXVLhmvIs_2aP{4g{$qtI3>O9C3Va5@zQi69Ifh`eWaUh!RM8wNf%Zcbz!~wQC zX2%gro}!ORM0<846o*bnXjqEmO)*rR2-~x3mQ#dnja&*-sK1ffj7abtu$4n_X2^_)`;Xg9v3%JE6bIVGlNbQ9?apWxu7eTn#-ejLQ}OM7BnafFse zxN?MFWtYx+m!ppa&CCYw-j!&L#1TZ8!;+H8+LBoOoS>j&B(e;=AR$f$33#t)PeJCR@wU#a zM30r|>PsT>GYn;xje$V{Vv}vjM5{A$`GKrPq)v_E-q(iMuLxhCMzhMP@KOBvXre2I=(~s-pFwxJ(W7A(tB-!2&1T%Nlnc|yiij+V0T}N{QK;jn8wDC$ zCPWE^Bg}3=Z7@qmD_YxyX@~|HMa|AwJa}a`LKSJp4sN@gFrieeg+QaJG)KCRk_(-j z>Pk3g)YY%B5aO32!S-0JcgvtD!Q!CdZ3#qYg^a}7-UyA{A))cgv-7aiB^n#Lk51FP z)y=Exmo=|&jh;+3(Twfde);-rheR<1T$?%`4?ED8WONE}oC^k#SufgiGKI#rFq^hv zrZ5I8Ooz*zi-G{(b2s9kYjzRJd30I6#w4W%lbF`tZsSbXb z;V{{FZ%x82VHAl=KO1xVaft7oPV}S^QM?z?)hUUKmuczPai|ze64pw@e72%1*VL~- zoa_4Lb?cWO-570h^x`#D6jM!Uf;E>i>ZcwWUxs;>H8(Y^*|1totTO|}((Oud2VjQc zm9xDg*@FcILEJ4_A~3;YWnG+XrzT^h4p4U@vybB)v!6#X922pwUPMAhfL^Q$GdX~~ z2IZ!)BrAQQGm&mjbj3God|%jFO;@*`!lOs$M&}q&->Je(tg{;vM0c!*E+G&#I+<#5 z)|*4;EvNNHb|Jkjo3YcNH8qu{)exp{r#%efX>+*bXjdmQ?Rz@1>nD1!W{ z9RZ?a6Z1 z4eTHizkHBO4mKykvCnrbYzCgLt8ZFJA1_nAP979T9s?hPR9zD*Lz;S!f^|!0P+)0`QsT?* zY>rB@Qyy=D;;CM^>Y`0)OX&|WxL0i5C*wAwu|jO8+nffKS$ZEnN*av z?`Yf7)y822{ti%;roVIGt#xwJt;1-Mxn&ddN&rBG!_`TZUZva7|zb z*E)>{YGhh_WZIh9k!fvRn6!J+$#~DSSVuBO+jnHr($$kpbxp%Aj^0sp8x@pIJEm)1 z-FOVmbB$OgFvI9l&%Qgi2EBtzo?cA5@pz&m3YC*Bw4de9q6L`EVn%w$zS)??EL;R& zO9V6XIDwiysZCKcP`XhkFU@qlf*zCIx6xT`EwU(PLti_i4aUIMn7UC{H}t01UdJK# ztm~J!7KoZAWfJKgxN`lf2CR+b zpnde19!m0Z<4hlGRySg%@5x|=&m_s+u^w#B^dvfE(u8-qmm9cTP4`5gmox9tdK#nM zHP((8dXyLC^+=}DRNygsY3Z~c9VWXO%tdJ|S-maj1iEa*R+X*>GsZehIy;->zT~n* zvV9}jlf0b=53f-?qv3)#x;cTB3`0BC(Y+BDbgYtGYtl8DF^FUyfNr>;!xh}VhcNxf zwO)3{=%dFOW%GF5!Bsz9i*>ZLv9GZsVy(l*41aKdM(@12=)DtDuw{~c!SO&I!!5X^ zAj(rahL_0>x`9_bx|*Ypkwn&Y}9yK;7x~4pfnz7Z>Lv}R{usU_?!8|Cj;y-|*T>q!#`QBSOqT=cK6ocP0&R!rN*n!)?v-_)t#!!k zxyxnOftB5v8_f0DS@gs)2hDo@I&R22aF-=*$*dofO%CsLXfKvtFV-=q3+RDiidg}7 zQFKJ7-CH#}aOzjqtzW;qK3d_KV8gb_TDFf9V$gS| z6SM@b>W+1YyCJWoHOl)Kj0yB16@(TfGp$%-c@EI}o%IUKUt>5V01Z_<$bH3xN^JvqtYa1OS?`Q3D+Gs7UuRkm@1^cT_$)2@q>m#}}MrO~S zHmh1z68<2m;3K?jJmR~qfNx?K7#}auXL!rpwEcKpsAf&LZd=Zh{7Zsg&AT*kS?=Zj zD{`*%UFE&nbB*n(4dyK=sPos=`*RobhDr&$VQHug zW~_%u6AG%M64yJh!hyz+Mf#UP3MZN6Z&@MbLn2$gd3>eTZypyd+`sHdl=N92{msqh zKo;3!l#fq@_%jnn25J0rUr6}e6d&{>9n?H}F!AUi#{)ysc|+3bijs@+3x^yp8j=nV zNe>&69zGv0UA?a~L(loBJFUaF}MD7de zDQ=3(n~b#6=9&_*cUGoYgtMRJ<2czr>(_cb`{fW#XTLwC>29Y^O`ka=o&6Gn9{;W$ zpMd(PKYt==yB2Bc&nNUa2S@?Gq{mOgaq8c9haCS-YRQa_? zqrWM(A-(Jdq|x8DGcRmG8vSjz$Z=~W(j#@3H66POx`CU$hcWby*w9NKC(Ufnpfd-+7fYOPi5`#cBmblq`e>}f_)>G&C)pOh zm^jwqi!q#>a-OoRDu*z_RPvG zG-Ng!G8hA<%v7f?$Yl90gWoV1=VoP~f0ofdrOtW)+l~SkyoW|&3=-RSfHB^Pb9aF; zmyV?TT5uH}B>?8vBs~}Qu;vJRGhoz3=X#C=<9Cb1-d}-{CJw=0EPPXwxCmuf#|iuP zg7I~6$`9WQhR+a}tOMg0q{I}r)Y>i_*a<#QI2UcTE)p(Y4aVF?@&WX%g?=Y4co2*< zaUS~0`jK${9`KKat?}T8g~Qvy=wCkfAn^0Txv;nOs&I(xgL#f*Jcq$Xm?v3&Hh7wF z{wgqjqe}VoJ9vAEa0q>9AEgYPZM8%3n_xVKf#d_r!LTWDXb<>o&BuB6CBk{IlYOnQ z|8(#p!q(5h&nW)~_!Z$2X$E@1iapX7^Q1*`tKsK@trm4|QA*HTC(TmnY>i77^HPK9vpQgF3!-fHkXVe2+< zy|5p)%2_KMyaD_LVe)~TO~Qebz?)SbevxyA=Klly6=CZL@YjU%9s~bSnA+!GCmh0j z-g9$>t?R(0Dr14Gg!5ph-08x>KZ6$thfW1A6Q<|7n!o}!| zz*OP9e6Z@{3xm5PpXSuSIm!ov;U84K=RWXWVIRg?;B}SpgWnbQZbLtLgp1H$d4<9S zFM@TvSXY9_OMWrzj4#k|`8o5!wR&zZc!jX{LGW?H;m?8Fg>ysTv~b~D;H|<1uwUMp z!sMHI{}lE%!A9DrzPrGck{|jLc#3dw1sH8(U%Cujr;Pp&E)n*jy}_e2|5-5VAo*hS zX)q}qMw^0Y1LYSy1KuGV!1xX7cn=&4Mja$W@i2qv8{#7LOYjbrhYf=d2$$e^5dBIr zCH>$(3g;gLRv!+Z0e)Zep>uwYa6vs7eaz>+37(+&KLXDZ_MHpX@$Q)hUM%@VZ-7?| zhj2U}eL&?DU~J{L2^T*E*1jl$o%2tTd<(kdpDj$|CSU!z=xXq_k{`Sje2cIT{*aIU zrt$+n20tq7K|2b3!r?XGB4IDaMZsuc{|n%m!a2`@bvzcq7YY)R?`r{{FPsmbDY#rX zfG#Nbx-cG}Z57-moP#k`aJMpiyWnBr@BsJ;;SllSX>`T1Dfnnf~uoq(@G)mZyIVPlj63T#QNPhm)V3b8=`q8(cMqwLz zg)rApzKuFVpBKj0<*bnUNjL^RN%Bj!fbpN?iwnWzqK3=n5aM@~|g`b)z!#(B3fofY^U17=1}>Zv!WV^IO3_K^oZ5PnGVsV~B?HOWw4gms+ez@Fj%lzh)M;C~7SV9Sy`Ve0o1^~0QE z@Oa4&Lf;Z?V-Dt!5^bYB8+@e5gcgA}2!Rm*F-veJN`Nedu z_G9t=;O|I&$uGe8Pv_=)z`qx!u~_o5aL$?FzY9}@jA343e-#)VN$2L>2OcY2@)&rU za3S$R;V{k{wo%wV9y}miFdwWs2Tlf`rt%ZP=NR(3?$Ga@hg~cAIV69Ju>URaPgNdv z9`>v-`6t{=+K91MI!Wal!SjSee*mkVp+AEmNA2>U&eG+Ee3SAT@{JU2g=YlbS}*UqjH3K z4j3iuhiymc7@_h

3=i${(fuOLM{~?O!T?l=g2ie07xeZywDn+P@_c@DBV(y;d*Y zZxFWWIQ)tA*^YO$8`rCT$om4vhE%WGkn4R{&JDx=NBfjVgTun1%fVxWZRj?-MmTpk zp0}#AQ@%%-^e;!>kpAAwz=r|HTi<=26=jXC#% zQ8&p1zYA^-tqDwe@9hmwR zb#WViAWZw83d|{#PxD5F+Jy5lmu2(c5vDo3vO+i)I#*5+4#GZ_bA{<4wv~0l`LIc4 zRMLg(T~F&{-K;}M<7FUBIUzQl}{+2 z1b#{Re(>AE^q|l&unWoCF)+q3m%km1V{|Xqx)ofdGP}VCDc=L8xx#H;1iT@X$LFBj(3@rM1J6-L z*<+zcR;Et#|B3u1ntv&Hz2wt9xv}sG*7+&$iJFi0j_sCw`rKgbsVdV7zC;;)J{D~t z-^)c?$KHwY0jAg3N3|T1e^O+~SI54f`504U|HHM(*uP0W-G_^y3~E;n{4r9jd>MGG zGW4d+Hkk>YBKf(i z!P8tDRvoJOS0f*NN_NPFA5}F8(-X9-FwanaU;uoQGUmXlleOLpz^7kiHD1mCUYzYc~^kPdk}z>iD5jsB@ZzjND91FKEE z==X8srH#3J!KfpIbLlm%QOo%XSp7Cw3T_km;va(Ht5jET7Z~kghCRofCrtMi#-YEs zOpMua_bA^7epUHxd@iRt*vr7xxJRHmjIYyj(AM#=Ir%(YcZ^@F`RM2I$1A@NhRylh zTJYr}Z=Vm|jcZP)%sWNCU?TEiH!73X&GA3e{G-5+sC)$&He{Q>0*3!l8w<9Ak!HRM z{1-z8wk3HRdct)@=3#K2^0VNOAyck(p-mICjiGOWkq)TN6E^C(A0od~bS@YU?w9<+ z+2AdbUwA+GY+*maF6<~}n&WFEEoU42@c$xA;;8v-ZKI5Nwx-x7w5kAL#4PTmg zt*{S$IPu$>51*R&J@^9ZrPst?sh;TniO`94CYcvhrUs0DDOUMOL6x}|U$+>hycb-l z{W1kSN%D)(u1PbE{KK`Jg~;D1`s9xW!@o&q=8SOhSCNlCVjm;kBJ6{{leQbIZO_|@ z{IevV`9k3$)IUjW!VI6IGCkXnzsKMkRsI{uNB@#c5%KN9`9B83|5;Bky`236eQ$@k z6q)%3V~*hbe?`uKYI2Im2MAJtRYZYr(cz#u#9ZAb+>P*C~_Ew-}7E!}6s6 z{lXy2dQh44|E0l?D8GmN-x>V0FzfS@!GBhUjjcBfMtitk(g*W`!xS*V(TDbP#Pp*3 zWz5jWt}r;F{5tX{8$4B*^r7$9aGAvOmCL}j1~(`}ABs7^^2F>Ox9%*p7GU}zhwNtNWy7JA)U!+XsFIJ}V(MQhynLdAKrnL?UrHPZ|1n zvDUB*G5U^}^zn`{c$_lIr)v_Yd~c01m5(u;t*c&{$~@9wjKOUA%?2N;qqG@b$_C$k+b0NeAs;+Pix1 z6B+v4*83A>D*qRHF3JB!ndF}{jUD>v%#}_ad`f>hK z$angYSo@LYW}nlKDBtJwl*0j z+o-$}oH7_=kgt7ukbknlrzmeh{+R}&?^u32@^=}GzN35__4uwf7=6e2-N?V$;9HeX zL;k(OP}A~Z408FT=g$qs8037?2kp%AGs@7#_oBfVgIq7{;rpw>Zz_{M|8yBcP~@Qx zUEgx~$jd?BF+-o6(FUXM9367de_1|Q8T#bRF&KSGGW6Xmx|f>e#mdkp2X$~h@mgil zCn`+#$-#K$x=5cB4aOMceAp*vz+j{~pY+*j@EO83m5)6P%TW2)D`v~T&fpuAsr>I4 z{C#CA|89ft7pCvl<~(HZFO{i{Pa6COWzq-Zj&-;djB&^O6EN1nEMqPurtdHLy~-%l zpR0^==)MEXUkt8LMmhfR22WObDrdSfl`~tJ%BfTNSHO*iywP9&wT8UYUnH;nMdO05 zuUKbd?Jt|^(*9!B{-S>IpQH7@0X|>PEe1PdjTrMJmpK9Kj5T7+lbl}*#yrVPbzz=l z-UhzY;JcKmUd)puLvxfL^CZg$z|SjF`7bI{`ETjH0-WN1SGfWFq06}*4SNa>mq&7cg&>2jRvFd zIG^;n!{8q&lRiH-_@}})d_VVB20yAyIy`MK`ZTN0UxlHLmHVbL>GQt9|5AoN0gN?A zw?Mu!^a+$0JVMw;d+DAR%cJ}N^k7E$0nC$GK2({?$GFRuk8#IL<*zh&tuWm`32ZR< z^UA0vkT5u@O!{ElahaEbG47aO2cK@ppQT)b{EG~}L>ayo_@=OR8u;7FRL=KRhIII$ zGL>_`!4E1^IZp~(cY-k=X7zbNWvHB&l&KulK{9k55x`hwMmhA(=c1gv9L=AA_X2}q zFP2A{d7}-+y2kmi4+Xp8a_+;sjxXye@O;fDK3th}L0_^w@iJlChxawgRM&cC((`i$ zAFoXHb_!cm?@7v!;C+WOmGATsm5=Lj=RRZ})-q;l-)@7iQ>Jl@{$d$o^cVAX@DB{W zTlrq(|HR;jlpja_V+Nz|xEz`bpEVeLNBK79&%D-{DE>r=2t$K82!lH z04^1_@CueGZv>Auc)T*&7(B>etZ}U8cI4L>yioa0r`vjpA$uOU$OzqvJ@^isoRbC6mJjrEJTQE;Df8UV*m+}bQ?%W{`8l>?h|eg$}kA#;{;2lCG|s1mC?pR9AkOnGUW((tihOP zSOz{upDSd`pQju^{^17KDN~u4PqO7>KFO97!`{)+Gog&}SO~jtK5@4&{kEyF-{3DQ z4((^Hc zpHwD2_Zs{sWzzFCga1?cI^@4&FxCrh7xbjLAL|M7G)~`UiY(}&;!Z~kpFXof33U{ z`Fjm{^cR0lL}jACvW)&>rgG3`qa6CIh#6z2s8|{06rsO3pBVk+oLe-`;7Q6T z$MWO*f7-wFlUc`xR+-oq68Ml?#~1Mw>^U5H*od$7C?7WEdq>2zm`5C$W$-zN*P=ZR z9|QdyK0)=NbMfNxF97(IF9rvccZ1P(mVrN$&dhg$OND9QNcvMgeTR*H!_Hg_cJ$v3 z#<6TUXbbaw$cOEi9|5CX%#VW?DnA8AySVMIfMG|z&aDNnRqh5iDW3*DLFL~7w`xAx zWNlPNo2(AyV(@_4^Gq;&m~DG5c)RkIV3h0Jue1IabzdJJRdMw{cXyL)Hes^~fxM8g z3rR5HH9*iHAPEEn1f(P=D!O@pk&uKWK(L8PfLgG&LZK~M5UgkssSo}t*0!jqJS{4< z*xHuXH+*SDYg?;6Pf?NlzTY`>cQ=6A=lSRN`Q1;l`#m#f&YU@O=FHr?_uc^?F|TJT z@M#Qvd7V`A>;Xm@jSm6uHux|w@^tzU-~*=bdVn7`_$2V7f~_K8l-IuzpndA7;n@s) z%;0Un#|=jPd_Gb8!+zis2BRMJvcafFoihHA0sNl9Y|Hxw=L3Iaa1rongG+$V7`zDW z2dVw45!hvLC$P_8$gz?Qh8&*jYJSM!dAP=ugSz$DK^lEXV|-gEuQBBm7(5jivh1rLM= z9c{Mzo!5ixG01!G?EbPk!sC(8|LU;`U96t)*yQyij#IY7+GuP-`L`L2a@J&hvTn%O1}uCGT>( zki_r{1kRTf@$P`n%Zzw`!1*kA8-RZ4=Y?|2TLmth75RdJ^Eu9W*TDG<=EY27TbpT1 z+jg|e*s8Yn0+=4w9jo8{Acd=IDp%Fv-BPv9Fu%qXm3TwuYSROf#8)>)vRB}Ze|31Z zR%F@*k{bCkCnFWs!v5@d?=@e68(FTll`lX29~@Xi=%9*qf<6k&xBX?0vtdXecAAXO z;~@|cF}0g>`z*berQec19o zLPDfGww2|nU!uta&A1#X&kbMXJQq5QJj>RhNOJ0FlWhD`9DTKNA;8MtwQHZT$uTGmrXRjqeEi#U2Gsnf77J!}(D^d5xfLd6;)Y@|FWrUK0Ls z@cN(5)0DxGseK5xu*W5@4W7q`B+m6(9=>>xZv^J{(80QJ@LtG%`gP#m@8d|L{TNg1 z_U;BYWq?%vACN^`*@rFf$4H3an*?1G3T>uvo`rL>$a-&?gL}}nBaQVAHF>o2)4&n( zN{T?Y;NL#%dLKsubuE&NT_^Fq8UK_Qz`xxN=-p4=0g$_qW*@e^-yk7E-fqLYSe#_a!>cH`Liu;E+f+7x--%y z<-Q(f74QRX4XDiCEae`Dt4YOosRKRmz|LC&i#j)+ZRzq1@91(bTC~LNyR^%F#qY;$ zR53+6m3uONKr7pDQDNtX8OgX1rY6I3WnTx+oWikPbHDQYu6aXSy5?Eiy5>ztp60;~ zbM79sD!Q+)Yj#XQ@jB(}ns>IPVP3bUS$;F>qzqj?59RY_w~X6Vu5?|2as}PGi*}&i zfa=}?UCY)-U$(GE1xObj##Y;XeT%jY>pRiucHDXvqbNjzz^OYmrs`v+edueC1!?knTh3(9?A-|t~Y@=zL)}1_&`qQ?N z`m;|W^Wj_B+tD8Oy+WJt&+!|D{}}vpJjdamYmEfHmlDTk`2Q6DALIXD`2R2be~ABo zg6A*&|E-A-d544!M{WN+^7hX!0s}5##1zGQl?uEd!HjPdlvu^@euoZ7jy$C0JFRGD zNeYA945yBFCgl>OlsS3FrOkseu4h@_tQM_SRJ>qupMi48FmRHex@$q+o z_cK+o=nSAd_R0~big!of19BcaNJZa^kA1qcRP;XJPh8Tt=m%ItS04QzNPknqn8ARz z!q!Tq#*72U<624#76R7eDghgy#7scmK9?kG?2f?k5!jay>`*c6?jy;{hxS{`p{iAm z{};8YIH6`m*)iw~#{wzIPB7}m;7WC__k%gU*`rr#yx+tsw`AEC^A%0Fw9TIb(@xzGzmd0@ zH=a0N5_vZe8hJt1YHU`4^w&*GDuEYl)W&h_gmL%~uj8LaCQat}*FbF}H@56l&P4mBm~zey>hp0`BRiHGq(I0u{R-D zS*v1xj=E19yB=a4#+I13)N{s`|B0Y*G$13m>l_G@ZZ2n^MZQ~p%p|1J10E)x7A@a&lhcsI0utB~V#iKO$4W#4?kF9H8*k>FR+ z?&V7bzk!ZgvP|$>!1Kxl|Cwd$^#WlZ*|Fl+AL==vs7LSt_oL-qtD~63@t|CDVjOV5 zs7F#r#W=LnDMQSFmOFVzD04L7jwIp@QG)z^K10mHsdsm>Auw;Keffr%i=1r*hPZ+` zg@#ywoO`DlViB73c#$FClxkmzAr>=djv-1>=7IT!xQc9x3~@D^Q)Y;pz;^x8ROF)x zH>2lYvgR178`Mr~zM*qJRisTBb;v|sSTyR8 zHtqth(9i)<@AdBhlBNTqo+fA1^W;2%ng;jdR3{=hPaA2``C%SibF_XNB0FWa9#jrH zSVmu^X|xy8RgC3_J7%R3$H!P%;QyYO#>yc!U2Tm({yx*yd~PCor(3G2q^i+ZX#w6C z3&AJ)gb`3gYzsj2i9Qi+a-f!~jn^90BK?%nF#ULp<2vZ{j_DkP6!nPhYzQh*kJ!$J zs1oyz?QG@f_ZPEG8N?X1&vt@J5ck;qUWJ_8X#+#KVSILE?}hnn)ZmL^Guwqd}q&a$-K#2GR2y zX?LuqW9)o)nx<1!`uj1CcH~bpV%8Ab2I~N^po3-jk|Fm3T_#f-9l_Cky`hId#x0vEy*CkRFq~ZJq-R{19C_e7ho+k-+GTC~Z$%n#T>V8UdKLk~x zF%;b=v>=Cq>!C)c#b{%&19&Aqz(vo_5y+8siNFBhT!Gnu*9qjA*9w98fZZC#!uaZu z(E0zDEv=TlBprO(1&Olb5ra0?At_sW6{sj=*r$@kqys8pd=LG|vrpIJ_QJAple9E1 ztP?j$YVpD{ag$uyALD#lH!qA6=hLO)y>QF8HBt&jid$n!!9a0qWS!!LapKlUe2beR z64H<~+sUWR%+hUY!lj6qmuNu=Q=rvQ5tJ|$*eik(rV&RA&t=52_(?#N^msjzUPLU7 zPben#O8N|9F+{>l;Gwd-ODKU+`ce}rDpbNO!Zcx@O>NQzUk5IOCvp zs*L|=I5`fUEydlgp^qJTkwA>4_?v0-_zfe#uu)RSGgaUOz+IZ*UJTbbOpEc4!@%+N z_J?{-D)3E2>NA@2*EZ)Vn@QMD=`M@^yQ#YX1xziI2zB=be3!sOTXi#ig;4xfvASIgPcn?oGf-Dl6f4xx zDUrLu59rb@PeM0%hUU_Cu7R%2NdGu*Nue6Z-w!?4=amv}1-vh-DYs6^6UR@a{1DK^Wc>hI_*B-Y~o`41XAgd&3ZC za(2c0!tjAG+#iNN3d0A(5a)2VgacvtP#FH7F#K^CJ{*Pz!w|9D7WR`cd^8MyN@xaA z!VmPIijojDs0_W*s{J&2@JI}*UuZuaJPHtQp)(5jaw1<<0yob{snP>fGo@6c!-t9k zr_`WJpA!d8!3xAzFAkhiPb?0cawF>cmN;+<=DCC)i36uJfu}7XGO?=gwPg!#1^%|2 znWVG<|75hJw-e`w=X76HCOwKC=4(oZQVRgSjghKP6ZD72E7@!9?1$`Z9}!{>ODFt7 z%h;}mODb4>N3{ifso+VB(zT}|0^5Nz6%p9BKx!&k!~&^l#PL$)V_HN;Y8KKOMMO5U zB?_eG5Q`C0FCsP~Fis&t`16Rxh^go#JFcdpmpnsLW#p%h1`}V|sT7x5iH%^C6~iOx zD?sl;{W$ceB}LMIj)WPyvFVQi)(U(E+=pq1#9s`>$M4y8e!#3c^<`K93yt^E9gA@> zd^v1@-_aeV_}nM!xOB($2&`SQ@J)Bzz^?WgwjeGy9~f+ia#;AGTtmRg5)Y0xgkGxV z8v=flxJ%Bm(j9P|#9fn2&PrBVXb8AS;x0MmO6L+YahI$y)A=&5A4P>vBD6n)WLx{s5CJ9_ z?fWQr>L_Y&p;5`>jNfn_1;5eyCa=c;#}G*8>sSXlM|FUgV{Vrkwbq7~(mc`W))4xO z=E(rhKH<^OG3q9;Yv>a84HH}98nw1!4GK*l;WlgqB;?XX zI^P5kTjCRO@#)qyh&!Nbzl<4DyM``ZyM}IIPffRGgT2p)y&TwS*FJ}YoD8R1^CBy} zLRVzM4O_#Dp5&BNkgy zNRJ&%SudfB)e+0C7a?kJ^Drdo)3Qg>Elgc0QIRewt#~+{FB4C_XcTtCLThg#wzWdU zN!(>C(gjibvW-^VBur?udRY7DQ5CdYFO{kvg*_nCt#!nWro?&@ExJz;dtyu4O*%qP zY>8YPNVgbk_H~YGqoj?@=o!^UNr*bJB^ykMTS;s*#5YLXW{7XH_-5T7h(56;+qA#m zPPpB$U|l)*?H!}AS0u!4LHpM2HaS>Nq+YVe5L-c9zMr-ogb|l|iMFkiG%lYY%h;Oq zKG0ViTKBUr-TEQYemn|W&7zXM7?`iAQ7ak{hphWaI7}rdnf#i|=<)!G=ux;Q2y8#1 z%5DfC@gRwK>8+*d7V1x%VI=$n`W;ZCZe(K~r5>E}dE3~}$Yl4=A$Fsgx~#`Yj4^DF zlNf7=CrFGl#FHFPw%a`gVuG2+_!Ik}-uXJvsC~M@h3VFFsPE6F=rL$eX1ma@NZ1X2 zo`gM=eoew2u`jT0J6`;TM68kaqHet*en-MLs!=!i4{UJqs8&s!AYpswA1Rc7xKhWV%dW5;)o>?qlPR^ zcMOD_r!l#3HIfW-{n+3^aHTnUb@daGKA3Kmw+53PT`0XSZw1#rsnkmJS(fhbfqF}N z*O3Tm`_yP^=u#+*D`y$$4$v7R496Ix)hbyKVJb_Bvem>~Hpuy?SzTc+8}jsFHH;E4 z->XN`9h14#i430_JM^bhf4cOigjhaMjtg=6)2%uuT`ZG>{#_P`k`jZb{U>&MI zefl%e1ab$atPH+yikB@j4(rZHWan_1l5t$q{t$gq(@}C}6c{o9x941g4>Tu1uaE`9 zWS(iVs2>88c^1f`en=9rEb51#dpy%*Q9lITfz@IQPtH)3oZpW3`9_1vK1S~@OCj{6);V^B@Jf!7Bn-b`o z%>BYJmU1jae0{jB9mqN}Zp{jvmiT+CblmFZMj>`#$`|$$;dU$|yZ@j0WJg-!@0pJN zheWdMBN834_Q>4t*it@$n>SjQQ$fd;x`|}KRnP;t5otw%Rc6gCu$JJrzXIzjYkYxq zH5N&cEZ;4#N*&)qZkbi`xs2%Pp-+bxqvBmZP_bXg{Cx-EEnHON*Qcis@>8~%; z@Xzbd?EYNIXutmkVGcF;DALx11oXFr|IRNq7AyZ{sI0cZ`OTVSjDM&<X^66#LeTZ0RcgnF&*QO~Bkq4jv9gF_I&x?> zo^+jaL{$8_wb@1fohmNC`$b9D+L?GKP*2azVXgVx92bOgSCq|lM1W(NNkF{#cMs>S zl;`-+Wqpd@Uo0FbiGOS6rQ@(Od}~d6EB2ya)l$<+vbnBmOl!qBc}_)DUAj#6F>YyX zwoyyfvX6%`l80xReeeJI9TP&Sg>RHm$4Y5D*L|JDt1G#x~8^bRU@{t=LYX%>)Bb6 z7>}zgM=Iu_w)Sf90%J}KaUi|529Kc#3wGnK#$9Sc*aE?_qN2SXiHN)H4J&E{t!ioj zx3Jb#+04;+P7+(l>rKXy7o${N2c)*Hs-jeo)eUV`!G>l-tfl~@qKwTg->Vy{Ynnq^ zf@2jP*1@*-6?Lp0wAscR1bi9B6JYO{Dmzq@^ zIv1{+H0=gEvtI?@vaEqPowF?HSBP!g+Zt}Fp~1ODY;#pbV-2@<53a6gT*aieTD7)f zMMZrDo@A=7>1ZPZx0|o1R;|tLL0lhdla16TU2^fF*5`3&VCL zhF*aoW^dj;cX6c2(8f#0}w%JDJLZJZ))OwL(na-n^=+ zK8R}j7cZ_*6~UH<_Nscdy0)PaeuyGXRrRZuqoK{UwLx4_LO;r8_7e*7OWLsCd`GZ# zMKcCU<&CTqMH?qnRkQ?Ka9KGRTxGl^2yt+L=B8jxM+3GV=BD>$S1qb&oHU_uZc}?n zt*U^cRfr&J=7N%7$(0Ld+2f(DrafpHq1tF740`n9ipo}Wud!fbb5mUaRjFXZik4Na zHNh5Kt*EG~s%fNGw$`*UI4xIg6)RdAYsRY}omZ`{shYS3`G^MX6-`x$`W1~q>4%EO zkRRD*lX3>mf0>E#G`xF7+`fxHPwNtdi0WQ#@Yr1hDgKF zNO%U(coG@|=anYG3z~vewJYFrH7y~wc2(1~x}gVjkskXnbnKpL3J68lHilz}u>tTlIkE(}SiBGv^nVmd>3SoLRPbesJ!>(pihkW|hD} z8k;L&*oclX{P+saxUzV0Ntk)|!r+2gC3BZ72wuH-ZrQBTSu@M7TwJQw)GeYJu`zW! zqcn$Ia7Hs6`s!H=XO@cj!$Y#7q49k8$E+jcqP_;sS=Gb=+}5sE^X?pNVnnMBb@k=C zqF`+k`m?IBxs9=m#vgw%>SWI$wV{P!sTDftnMyS^R93>d;Z74O!37gGR>S8I_gWip z1y=URZmg+pGtmphT5X$!ZLoOO0u1L8-PH=eKR35hOXIQ=Fj*q7-PDY=iLqYs%qvtg z+`I&Mp073WLN!XL3%1|X#K%b^_7sPSs#a77D;t*wv2Zd-M=kMJ zJWkxayaA)Jv7)W50S0GR!PskHz<$Awg;#Pc*9B`4rNWsQn+P?vwY1E6{>xE|se#cx z+@8|1;>Bf47U__y+SrTz%OTLg)|kpTkb;%X6|L3aS>14TLv?#S0&Y!h?Rfc`pgC$* zV_XDv1gx#bDloXZrnRjBqb}GosZHr<6&io=F4f%HzyhJ6w0KrAf?#o3G2E|h_T2fi z_+8zAbx{MFrafu`W}apJ*S;iW?Yj(Ws^I)9XI>FpJZt8X#ietvniVXgYM26LDh=uw zMEkdMz(m+$&XTf{E3aN?>}f`Q5H8u&93BGN?g&PDj;w3soT2?yW(dT0%%L+lZMLfx zJiQ#0(2KBL(ZP-c!)nZUYg)8>1~IB?Dw=TnbrAC-CWw5sc-B{fr8*`CwFOrM+prun zqfuu2niVyzbr_OsRmj}-*eG2DpAHrTCyK2@(}QRcY^iAH8cPM68k#HZiRhAx;Ws6< zvJzQUxfT;Ow~%jcIF!Czaa5YlDsG8dz&hm0oO_ z**Y|dmbB4Wdfu$YuY4V~l?xcH@VkR7ADU{`U{2&vJts2R!IBY}_v)YmF6NAUtPM=` z;Y6z6QD6oQ7cqv8lF5AU7!$B3|Ljg;V?W*Qg@bCWJYpaR{ z+KgHAue=(kHdU)HU@x>BK@kgK#x|N@4Nagu)%cW7UCY#3OxW_;1XWkt+*-x8b|@5z z%fT^a;T9gqGw07LUW~|AwxkrJwFXOHE(K&kt`nBabbvQI)Kut|aV>tzglIkS>$O~^ z9*2xZ*C?D^uLw4+g7cfsxO~Z6gw5cbS&Od>PCRGU56`k(skJw+sWN?oFp5947?FXe z5fP507nCqdO>O0znufZ1ImZZ}%0-Oje!h!kU>%}xXqpaIw>1a3#>Tk3eBqM7%<XU4k;rMN9btY9R$=^x=voR2(YEQ9ES$BJA!-()Jc5In zgY~+vpb&k7GnQ5DW&sP88!9n=8}-mN!7wzRU>ennS@R-_mc~_WLBz?3c%-n-$2ta9 z*CPd5w>K{jVsZ`5HW4a>R#E6cS!74_U2Ubzcerb)0;@+X=FKpJZLs8JubR0EovT+& z_DDR(U$NW|wxXe7L0DX&4A|N$b+|HvR?ku9M6$Y}7WFhQ$1I^&F}ej+m^N{i($F@y zsja599X`&}2XWZdytSHS|9J#H-hh>!th*QTL_?pAu5M^+U?fMRUyE_FLV_e35I)P$ zt3G|2!4uh1^l@`5*ZrnXI+|N>zPY+#sX1S?jezqIIqQP8xN59z(ibWsrd;Z4uXR^9 z80W{u2kCOehP5@AgD}J^8e8gdj;2qQNd){V`uRfFz(+v9Xh$F&e0!Oa>@ z)vank+cA5!HX~HfQH;$RYHGB}^~rZbTd=AF6G9Vy->p^pgx@x@ERZ-u80&BfTToHg zAm`LL{c4qY&YZlUh9&cHQpm+eHAZQ(oI~k_gINX9xAYQCP7l?ZdQ94D^+_=oANmxO z??*u(na^v25wn(_1@s8HeCcA^`AVGpVt_#@V@W%fae3alT8CcrJr_7UjfMeu8ndbf zbG^3PqzU%Q0duzPn~^iGJ>iK9_6vV&%!uI}Qs0cn)?^;QRRk_n^aod0t)+6F6d5R> z2c}BI16&O;W4Sea$;Awjey4S|9^u{=Z_tLVmD%h(pTltH8Zhi+a8ab0t7jY#FdPRG zTF}r|jle_?u+3o4V3-IS^{miRC+F`n6`I9g=<1DLRn^tBqkC((7*UatPM>B6%dS~8 z%a(qDNz87ex_su$O9Q!b@p#dqnE^9V1}01%Gd@qI6kec<$MeK}mU49#%j>A(nP?7P z^PXc9xPrZ`*qb{uwpiWen3Y)Ey~DNBxyzdGi7qaA?bTOa_NwAI$3jvszw+v9q-I4D z6cZ`?Lf6mr6+<$*lzzsUP#?H}8p>k=Xno;Oay5;l@BspsXu}6+Tvk>1`9vQv5Qg8O zmAc9_@p5B#*AutJLR-GdsF@2J5n ze>{T!ecUi&%38SFB!ox9MT{K2b1#%$AAvW77%x%Cug5Bi#rr;R#oBFn3 z{oodU?<2qaL8RX&IQ}N!p91}f@hM)od?`u zcxr%eH|f)Wzb`lze#09v$sfH2_;-TUVc^#dei`_0f|D?gt&asKeh>YGU#(cyvk2Ju zfD^xGJ2E9b0l)1!pa*&4@N2RIH=}6W09-6M=^EgLg89%lpT#9l(pP}%1jpYE+$K1o z2)IYEk7e%?>^TAafM74$>-dS`{|xwP!QAV{@oT}lF4Gp@V)&V9%YcV~OTz-wr-H;GP*^huU*E@-sQl?&b%4hW$f(v0dTR%jOhhNAM3i}fWKza{~Or& ze-z?^%lJPZeRSK*hhe$5bXL5>bP34e)n^g;epI(BcDDN-6iSn=YVfD zJSZ2vNAQ4afldF$9Rz+{(yg_?C_^0*Df0utPWXOwpD7F8n0Ubo`o^RQcEH9lBLwq? zNxtwyxBUU&BEjC-z_1lz3APs4-i+-C$k(WY3mfjkKq6R}BxWVcs#E@dJ%_Wzbff5 zV}QRdI11w;7J86B3F9*MM}nit1D%-8cgMy)BRDY?_(j9>FW}b%51{;a1@m40vG8w} zjrs=0LxW)FTwtRQ_eJ#>U-jM({2k#*I1ap9unYF|JRmssNnq4LnLhY{=V^oA12%mf zzXkXuNp~Y&dfqm87Vw9H)dpGmQjQn8$0Zt`dBCP$lB$98Bt2;o@KnK`zW|%QNQ6wz zC6wbi35-4?jysM2<)-WbU^DjPTYzB;^0=UX+-AWJ^l#h_!3leSZQuR`_+d$puK+$Q z*oS_PJ7)O(z$XNAK974#aEu4|eZvF2;?4;6VEo0q1xE#dQJ(s^4*`!7Y@vAB zhDv%A+C5;T;KYl8@lQRy+kj^XPH+J)6zqfVGscl8@yEcmg4KTjw+UuH4_I%~KL);C zu&W#RPQgytU;x^q`{-rVXY_PIhS&Ip5B=-S6&??C@lF&R^A7N3f*qd$!xoeieFt!v zVDBZsLBVktf8HAnPbcsy!CW7CdklUa*!T?Z_4j^P(i8o_cMDFs6nMYjgeQT`7)kgY z@Kc5d@y(0zMtyjzsn__-fO~=8l=Rp^z<(EtkQ?ToM zz^1*NSA9byT|pP$MS?w*z{Up>HUUqU^f=hScZFci;XeFpJM00j7Hq+;zGlG=wB7f( z;Hd8dKO@-l4`B4AE=!)*1;@cBeSZ_oc;z$w#dwuy=4%(^FKbXh|3wOy^^_ zNuve3p-a+a!R+@WYsQZ8skBAe| zk4bk6=Dux7#t#SF2z*r16FvYo{pec-{D!0_!Do^_73?{Jd#7Usdtu9gDT1RO1BQOA zi?M&;M8VM`fQtpk?g741aMEVr>je)$%ox}x*!LvxcEQ#Sz1Zd*QitRnCLKB?8~xeW$*@;Qhm(ds71sb=Eo9if^MopK2Ry^w;Nnuqn%GnWqFhuEzJrg59)zpWs;dcuKTj z?n#>x5NyGZQpOmJeo491@K*s}F4&E+&i6U6F2@VNrmv}6$`(m?qOVdO5gdhfr#x-S z4g@|fI01f}@}a@#A3pa)ncTB9l{NzQU`(Yh73_-#Mx0{0_nW}B|6p9CJ}K!O%c*}7 z%=nP{wqTCg)Q?Qr^|;go8M-dWPxA`qm`xiZm~kL2S1{v1+9bh@18H*wN7n;iC7ANl zU?Z&?<(vLxOh_~RtL2;i^`URmO#gC!ytF-1Ht|(p)4vM-lV<$Tf-k52MRXOiw{z+*s8_?k%{iZPgE9Wvk zDB7KO{1HU0<~K1s}dY=-{R;Q4s!2)?V+8-a}+J}B=Gn)GeJ9fBP$;O`p@TltR~ zJO>!QOPe^0fX~1mfq4YtBt7m8;6X-z%pCzUHlrXvkZsaow}9P`=;y#hll}s5p~xAq z8W`=@_IV2!I_tXN;{o)kPX8Bho$$xN#(^He+%Gin4Z*HI0K-1o&p!cvNH88+Qvr-U zrfY2aly4jjJSpiKqc6$h_y^K|6~=6{wmAXpr7>*A-?2g%brADGeomqx44Y{DFw$X@ z5Y83sfR8BjJJU6WeKbbf`FjenJ}~w)hHVvmK7_v_*rNRFBCy@p=r{gWMShDIa|yA7 z^3i8@pK>j$G39KCz#9#I6zPZqnuqwi1|I=NABW`JZ*VfwF}8I&G318IJ|2OeGMIAU z6Pjl#@b4mc-ZGeSP8kf}QSb@P&$fJOa68)Rh``YXcY+64@81N-pXqd2;#9E-p$de@ zGRY8+%V6s1j^Ia(3)vGg?Kq&ItH$7E7u#~2{%~1mPk;UtyRV^-%}<{RrRRpra=(I5 zI@)aN{a^0;W8b(gyT$b13n+9eo!Lu9=brOJpuGvs`9DXVlN0gG$XI4MW-_lKF{AK`^h_PVhWP=VaqE56)BJ7_F?=} z9&KRDs{)SD&sheVb=!w6?*=49%6ktq^`SiS+wwYqDG#xLhm$d)h{znaJjAqqd^=j##0K8#4%3^&LI;bBHemgYMA4TOzdLIz;lfEB@@_hJ@#lIbc0B5k?pWxpJWJipBjzGg*0DRK;2i7 z*P~c>VY%#I0r^jEya)SX+?uP3?&{kO`Y>pRp*Mqm0<_c6J)j>4?J{%==*K`u8M?e@ zH}v>MQGQoV?&P9%eT#Yn&~f<{9a~VJtw-l>bzk|tJ*soJmCbzaCDYkZG3Z(nqI|tsdOsH*_H&81+seIQuqVuE z>;a?qH0i-N^RSPLn|r&kew(MWVMxbR=0WC`0QRH#H_F)jU&KrOitbV;pvQ66wY66T zruQhdX{u6FcIbKvxbM!^3hYmFx5~!8HM!WQW;EK=KK-y#)1g!Mt~WcTybAu^`2Q-( zPDlS?kCjc`D!RMorH+lSsi?wU{Mg^8TvHx{5BZf7{K=bw$}y!+&BmTC1Ma9$?(I*i z*zK2VvB)7bL_+K}DZJ){G+8NJm~?ybXA{MKUSLpzgU1KE$~Nfju*%bAaIuHw5K z<@mPH?gHpBdOgbM`cZB@%0Z`O?#TmP&fAY?{nKJ6+Q$Ft;A34=K1lAJi!%4C_;I%? zAL=+cd7iSiAkF`nRW`Y(@3XFHA0&58nV0;~T5jS9w)H_(y>+f* zLvIj1H5=vEInS)TT)B(aMa|h1bR3z2_D=Tn9be*(zHHP+6;r%Z%_%&otj<$K`75K< zr|`|fuIoNXzT0o@=$)ssx5Qf8p@-W1jDHdRr&~KHt1Iu>j){4FechAi z`X-O;`}LAM$lRo&A@fm;cdILQPX5Y^)DphRru$FeT>oJC!+*v~0*nUPo8%93#ioZtP->x>Zetz1#793BDUA&+9t|>@3>pN*#9x zeC@FhlDmKYZZdpFJv7a_t@v?=ZkO}{{BE~;xNw&`RoHFqg9zqMye z(6J0L!0Mf@sxfXH#do=q@g0S_PUG7udfc%TGL}L{ePOqwp1gCEqhvkC;q=`YKaWYQ z^}js$81_Z#E8K0B74{%zT@SrJ`{&p#Bca31s&I=3{@0bBjPH2-`|zJkSs9&H*);Y) zVm8ZmHl!!BJo5@~wr*pY!rg<4?6lq@@CN$M(xoZfq?UpoTuceKN9LwDB)$y)a*M)xVueF}7+qB7XFe@A~?ceX=pr>y#F z#G5xi)%#d6t+RSahfQ~H8r;&AXKh=OhrPe@PA)>beVrTT!)a{`&=&J-nwb4&)7bZ^8nL2}F{1k= z#FWcaJo?>Qk{5Fs_N^5^sJ;qQ0?G1Z2(%yQ$ zdd9JF^E-~)*cZiz&bHq_UERoX_xl|;?uFgYoiC7H&v^wpjP7z5hUc4DvjnMg(3#_6uQNwweEjPGeE~7>(cSkU8$=S;*IuFqY8g*}qSKBJyY zXFl`DYo}v7k$Kx0f7PU#zbtb5n{MQHa?#Quz4$kg){Mgx$PS-i-q`d*y{DxA_ z&9H^@#Cp(WH(@@Xe0;1)+kW`*AG56y%Qjr*!7pH!qG#a<2mQH#oxA$A~vZ)=)$^-?y?T`UT<+NIko2%%U8Hl_4IsZB^P$9 zIlY-y>Xx8-Yx8UB#O6Nr@)o~3**nb&ppQ>Mj}CknvA+&yf}XBi$NlO6+U)@S9`M8X zei7e0@O=W`yYYPp-y86K7~dQ5eFWdP;rl4QH{<&lzPI7~Wqj|!_ep&3En4TufL!c9 z>QMN0p-u0jKD~y;JjioG2hJN`-W0T4(+|%?%(tSjCiZP9RvBA{sqAU65Bfe8|AD99 z!E53`AGK8KGZiZESJ#}#}S>%T=^J-vbT@MEm`mg4+x8OB*T##!}q@O6xd7LJLHeb$g^MX;0KO7EKT zM)Ky@RXoQP^mI?ovleZ!RPvP9)EUq|=%0)>yQe&1jmEr}+w%@$OsvZ8c}8Wx4!*-t zC>OMfHuqVDXJ%l%v55*PIMpnu%mnCZ;f2_UL$c*8hJ%WC_m!b3(7LTC6pJ4yq?teG4jgH`Ti-!R-RvN zMqK1M7Gp5tj(bXviMNLlCr;|~BsXHR6=@q@&nfEZdvDzOzK@F@=i2|1ll_DZ@bsO*@6C#*S-PScD#iT=va&LeMX=6p+_?O(hWW05#KkAT8}ZdQ|+Y=-S2+d z(f!V+=UtoY4ImB%?Kr45kS?p@wW`#yCU(2ox7ybJ^W%{5-(=_|*Dg>ubo0?aJMYTs z&~@WHiv349<8~<*+fI8F@9sN_cD{vq;t=fq3BDg4eZe}|Cw)62+IosMr~T1hAMK9z zZZz$E_hBS`-5%nd~8&>-PkMmbJ~6gZ9j>29WZU*{{?N|%(Y(E z<)v6Bmv(fXRQHvg!u3^UWtY8u``Mmy%sKB&=@=br`X|Dl*$?cyu8Xd~TKEbn`!34j zIwQ;WLN3d4?F$?3CC&ctnuq?Ev__mi<#SA}jNx3Uitz2`H~}tL8RO7vDB#qdcUAS| z%lrCp?ZblKxjRom?glM)&KAsz^cA+_^YmmLU!1S^ygq!P^3*5P)?8_8m%?>ukF<4( z`}VW+=dRe9*uz?7Z~hWpra@1x6?whli*#b%=k*Ki%6cxOFLgEk`j)+pv)5|$?e2Yl z?O-hFz8~Ml$Ggz4k=NCG1E@PZc6&NIhje6A4L&vv>AY6M>ogp5wqJGcR`*ps)}y+2 zTiH_%D{IQhxSw{vdNLn8KJs0HXRFbV$&_1It|oMi#A)lgzEi-QqcSiT$r#7DJ2wv5 zb#w*##Y>Lcqv)GY*xpb((H_*V<0jW{Y`0#&VH};?M*6mW4U28vigMJo`ySb2ys&HV zG17%yW46n8Nws`m$9C!YmEX30-G^a=S7C$0umReSybHEn)>M6`bh}M^bqqFR9px0- zbDXgk{gZ3jQ_%ejw5L}EbbEMh`*k(C6Lpq7Bfp1~{Q_eyfWCQkqFH;YqR*elwA~9} zcU-gA`?6=l?)sWE;*Gu@J^du?)1%`luCJ^-QwYp!P*V=UcTo@jwHtoZU=p z&+*+S;S+uEiIe=zsPA9MzpY>X?(n!l{u$&q_RH^I{!`@7-&~xyPnQ+{3cY@ zqdLoVJ><(ab1ct~ERGQ~m!JFljfMW!V~;$Oi~jd9C!;ESEtm0u@-nlmGTY9bRr8WJ zR>?UR(|P{FexqLOH~9SN&JFYAdfNt-fmjv(ohd@cb7kUO^R1pY)rnrGdbxL|I=T5R z_@)cjwn}jBla1@aS?UzN^}6A_vQG6L%DfMrk2sH@j0?Q_yzo5UndqVKGwH46 z59;5!RrEe^!H`;6y|w%}f&YPm?`SAn%kz#0v$gyYEk$oFe*}+1nXTmyx+Hl5_zt=w zaC`*zdF`#`pH0?JC0Q$>s#S~sKWSC*{1z*ct>sIlB;uJe>guiK?V6@U)HIdY)HIEl zw}j)Kk;{ma1y3hV6%8&L+P#MxAySH0HwEwDoHz(jm6~Sw?WGz9>(B_n_3^a=^98>I{9AGLm{$=X zRxXwFH_%bnEff3}@S<|Te`eWwHIQFqPc|Rw1)!)y_&_=>@9M-oF|L(^k)Z6Y|RV-cEkq{x(kQ>ud{hFHv;Iff`jnTO^Z;wrK&GQ`zv zZJ8l%0$Ww&*7C3S+gkpfep|~w)o*M0`hHu>Ki_X_`4?P8+LTdGnXTnv(Ws}iaZ61H zM19b|14x<HZh~Xt%$X{;Qu>@;0%jX?fE)792R$hpTY)znkf=w(`f*;@WpBcKQwui63- zeWG8Ly}4retQxnLr-q1$(SJ7@+FQ&2!*tH|$UkH|8-hyIA=}vyRbu{OJ6k#W{ZHAZ z3}TErXgdLdjC#=ScP!hY?_X-zsyQ&~4N*g)#Sl=)TGU~PI@HtGV~BeAO2S4%G_aoC zhPaVs_84M0iT#FXB=N8zR*kVyhE&sI)WSFhx|8DSF@ab8WTDiZYOPHO|q!d~h=s=0rHs-u@7>s2kN-`4Ug{knFi10iP(KETED zIRaAw|L0rFyQiYqJz4_aUZ6VkB;odq!HsHdIwpF?0?w5A#Dg2_Rfkz3#G&8RA!;4F zAutSB#lwA~4r$28uvLe^?*krWw;clOBf4FdlB~Osa-W9W1U>c`r5Op{H^T5uN)WaS zLmjt=WB>OA%*wGA`qC3SoG%SeNCKTgI(0Z-V4Z+i5Icr+?(kI?7pMeSFt%_wHil0? zEO-Amb7l_b>kt#*FR}5Y7Z2xq{}N!}*x{rrhjXX-gdun(UaPYkc6N~4kdd#76`OBr;5=NGzXQWKWq zF^OrqXA-WVS)^wYuBEkP4Uupi(`608$Fc3zPy%8_>@k_O6A&t5k0nbtBveA?9NOM< zO8Vc2-iVX__raogKv~!5gEiyYT-uN07HZvmFlgLDT`Jy(2p)G(IAKk^oV8Ek2{7z5%&jl37*6@d(^{kJaEi7iGMM&CY+jhDZK5wT6*FX z%^?`x>`4_XBw`x&q()2nWyE5UM6CThsUAr$B9`?{VllB-(q|Bhr4nZX=gPV?3a z)mu@a_|6DVY?`porZ(wmd-{Xwe+o^{%ZT76^W7=_l*S1LFU>hSa zAEjTRS>oT!rdcF)JW~Z?c^!Y23k1iQ-xh%nx&?N&Fn_cXZW`MXJo;2WD9q$HOm@EeTPB$c(_RqzniwHQ#wHY^T ze`N$Vs~^Od4S8BeV6*x`db9eiBe+@pAlEh|ca7j?^@CjB0lsSlH>)4y`Y!Os5!|eP zkn4NE_mALa^@Cj7fnSkHe~{}ARQpe@!XUj_eKQT{{R%YmHeh&Q^?iIW{54^QZqHzF z!cheWh{Z00HFkS1U$j^aMi>CQ_wug*4@Z~1dYgA9AcIQoe(!u69`Isg0F(T%cj+t} zKk8jjYU4xRl42VlmReyKPwElDSc`a4f8m|YS}}YQ79Yhh#)DLONH4SuF_Ib9aqX*` zNqeQ9%skH_uhP)k_T2s5+pb~CtyEaxN${UyTS#0?IFx(M_JHzm0Yp@cuB|7lsdn;r=lEQ5ZfLhB)iCn|UA%9}2_& z6NWzy!-vE0U>H6UhCd0zN5k-^geE#AUaR{(fqub7P2!E3o-RF_wgD-tbdSzXy9M}8 z-J@w=CzKvd+X#GZv>gKz_v!Lcru;XMc~B1^S4G-4aksxi1bho!A8Q2M&SXowY#N4n zQj+5_A-16Kjn3Z*fl;4$qiYE3NxYF*ae>GpfR>XH?UJ zW$b6vpvD)(voo+v9ym~9Vn#i&#Ka6JKHx7B6EhlFnZ!gsYdmmhK$O7Jci_-$!L7j4 zFhp=rgxiK)!49$VlFf{eKtp4z%3TL*Rz0A%YNQB;?prn;r z+)O>5Il&BU)AsXaA`}ihpli>>bZPS7RXE!b}g-5i^#}C=u1u!5!uX^ z{?9}x8+bsBn0Zlz2t+B=DExWEV#G}Jq&-JxqANYQsp4#zqrvou?)jl{tO~*~ci{h! ze+B4y5Qsy6V(UC&|IhI;L*Qe8wE~|3_j0P9yb?h_xfgcO9|&|h_3N+zriAzWj>QPG zgJA=Ra+Koppqy;@9dM<%pUc@9Ze3}lH~V*Uo2t7N}fmPL6K+2X}t!wi0AzS z>3`O3_$%6w!Utis=Sgdps0i)tb7dcC(sleem>sjdBT;q78`f?tqCODCZ~Wz zydfr$@QJv1zcr0ct!uxG8B)83E?v8ZZedULTeHEw&q%tQjk9Z?Lqe|D_$_o`xWX%R zg{I7W63HUY?dSfIsqdPsC1RmgTI*`GsLYYqN^>nGHo?NWmQ2y1@;6{edA0Tk9Jclv zx@7U{x5`A%Uti_p>9n}}_#5OI>{*@|>Q z)WK|{6@rX9XhNga!`esZVJ|Ab)k~%7^RNMk-&#l9XiBUn(W3hlvB&d7yGcjr@jM|{ zu>987DYi4OjgmGpqbIM8k~R@C0dYz6Vbe%dy5AJesMouqj=D*XdZTbjn=ZivIs zx}SZ1zIJ!W4SC$1%g@&)V40rBcf9+p`$;%VC6JtQtIO!}0Ey^4>_r5&A5mpD1dw=; zM7;FYQor>GWdF@b_zCp8PUYRm#ymGO=ji!5(5QpD!G(V7Ijn&;o1({Hq%zxuenrA=@be_>q4aAK z_K1Cfb=&dcHzZ<>v=?>j4e>h?zPv`=;6Jdz$$71sI6=bp&OcH>fmkfpZ@rEenIstr zZ$v8hW~6d&MJo5_Nafy+RPI!yKJPNe9=3l)nS;sF8GqBAAsWCuA3=lX^V%EHP5;I6 zDi7PK`7O)?44IWo{}-`4uafDQ6VT&%t-8R+RK*8^IhZ0;SyEoBF7hb}7(kafLt=0q z_8|frW{k||Q$euISrS7rWiY3YL^cTII8Y?>`H>ti4ooHpGaN4tBqPXZ-$s1Qw6A~a zu6FzRTIiu8^B5)_F|1SRFew-z6H|s@)6Wh!Z4`}V3&M*711Nc3j2g1k@4!-bXcHzE z%pHzonCk|E2LXRLqON`-(g)M6My$bPM;FRW8nJ?FpHylkwq53T-~?vq?b5q^O*K|| zqo|>a?<&FN-3-5DH0T!$#~7s5Dp?R=DoZI!q&(5Ay`BqdC>Ny zCXhQYWet4+cH;@4f4L4ciR>IMQ~Y1mw7yWF>2GK{$}Wr0m;80zamjwicfo(cnBjZ+ zWXcfRxz06%&v6I1{uZCNW(5p=CyMv__#<30;=2EBbQ6|XTmdCbW zSZoJikhBBx^J`!SJ?pp>-N{ILLhxM-r0;pTo)7Gz!=0AJZD2Q5$1oTsCqDtqCd00$ zy@yo|#YY>u!BdHkVQsoEhRLPvz+O0(T$@fFh6TZ}U+HRwC7`#4OY4TA@pkJ3OY4SV z+}N!X>=RXnB|*-HVQlp<*18dXM;9LU_px$iXc*OeGbVpH#^mr+HyMY+-{O8QFrBG% zR=yZ(c&>I%r>uO7hQs@Y%enpVA&~O1=r|l}M=bswHdTp$=t_vFedc(|V!PnhZY z0u-%v%qm9uMu9WJa3;AWbrx08#j+Nm*pF$|;Xj4w;YZLuT&5jBk-1rm@jHN==4X|n zh`B(PRR&3gZZ9^g%34C9;sjY&5zCc>tgFeAs#VTf3b}g&g0G?YY*9H2&OZEzRwEnT zlXa=o%IPcXhnhVb_OwsqvtdxX*Ro+zPp(5tY^yYvyTOwJ% zQ}`UV=p$)e4w{j@ftBRwMkp`$3eC}tkP8esoB_;LnjGB-8E`qe>!ooyx)IX2oItp7 zIq2W)4cS`R;VZRibA}@+RgZV)(VT4jKDS>tHzx;5y&~S0GXge@HKH}=Sh_c7B(Zo*4(1;iL*$Hxihmd_7(p@n)_lQZ;qkv(DtH|9$!-yh znJ4Gx+r8YCDQ5!Bu|v`)67LpVz`FJbo&+4bSMbFs`=n{(CGfD72PC}^GfUCJ4MN45x=-Q5Y6O zK^c-cGs3WhO%@3lk|Ui1N- zyjTNTsNeH{*?SZCx~gjN|J-{sCrvZ8NjfH_r3KoiLt0A5q)BN@2TGGdE0s&8rhzmG z8Cr@(MimhR1Qlgge4?V_dpIEvaYjW&#U~;HK6!$Qii*lZp8mdTueHzJ39YDq-tYf@ zpU=BW@As^;&f06Qz4mbSJ-N3%ub5x{iV`?b&|Xx`av>oOw3q0UKNBBJQ1a{*#Y}Gr z3ZBhhIa6>X_m!AYUhnKEZ*X>$H#$SgC&AX^<##(6_Eo-FbTmB@TZA<|5?gWpG))h= zxvX8g%r%F6m&)wM#1$_7)89h!(ryO4ZS)x5X*`G1xv>_OqzvBJ?e zF`Cx6>Uf22BqgD5d)dtWV0=XxA)K>))D=BQ)`nLM5T}Eo;GD67{lx5g)mR{bOJvak z?lm)UBj&!oP!3f3aY5;8dOYXrYzs&Txc^ZhN#I^{<{5}2mvVeej$K+c*Dj?s z-D{=0w9zgVX?Q8e$29sUW9O zC5hH?ze}_fBwFRW8W{|hBz7e8?j|hMtokm73aKt{^4X|+RXG>`&B_r4S59QAcy(;T zR4YXFSlRIrBjT^BitXC9>VN7!Q+8E9c31-}(tondk#tfN6Hg*_yFa$`#PPTr zL|)3y{6Rf|~%h*i@&EvdTVrpj@mgKeO1qLN~t@s{lQ)!UomG0N1V%Z{Tq$?ks z7ln!&5N2I@{SQa0p5dfVU6vT7JM5%)eIk}N5c%USLz;Xmf6wPij~d1^BFd{_l56#& zZ_=hry%CRHU^w@j1Z?g>ZOY6UtNCTVZWglm*v`LsOvvU=uoG1H9A z=AL3_-w~e;!ZWv@$`xG^6-<245;{}O$TIGHS6kZ8)#*PPI@)PvgtZ6bguB4o4iawe z*R0@+{K=Ok+$HfDU)DKR)_{~XZ=;rlFeq!tUu5|-Z;_QV;!i}(O>ugj7fY?nrSLIs zr)Q;{`Qxpf;xpE(I4+yPAG{6nJHd$*ePUGNuke;v@VkJV&m7A%n8H2gL0;a^N6pU$ ze_fdO^IovCYvZ$FEq2Dz2nFeybCLLLb1gIfP?P$}8mOQ>ZW`t`O&N1zew!6Uoh_GS z@glDZJHw*L&iIg(h)Gq7UXqa2U1A}N&jiPA=ox!#w#&S23u?Ky?8X)b03Gwp*}7u8 zY`VWJj9J}WJ6rp*vsJiwlAXmJtBxgp!z|A3VJO!TeFtwl{766lko5MeBF@t1Wpt;{ zSs0SfduI{3%vsQ;)y$j;j@=BPJ|zF(eb8#lgU%XIsdn;(G1Xp>ZLTxNnCqmXdl8`p zN7>ozmz|~B3mWY#D<`|w4_piD)kfVVVIAYzJ>z{s>k4V)g=JQo_)O-wcDvYe-v8Ve zqy;D0u+zFVyL?POE63}^oE9I=NhE*G%5dRPa_p0D4(r2(ZXqV%I*z%!P=;{V7_F`` z++W$y1(J`5;RMPYFvVT#LDSp5g6lVXTW9{sR4tsWkoxSg6 zXGxMpd+hAj4tw@eJNwP}toP_OdKlKe$jJV!T>vWpWmd+MsIlfG*_{x3gCt_SzkG_J;VZwP!;QmPcGWNU#$NTsxifQru2*{_S%9%HVuf+o3K` zmKn^aKb_%%e9I5)lr3(S2~g_y@rb14+QiS~jkLQ_@^bmzi)A$>LfI^5u$O<_u_my# zY$Bd?>{uq9V60C3a`af6_>~`v8NZg_EjHzqkdIZCedT0iPsu-z$UhGV#{h}<%1Xu|ocFgYir`=e=Ly=A^){WfxK^zxQ@! zG~=y|SeIoVx%4AxNmr~_2lQU~GFQvw6yjxji0~}{` zvADuTuf~sm)^Lq;BMSm;<5s~d*P1I%kYTo=t+0ZiuzFY6)mB)1CUeYXynJKR1N=1N zt;xNKcYUt2_PAXgpUE7Lw$>C_Yn5UWzYUB%E5=rB*)jS=e5j^QB}ty=qB){f=Tv_$ z(+TsI_j#)%=v#Y9P@B@;f*MUhao_Rx=J0MQZgr{J=Y%}%7DZzJVQ+t@yJ*be_oO&E z;g=ybc>S-c`h9<8e6oU*kLt-M4tw&Cdh%!SNq=J`Km3H7Ojve17wvL_&yb?4k9mzU zC)-Vaxya8_`Q@_59b@$E)2Y=JqI!XLo`kEQc088%?k-(P)(!h7* zpT`^JkU4DWm*t;(+~ImE_iK?0JTJiOOo@aeenQ0Ay%uw;mxxH9K>(AhH?{FkYb5`k zq4VL(^?WgFD8XH|W;2(r*`DcmuE3R5a+=o$SD@U`u5>;KxRRYAdI;iJRod40gNtLFT^^Sl z%c}n=u=TI8c*?;HUYNnx#mbe5+<=z{JT2zw$*%|e<$xcHO;+C=h#$|0Zwkau2K=Rf zzZa`dIh4Wk1C4uQabh^eDX)(brHNU^<%Ox@$;CS=OB3=S5|7NJikBCzDBQ?GD>XAJ zEL_cb`iNm350Z>W${#nHX0~YNRwfDy<+20^dE){b`H95Fa*-C)MjOlPxUjH1&@Ia7 zF5}#|@TGeW(ypc=QV73G=ZwiA#;RkFobn`d-W^P~TDyZOnd^AIs2n3JablV{ zA*D>OkIk;BmNPX+lj^l5rB*7PK~$~AQFPQ2=P#d{OGWrhw9-e%m3TBIimq#c*;($~ z#&RE&Iddp*3KcpgqbBt`Hc)hCjvGfQa%OH84U;i2&lwoUws9?<)@3}E2dEazPpqld zIL)puO_b#{RK0VptLVb)xT5mV)uP~#>lSlpKFitqH(#6}3l~zkC6`~!gZow2tVL^S zXnkY(DEr4}0x1@j6>@!9j)eFGMV4@x%STHUzHYW20Qn9~flH8slhFP#XHpnL~afW-4_S-*y)6BFRq7juw_nZPwQtY?x1T zO4~}y*SK!AF%!us;_*bErQC6dwe7eg*2MA6g$a4vlJRYJwHn!)u{$a>CyNJBv@LU5 z^-sxEI*PUzCZeb%qcWz#t#+nRd>&XAB6rujT zCS#dj`O4UhqTQJ*qv*An>qa?t#(ZmshAIhITEfq)myudhx5)|VOzjdUfsXl+^w_>) z867(_2hwIy)HOU((F zpLr!&a$&|~a#6sG1FjEvNrn$shCG;WFL}^?%q#RJx1jLTS4C4Y<`CR7Rxnz_TMNzP zaPJUB87u!^j}KSIUy}vRp6K<8(ddK>bpFN@-cVT6!-qDI9`2%lAj)Bxhcn4<&SyUS z%>;g2_?d7<{7TjiSHj;adzJct`^yq7Gr+&qiNjU!A8+vB$^Z}NOHlcQyT5ZvuP8mN zshwULy+QzjY%5~ST{P46zML7E>ofiT@Ct_u*FPeArE7vfc;{Z}60a8o{%`EAfBzM6 zS(yohvVvKIZA1S`^m*cW=@>omNwj}qVMnIt1t${wyb52&9ixXZE&j#n;y-NW#%|_X=U_2FaUxYnT+7 zq(1CrnYlD*Z?72`^`cQ_zC7UqBLVu01JQq5N*%F`*ojQv4s?So86E84M9?7K*r;%1 z#^fMyA-nBy z`oAd~n>1sOy)UEFWAsswEMEOcVLp=FUl;bjmyb7DSG^PrcK({t(x3-=g|G<{r+R4= zXdXeD8BIgojMSS73;6$AcKA{5@X{j=%Rw{zH|b;=cT53CJdxR$2)sLdz5X7lZ?9mu zA2TInW|04EtGunhJ-ADLCQI5-SL(R89`@F|*xdMQUi=NW=SNUElJz5~A3^M^^U4YT-`sm%DaMH&?`jlo zj)meN5B_1XFC-ixG6TwAKO0=*6~kJE9NY#6b6;4oP=x52?KTA~pu?gs>BNJd&%QQsZj^VT z{Y}b0cHqrLX77T~-al{<*n24pm;M10qppeVHNBd~UhUwCbFW%U_$r6F^lHeCnAP6+ z5fzSj;#IivNMlgY%^4tqT|!^xy7O{g&8VxnS1n!Fo!9VcChV(T+5gGj`4$d4Krn0u z=rvzCL64MXubzd_+gG&uDmZ-P8od-H#eppE1@DR7cHo7Z?YQ3F=i2+T`kv2oXYTc| zz29Z;?s-c2qaZu>?{;1ElF3)vyO$4)kw0h059xcd*^a$G{`v}&^ALo4dAWa|Yx0@) z{=aYk8-f3g!2hTSf96C}N__DjZV@z2~=P#bWz?XQWD-Y*g^w%oe-SG;i>xjxLskHNW=3g(w z2Q@k{(AGJhXYP4usk3WO+eq(ldidZ#*U|Br(dmf~hI{sP?QiR~Q*tyk(AA-bzBIKT^z~p&mAgBW^#3rD#f>p^>5Xq2d0)wr(rAy))g`**VBb9&07`3gX`0t~M)Ajt-nXG|<*z7im_b znjdK+I1;si!JhuXp5cR9m`H}t>1-Qr%N!qQ8}8WK+25U!^tYe2uUkCOI;MyB4tBM5 zN-HAhJlNN^uct$fXy+bLlYSRvyR|{;JBh@^H=Q~oN@gWDq>A`DtE}Wjsr>ofwNN6} zTO)#;llV6!|76KO+44`$NjaNW?b^O-S2ByP?5({ak*Fw5CIZRL$;5;O&REX;oW|71 z{HB?Fdtc^?%ae(Qc~fT|HA;9%GO=Lpj2WY3zfC0g8fSbuZ@#=WIX);3CuS>)uZdG~ zcJh|Wsgr-D+|=|VQRc)gqB5;%+Kj;&b7xGOF{%PTOC_pO=hfVw`f9W@_2~=lNfp&> zo;G7~>irkY-&I#vx2i66uqIV{^)#-VUYqJaDK+U%c=hz@wbN^BZ@K2y)VPyU`75Vy zs$~~q>ZRmxs;4GZxiZx=KUGe(azZdf^ES}nz= zK6n27ZWNO{Q?uqzuS?CJpL*l@_jF71Zc1H}+&OY-_cb@9Dpv928a=TnhY)9dP1)NZVucWY|z#i_#i-M4)I8eXZsi<3D)TYe@h zF>%$sdEE=@7LQw=P902)3gqR9MCI{Is3-r;pDj@0EI>_jU6q|||$RDMnH@9?JSwTo%gM9$8fRjF|+&s}wC zEj!iYYEtLa)Gn+|71ZoX{qRst>iwyj)DI5TEI4Ya{BM6*g-u6A1O^g4nuWBPR0+H+^DfNM8>Kb`tba%XMog+u?gqIN~?u4$X*)k%fqf3>?d zrH1#UE>7)Cy?CgmJ9R~BPj_nf{9UPO^Se_+^LLG^<}=xeOQ+4E*Dam8Y7x<(2FYn# zlleg;p3hEHPJZp|1tU~&*NpC3+F%96i01VAMWfAKorCV#q3+EakEDBNPGaK7^ckm* zYO+t|B&wyLRW6jS-{quATt7<<)YM5lhiZsG?H0aNj$o@s?W~?DwLK(ts((!Vev^}! zfW6wIhF0@Gs<|ZZ{yVmyu-s@@7##IaUuBx3|JAH9&>YR&r9WyF; zxAH4lf&S53j;3?Xs6G0&y4TdnHT7Mi>h{g7M5A=C$%`?Z`f|jOm%8_Yi)*KEno>KX zc2oL<=`(8G_%Vg5r82{blevE;r%G$KtrfqHUQoMg^(ix^E$XbTtxdI)(5Z9fpDOw1 zocVR#qa1xHN>nT&#n+4;^zO@jSrG2ZOH`~Hb?qmRY#JrG7l{l$(`GE6Q9Eid{yb-r zhI}G_cGx|%-+k=!x3K|oaVdodivTrhI{sR4W;Ev zi-vm6>yn8$N~c*BwDoqOm`*dpkBCT?6hrBrzMkQ(P7a6muwZEGI6Ey@MQNFrqQU;* zG+*>Q6t$kZt*v*-@k_T2_IJ04B^D7wUBi1u`Y5iyFFI{oV{>|a*Ko^l+wjN`)_VHW zndvv`O%LtuAL;Gv8dOcpv{S|brq8aZy;El8sH?BDar^pHqmcvsgHn;<#f!wftMphelYa^mR&|*S4-pw{#6Rv#jXv>+9+mZffi8 zZKqywjWt4UosgCgL_>Q=hCBNY^sz|VJ4h6%U3#RCwXB3?cprXt3=IzV?`t1o<X?>e>(0Mu>?eE!j@?cLlU*YTm(cRIxzcb?7b$f~GIZ`QEZ%7Lv zaZPBACJli3y={G+LwnoK?y}-K+U5KGbRj~4!|C2Gyp|?CJMxPVoTM)4j`m2FAg-LD z3=T({2K!hyMyGAuxT9rVdgJzVz9_qe&3LUwDr`j!$TeQ%NDpM@82Vt z!9KK+i1^G<{I0gw)8*` zi=$}&o}S)e%+TK49&lrk?iox=6)@S?v3KNb!bRH>jKOqQUt2p>kNWrQN%O_mG*j!T zTL#*C7u7FlCLSy-2lw@}8f-r+ZtH>mzE0PS2Pms|Q3qikAV%r*i1iz*l&nHEU7|D| zx%75jh%}d&x%De?@9Q4k8>I#al-7_V;zyPy>?SzyL|>+>6pZ`vyh^yV3)Ek27Cu*wrhkrWHtQrfAN&KC+R1 zA8B9T-_^1B0J;QWSeh(qm(*I+7tw-)`^3L=w@bIS-nc7DHxm;rBkfij--%rQ?b%13 z$(XQi=eBgy=EjzmjZH+I4zrKZ!cuv#tD6#OeAe>^I&q-4r|)cju!S*+8cUx|@9Ayp zcJ4L~4D=q{ChKW3T{`+;FVH>E!{{c7FRdU$0I8ei-eACIYde>;M??Gi`-k_+$VWUW zom}s7!zY8ue)+jMx-pqD6^@BiqkW^#&xH^T^#e zPzkwd>g^$jdl-v*EjF!srF(iJDH{dZLV^8@IPe zPh>FX79;lA4G_|-+83D%`i7g#6HT z2D{srF4%A$y_C*Dhvyf&=xl>-j=_B&bIX!6KcTfby>V;Hy6vq5E8X4O&qxxcwvAuB zrPrR^xV<@0PRD~}-%$S`qmYdm(TQ8rTh=vi+_5En+V+ivd|gxP$=h3^1Krysff#Z~ zz5@epY+l>n-y00pZ9OEK_TTirwjrhw!n{W&4sOKvOGEFM-zOw5`s5!bxb@EFzOH=? z)r=;63{4%q{p^fbqe-eVehjn`Y+^2!+yqD$80s1nlj%VQSlJiRacbdG+>^u_q{GVn zI&zt|C5Vhx+;{I~jH4GXYDbYa=#~D!z&9uZxpbkS$W0lpM>6beWaMtuVcce4?Bcmj z44J@gU$=z`qB)WzkNCl){y{e;>R>o5k+EcQ-r=)#3ToKvZjYH!DdxO>s$#|)n>I!L z3{bLqh@6i0W#`()?U9=q-S`vFUfN-pP~)+&PjYWh7fTK7a3|k4#Ejb8>C2!CZKZ*I zy!-pCGzqZu+>ZVcNkqBU4`WS|kLKdm9b20=?ASCat)!9gScbKp{#Li7lHQSS?-}0L zHV~xO#+EpBI|fEv^;sEoc1vyPgfb0i8rk#~_3E6jBNWXzGGz0gTgdo9H9dSDdjnk& za~l(jBrHEk!QjA5M8DtHnQrf8;TDq{3v>XWw*6=Kboqfm@+Ru&Z5tZuArP_vv4Ofd zm;q%hqa@dZ8Es|x7c2&30H$IcXAkMNj+AZgMuZO{$ zwAFP9I{SN0>*-`x*UsTa>gJ6tI#i3E8)Ic*<+75-JF9Fw*9c5H9ic>_Q`gN`8#?9+bPPcB{vaV(G#wJ@Qtv|7U zkYSd!N;fmA-U#Tvne?auSrf!vOYe@ldtH2SJkoWdYuiRy63JRa)WPU&R_WbWhcO1gnIv8c#Rg6rI3VZU33xj~6wbKl?=>3rdCnt{Ko zt&bl@PqVyZ#khbiM43#tuRA5(B1;UnSYp}Bs(bjaZUw91I_X(#1Jk-4)WXf4vdU`d z8eZEr%u?!LGp!ul@yJ}`S5@&$A&W*^LAiCX-e`3(zjSx?bsUW1jCU!VS!>F5?iML1 zeyDBV0HL52D80}3k)A&KNV>15zg@--y>+C^H}BDV$C37f+~&xghMS}%qq{Trq}=jJ zQ>TY|`H7*SVJ5>~rr^GP+{g8IM4kO3vXpjK7cH&FDm`8tli^lJ+H_lQH{EJ@?>@OJ zXxq21&E*ah(X*Qv*jv|aKe4fi8^zY`J7l8RLoD6hH21Bze7L0CD(iMuBiuRFLlSE8!hmH*J-ku&1}bZ8#Ej%_)geyil@xE;^P> zQ?mL#uWPVhTP5lk8MH~(jX%94bK8MPS0c@F+a%qXFH9xh8g=!~1-6iLsXA&z@{@AQ zHs;GT>x>iB*QO1PTj`6N5$Id^j;eXWKD^K>4hx(T_$t4B|9B)(n%^Gl<86W40BM2yCt_^=mh0% z1ZDPcHyWM%s?@oA+PBDJfuB<%Bl)!(z5VO!I>72)CYUjEzF+ZRmgN&Ue4s;a{H+vj z!gRKFCm{lyM}b1tjBefmN|oAhdbRp{e%1TCQp_w z?%vto3dy~y4i%DB>U>7rh>?Ha7I=QRsA6(luxXl)Dqz7v`yu?7qUY#3c5wI)b5N2 z90j90i|L{MwC+Jg>$mQxXN9!2HaoVG@rlXByeA8e$zsd%N+C`VIG=o#uuhUV#SA#(S2!tYr@> z$eKOvx^T8WCrct(m5clF-K`%u2`sxglH<079hCzc-C9;QU%Srj>X5;M{U#f0$8=vd z*V2PTE>nVzk+KBZ;&w2%NiYszpDTyk-SjA%<1!u+csC&10z+~=97f&BUdBjwYfJDu z(r5MaQ8TwXz8<>rXHE4Nqg)%WMyEpW&xOS@5{c|NT8fJ+kIvndUxtmwB2s?>=OHLz3 z56RrrLKo>Dl-!gXc6UD!E|Ami9$c&jOLB8b*Y)w5b$`!Jb^v5ceRzMG&~(U-u^UC) z0zpE^mZ$DPyKzOvY1?z#xOKgRYmh-}q@BdaeFoh=_lQDppCZBa8$opwiA7XncmdS2>r2ClZ-u69iKyZ7#?EZ4Q#y^Y{nx*WdlJM?c+-13jg>{PDPp%yq z9`5gJ%6vBBn{8W*{Puk3VE@1XdwK3wV2F>KtQ*K&%5t8Cck>Xw@eqYuP}zn;)IHKe zbXj!__A?zxcOQ~P7JFeG1I&;;d@OY?%QNYO^ke7S5T6r~tL~#9pDxl@b!%Ghj%68V z?STnym)PJPb}1>DxTUSTr$ZW8K6x6{1+i^HQpS$W+=uHlA`1|mFlD}6EZ(*4_aCxI z-ntth>nsv7x$AdpEx(N(9oWn5#6kD@hTOxs&HRpj?lAh~uG&^9+sXWOvNKDtWZ~f^ zPq+AT!|3{*+okPKCS@%dgO4!?s@x3@?k6TLXXWNmKJXxzZpX>(Klpto$$gz$U9&7% zWcNd|p{RBCi&WO=-1uzwojY8;`!%m5uih4FZyq&~AJCE1bp$@jV`VJE_1-S-a)Y&0 zSQ;Pk=$)I(K-;Nt5;`lB854qx)4~06yr-qclR=G-P%Q*?nq<{h~P%T^Gn?vh(CJaP@>raL!I=q|?|S$8rY zces5Y?vQ2sF?R;E7k(fX#Q`~E z=!AI-kEwCXIDH(l=r6nyQP!cxBKIUzk&5MC_jq)0?4F&Tk~tr3-dvoQ-xxKPHeS$N z95v=NaxOeyzt){!cck-k^?Xx!-aoo5#XQ?oykIQ_+?cfyl^e2eO5L2iCDESKc;XX} z|LCzF7K=`={G+e@8=H#fh(EU^MF0A{cjdl2=Z5SXv*fxB1v!ly++~mc;1QfHOnwB( z=0|?;=no(J(c@2uqSr@9rCM4>#s!xsHt}e8sY?=r6wsPw@0%sAf#_kP$$&W`&b{F>L_*Zr;_O}?jH}ogcWQg5s1Nt0iUYz%TCgOw~ zPs*HijTz>iG%jBto_TRxlR0wwGsYZ``ZE*sj~;V=&Y0t4@i)wm^<&OUKF2TY%}3vt zDecX1=EeC1nIq@lqA|zyV~&@OIS$7dssHjZ=cT{JFV3&VANK|2q<$NL=Q#7?{2I>N zcRojboaZ?6;(P<=eU3c9d5$wL&Np&?r%KLwiSrz1UYuXc`7>3Lb35lb&b&C^#CiY6 z>m{7$IP>ECy3CP_*Vz0U+a6>4ulL=V!QR;ZF}A0rRI9}nE%z_IWD{`hNS^dB8_{Npjl&x}6isYiQh`ANS2SYLKrH|98QGdmy0#E#Dz zqkrL;z z;nzvea?JRZird_-?=$_EIL~;Ndfga%zCJ5CU&DFdeqwJ1$9I_i0LP4PsV~~G=rg{h zp0wlVIA(lHJ!i+>|3BLCL!4*4%i<3?^rik~`SH*6v&OVnmW?^dX0B&E%!>P{T|cJ% zvbx6D_x1PoFB^0I?PHGLH|F>=V~!uPW2yfF{CUcbD>z=n@vrQ-ietvxxVoaxc$=LU zT+eu$?eldm=a+Ll%g)c_c%}baoKgE1cHr-(g3pd^2PSyDg3YeOeJZPpWA?p#A(;mm zEx{#|Gs7ZYXV^%iCG|U|Y-N6Sof8_t!gh-NW_IcbYWZ-96mX zN5RGMEoJ=RjfFrS9Wy=Mn{x6YzZEK{tLmY6sW;tmsIOM@R@{k81SOAa2hivvuY61LA!@*nT6~$e!@9WD^GV3P&F#oN-^lXN+h>kj=Y4xB;MX%nc{>-wc5QNR6uri- zO;If-&TJ-`J6C#}w2Rk~HBrpOt=W7_G5^NQT0O7?hSN^N$kVJ{04yepQ0|W^-QeJ@cbNq2y2{$&u4mG znejP`xOxAxuFvFB)}2w*=JoFm<@X2j2l-P}lV{gtUV;#zk`z(E`$Z}HF%u7A99xn2J9*f-b zf+*T!@t1qHxV~p*V#tr+W&C_w;3sY8`%VIV&-~e2)L`W%iB*G@#joh7oa5wtlMB;E zd(DR=`4jWQ8Jj75_BK=Pb}eyDU6IjG-O8T>o1GMGdX{JGobCCAj80ZwMo0FGd|#Hm z7vGno2L2S=t`&~sL#%v`$xk))c^&-U=ear1Zw>Ux&jGJPp7eX366l9KH@J3AkYgvY zt>)WzD@-ii3*X{AtO@e4A+Z0NpiR#R+LXE!cz=lPe$V7voWu2OSNNP{-5=-h>cCD| z_YF~WuD644v3>e)%x4Bnd}8@Pz~@HML2n0tV&85Le0wm8&ht9Ug8IHO@bmJZFH3Iw zxZND|5ZZby$&(=?VA{m zqKmxzVz$ZrwU@*GTJq##uX9~+?Yp_n_xkUFz5ZQMbcxr$JJUu9`oaM(e=OjaGMuc* zu^pGpy%kR03fJ;Gd9ZsOtvVI$9I@Xb`q}gw`3y!l zwGQS#;T+jBJ4t!smtgi^L|*j{c(-!yFJbl}MLwky?o*yh-bL)kh}`XqT&P^U1^JcA zg&%;KFGOe3sW9JJC|pdgMYo#{{V)2Ma>YC0&nlNRz+YA_dj$T5viq#=VdcrcL;i$v z`FG%-D;He=|6aM0cqH6d?Hmo4zIs$cjb ze429UzrY=42Y+S%PwF_S0DhBl!2oO?I?v~uZ2*kYcz zlsq=yCj2LCz7>28wm4UAg)Pqfk$IG5aV|Xs6ECsPFZV@R=PT#nL)KeN{s4Tva_*nu z_bE?!9R6qJ(mgQk!-?-$?YujzbHvRC++3had*P_Av}3M zJV{x6&z`MZNPEf}TXe>g7uk)<@-=7K)KlaIl#_kBa%nTX*Z9XUc3oMYfQg;cr@gY@ zrd<3me51WE|~x`)`))YjXDMiPrMKAQTce{mt*!N$8yM5(JB5Qe6{JE0dp+! z3E0cA_AP%C{6&=~SHj;`o-zx5K{@+u$|hK@TEZOW-X!WOHEDs9VHJ6iPo2e% zeCCpWvU2%tu;tsdRdBb;tI^9JR?g!+|BWUWooh@^%;c;6#OBn$z?KjBe}M5x*42>D_UV}iB2BzEO@ z${kOB7W_bU#uLT@D>vtU*vc&-HU+;|oyo=cgl(}u8T*A6=L&M6uv+Egw!-AJ=!~OJ z6fRVbC`ale@~YRt7Ta-ehb^{KpM@>9Q_0Cf%g?fz@Ei16ez!9!wAhy7VQzdv693y4a()`z%9x}j1S|^P#(V;K1(_OB6z=XK76tAWa7ye z!8_k7e+s`_xr!K%`zPf|--rKMc?vNZcb~F+)#kXbE0?vwKQ#GA;HQ;ycfr3^&MssO z-EQ*RVDmF~3p}FoY5QRFZR#Vi`IfT@Hs5lHgZzxS#53_Dm~lb4>f`Vn;deu?rV z@?m_3auIgM_bF#R3?EdEE`#5tJgxzzy`9bPz;`Li9-d)3#HM7Pvg{X@EHnNjY&n@4 z2X9sRWa?Ey+{OOX>)}r2>VJp(jq#=AJk!|-TfduhAx!M#+KF@E8Z%Qm5rr=}A z$5fszWm!y8?}Wdi@?y@H5IeCGk#{AulW-yRD0xP?g1D7XXOZWSGbMjkF5tRSa#ZBi z8)_afMGERwR`s`9ET z_(RI_Y(?oOl*_8&FDRFaK7Cm1Ov9H_%lV?)V5?VBeEz-auWL>lz&p?i7&zy^XlVai+T13V2ioT3*|P>$h=TaEX1bF z3*~UqKs-P6fGBL4AbB(=HYBl?$@r)ym1WaIwnD_}iOZ6vG#|ew}l*`5|%{&nKcMTzC|G zo3g}t;-{1)KPOtgmC;`+(G~pyVp3VET#5gc=4aJ$@Klw{XCRd`1N}N<&R5cBybqP@ zmBoij^Iv?ZJfL#%q4F)tdBmjhqsm#tpwi-5NIWZlq4FvB!7muUjd_takg}!_|ElTA zNyh1_dCKMZT(w&{i~e5KqdfjOc)!U9;Y*Z@e+^%)Tuz%*-K1Q70sJB5vUkH4!>S>e z`iKwGKdQ{nsb?_0k5{?l$;yRukn^ADSM|X*wpTOWRMRI#F3)CGpR7Et4mST&DcJna zAs?#W6xh60IYnQnzFoPTak`qgh|Q8M@W+&MTj8%OC+Wx4k0?vKRR4$ac;Zq0Tjk=f zu`ggbkaaqYPhwMin?&9SXH$FG>N)79dcyS>y%}Wa?;Jp)x>I&#V~&(OnpSZ z^d8pb)KhrU2uz<5uKX};`IGz^+^cfw%ah-rEaQW$>7AW#z_-}7?}hJFmOd-vg6K$} zo&05G83!hR*O+l&@{`Ik4orStxuBUm<2rADO0jY!_NQ3;iv20pzG8ohweMtdbBeWZ z3D-@r_MJKdw)Txa4ik5=pFAGEMtKrBIK|>7W6>1LLszbkp_FSebme|Wubo0aoAQM6 zMvZl4mSO%w8OL#yOub}-kIp+KL9rwm zN^)Ffo#Av&iR~9mQueF#+f3LMTlrT2bw&=AbH^Ww!Qf${!H?g1hAbgE-DKV*~uZp~kysQ0y za%C$_OhsNSc0Q*pdjqx9N90*2z&}u){32}r=QB>uNUA*bTiEiMuj-6u9AnoO!{m_I z8UGO6s4RPjGqxzp{o@Q`EjlvJ&*)N?J*pXl$`v1h&sVM_t}`fG^z)a))?Q^_fT@GX z3oe1Jj=7J*UsAbzS@aCr!(E#NQ=YJ_b!S)(iw{RdDj$#Sqb#4x-V0j}=RXP0Qk|lH z*mAY{CU}L)3p(KS$`gpsQPy5jC7f1yWj%bh@}#HW117&4rVirUlrO+nDJQ-Q-=Hj? z^B;AGay9vL6xaBA9c6h~`Z?r}tGx1CJPwOJ(HY+f+gMa2a@xtsC&1Op)2@S8Do=es zyg|9-5x7;k=vzfd0k7x<6L`HTs(Qpy#7g2yXQLTA=w(qRGrGH2bQ zT$~L*pgiR@@OPC9h|jF2l;tz1S-)1ENdKGlqUm48BV$}IHmCdtT%ug~8QAJIj`K$! zt@7-5!V8s)&x5Vsl{^RUG&>)IX*01Y^Z3!$kCIjJCsdww8_ZZNI)(3ozp0#e3H+$? zw08KX%BlS@c`y2t_Q15U@VGZd(d+`{?@;9h_;@gnZP8+=3a#B8rpZy-5EAaC7tNtX$ z>e>IoGg@B$DV3KKhuL4`GkPz7LgkhBBPS=9nS2huO5NqzxH*g`E4{o{nLA+etI;`6uPqjTE@HgK2YJn9 zP2+Q5?j2_H56Fp6tb?zy|6fv_tO@8azdD_n@WX*`Pngaz$bYKxNy}lzj#*ajy!=eL z^D0b#6?sie(neC81=r~f_5m8Zys`IoV__T>^& z@ke4ipS~u3=Inysuks1^!~bk@x%QJPuNHqkukzen_$w-R{(r~h8Ps3v$dK>bL;^e7zP-GaZx{(B95x>?|M;Vx5(y z(~Nv=phFy-{$0r1RX>ph@8iDL>b~HR*`e+W-eh)m!dIxg;&hmE&d-DJ`;6ZWe^7PC z{~RVpPUqV&{m0p#3qNY|Kf#PSv7DHQenByEV&a&#UGSpmP?v=khiu*#Qg>Hhd|5~= zgr(et8cPnyni@cqigRj~ED;`OkNKgE=}i1u)H$gf4um_BpDqF<^!NqiP3 zjqidfPxMo~FShs;(}s(WHTl)>8spnx`kvFj8-Am5q7%MDIr#`o`#K%rpBd9u^^ET# z&!Qdc7br&$!CN&Z6Tb!TVjYH#yy_`SV&!hdsh#xBV>`JBK0I*nCw0H&UzFXL)G z{x}`lu%7z(nAhL0_7hJc|3)CkSEv74GN&4lI{EW^L z;^=f}^Cje-)1d-OW(PWpOo#SgvP^ZN4e+`^XPfDK7&*D;Vsar@L662H|i4E{~m1W;}DPyJNKu!+KSmxt!e1XOJb5V3W^RMWP z|4*2Zwchrsl4KN)9trDdz|uZCnpiUs=b>bKJ|Y>&kixrhQ}ic9lT}%5e zyGU7{om=(+}-RdG&}ga>_1HBF8IHU?~kGra*Vm|glgq%d^=&G z@lF`u#J)T?dctnwb7AW2>W=>>T%%02qZ1e_{C>y@U17~)5eswoUzNv>2u2u89xtStt@d^{&CHXGSRnjN#^L~Kd_v6BTP&r zuVkNU`Ja@l@MQ(Qid>%AT!BAMhig}?%;>M!5a{nvo=ncH=u@6{3j8|LmuugoEc;+9 zu2q&feZ?&%XP#N{Z^|k1dIhm6zz2D)cuwV#=PU42a%RF$h*^R1#4MP;=Jc1rw4?Z( zmkpC|!l{0EsdC9*;3nl_#-5e*`64T8R-b5 zsZJsfCO*!GVfcHhBXhv2ADYfGn0^xL{MK|PASYI?tV24Vc%9YwA^uD{26>tJK%ZMp ztenm}Vau!Jd9dYG7URL{M%9t$saB_zC2v=sZQKD9t32$>YxRYJP4dT;y9)VLrbBM8 zewXUx9|ymeeHMT1KdW4xWmcul*>Ujq{du{rg1Fy*y-Pb-hR8Tl^)raz0F@=qcE zW59n_p7KpTqoB=1$8mvj_LInq17_S2ovM1|)dANkC&;_TSpm;e=4W%GM#f~h*6|6- z@^>?hj29wzOxzv63HgSAPd5G{@|J*4S1$ZHa?1_JdsJSu1i9sgu)O?dC{dPi9zyz? zlM9bGo(WSg|G7y-y&Q`U^KQ%wjFCm;w*RaoI?-74$!#YWKE-$?Ob#!g?(WrXEINGw z4;qX9rGfrs#*A;#RRLdXd>rz32TV@5vcwK!kpB!Ny4zUFB`2L+n7-|}3jQ|xbl%VJ z856(gv4Ed6X8eeL%O0rL|ATQ2a`Mf|;RN~Sm_8_DY^--w*DV}95e+le0s{2#`5 zBY)9Y?9&$RT4E^Q6%aFh-!bt_(k}ipQ2E|~SU$;^*vfOIqBHS9n0dkJi2PV%;+$Nl zI`gPYl6k@DhPP54AJ5ERBCmB=MB<(0=oxT7*!{pQ@*=}49(_h@Rhv5Cj z#8&=}(tm!Gyxe#v@@oR7y`0XS$cb;v#MFQ8ll)-7A2EIk{f`IyY2#;*(_ZdcVa9gH z&%%tkF@MMSIpo-Ka{6GBYaDNYIT!Qu#*7)sKLz|3W9puwO`ZOOaDnlYaJ4aUOHDPt z0;aDyePQ~VW8#*gy<(=l9AAfgeZb_jliz`ym^zkn$pgpup6WH0atDmJ!RH2y-%cMJ zDf*Ppy%ghHEN6Ukd?z}zORV!xCYN%38%eqMn4EZ~?lW$Hef&k=$Nx$A-%V#P{8M9z z=N~ekucclzu3_F{9CM$k2@`Y2%iswa{VZbcl>0j4x$p(XV&_f9*vop0vDmpG^BG*$Eynf8 ziL?7`PMA15eh9uh;7=JpgPgI;=?K#o96t+x&-e=X2gY~6w1LyP6MoA00r+>uQZLpp zPDkQH&U?;I8E@v^h@5wF;bP<4VcNyXDNDXP&+!*w+Rrg%WnJ|Sova1vJ5K&ZxGeK|XwJmUXPPw({&P?H&IQM`T~24fw1t!7XU<^2`;CcH&iMgfWc&zn`i{F+n6_~I82pZa-);OP za>{Tz!nBj)7vPTu%zD7dUqb#RW8$ClRb%>h4(;c3gda8*|7jN|7p7eti~m0h_?O1w z^Ya1Yhc8z?-*rs6xrN4*C4aB&nq2F#X8sQ?C3CXUxlusc$ZA z=j3x>#y!WIVfso4GfghsX?!WnvD1GN?l-2cxvw|AAHLXF{9!%d^u=fTkz>)h zG2mN`A4L9vfIn<3cJ4J6|GD1TX@-4!Jqi2v5`UgDonH7EWAUH1@SjcR5*Noi*JY+2X)4$@n(7zmu|Ca@Ph4BN(>0eGqnEvHh%B5W#&xC0g#~a{} z2mEPc@qspSI>KKxz7YPpvDE!r#!tcYFQ-qQD@jstjsYy^Eul(J{bK#DFsk74| zuK5RzMW42Ca?!su;LD6fpO`xx(Z4y+VV&UQa_t9=@g@Ib0n-*vrxW>o0e{~3Lge2z z7W>~b7Mni`_{YYFkUtafv&P~l>*N}VgIvp+!EviTbKvC#jA@REYr&*|rx}a>yghE|POn-@)wsYKz{I-DKXFP!XqX9D?Ielyw+!HWu=j4=AKwb*V ztKebd2jL$E{Dd+6Nxt92=?ni{Ir$h&KN7iP`jN1F4pl(gc`jrO6qdLZ76e>uj6d?+ zhUmzvu-2G7EIcM)+SKWgKZV3JX4+I(zB8XH@R&e^%Mmk#W!YEM?I)j>Y~H%Fg~zj9)`h1!Q{ekHWuILYw@)=2J%~trCuKibnrW_(Z@dal0p@YTi};9HHw=IzFp!gm|XwVyKH3tRl1&kve>E^_MW;`S13@t3h; z+;b|IXHLdFuPo03F)TTKi9>Ogve=Yon8c3g7f&&!%wo&=6t;^k=TlF?^=3zSSzu>< zV29X>O;;}CkIO@Ji_>Sz|Q5twQmisy~*^S#pZ3M|3%p53s+zE zGsU0OO5~pl_)EsbRlcuEo|BPRG4XQT06!Tpb$0R%$bS(qV~&%biTn@7m%=X^e~7Jp zY&#v{Y~=)HjxRE%J;&32qLX+Yt~927$4^#H61VX)jA^U!w2|n`_gu*{SkC@K@CnA` z!g$6XC#PQH8Gjtp7URin;RN*?-)1c3(iTpBKRjYAelpI8T%NNU&p6{)%6*ry*rzR= zT>Sj7vOG^U{$s{x!k^P;El`i-dy(XM3|BAOAZF^|_(pWTA29Q{lcPJHb#Kf+RhIp~ z@xKiCH^!aF{}k|Fj4$K!xtxFtl;wHFlG1=D7@v!Ldca2+UyqzVBK~9v&o{mmrd^y| zn09eYJWH4(Vy5pnehm56fVV4WS0Se#iH>91&T$QL*3U7YZ9E70V8Hv08<1ZZFgfb3 zrHxA767W^Vhmh00PDhybb$m5^d%$-n=SaC94VXSC`Z*F$)@(7eW^>$&+;SjC_^T!# zhAjtjgdbLU{uQw0fa51jejRelfqdbgo1FZS=fE=0aG;N{BlopPnk0TXx8mz~9f@^_~(TU$#Tl|E>4VQXvo{x*4@PxK@4-`Z5xrKQ%d9b3PSZbxqIo4gga z_DyZ(8JsM&lOj%KdCKzHdf9km+M=x7n0zi{jFobwEy{c!e;7Vm<=Hi`^>K-_JYVSj zEL){4pWBqJGdp6Ru{XAPim}+-q3mp0`#PI#DwjBvouf=7qB6!|R~E4zpKVNbK0mE;=jShs zB|g6k_>ac4V|kX%^;}SH>A`Z7!#lJI|7|gs9f^7{2pZ)qsnO)S9f9SJJP1*52{?ogmUXUS&zX%yU2Gm$+g+y zv-K&*)~BSums_85{2SGmvAX<)fL}6}7^DKuH6G^O+D^u5`6(eOSNeWMb-+`Nuj74Y z!1&?xsh2!Q>wLbG_Z7yU;(e2{#HYf>$wUKun#vuYZY=)Nj$$Vvyhk~i#d}}CHa|){ zD-Nn$;#pz+OX6Aa29-;mSFq-BzKK7?R9NCxA@vci=Ur@hCP#%`9Nr)Bhm7Sq8#84* ztoWqK#m1MFlg+$;%~<5$R(5gzp0UWEG8P}6G2X`euZ=~=`lIvbMU}g9|7?toJU8t9 zpHOOyoe9>CIih3jm_wQJ-BzNXTLK?rOuJ855U}_pI<)BoYg5PcQzyS0`TBsZt@CKF z2`wsjY;B!~y$R=O!|-*=vZpxVhJbG|7XN*Fp*z91m(<<* zraUJ+!PYRcR+R6bmAc5>G2yGmQr1Jt+4TJh9E*x?Ur(=JXfOuIN1{f{xPc>5nW zZbg1?!1o(JhMd0R^o74^{1i;zadP1w7(WaD!dU7{-*Gx({|^Dvcf8F?+9hV%#W8l| znPA7rDkmFbr}C(PXB!VApC9ld<6Du_Uz{Cb`itW`VcI3z;!sJuI41WhX_uI37sodu z?+*BEYo6j4I%|8Wp{$jkF z@4*>oI`}Ey`{wIjJ=++Y)%C{MtZp>MX7vWMb0bU~UCbl+wWcFB&oai(>I24NlYDb! ziOp+_#pd;a9qc-rA#b* zjYU4eco|%6O#S3}ch@e5VDiK>+ zy$E?v!266#kP|njBm6q!>F~t?ztNbsnnVo!GwqXzq2s%d|DWQ%1w5{*YWtkIWM*=i zOq#S!)3i+?l$P|8wxI+pkSjD0+O$d9g2m}%GD(I`GGS(twun$J3RIMGQLCc%gNn6O zrHBHGf`Z&cse;OX-e*pA*T=+i0PlEna!R#;Qtm4O*RQ=k8pAk&?h_{M|81Yu& zCx8)e^Z1{FA)oitD|$UJ`m8YeHN8fUsfDqc4*Sy|EZB4UNrGYX=`v3(4{(pr!8aZA zG%qJAxDoWUOD4uOFY_vw%ufoYOxRHIP$qm*$)udG3SJHj|5H5F^M`_|=Tm~I=W~K7 z^Dlxa^B*ob{}K$_@;%)~X0^;y_Ptu>DSvvm8a7fqkXhaA$gGARDm`KUYWShT7+b#U zFE10mr!ZxX3#QD=1XJb?!O*k%Q!Y856^t?E`vCJY(OzEW4+K*t{72C#^S6R2^S?w6 z#=jaiQF_7$s*P_Dza@0oWCrYO`ZXgY7&`D-3(jq(8P$TDfRA=z*iG@=2KtFEe#~V> zCx4p@!-jeOa|AHRh# zuR$w+Anp>o5w8~=h&Sr*0tl@k`3{|URPJXW-XizL5N~tt0ps-xbuSs|JLEn_;+=Aj zCGjq~pObixbN?{!hd<8r{Vs{sQ&x?}9?S!)Rxs&vHRky# z?{#2Zo-=Y>6m9@sF1QQ0$;AU%Ft{1!$c!S_4fj4UGuL15Cd?E0t zj63>d10pLwu$J_y)n$4SJ}#Sp$5dVAz0Tt>~};ZLM%U z@E*Yp!21L@0z)Uo(*%5nVCsLD;BCP72!>wt4aI*o@B@OOBmG3tp_lcTVCcnX`xPC! zSWgN@oAenq2P=V}6-=F95L^%ZvS8}`y3COX@SB1wu%AX&eHRHie6NSX)xbf)HNeG! zYk^T;@iYOWzQSF=sIPDjFzPG39(b-`=*YdhqC-a;`Y8-uZ0JW!**4@VOx@Z9Q@0g@ zsavPUo~MA(Hu?Eop^df`J_wAq6=u5|H0F1v_K?H`_9Z2leHj&uHtn2Xv}tdXxG@*_ za>3-eQZRY077V@Yolb1AZxl?OcL}Zm-YvKm_%RDg+E%y;7xHV8&Lo{fUhj;CKRbr_YH&vtWy+3ps>Z1+OJ zY)9vR2l{Q!n(Mhk zFzn&E3nru8kUaMYZUDZ|S&Kan2%Zo6!_Ko;L-9?ggK^j}f0<^j~4f z^9E&Zl3pwr^}G>ho-%f*`@NTgUMX{j{MCXfr$&69^jgRNy>p#?f_J`P%BdG$C4Ylp z^vT;OzC=3sl&>BDZj!Mky-j2KwReTHui$qi>YNesyj{*7!`ma6?XGwB8{Q4hvvuB$ z&fde@?>wXD9kTMz5_(gDDQDE#lX!E^vxnX-&i=%Eq4Nx*cbl_U@m}sc3+cVi@mudf z$5;8TVY4UnO>%sa@6b2b6@Bk>e9!lF$KUwufblW^n~q-aY}9#-0) z7>JIhH^(9T@Umn!o*o%V#1E;MNyPe7$&pQ)5?iAK$&qAsDA9j}>Z7q-eCXX6P&M~% z<%#jcNUpWz2%`J*njNt?mmE%{$8tllk^WR7GqFA!ji)n-BR0IQtGO+@2Hk6C)9#A- zlCH!^e{y8-u(Iw%?yPh!nI7p%jZGK^RTHIa*CY<7pPtBd=VG}d)ac5j`w~ZLr7OKT zk!cyr<k#cj%Q9nVulQN0u6pE|5Y$C|@Pt1?N9R*c3!tnBpD(wX?- zc5IHvDH}7!Oq2e^IEKeXfOk(IWTUBMHkUvXhN+*kh8fN?Jq1-y2#r`}mE_1k8k(h5 zf$C!3#}>x3xdu#ZBNG$05A%j|-9@59!;f7gsOHW^WAR*a9Q~X?q_1;oP9Tn^NBR#V zj%5|et$7l|CKE}lnspbugGPU%Z)`BCd#Q1(uP>7rmwK9%O2;SUW0}~a1D-(Eri==l6_-2Nd6zB>EPv>Um$fF4ykMQ1G9yX zn`fqX;=`Vd*O}BN``!2!qwtV+d5)4#K0)*GN!+CK_dSJAtgBWG2kAVDaje4Ol4oNr zQf2s1$;dkcIhVZebs^9Clt&vFd7FUU@~}=@oj6P~@&-U~%VQsmJles?!nvi{^H!h^w+KhcIj7gBl5T5Fv-Zn`M?Bu!m&;)t=kbfD6Nk+d< zfZ)>aLC#&{&+I$PsNY@qboIAlC-UrvNk$&d?Iy_EgS?S9Q_3js0I*9Q?*~$L#)nEq z9{t{}-&4q=zUps{lu_P`z;1bz|1u7fjJ)SSaLaoZ`AQtL-%(Nqc^*KwJl@-4jglzI z$a@2Mw>;X!^tV>ZD35X1rQg)~$S=oXlF0KI9h!8(L*zq!rQaNUl8^FM;?pgU^XL^E zCK-7hAP_g{f`=OMY3AEpU?UIThq>idu1B6WG|9;82f;0G8}b}u+V40VM&6~sF8%mB zcAhrSOd=nW=R^4ClJ_w9?1P|D9{Xa!GI;qoyPozhK_-E|55ZK7W zcj^=5?Lz)Y*w5`AjnM4uU}3gaheOj<1o|04(yn9$=TeYTD&U{l$0M6XbOvUyFm|u}sR)e=qLA zm>{nW`6I~Vx$XpcIpmFg)Ya&B$bO@G8_MS6Fo}FfT&E_;yBc{T?<6Usek*|8{oRK= z`(cui*9ro0lP-94H$II#_J?JZcQ!t0GudBNW4wK|iAih=$$K9D9m25@n9!6)pX z{J_|ZcHw@5^0;;*RUgDZ_TMDRz`=LwOz6i8nr_%sTgZ6vUG{t7^RW#crXTMh&&M_U zz3|n&N4}=_$k+QG`G&yf9*=kG#}$Y0y^Oq!6;K}gE*0EFBI3cr_-DqAYX<8e@7sk> zwkxUn6}%_!e3Qecl<^%vs!o$Gd-O@XC;1?73`Z9ZBX1wDOWp@i?oWYcl96{W2rj-j z?t7Ry-!M64zHb3jb`uWN;P)Q<4G7gPuC32~@vWabmwWh%oVa~H^N zLVZ7Mm`{d}pX{@w+h2#BZ$qXJM-L9ROZg!jjy&tzdmyhKG?SFPVRaoWI*JQn3)72g zY8D?~zjX29#`?v_*VNS4FzNq`>+6>-TUJxEWZB}z21VakcyW8@X|~6x1+lhT-(7^* zifwGIf&Xw1MvXP&hS_hwaADAM%ZW8u91r4Qs$+__EZ^qay~DPu8=tqV&mCh08}GC1 zjh9=mtboLAq|df0FAREbS-H)sVO_|0<@#r=;tMaHz6JFvE;-t&@10lhO7A@Xi`N26 zy^4!}|HhWf$cMU(+iI{7gHh$6iXX9m_XDR=ZR;&K}4y&f~Qmcl)s3JNa zjGciW?tI3o7QJgBufFN?RvY!D9bl7Q+JrWsO{l-fciW>DeX3S{nr+o6o9MbeRS)%1 z_ZC;Zx5OTY)#DhTKRkStb5*V7zX~?!o!9Wy56$b|vL9uj`9QN>G!JNA&@30tN50;9 zfww+=v=xv#-rjko7xbPH_%3CEUcff+y~eG|LoJ{369k0Alk#rQJQUP>?E;o-3Rk2S zFK^y3loNn@ydJ+pIT3Kc>j^lNvjDeveJ&nedD-suxp)RaxzWqli(}3NRe{gvPvW|= zuz7==Rwn1?3+|93c}jSwd*Co#~UmY(zhueeef$Fmd0;g|fLmqjK`=J^YM%N7wjFb02-{)`if5X4u6qoY>fn~F0W%~*ju6=OKM*$Ui6C>q=i+#|N+4xuL;j`j_xH~o8F6}xh$ zYHWEw@PlH@A7Dkezee}=A>cpNYWyfJESAmH_=muC^TW}xJ}dBJ^yk%jU}%P2hPSd2 z7^)qh{N}rNo#MTWX?j#uH};HLYMAt zk_?>E+S?|XH7r>n8SLwVw{%KoE!nyxvyR>Ak<0~PTfe>%<>=2vu=LOE6_UFcxt(^W zwHd9kL$uH7Qg2@06emi~8?W#$6!;;D3JN05B^9 z;QuZ;{g06I3A9u;fzx`z#rdj8E2wjLRLccZF{$_l>4Ii8sXQiF7OYlz6rkJ+*t6h{ zGp7+32W+fc1=nfQ*vAmdP}_4*zE_6YJ{BcAgSwe>scOM$B_JHI5qt`s5CKiZMgXEu z!4m~i0=2AxVx`dl=)V^Ys}2M_h>?M3WpKC`+;5x>LB+q{I2)o$;928r8!_&W*Ge74 z7;CR_f<9z!Hsc;gOP^maZ2g=VLy}1_Gb$Mo&;@VVHeaN+!v6c1h+u z*4ZtYP0Z|*Op2L1Bs0v+J(9tRyxsnQWYU!O7!BgTlT9jvOf&hQPvryoe1*zSwW?kT zcyiFnOq9*U#$a2JS+Rw65HbN(of*u-sPKBpPlt@Nk-vavM3@Al91y`jVvJ06R3S1$@7T^8tr7ht&1@Qkko%p2LuGIa}jUZ2%S4;tkEhigQ~9`h3xfn#uhJA zFPsV$Gk?>Zv879_VocD`QOw^yCku8&)!<9aet%Au>~MgP&HPX1WXX=MhNd$A%$#wG zpAPsr58E!rpoG4nA%-CIojKzaSOfT&rlOCbr!_nZ@MR4b0$Xa8ai{QcpK_PNy-LFpn5b~Cs#RQqKv`6#Yr#}SWl{@fDk{@kFTO^q zs7!~S!k=jg(;(rX*VY**Z7mO<1g@VbL18Rlq1&~f@N(drw4m_G#08q?6k@$I2qTDv zZYtFDCSq-Za5HgO(_4tOIrv-Wq1*NDE8GTrePuWnv%>9!(=_{O)TT<~(}AB~!igBV zo>0vOzHrXE*UnS_uJQ$X#~Q{$S%mW`q*4y&Q5wS4iz{jK;+Y7^MM7Ons%F3@wfIEE za4KwEbQH4dF|CUE4WjyIJ*XQfT?#^6aV8DtrG`myh8l&l0h}WKctSO9HKiwDOY2wt zD{X|D+qJp*+9GSaHg_pTq_{+zxD-QDe6%)eDTbtYp*CeHh6E~VIT(`SOZCRD6hl({ zv1(DF1(}_2loG#+8W9^Iwa=i4&39wFFSCr18;TUJ_mlqfnRkX zPR5Mtw>c2@GSu50_;m-~;lOV=@S6_2(}8z6@NPnxgrx&&K>U_6{p21Dh`Q=!6-+q} zb8fqG$SHMzYf*%ev>K+yaIxsva3YhjreayaR8~w=`{{t%f*!eASs+pgM~^(B zTCYT`HX*hWvD#RmvXU&?0+rJ=yOMT^5>Z`=g}1C;i>PI>Hew|f+sGr@h?NL!c@db{ zXi@XeBi2T}dnT!~Q%-Cn6fMdf@jJ+20IS`nK9qh9FuR}CW{M?*;JzpblOeH(-p z)!C}=01jyQ2)Hk&>Sf&Ylzj$vQ2$_7McoApV1Mv(6@Nvid=YGb@6bKn_`g?g$f`W& z!r`Xs9c&eUZ=&@4h_FTRWk+s`WHv(OvAL3gla+0qFPS8z)k_9`Qx?~!OI4l}GsjEG z`DD{u!YU73q%5w_ovOH3EQ_BkY~#@LPfe29f^Qf<*Cv^*%;-IImFI(aiAAonF0o}4 z{kafNtzOYDY!`v;q5C9rF*2_`ESYVn)Bbc_GJ`6Y;$DYGUVtCa9+%_)fPJInKCE(| zm)u8GZkOb)P`R5VcNN;*WAB#SM`5lZ&wY}+8oA3o4@mCg$lZV^3G}G_C;E62$EUmr zqgLK)Mol4WKo4Eqyb$`h-e$D;5v?YUJikQ@xB za0^}4AJK>Xjhg303SJ(L_o+vu%NI3i^2;Fqsg0|C8G=app9)ds-bG5U@~d_zk_?OisuJ)zYysqDqf`0BRCHlxxKW`e@jzzp}-yo3CB zW+GZ#aTR~%XL3%pehLe8>k9f*>k0-ndu5f4-P`2*Mbhc)oN0XpGy1Hy%09#0;F+pH zsnf|!g%%gAvU@Nkyi(MwEtH|P)cHt_6QtCdj)-Z zYf@!zWE0BP%d6}@WUi6+;AK;;G3xg-BSDB4T&G-9BWwc{ETP68WJW>_zvv3BZluRf zITptkl*ihp-6Tj$5!6kPwXt+fdBp9Kx)*m;*;{eP|4ViKxM91>zJS1h}*oaQK z^~SouhnrNv_7$oegaBr+FT?cF zqqV-u{wCh1VI2KV&K|4oJa*cJ(Sv+P@BGUIa(hf$U;`#a1m5Vr3!vrsbkG9&Ay z{XMAjka4^3BlDW9V>awDxxG^b8f&lWaATGIL$vp0k@FZd=rJzzBW6s8f6R=TN{=&R zI`R{?ZQ{jGnF)!sCspqy^D|~5bt%>1U$Da!bs3d;iW%db|49K2+G2C7>}Oz+I+5@@ zw{pLCEBCBhx#!%FcXJ*y>Kd0*ecp z;8}3xX2Fx;O2zXAhn9jqg>E%(GZs6#P*vT$VeWk@sg>4eLlvJJn!ZPmE`Qey^Km{k z^r;&=ExWqP!~BcFu>c$cmfjFyDVy?$Q4?!f#Y1<=?rJf0yU#kB+F`x7_E&jMVJXyA5i~;>VHW6FI4}F)c<1jpYPnp+l>q@Ix11X{^y`d_B#!4b~xn{8TkYmQ4MVp5$8#KPvRNp44vJ8xP1Zg~$ zvTUs4WpU57L)aED&B9)I#;T=uw+FG=&@KXPo2D(bd;G<|-PS8h?OxCM!KLW?iJ&Zn54vBAazQ`MBRusfo(YoTHQl&8;l5<-KHD#LXgWU>k&_bw5Gt zKI&?=+xx2B{q9Oi>u^1l+EnY;sn$Vrw~nm4b(X5uja{}w?GK8rmT76TK8d{Oz)cub zL{G~xhi5+8$kD*uD*FsPmQ;#wR2?IAe*O3cpBQ>0r#W>FVJo5xt zx-|GY0k�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 Y1N(L*FM`hy4wt-Uw8MR6J}G(s2joL(_5c6? literal 0 HcmV?d00001 From 738d17ff3bae8be1b042f9613456771b37f3ac23 Mon Sep 17 00:00:00 2001 From: Ash Date: Sat, 19 Aug 2017 17:16:50 +1000 Subject: [PATCH 066/137] Fix null deref where argc = 0 I noticed this on the Wii U emulator Decaf - it sets argc to 0 and, annoyingly, sets up argv so that argv[0] is a bad read. Gah. --- libretro-common/compat/compat_getopt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libretro-common/compat/compat_getopt.c b/libretro-common/compat/compat_getopt.c index c32c85865b..95d1bce523 100644 --- a/libretro-common/compat/compat_getopt.c +++ b/libretro-common/compat/compat_getopt.c @@ -184,7 +184,7 @@ int getopt_long(int argc, char *argv[], if (optind == 0) optind = 1; - if (argc == 1) + if (argc < 2) return -1; short_index = find_short_index(&argv[optind]); From 6b5aef09a14754004083735abf1bae452c9d7ee5 Mon Sep 17 00:00:00 2001 From: Ash Date: Sat, 19 Aug 2017 17:40:56 +1000 Subject: [PATCH 067/137] [WiiU] DRC touch support as pointer device Allow using the Gamepad's touch screen as a RETRO_DEVICE_POINTER. Methodology could use some work, had to add an extra axis to joypad in order to get the data transferred into the input driver. Feel free to change this. Needs to emulate RETRO_DEVICE_LIGHTGUN to really be useful. Potential for Wiimote IR in future. Partially addresses libretro/RetroArch#5294 --- input/drivers/wiiu_input.c | 42 ++++++++++++++++++++------ input/drivers_joypad/wiiu_joypad.c | 48 ++++++++++++++++++++++++++---- wiiu/system/imports.h | 1 + 3 files changed, 76 insertions(+), 15 deletions(-) diff --git a/input/drivers/wiiu_input.c b/input/drivers/wiiu_input.c index af1a8b7f76..2fb3a6736f 100644 --- a/input/drivers/wiiu_input.c +++ b/input/drivers/wiiu_input.c @@ -22,6 +22,7 @@ #include #include +#include #ifdef HAVE_CONFIG_H #include "../../config.h" @@ -96,18 +97,37 @@ void kb_key_callback(KBDKeyEvent *key) RETRO_DEVICE_KEYBOARD); } +/* TODO: emulate a relative mouse. This is suprisingly + hard to get working nicely. +*/ + +static int16_t wiiu_pointer_device_state(wiiu_input_t* wiiu, unsigned id) +{ + switch (id) + { + case RETRO_DEVICE_ID_POINTER_PRESSED: + return wiiu->joypad->get_buttons(0) & VPAD_BUTTON_TOUCH; + case RETRO_DEVICE_ID_POINTER_X: + return wiiu->joypad->axis(0, 0xFFFF0004UL); + case RETRO_DEVICE_ID_POINTER_Y: + return wiiu->joypad->axis(0, 0xFFFF0005UL); + } + + return 0; +} + static void wiiu_input_poll(void *data) { wiiu_input_t *wiiu = (wiiu_input_t*)data; if (wiiu && wiiu->joypad) - wiiu->joypad->poll(); + wiiu->joypad->poll(); } static bool wiiu_key_pressed(int key) { bool ret = false; - + if (key >= RETROK_LAST) return false; @@ -127,7 +147,7 @@ static int16_t wiiu_input_state(void *data, if(!wiiu || !(port < MAX_PADS) || !binds || !binds[port]) return 0; - + switch (device) { case RETRO_DEVICE_JOYPAD: @@ -140,6 +160,9 @@ static int16_t wiiu_input_state(void *data, return input_joypad_analog(wiiu->joypad, joypad_info, port, idx, id, binds[port]); break; + case RETRO_DEVICE_POINTER: + case RARCH_DEVICE_POINTER_SCREEN: + return wiiu_pointer_device_state(wiiu, id); } return 0; @@ -151,7 +174,7 @@ static void wiiu_input_free_input(void *data) if (wiiu && wiiu->joypad) wiiu->joypad->destroy(); - + KBDTeardown(); free(data); @@ -165,10 +188,10 @@ static void* wiiu_input_init(const char *joypad_driver) DEBUG_STR(joypad_driver); wiiu->joypad = input_joypad_init_driver(joypad_driver, wiiu); - + KBDSetup(&kb_connection_callback, &kb_disconnection_callback,&kb_key_callback); - + input_keymaps_init_keyboard_lut(rarch_key_map_wiiu); return wiiu; @@ -186,9 +209,10 @@ static uint64_t wiiu_input_get_capabilities(void *data) { (void)data; - return (1 << RETRO_DEVICE_JOYPAD) | - (1 << RETRO_DEVICE_ANALOG) | - (1 << RETRO_DEVICE_KEYBOARD); + return (1 << RETRO_DEVICE_JOYPAD) | + (1 << RETRO_DEVICE_ANALOG) | + (1 << RETRO_DEVICE_KEYBOARD) | + (1 << RETRO_DEVICE_POINTER); } static const input_device_driver_t *wiiu_input_get_joypad_driver(void *data) diff --git a/input/drivers_joypad/wiiu_joypad.c b/input/drivers_joypad/wiiu_joypad.c index 4b59c909eb..33d2da4d7b 100644 --- a/input/drivers_joypad/wiiu_joypad.c +++ b/input/drivers_joypad/wiiu_joypad.c @@ -29,6 +29,7 @@ #include "../../tasks/tasks_internal.h" #include "../../retroarch.h" #include "../../command.h" +#include "../../gfx/video_driver.h" #include "string.h" #include "wiiu_dbg.h" @@ -57,7 +58,8 @@ static uint8_t pad_type[KPAD_COUNT] = {WIIUINPUT_TYPE_NONE, WIIUINPUT_TYPE_NONE, static uint8_t hid_status[HID_COUNT]; static InputData hid_data[HID_COUNT]; -static int16_t analog_state[MAX_PADS][2][2]; +/* 3 axis - one for touch/future IR support? */ +static int16_t analog_state[MAX_PADS][3][2]; static bool wiiu_pad_inited = false; static char hidName[HID_COUNT][255]; @@ -135,12 +137,12 @@ static int16_t wiiu_joypad_axis(unsigned port_num, uint32_t joyaxis) if (joyaxis == AXIS_NONE || port_num >= MAX_PADS) return 0; - if (AXIS_NEG_GET(joyaxis) < 4) + if (AXIS_NEG_GET(joyaxis) < 6) { axis = AXIS_NEG_GET(joyaxis); is_neg = true; } - else if (AXIS_POS_GET(joyaxis) < 4) + else if (AXIS_POS_GET(joyaxis) < 6) { axis = AXIS_POS_GET(joyaxis); is_pos = true; @@ -163,6 +165,14 @@ static int16_t wiiu_joypad_axis(unsigned port_num, uint32_t joyaxis) case 3: val = analog_state[port_num][1][1]; break; + + case 4: + val = analog_state[port_num][2][0]; + break; + + case 5: + val = analog_state[port_num][2][1]; + break; } if (is_neg && val > 0) @@ -173,6 +183,12 @@ static int16_t wiiu_joypad_axis(unsigned port_num, uint32_t joyaxis) return val; } +static float scaleTP(float oldMin, float oldMax, float newMin, float newMax, float val) { + float oldRange = (oldMax - oldMin); + float newRange = (newMax - newMin); + return (((val - oldMin) * newRange) / oldRange) + newMin; +} + static void wiiu_joypad_poll(void) { int i, c, result; @@ -183,7 +199,7 @@ static void wiiu_joypad_poll(void) if (!vpadError) { - pad_state[0] = vpad.hold & ~0x7F800000; /* clear out emulated analog sticks */ + pad_state[0] = vpad.hold & VPAD_MASK_BUTTONS; /* buttons only */ analog_state[0][RETRO_DEVICE_INDEX_ANALOG_LEFT] [RETRO_DEVICE_ID_ANALOG_X] = vpad.leftStick.x * 0x7FF0; analog_state[0][RETRO_DEVICE_INDEX_ANALOG_LEFT] [RETRO_DEVICE_ID_ANALOG_Y] = vpad.leftStick.y * 0x7FF0; analog_state[0][RETRO_DEVICE_INDEX_ANALOG_RIGHT] [RETRO_DEVICE_ID_ANALOG_X] = vpad.rightStick.x * 0x7FF0; @@ -191,8 +207,28 @@ static void wiiu_joypad_poll(void) BIT64_CLEAR(lifecycle_state, RARCH_MENU_TOGGLE); - if ((vpad.tpNormal.touched) && (vpad.tpNormal.x > 200) && (vpad.tpNormal.validity) == 0) - BIT64_SET(lifecycle_state, RARCH_MENU_TOGGLE); + /* You can only call VPADData once every loop, else the second one + won't get any data. Thus; I had to hack touch support into the existing + joystick API. Woo-hoo? Misplaced requests for touch axis are filtered + out in wiiu_input. + */ + if (vpad.tpNormal.touched && vpad.tpNormal.validity == VPAD_VALID) { + struct video_viewport vp = {0}; + video_driver_get_viewport_info(&vp); + VPADTouchData cal = {0}; + /* Calibrates data to a 720p screen, seems to clamp outer 12px */ + VPADGetTPCalibratedPoint(0, &cal, &(vpad.tpNormal)); + /* Calibrate to viewport and save as axis 2 (idx 4,5) */ + analog_state[0][2][0] = (int16_t)scaleTP(12.0f, 1268.0f, 0.0f, (float)(vp.full_width), (float)cal.x); + analog_state[0][2][1] = (int16_t)scaleTP(12.0f, 708.0f, 0.0f, (float)(vp.full_height), (float)cal.y); + + /* Emulating a button for touch; lets people assign it to menu + for that traditional RetroArch Wii U feel */ + pad_state[0] |= VPAD_BUTTON_TOUCH; + } else { + /* This is probably 0 anyway */ + pad_state[0] &= ~VPAD_BUTTON_TOUCH; + } /* panic button */ if ((vpad.hold & (VPAD_BUTTON_R | VPAD_BUTTON_L | VPAD_BUTTON_STICK_R | VPAD_BUTTON_STICK_L)) diff --git a/wiiu/system/imports.h b/wiiu/system/imports.h index 3aa90a6746..866382c1de 100644 --- a/wiiu/system/imports.h +++ b/wiiu/system/imports.h @@ -225,6 +225,7 @@ IMPORT_BEGIN(vpad); IMPORT(VPADRead); IMPORT(VPADInit); +IMPORT(VPADGetTPCalibratedPoint); IMPORT_END(); From cb44766c4709b8f80cfc153f465cf51db0718adb Mon Sep 17 00:00:00 2001 From: Twinaphex Date: Sat, 19 Aug 2017 10:08:17 +0200 Subject: [PATCH 068/137] Update CHANGES.md --- CHANGES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.md b/CHANGES.md index 6f9551bfae..46f4956014 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,4 +1,5 @@ # 1.6.8 (future) +- WIIU: Initial touchscreen support for WiiU gamepad. # 1.6.7 (future) - SCANNER: Fix directory scanning. From 5b5774e15330474d0a54fa7afa755c3fa5683272 Mon Sep 17 00:00:00 2001 From: Twinaphex Date: Sat, 19 Aug 2017 10:09:00 +0200 Subject: [PATCH 069/137] Update CHANGES.md --- CHANGES.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 46f4956014..5ca8388f46 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,7 +1,8 @@ # 1.6.8 (future) +- GUI: (XMB) Skip drawing the fading list when it is already transparent. Optimization. - WIIU: Initial touchscreen support for WiiU gamepad. -# 1.6.7 (future) +# 1.6.7 - SCANNER: Fix directory scanning. - SCANNER: Fix file scanning. - COMMON: Fix 'Disk Image Append' option. From e77f990807fe25aa34247770fa96906c35b5e3b2 Mon Sep 17 00:00:00 2001 From: Twinaphex Date: Sat, 19 Aug 2017 10:09:37 +0200 Subject: [PATCH 070/137] Update CHANGES.md --- CHANGES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.md b/CHANGES.md index 5ca8388f46..bf927d318a 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,5 +1,6 @@ # 1.6.8 (future) - GUI: (XMB) Skip drawing the fading list when it is already transparent. Optimization. +- NETPLAY: Fix disconnection not fully deinitializing Netplay. - WIIU: Initial touchscreen support for WiiU gamepad. # 1.6.7 From 1d2014a3c9b3f38007597552c033c97296d63fd6 Mon Sep 17 00:00:00 2001 From: Twinaphex Date: Sat, 19 Aug 2017 10:17:44 +0200 Subject: [PATCH 071/137] Update CHANGES.md --- CHANGES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.md b/CHANGES.md index bf927d318a..7245cc6253 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,6 +1,7 @@ # 1.6.8 (future) - GUI: (XMB) Skip drawing the fading list when it is already transparent. Optimization. - NETPLAY: Fix disconnection not fully deinitializing Netplay. +- WII: Use custom, embedded libogc SDK. - WIIU: Initial touchscreen support for WiiU gamepad. # 1.6.7 From 822e2fd0d49fffff6d1538524678287d4ce97565 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sat, 19 Aug 2017 12:13:03 +0200 Subject: [PATCH 072/137] Put this around an HW_RVL ifdef --- frontend/drivers/platform_gx.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/frontend/drivers/platform_gx.c b/frontend/drivers/platform_gx.c index 986d8b80e2..9248d5558f 100644 --- a/frontend/drivers/platform_gx.c +++ b/frontend/drivers/platform_gx.c @@ -309,7 +309,9 @@ static void frontend_gx_init(void *data) __exception_setreload(8); #endif +#ifdef HW_RVL fatInitDefault(); +#endif #ifdef HAVE_LOGGER devoptab_list[STD_OUT] = &dotab_stdout; From e193f7a22ade048c7096a83f747aa4bdfcb16bc0 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sat, 19 Aug 2017 12:27:24 +0200 Subject: [PATCH 073/137] Style nits --- frontend/drivers/platform_gx.c | 46 ++++++++++++++++----------------- frontend/drivers/platform_wii.c | 11 +++++--- 2 files changed, 31 insertions(+), 26 deletions(-) diff --git a/frontend/drivers/platform_gx.c b/frontend/drivers/platform_gx.c index 9248d5558f..8443348c63 100644 --- a/frontend/drivers/platform_gx.c +++ b/frontend/drivers/platform_gx.c @@ -76,29 +76,29 @@ enum #if defined(HAVE_LOGGER) || defined(HAVE_FILE_LOGGER) static devoptab_t dotab_stdout = { - "stdout", // device name - 0, // size of file structure - NULL, // device open - NULL, // device close - NULL, // device write - NULL, // device read - NULL, // device seek - NULL, // device fstat - NULL, // device stat - NULL, // device link - NULL, // device unlink - NULL, // device chdir - NULL, // device rename - NULL, // device mkdir - 0, // dirStateSize - NULL, // device diropen_r - NULL, // device dirreset_r - NULL, // device dirnext_r - NULL, // device dirclose_r - NULL, // device statvfs_r - NULL, // device ftrunctate_r - NULL, // device fsync_r - NULL, // deviceData; + "stdout", /* device name */ + 0, /* size of file structure */ + NULL, /* device open */ + NULL, /* device close */ + NULL, /* device write */ + NULL, /* device read */ + NULL, /* device seek */ + NULL, /* device fstat */ + NULL, /* device stat */ + NULL, /* device link */ + NULL, /* device unlink */ + NULL, /* device chdir */ + NULL, /* device rename */ + NULL, /* device mkdir */ + 0, /* dirStateSize */ + NULL, /* device diropen_r */ + NULL, /* device dirreset_r */ + NULL, /* device dirnext_r */ + NULL, /* device dirclose_r */ + NULL, /* device statvfs_r */ + NULL, /* device ftrunctate_r */ + NULL, /* device fsync_r */ + NULL, /* deviceData; */ }; #endif diff --git a/frontend/drivers/platform_wii.c b/frontend/drivers/platform_wii.c index c50a2902a9..ac5ebfaea3 100644 --- a/frontend/drivers/platform_wii.c +++ b/frontend/drivers/platform_wii.c @@ -73,10 +73,15 @@ static void dol_copy_argv_path(const char *dolpath, const char *argpath) len += t_len; } /* a relative path */ - else if (strstr(dolpath, "sd:/") != dolpath && strstr(dolpath, "usb:/") != dolpath && - strstr(dolpath, "carda:/") != dolpath && strstr(dolpath, "cardb:/") != dolpath) + else if ( + (strstr(dolpath, "sd:/") != dolpath) && + (strstr(dolpath, "usb:/") != dolpath) && + (strstr(dolpath, "carda:/") != dolpath) && + (strstr(dolpath, "cardb:/") != dolpath) + ) { - fill_pathname_parent_dir(tmp, __system_argv->argv[0], sizeof(tmp)); + fill_pathname_parent_dir(tmp, + __system_argv->argv[0], sizeof(tmp)); t_len = strlen(tmp); memcpy(cmdline, tmp, t_len); len += t_len; From ab50eca024628a30e95d20c81d6b86da21a48511 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Higor=20Eur=C3=ADpedes?= Date: Fri, 18 Aug 2017 23:08:51 -0300 Subject: [PATCH 074/137] (playlist.c) Fix clear/free loop conditionals --- playlist.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/playlist.c b/playlist.c index a09f83d290..ce12074994 100644 --- a/playlist.c +++ b/playlist.c @@ -424,7 +424,7 @@ void playlist_free(playlist_t *playlist) playlist->conf_path = NULL; - for (i = 0; i < playlist->cap; i++) + for (i = 0; i < playlist->size; i++) { struct playlist_entry *entry = &playlist->entries[i]; @@ -450,7 +450,7 @@ void playlist_clear(playlist_t *playlist) if (!playlist) return; - for (i = 0; i < playlist->cap; i++) + for (i = 0; i < playlist->size; i++) { struct playlist_entry *entry = &playlist->entries[i]; From e065d704262c9b81b9e1bdb6557ad92bda5e1dd8 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sat, 19 Aug 2017 14:17:30 +0200 Subject: [PATCH 075/137] (WGL) Try to use wglSwapLayerBuffers first before resorting to SwapBuffers --- gfx/drivers_context/wgl_ctx.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gfx/drivers_context/wgl_ctx.c b/gfx/drivers_context/wgl_ctx.c index 0766516cb5..04df13d6c4 100644 --- a/gfx/drivers_context/wgl_ctx.c +++ b/gfx/drivers_context/wgl_ctx.c @@ -368,7 +368,8 @@ static void gfx_ctx_wgl_swap_buffers(void *data, void *data2) { case GFX_CTX_OPENGL_API: #ifdef HAVE_OPENGL - SwapBuffers(win32_hdc); + if (wglSwapLayerBuffers(win32_hdc, WGL_SWAP_MAIN_PLANE) == FALSE) + SwapBuffers(win32_hdc); #endif break; From 4d8914e24bc7ab997ac79a8f559eabb59e4703cc Mon Sep 17 00:00:00 2001 From: Twinaphex Date: Sat, 19 Aug 2017 14:18:50 +0200 Subject: [PATCH 076/137] Update CHANGES.md --- CHANGES.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 7245cc6253..3c2b1bd02d 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,6 +1,8 @@ # 1.6.8 (future) - GUI: (XMB) Skip drawing the fading list when it is already transparent. Optimization. - NETPLAY: Fix disconnection not fully deinitializing Netplay. +- COMMON: Fix clear/free loop conditionals in playlists. +- WINDOWS/WGL: Try to use wglSwapLayerBuffers instead of SwapBuffers if possible (for more optimal performance). - WII: Use custom, embedded libogc SDK. - WIIU: Initial touchscreen support for WiiU gamepad. From 6bc5cd302aae341bcd6cd4daf969709cc96c9f6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Higor=20Eur=C3=ADpedes?= Date: Sat, 19 Aug 2017 11:01:27 -0300 Subject: [PATCH 077/137] (xmb) Comment out visible item calculation in xmb_draw_items() Fixes a regression where fading animations didn't render if you were far into the previous list. This happened because "current" has an incorrect value thanks to a menu_navigation_set_selection(0) call in menu_cbs_left.c:162 --- menu/drivers/xmb.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index cb092714ed..4c1941fa6b 100644 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -2278,7 +2278,7 @@ static void xmb_draw_items( first = i; last = end - 1; - xmb_calculate_visible_range(xmb, height, end, current, &first, &last); + /* xmb_calculate_visible_range(xmb, height, end, current, &first, &last); */ menu_display_blend_begin(); @@ -2315,6 +2315,12 @@ static void xmb_draw_items( icon_y = xmb->margins.screen.top + node->y + half_size; + if (icon_y < half_size) + continue; + + if (icon_y > height + xmb->icon.size) + break; + icon_x = node->x + xmb->margins.screen.left + xmb->icon.spacing.horizontal - half_size; From 1bc0319f79091212c04b81ba3cfc1f20572e13f2 Mon Sep 17 00:00:00 2001 From: gizmo98 Date: Sat, 19 Aug 2017 17:03:01 +0200 Subject: [PATCH 078/137] Broadcom VC4: Add Videocore config option Add option to disable Videocore autodetect so VC4 open source driver can be used. --- qb/config.libs.sh | 8 +++++--- qb/config.params.sh | 1 + 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/qb/config.libs.sh b/qb/config.libs.sh index 6f2daf2369..26230e57a3 100644 --- a/qb/config.libs.sh +++ b/qb/config.libs.sh @@ -35,11 +35,13 @@ fi add_define_make DYLIB_LIB "$DYLIB" [ "$OS" = 'Darwin' ] && HAVE_X11=no # X11 breaks on recent OSXes even if present. - -[ -d /opt/vc/lib ] && add_library_dirs /opt/vc/lib && add_library_dirs /opt/vc/lib/GL -check_lib VIDEOCORE -lbcm_host bcm_host_init "-lvcos -lvchiq_arm" check_lib SYSTEMD -lsystemd sd_get_machine_names +if [ "$HAVE_VIDEOCORE" != "no" ]; then + [ -d /opt/vc/lib ] && add_library_dirs /opt/vc/lib && add_library_dirs /opt/vc/lib/GL + check_lib VIDEOCORE -lbcm_host bcm_host_init "-lvcos -lvchiq_arm" +fi + if [ "$HAVE_VIDEOCORE" = 'yes' ]; then [ -d /opt/vc/include ] && add_include_dirs /opt/vc/include [ -d /opt/vc/include/interface/vcos/pthreads ] && add_include_dirs /opt/vc/include/interface/vcos/pthreads diff --git a/qb/config.params.sh b/qb/config.params.sh index 2b4eb22efb..8f9913e9af 100644 --- a/qb/config.params.sh +++ b/qb/config.params.sh @@ -103,3 +103,4 @@ HAVE_HID=yes # Low-level HID (Human Interface Device) support HAVE_LANGEXTRA=yes # Multi-language support HAVE_OSMESA=no # Off-screen Mesa rendering HAVE_VIDEOPROCESSOR=auto # Enable video processor core +HAVE_VIDEOCORE=auto # Broadcom Videocore 4 support From e79ed86e384314ecd4a9b58c80e7e14d178ef79d Mon Sep 17 00:00:00 2001 From: gizmo98 Date: Sat, 19 Aug 2017 17:03:38 +0200 Subject: [PATCH 079/137] config.lib.sh: add missing $ --- qb/config.libs.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qb/config.libs.sh b/qb/config.libs.sh index 26230e57a3..db496b01cf 100644 --- a/qb/config.libs.sh +++ b/qb/config.libs.sh @@ -111,7 +111,7 @@ if [ "$HAVE_EGL" != "no" -a "$OS" != 'Win32' ]; then fi fi -if [ "HAVE_SSA" != "no" ]; then +if [ "$HAVE_SSA" != "no" ]; then check_lib SSA -lass ass_library_init fi From 85ab8b83a0395b03696c83eaa005d88131292ccc Mon Sep 17 00:00:00 2001 From: theheroGAC Date: Sat, 19 Aug 2017 20:01:22 +0200 Subject: [PATCH 080/137] Fixed some strings Fixed some strings and began to rearrange the various strings --- intl/msg_hash_it.h | 58 +++++++++++++++++++++++++--------------------- 1 file changed, 32 insertions(+), 26 deletions(-) diff --git a/intl/msg_hash_it.h b/intl/msg_hash_it.h index b94c62a7b6..df813e223c 100644 --- a/intl/msg_hash_it.h +++ b/intl/msg_hash_it.h @@ -223,7 +223,7 @@ MSG_HASH( "Audio" ) MSG_HASH(MENU_ENUM_LABEL_VALUE_AUDIO_SYNC, - "Sincro audio") + "Sincronizzazione audio") MSG_HASH(MENU_ENUM_LABEL_VALUE_AUDIO_VOLUME, "Livello volume audio (dB)") MSG_HASH(MENU_ENUM_LABEL_VALUE_AUTOSAVE_INTERVAL, @@ -323,8 +323,7 @@ MSG_HASH( "Descrizione" ) MSG_HASH(MENU_ENUM_LABEL_VALUE_CHEEVOS_HARDCORE_MODE_ENABLE, - /* FIXME? Translate 'Achievements Hardcore Mode' */ - "Modalità Hardcore") + "Modalità Achievements Hardcore") MSG_HASH(MENU_ENUM_LABEL_VALUE_CHEEVOS_LOCKED_ACHIEVEMENTS, "Obiettivi bloccati:") MSG_HASH( @@ -337,8 +336,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_LABEL_VALUE_CHEEVOS_TEST_UNOFFICIAL, - /* FIXME? Translate 'Test Unofficial Achievements' */ - "Prova non ufficiali") + "Prova Achievements non ufficiali") MSG_HASH(MENU_ENUM_LABEL_VALUE_CHEEVOS_UNLOCKED_ACHIEVEMENTS, "Obiettivi sbloccati,") MSG_HASH( @@ -375,8 +373,8 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_ASSETS_DIR, "Download") MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_ASSETS_DIRECTORY, "Download") -MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_CHEAT_OPTIONS, /* UPDATE/FIXME */ - "Opzione dei trucchi per il core") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_CHEAT_OPTIONS, + "Trucchi/Cheats") MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_COUNTERS, "Contatore dei core") MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_ENABLE, @@ -438,7 +436,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_DATABASE_SELECTION, MSG_HASH(MENU_ENUM_LABEL_VALUE_DELETE_ENTRY, "Rimuovi") MSG_HASH(MENU_ENUM_LABEL_VALUE_FAVORITES, - "Seleziona il file ed intercetta il core") /* TODO/FIXME - update */ + "Avvia da directory") MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_CONTENT, "") MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_DEFAULT, @@ -455,12 +453,12 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_DISK_IMAGE_APPEND, "Aggiungi immagine disco") MSG_HASH(MENU_ENUM_LABEL_VALUE_DISK_INDEX, "Indice del disco") -MSG_HASH(MENU_ENUM_LABEL_VALUE_DISK_OPTIONS, /* UPDATE/FIXME */ - "Opzioni disco") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DISK_OPTIONS, + "Controllo disco") MSG_HASH(MENU_ENUM_LABEL_VALUE_DONT_CARE, "Non considerare") MSG_HASH(MENU_ENUM_LABEL_VALUE_DOWNLOADED_FILE_DETECT_CORE_LIST, - "Scarica sulle directories") + "Downloads") MSG_HASH(MENU_ENUM_LABEL_VALUE_DOWNLOAD_CORE, "Scarica Core...") MSG_HASH(MENU_ENUM_LABEL_VALUE_DOWNLOAD_CORE_CONTENT, @@ -774,7 +772,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_LIBRETRO_LOG_LEVEL, MSG_HASH(MENU_ENUM_LABEL_VALUE_LINEAR, "Lineare") MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_ARCHIVE, - "Carica archivio con il core") /* TODO/FIXME */ + "Carica archivio") MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_HISTORY, "Carica Recenti") MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_LIST, @@ -817,8 +815,8 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_DRIVER, "Driver Menù") MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_ENUM_THROTTLE_FRAMERATE, "Frequenza fotogrammi del menù") -MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FILE_BROWSER_SETTINGS, /* TODO/FIXME - update */ - "Seleziona file") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FILE_BROWSER_SETTINGS, + "Impostazioni") MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_LINEAR_FILTER, "Filtro lineare del menù") MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_SETTINGS, @@ -948,7 +946,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_ONSCREEN_OVERLAY_SETTINGS, MSG_HASH(MENU_ENUM_LABEL_VALUE_ONSCREEN_NOTIFICATIONS_SETTINGS, "Notifiche sullo schermo") MSG_HASH(MENU_ENUM_LABEL_VALUE_OPEN_ARCHIVE, - "Apri archivio come cartella") /* TODO/FIXME */ + "Apri archivio") MSG_HASH(MENU_ENUM_LABEL_VALUE_OPTIONAL, "Opzionale") MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY, @@ -1094,7 +1092,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_RETRO_ACHIEVEMENTS_SETTINGS, MSG_HASH(MENU_ENUM_LABEL_VALUE_REWIND_ENABLE, "Abilita riavvolgimento") MSG_HASH(MENU_ENUM_LABEL_VALUE_REWIND_GRANULARITY, - "Livello della funzione riavvolgi") + "Livello di riavvolgimento") MSG_HASH(MENU_ENUM_LABEL_VALUE_REWIND_SETTINGS, "Riavvolgimento") MSG_HASH(MENU_ENUM_LABEL_VALUE_RGUI_BROWSER_DIRECTORY, @@ -1341,8 +1339,8 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_ZLIB_SUPPORT, "Supporto Zlib") MSG_HASH(MENU_ENUM_LABEL_VALUE_TAKE_SCREENSHOT, "Cattura Screenshot") -MSG_HASH(MENU_ENUM_LABEL_VALUE_THREADED_DATA_RUNLOOP_ENABLE, /* TODO/FIXME - update */ - "Carica ciclo di dati nei thread") +MSG_HASH(MENU_ENUM_LABEL_VALUE_THREADED_DATA_RUNLOOP_ENABLE, + "Funzioni Threaded") MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAILS, "Miniature") MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAILS_DIRECTORY, @@ -1420,7 +1418,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO_INDEX, MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_BLACK_FRAME_INSERTION, "Inserimento cornice nera") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_CROP_OVERSCAN, - "Riduci Overscan (Riavvia)") + "Riduci Overscan (Ricarica)") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_DISABLE_COMPOSITION, "Disattiva composizione desktop") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_DRIVER, @@ -2115,7 +2113,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_AUDIO_SYNC, - "Sincronizzare l'audio. Consigliato." + "Sincronizza l'audio. Consigliato." ) MSG_HASH( MENU_ENUM_SUBLABEL_INPUT_AXIS_THRESHOLD, @@ -2441,7 +2439,7 @@ MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_WINDOW_WIDTH, MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_WINDOW_HEIGHT, "Imposta le dimensioni dell'altezza personalizzata per la finestra del display. Lasciando il valore a 0 tenterà di scalare la finestra il più grande possibile.") MSG_HASH(MENU_ENUM_SUBLABEL_SLOWMOTION_RATIO, - "In slow motion, il contenuto rallenterà il fattore specificato / impostato.") + "In slow motion, il contenuto verrà rallentato dal valore specificato / impostato.") MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_GPU_RECORD, "Registra l'output GPU del materiale ombreggiato se disponibile.") MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_POST_FILTER_RECORD, @@ -2530,10 +2528,6 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_FAVORITES, "Mostra colonna Preferiti") MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_NETPLAY, "Mostra colonna stanze Netplay") -MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_ICONS_ENABLE, - "Icone del Menu") -MSG_HASH(MENU_ENUM_SUBLABEL_MATERIALUI_ICONS_ENABLE, - "Abilita/disabilita le icone del menu visualizzate sul lato sinistro di ogni voce.") MSG_HASH(MENU_ENUM_SUBLABEL_MENU_ENUM_THROTTLE_FRAMERATE, "Assicurarsi che il framerate sia limitato all'interno del menu") MSG_HASH(MENU_ENUM_SUBLABEL_MOUSE_ENABLE, @@ -2549,4 +2543,16 @@ MSG_HASH(MENU_ENUM_SUBLABEL_BATTERY_LEVEL_ENABLE, MSG_HASH(MENU_ENUM_SUBLABEL_RGUI_SHOW_START_SCREEN, "Mostra la schermata di avvio nel menu. Questo viene automaticamente impostato su off dopo l'avvio del programma per la prima volta.") MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_DELETE, - "Cancella core") + "Cancella core") +MSG_HASH(MENU_ENUM_SUBLABEL_SAVE_CURRENT_CONFIG_OVERRIDE_CORE, + "Salva un file di configurazione override che si applica a tutti i contenuti caricati con questo core. Avrà la precedenza sulla configurazione principale.") +MSG_HASH(MENU_ENUM_SUBLABEL_SAVE_CURRENT_CONFIG_OVERRIDE_GAME, + "Salva un file di configurazione override che si applica solo al contenuto corrente. Avrà la precedenza sulla configurazione principale.") +MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS_PORT, + "Seleziona la porta di ascolto per l'overlay se è attivata l'opzione Visualizza input nell'Overlay.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS_PORT, + "Visualizza gli input della porta di ascolto ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_ICONS_ENABLE, + "Icone del Menu") +MSG_HASH(MENU_ENUM_SUBLABEL_MATERIALUI_ICONS_ENABLE, + "Abilita/disabilita le icone del menu visualizzate sul lato sinistro di ogni voce.") From e0eb935b909c2fc75722cf61c4ee679a58c080ae Mon Sep 17 00:00:00 2001 From: Twinaphex Date: Sat, 19 Aug 2017 20:28:19 +0200 Subject: [PATCH 081/137] Update CHANGES.md --- CHANGES.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 3c2b1bd02d..c272b2e388 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,5 +1,7 @@ # 1.6.8 (future) - GUI: (XMB) Skip drawing the fading list when it is already transparent. Optimization. +- GUI: (XMB) Comment out visible item calculation in xmb_draw_items(). +- LINUX/PI: Broadcom VC4: Add Videocore config option - NETPLAY: Fix disconnection not fully deinitializing Netplay. - COMMON: Fix clear/free loop conditionals in playlists. - WINDOWS/WGL: Try to use wglSwapLayerBuffers instead of SwapBuffers if possible (for more optimal performance). From 0605a8d6560430f48270c940362ee0d8a9516993 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sat, 19 Aug 2017 21:05:17 +0200 Subject: [PATCH 082/137] Get rid of some hashes --- menu/cbs/menu_cbs_deferred_push.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/menu/cbs/menu_cbs_deferred_push.c b/menu/cbs/menu_cbs_deferred_push.c index 82243a95b8..84905e7b2a 100644 --- a/menu/cbs/menu_cbs_deferred_push.c +++ b/menu/cbs/menu_cbs_deferred_push.c @@ -1178,6 +1178,21 @@ static int menu_cbs_init_bind_deferred_push_compare_label( { BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_system_information); } + else if (strstr(label, + msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_ACCOUNTS_LIST))) + { + BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_accounts_list); + } + else if (strstr(label, + msg_hash_to_str(MENU_ENUM_LABEL_CORE_LIST))) + { + BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_list); + } + else if (strstr(label, + msg_hash_to_str(MENU_ENUM_LABEL_LOAD_CONTENT_HISTORY))) + { + BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_history_list); + } else { if (cbs->enum_idx != MSG_UNKNOWN) @@ -1475,9 +1490,6 @@ static int menu_cbs_init_bind_deferred_push_compare_label( case MENU_LABEL_DEFERRED_USER_BINDS_LIST: BIND_ACTION_DEFERRED_PUSH(cbs, deferred_user_binds_list); break; - case MENU_LABEL_DEFERRED_ACCOUNTS_LIST: - BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_accounts_list); - break; case MENU_LABEL_DEFERRED_PLAYLIST_SETTINGS_LIST: BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_playlist_settings_list); break; @@ -1517,9 +1529,6 @@ static int menu_cbs_init_bind_deferred_push_compare_label( BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_lakka_list); #endif break; - case MENU_LABEL_LOAD_CONTENT_HISTORY: - BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_history_list); - break; case MENU_LABEL_DATABASE_MANAGER_LIST: BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_database_manager_list); break; @@ -1660,9 +1669,6 @@ static int menu_cbs_init_bind_deferred_push_compare_label( case MENU_LABEL_CORE_INPUT_REMAPPING_OPTIONS: BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_input_remapping_options); break; - case MENU_LABEL_CORE_LIST: - BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_list); - break; case MENU_LABEL_CONTENT_COLLECTION_LIST: BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_content_collection_list); break; From ca8fd24252f13b4ecf41037ff8b716d3dd763e76 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sat, 19 Aug 2017 21:10:15 +0200 Subject: [PATCH 083/137] Get rid of some hashes --- menu/cbs/menu_cbs_deferred_push.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/menu/cbs/menu_cbs_deferred_push.c b/menu/cbs/menu_cbs_deferred_push.c index 84905e7b2a..18ed23d876 100644 --- a/menu/cbs/menu_cbs_deferred_push.c +++ b/menu/cbs/menu_cbs_deferred_push.c @@ -1193,6 +1193,16 @@ static int menu_cbs_init_bind_deferred_push_compare_label( { BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_history_list); } + else if (strstr(label, + msg_hash_to_str(MENU_ENUM_LABEL_SETTINGS))) + { + BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_settings); + } + else if (strstr(label, + msg_hash_to_str(MENU_ENUM_LABEL_CORE_OPTIONS))) + { + BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_options); + } else { if (cbs->enum_idx != MSG_UNKNOWN) @@ -1657,12 +1667,6 @@ static int menu_cbs_init_bind_deferred_push_compare_label( case MENU_LABEL_VIDEO_SHADER_PARAMETERS: BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_video_shader_parameters); break; - case MENU_LABEL_SETTINGS: - BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_settings); - break; - case MENU_LABEL_CORE_OPTIONS: - BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_options); - break; case MENU_LABEL_CORE_CHEAT_OPTIONS: BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_cheat_options); break; From af2042e0fd35693bf3017526005393829d4f0e9b Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sat, 19 Aug 2017 21:35:12 +0200 Subject: [PATCH 084/137] Cleanups; get rid of more hashes --- menu/cbs/menu_cbs_deferred_push.c | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/menu/cbs/menu_cbs_deferred_push.c b/menu/cbs/menu_cbs_deferred_push.c index 18ed23d876..7313fb0558 100644 --- a/menu/cbs/menu_cbs_deferred_push.c +++ b/menu/cbs/menu_cbs_deferred_push.c @@ -1203,6 +1203,23 @@ static int menu_cbs_init_bind_deferred_push_compare_label( { BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_options); } + else if (strstr(label, + msg_hash_to_str(MENU_ENUM_LABEL_NETWORK_INFORMATION))) + { + BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_network_information); + } +#ifdef HAVE_NETWORKING + else if (strstr(label, + msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_THUMBNAILS_UPDATER_LIST))) + { + BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_thumbnails_updater_list); + } + else if (strstr(label, + msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_CORE_CONTENT_LIST))) + { + BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_content_list); + } +#endif else { if (cbs->enum_idx != MSG_UNKNOWN) @@ -1524,16 +1541,6 @@ static int menu_cbs_init_bind_deferred_push_compare_label( case MENU_LABEL_DEFERRED_ARCHIVE_OPEN: BIND_ACTION_DEFERRED_PUSH(cbs, deferred_archive_open); break; - case MENU_LABEL_DEFERRED_CORE_CONTENT_LIST: -#ifdef HAVE_NETWORKING - BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_content_list); -#endif - break; - case MENU_LABEL_DEFERRED_THUMBNAILS_UPDATER_LIST: -#ifdef HAVE_NETWORKING - BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_thumbnails_updater_list); -#endif - break; case MENU_LABEL_DEFERRED_LAKKA_LIST: #ifdef HAVE_NETWORKING BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_lakka_list); @@ -1646,9 +1653,6 @@ static int menu_cbs_init_bind_deferred_push_compare_label( BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_cursor_manager_list_deferred_query_rdb_entry_releaseyear); break; #endif - case MENU_LABEL_NETWORK_INFORMATION: - BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_network_information); - break; case MENU_LABEL_ACHIEVEMENT_LIST: BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_achievement_list); break; From f8b430735612eae0cd5ff92632b08d88d943ef2b Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sat, 19 Aug 2017 21:38:33 +0200 Subject: [PATCH 085/137] Cleanups; get rid of hashes --- menu/cbs/menu_cbs_deferred_push.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/menu/cbs/menu_cbs_deferred_push.c b/menu/cbs/menu_cbs_deferred_push.c index 7313fb0558..2a11ee2f12 100644 --- a/menu/cbs/menu_cbs_deferred_push.c +++ b/menu/cbs/menu_cbs_deferred_push.c @@ -1220,6 +1220,21 @@ static int menu_cbs_init_bind_deferred_push_compare_label( BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_content_list); } #endif + else if (strstr(label, + msg_hash_to_str(MENU_ENUM_LABEL_ONLINE_UPDATER))) + { + BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_options); + } + else if (strstr(label, + msg_hash_to_str(MENU_ENUM_LABEL_HELP_LIST))) + { + BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_help); + } + else if (strstr(label, + msg_hash_to_str(MENU_ENUM_LABEL_INFORMATION_LIST))) + { + BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_information_list); + } else { if (cbs->enum_idx != MSG_UNKNOWN) @@ -1564,9 +1579,6 @@ static int menu_cbs_init_bind_deferred_push_compare_label( case MENU_LABEL_SHADER_OPTIONS: BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_shader_options); break; - case MENU_LABEL_ONLINE_UPDATER: - BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_options); - break; case MENU_LABEL_NETPLAY: BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_netplay); break; @@ -1579,15 +1591,9 @@ static int menu_cbs_init_bind_deferred_push_compare_label( case MENU_LABEL_LOAD_CONTENT_LIST: BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_load_content_list); break; - case MENU_LABEL_INFORMATION_LIST: - BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_information_list); - break; case MENU_LABEL_MANAGEMENT: BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_management_options); break; - case MENU_LABEL_HELP_LIST: - BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_help); - break; case MENU_LABEL_DEFERRED_CORE_LIST: BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_list_deferred); break; From d93dc10882fdc727d36cb80212db95ce1ee94501 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sat, 19 Aug 2017 21:58:47 +0200 Subject: [PATCH 086/137] Remove hash --- menu/cbs/menu_cbs_deferred_push.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/menu/cbs/menu_cbs_deferred_push.c b/menu/cbs/menu_cbs_deferred_push.c index 2a11ee2f12..501bc36f93 100644 --- a/menu/cbs/menu_cbs_deferred_push.c +++ b/menu/cbs/menu_cbs_deferred_push.c @@ -1235,6 +1235,11 @@ static int menu_cbs_init_bind_deferred_push_compare_label( { BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_information_list); } + else if (strstr(label, + msg_hash_to_str(MENU_ENUM_LABEL_SHADER_OPTIONS))) + { + BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_shader_options); + } else { if (cbs->enum_idx != MSG_UNKNOWN) @@ -1576,9 +1581,6 @@ static int menu_cbs_init_bind_deferred_push_compare_label( case MENU_LABEL_RECORD_CONFIG: BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_record_configfile); break; - case MENU_LABEL_SHADER_OPTIONS: - BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_shader_options); - break; case MENU_LABEL_NETPLAY: BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_netplay); break; From b694c996312f2cf3b615dc0654191146b6c8d7e8 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sat, 19 Aug 2017 22:08:51 +0200 Subject: [PATCH 087/137] Regression fix --- menu/cbs/menu_cbs_deferred_push.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/menu/cbs/menu_cbs_deferred_push.c b/menu/cbs/menu_cbs_deferred_push.c index 501bc36f93..7d7ab18cf9 100644 --- a/menu/cbs/menu_cbs_deferred_push.c +++ b/menu/cbs/menu_cbs_deferred_push.c @@ -1193,11 +1193,6 @@ static int menu_cbs_init_bind_deferred_push_compare_label( { BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_history_list); } - else if (strstr(label, - msg_hash_to_str(MENU_ENUM_LABEL_SETTINGS))) - { - BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_settings); - } else if (strstr(label, msg_hash_to_str(MENU_ENUM_LABEL_CORE_OPTIONS))) { @@ -1531,6 +1526,9 @@ static int menu_cbs_init_bind_deferred_push_compare_label( { switch (label_hash) { + case MENU_LABEL_SETTINGS: + BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_settings); + break; case MENU_LABEL_DEFERRED_CONFIGURATIONS_LIST: BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_configurations_list); break; From 836aae9e9de3a6894b53007c2c63c2a76e97590c Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sat, 19 Aug 2017 22:10:33 +0200 Subject: [PATCH 088/137] Add TODO/FIXME notes --- menu/cbs/menu_cbs_deferred_push.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/menu/cbs/menu_cbs_deferred_push.c b/menu/cbs/menu_cbs_deferred_push.c index 7d7ab18cf9..6d347a785f 100644 --- a/menu/cbs/menu_cbs_deferred_push.c +++ b/menu/cbs/menu_cbs_deferred_push.c @@ -1526,10 +1526,10 @@ static int menu_cbs_init_bind_deferred_push_compare_label( { switch (label_hash) { - case MENU_LABEL_SETTINGS: + case MENU_LABEL_SETTINGS: /* TODO/FIXME */ BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_settings); break; - case MENU_LABEL_DEFERRED_CONFIGURATIONS_LIST: + case MENU_LABEL_DEFERRED_CONFIGURATIONS_LIST: /* TODO/FIXME */ BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_configurations_list); break; case MENU_LABEL_DEFERRED_USER_BINDS_LIST: From 3a465386805f38f47432055a3092355765eeb4f9 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sat, 19 Aug 2017 22:16:21 +0200 Subject: [PATCH 089/137] Remove hashes --- menu/cbs/menu_cbs_deferred_push.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/menu/cbs/menu_cbs_deferred_push.c b/menu/cbs/menu_cbs_deferred_push.c index 6d347a785f..f6f58b49fa 100644 --- a/menu/cbs/menu_cbs_deferred_push.c +++ b/menu/cbs/menu_cbs_deferred_push.c @@ -1235,6 +1235,16 @@ static int menu_cbs_init_bind_deferred_push_compare_label( { BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_shader_options); } + else if (strstr(label, + msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_USER_BINDS_LIST))) + { + BIND_ACTION_DEFERRED_PUSH(cbs, deferred_user_binds_list); + } + else if (strstr(label, + msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_INPUT_HOTKEY_BINDS_LIST))) + { + BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_input_hotkey_binds_list); + } else { if (cbs->enum_idx != MSG_UNKNOWN) @@ -1532,18 +1542,12 @@ static int menu_cbs_init_bind_deferred_push_compare_label( case MENU_LABEL_DEFERRED_CONFIGURATIONS_LIST: /* TODO/FIXME */ BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_configurations_list); break; - case MENU_LABEL_DEFERRED_USER_BINDS_LIST: - BIND_ACTION_DEFERRED_PUSH(cbs, deferred_user_binds_list); - break; case MENU_LABEL_DEFERRED_PLAYLIST_SETTINGS_LIST: BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_playlist_settings_list); break; case MENU_LABEL_DEFERRED_RECORDING_SETTINGS_LIST: BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_recording_settings_list); break; - case MENU_LABEL_DEFERRED_INPUT_HOTKEY_BINDS_LIST: - BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_input_hotkey_binds_list); - break; case MENU_LABEL_DEFERRED_ACCOUNTS_CHEEVOS_LIST: BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_accounts_cheevos_list); break; From 7156de52c4a9a0d96c49794461565cf0ade9b281 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sat, 19 Aug 2017 23:20:54 +0200 Subject: [PATCH 090/137] Add Makefile.libogc --- Makefile.libogc | 269 +++++++ wii/libogc/include/di/di.h | 133 ++++ wii/libogc/include/ipv4/lwip/icmp.h | 112 +++ wii/libogc/include/ipv4/lwip/inet.h | 87 +++ wii/libogc/include/ipv4/lwip/ip.h | 154 ++++ wii/libogc/include/ipv4/lwip/ip_addr.h | 162 ++++ wii/libogc/include/ipv4/lwip/ip_frag.h | 47 ++ wii/libogc/include/lwip/api.h | 101 +++ wii/libogc/include/lwip/api_msg.h | 86 ++ wii/libogc/include/lwip/arch.h | 216 ++++++ wii/libogc/include/lwip/debug.h | 90 +++ wii/libogc/include/lwip/def.h | 47 ++ wii/libogc/include/lwip/dhcp.h | 223 ++++++ wii/libogc/include/lwip/err.h | 70 ++ wii/libogc/include/lwip/lwipopts.h | 220 ++++++ wii/libogc/include/lwip/mem.h | 61 ++ wii/libogc/include/lwip/memp.h | 63 ++ wii/libogc/include/lwip/netif.h | 150 ++++ wii/libogc/include/lwip/opt.h | 669 ++++++++++++++++ wii/libogc/include/lwip/pbuf.h | 113 +++ wii/libogc/include/lwip/raw.h | 74 ++ wii/libogc/include/lwip/sio.h | 63 ++ wii/libogc/include/lwip/snmp.h | 178 +++++ wii/libogc/include/lwip/sockets.h | 271 +++++++ wii/libogc/include/lwip/stats.h | 158 ++++ wii/libogc/include/lwip/sys.h | 183 +++++ wii/libogc/include/lwip/tcp.h | 533 +++++++++++++ wii/libogc/include/lwip/tcpip.h | 59 ++ wii/libogc/include/lwip/udp.h | 104 +++ wii/libogc/include/netif/arch/cc.h | 73 ++ wii/libogc/include/netif/arch/cpu.h | 39 + wii/libogc/include/netif/arch/init.h | 46 ++ wii/libogc/include/netif/arch/lib.h | 42 + wii/libogc/include/netif/arch/perf.h | 40 + wii/libogc/include/netif/arch/sys_arch.h | 55 ++ wii/libogc/include/netif/etharp.h | 126 +++ wii/libogc/include/netif/gcif/gcif.h | 45 ++ wii/libogc/include/netif/loopif.h | 39 + wii/libogc/include/sdcard/card_buf.h | 36 +- wii/libogc/include/sdcard/card_cmn.h | 130 ++-- wii/libogc/include/sdcard/card_io.h | 102 +-- wii/libogc/include/sdcard/gcsd.h | 90 +-- wii/libogc/include/sdcard/wiisd_io.h | 88 +-- wii/libogc/include/wiikeyboard/keyboard.h | 92 +++ wii/libogc/include/wiikeyboard/usbkeyboard.h | 76 ++ wii/libogc/include/wiikeyboard/wsksymdef.h | 776 +++++++++++++++++++ wii/libogc/libs/cube/libbba.a | Bin 834668 -> 836524 bytes wii/libogc/libs/cube/libdb.a | Bin 521352 -> 521996 bytes wii/libogc/libs/cube/libogc.a | Bin 2621790 -> 2624714 bytes wii/libogc/libs/wii/libbte.a | Bin 471864 -> 472300 bytes wii/libogc/libs/wii/libdb.a | Bin 521512 -> 522152 bytes wii/libogc/libs/wii/libogc.a | Bin 3466174 -> 3469662 bytes wii/libogc/libs/wii/libwiikeyboard.a | Bin 132906 -> 133126 bytes wii/libogc/libs/wii/libwiiuse.a | Bin 415516 -> 416460 bytes 54 files changed, 6368 insertions(+), 223 deletions(-) create mode 100644 Makefile.libogc create mode 100644 wii/libogc/include/di/di.h create mode 100644 wii/libogc/include/ipv4/lwip/icmp.h create mode 100644 wii/libogc/include/ipv4/lwip/inet.h create mode 100644 wii/libogc/include/ipv4/lwip/ip.h create mode 100644 wii/libogc/include/ipv4/lwip/ip_addr.h create mode 100644 wii/libogc/include/ipv4/lwip/ip_frag.h create mode 100644 wii/libogc/include/lwip/api.h create mode 100644 wii/libogc/include/lwip/api_msg.h create mode 100644 wii/libogc/include/lwip/arch.h create mode 100644 wii/libogc/include/lwip/debug.h create mode 100644 wii/libogc/include/lwip/def.h create mode 100644 wii/libogc/include/lwip/dhcp.h create mode 100644 wii/libogc/include/lwip/err.h create mode 100644 wii/libogc/include/lwip/lwipopts.h create mode 100644 wii/libogc/include/lwip/mem.h create mode 100644 wii/libogc/include/lwip/memp.h create mode 100644 wii/libogc/include/lwip/netif.h create mode 100644 wii/libogc/include/lwip/opt.h create mode 100644 wii/libogc/include/lwip/pbuf.h create mode 100644 wii/libogc/include/lwip/raw.h create mode 100644 wii/libogc/include/lwip/sio.h create mode 100644 wii/libogc/include/lwip/snmp.h create mode 100644 wii/libogc/include/lwip/sockets.h create mode 100644 wii/libogc/include/lwip/stats.h create mode 100644 wii/libogc/include/lwip/sys.h create mode 100644 wii/libogc/include/lwip/tcp.h create mode 100644 wii/libogc/include/lwip/tcpip.h create mode 100644 wii/libogc/include/lwip/udp.h create mode 100644 wii/libogc/include/netif/arch/cc.h create mode 100644 wii/libogc/include/netif/arch/cpu.h create mode 100644 wii/libogc/include/netif/arch/init.h create mode 100644 wii/libogc/include/netif/arch/lib.h create mode 100644 wii/libogc/include/netif/arch/perf.h create mode 100644 wii/libogc/include/netif/arch/sys_arch.h create mode 100644 wii/libogc/include/netif/etharp.h create mode 100644 wii/libogc/include/netif/gcif/gcif.h create mode 100644 wii/libogc/include/netif/loopif.h create mode 100644 wii/libogc/include/wiikeyboard/keyboard.h create mode 100644 wii/libogc/include/wiikeyboard/usbkeyboard.h create mode 100644 wii/libogc/include/wiikeyboard/wsksymdef.h diff --git a/Makefile.libogc b/Makefile.libogc new file mode 100644 index 0000000000..fee7474d04 --- /dev/null +++ b/Makefile.libogc @@ -0,0 +1,269 @@ +#--------------------------------------------------------------------------------- +.SUFFIXES: +#--------------------------------------------------------------------------------- + +ifeq ($(strip $(DEVKITPRO)),) +$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=devkitPro") +endif + +ifeq ($(strip $(DEVKITPPC)),) +$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") +endif + +export PATH := $(DEVKITPPC)/bin:$(PATH) + +export LIBOGC_MAJOR := 1 +export LIBOGC_MINOR := 8 +export LIBOGC_PATCH := 17 + +include $(DEVKITPPC)/base_rules + +BUILD := build + +DATESTRING := $(shell date +%Y%m%d) +VERSTRING := $(LIBOGC_MAJOR).$(LIBOGC_MINOR).$(LIBOGC_PATCH) + +#--------------------------------------------------------------------------------- +ifeq ($(strip $(PLATFORM)),) +#--------------------------------------------------------------------------------- +export BASEDIR := $(CURDIR) +export LWIPDIR := $(BASEDIR)/wii/libogc/lwip +export OGCDIR := $(BASEDIR)/wii/libogc/libogc +export DBDIR := $(BASEDIR)/wii/libogc/libdb +export BTEDIR := $(BASEDIR)/wii/libogc/lwbt +export WIIUSEDIR := $(BASEDIR)/wii/libogc/wiiuse +export LIBWIIKEYB := $(BASEDIR)/wii/libogc/libwiikeyboard +export STUBSDIR := $(BASEDIR)/wii/libogc/lockstubs +export DEPS := $(BASEDIR)/wii/libogc/deps +export LIBS := $(BASEDIR)/wii/libogc/libs + +export INCDIR := $(BASEDIR)/wii/libogc/include + +#--------------------------------------------------------------------------------- +else +#--------------------------------------------------------------------------------- + +export LIBDIR := $(LIBS)/$(PLATFORM) +export DEPSDIR := $(DEPS)/$(PLATFORM) + +#--------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------- + + +#--------------------------------------------------------------------------------- +BBALIB := $(LIBDIR)/libbba +OGCLIB := $(LIBDIR)/libogc +DBLIB := $(LIBDIR)/libdb +BTELIB := $(LIBDIR)/libbte +WIIUSELIB := $(LIBDIR)/libwiiuse +WIIKEYBLIB := $(LIBDIR)/libwiikeyboard +STUBSLIB := $(LIBDIR)/libgclibstubs + +#--------------------------------------------------------------------------------- +DEFAULTINCDIR := $(BASEDIR)/wii/libogc/include +DEFINCS := -I$(DEFAULTINCDIR) +INCLUDES := $(DEFINCS) \ + -I$(BASEDIR)/wii/libogc \ + -I$(DEFAULTINCDIR)/netif \ + -I$(DEFAULTINCDIR)/ipv4 \ + -I$(DEFAULTINCDIR)/sdcard \ + -I$(DEFAULTINCDIR)/ogc \ + -I$(DEFAULTINCDIR)/ogc/machine \ + -I$(DEFAULTINCDIR)/bte \ + -I$(DEFAULTINCDIR)/sdcard \ + -I$(DEFAULTINCDIR)/wiikeyboard \ + -I$(DEFAULTINCDIR)/wiiuse \ + -I$(DEFAULTINCDIR)/di + +MACHDEP := -DBIGENDIAN -DGEKKO -mcpu=750 -meabi -msdata=eabi -mhard-float -ffunction-sections -fdata-sections + + +ifeq ($(PLATFORM),wii) +MACHDEP += -DHW_RVL +endif + +ifeq ($(PLATFORM),cube) +MACHDEP += -DHW_DOL +endif + +CFLAGS := -DLIBOGC_INTERNAL -g -O2 -fno-strict-aliasing -mregnames -Wall $(MACHDEP) $(INCLUDES) +ASFLAGS := $(MACHDEP) -mregnames -D_LANGUAGE_ASSEMBLY $(INCLUDES) + +#--------------------------------------------------------------------------------- +VPATH := $(LWIPDIR) \ + $(LWIPDIR)/arch/gc \ + $(LWIPDIR)/arch/gc/netif \ + $(LWIPDIR)/core \ + $(LWIPDIR)/core/ipv4 \ + $(LWIPDIR)/netif \ + $(OGCDIR) \ + $(DBDIR) \ + $(DBDIR)/uIP \ + $(BTEDIR) \ + $(WIIUSEDIR) \ + $(SDCARDDIR) \ + $(LIBWIIKEYB) \ + $(STUBSDIR) + + +#--------------------------------------------------------------------------------- +LWIPOBJ := network.o netio.o gcif.o \ + inet.o mem.o dhcp.o raw.o \ + memp.o netif.o pbuf.o stats.o \ + sys.o tcp.o tcp_in.o tcp_out.o \ + udp.o icmp.o ip.o ip_frag.o \ + ip_addr.o etharp.o loopif.o + +#--------------------------------------------------------------------------------- +OGCOBJ := \ + console.o lwp_priority.o lwp_queue.o lwp_threadq.o lwp_threads.o lwp_sema.o \ + lwp_messages.o lwp.o lwp_handler.o lwp_stack.o lwp_mutex.o \ + lwp_watchdog.o lwp_wkspace.o lwp_objmgr.o lwp_heap.o sys_state.o \ + exception_handler.o exception.o irq.o irq_handler.o semaphore.o \ + video_asm.o video.o pad.o dvd.o exi.o mutex.o arqueue.o arqmgr.o \ + cache_asm.o system.o system_asm.o cond.o \ + gx.o gu.o gu_psasm.o audio.o cache.o decrementer.o \ + message.o card.o aram.o depackrnc.o decrementer_handler.o \ + depackrnc1.o dsp.o si.o tpl.o ipc.o ogc_crt0.o \ + console_font_8x16.o timesupp.o lock_supp.o newlibc.o usbgecko.o usbmouse.o \ + sbrk.o malloc_lock.o kprintf.o stm.o ios.o es.o isfs.o usb.o network_common.o \ + sdgecko_io.o sdgecko_buf.o gcsd.o argv.o network_wii.o wiisd.o conf.o usbstorage.o \ + texconv.o wiilaunch.o + +#--------------------------------------------------------------------------------- +DBOBJ := uip_ip.o uip_tcp.o uip_pbuf.o uip_netif.o uip_arp.o uip_arch.o \ + uip_icmp.o memb.o memr.o bba.o tcpip.o debug.o debug_handler.o \ + debug_supp.o geckousb.o + +#--------------------------------------------------------------------------------- +BTEOBJ := bte.o hci.o l2cap.o btmemb.o btmemr.o btpbuf.o physbusif.o + +#--------------------------------------------------------------------------------- +WIIUSEOBJ := classic.o dynamics.o events.o io.o io_wii.o ir.o \ + nunchuk.o wiiuse.o speaker.o wpad.o motion_plus.o + +#--------------------------------------------------------------------------------- +WIIKEYBLIBOBJ := usbkeyboard.o keyboard.o ukbdmap.o wskbdutil.o + + + +all: wii cube + +#--------------------------------------------------------------------------------- +wii: $(BASEDIR)/wii/libogc/include/ogc/libversion.h +#--------------------------------------------------------------------------------- + @[ -d $(INCDIR) ] || mkdir -p $(INCDIR) + @[ -d $(LIBS)/wii ] || mkdir -p $(LIBS)/wii + @[ -d $(DEPS)/wii ] || mkdir -p $(DEPS)/wii + @[ -d wii ] || mkdir -p wii + @$(MAKE) PLATFORM=wii libs -C wii -f $(CURDIR)/Makefile.libogc + +#--------------------------------------------------------------------------------- +cube: $(BASEDIR)/wii/libogc/include/ogc/libversion.h +#--------------------------------------------------------------------------------- + @[ -d $(INCDIR) ] || mkdir -p $(INCDIR) + @[ -d $(LIBS)/cube ] || mkdir -p $(LIBS)/cube + @[ -d $(DEPS)/cube ] || mkdir -p $(DEPS)/cube + @[ -d cube ] || mkdir -p cube + @$(MAKE) PLATFORM=cube libs -C cube -f $(CURDIR)/Makefile.libogc + + +#--------------------------------------------------------------------------------- +$(BASEDIR)/wii/libogc/include/ogc/libversion.h : Makefile.libogc +#--------------------------------------------------------------------------------- + @echo "#ifndef __LIBVERSION_H__" > $@ + @echo "#define __LIBVERSION_H__" >> $@ + @echo >> $@ + @echo "#define _V_MAJOR_ $(LIBOGC_MAJOR)" >> $@ + @echo "#define _V_MINOR_ $(LIBOGC_MINOR)" >> $@ + @echo "#define _V_PATCH_ $(LIBOGC_PATCH)" >> $@ + @echo >> $@ + @echo "#define _V_DATE_ __DATE__" >> $@ + @echo "#define _V_TIME_ __TIME__" >> $@ + @echo >> $@ + @echo '#define _V_STRING "libOGC Release '$(LIBOGC_MAJOR).$(LIBOGC_MINOR).$(LIBOGC_PATCH)'"' >> $@ + @echo >> $@ + @echo "#endif // __LIBVERSION_H__" >> $@ + +#--------------------------------------------------------------------------------- +$(BBALIB).a: $(LWIPOBJ) +#--------------------------------------------------------------------------------- +$(OGCLIB).a: $(OGCOBJ) +#--------------------------------------------------------------------------------- +$(DBLIB).a: $(DBOBJ) +#--------------------------------------------------------------------------------- +$(WIIKEYBLIB).a: $(WIIKEYBLIBOBJ) +#--------------------------------------------------------------------------------- +$(BTELIB).a: $(BTEOBJ) +#--------------------------------------------------------------------------------- +$(WIIUSELIB).a: $(WIIUSEOBJ) +#--------------------------------------------------------------------------------- + +.PHONY: libs wii cube install-headers install dist docs + +#--------------------------------------------------------------------------------- +install-headers: +#--------------------------------------------------------------------------------- + @mkdir -p $(INCDIR) + @mkdir -p $(INCDIR)/ogc/machine + @mkdir -p $(INCDIR)/bte + @mkdir -p $(INCDIR)/wiiuse + @mkdir -p $(INCDIR)/modplay + @mkdir -p $(INCDIR)/sdcard + @mkdir -p $(INCDIR)/di + @mkdir -p $(INCDIR)/wiikeyboard + @cp ./gc/*.h $(INCDIR) + @cp ./gc/ogc/*.h $(INCDIR)/ogc + @cp ./gc/ogc/machine/*.h $(INCDIR)/ogc/machine + @cp ./gc/bte/*.h $(INCDIR)/bte + @cp ./gc/wiiuse/*.h $(INCDIR)/wiiuse + @cp ./gc/modplay/*.h $(INCDIR)/modplay + @cp ./gc/sdcard/*.h $(INCDIR)/sdcard + @cp ./gc/di/*.h $(INCDIR)/di + @cp ./gc/wiikeyboard/*.h $(INCDIR)/wiikeyboard + +#--------------------------------------------------------------------------------- +install: wii cube install-headers +#--------------------------------------------------------------------------------- + @mkdir -p $(DEVKITPRO)/libogc + @cp -frv include $(DEVKITPRO)/libogc + @cp -frv lib $(DEVKITPRO)/libogc + @cp -frv libogc_license.txt $(DEVKITPRO)/libogc + + +#--------------------------------------------------------------------------------- +dist: wii cube install-headers +#--------------------------------------------------------------------------------- + @tar --exclude=*CVS* --exclude=.svn --exclude=wii --exclude=cube --exclude=*deps* \ + --exclude=*.bz2 --exclude=*include* --exclude=*lib/* --exclude=*docs/*\ + -cvjf libogc-src-$(VERSTRING).tar.bz2 * + @tar -cvjf libogc-$(VERSTRING).tar.bz2 include lib libogc_license.txt + + +LIBRARIES := $(OGCLIB).a $(DBLIB).a + +ifeq ($(PLATFORM),cube) +LIBRARIES += $(BBALIB).a +endif +ifeq ($(PLATFORM),wii) +LIBRARIES += $(BTELIB).a $(WIIUSELIB).a $(WIIKEYBLIB).a +endif + +#--------------------------------------------------------------------------------- +libs: $(LIBRARIES) +#--------------------------------------------------------------------------------- + +#--------------------------------------------------------------------------------- +clean: +#--------------------------------------------------------------------------------- + rm -fr $(LIBS) + rm -fr $(BASEDIR)/wii/*.o + rm -f *.map + +#--------------------------------------------------------------------------------- +docs: install-headers +#--------------------------------------------------------------------------------- + doxygen libogc.dox + +-include $(DEPSDIR)/*.d diff --git a/wii/libogc/include/di/di.h b/wii/libogc/include/di/di.h new file mode 100644 index 0000000000..952eeeb61d --- /dev/null +++ b/wii/libogc/include/di/di.h @@ -0,0 +1,133 @@ +/*------------------------------------------------------------- + +di.h -- Drive Interface library + +Team Twiizers +Copyright (C) 2008 + +Erant +marcan + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + +/* +All buffers in this document need to be 32-byte aligned! +*/ + +#ifndef __DI_H__ +#define __DI_H__ + +#include +#include +#include + +#define DVD_IDENTIFY 0x12 +#define DVD_READ_DISCID 0x70 +#define DVD_LOW_READ 0x71 +#define DVD_WAITFORCOVERCLOSE 0x79 +#define DVD_READ_PHYSICAL 0x80 +#define DVD_READ_COPYRIGHT 0x81 +#define DVD_READ_DISCKEY 0x82 +#define DVD_GETCOVER 0x88 +#define DVD_RESET 0x8A +#define DVD_OPEN_PARTITION 0x8B +#define DVD_CLOSE_PARTITION 0x8C +#define DVD_READ_UNENCRYPTED 0x8D +#define DVD_REPORTKEY 0xA4 +#define DVD_READ 0xD0 +#define DVD_READ_CONFIG 0xD1 +#define DVD_READ_BCA 0xDA +#define DVD_GET_ERROR 0xE0 +#define DVD_SET_MOTOR 0xE3 + +#define DVD_READY 0x1 +#define DVD_INIT 0x2 +#define DVD_UNKNOWN 0x4 +#define DVD_NO_DISC 0x8 +#define DVD_IOS_ERROR 0x10 +#define DVD_D0 0x20 +#define DVD_A8 0x40 + +#define DVD_COVER_DISC_INSERTED 0x02 + +#define LIBDI_MAX_RETRIES 16 + +#define DEVICE_TYPE_WII_DVD (('W'<<24)|('D'<<16)|('V'<<8)|'D') + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct{ + uint16_t rev; + uint16_t dev_code; + uint32_t rel_date; +}DI_DriveID; + +typedef int(*di_callback)(uint32_t status, uint32_t error); +typedef int(*read_func)(void*,uint32_t,uint32_t); +typedef int(*read_func_async)(void*,uint32_t,uint32_t,ipccallback); + +extern int di_fd; +extern const DISC_INTERFACE __io_wiidvd; + +int DI_Init(); +void DI_LoadDVDX(bool load); +void DI_UseCache(bool use); +void DI_SetInitCallback(di_callback cb); +void DI_Mount(); +void DI_Close(); +int DI_GetStatus(); + +int DI_Identify(DI_DriveID* id); +int DI_CheckDVDSupport(); +int DI_ReadDiscID(u64 *id); +int DI_GetError(uint32_t* error); +int DI_GetCoverRegister(uint32_t* status); +int DI_Reset(); + +int DI_StopMotor(); +int DI_Eject(); +int DI_KillDrive(); + +int DI_ReadDVD(void* buf, uint32_t len, uint32_t lba); +int DI_ReadDVDAsync(void* buf, uint32_t len, uint32_t lba, ipccallback ipc_cb); + +int DI_Read(void *buf, u32 size, u32 offset); +int DI_UnencryptedRead(void *buf, u32 size, u32 offset); + +int DI_ReadDVDConfig(uint32_t* val, uint32_t flag); +int DI_ReadDVDCopyright(uint32_t* copyright); +int DI_ReadDVDDiscKey(void *buf); +int DI_ReadDVDPhysical(void *buf); +int DI_Read_BCA(void *buf); +int DI_ReportKey(int keytype, uint32_t lba, void* buf); + +int DI_OpenPartition(u32 offset); +int DI_ClosePartition(void); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/wii/libogc/include/ipv4/lwip/icmp.h b/wii/libogc/include/ipv4/lwip/icmp.h new file mode 100644 index 0000000000..634405b714 --- /dev/null +++ b/wii/libogc/include/ipv4/lwip/icmp.h @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_ICMP_H__ +#define __LWIP_ICMP_H__ + +#include "lwip/arch.h" + +#include "lwip/opt.h" +#include "lwip/pbuf.h" + +#include "lwip/ip_addr.h" +#include "lwip/netif.h" + +#define ICMP_ER 0 /* echo reply */ +#define ICMP_DUR 3 /* destination unreachable */ +#define ICMP_SQ 4 /* source quench */ +#define ICMP_RD 5 /* redirect */ +#define ICMP_ECHO 8 /* echo */ +#define ICMP_TE 11 /* time exceeded */ +#define ICMP_PP 12 /* parameter problem */ +#define ICMP_TS 13 /* timestamp */ +#define ICMP_TSR 14 /* timestamp reply */ +#define ICMP_IRQ 15 /* information request */ +#define ICMP_IR 16 /* information reply */ + +enum icmp_dur_type { + ICMP_DUR_NET = 0, /* net unreachable */ + ICMP_DUR_HOST = 1, /* host unreachable */ + ICMP_DUR_PROTO = 2, /* protocol unreachable */ + ICMP_DUR_PORT = 3, /* port unreachable */ + ICMP_DUR_FRAG = 4, /* fragmentation needed and DF set */ + ICMP_DUR_SR = 5 /* source route failed */ +}; + +enum icmp_te_type { + ICMP_TE_TTL = 0, /* time to live exceeded in transit */ + ICMP_TE_FRAG = 1 /* fragment reassembly time exceeded */ +}; + +void icmp_input(struct pbuf *p, struct netif *inp); + +void icmp_dest_unreach(struct pbuf *p, enum icmp_dur_type t); +void icmp_time_exceeded(struct pbuf *p, enum icmp_te_type t); + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct icmp_echo_hdr { + PACK_STRUCT_FIELD(u16_t _type_code); + PACK_STRUCT_FIELD(u16_t chksum); + PACK_STRUCT_FIELD(u16_t id); + PACK_STRUCT_FIELD(u16_t seqno); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END + +PACK_STRUCT_BEGIN +struct icmp_dur_hdr { + PACK_STRUCT_FIELD(u16_t _type_code); + PACK_STRUCT_FIELD(u16_t chksum); + PACK_STRUCT_FIELD(u32_t unused); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END + +PACK_STRUCT_BEGIN +struct icmp_te_hdr { + PACK_STRUCT_FIELD(u16_t _type_code); + PACK_STRUCT_FIELD(u16_t chksum); + PACK_STRUCT_FIELD(u32_t unused); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#define ICMPH_TYPE(hdr) (ntohs((hdr)->_type_code) >> 8) +#define ICMPH_CODE(hdr) (ntohs((hdr)->_type_code) & 0xff) + +#define ICMPH_TYPE_SET(hdr, type) ((hdr)->_type_code = htons(ICMPH_CODE(hdr) | ((type) << 8))) +#define ICMPH_CODE_SET(hdr, code) ((hdr)->_type_code = htons((code) | (ICMPH_TYPE(hdr) << 8))) + +#endif /* __LWIP_ICMP_H__ */ + diff --git a/wii/libogc/include/ipv4/lwip/inet.h b/wii/libogc/include/ipv4/lwip/inet.h new file mode 100644 index 0000000000..6d79aab7a4 --- /dev/null +++ b/wii/libogc/include/ipv4/lwip/inet.h @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_INET_H__ +#define __LWIP_INET_H__ + +#include "lwip/arch.h" + +#include "lwip/opt.h" +#include "lwip/pbuf.h" +#include "lwip/ip_addr.h" + +u16_t inet_chksum(void *dataptr, u16_t len); +#if 0 /* optimized routine */ +u16_t inet_chksum4(u8_t *dataptr, u16_t len); +#endif +u16_t inet_chksum_pbuf(struct pbuf *p); +u16_t inet_chksum_pseudo(struct pbuf *p, + struct ip_addr *src, struct ip_addr *dest, + u8_t proto, u16_t proto_len); + +u32_t inet_addr(const char *cp); +s8_t inet_aton(const char *cp, struct in_addr *addr); +char *inet_ntoa(struct in_addr addr); /* returns ptr to static buffer; not reentrant! */ + +#ifdef htons +#undef htons +#endif /* htons */ +#ifdef htonl +#undef htonl +#endif /* htonl */ +#ifdef ntohs +#undef ntohs +#endif /* ntohs */ +#ifdef ntohl +#undef ntohl +#endif /* ntohl */ + +#if BYTE_ORDER == BIG_ENDIAN +#define htons(x) (x) +#define ntohs(x) (x) +#define htonl(x) (x) +#define ntohl(x) (x) +#else +#ifdef LWIP_PREFIX_BYTEORDER_FUNCS +/* workaround for naming collisions on some platforms */ +#define htons lwip_htons +#define ntohs lwip_ntohs +#define htonl lwip_htonl +#define ntohl lwip_ntohl +#endif +u16_t htons(u16_t x); +u16_t ntohs(u16_t x); +u32_t htonl(u32_t x); +u32_t ntohl(u32_t x); +#endif + +#endif /* __LWIP_INET_H__ */ + diff --git a/wii/libogc/include/ipv4/lwip/ip.h b/wii/libogc/include/ipv4/lwip/ip.h new file mode 100644 index 0000000000..4c15e1a0ea --- /dev/null +++ b/wii/libogc/include/ipv4/lwip/ip.h @@ -0,0 +1,154 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_IP_H__ +#define __LWIP_IP_H__ + +#include "lwip/arch.h" + +#include "lwip/def.h" +#include "lwip/pbuf.h" +#include "lwip/ip_addr.h" + +#include "lwip/err.h" + + +void ip_init(void); +struct netif *ip_route(struct ip_addr *dest); +err_t ip_input(struct pbuf *p, struct netif *inp); +err_t ip_output(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, + u8_t ttl, u8_t tos, u8_t proto); +err_t ip_output_if(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, + u8_t ttl, u8_t tos, u8_t proto, + struct netif *netif); + +#define IP_HLEN 20 + +#define IP_PROTO_ICMP 1 +#define IP_PROTO_UDP 17 +#define IP_PROTO_UDPLITE 170 +#define IP_PROTO_TCP 6 + +/* This is passed as the destination address to ip_output_if (not + to ip_output), meaning that an IP header already is constructed + in the pbuf. This is used when TCP retransmits. */ +#ifdef IP_HDRINCL +#undef IP_HDRINCL +#endif /* IP_HDRINCL */ +#define IP_HDRINCL NULL + + +/* This is the common part of all PCB types. It needs to be at the + beginning of a PCB type definition. It is located here so that + changes to this common part are made in one location instead of + having to change all PCB structs. */ +#define IP_PCB struct ip_addr local_ip; \ + struct ip_addr remote_ip; \ + /* Socket options */ \ + u16_t so_options; \ + /* Type Of Service */ \ + u8_t tos; \ + /* Time To Live */ \ + u8_t ttl + +/* + * Option flags per-socket. These are the same like SO_XXX. + */ +#define SOF_DEBUG (u16_t)0x0001U /* turn on debugging info recording */ +#define SOF_ACCEPTCONN (u16_t)0x0002U /* socket has had listen() */ +#define SOF_REUSEADDR (u16_t)0x0004U /* allow local address reuse */ +#define SOF_KEEPALIVE (u16_t)0x0008U /* keep connections alive */ +#define SOF_DONTROUTE (u16_t)0x0010U /* just use interface addresses */ +#define SOF_BROADCAST (u16_t)0x0020U /* permit sending of broadcast msgs */ +#define SOF_USELOOPBACK (u16_t)0x0040U /* bypass hardware when possible */ +#define SOF_LINGER (u16_t)0x0080U /* linger on close if data present */ +#define SOF_OOBINLINE (u16_t)0x0100U /* leave received OOB data in line */ +#define SOF_REUSEPORT (u16_t)0x0200U /* allow local address & port reuse */ + + + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct ip_hdr { + /* version / header length / type of service */ + PACK_STRUCT_FIELD(u16_t _v_hl_tos); + /* total length */ + PACK_STRUCT_FIELD(u16_t _len); + /* identification */ + PACK_STRUCT_FIELD(u16_t _id); + /* fragment offset field */ + PACK_STRUCT_FIELD(u16_t _offset); +#define IP_RF 0x8000 /* reserved fragment flag */ +#define IP_DF 0x4000 /* dont fragment flag */ +#define IP_MF 0x2000 /* more fragments flag */ +#define IP_OFFMASK 0x1fff /* mask for fragmenting bits */ + /* time to live / protocol*/ + PACK_STRUCT_FIELD(u16_t _ttl_proto); + /* checksum */ + PACK_STRUCT_FIELD(u16_t _chksum); + /* source and destination IP addresses */ + PACK_STRUCT_FIELD(struct ip_addr src); + PACK_STRUCT_FIELD(struct ip_addr dest); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#define IPH_V(hdr) (ntohs((hdr)->_v_hl_tos) >> 12) +#define IPH_HL(hdr) ((ntohs((hdr)->_v_hl_tos) >> 8) & 0x0f) +#define IPH_TOS(hdr) (ntohs((hdr)->_v_hl_tos) & 0xff) +#define IPH_LEN(hdr) ((hdr)->_len) +#define IPH_ID(hdr) ((hdr)->_id) +#define IPH_OFFSET(hdr) ((hdr)->_offset) +#define IPH_TTL(hdr) (ntohs((hdr)->_ttl_proto) >> 8) +#define IPH_PROTO(hdr) (ntohs((hdr)->_ttl_proto) & 0xff) +#define IPH_CHKSUM(hdr) ((hdr)->_chksum) + +#define IPH_VHLTOS_SET(hdr, v, hl, tos) (hdr)->_v_hl_tos = (htons(((v) << 12) | ((hl) << 8) | (tos))) +#define IPH_LEN_SET(hdr, len) (hdr)->_len = (len) +#define IPH_ID_SET(hdr, id) (hdr)->_id = (id) +#define IPH_OFFSET_SET(hdr, off) (hdr)->_offset = (off) +#define IPH_TTL_SET(hdr, ttl) (hdr)->_ttl_proto = (htons(IPH_PROTO(hdr) | ((ttl) << 8))) +#define IPH_PROTO_SET(hdr, proto) (hdr)->_ttl_proto = (htons((proto) | (IPH_TTL(hdr) << 8))) +#define IPH_CHKSUM_SET(hdr, chksum) (hdr)->_chksum = (chksum) + +#if IP_DEBUG +void ip_debug_print(struct pbuf *p); +#else +#define ip_debug_print(p) +#endif /* IP_DEBUG */ + +#endif /* __LWIP_IP_H__ */ + + diff --git a/wii/libogc/include/ipv4/lwip/ip_addr.h b/wii/libogc/include/ipv4/lwip/ip_addr.h new file mode 100644 index 0000000000..fa921961de --- /dev/null +++ b/wii/libogc/include/ipv4/lwip/ip_addr.h @@ -0,0 +1,162 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_IP_ADDR_H__ +#define __LWIP_IP_ADDR_H__ + +#include "lwip/arch.h" + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct ip_addr { + PACK_STRUCT_FIELD(u32_t addr); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct ip_addr2 { + PACK_STRUCT_FIELD(u16_t addrw[2]); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +/* For compatibility with BSD code */ +#ifndef HAVE_IN_ADDR +#define HAVE_IN_ADDR +struct in_addr { + u32_t s_addr; +}; +#endif + +struct netif; + +extern const struct ip_addr ip_addr_any; +extern const struct ip_addr ip_addr_broadcast; + +/** IP_ADDR_ can be used as a fixed IP address + * for the wildcard and the broadcast address + */ +#define IP_ADDR_ANY ((struct ip_addr *)&ip_addr_any) +#define IP_ADDR_BROADCAST ((struct ip_addr *)&ip_addr_broadcast) + +#define INADDR_NONE ((u32_t) 0xffffffff) /* 255.255.255.255 */ +#define INADDR_LOOPBACK ((u32_t) 0x7f000001) /* 127.0.0.1 */ + +/* Definitions of the bits in an Internet address integer. + + On subnets, host and network parts are found according to + the subnet mask, not these masks. */ + +#define IN_CLASSA(a) ((((u32_t)(a)) & 0x80000000) == 0) +#define IN_CLASSA_NET 0xff000000 +#define IN_CLASSA_NSHIFT 24 +#define IN_CLASSA_HOST (0xffffffff & ~IN_CLASSA_NET) +#define IN_CLASSA_MAX 128 + +#define IN_CLASSB(a) ((((u32_t)(a)) & 0xc0000000) == 0x80000000) +#define IN_CLASSB_NET 0xffff0000 +#define IN_CLASSB_NSHIFT 16 +#define IN_CLASSB_HOST (0xffffffff & ~IN_CLASSB_NET) +#define IN_CLASSB_MAX 65536 + +#define IN_CLASSC(a) ((((u32_t)(a)) & 0xe0000000) == 0xc0000000) +#define IN_CLASSC_NET 0xffffff00 +#define IN_CLASSC_NSHIFT 8 +#define IN_CLASSC_HOST (0xffffffff & ~IN_CLASSC_NET) + +#define IN_CLASSD(a) (((u32_t)(a) & 0xf0000000) == 0xe0000000) +#define IN_CLASSD_NET 0xf0000000 /* These ones aren't really */ +#define IN_CLASSD_NSHIFT 28 /* net and host fields, but */ +#define IN_CLASSD_HOST 0x0fffffff /* routing needn't know. */ +#define IN_MULTICAST(a) IN_CLASSD(a) + +#define IN_EXPERIMENTAL(a) (((u32_t)(a) & 0xf0000000) == 0xf0000000) +#define IN_BADCLASS(a) (((u32_t)(a) & 0xf0000000) == 0xf0000000) + +#define IN_LOOPBACKNET 127 /* official! */ + + +#define IP4_ADDR(ipaddr, a,b,c,d) (ipaddr)->addr = htonl(((u32_t)(a & 0xff) << 24) | ((u32_t)(b & 0xff) << 16) | \ + ((u32_t)(c & 0xff) << 8) | (u32_t)(d & 0xff)) + +#define ip_addr_set(dest, src) (dest)->addr = \ + ((src) == NULL? 0:\ + (src)->addr) +/** + * Determine if two address are on the same network. + * + * @arg addr1 IP address 1 + * @arg addr2 IP address 2 + * @arg mask network identifier mask + * @return !0 if the network identifiers of both address match + */ +#define ip_addr_netcmp(addr1, addr2, mask) (((addr1)->addr & \ + (mask)->addr) == \ + ((addr2)->addr & \ + (mask)->addr)) +#define ip_addr_cmp(addr1, addr2) ((addr1)->addr == (addr2)->addr) + +#define ip_addr_isany(addr1) ((addr1) == NULL || (addr1)->addr == 0) + +u8_t ip_addr_isbroadcast(struct ip_addr *, struct netif *); + +#define ip_addr_ismulticast(addr1) (((addr1)->addr & ntohl(0xf0000000)) == ntohl(0xe0000000)) + + +#define ip_addr_debug_print(debug, ipaddr) LWIP_DEBUGF(debug, ("%"U16_F".%"U16_F".%"U16_F".%"U16_F, \ + ipaddr?(u16_t)(ntohl((ipaddr)->addr) >> 24) & 0xff:0, \ + ipaddr?(u16_t)(ntohl((ipaddr)->addr) >> 16) & 0xff:0, \ + ipaddr?(u16_t)(ntohl((ipaddr)->addr) >> 8) & 0xff:0, \ + ipaddr?(u16_t)ntohl((ipaddr)->addr) & 0xff:0U)) + +/* cast to unsigned int, as it is used as argument to printf functions + * which expect integer arguments. CSi: use cc.h formatters (conversion chars)! */ +#define ip4_addr1(ipaddr) ((u16_t)(ntohl((ipaddr)->addr) >> 24) & 0xff) +#define ip4_addr2(ipaddr) ((u16_t)(ntohl((ipaddr)->addr) >> 16) & 0xff) +#define ip4_addr3(ipaddr) ((u16_t)(ntohl((ipaddr)->addr) >> 8) & 0xff) +#define ip4_addr4(ipaddr) ((u16_t)(ntohl((ipaddr)->addr)) & 0xff) +#endif /* __LWIP_IP_ADDR_H__ */ + + + + + + diff --git a/wii/libogc/include/ipv4/lwip/ip_frag.h b/wii/libogc/include/ipv4/lwip/ip_frag.h new file mode 100644 index 0000000000..a982c5a63f --- /dev/null +++ b/wii/libogc/include/ipv4/lwip/ip_frag.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Jani Monoses + * + */ + +#ifndef __LWIP_IP_FRAG_H__ +#define __LWIP_IP_FRAG_H__ + +#include "lwip/err.h" +#include "lwip/pbuf.h" +#include "lwip/netif.h" +#include "lwip/ip_addr.h" + +void ip_reass_tmr(void); +struct pbuf * ip_reass(struct pbuf *p); +err_t ip_frag(struct pbuf *p, struct netif *netif, struct ip_addr *dest); + +#endif /* __LWIP_IP_FRAG_H__ */ + + diff --git a/wii/libogc/include/lwip/api.h b/wii/libogc/include/lwip/api.h new file mode 100644 index 0000000000..18d5602fbd --- /dev/null +++ b/wii/libogc/include/lwip/api.h @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_API_H__ +#define __LWIP_API_H__ + +#include "lwip/opt.h" +#include "lwip/pbuf.h" +#include "lwip/sys.h" + +#include "lwip/ip.h" + +#include "lwip/raw.h" +#include "lwip/udp.h" +#include "lwip/tcp.h" + +#include "lwip/err.h" + +#define NETCONN_NOCOPY 0x00 +#define NETCONN_COPY 0x01 + +enum netconn_type { + NETCONN_TCP, + NETCONN_UDP, + NETCONN_UDPLITE, + NETCONN_UDPNOCHKSUM, + NETCONN_RAW +}; + +enum netconn_state { + NETCONN_NONE, + NETCONN_WRITE, + NETCONN_ACCEPT, + NETCONN_RECV, + NETCONN_CONNECT, + NETCONN_CLOSE +}; + +enum netconn_evt { + NETCONN_EVTRCVPLUS, + NETCONN_EVTRCVMINUS, + NETCONN_EVTSENDPLUS, + NETCONN_EVTSENDMINUS +}; + +struct netbuf { + struct pbuf *p, *ptr; + struct ip_addr *fromaddr; + u16_t fromport; + err_t err; +}; + +struct netconn { + enum netconn_type type; + enum netconn_state state; + union { + struct tcp_pcb *tcp; + struct udp_pcb *udp; + struct raw_pcb *raw; + } pcb; + err_t err; + sys_sem sem; + sys_mbox mbox; + sys_mbox recvmbox; + sys_mbox acceptmbox; + u16 recvavail; + s32 socket; + void (*callback)(struct netconn *,enum netconn_evt,u32); +}; + +#endif /* __LWIP_API_H__ */ + + diff --git a/wii/libogc/include/lwip/api_msg.h b/wii/libogc/include/lwip/api_msg.h new file mode 100644 index 0000000000..cf5ba08c05 --- /dev/null +++ b/wii/libogc/include/lwip/api_msg.h @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_API_MSG_H__ +#define __LWIP_API_MSG_H__ + +#include "lwip/opt.h" +#include "lwip/pbuf.h" +#include "lwip/sys.h" + +#include "lwip/ip.h" + +#include "lwip/udp.h" +#include "lwip/tcp.h" + +#include "lwip/api.h" + +enum apimsg_type { + APIMSG_NEWCONN, + APIMSG_DELCONN, + APIMSG_BIND, + APIMSG_CONNECT, + APIMSG_DISCONNECT, + APIMSG_LISTEN, + APIMSG_ACCEPT, + APIMSG_SEND, + APIMSG_RECV, + APIMSG_WRITE, + APIMSG_CLOSE, + APIMSG_MAX +}; + +struct apimsg_msg { + struct netconn *conn; + enum netconn_type type; + union { + struct pbuf *p; + struct { + struct ip_addr *ipaddr; + u16 port; + } bc; + struct { + void *dataptr; + u32 len; + u8 copy; + } w; + sys_mbox mbox; + u16 len; + } msg; +}; + +struct api_msg { + enum apimsg_type type; + struct apimsg_msg msg; +}; + +#endif /* __LWIP_API_MSG_H__ */ + diff --git a/wii/libogc/include/lwip/arch.h b/wii/libogc/include/lwip/arch.h new file mode 100644 index 0000000000..e0d622a4b2 --- /dev/null +++ b/wii/libogc/include/lwip/arch.h @@ -0,0 +1,216 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_ARCH_H__ +#define __LWIP_ARCH_H__ + +#ifndef LITTLE_ENDIAN +#define LITTLE_ENDIAN 1234 +#endif + +#ifndef BIG_ENDIAN +#define BIG_ENDIAN 4321 +#endif + +#include "arch/cc.h" + +#ifndef PACK_STRUCT_BEGIN +#define PACK_STRUCT_BEGIN +#endif /* PACK_STRUCT_BEGIN */ + +#ifndef PACK_STRUCT_END +#define PACK_STRUCT_END +#endif /* PACK_STRUCT_END */ + +#ifndef PACK_STRUCT_FIELD +#define PACK_STRUCT_FIELD(x) x +#endif /* PACK_STRUCT_FIELD */ + + + +#ifdef LWIP_PROVIDE_ERRNO + +#define EPERM 1 /* Operation not permitted */ +#define ENOENT 2 /* No such file or directory */ +#define ESRCH 3 /* No such process */ +#define EINTR 4 /* Interrupted system call */ +#define EIO 5 /* I/O error */ +#define ENXIO 6 /* No such device or address */ +#define E2BIG 7 /* Arg list too long */ +#define ENOEXEC 8 /* Exec format error */ +#define EBADF 9 /* Bad file number */ +#define ECHILD 10 /* No child processes */ +#define EAGAIN 11 /* Try again */ +#define ENOMEM 12 /* Out of memory */ +#define EACCES 13 /* Permission denied */ +#define EFAULT 14 /* Bad address */ +#define ENOTBLK 15 /* Block device required */ +#define EBUSY 16 /* Device or resource busy */ +#define EEXIST 17 /* File exists */ +#define EXDEV 18 /* Cross-device link */ +#define ENODEV 19 /* No such device */ +#define ENOTDIR 20 /* Not a directory */ +#define EISDIR 21 /* Is a directory */ +#define EINVAL 22 /* Invalid argument */ +#define ENFILE 23 /* File table overflow */ +#define EMFILE 24 /* Too many open files */ +#define ENOTTY 25 /* Not a typewriter */ +#define ETXTBSY 26 /* Text file busy */ +#define EFBIG 27 /* File too large */ +#define ENOSPC 28 /* No space left on device */ +#define ESPIPE 29 /* Illegal seek */ +#define EROFS 30 /* Read-only file system */ +#define EMLINK 31 /* Too many links */ +#define EPIPE 32 /* Broken pipe */ +#define EDOM 33 /* Math argument out of domain of func */ +#define ERANGE 34 /* Math result not representable */ +#define EDEADLK 35 /* Resource deadlock would occur */ +#define ENAMETOOLONG 36 /* File name too long */ +#define ENOLCK 37 /* No record locks available */ +#define ENOSYS 38 /* Function not implemented */ +#define ENOTEMPTY 39 /* Directory not empty */ +#define ELOOP 40 /* Too many symbolic links encountered */ +#define EWOULDBLOCK EAGAIN /* Operation would block */ +#define ENOMSG 42 /* No message of desired type */ +#define EIDRM 43 /* Identifier removed */ +#define ECHRNG 44 /* Channel number out of range */ +#define EL2NSYNC 45 /* Level 2 not synchronized */ +#define EL3HLT 46 /* Level 3 halted */ +#define EL3RST 47 /* Level 3 reset */ +#define ELNRNG 48 /* Link number out of range */ +#define EUNATCH 49 /* Protocol driver not attached */ +#define ENOCSI 50 /* No CSI structure available */ +#define EL2HLT 51 /* Level 2 halted */ +#define EBADE 52 /* Invalid exchange */ +#define EBADR 53 /* Invalid request descriptor */ +#define EXFULL 54 /* Exchange full */ +#define ENOANO 55 /* No anode */ +#define EBADRQC 56 /* Invalid request code */ +#define EBADSLT 57 /* Invalid slot */ + +#define EDEADLOCK EDEADLK + +#define EBFONT 59 /* Bad font file format */ +#define ENOSTR 60 /* Device not a stream */ +#define ENODATA 61 /* No data available */ +#define ETIME 62 /* Timer expired */ +#define ENOSR 63 /* Out of streams resources */ +#define ENONET 64 /* Machine is not on the network */ +#define ENOPKG 65 /* Package not installed */ +#define EREMOTE 66 /* Object is remote */ +#define ENOLINK 67 /* Link has been severed */ +#define EADV 68 /* Advertise error */ +#define ESRMNT 69 /* Srmount error */ +#define ECOMM 70 /* Communication error on send */ +#define EPROTO 71 /* Protocol error */ +#define EMULTIHOP 72 /* Multihop attempted */ +#define EDOTDOT 73 /* RFS specific error */ +#define EBADMSG 74 /* Not a data message */ +#define EOVERFLOW 75 /* Value too large for defined data type */ +#define ENOTUNIQ 76 /* Name not unique on network */ +#define EBADFD 77 /* File descriptor in bad state */ +#define EREMCHG 78 /* Remote address changed */ +#define ELIBACC 79 /* Can not access a needed shared library */ +#define ELIBBAD 80 /* Accessing a corrupted shared library */ +#define ELIBSCN 81 /* .lib section in a.out corrupted */ +#define ELIBMAX 82 /* Attempting to link in too many shared libraries */ +#define ELIBEXEC 83 /* Cannot exec a shared library directly */ +#define EILSEQ 84 /* Illegal byte sequence */ +#define ERESTART 85 /* Interrupted system call should be restarted */ +#define ESTRPIPE 86 /* Streams pipe error */ +#define EUSERS 87 /* Too many users */ +#define ENOTSOCK 88 /* Socket operation on non-socket */ +#define EDESTADDRREQ 89 /* Destination address required */ +#define EMSGSIZE 90 /* Message too long */ +#define EPROTOTYPE 91 /* Protocol wrong type for socket */ +#define ENOPROTOOPT 92 /* Protocol not available */ +#define EPROTONOSUPPORT 93 /* Protocol not supported */ +#define ESOCKTNOSUPPORT 94 /* Socket type not supported */ +#define EOPNOTSUPP 95 /* Operation not supported on transport endpoint */ +#define EPFNOSUPPORT 96 /* Protocol family not supported */ +#define EAFNOSUPPORT 97 /* Address family not supported by protocol */ +#define EADDRINUSE 98 /* Address already in use */ +#define EADDRNOTAVAIL 99 /* Cannot assign requested address */ +#define ENETDOWN 100 /* Network is down */ +#define ENETUNREACH 101 /* Network is unreachable */ +#define ENETRESET 102 /* Network dropped connection because of reset */ +#define ECONNABORTED 103 /* Software caused connection abort */ +#define ECONNRESET 104 /* Connection reset by peer */ +#define ENOBUFS 105 /* No buffer space available */ +#define EISCONN 106 /* Transport endpoint is already connected */ +#define ENOTCONN 107 /* Transport endpoint is not connected */ +#define ESHUTDOWN 108 /* Cannot send after transport endpoint shutdown */ +#define ETOOMANYREFS 109 /* Too many references: cannot splice */ +#define ETIMEDOUT 110 /* Connection timed out */ +#define ECONNREFUSED 111 /* Connection refused */ +#define EHOSTDOWN 112 /* Host is down */ +#define EHOSTUNREACH 113 /* No route to host */ +#define EALREADY 114 /* Operation already in progress */ +#define EINPROGRESS 115 /* Operation now in progress */ +#define ESTALE 116 /* Stale NFS file handle */ +#define EUCLEAN 117 /* Structure needs cleaning */ +#define ENOTNAM 118 /* Not a XENIX named type file */ +#define ENAVAIL 119 /* No XENIX semaphores available */ +#define EISNAM 120 /* Is a named type file */ +#define EREMOTEIO 121 /* Remote I/O error */ +#define EDQUOT 122 /* Quota exceeded */ + +#define ENOMEDIUM 123 /* No medium found */ +#define EMEDIUMTYPE 124 /* Wrong medium type */ + + +#define ENSROK 0 /* DNS server returned answer with no data */ +#define ENSRNODATA 160 /* DNS server returned answer with no data */ +#define ENSRFORMERR 161 /* DNS server claims query was misformatted */ +#define ENSRSERVFAIL 162 /* DNS server returned general failure */ +#define ENSRNOTFOUND 163 /* Domain name not found */ +#define ENSRNOTIMP 164 /* DNS server does not implement requested operation */ +#define ENSRREFUSED 165 /* DNS server refused query */ +#define ENSRBADQUERY 166 /* Misformatted DNS query */ +#define ENSRBADNAME 167 /* Misformatted domain name */ +#define ENSRBADFAMILY 168 /* Unsupported address family */ +#define ENSRBADRESP 169 /* Misformatted DNS reply */ +#define ENSRCONNREFUSED 170 /* Could not contact DNS servers */ +#define ENSRTIMEOUT 171 /* Timeout while contacting DNS servers */ +#define ENSROF 172 /* End of file */ +#define ENSRFILE 173 /* Error reading file */ +#define ENSRNOMEM 174 /* Out of memory */ +#define ENSRDESTRUCTION 175 /* Application terminated lookup */ +#define ENSRQUERYDOMAINTOOLONG 176 /* Domain name is too long */ +#define ENSRCNAMELOOP 177 /* Domain name is too long */ + +#ifndef errno +extern int errno; +#endif + +#endif /* LWIP_PROVIDE_ERRNO */ + +#endif /* __LWIP_ARCH_H__ */ diff --git a/wii/libogc/include/lwip/debug.h b/wii/libogc/include/lwip/debug.h new file mode 100644 index 0000000000..12cfd65afd --- /dev/null +++ b/wii/libogc/include/lwip/debug.h @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_DEBUG_H__ +#define __LWIP_DEBUG_H__ + +#include "arch/cc.h" + +/** lower two bits indicate debug level + * - 0 off + * - 1 warning + * - 2 serious + * - 3 severe + */ + +#define DBG_LEVEL_OFF 0 +#define DBG_LEVEL_WARNING 1 /* bad checksums, dropped packets, ... */ +#define DBG_LEVEL_SERIOUS 2 /* memory allocation failures, ... */ +#define DBG_LEVEL_SEVERE 3 /* */ +#define DBG_MASK_LEVEL 3 + +/** flag for LWIP_DEBUGF to enable that debug message */ +#define DBG_ON 0x80U +/** flag for LWIP_DEBUGF to disable that debug message */ +#define DBG_OFF 0x00U + +/** flag for LWIP_DEBUGF indicating a tracing message (to follow program flow) */ +#define DBG_TRACE 0x40U +/** flag for LWIP_DEBUGF indicating a state debug message (to follow module states) */ +#define DBG_STATE 0x20U +/** flag for LWIP_DEBUGF indicating newly added code, not thoroughly tested yet */ +#define DBG_FRESH 0x10U +/** flag for LWIP_DEBUGF to halt after printing this debug message */ +#define DBG_HALT 0x08U + +#ifdef LWIP_DEBUG +# ifndef LWIP_NOASSERT +# define LWIP_ASSERT(x,y) do { if(!(y)) LWIP_PLATFORM_ASSERT(x); } while(0) +# else +# define LWIP_ASSERT(x,y) +# endif +#endif + +#ifdef LWIP_DEBUG +/** print debug message only if debug message type is enabled... + * AND is of correct type AND is at least DBG_LEVEL + */ +# define LWIP_DEBUGF(debug,x) do { if (((debug) & DBG_ON) && ((debug) & DBG_TYPES_ON) && ((int)((debug) & DBG_MASK_LEVEL) >= DBG_MIN_LEVEL)) { LWIP_PLATFORM_DIAG(x); if ((debug) & DBG_HALT) while(1); } } while(0) +# define LWIP_ERROR(x) do { LWIP_PLATFORM_DIAG(x); } while(0) +#else /* LWIP_DEBUG */ +# define LWIP_ASSERT(x,y) +# define LWIP_DEBUGF(debug,x) +# define LWIP_ERROR(x) +#endif /* LWIP_DEBUG */ + +#endif /* __LWIP_DEBUG_H__ */ + + + + + + diff --git a/wii/libogc/include/lwip/def.h b/wii/libogc/include/lwip/def.h new file mode 100644 index 0000000000..eba9b8774d --- /dev/null +++ b/wii/libogc/include/lwip/def.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_DEF_H__ +#define __LWIP_DEF_H__ + +/* this might define NULL already */ +#include "arch/cc.h" + +#define LWIP_MAX(x , y) (x) > (y) ? (x) : (y) +#define LWIP_MIN(x , y) (x) < (y) ? (x) : (y) + +#ifndef NULL +#define NULL ((void *)0) +#endif + + +#endif /* __LWIP_DEF_H__ */ + diff --git a/wii/libogc/include/lwip/dhcp.h b/wii/libogc/include/lwip/dhcp.h new file mode 100644 index 0000000000..bfe753f26a --- /dev/null +++ b/wii/libogc/include/lwip/dhcp.h @@ -0,0 +1,223 @@ +/** @file + */ + +#ifndef __LWIP_DHCP_H__ +#define __LWIP_DHCP_H__ + +#include "lwip/opt.h" +#include "lwip/netif.h" +#include "lwip/udp.h" + +/** period (in seconds) of the application calling dhcp_coarse_tmr() */ +#define DHCP_COARSE_TIMER_SECS 60 +/** period (in milliseconds) of the application calling dhcp_fine_tmr() */ +#define DHCP_FINE_TIMER_MSECS 500 + +struct dhcp +{ + /** current DHCP state machine state */ + u8_t state; + /** retries of current request */ + u8_t tries; + /** transaction identifier of last sent request */ + u32_t xid; + /** our connection to the DHCP server */ + struct udp_pcb *pcb; + /** (first) pbuf of incoming msg */ + struct pbuf *p; + /** incoming msg */ + struct dhcp_msg *msg_in; + /** incoming msg options */ + struct dhcp_msg *options_in; + /** ingoing msg options length */ + u16_t options_in_len; + + struct pbuf *p_out; /* pbuf of outcoming msg */ + struct dhcp_msg *msg_out; /* outgoing msg */ + u16_t options_out_len; /* outgoing msg options length */ + u16_t request_timeout; /* #ticks with period DHCP_FINE_TIMER_SECS for request timeout */ + u16_t t1_timeout; /* #ticks with period DHCP_COARSE_TIMER_SECS for renewal time */ + u16_t t2_timeout; /* #ticks with period DHCP_COARSE_TIMER_SECS for rebind time */ + struct ip_addr server_ip_addr; /* dhcp server address that offered this lease */ + struct ip_addr offered_ip_addr; + struct ip_addr offered_sn_mask; + struct ip_addr offered_gw_addr; + struct ip_addr offered_bc_addr; +#define DHCP_MAX_DNS 2 + u32_t dns_count; /* actual number of DNS servers obtained */ + struct ip_addr offered_dns_addr[DHCP_MAX_DNS]; /* DNS server addresses */ + + u32_t offered_t0_lease; /* lease period (in seconds) */ + u32_t offered_t1_renew; /* recommended renew time (usually 50% of lease period) */ + u32_t offered_t2_rebind; /* recommended rebind time (usually 66% of lease period) */ +/** Patch #1308 + * TODO: See dhcp.c "TODO"s + */ +#if 0 + struct ip_addr offered_si_addr; + u8_t *boot_file_name; +#endif +}; + +/* MUST be compiled with "pack structs" or equivalent! */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +/** minimum set of fields of any DHCP message */ +struct dhcp_msg +{ + PACK_STRUCT_FIELD(u8_t op); + PACK_STRUCT_FIELD(u8_t htype); + PACK_STRUCT_FIELD(u8_t hlen); + PACK_STRUCT_FIELD(u8_t hops); + PACK_STRUCT_FIELD(u32_t xid); + PACK_STRUCT_FIELD(u16_t secs); + PACK_STRUCT_FIELD(u16_t flags); + PACK_STRUCT_FIELD(struct ip_addr ciaddr); + PACK_STRUCT_FIELD(struct ip_addr yiaddr); + PACK_STRUCT_FIELD(struct ip_addr siaddr); + PACK_STRUCT_FIELD(struct ip_addr giaddr); +#define DHCP_CHADDR_LEN 16U + PACK_STRUCT_FIELD(u8_t chaddr[DHCP_CHADDR_LEN]); +#define DHCP_SNAME_LEN 64U + PACK_STRUCT_FIELD(u8_t sname[DHCP_SNAME_LEN]); +#define DHCP_FILE_LEN 128U + PACK_STRUCT_FIELD(u8_t file[DHCP_FILE_LEN]); + PACK_STRUCT_FIELD(u32_t cookie); +#define DHCP_MIN_OPTIONS_LEN 68U +/** make sure user does not configure this too small */ +#if ((defined(DHCP_OPTIONS_LEN)) && (DHCP_OPTIONS_LEN < DHCP_MIN_OPTIONS_LEN)) +# undef DHCP_OPTIONS_LEN +#endif +/** allow this to be configured in lwipopts.h, but not too small */ +#if (!defined(DHCP_OPTIONS_LEN)) +/** set this to be sufficient for your options in outgoing DHCP msgs */ +# define DHCP_OPTIONS_LEN DHCP_MIN_OPTIONS_LEN +#endif + PACK_STRUCT_FIELD(u8_t options[DHCP_OPTIONS_LEN]); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +/** start DHCP configuration */ +err_t dhcp_start(struct netif *netif); +/** enforce early lease renewal (not needed normally)*/ +err_t dhcp_renew(struct netif *netif); +/** release the DHCP lease, usually called before dhcp_stop()*/ +err_t dhcp_release(struct netif *netif); +/** stop DHCP configuration */ +void dhcp_stop(struct netif *netif); +/** inform server of our manual IP address */ +void dhcp_inform(struct netif *netif); + +/** if enabled, check whether the offered IP address is not in use, using ARP */ +#if DHCP_DOES_ARP_CHECK +void dhcp_arp_reply(struct netif *netif, struct ip_addr *addr); +#endif + +/** to be called every minute */ +void dhcp_coarse_tmr(void); +/** to be called every half second */ +void dhcp_fine_tmr(void); + +/** DHCP message item offsets and length */ +#define DHCP_MSG_OFS (UDP_DATA_OFS) + #define DHCP_OP_OFS (DHCP_MSG_OFS + 0) + #define DHCP_HTYPE_OFS (DHCP_MSG_OFS + 1) + #define DHCP_HLEN_OFS (DHCP_MSG_OFS + 2) + #define DHCP_HOPS_OFS (DHCP_MSG_OFS + 3) + #define DHCP_XID_OFS (DHCP_MSG_OFS + 4) + #define DHCP_SECS_OFS (DHCP_MSG_OFS + 8) + #define DHCP_FLAGS_OFS (DHCP_MSG_OFS + 10) + #define DHCP_CIADDR_OFS (DHCP_MSG_OFS + 12) + #define DHCP_YIADDR_OFS (DHCP_MSG_OFS + 16) + #define DHCP_SIADDR_OFS (DHCP_MSG_OFS + 20) + #define DHCP_GIADDR_OFS (DHCP_MSG_OFS + 24) + #define DHCP_CHADDR_OFS (DHCP_MSG_OFS + 28) + #define DHCP_SNAME_OFS (DHCP_MSG_OFS + 44) + #define DHCP_FILE_OFS (DHCP_MSG_OFS + 108) +#define DHCP_MSG_LEN 236 + +#define DHCP_COOKIE_OFS (DHCP_MSG_OFS + DHCP_MSG_LEN) +#define DHCP_OPTIONS_OFS (DHCP_MSG_OFS + DHCP_MSG_LEN + 4) + +#define DHCP_CLIENT_PORT 68 +#define DHCP_SERVER_PORT 67 + +/** DHCP client states */ +#define DHCP_REQUESTING 1 +#define DHCP_INIT 2 +#define DHCP_REBOOTING 3 +#define DHCP_REBINDING 4 +#define DHCP_RENEWING 5 +#define DHCP_SELECTING 6 +#define DHCP_INFORMING 7 +#define DHCP_CHECKING 8 +#define DHCP_PERMANENT 9 +#define DHCP_BOUND 10 +/** not yet implemented #define DHCP_RELEASING 11 */ +#define DHCP_BACKING_OFF 12 +#define DHCP_OFF 13 + +#define DHCP_BOOTREQUEST 1 +#define DHCP_BOOTREPLY 2 + +#define DHCP_DISCOVER 1 +#define DHCP_OFFER 2 +#define DHCP_REQUEST 3 +#define DHCP_DECLINE 4 +#define DHCP_ACK 5 +#define DHCP_NAK 6 +#define DHCP_RELEASE 7 +#define DHCP_INFORM 8 + +#define DHCP_HTYPE_ETH 1 + +#define DHCP_HLEN_ETH 6 + +#define DHCP_BROADCAST_FLAG 15 +#define DHCP_BROADCAST_MASK (1 << DHCP_FLAG_BROADCAST) + +/** BootP options */ +#define DHCP_OPTION_PAD 0 +#define DHCP_OPTION_SUBNET_MASK 1 /* RFC 2132 3.3 */ +#define DHCP_OPTION_ROUTER 3 +#define DHCP_OPTION_DNS_SERVER 6 +#define DHCP_OPTION_HOSTNAME 12 +#define DHCP_OPTION_IP_TTL 23 +#define DHCP_OPTION_MTU 26 +#define DHCP_OPTION_BROADCAST 28 +#define DHCP_OPTION_TCP_TTL 37 +#define DHCP_OPTION_END 255 + +/** DHCP options */ +#define DHCP_OPTION_REQUESTED_IP 50 /* RFC 2132 9.1, requested IP address */ +#define DHCP_OPTION_LEASE_TIME 51 /* RFC 2132 9.2, time in seconds, in 4 bytes */ +#define DHCP_OPTION_OVERLOAD 52 /* RFC2132 9.3, use file and/or sname field for options */ + +#define DHCP_OPTION_MESSAGE_TYPE 53 /* RFC 2132 9.6, important for DHCP */ +#define DHCP_OPTION_MESSAGE_TYPE_LEN 1 + + +#define DHCP_OPTION_SERVER_ID 54 /* RFC 2132 9.7, server IP address */ +#define DHCP_OPTION_PARAMETER_REQUEST_LIST 55 /* RFC 2132 9.8, requested option types */ + +#define DHCP_OPTION_MAX_MSG_SIZE 57 /* RFC 2132 9.10, message size accepted >= 576 */ +#define DHCP_OPTION_MAX_MSG_SIZE_LEN 2 + +#define DHCP_OPTION_T1 58 /* T1 renewal time */ +#define DHCP_OPTION_T2 59 /* T2 rebinding time */ +#define DHCP_OPTION_CLIENT_ID 61 +#define DHCP_OPTION_TFTP_SERVERNAME 66 +#define DHCP_OPTION_BOOTFILE 67 + +/** possible combinations of overloading the file and sname fields with options */ +#define DHCP_OVERLOAD_NONE 0 +#define DHCP_OVERLOAD_FILE 1 +#define DHCP_OVERLOAD_SNAME 2 +#define DHCP_OVERLOAD_SNAME_FILE 3 + +#endif /*__LWIP_DHCP_H__*/ diff --git a/wii/libogc/include/lwip/err.h b/wii/libogc/include/lwip/err.h new file mode 100644 index 0000000000..c92cb26d76 --- /dev/null +++ b/wii/libogc/include/lwip/err.h @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_ERR_H__ +#define __LWIP_ERR_H__ + +#include "lwip/opt.h" + +#include "arch/cc.h" + +typedef s8_t err_t; + +/* Definitions for error constants. */ + +#define ERR_OK 0 /* No error, everything OK. */ +#define ERR_MEM -1 /* Out of memory error. */ +#define ERR_BUF -2 /* Buffer error. */ + + +#define ERR_ABRT -3 /* Connection aborted. */ +#define ERR_RST -4 /* Connection reset. */ +#define ERR_CLSD -5 /* Connection closed. */ +#define ERR_CONN -6 /* Not connected. */ + +#define ERR_VAL -7 /* Illegal value. */ + +#define ERR_ARG -8 /* Illegal argument. */ + +#define ERR_RTE -9 /* Routing problem. */ + +#define ERR_USE -10 /* Address in use. */ + +#define ERR_IF -11 /* Low-level netif error */ +#define ERR_ISCONN -12 /* Already connected. */ + + +#ifdef LWIP_DEBUG +extern char *lwip_strerr(err_t err); +#else +#define lwip_strerr(x) "" +#endif /* LWIP_DEBUG */ +#endif /* __LWIP_ERR_H__ */ diff --git a/wii/libogc/include/lwip/lwipopts.h b/wii/libogc/include/lwip/lwipopts.h new file mode 100644 index 0000000000..70dda6c0f6 --- /dev/null +++ b/wii/libogc/include/lwip/lwipopts.h @@ -0,0 +1,220 @@ +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIPOPTS_H__ +#define __LWIPOPTS_H__ + +#include + +#undef BYTE_ORDER + +#define BYTE_ORDER BIG_ENDIAN +#define NO_SYS 1 +#define LWIP_CALLBACK_API 1 +#undef LWIP_EVENT_API +#define TCPIP_THREAD_PRIO 125 +#define SYS_LIGHTWEIGHT_PROT 1 + +/* ---------- Memory options ---------- */ +/* MEM_ALIGNMENT: should be set to the alignment of the CPU for which + lwIP is compiled. 4 byte alignment -> define MEM_ALIGNMENT to 4, 2 + byte alignment -> define MEM_ALIGNMENT to 2. */ +#define MEM_ALIGNMENT 4 + +/* MEM_SIZE: the size of the heap memory. If the application will send +a lot of data that needs to be copied, this should be set high. */ +#define MEM_SIZE (192*1024) + +/* MEMP_NUM_PBUF: the number of memp struct pbufs. If the application + sends a lot of data out of ROM (or other static memory), this + should be set high. */ +#define MEMP_NUM_PBUF 128 +/* MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One + per active UDP "connection". */ +#define MEMP_NUM_UDP_PCB 16 +/* MEMP_NUM_TCP_PCB: the number of simulatenously active TCP + connections. */ +#define MEMP_NUM_TCP_PCB 16 +/* MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP + connections. */ +#define MEMP_NUM_TCP_PCB_LISTEN 8 +/* MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP + segments. */ +#define MEMP_NUM_TCP_SEG 128 + +/* The following four are used only with the sequential API and can be + set to 0 if the application only will use the raw API. */ +/* MEMP_NUM_NETBUF: the number of struct netbufs. */ +#define MEMP_NUM_NETBUF 16 +/* MEMP_NUM_NETCONN: the number of struct netconns. */ +#define MEMP_NUM_NETCONN 16 +/* MEMP_NUM_APIMSG: the number of struct api_msg, used for + communication between the TCP/IP stack and the sequential + programs. */ +#define MEMP_NUM_API_MSG 128 +/* MEMP_NUM_TCPIPMSG: the number of struct tcpip_msg, which is used + for sequential API communication and incoming packets. Used in + src/api/tcpip.c. */ +#define MEMP_NUM_TCPIP_MSG 128 +/* MEMP_NUM_SYS_TIMEOUT: the number of simulateously active + timeouts. */ +#define MEMP_NUM_SYS_TIMEOUT 0 + +/* ---------- Pbuf options ---------- */ +/* PBUF_POOL_SIZE: the number of buffers in the pbuf pool. */ +#define PBUF_POOL_SIZE 128 //128 + +/* PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. */ +#define PBUF_POOL_BUFSIZE 1600 + +/* PBUF_LINK_HLEN: the number of bytes that should be allocated for a + link level header. */ +#define PBUF_LINK_HLEN 16 + +/* ---------- TCP options ---------- */ +#define LWIP_TCP 1 +#define TCP_TTL 255 + +/* Controls if TCP should queue segments that arrive out of + order. Define to 0 if your device is low on memory. */ +#define TCP_QUEUE_OOSEQ 1 + +/* TCP Maximum segment size. */ +#define TCP_MSS 1460 + +/* TCP sender buffer space (bytes). */ +#define TCP_SND_BUF (36*TCP_MSS) + +/* TCP sender buffer space (pbufs). This must be at least = 2 * + TCP_SND_BUF/TCP_MSS for things to work. */ +#define TCP_SND_QUEUELEN (36*TCP_SND_BUF/TCP_MSS) + +/* TCP receive window. */ +#define TCP_WND (36*TCP_MSS) + +/* Maximum number of retransmissions of data segments. */ +#define TCP_MAXRTX 12 + +/* Maximum number of retransmissions of SYN segments. */ +#define TCP_SYNMAXRTX 4 + +/* ---------- ARP options ---------- */ +/** + * - If enabled, cache entries are generated for every kind of ARP traffic or + * broadcast IP traffic. This enhances behaviour for sending to a dynamic set + * of hosts, for example if acting as a gateway. + * - If disabled, cache entries are generated only for IP destination addresses + * in use by lwIP or applications. This enhances performance if sending to a small, + * reasonably static number of hosts. Typically for embedded devices. + */ + +/* ---------- IP options ---------- */ +/* Define IP_FORWARD to 1 if you wish to have the ability to forward + IP packets across network interfaces. If you are going to run lwIP + on a device with only one network interface, define this to 0. */ +#define IP_FORWARD 0 + +/* If defined to 1, IP options are allowed (but not parsed). If + defined to 0, all packets with IP options are dropped. */ +#define IP_OPTIONS 1 + +/* ---------- ICMP options ---------- */ +#define ICMP_TTL 255 + + +/* ---------- DHCP options ---------- */ +/* Define LWIP_DHCP to 1 if you want DHCP configuration of + interfaces. DHCP is not implemented in lwIP 0.5.1, however, so + turning this on does currently not work. */ +#define LWIP_DHCP 1 + +/* 1 if you want to do an ARP check on the offered address + (recommended). */ +#define DHCP_DOES_ARP_CHECK 1 + +/* ---------- UDP options ---------- */ +#define LWIP_UDP 1 +#define UDP_TTL 255 + +#define LWIP_STATS 0 +/* ---------- Statistics options ---------- */ +/*#define STATS*/ +#if LWIP_STATS +#define LINK_STATS 0 +#define IP_STATS 0 +#define ICMP_STATS 0 +#define UDP_STATS 0 +#define TCP_STATS 0 +#define MEM_STATS 0 +#define MEMP_STATS 0 +#define PBUF_STATS 0 +#define SYS_STATS 0 +#define RAW_STATS 0 +#endif + +#ifdef LWIP_DEBUG +#define DBG_TYPES_ON -1 +#define DEMO_DEBUG DBG_OFF +#define ETHARP_DEBUG DBG_OFF +#define NETIF_DEBUG DBG_OFF +#define PBUF_DEBUG DBG_OFF +#define API_LIB_DEBUG DBG_OFF +#define API_MSG_DEBUG DBG_ON +#define SOCKETS_DEBUG DBG_OFF +#define ICMP_DEBUG DBG_OFF +#define INET_DEBUG DBG_OFF +#define IP_DEBUG DBG_OFF +#define IP_REASS_DEBUG DBG_OFF +#define MEM_DEBUG DBG_OFF +#define MEMP_DEBUG DBG_OFF +#define SYS_DEBUG DBG_OFF +#define RAW_DEBUG DBG_OFF +#define TCP_DEBUG DBG_OFF +#define TCP_INPUT_DEBUG DBG_OFF +#define TCP_FR_DEBUG DBG_OFF +#define TCP_RTO_DEBUG DBG_OFF +#define TCP_REXMIT_DEBUG DBG_OFF +#define TCP_CWND_DEBUG DBG_OFF +#define TCP_WND_DEBUG DBG_OFF +#define TCP_OUTPUT_DEBUG DBG_OFF +#define TCP_RST_DEBUG DBG_OFF +#define TCP_QLEN_DEBUG DBG_OFF +#define UDP_DEBUG DBG_OFF +#define TCPIP_DEBUG DBG_OFF +#define PPP_DEBUG DBG_OFF +#define SLIP_DEBUG DBG_OFF +#define DHCP_DEBUG DBG_OFF + +#define DBG_MIN_LEVEL DBG_LEVEL_OFF +#endif + + +#endif /* __LWIPOPTS_H__ */ diff --git a/wii/libogc/include/lwip/mem.h b/wii/libogc/include/lwip/mem.h new file mode 100644 index 0000000000..ee6fea7d8c --- /dev/null +++ b/wii/libogc/include/lwip/mem.h @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_MEM_H__ +#define __LWIP_MEM_H__ + +#include "lwip/opt.h" +#include "lwip/arch.h" + +#if MEM_SIZE > 64000l +typedef u32_t mem_size_t; +#else +typedef u16_t mem_size_t; +#endif /* MEM_SIZE > 64000 */ + + +void mem_init(void); + +void *mem_malloc(mem_size_t size); +void mem_free(void *mem); +void *mem_realloc(void *mem, mem_size_t size); +void *mem_reallocm(void *mem, mem_size_t size); + +#ifndef MEM_ALIGN_SIZE +#define MEM_ALIGN_SIZE(size) (((size) + MEM_ALIGNMENT - 1) & ~(MEM_ALIGNMENT-1)) +#endif + +#ifndef MEM_ALIGN +#define MEM_ALIGN(addr) ((void *)(((mem_ptr_t)(addr) + MEM_ALIGNMENT - 1) & ~(mem_ptr_t)(MEM_ALIGNMENT-1))) +#endif + +#endif /* __LWIP_MEM_H__ */ + diff --git a/wii/libogc/include/lwip/memp.h b/wii/libogc/include/lwip/memp.h new file mode 100644 index 0000000000..1cd46fa3fe --- /dev/null +++ b/wii/libogc/include/lwip/memp.h @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#ifndef __LWIP_MEMP_H__ +#define __LWIP_MEMP_H__ + +#include "lwip/opt.h" + +typedef enum { + MEMP_PBUF, + MEMP_RAW_PCB, + MEMP_UDP_PCB, + MEMP_TCP_PCB, + MEMP_TCP_PCB_LISTEN, + MEMP_TCP_SEG, + + MEMP_NETBUF, + MEMP_NETCONN, + MEMP_API_MSG, + MEMP_TCPIP_MSG, + + MEMP_SYS_TIMEOUT, + + MEMP_MAX +} memp_t; + +void memp_init(void); + +void *memp_malloc(memp_t type); +void *memp_realloc(memp_t fromtype, memp_t totype, void *mem); +void memp_free(memp_t type, void *mem); + +#endif /* __LWIP_MEMP_H__ */ + diff --git a/wii/libogc/include/lwip/netif.h b/wii/libogc/include/lwip/netif.h new file mode 100644 index 0000000000..ff50c6f9c8 --- /dev/null +++ b/wii/libogc/include/lwip/netif.h @@ -0,0 +1,150 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_NETIF_H__ +#define __LWIP_NETIF_H__ + +#include "lwip/opt.h" + +#include "lwip/err.h" + +#include "lwip/ip_addr.h" + +#include "lwip/inet.h" +#include "lwip/pbuf.h" +#if LWIP_DHCP +# include "lwip/dhcp.h" +#endif + +/** must be the maximum of all used hardware address lengths + across all types of interfaces in use */ +#define NETIF_MAX_HWADDR_LEN 6U + +/** TODO: define the use (where, when, whom) of netif flags */ + +/** whether the network interface is 'up'. this is + * a software flag used to control whether this network + * interface is enabled and processes traffic. + */ +#define NETIF_FLAG_UP 0x1U +/** if set, the netif has broadcast capability */ +#define NETIF_FLAG_BROADCAST 0x2U +/** if set, the netif is one end of a point-to-point connection */ +#define NETIF_FLAG_POINTTOPOINT 0x4U +/** if set, the interface is configured using DHCP */ +#define NETIF_FLAG_DHCP 0x08U +/** if set, the interface has an active link + * (set by the network interface driver) */ +#define NETIF_FLAG_LINK_UP 0x10U + +/** Generic data structure used for all lwIP network interfaces. + * The following fields should be filled in by the initialization + * function for the device driver: hwaddr_len, hwaddr[], mtu, flags */ + +struct netif { + /** pointer to next in linked list */ + struct netif *next; + + /** IP address configuration in network byte order */ + struct ip_addr ip_addr; + struct ip_addr netmask; + struct ip_addr gw; + + /** This function is called by the network device driver + * to pass a packet up the TCP/IP stack. */ + err_t (* input)(struct pbuf *p, struct netif *inp); + /** This function is called by the IP module when it wants + * to send a packet on the interface. This function typically + * first resolves the hardware address, then sends the packet. */ + err_t (* output)(struct netif *netif, struct pbuf *p, + struct ip_addr *ipaddr); + /** This function is called by the ARP module when it wants + * to send a packet on the interface. This function outputs + * the pbuf as-is on the link medium. */ + err_t (* linkoutput)(struct netif *netif, struct pbuf *p); + /** This field can be set by the device driver and could point + * to state information for the device. */ + void *state; +#if LWIP_DHCP + /** the DHCP client state information for this netif */ + struct dhcp *dhcp; +#endif + /** number of bytes used in hwaddr */ + u8_t hwaddr_len; + /** link level hardware address of this interface */ + u8_t hwaddr[NETIF_MAX_HWADDR_LEN]; + /** maximum transfer unit (in bytes) */ + u16_t mtu; + /** flags (see NETIF_FLAG_ above) */ + u8_t flags; + /** link type */ + u8_t link_type; + /** descriptive abbreviation */ + char name[2]; + /** number of this interface */ + u8_t num; +}; + +/** The list of network interfaces. */ +extern struct netif *netif_list; +/** The default network interface. */ +extern struct netif *netif_default; + +/* netif_init() must be called first. */ +void netif_init(void); + +struct netif *netif_add(struct netif *netif, struct ip_addr *ipaddr, struct ip_addr *netmask, + struct ip_addr *gw, + void *state, + err_t (* init)(struct netif *netif), + err_t (* input)(struct pbuf *p, struct netif *netif)); + +void +netif_set_addr(struct netif *netif,struct ip_addr *ipaddr, struct ip_addr *netmask, + struct ip_addr *gw); +void netif_remove(struct netif * netif); + +/* Returns a network interface given its name. The name is of the form + "et0", where the first two letters are the "name" field in the + netif structure, and the digit is in the num field in the same + structure. */ +struct netif *netif_find(char *name); + +void netif_set_default(struct netif *netif); + +void netif_set_ipaddr(struct netif *netif, struct ip_addr *ipaddr); +void netif_set_netmask(struct netif *netif, struct ip_addr *netmast); +void netif_set_gw(struct netif *netif, struct ip_addr *gw); +void netif_set_up(struct netif *netif); +void netif_set_down(struct netif *netif); +u8_t netif_is_up(struct netif *netif); + +#endif /* __LWIP_NETIF_H__ */ diff --git a/wii/libogc/include/lwip/opt.h b/wii/libogc/include/lwip/opt.h new file mode 100644 index 0000000000..8e3910d52b --- /dev/null +++ b/wii/libogc/include/lwip/opt.h @@ -0,0 +1,669 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_OPT_H__ +#define __LWIP_OPT_H__ + +/* Include user defined options first */ +#include "lwipopts.h" +#include "lwip/debug.h" + +/* Define default values for unconfigured parameters. */ + +/* Platform specific locking */ + +/* + * enable SYS_LIGHTWEIGHT_PROT in lwipopts.h if you want inter-task protection + * for certain critical regions during buffer allocation, deallocation and memory + * allocation and deallocation. + */ +#ifndef SYS_LIGHTWEIGHT_PROT +#define SYS_LIGHTWEIGHT_PROT 0 +#endif + +#ifndef NO_SYS +#define NO_SYS 0 +#endif +/* ---------- Memory options ---------- */ +/* MEM_ALIGNMENT: should be set to the alignment of the CPU for which + lwIP is compiled. 4 byte alignment -> define MEM_ALIGNMENT to 4, 2 + byte alignment -> define MEM_ALIGNMENT to 2. */ + +#ifndef MEM_ALIGNMENT +#define MEM_ALIGNMENT 1 +#endif + +/* MEM_SIZE: the size of the heap memory. If the application will send +a lot of data that needs to be copied, this should be set high. */ +#ifndef MEM_SIZE +#define MEM_SIZE 1600 +#endif + +#ifndef MEMP_SANITY_CHECK +#define MEMP_SANITY_CHECK 0 +#endif + +/* MEMP_NUM_PBUF: the number of memp struct pbufs. If the application + sends a lot of data out of ROM (or other static memory), this + should be set high. */ +#ifndef MEMP_NUM_PBUF +#define MEMP_NUM_PBUF 16 +#endif + +/* Number of raw connection PCBs */ +#ifndef MEMP_NUM_RAW_PCB +#define MEMP_NUM_RAW_PCB 4 +#endif + +/* MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One + per active UDP "connection". */ +#ifndef MEMP_NUM_UDP_PCB +#define MEMP_NUM_UDP_PCB 4 +#endif +/* MEMP_NUM_TCP_PCB: the number of simulatenously active TCP + connections. */ +#ifndef MEMP_NUM_TCP_PCB +#define MEMP_NUM_TCP_PCB 5 +#endif +/* MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP + connections. */ +#ifndef MEMP_NUM_TCP_PCB_LISTEN +#define MEMP_NUM_TCP_PCB_LISTEN 8 +#endif +/* MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP + segments. */ +#ifndef MEMP_NUM_TCP_SEG +#define MEMP_NUM_TCP_SEG 16 +#endif +/* MEMP_NUM_SYS_TIMEOUT: the number of simulateously active + timeouts. */ +#ifndef MEMP_NUM_SYS_TIMEOUT +#define MEMP_NUM_SYS_TIMEOUT 3 +#endif + +/* The following four are used only with the sequential API and can be + set to 0 if the application only will use the raw API. */ +/* MEMP_NUM_NETBUF: the number of struct netbufs. */ +#ifndef MEMP_NUM_NETBUF +#define MEMP_NUM_NETBUF 2 +#endif +/* MEMP_NUM_NETCONN: the number of struct netconns. */ +#ifndef MEMP_NUM_NETCONN +#define MEMP_NUM_NETCONN 4 +#endif +/* MEMP_NUM_APIMSG: the number of struct api_msg, used for + communication between the TCP/IP stack and the sequential + programs. */ +#ifndef MEMP_NUM_API_MSG +#define MEMP_NUM_API_MSG 8 +#endif +/* MEMP_NUM_TCPIPMSG: the number of struct tcpip_msg, which is used + for sequential API communication and incoming packets. Used in + src/api/tcpip.c. */ +#ifndef MEMP_NUM_TCPIP_MSG +#define MEMP_NUM_TCPIP_MSG 8 +#endif + +/* ---------- Pbuf options ---------- */ +/* PBUF_POOL_SIZE: the number of buffers in the pbuf pool. */ + +#ifndef PBUF_POOL_SIZE +#define PBUF_POOL_SIZE 16 +#endif + +/* PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. */ + +#ifndef PBUF_POOL_BUFSIZE +#define PBUF_POOL_BUFSIZE 128 +#endif + +/* PBUF_LINK_HLEN: the number of bytes that should be allocated for a + link level header. Defaults to 14 for Ethernet. */ + +#ifndef PBUF_LINK_HLEN +#define PBUF_LINK_HLEN 14 +#endif + + + +/* ---------- ARP options ---------- */ + +/** Number of active hardware address, IP address pairs cached */ +#ifndef ARP_TABLE_SIZE +#define ARP_TABLE_SIZE 10 +#endif + +/** + * If enabled, outgoing packets are queued during hardware address + * resolution. + * + * This feature has not stabilized yet. Single-packet queueing is + * believed to be stable, multi-packet queueing is believed to + * clash with the TCP segment queueing. + * + * As multi-packet-queueing is currently disabled, enabling this + * _should_ work, but we need your testing feedback on lwip-users. + * + */ +#ifndef ARP_QUEUEING +#define ARP_QUEUEING 1 +#endif + +/* This option is deprecated */ +#ifdef ETHARP_QUEUE_FIRST +#error ETHARP_QUEUE_FIRST option is deprecated. Remove it from your lwipopts.h. +#endif + +/* This option is removed to comply with the ARP standard */ +#ifdef ETHARP_ALWAYS_INSERT +#error ETHARP_ALWAYS_INSERT option is deprecated. Remove it from your lwipopts.h. +#endif + +/* ---------- IP options ---------- */ +/* Define IP_FORWARD to 1 if you wish to have the ability to forward + IP packets across network interfaces. If you are going to run lwIP + on a device with only one network interface, define this to 0. */ +#ifndef IP_FORWARD +#define IP_FORWARD 0 +#endif + +/* If defined to 1, IP options are allowed (but not parsed). If + defined to 0, all packets with IP options are dropped. */ +#ifndef IP_OPTIONS +#define IP_OPTIONS 1 +#endif + +/** IP reassembly and segmentation. Even if they both deal with IP + * fragments, note that these are orthogonal, one dealing with incoming + * packets, the other with outgoing packets + */ + +/** Reassemble incoming fragmented IP packets */ +#ifndef IP_REASSEMBLY +#define IP_REASSEMBLY 1 +#endif + +/** Fragment outgoing IP packets if their size exceeds MTU */ +#ifndef IP_FRAG +#define IP_FRAG 1 +#endif + +/* ---------- ICMP options ---------- */ + +#ifndef ICMP_TTL +#define ICMP_TTL 255 +#endif + +/* ---------- RAW options ---------- */ + +#ifndef LWIP_RAW +#define LWIP_RAW 1 +#endif + +#ifndef RAW_TTL +#define RAW_TTL 255 +#endif + +/* ---------- DHCP options ---------- */ + +#ifndef LWIP_DHCP +#define LWIP_DHCP 0 +#endif + +/* 1 if you want to do an ARP check on the offered address + (recommended). */ +#ifndef DHCP_DOES_ARP_CHECK +#define DHCP_DOES_ARP_CHECK 1 +#endif + +/* ---------- UDP options ---------- */ +#ifndef LWIP_UDP +#define LWIP_UDP 1 +#endif + +#ifndef UDP_TTL +#define UDP_TTL 255 +#endif + +/* ---------- TCP options ---------- */ +#ifndef LWIP_TCP +#define LWIP_TCP 1 +#endif + +#ifndef TCP_TTL +#define TCP_TTL 255 +#endif + +#ifndef TCP_WND +#define TCP_WND 2048 +#endif + +#ifndef TCP_MAXRTX +#define TCP_MAXRTX 12 +#endif + +#ifndef TCP_SYNMAXRTX +#define TCP_SYNMAXRTX 6 +#endif + + +/* Controls if TCP should queue segments that arrive out of + order. Define to 0 if your device is low on memory. */ +#ifndef TCP_QUEUE_OOSEQ +#define TCP_QUEUE_OOSEQ 1 +#endif + +/* TCP Maximum segment size. */ +#ifndef TCP_MSS +#define TCP_MSS 128 /* A *very* conservative default. */ +#endif + +/* TCP sender buffer space (bytes). */ +#ifndef TCP_SND_BUF +#define TCP_SND_BUF 256 +#endif + +/* TCP sender buffer space (pbufs). This must be at least = 2 * + TCP_SND_BUF/TCP_MSS for things to work. */ +#ifndef TCP_SND_QUEUELEN +#define TCP_SND_QUEUELEN 4 * TCP_SND_BUF/TCP_MSS +#endif + + +/* Maximum number of retransmissions of data segments. */ + +/* Maximum number of retransmissions of SYN segments. */ + +/* TCP writable space (bytes). This must be less than or equal + to TCP_SND_BUF. It is the amount of space which must be + available in the tcp snd_buf for select to return writable */ +#ifndef TCP_SNDLOWAT +#define TCP_SNDLOWAT TCP_SND_BUF/2 +#endif + +/* Support loop interface (127.0.0.1) */ +#ifndef LWIP_HAVE_LOOPIF +#define LWIP_HAVE_LOOPIF 1 +#endif + +#ifndef LWIP_EVENT_API +#define LWIP_EVENT_API 0 +#define LWIP_CALLBACK_API 1 +#else +#define LWIP_EVENT_API 1 +#define LWIP_CALLBACK_API 0 +#endif + +#ifndef LWIP_COMPAT_SOCKETS +#define LWIP_COMPAT_SOCKETS 1 +#endif + + +#ifndef TCPIP_THREAD_PRIO +#define TCPIP_THREAD_PRIO 1 +#endif + +#ifndef SLIPIF_THREAD_PRIO +#define SLIPIF_THREAD_PRIO 1 +#endif + +#ifndef PPP_THREAD_PRIO +#define PPP_THREAD_PRIO 1 +#endif + +#ifndef DEFAULT_THREAD_PRIO +#define DEFAULT_THREAD_PRIO 1 +#endif + + +/* ---------- Socket Options ---------- */ +/* Enable SO_REUSEADDR and SO_REUSEPORT options */ +#ifndef SO_REUSE +# define SO_REUSE 0 +#endif + + +/* ---------- Statistics options ---------- */ +#ifndef LWIP_STATS +#define LWIP_STATS 1 +#endif + +#if LWIP_STATS + +#ifndef LWIP_STATS_DISPLAY +#define LWIP_STATS_DISPLAY 0 +#endif + +#ifndef LINK_STATS +#define LINK_STATS 1 +#endif + +#ifndef IP_STATS +#define IP_STATS 1 +#endif + +#ifndef IPFRAG_STATS +#define IPFRAG_STATS 1 +#endif + +#ifndef ICMP_STATS +#define ICMP_STATS 1 +#endif + +#ifndef UDP_STATS +#define UDP_STATS 1 +#endif + +#ifndef TCP_STATS +#define TCP_STATS 1 +#endif + +#ifndef MEM_STATS +#define MEM_STATS 1 +#endif + +#ifndef MEMP_STATS +#define MEMP_STATS 1 +#endif + +#ifndef PBUF_STATS +#define PBUF_STATS 1 +#endif + +#ifndef SYS_STATS +#define SYS_STATS 1 +#endif + +#ifndef RAW_STATS +#define RAW_STATS 0 +#endif + +#else + +#define LINK_STATS 0 +#define IP_STATS 0 +#define IPFRAG_STATS 0 +#define ICMP_STATS 0 +#define UDP_STATS 0 +#define TCP_STATS 0 +#define MEM_STATS 0 +#define MEMP_STATS 0 +#define PBUF_STATS 0 +#define SYS_STATS 0 +#define RAW_STATS 0 +#define LWIP_STATS_DISPLAY 0 + +#endif /* LWIP_STATS */ + +/* ---------- PPP options ---------- */ + +#ifndef PPP_SUPPORT +#define PPP_SUPPORT 0 /* Set for PPP */ +#endif + +#if PPP_SUPPORT + +#define NUM_PPP 1 /* Max PPP sessions. */ + + + +#ifndef PAP_SUPPORT +#define PAP_SUPPORT 0 /* Set for PAP. */ +#endif + +#ifndef CHAP_SUPPORT +#define CHAP_SUPPORT 0 /* Set for CHAP. */ +#endif + +#define MSCHAP_SUPPORT 0 /* Set for MSCHAP (NOT FUNCTIONAL!) */ +#define CBCP_SUPPORT 0 /* Set for CBCP (NOT FUNCTIONAL!) */ +#define CCP_SUPPORT 0 /* Set for CCP (NOT FUNCTIONAL!) */ + +#ifndef VJ_SUPPORT +#define VJ_SUPPORT 0 /* Set for VJ header compression. */ +#endif + +#ifndef MD5_SUPPORT +#define MD5_SUPPORT 0 /* Set for MD5 (see also CHAP) */ +#endif + + +/* + * Timeouts. + */ +#define FSM_DEFTIMEOUT 6 /* Timeout time in seconds */ +#define FSM_DEFMAXTERMREQS 2 /* Maximum Terminate-Request transmissions */ +#define FSM_DEFMAXCONFREQS 10 /* Maximum Configure-Request transmissions */ +#define FSM_DEFMAXNAKLOOPS 5 /* Maximum number of nak loops */ + +#define UPAP_DEFTIMEOUT 6 /* Timeout (seconds) for retransmitting req */ +#define UPAP_DEFREQTIME 30 /* Time to wait for auth-req from peer */ + +#define CHAP_DEFTIMEOUT 6 /* Timeout time in seconds */ +#define CHAP_DEFTRANSMITS 10 /* max # times to send challenge */ + + +/* Interval in seconds between keepalive echo requests, 0 to disable. */ +#if 1 +#define LCP_ECHOINTERVAL 0 +#else +#define LCP_ECHOINTERVAL 10 +#endif + +/* Number of unanswered echo requests before failure. */ +#define LCP_MAXECHOFAILS 3 + +/* Max Xmit idle time (in jiffies) before resend flag char. */ +#define PPP_MAXIDLEFLAG 100 + +/* + * Packet sizes + * + * Note - lcp shouldn't be allowed to negotiate stuff outside these + * limits. See lcp.h in the pppd directory. + * (XXX - these constants should simply be shared by lcp.c instead + * of living in lcp.h) + */ +#define PPP_MTU 1500 /* Default MTU (size of Info field) */ +#if 0 +#define PPP_MAXMTU 65535 - (PPP_HDRLEN + PPP_FCSLEN) +#else +#define PPP_MAXMTU 1500 /* Largest MTU we allow */ +#endif +#define PPP_MINMTU 64 +#define PPP_MRU 1500 /* default MRU = max length of info field */ +#define PPP_MAXMRU 1500 /* Largest MRU we allow */ +#define PPP_DEFMRU 296 /* Try for this */ +#define PPP_MINMRU 128 /* No MRUs below this */ + + +#define MAXNAMELEN 256 /* max length of hostname or name for auth */ +#define MAXSECRETLEN 256 /* max length of password or secret */ + +#endif /* PPP_SUPPORT */ + +/* checksum options - set to zero for hardware checksum support */ + +#ifndef CHECKSUM_GEN_IP +#define CHECKSUM_GEN_IP 1 +#endif + +#ifndef CHECKSUM_GEN_UDP +#define CHECKSUM_GEN_UDP 1 +#endif + +#ifndef CHECKSUM_GEN_TCP +#define CHECKSUM_GEN_TCP 1 +#endif + +#ifndef CHECKSUM_CHECK_IP +#define CHECKSUM_CHECK_IP 1 +#endif + +#ifndef CHECKSUM_CHECK_UDP +#define CHECKSUM_CHECK_UDP 1 +#endif + +#ifndef CHECKSUM_CHECK_TCP +#define CHECKSUM_CHECK_TCP 1 +#endif + +/* Debugging options all default to off */ + +#ifndef DBG_TYPES_ON +#define DBG_TYPES_ON 0 +#endif + +#ifndef ETHARP_DEBUG +#define ETHARP_DEBUG DBG_OFF +#endif + +#ifndef NETIF_DEBUG +#define NETIF_DEBUG DBG_OFF +#endif + +#ifndef PBUF_DEBUG +#define PBUF_DEBUG DBG_OFF +#endif + +#ifndef API_LIB_DEBUG +#define API_LIB_DEBUG DBG_OFF +#endif + +#ifndef API_MSG_DEBUG +#define API_MSG_DEBUG DBG_OFF +#endif + +#ifndef SOCKETS_DEBUG +#define SOCKETS_DEBUG DBG_OFF +#endif + +#ifndef ICMP_DEBUG +#define ICMP_DEBUG DBG_OFF +#endif + +#ifndef INET_DEBUG +#define INET_DEBUG DBG_OFF +#endif + +#ifndef IP_DEBUG +#define IP_DEBUG DBG_OFF +#endif + +#ifndef IP_REASS_DEBUG +#define IP_REASS_DEBUG DBG_OFF +#endif + +#ifndef RAW_DEBUG +#define RAW_DEBUG DBG_OFF +#endif + +#ifndef MEM_DEBUG +#define MEM_DEBUG DBG_OFF +#endif + +#ifndef MEMP_DEBUG +#define MEMP_DEBUG DBG_OFF +#endif + +#ifndef SYS_DEBUG +#define SYS_DEBUG DBG_OFF +#endif + +#ifndef TCP_DEBUG +#define TCP_DEBUG DBG_OFF +#endif + +#ifndef TCP_INPUT_DEBUG +#define TCP_INPUT_DEBUG DBG_OFF +#endif + +#ifndef TCP_FR_DEBUG +#define TCP_FR_DEBUG DBG_OFF +#endif + +#ifndef TCP_RTO_DEBUG +#define TCP_RTO_DEBUG DBG_OFF +#endif + +#ifndef TCP_REXMIT_DEBUG +#define TCP_REXMIT_DEBUG DBG_OFF +#endif + +#ifndef TCP_CWND_DEBUG +#define TCP_CWND_DEBUG DBG_OFF +#endif + +#ifndef TCP_WND_DEBUG +#define TCP_WND_DEBUG DBG_OFF +#endif + +#ifndef TCP_OUTPUT_DEBUG +#define TCP_OUTPUT_DEBUG DBG_OFF +#endif + +#ifndef TCP_RST_DEBUG +#define TCP_RST_DEBUG DBG_OFF +#endif + +#ifndef TCP_QLEN_DEBUG +#define TCP_QLEN_DEBUG DBG_OFF +#endif + +#ifndef UDP_DEBUG +#define UDP_DEBUG DBG_OFF +#endif + +#ifndef TCPIP_DEBUG +#define TCPIP_DEBUG DBG_OFF +#endif + +#ifndef PPP_DEBUG +#define PPP_DEBUG DBG_OFF +#endif + +#ifndef SLIP_DEBUG +#define SLIP_DEBUG DBG_OFF +#endif + +#ifndef DHCP_DEBUG +#define DHCP_DEBUG DBG_OFF +#endif + + +#ifndef DBG_MIN_LEVEL +#define DBG_MIN_LEVEL DBG_LEVEL_OFF +#endif + +#endif /* __LWIP_OPT_H__ */ + + + diff --git a/wii/libogc/include/lwip/pbuf.h b/wii/libogc/include/lwip/pbuf.h new file mode 100644 index 0000000000..546aa30357 --- /dev/null +++ b/wii/libogc/include/lwip/pbuf.h @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#ifndef __LWIP_PBUF_H__ +#define __LWIP_PBUF_H__ + +#include "arch/cc.h" + + +#define PBUF_TRANSPORT_HLEN 20 +#define PBUF_IP_HLEN 20 + +typedef enum { + PBUF_TRANSPORT, + PBUF_IP, + PBUF_LINK, + PBUF_RAW +} pbuf_layer; + +typedef enum { + PBUF_RAM, + PBUF_ROM, + PBUF_REF, + PBUF_POOL +} pbuf_flag; + +/* Definitions for the pbuf flag field. These are NOT the flags that + * are passed to pbuf_alloc(). */ +#define PBUF_FLAG_RAM 0x00U /* Flags that pbuf data is stored in RAM */ +#define PBUF_FLAG_ROM 0x01U /* Flags that pbuf data is stored in ROM */ +#define PBUF_FLAG_POOL 0x02U /* Flags that the pbuf comes from the pbuf pool */ +#define PBUF_FLAG_REF 0x04U /* Flags thet the pbuf payload refers to RAM */ + +/** indicates this packet was broadcast on the link */ +#define PBUF_FLAG_LINK_BROADCAST 0x80U + +struct pbuf { + /** next pbuf in singly linked pbuf chain */ + struct pbuf *next; + + /** pointer to the actual data in the buffer */ + void *payload; + + /** + * total length of this buffer and all next buffers in chain + * belonging to the same packet. + * + * For non-queue packet chains this is the invariant: + * p->tot_len == p->len + (p->next? p->next->tot_len: 0) + */ + u16_t tot_len; + + /** length of this buffer */ + u16_t len; + + /** flags telling the type of pbuf, see PBUF_FLAG_ */ + u16_t flags; + + /** + * the reference count always equals the number of pointers + * that refer to this pbuf. This can be pointers from an application, + * the stack itself, or pbuf->next pointers from a chain. + */ + u16_t ref; + +}; + +void pbuf_init(void); + +struct pbuf *pbuf_alloc(pbuf_layer l, u16_t size, pbuf_flag flag); +void pbuf_realloc(struct pbuf *p, u16_t size); +u8_t pbuf_header(struct pbuf *p, s16_t header_size); +void pbuf_ref(struct pbuf *p); +void pbuf_ref_chain(struct pbuf *p); +u8_t pbuf_free(struct pbuf *p); +u8_t pbuf_clen(struct pbuf *p); +void pbuf_cat(struct pbuf *h, struct pbuf *t); +void pbuf_chain(struct pbuf *h, struct pbuf *t); +struct pbuf *pbuf_take(struct pbuf *f); +struct pbuf *pbuf_dechain(struct pbuf *p); +void pbuf_queue(struct pbuf *p, struct pbuf *n); +struct pbuf * pbuf_dequeue(struct pbuf *p); + +#endif /* __LWIP_PBUF_H__ */ diff --git a/wii/libogc/include/lwip/raw.h b/wii/libogc/include/lwip/raw.h new file mode 100644 index 0000000000..6f7a98717f --- /dev/null +++ b/wii/libogc/include/lwip/raw.h @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_RAW_H__ +#define __LWIP_RAW_H__ + +#include "lwip/arch.h" + +#include "lwip/pbuf.h" +#include "lwip/inet.h" +#include "lwip/ip.h" + +struct raw_pcb { +/* Common members of all PCB types */ + IP_PCB; + + struct raw_pcb *next; + + u16_t protocol; + + u8_t (* recv)(void *arg, struct raw_pcb *pcb, struct pbuf *p, + struct ip_addr *addr); + void *recv_arg; +}; + +/* The following functions is the application layer interface to the + RAW code. */ +struct raw_pcb * raw_new (u16_t proto); +void raw_remove (struct raw_pcb *pcb); +err_t raw_bind (struct raw_pcb *pcb, struct ip_addr *ipaddr); +err_t raw_connect (struct raw_pcb *pcb, struct ip_addr *ipaddr); + +void raw_recv (struct raw_pcb *pcb, + u8_t (* recv)(void *arg, struct raw_pcb *pcb, + struct pbuf *p, + struct ip_addr *addr), + void *recv_arg); +err_t raw_sendto (struct raw_pcb *pcb, struct pbuf *p, struct ip_addr *ipaddr); +err_t raw_send (struct raw_pcb *pcb, struct pbuf *p); + +/* The following functions are the lower layer interface to RAW. */ +u8_t raw_input (struct pbuf *p, struct netif *inp); +void raw_init (void); + + +#endif /* __LWIP_RAW_H__ */ diff --git a/wii/libogc/include/lwip/sio.h b/wii/libogc/include/lwip/sio.h new file mode 100644 index 0000000000..8a37aa35ab --- /dev/null +++ b/wii/libogc/include/lwip/sio.h @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + */ + +/* + * This is the interface to the platform specific serial IO module + * It needs to be implemented by those platforms which need SLIP or PPP + */ + +#include "arch/cc.h" + +#ifndef __sio_fd_t_defined +typedef void * sio_fd_t; +#endif + +#ifndef sio_open +sio_fd_t sio_open(u8_t); +#endif + +#ifndef sio_send +void sio_send(u8_t, sio_fd_t); +#endif + +#ifndef sio_recv +u8_t sio_recv(sio_fd_t); +#endif + +#ifndef sio_read +u32_t sio_read(sio_fd_t, u8_t *, u32_t); +#endif + +#ifndef sio_write +u32_t sio_write(sio_fd_t, u8_t *, u32_t); +#endif + +#ifndef sio_read_abort +void sio_read_abort(sio_fd_t); +#endif diff --git a/wii/libogc/include/lwip/snmp.h b/wii/libogc/include/lwip/snmp.h new file mode 100644 index 0000000000..7d160aaa44 --- /dev/null +++ b/wii/libogc/include/lwip/snmp.h @@ -0,0 +1,178 @@ +/* + * Copyright (c) 2001, 2002 Leon Woestenberg + * Copyright (c) 2001, 2002 Axon Digital Design B.V., The Netherlands. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Leon Woestenberg + * + */ +#ifndef __LWIP_SNMP_H__ +#define __LWIP_SNMP_H__ + +#include "lwip/opt.h" + +/* SNMP support available? */ +#if defined(LWIP_SNMP) && (LWIP_SNMP > 0) + +/* network interface */ +void snmp_add_ifinoctets(unsigned long value); +void snmp_inc_ifinucastpkts(void); +void snmp_inc_ifinnucastpkts(void); +void snmp_inc_ifindiscards(void); +void snmp_add_ifoutoctets(unsigned long value); +void snmp_inc_ifoutucastpkts(void); +void snmp_inc_ifoutnucastpkts(void); +void snmp_inc_ifoutdiscards(void); + +/* IP */ +void snmp_inc_ipinreceives(void); +void snmp_inc_ipindelivers(void); +void snmp_inc_ipindiscards(void); +void snmp_inc_ipoutdiscards(void); +void snmp_inc_ipoutrequests(void); +void snmp_inc_ipunknownprotos(void); +void snmp_inc_ipnoroutes(void); +void snmp_inc_ipforwdatagrams(void); + +/* ICMP */ +void snmp_inc_icmpinmsgs(void); +void snmp_inc_icmpinerrors(void); +void snmp_inc_icmpindestunreachs(void); +void snmp_inc_icmpintimeexcds(void); +void snmp_inc_icmpinparmprobs(void); +void snmp_inc_icmpinsrcquenchs(void); +void snmp_inc_icmpinredirects(void); +void snmp_inc_icmpinechos(void); +void snmp_inc_icmpinechoreps(void); +void snmp_inc_icmpintimestamps(void); +void snmp_inc_icmpintimestampreps(void); +void snmp_inc_icmpinaddrmasks(void); +void snmp_inc_icmpinaddrmaskreps(void); +void snmp_inc_icmpoutmsgs(void); +void snmp_inc_icmpouterrors(void); +void snmp_inc_icmpoutdestunreachs(void); +void snmp_inc_icmpouttimeexcds(void); +void snmp_inc_icmpoutparmprobs(void); +void snmp_inc_icmpoutsrcquenchs(void); +void snmp_inc_icmpoutredirects(void); +void snmp_inc_icmpoutechos(void); +void snmp_inc_icmpoutechoreps(void); +void snmp_inc_icmpouttimestamps(void); +void snmp_inc_icmpouttimestampreps(void); +void snmp_inc_icmpoutaddrmasks(void); +void snmp_inc_icmpoutaddrmaskreps(void); + +/* TCP */ +void snmp_inc_tcpactiveopens(void); +void snmp_inc_tcppassiveopens(void); +void snmp_inc_tcpattemptfails(void); +void snmp_inc_tcpestabresets(void); +void snmp_inc_tcpcurrestab(void); +void snmp_inc_tcpinsegs(void); +void snmp_inc_tcpoutsegs(void); +void snmp_inc_tcpretranssegs(void); +void snmp_inc_tcpinerrs(void); +void snmp_inc_tcpoutrsts(void); + +/* UDP */ +void snmp_inc_udpindatagrams(void); +void snmp_inc_udpnoports(void); +void snmp_inc_udpinerrors(void); +void snmp_inc_udpoutdatagrams(void); + +/* LWIP_SNMP support not available */ +/* define everything to be empty */ +#else + +/* network interface */ +#define snmp_add_ifinoctets(value) +#define snmp_inc_ifinucastpkts() +#define snmp_inc_ifinnucastpkts() +#define snmp_inc_ifindiscards() +#define snmp_add_ifoutoctets(value) +#define snmp_inc_ifoutucastpkts() +#define snmp_inc_ifoutnucastpkts() +#define snmp_inc_ifoutdiscards() + +/* IP */ +#define snmp_inc_ipinreceives() +#define snmp_inc_ipindelivers() +#define snmp_inc_ipindiscards() +#define snmp_inc_ipoutdiscards() +#define snmp_inc_ipoutrequests() +#define snmp_inc_ipunknownprotos() +#define snmp_inc_ipnoroutes() +#define snmp_inc_ipforwdatagrams() + +/* ICMP */ +#define snmp_inc_icmpinmsgs() +#define snmp_inc_icmpinerrors() +#define snmp_inc_icmpindestunreachs() +#define snmp_inc_icmpintimeexcds() +#define snmp_inc_icmpinparmprobs() +#define snmp_inc_icmpinsrcquenchs() +#define snmp_inc_icmpinredirects() +#define snmp_inc_icmpinechos() +#define snmp_inc_icmpinechoreps() +#define snmp_inc_icmpintimestamps() +#define snmp_inc_icmpintimestampreps() +#define snmp_inc_icmpinaddrmasks() +#define snmp_inc_icmpinaddrmaskreps() +#define snmp_inc_icmpoutmsgs() +#define snmp_inc_icmpouterrors() +#define snmp_inc_icmpoutdestunreachs() +#define snmp_inc_icmpouttimeexcds() +#define snmp_inc_icmpoutparmprobs() +#define snmp_inc_icmpoutsrcquenchs() +#define snmp_inc_icmpoutredirects() +#define snmp_inc_icmpoutechos() +#define snmp_inc_icmpoutechoreps() +#define snmp_inc_icmpouttimestamps() +#define snmp_inc_icmpouttimestampreps() +#define snmp_inc_icmpoutaddrmasks() +#define snmp_inc_icmpoutaddrmaskreps() +/* TCP */ +#define snmp_inc_tcpactiveopens() +#define snmp_inc_tcppassiveopens() +#define snmp_inc_tcpattemptfails() +#define snmp_inc_tcpestabresets() +#define snmp_inc_tcpcurrestab() +#define snmp_inc_tcpinsegs() +#define snmp_inc_tcpoutsegs() +#define snmp_inc_tcpretranssegs() +#define snmp_inc_tcpinerrs() +#define snmp_inc_tcpoutrsts() + +/* UDP */ +#define snmp_inc_udpindatagrams() +#define snmp_inc_udpnoports() +#define snmp_inc_udpinerrors() +#define snmp_inc_udpoutdatagrams() + +#endif + +#endif /* __LWIP_SNMP_H__ */ diff --git a/wii/libogc/include/lwip/sockets.h b/wii/libogc/include/lwip/sockets.h new file mode 100644 index 0000000000..d5f8ccf74a --- /dev/null +++ b/wii/libogc/include/lwip/sockets.h @@ -0,0 +1,271 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + + +#ifndef __LWIP_SOCKETS_H__ +#define __LWIP_SOCKETS_H__ +#include "lwip/ip_addr.h" + +struct sockaddr_in { + u8_t sin_len; + u8_t sin_family; + u16_t sin_port; + struct in_addr sin_addr; + char sin_zero[8]; +}; + +struct sockaddr { + u8_t sa_len; + u8_t sa_family; + char sa_data[14]; +}; + +#ifndef socklen_t +# define socklen_t int +#endif + + +#define SOCK_STREAM 1 +#define SOCK_DGRAM 2 +#define SOCK_RAW 3 + +/* + * Option flags per-socket. + */ +#define SO_DEBUG 0x0001 /* turn on debugging info recording */ +#define SO_ACCEPTCONN 0x0002 /* socket has had listen() */ +#define SO_REUSEADDR 0x0004 /* allow local address reuse */ +#define SO_KEEPALIVE 0x0008 /* keep connections alive */ +#define SO_DONTROUTE 0x0010 /* just use interface addresses */ +#define SO_BROADCAST 0x0020 /* permit sending of broadcast msgs */ +#define SO_USELOOPBACK 0x0040 /* bypass hardware when possible */ +#define SO_LINGER 0x0080 /* linger on close if data present */ +#define SO_OOBINLINE 0x0100 /* leave received OOB data in line */ +#define SO_REUSEPORT 0x0200 /* allow local address & port reuse */ + +#define SO_DONTLINGER (int)(~SO_LINGER) + +/* + * Additional options, not kept in so_options. + */ +#define SO_SNDBUF 0x1001 /* send buffer size */ +#define SO_RCVBUF 0x1002 /* receive buffer size */ +#define SO_SNDLOWAT 0x1003 /* send low-water mark */ +#define SO_RCVLOWAT 0x1004 /* receive low-water mark */ +#define SO_SNDTIMEO 0x1005 /* send timeout */ +#define SO_RCVTIMEO 0x1006 /* receive timeout */ +#define SO_ERROR 0x1007 /* get error status and clear */ +#define SO_TYPE 0x1008 /* get socket type */ + + + +/* + * Structure used for manipulating linger option. + */ +struct linger { + int l_onoff; /* option on/off */ + int l_linger; /* linger time */ +}; + +/* + * Level number for (get/set)sockopt() to apply to socket itself. + */ +#define SOL_SOCKET 0xfff /* options for socket level */ + + +#define AF_UNSPEC 0 +#define AF_INET 2 +#define PF_INET AF_INET +#define PF_UNSPEC AF_UNSPEC + +#define IPPROTO_IP 0 +#define IPPROTO_TCP 6 +#define IPPROTO_UDP 17 + +#define INADDR_ANY 0 +#define INADDR_BROADCAST 0xffffffff + +/* Flags we can use with send and recv. */ +#define MSG_DONTWAIT 0x40 /* Nonblocking i/o for this operation only */ + + +/* + * Options for level IPPROTO_IP + */ +#define IP_TOS 1 +#define IP_TTL 2 + + +#define IPTOS_TOS_MASK 0x1E +#define IPTOS_TOS(tos) ((tos) & IPTOS_TOS_MASK) +#define IPTOS_LOWDELAY 0x10 +#define IPTOS_THROUGHPUT 0x08 +#define IPTOS_RELIABILITY 0x04 +#define IPTOS_LOWCOST 0x02 +#define IPTOS_MINCOST IPTOS_LOWCOST + +/* + * Definitions for IP precedence (also in ip_tos) (hopefully unused) + */ +#define IPTOS_PREC_MASK 0xe0 +#define IPTOS_PREC(tos) ((tos) & IPTOS_PREC_MASK) +#define IPTOS_PREC_NETCONTROL 0xe0 +#define IPTOS_PREC_INTERNETCONTROL 0xc0 +#define IPTOS_PREC_CRITIC_ECP 0xa0 +#define IPTOS_PREC_FLASHOVERRIDE 0x80 +#define IPTOS_PREC_FLASH 0x60 +#define IPTOS_PREC_IMMEDIATE 0x40 +#define IPTOS_PREC_PRIORITY 0x20 +#define IPTOS_PREC_ROUTINE 0x00 + + +/* + * Commands for ioctlsocket(), taken from the BSD file fcntl.h. + * + * + * Ioctl's have the command encoded in the lower word, + * and the size of any in or out parameters in the upper + * word. The high 2 bits of the upper word are used + * to encode the in/out status of the parameter; for now + * we restrict parameters to at most 128 bytes. + */ +#if !defined(FIONREAD) || !defined(FIONBIO) +#define IOCPARM_MASK 0x7f /* parameters must be < 128 bytes */ +#define IOC_VOID 0x20000000 /* no parameters */ +#define IOC_OUT 0x40000000 /* copy out parameters */ +#define IOC_IN 0x80000000 /* copy in parameters */ +#define IOC_INOUT (IOC_IN|IOC_OUT) + /* 0x20000000 distinguishes new & + old ioctl's */ +#define _IO(x,y) (IOC_VOID|((x)<<8)|(y)) + +#define _IOR(x,y,t) (IOC_OUT|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y)) + +#define _IOW(x,y,t) (IOC_IN|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y)) +#endif + +#ifndef FIONREAD +#define FIONREAD _IOR('f', 127, unsigned long) /* get # bytes to read */ +#endif +#ifndef FIONBIO +#define FIONBIO _IOW('f', 126, unsigned long) /* set/clear non-blocking i/o */ +#endif + +/* Socket I/O Controls */ +#ifndef SIOCSHIWAT +#define SIOCSHIWAT _IOW('s', 0, unsigned long) /* set high watermark */ +#define SIOCGHIWAT _IOR('s', 1, unsigned long) /* get high watermark */ +#define SIOCSLOWAT _IOW('s', 2, unsigned long) /* set low watermark */ +#define SIOCGLOWAT _IOR('s', 3, unsigned long) /* get low watermark */ +#define SIOCATMARK _IOR('s', 7, unsigned long) /* at oob mark? */ +#endif + +#ifndef O_NONBLOCK +#define O_NONBLOCK 04000U +#endif + +#ifndef FD_SET + #undef FD_SETSIZE + #define FD_SETSIZE 16 + #define FD_SET(n, p) ((p)->fd_bits[(n)/8] |= (1 << ((n) & 7))) + #define FD_CLR(n, p) ((p)->fd_bits[(n)/8] &= ~(1 << ((n) & 7))) + #define FD_ISSET(n,p) ((p)->fd_bits[(n)/8] & (1 << ((n) & 7))) + #define FD_ZERO(p) memset((void*)(p),0,sizeof(*(p))) + + typedef struct fd_set { + unsigned char fd_bits [(FD_SETSIZE+7)/8]; + } fd_set; + +/* + * only define this in sockets.c so it does not interfere + * with other projects namespaces where timeval is present + */ +#ifndef LWIP_TIMEVAL_PRIVATE +#define LWIP_TIMEVAL_PRIVATE 1 +#endif + +#if LWIP_TIMEVAL_PRIVATE + struct timeval { + long tv_sec; /* seconds */ + long tv_usec; /* and microseconds */ + }; +#endif + +#endif + +int lwip_accept(int s, struct sockaddr *addr, socklen_t *addrlen); +int lwip_bind(int s, struct sockaddr *name, socklen_t namelen); +int lwip_shutdown(int s, int how); +int lwip_getpeername (int s, struct sockaddr *name, socklen_t *namelen); +int lwip_getsockname (int s, struct sockaddr *name, socklen_t *namelen); +int lwip_getsockopt (int s, int level, int optname, void *optval, socklen_t *optlen); +int lwip_setsockopt (int s, int level, int optname, const void *optval, socklen_t optlen); +int lwip_close(int s); +int lwip_connect(int s, struct sockaddr *name, socklen_t namelen); +int lwip_listen(int s, int backlog); +int lwip_recv(int s, void *mem, int len, unsigned int flags); +int lwip_read(int s, void *mem, int len); +int lwip_recvfrom(int s, void *mem, int len, unsigned int flags, + struct sockaddr *from, socklen_t *fromlen); +int lwip_send(int s, void *dataptr, int size, unsigned int flags); +int lwip_sendto(int s, void *dataptr, int size, unsigned int flags, + struct sockaddr *to, socklen_t tolen); +int lwip_socket(int domain, int type, int protocol); +int lwip_write(int s, void *dataptr, int size); +int lwip_select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset, + struct timeval *timeout); +int lwip_ioctl(int s, long cmd, void *argp); + +#if LWIP_COMPAT_SOCKETS +#define accept(a,b,c) lwip_accept(a,b,c) +#define bind(a,b,c) lwip_bind(a,b,c) +#define shutdown(a,b) lwip_shutdown(a,b) +#define close(s) lwip_close(s) +#define connect(a,b,c) lwip_connect(a,b,c) +#define getsockname(a,b,c) lwip_getsockname(a,b,c) +#define getpeername(a,b,c) lwip_getpeername(a,b,c) +#define setsockopt(a,b,c,d,e) lwip_setsockopt(a,b,c,d,e) +#define getsockopt(a,b,c,d,e) lwip_getsockopt(a,b,c,d,e) +#define listen(a,b) lwip_listen(a,b) +#define recv(a,b,c,d) lwip_recv(a,b,c,d) +#define read(a,b,c) lwip_read(a,b,c) +#define recvfrom(a,b,c,d,e,f) lwip_recvfrom(a,b,c,d,e,f) +#define send(a,b,c,d) lwip_send(a,b,c,d) +#define sendto(a,b,c,d,e,f) lwip_sendto(a,b,c,d,e,f) +#define socket(a,b,c) lwip_socket(a,b,c) +#define write(a,b,c) lwip_write(a,b,c) +#define select(a,b,c,d,e) lwip_select(a,b,c,d,e) +#define ioctlsocket(a,b,c) lwip_ioctl(a,b,c) +#endif /* LWIP_COMPAT_SOCKETS */ + +#endif /* __LWIP_SOCKETS_H__ */ + diff --git a/wii/libogc/include/lwip/stats.h b/wii/libogc/include/lwip/stats.h new file mode 100644 index 0000000000..71acfd068f --- /dev/null +++ b/wii/libogc/include/lwip/stats.h @@ -0,0 +1,158 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_STATS_H__ +#define __LWIP_STATS_H__ + +#include "lwip/opt.h" +#include "arch/cc.h" + +#include "lwip/mem.h" +#include "lwip/memp.h" + +#if LWIP_STATS + +struct stats_proto { + u16_t xmit; /* Transmitted packets. */ + u16_t rexmit; /* Retransmitted packets. */ + u16_t recv; /* Received packets. */ + u16_t fw; /* Forwarded packets. */ + u16_t drop; /* Dropped packets. */ + u16_t chkerr; /* Checksum error. */ + u16_t lenerr; /* Invalid length error. */ + u16_t memerr; /* Out of memory error. */ + u16_t rterr; /* Routing error. */ + u16_t proterr; /* Protocol error. */ + u16_t opterr; /* Error in options. */ + u16_t err; /* Misc error. */ + u16_t cachehit; +}; + +struct stats_mem { + mem_size_t avail; + mem_size_t used; + mem_size_t max; + mem_size_t err; +}; + +struct stats_pbuf { + u16_t avail; + u16_t used; + u16_t max; + u16_t err; + + u16_t alloc_locked; + u16_t refresh_locked; +}; + +struct stats_syselem { + u16_t used; + u16_t max; + u16_t err; +}; + +struct stats_sys { + struct stats_syselem sem; + struct stats_syselem mbox; +}; + +struct stats_ { + struct stats_proto link; + struct stats_proto ip_frag; + struct stats_proto ip; + struct stats_proto icmp; + struct stats_proto udp; + struct stats_proto tcp; + struct stats_pbuf pbuf; + struct stats_mem mem; + struct stats_mem memp[MEMP_MAX]; + struct stats_sys sys; +}; + +extern struct stats_ lwip_stats; + + +void stats_init(void); + +#define STATS_INC(x) ++lwip_stats.x +#else +#define stats_init() +#define STATS_INC(x) +#endif /* LWIP_STATS */ + +#if TCP_STATS +#define TCP_STATS_INC(x) STATS_INC(x) +#else +#define TCP_STATS_INC(x) +#endif + +#if UDP_STATS +#define UDP_STATS_INC(x) STATS_INC(x) +#else +#define UDP_STATS_INC(x) +#endif + +#if ICMP_STATS +#define ICMP_STATS_INC(x) STATS_INC(x) +#else +#define ICMP_STATS_INC(x) +#endif + +#if IP_STATS +#define IP_STATS_INC(x) STATS_INC(x) +#else +#define IP_STATS_INC(x) +#endif + +#if IPFRAG_STATS +#define IPFRAG_STATS_INC(x) STATS_INC(x) +#else +#define IPFRAG_STATS_INC(x) +#endif + +#if LINK_STATS +#define LINK_STATS_INC(x) STATS_INC(x) +#else +#define LINK_STATS_INC(x) +#endif + +/* Display of statistics */ +#if LWIP_STATS_DISPLAY +void stats_display(void); +#else +#define stats_display() +#endif + +#endif /* __LWIP_STATS_H__ */ + + + + diff --git a/wii/libogc/include/lwip/sys.h b/wii/libogc/include/lwip/sys.h new file mode 100644 index 0000000000..ce13484b3e --- /dev/null +++ b/wii/libogc/include/lwip/sys.h @@ -0,0 +1,183 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_SYS_H__ +#define __LWIP_SYS_H__ + +#include "arch/cc.h" + +#include "lwip/opt.h" + + +#if NO_SYS + +/* For a totally minimal and standalone system, we provide null + definitions of the sys_ functions. */ +#include "arch/sys_arch.h" + +struct sys_timeout {u8_t dummy;}; + +#define sys_init() +#define sys_timeout(m,h,a) +#define sys_untimeout(m,a) +#define sys_sem_new(c) c +#define sys_sem_signal(s) +#define sys_sem_wait(s) +#define sys_sem_free(s) +#define sys_mbox_new() 0 +#define sys_mbox_fetch(m,d) +#define sys_mbox_post(m,d) +#define sys_mbox_free(m) + +#define sys_thread_new(t,a,p) + +#else /* NO_SYS */ + +#include "arch/sys_arch.h" + +/** Return code for timeouts from sys_arch_mbox_fetch and sys_arch_sem_wait */ +#define SYS_ARCH_TIMEOUT 0xffffffff + +typedef void (* sys_timeout_handler)(void *arg); + +struct sys_timeout { + struct sys_timeout *next; + u32_t time; + sys_timeout_handler h; + void *arg; +}; + +struct sys_timeouts { + struct sys_timeout *next; +}; + +/* sys_init() must be called before anthing else. */ +void sys_init(void); + +/* + * sys_timeout(): + * + * Schedule a timeout a specified amount of milliseconds in the + * future. When the timeout occurs, the specified timeout handler will + * be called. The handler will be passed the "arg" argument when + * called. + * + */ +void sys_timeout(u32_t msecs, sys_timeout_handler h, void *arg); +void sys_untimeout(sys_timeout_handler h, void *arg); +struct sys_timeouts *sys_arch_timeouts(void); + +/* Semaphore functions. */ +sys_sem_t sys_sem_new(u8_t count); +void sys_sem_signal(sys_sem_t sem); +u32_t sys_arch_sem_wait(sys_sem_t sem, u32_t timeout); +void sys_sem_free(sys_sem_t sem); +void sys_sem_wait(sys_sem_t sem); +int sys_sem_wait_timeout(sys_sem_t sem, u32_t timeout); + +/* Time functions. */ +#ifndef sys_msleep +void sys_msleep(u32_t ms); /* only has a (close to) 1 jiffy resolution. */ +#endif +#ifndef sys_jiffies +u32_t sys_jiffies(void); /* since power up. */ +#endif + +/* Mailbox functions. */ +sys_mbox_t sys_mbox_new(void); +void sys_mbox_post(sys_mbox_t mbox, void *msg); +u32_t sys_arch_mbox_fetch(sys_mbox_t mbox, void **msg, u32_t timeout); +void sys_mbox_free(sys_mbox_t mbox); +void sys_mbox_fetch(sys_mbox_t mbox, void **msg); + + +/* Thread functions. */ +sys_thread_t sys_thread_new(void (* thread)(void *arg), void *arg, int prio); + +/* The following functions are used only in Unix code, and + can be omitted when porting the stack. */ +/* Returns the current time in microseconds. */ +unsigned long sys_now(void); + +#endif /* NO_SYS */ + +/* Critical Region Protection */ +/* These functions must be implemented in the sys_arch.c file. + In some implementations they can provide a more light-weight protection + mechanism than using semaphores. Otherwise semaphores can be used for + implementation */ +#ifndef SYS_ARCH_PROTECT +/** SYS_LIGHTWEIGHT_PROT + * define SYS_LIGHTWEIGHT_PROT in lwipopts.h if you want inter-task protection + * for certain critical regions during buffer allocation, deallocation and memory + * allocation and deallocation. + */ +#if SYS_LIGHTWEIGHT_PROT + +/** SYS_ARCH_DECL_PROTECT + * declare a protection variable. This macro will default to defining a variable of + * type sys_prot_t. If a particular port needs a different implementation, then + * this macro may be defined in sys_arch.h. + */ +#define SYS_ARCH_DECL_PROTECT(lev) sys_prot_t lev +/** SYS_ARCH_PROTECT + * Perform a "fast" protect. This could be implemented by + * disabling interrupts for an embedded system or by using a semaphore or + * mutex. The implementation should allow calling SYS_ARCH_PROTECT when + * already protected. The old protection level is returned in the variable + * "lev". This macro will default to calling the sys_arch_protect() function + * which should be implemented in sys_arch.c. If a particular port needs a + * different implementation, then this macro may be defined in sys_arch.h + */ +#define SYS_ARCH_PROTECT(lev) lev = sys_arch_protect() +/** SYS_ARCH_UNPROTECT + * Perform a "fast" set of the protection level to "lev". This could be + * implemented by setting the interrupt level to "lev" within the MACRO or by + * using a semaphore or mutex. This macro will default to calling the + * sys_arch_unprotect() function which should be implemented in + * sys_arch.c. If a particular port needs a different implementation, then + * this macro may be defined in sys_arch.h + */ +#define SYS_ARCH_UNPROTECT(lev) sys_arch_unprotect(lev) +sys_prot_t sys_arch_protect(void); +void sys_arch_unprotect(sys_prot_t pval); + +#else + +#define SYS_ARCH_DECL_PROTECT(lev) +#define SYS_ARCH_PROTECT(lev) +#define SYS_ARCH_UNPROTECT(lev) + +#endif /* SYS_LIGHTWEIGHT_PROT */ + +#endif /* SYS_ARCH_PROTECT */ + +#endif /* __LWIP_SYS_H__ */ diff --git a/wii/libogc/include/lwip/tcp.h b/wii/libogc/include/lwip/tcp.h new file mode 100644 index 0000000000..1cf0e856d1 --- /dev/null +++ b/wii/libogc/include/lwip/tcp.h @@ -0,0 +1,533 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_TCP_H__ +#define __LWIP_TCP_H__ + +#include "lwip/sys.h" +#include "lwip/mem.h" + +#include "lwip/pbuf.h" +#include "lwip/opt.h" +#include "lwip/ip.h" +#include "lwip/icmp.h" + +#include "lwip/err.h" + +struct tcp_pcb; + +/* Functions for interfacing with TCP: */ + +/* Lower layer interface to TCP: */ +void tcp_init (void); /* Must be called first to + initialize TCP. */ +void tcp_tmr (void); /* Must be called every + TCP_TMR_INTERVAL + ms. (Typically 250 ms). */ +/* Application program's interface: */ +struct tcp_pcb * tcp_new (void); +struct tcp_pcb * tcp_alloc (u8_t prio); + +void tcp_arg (struct tcp_pcb *pcb, void *arg); +void tcp_accept (struct tcp_pcb *pcb, + err_t (* accept)(void *arg, struct tcp_pcb *newpcb, + err_t err)); +void tcp_recv (struct tcp_pcb *pcb, + err_t (* recv)(void *arg, struct tcp_pcb *tpcb, + struct pbuf *p, err_t err)); +void tcp_sent (struct tcp_pcb *pcb, + err_t (* sent)(void *arg, struct tcp_pcb *tpcb, + u16_t len)); +void tcp_poll (struct tcp_pcb *pcb, + err_t (* poll)(void *arg, struct tcp_pcb *tpcb), + u8_t interval); +void tcp_err (struct tcp_pcb *pcb, + void (* err)(void *arg, err_t err)); + +#define tcp_mss(pcb) ((pcb)->mss) +#define tcp_sndbuf(pcb) ((pcb)->snd_buf) + +void tcp_recved (struct tcp_pcb *pcb, u16_t len); +err_t tcp_bind (struct tcp_pcb *pcb, struct ip_addr *ipaddr, + u16_t port); +err_t tcp_connect (struct tcp_pcb *pcb, struct ip_addr *ipaddr, + u16_t port, err_t (* connected)(void *arg, + struct tcp_pcb *tpcb, + err_t err)); +struct tcp_pcb * tcp_listen (struct tcp_pcb *pcb); +void tcp_abort (struct tcp_pcb *pcb); +err_t tcp_close (struct tcp_pcb *pcb); +err_t tcp_write (struct tcp_pcb *pcb, const void *dataptr, u16_t len, + u8_t copy); + +void tcp_setprio (struct tcp_pcb *pcb, u8_t prio); + +#define TCP_PRIO_MIN 1 +#define TCP_PRIO_NORMAL 64 +#define TCP_PRIO_MAX 127 + +/* It is also possible to call these two functions at the right + intervals (instead of calling tcp_tmr()). */ +void tcp_slowtmr (void); +void tcp_fasttmr (void); + + +/* Only used by IP to pass a TCP segment to TCP: */ +void tcp_input (struct pbuf *p, struct netif *inp); +/* Used within the TCP code only: */ +err_t tcp_output (struct tcp_pcb *pcb); +void tcp_rexmit (struct tcp_pcb *pcb); +void tcp_rexmit_rto (struct tcp_pcb *pcb); + + + +#define TCP_SEQ_LT(a,b) ((s32_t)((a)-(b)) < 0) +#define TCP_SEQ_LEQ(a,b) ((s32_t)((a)-(b)) <= 0) +#define TCP_SEQ_GT(a,b) ((s32_t)((a)-(b)) > 0) +#define TCP_SEQ_GEQ(a,b) ((s32_t)((a)-(b)) >= 0) +/* is b<=a<=c? */ +#if 0 /* see bug #10548 */ +#define TCP_SEQ_BETWEEN(a,b,c) ((c)-(b) >= (a)-(b)) +#endif +#define TCP_SEQ_BETWEEN(a,b,c) (TCP_SEQ_GEQ(a,b) && TCP_SEQ_LEQ(a,c)) +#define TCP_FIN 0x01U +#define TCP_SYN 0x02U +#define TCP_RST 0x04U +#define TCP_PSH 0x08U +#define TCP_ACK 0x10U +#define TCP_URG 0x20U +#define TCP_ECE 0x40U +#define TCP_CWR 0x80U + +#define TCP_FLAGS 0x3fU + +/* Length of the TCP header, excluding options. */ +#define TCP_HLEN 20 + +#ifndef TCP_TMR_INTERVAL +#define TCP_TMR_INTERVAL 250 /* The TCP timer interval in + milliseconds. */ +#endif /* TCP_TMR_INTERVAL */ + +#ifndef TCP_FAST_INTERVAL +#define TCP_FAST_INTERVAL TCP_TMR_INTERVAL /* the fine grained timeout in + milliseconds */ +#endif /* TCP_FAST_INTERVAL */ + +#ifndef TCP_SLOW_INTERVAL +#define TCP_SLOW_INTERVAL (2*TCP_TMR_INTERVAL) /* the coarse grained timeout in + milliseconds */ +#endif /* TCP_SLOW_INTERVAL */ + +#define TCP_FIN_WAIT_TIMEOUT 20000 /* milliseconds */ +#define TCP_SYN_RCVD_TIMEOUT 20000 /* milliseconds */ + +#define TCP_OOSEQ_TIMEOUT 6 /* x RTO */ + +#define TCP_MSL 60000 /* The maximum segment lifetime in microseconds */ + +/* + * User-settable options (used with setsockopt). + */ +#define TCP_NODELAY 0x01 /* don't delay send to coalesce packets */ +#define TCP_KEEPALIVE 0x02 /* send KEEPALIVE probes when idle for pcb->keepalive miliseconds */ + +/* Keepalive values */ +#define TCP_KEEPDEFAULT 7200000 /* KEEPALIVE timer in miliseconds */ +#define TCP_KEEPINTVL 75000 /* Time between KEEPALIVE probes in miliseconds */ +#define TCP_KEEPCNT 9 /* Counter for KEEPALIVE probes */ +#define TCP_MAXIDLE TCP_KEEPCNT * TCP_KEEPINTVL /* Maximum KEEPALIVE probe time */ + + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct tcp_hdr { + PACK_STRUCT_FIELD(u16_t src); + PACK_STRUCT_FIELD(u16_t dest); + PACK_STRUCT_FIELD(u32_t seqno); + PACK_STRUCT_FIELD(u32_t ackno); + PACK_STRUCT_FIELD(u16_t _hdrlen_rsvd_flags); + PACK_STRUCT_FIELD(u16_t wnd); + PACK_STRUCT_FIELD(u16_t chksum); + PACK_STRUCT_FIELD(u16_t urgp); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#define TCPH_OFFSET(phdr) (ntohs((phdr)->_hdrlen_rsvd_flags) >> 8) +#define TCPH_HDRLEN(phdr) (ntohs((phdr)->_hdrlen_rsvd_flags) >> 12) +#define TCPH_FLAGS(phdr) (ntohs((phdr)->_hdrlen_rsvd_flags) & TCP_FLAGS) + +#define TCPH_OFFSET_SET(phdr, offset) (phdr)->_hdrlen_rsvd_flags = htons(((offset) << 8) | TCPH_FLAGS(phdr)) +#define TCPH_HDRLEN_SET(phdr, len) (phdr)->_hdrlen_rsvd_flags = htons(((len) << 12) | TCPH_FLAGS(phdr)) +#define TCPH_FLAGS_SET(phdr, flags) (phdr)->_hdrlen_rsvd_flags = htons((ntohs((phdr)->_hdrlen_rsvd_flags) & ~TCP_FLAGS) | (flags)) +#define TCPH_SET_FLAG(phdr, flags ) (phdr)->_hdrlen_rsvd_flags = htons(ntohs((phdr)->_hdrlen_rsvd_flags) | (flags)) +#define TCPH_UNSET_FLAG(phdr, flags) (phdr)->_hdrlen_rsvd_flags = htons(ntohs((phdr)->_hdrlen_rsvd_flags) | (TCPH_FLAGS(phdr) & ~(flags)) ) + +#define TCP_TCPLEN(seg) ((seg)->len + ((TCPH_FLAGS((seg)->tcphdr) & TCP_FIN || \ + TCPH_FLAGS((seg)->tcphdr) & TCP_SYN)? 1: 0)) + +enum tcp_state { + CLOSED = 0, + LISTEN = 1, + SYN_SENT = 2, + SYN_RCVD = 3, + ESTABLISHED = 4, + FIN_WAIT_1 = 5, + FIN_WAIT_2 = 6, + CLOSE_WAIT = 7, + CLOSING = 8, + LAST_ACK = 9, + TIME_WAIT = 10 +}; + +/* the TCP protocol control block */ +struct tcp_pcb { +/** common PCB members */ + IP_PCB; +/** protocol specific PCB members */ + struct tcp_pcb *next; /* for the linked list */ + enum tcp_state state; /* TCP state */ + u8_t prio; + void *callback_arg; + + u16_t local_port; + u16_t remote_port; + + u8_t flags; +#define TF_ACK_DELAY (u8_t)0x01U /* Delayed ACK. */ +#define TF_ACK_NOW (u8_t)0x02U /* Immediate ACK. */ +#define TF_INFR (u8_t)0x04U /* In fast recovery. */ +#define TF_RESET (u8_t)0x08U /* Connection was reset. */ +#define TF_CLOSED (u8_t)0x10U /* Connection was sucessfully closed. */ +#define TF_GOT_FIN (u8_t)0x20U /* Connection was closed by the remote end. */ +#define TF_NODELAY (u8_t)0x40U /* Disable Nagle algorithm */ + + /* receiver variables */ + u32_t rcv_nxt; /* next seqno expected */ + u16_t rcv_wnd; /* receiver window */ + + /* Timers */ + u32_t tmr; + u8_t polltmr, pollinterval; + + /* Retransmission timer. */ + u16_t rtime; + + u16_t mss; /* maximum segment size */ + + /* RTT (round trip time) estimation variables */ + u32_t rttest; /* RTT estimate in 500ms ticks */ + u32_t rtseq; /* sequence number being timed */ + s16_t sa, sv; /* @todo document this */ + + u16_t rto; /* retransmission time-out */ + u8_t nrtx; /* number of retransmissions */ + + /* fast retransmit/recovery */ + u32_t lastack; /* Highest acknowledged seqno. */ + u8_t dupacks; + + /* congestion avoidance/control variables */ + u16_t cwnd; + u16_t ssthresh; + + /* sender variables */ + u32_t snd_nxt, /* next seqno to be sent */ + snd_max, /* Highest seqno sent. */ + snd_wnd, /* sender window */ + snd_wl1, snd_wl2, /* Sequence and acknowledgement numbers of last + window update. */ + snd_lbb; /* Sequence number of next byte to be buffered. */ + + u16_t acked; + + u16_t snd_buf; /* Available buffer space for sending (in bytes). */ + u16_t snd_queuelen; /* Available buffer space for sending (in tcp_segs). */ + + + /* These are ordered by sequence number: */ + struct tcp_seg *unsent; /* Unsent (queued) segments. */ + struct tcp_seg *unacked; /* Sent but unacknowledged segments. */ +#if TCP_QUEUE_OOSEQ + struct tcp_seg *ooseq; /* Received out of sequence segments. */ +#endif /* TCP_QUEUE_OOSEQ */ + +#if LWIP_CALLBACK_API + /* Function to be called when more send buffer space is available. */ + err_t (* sent)(void *arg, struct tcp_pcb *pcb, u16_t space); + + /* Function to be called when (in-sequence) data has arrived. */ + err_t (* recv)(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err); + + /* Function to be called when a connection has been set up. */ + err_t (* connected)(void *arg, struct tcp_pcb *pcb, err_t err); + + /* Function to call when a listener has been connected. */ + err_t (* accept)(void *arg, struct tcp_pcb *newpcb, err_t err); + + /* Function which is called periodically. */ + err_t (* poll)(void *arg, struct tcp_pcb *pcb); + + /* Function to be called whenever a fatal error occurs. */ + void (* errf)(void *arg, err_t err); +#endif /* LWIP_CALLBACK_API */ + + /* idle time before KEEPALIVE is sent */ + u32_t keepalive; + + /* KEEPALIVE counter */ + u8_t keep_cnt; +}; + +struct tcp_pcb_listen { +/* Common members of all PCB types */ + IP_PCB; + +/* Protocol specific PCB members */ + struct tcp_pcb_listen *next; /* for the linked list */ + + /* Even if state is obviously LISTEN this is here for + * field compatibility with tpc_pcb to which it is cast sometimes + * Until a cleaner solution emerges this is here.FIXME + */ + enum tcp_state state; /* TCP state */ + + u8_t prio; + void *callback_arg; + + u16_t local_port; + +#if LWIP_CALLBACK_API + /* Function to call when a listener has been connected. */ + err_t (* accept)(void *arg, struct tcp_pcb *newpcb, err_t err); +#endif /* LWIP_CALLBACK_API */ +}; + +#if LWIP_EVENT_API + +enum lwip_event { + LWIP_EVENT_ACCEPT, + LWIP_EVENT_SENT, + LWIP_EVENT_RECV, + LWIP_EVENT_CONNECTED, + LWIP_EVENT_POLL, + LWIP_EVENT_ERR +}; + +err_t lwip_tcp_event(void *arg, struct tcp_pcb *pcb, + enum lwip_event, + struct pbuf *p, + u16_t size, + err_t err); + +#define TCP_EVENT_ACCEPT(pcb,err,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\ + LWIP_EVENT_ACCEPT, NULL, 0, err) +#define TCP_EVENT_SENT(pcb,space,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\ + LWIP_EVENT_SENT, NULL, space, ERR_OK) +#define TCP_EVENT_RECV(pcb,p,err,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\ + LWIP_EVENT_RECV, (p), 0, (err)) +#define TCP_EVENT_CONNECTED(pcb,err,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\ + LWIP_EVENT_CONNECTED, NULL, 0, (err)) +#define TCP_EVENT_POLL(pcb,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\ + LWIP_EVENT_POLL, NULL, 0, ERR_OK) +#define TCP_EVENT_ERR(errf,arg,err) lwip_tcp_event((arg), NULL, \ + LWIP_EVENT_ERR, NULL, 0, (err)) +#else /* LWIP_EVENT_API */ +#define TCP_EVENT_ACCEPT(pcb,err,ret) \ + if((pcb)->accept != NULL) \ + (ret = (pcb)->accept((pcb)->callback_arg,(pcb),(err))) +#define TCP_EVENT_SENT(pcb,space,ret) \ + if((pcb)->sent != NULL) \ + (ret = (pcb)->sent((pcb)->callback_arg,(pcb),(space))) +#define TCP_EVENT_RECV(pcb,p,err,ret) \ + if((pcb)->recv != NULL) \ + { ret = (pcb)->recv((pcb)->callback_arg,(pcb),(p),(err)); } else { \ + if (p) pbuf_free(p); } +#define TCP_EVENT_CONNECTED(pcb,err,ret) \ + if((pcb)->connected != NULL) \ + (ret = (pcb)->connected((pcb)->callback_arg,(pcb),(err))) +#define TCP_EVENT_POLL(pcb,ret) \ + if((pcb)->poll != NULL) \ + (ret = (pcb)->poll((pcb)->callback_arg,(pcb))) +#define TCP_EVENT_ERR(errf,arg,err) \ + if((errf) != NULL) \ + (errf)((arg),(err)) +#endif /* LWIP_EVENT_API */ + +/* This structure represents a TCP segment on the unsent and unacked queues */ +struct tcp_seg { + struct tcp_seg *next; /* used when putting segements on a queue */ + struct pbuf *p; /* buffer containing data + TCP header */ + void *dataptr; /* pointer to the TCP data in the pbuf */ + u16_t len; /* the TCP length of this segment */ + struct tcp_hdr *tcphdr; /* the TCP header */ +}; + +/* Internal functions and global variables: */ +struct tcp_pcb *tcp_pcb_copy(struct tcp_pcb *pcb); +void tcp_pcb_purge(struct tcp_pcb *pcb); +void tcp_pcb_remove(struct tcp_pcb **pcblist, struct tcp_pcb *pcb); + +u8_t tcp_segs_free(struct tcp_seg *seg); +u8_t tcp_seg_free(struct tcp_seg *seg); +struct tcp_seg *tcp_seg_copy(struct tcp_seg *seg); + +#define tcp_ack(pcb) if((pcb)->flags & TF_ACK_DELAY) { \ + (pcb)->flags &= ~TF_ACK_DELAY; \ + (pcb)->flags |= TF_ACK_NOW; \ + tcp_output(pcb); \ + } else { \ + (pcb)->flags |= TF_ACK_DELAY; \ + } + +#define tcp_ack_now(pcb) (pcb)->flags |= TF_ACK_NOW; \ + tcp_output(pcb) + +err_t tcp_send_ctrl(struct tcp_pcb *pcb, u8_t flags); +err_t tcp_enqueue(struct tcp_pcb *pcb, void *dataptr, u16_t len, + u8_t flags, u8_t copy, + u8_t *optdata, u8_t optlen); + +void tcp_rexmit_seg(struct tcp_pcb *pcb, struct tcp_seg *seg); + +void tcp_rst(u32_t seqno, u32_t ackno, + struct ip_addr *local_ip, struct ip_addr *remote_ip, + u16_t local_port, u16_t remote_port); + +u32_t tcp_next_iss(void); + +void tcp_keepalive(struct tcp_pcb *pcb); + +extern struct tcp_pcb *tcp_input_pcb; +extern u32_t tcp_ticks; + +#if TCP_DEBUG || TCP_INPUT_DEBUG || TCP_OUTPUT_DEBUG +void tcp_debug_print(struct tcp_hdr *tcphdr); +void tcp_debug_print_flags(u8_t flags); +void tcp_debug_print_state(enum tcp_state s); +void tcp_debug_print_pcbs(void); +s16_t tcp_pcbs_sane(void); +#else +# define tcp_debug_print(tcphdr) +# define tcp_debug_print_flags(flags) +# define tcp_debug_print_state(s) +# define tcp_debug_print_pcbs() +# define tcp_pcbs_sane() 1 +#endif /* TCP_DEBUG */ +/* +#if NO_SYS +#define tcp_timer_needed() +#else +void tcp_timer_needed(void); +#endif +*/ +void tcp_timer_needed(void); + +/* The TCP PCB lists. */ +union tcp_listen_pcbs_t { /* List of all TCP PCBs in LISTEN state. */ + struct tcp_pcb_listen *listen_pcbs; + struct tcp_pcb *pcbs; +}; +extern union tcp_listen_pcbs_t tcp_listen_pcbs; +extern struct tcp_pcb *tcp_active_pcbs; /* List of all TCP PCBs that are in a + state in which they accept or send + data. */ +extern struct tcp_pcb *tcp_tw_pcbs; /* List of all TCP PCBs in TIME-WAIT. */ + +extern struct tcp_pcb *tcp_tmp_pcb; /* Only used for temporary storage. */ + +/* Axioms about the above lists: + 1) Every TCP PCB that is not CLOSED is in one of the lists. + 2) A PCB is only in one of the lists. + 3) All PCBs in the tcp_listen_pcbs list is in LISTEN state. + 4) All PCBs in the tcp_tw_pcbs list is in TIME-WAIT state. +*/ + +/* Define two macros, TCP_REG and TCP_RMV that registers a TCP PCB + with a PCB list or removes a PCB from a list, respectively. */ +#if 0 +#define TCP_REG(pcbs, npcb) do {\ + LWIP_DEBUGF(TCP_DEBUG, ("TCP_REG %p local port %d\n", npcb, npcb->local_port)); \ + for(tcp_tmp_pcb = *pcbs; \ + tcp_tmp_pcb != NULL; \ + tcp_tmp_pcb = tcp_tmp_pcb->next) { \ + LWIP_ASSERT("TCP_REG: already registered\n", tcp_tmp_pcb != npcb); \ + } \ + LWIP_ASSERT("TCP_REG: pcb->state != CLOSED", npcb->state != CLOSED); \ + npcb->next = *pcbs; \ + LWIP_ASSERT("TCP_REG: npcb->next != npcb", npcb->next != npcb); \ + *(pcbs) = npcb; \ + LWIP_ASSERT("TCP_RMV: tcp_pcbs sane", tcp_pcbs_sane()); \ + tcp_timer_needed(); \ + } while(0) +#define TCP_RMV(pcbs, npcb) do { \ + LWIP_ASSERT("TCP_RMV: pcbs != NULL", *pcbs != NULL); \ + LWIP_DEBUGF(TCP_DEBUG, ("TCP_RMV: removing %p from %p\n", npcb, *pcbs)); \ + if(*pcbs == npcb) { \ + *pcbs = (*pcbs)->next; \ + } else for(tcp_tmp_pcb = *pcbs; tcp_tmp_pcb != NULL; tcp_tmp_pcb = tcp_tmp_pcb->next) { \ + if(tcp_tmp_pcb->next != NULL && tcp_tmp_pcb->next == npcb) { \ + tcp_tmp_pcb->next = npcb->next; \ + break; \ + } \ + } \ + npcb->next = NULL; \ + LWIP_ASSERT("TCP_RMV: tcp_pcbs sane", tcp_pcbs_sane()); \ + LWIP_DEBUGF(TCP_DEBUG, ("TCP_RMV: removed %p from %p\n", npcb, *pcbs)); \ + } while(0) + +#else /* LWIP_DEBUG */ +#define TCP_REG(pcbs, npcb) do { \ + npcb->next = *pcbs; \ + *(pcbs) = npcb; \ + tcp_timer_needed(); \ + } while(0) +#define TCP_RMV(pcbs, npcb) do { \ + if(*(pcbs) == npcb) { \ + (*(pcbs)) = (*pcbs)->next; \ + } else for(tcp_tmp_pcb = *pcbs; tcp_tmp_pcb != NULL; tcp_tmp_pcb = tcp_tmp_pcb->next) { \ + if(tcp_tmp_pcb->next != NULL && tcp_tmp_pcb->next == npcb) { \ + tcp_tmp_pcb->next = npcb->next; \ + break; \ + } \ + } \ + npcb->next = NULL; \ + } while(0) +#endif /* LWIP_DEBUG */ +#endif /* __LWIP_TCP_H__ */ + + + diff --git a/wii/libogc/include/lwip/tcpip.h b/wii/libogc/include/lwip/tcpip.h new file mode 100644 index 0000000000..6945084cd9 --- /dev/null +++ b/wii/libogc/include/lwip/tcpip.h @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_TCPIP_H__ +#define __LWIP_TCPIP_H__ + +#include "lwip/api_msg.h" +#include "lwip/pbuf.h" + +enum netmsq_type { + NETMSG_API, + NETMSG_INPUT, + NETMSG_CALLBACK +}; + +struct net_msg { + enum netmsq_type type; + union { + struct api_msg *apimsg; + struct { + struct pbuf *p; + struct netif *net; + } inp; + struct { + void (*f)(void *); + void *ctx; + } cb; + } msg; +}; + +#endif /* __LWIP_TCPIP_H__ */ diff --git a/wii/libogc/include/lwip/udp.h b/wii/libogc/include/lwip/udp.h new file mode 100644 index 0000000000..ede04745f9 --- /dev/null +++ b/wii/libogc/include/lwip/udp.h @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_UDP_H__ +#define __LWIP_UDP_H__ + +#include "lwip/arch.h" + +#include "lwip/pbuf.h" +#include "lwip/inet.h" +#include "lwip/ip.h" + +#define UDP_HLEN 8 + +struct udp_hdr { + PACK_STRUCT_FIELD(u16_t src); + PACK_STRUCT_FIELD(u16_t dest); /* src/dest UDP ports */ + PACK_STRUCT_FIELD(u16_t len); + PACK_STRUCT_FIELD(u16_t chksum); +} PACK_STRUCT_STRUCT; + +#define UDP_FLAGS_NOCHKSUM 0x01U +#define UDP_FLAGS_UDPLITE 0x02U +#define UDP_FLAGS_CONNECTED 0x04U + +struct udp_pcb { +/* Common members of all PCB types */ + IP_PCB; + +/* Protocol specific PCB members */ + + struct udp_pcb *next; + + u8_t flags; + u16_t local_port, remote_port; + + u16_t chksum_len; + + void (* recv)(void *arg, struct udp_pcb *pcb, struct pbuf *p, + struct ip_addr *addr, u16_t port); + void *recv_arg; +}; + +/* The following functions is the application layer interface to the + UDP code. */ +struct udp_pcb * udp_new (void); +void udp_remove (struct udp_pcb *pcb); +err_t udp_bind (struct udp_pcb *pcb, struct ip_addr *ipaddr, + u16_t port); +err_t udp_connect (struct udp_pcb *pcb, struct ip_addr *ipaddr, + u16_t port); +void udp_disconnect (struct udp_pcb *pcb); +void udp_recv (struct udp_pcb *pcb, + void (* recv)(void *arg, struct udp_pcb *upcb, + struct pbuf *p, + struct ip_addr *addr, + u16_t port), + void *recv_arg); +err_t udp_sendto (struct udp_pcb *pcb, struct pbuf *p, struct ip_addr *dst_ip, u16_t dst_port); +err_t udp_send (struct udp_pcb *pcb, struct pbuf *p); + +#define udp_flags(pcb) ((pcb)->flags) +#define udp_setflags(pcb, f) ((pcb)->flags = (f)) + +/* The following functions are the lower layer interface to UDP. */ +void udp_input (struct pbuf *p, struct netif *inp); +void udp_init (void); + +#if UDP_DEBUG +void udp_debug_print(struct udp_hdr *udphdr); +#else +#define udp_debug_print(udphdr) +#endif +#endif /* __LWIP_UDP_H__ */ + + diff --git a/wii/libogc/include/netif/arch/cc.h b/wii/libogc/include/netif/arch/cc.h new file mode 100644 index 0000000000..df9aef57b0 --- /dev/null +++ b/wii/libogc/include/netif/arch/cc.h @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2001, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __ARCH_CC_H__ +#define __ARCH_CC_H__ + +#include +#include +#include +#include "asm.h" +#include "processor.h" + +typedef u8 u8_t; +typedef s8 s8_t; +typedef u16 u16_t; +typedef s16 s16_t; +typedef u32 u32_t; +typedef s32 s32_t; +typedef u32 mem_ptr_t; + + +#define PACK_STRUCT_FIELD(x) x +#define PACK_STRUCT_STRUCT __attribute__((packed)) +#define PACK_STRUCT_BEGIN +#define PACK_STRUCT_END + +#define LWIP_PLATFORM_ASSERT(x) { printf(x); while (1); } +#define LWIP_PLATFORM_DIAG(x) printf x + +#define SYS_ARCH_DECL_PROTECT(lev) u32 lev +#define SYS_ARCH_PROTECT(lev) _CPU_ISR_Disable(lev) +#define SYS_ARCH_UNPROTECT(lev) _CPU_ISR_Restore(lev) + +/* Define (sn)printf formatters for these lwIP types */ +#define U16_F "hu" +#define S16_F "hd" +#define X16_F "hx" +#define U32_F "u" +#define S32_F "d" +#define X32_F "x" + + +#endif /* __ARCH_CC_H__ */ diff --git a/wii/libogc/include/netif/arch/cpu.h b/wii/libogc/include/netif/arch/cpu.h new file mode 100644 index 0000000000..b4cc1b19a6 --- /dev/null +++ b/wii/libogc/include/netif/arch/cpu.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2001, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __CPU_H__ +#define __CPU_H__ + +#define BYTE_ORDER BIG_ENDIAN + +#endif /* __CPU_H__ */ diff --git a/wii/libogc/include/netif/arch/init.h b/wii/libogc/include/netif/arch/init.h new file mode 100644 index 0000000000..7070029265 --- /dev/null +++ b/wii/libogc/include/netif/arch/init.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2001, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __ARCH_INIT_H__ +#define __ARCH_INIT_H__ + +#define TCPIP_INIT_DONE(arg) tcpip_init_done(arg) + +void tcpip_init_done(void *); +int wait_for_tcpip_init(void); + +#endif /* __ARCH_INIT_H__ */ + + + + diff --git a/wii/libogc/include/netif/arch/lib.h b/wii/libogc/include/netif/arch/lib.h new file mode 100644 index 0000000000..ea5e6d864e --- /dev/null +++ b/wii/libogc/include/netif/arch/lib.h @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2001, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LIB_H__ +#define __LIB_H__ + +#include + +#define bcopy(s, d, l) memcpy(d, s, l) +#define bzero(d, l) memset(d, 0, l) + +#endif /* __LIB_H__ */ diff --git a/wii/libogc/include/netif/arch/perf.h b/wii/libogc/include/netif/arch/perf.h new file mode 100644 index 0000000000..089facac1d --- /dev/null +++ b/wii/libogc/include/netif/arch/perf.h @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2001, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __PERF_H__ +#define __PERF_H__ + +#define PERF_START /* null definition */ +#define PERF_STOP(x) /* null definition */ + +#endif /* __PERF_H__ */ diff --git a/wii/libogc/include/netif/arch/sys_arch.h b/wii/libogc/include/netif/arch/sys_arch.h new file mode 100644 index 0000000000..c19e57326e --- /dev/null +++ b/wii/libogc/include/netif/arch/sys_arch.h @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2001, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __SYS_GC_H__ +#define __SYS_GC_H__ + +#include +#include +#include +#include +#include + +#define SYS_MBOX_NULL MQ_BOX_NULL +#define SYS_SEM_NULL LWP_SEM_NULL + +typedef sem_t sys_sem; +typedef sem_t *sys_sem_t; + +typedef mqbox_t sys_mbox; +typedef mqbox_t *sys_mbox_t; + +typedef lwp_t sys_thread; +typedef lwp_t* sys_thread_t; + +#endif /* __SYS_C64_H__ */ diff --git a/wii/libogc/include/netif/etharp.h b/wii/libogc/include/netif/etharp.h new file mode 100644 index 0000000000..08437afe54 --- /dev/null +++ b/wii/libogc/include/netif/etharp.h @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * Copyright (c) 2003-2004 Leon Woestenberg + * Copyright (c) 2003-2004 Axon Digital Design B.V., The Netherlands. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#ifndef __NETIF_ETHARP_H__ +#define __NETIF_ETHARP_H__ + +#ifndef ETH_PAD_SIZE +#define ETH_PAD_SIZE 0 +#endif + +#include "lwip/pbuf.h" +#include "lwip/ip_addr.h" +#include "lwip/netif.h" +#include "lwip/ip.h" + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct eth_addr { + PACK_STRUCT_FIELD(u8_t addr[6]); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct eth_hdr { +#if ETH_PAD_SIZE + PACK_STRUCT_FIELD(u8_t padding[ETH_PAD_SIZE]); +#endif + PACK_STRUCT_FIELD(struct eth_addr dest); + PACK_STRUCT_FIELD(struct eth_addr src); + PACK_STRUCT_FIELD(u16_t type); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +/** the ARP message */ +struct etharp_hdr { + PACK_STRUCT_FIELD(struct eth_hdr ethhdr); + PACK_STRUCT_FIELD(u16_t hwtype); + PACK_STRUCT_FIELD(u16_t proto); + PACK_STRUCT_FIELD(u16_t _hwlen_protolen); + PACK_STRUCT_FIELD(u16_t opcode); + PACK_STRUCT_FIELD(struct eth_addr shwaddr); + PACK_STRUCT_FIELD(struct ip_addr2 sipaddr); + PACK_STRUCT_FIELD(struct eth_addr dhwaddr); + PACK_STRUCT_FIELD(struct ip_addr2 dipaddr); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct ethip_hdr { + PACK_STRUCT_FIELD(struct eth_hdr eth); + PACK_STRUCT_FIELD(struct ip_hdr ip); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +/** 5 seconds period */ +#define ARP_TMR_INTERVAL 5000 + +#define ETHTYPE_ARP 0x0806 +#define ETHTYPE_IP 0x0800 + +void etharp_init(void); +void etharp_tmr(void); +void etharp_ip_input(struct netif *netif, struct pbuf *p); +void etharp_arp_input(struct netif *netif, struct eth_addr *ethaddr, + struct pbuf *p); +err_t etharp_output(struct netif *netif, struct ip_addr *ipaddr, + struct pbuf *q); +err_t etharp_query(struct netif *netif, struct ip_addr *ipaddr, struct pbuf *q); +err_t etharp_request(struct netif *netif, struct ip_addr *ipaddr); + +#endif /* __NETIF_ARP_H__ */ diff --git a/wii/libogc/include/netif/gcif/gcif.h b/wii/libogc/include/netif/gcif/gcif.h new file mode 100644 index 0000000000..98e2abcb69 --- /dev/null +++ b/wii/libogc/include/netif/gcif/gcif.h @@ -0,0 +1,45 @@ +#ifndef __GCIF_H__ +#define __GCIF_H__ + +#include + +#define ERR_NODATA -12 +#define ERR_ALLREAD -13 +#define ERR_TXERROR -14 +#define ERR_RXERROR -14 +#define ERR_NODEV -16 +#define ERR_PKTSIZE -17 +#define ERR_TXPENDING -18 + +#define cpu_to_be16(x) (x) +#define cpu_to_be32(x) (x) +static inline u16 cpu_to_le16(u16 x) { return (x<<8) | (x>>8);} +static inline u32 cpu_to_le32(u32 x) { return((x>>24) | ((x>>8)&0xff00) | ((x<<8)&0xff0000) | (x<<24));} + +#define cpu_to_le16p(addr) (cpu_to_le16(*(addr))) +#define cpu_to_le32p(addr) (cpu_to_le32(*(addr))) +#define cpu_to_be16p(addr) (cpu_to_be16(*(addr))) +#define cpu_to_be32p(addr) (cpu_to_be32(*(addr))) + +static inline void cpu_to_le16s(u16 *a) {*a = cpu_to_le16(*a);} +static inline void cpu_to_le32s(u32 *a) {*a = cpu_to_le32(*a);} +static inline void cpu_to_be16s(u16 *a) {*a = cpu_to_be16(*a);} +static inline void cpu_to_be32s(u32 *a) {*a = cpu_to_be32(*a);} + +#define le16_to_cpup(x) cpu_to_le16p(x) +#define le32_to_cpup(x) cpu_to_le32p(x) +#define be16_to_cpup(x) cpu_to_be16p(x) +#define be32_to_cpup(x) cpu_to_be32p(x) + +#define le16_to_cpus(x) cpu_to_le16s(x) +#define le32_to_cpus(x) cpu_to_le32s(x) +#define be16_to_cpus(x) cpu_to_be16s(x) +#define be32_to_cpus(x) cpu_to_be32s(x) + +typedef void* dev_s; + +dev_s bba_create(struct netif *); +err_t bba_init(struct netif *); +void bba_process(struct pbuf *p,struct netif *dev); + +#endif diff --git a/wii/libogc/include/netif/loopif.h b/wii/libogc/include/netif/loopif.h new file mode 100644 index 0000000000..97b3c67645 --- /dev/null +++ b/wii/libogc/include/netif/loopif.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __NETIF_LOOPIF_H__ +#define __NETIF_LOOPIF_H__ + +#include "lwip/netif.h" + +err_t loopif_init(struct netif *netif); + +#endif /* __NETIF_LOOPIF_H__ */ diff --git a/wii/libogc/include/sdcard/card_buf.h b/wii/libogc/include/sdcard/card_buf.h index 0590f2e176..376358231f 100644 --- a/wii/libogc/include/sdcard/card_buf.h +++ b/wii/libogc/include/sdcard/card_buf.h @@ -1,18 +1,18 @@ -#ifndef __CARD_BUF_H__ -#define __CARD_BUF_H__ - -#include - -#ifdef __cplusplus - extern "C" { -#endif - -void sdgecko_initBufferPool(); -u8* sdgecko_allocBuffer(); -void sdgecko_freeBuffer(u8 *buf); - -#ifdef __cplusplus - } -#endif - -#endif +#ifndef __CARD_BUF_H__ +#define __CARD_BUF_H__ + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +void sdgecko_initBufferPool(); +u8* sdgecko_allocBuffer(); +void sdgecko_freeBuffer(u8 *buf); + +#ifdef __cplusplus + } +#endif + +#endif diff --git a/wii/libogc/include/sdcard/card_cmn.h b/wii/libogc/include/sdcard/card_cmn.h index e35cece8a1..bc189ee041 100644 --- a/wii/libogc/include/sdcard/card_cmn.h +++ b/wii/libogc/include/sdcard/card_cmn.h @@ -1,65 +1,65 @@ -#ifndef __CARD_CMN_H__ -#define __CARD_CMN_H__ - -#include - -#define CARDIO_ERROR_READY 0 -#define CARDIO_ERROR_BUSY -1 -#define CARDIO_ERROR_WRONGDEVICE -2 -#define CARDIO_ERROR_NOCARD -3 -#define CARDIO_ERROR_IDLE -4 -#define CARDIO_ERROR_IOERROR -5 -#define CARDIO_ERROR_IOTIMEOUT -6 - -#define CARDIO_ERROR_NOTPERMITTED -107 -#define CARDIO_ERROR_ROOTENTRY -108 -#define CARDIO_ERROR_OUTOFROOTENTRY -109 -#define CARDIO_ERROR_FILEEXIST -110 -#define CARDIO_ERROR_NOEMPTYCLUSTER -111 -#define CARDIO_ERROR_EOF -112 -#define CARDIO_ERROR_SYSTEMPARAM -113 -#define CARDIO_ERROR_FILEOPENED -114 -#define CARDIO_ERROR_FILENOTOPENED -115 -#define CARDIO_ERROR_FILENAMETOOLONG -116 -#define CARDIO_ERROR_INVALIDNAME -117 -#define CARDIO_ERROR_NOLONGNAME -118 -#define CARDIO_ERROR_INCORRECTFAT -119 -#define CARDIO_ERROR_NOTFOUND -120 -#define CARDIO_ERROR_OUTOFMEMORY -121 -#define CARDIO_ERROR_INVALIDFAT -122 -#define CARDIO_ERROR_INVALIDMBR -123 -#define CARDIO_ERROR_INVALIDPBR -124 -#define CARDIO_ERROR_NOEMPTYBLOCK -125 -#define CARDIO_ERROR_INTERNAL -126 -#define CARDIO_ERROR_INVALIDPARAM -127 -#define CARDIO_ERROR_FATALERROR -128 - -#define MAX_DRIVE 2 -#define SECTOR_SIZE 512 - -#define NOT_INITIALIZED 0 -#define INITIALIZING 1 -#define INITIALIZED 2 - -#ifdef __cplusplus - extern "C" { -#endif /* __cplusplus */ - -typedef struct _dev_info { - u32 CpV; - u32 HpC; - u32 SpH; - u32 allS; - u32 szS; - u32 PBpV; - u32 LBpV; - u32 SpB; - u32 PpB; - u32 szP; -} DEV_INFO; - -#ifdef __cplusplus - } -#endif /* __cplusplus */ - -#endif +#ifndef __CARD_CMN_H__ +#define __CARD_CMN_H__ + +#include + +#define CARDIO_ERROR_READY 0 +#define CARDIO_ERROR_BUSY -1 +#define CARDIO_ERROR_WRONGDEVICE -2 +#define CARDIO_ERROR_NOCARD -3 +#define CARDIO_ERROR_IDLE -4 +#define CARDIO_ERROR_IOERROR -5 +#define CARDIO_ERROR_IOTIMEOUT -6 + +#define CARDIO_ERROR_NOTPERMITTED -107 +#define CARDIO_ERROR_ROOTENTRY -108 +#define CARDIO_ERROR_OUTOFROOTENTRY -109 +#define CARDIO_ERROR_FILEEXIST -110 +#define CARDIO_ERROR_NOEMPTYCLUSTER -111 +#define CARDIO_ERROR_EOF -112 +#define CARDIO_ERROR_SYSTEMPARAM -113 +#define CARDIO_ERROR_FILEOPENED -114 +#define CARDIO_ERROR_FILENOTOPENED -115 +#define CARDIO_ERROR_FILENAMETOOLONG -116 +#define CARDIO_ERROR_INVALIDNAME -117 +#define CARDIO_ERROR_NOLONGNAME -118 +#define CARDIO_ERROR_INCORRECTFAT -119 +#define CARDIO_ERROR_NOTFOUND -120 +#define CARDIO_ERROR_OUTOFMEMORY -121 +#define CARDIO_ERROR_INVALIDFAT -122 +#define CARDIO_ERROR_INVALIDMBR -123 +#define CARDIO_ERROR_INVALIDPBR -124 +#define CARDIO_ERROR_NOEMPTYBLOCK -125 +#define CARDIO_ERROR_INTERNAL -126 +#define CARDIO_ERROR_INVALIDPARAM -127 +#define CARDIO_ERROR_FATALERROR -128 + +#define MAX_DRIVE 2 +#define SECTOR_SIZE 512 + +#define NOT_INITIALIZED 0 +#define INITIALIZING 1 +#define INITIALIZED 2 + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +typedef struct _dev_info { + u32 CpV; + u32 HpC; + u32 SpH; + u32 allS; + u32 szS; + u32 PBpV; + u32 LBpV; + u32 SpB; + u32 PpB; + u32 szP; +} DEV_INFO; + +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif diff --git a/wii/libogc/include/sdcard/card_io.h b/wii/libogc/include/sdcard/card_io.h index b0c2bdc166..265947b55f 100644 --- a/wii/libogc/include/sdcard/card_io.h +++ b/wii/libogc/include/sdcard/card_io.h @@ -1,51 +1,51 @@ -#ifndef __CARD_IO_H__ -#define __CARD_IO_H__ - -#include - -#define MAX_MI_NUM 1 -#define MAX_DI_NUM 5 - -#define PAGE_SIZE256 256 -#define PAGE_SIZE512 512 - -/* CID Register */ -#define MANUFACTURER_ID(drv_no) ((u8)(g_CID[drv_no][0])) - -/* CSD Register */ -#define READ_BL_LEN(drv_no) ((u8)(g_CSD[drv_no][5]&0x0f)) -#define WRITE_BL_LEN(drv_no) ((u8)((g_CSD[drv_no][12]&0x03)<<2)|((g_CSD[drv_no][13]>>6)&0x03)) -#define C_SIZE(drv_no) ((u16)(((g_CSD[drv_no][6]&0x03)<<10)|(g_CSD[drv_no][7]<<2)|((g_CSD[drv_no][8]>>6)&0x03))) -#define C_SIZE_MULT(drv_no) ((u8)((g_CSD[drv_no][9]&0x03)<<1)|((g_CSD[drv_no][10]>>7)&0x01)) - -#ifdef __cplusplus - extern "C" { -#endif /* __cplusplus */ - -extern u8 g_CSD[MAX_DRIVE][16]; -extern u8 g_CID[MAX_DRIVE][16]; -extern u8 g_mCode[MAX_MI_NUM]; -extern u16 g_dCode[MAX_MI_NUM][MAX_DI_NUM]; - - -void sdgecko_initIODefault(); -s32 sdgecko_initIO(s32 drv_no); -s32 sdgecko_preIO(s32 drv_no); -s32 sdgecko_readCID(s32 drv_no); -s32 sdgecko_readCSD(s32 drv_no); -s32 sdgecko_readStatus(s32 drv_no); -s32 sdgecko_readSectors(s32 drv_no,u32 sector_no,u32 num_sectors,void *buf); -s32 sdgecko_writeSector(s32 drv_no,u32 sector_no,const void *buf,u32 len); -s32 sdgecko_writeSectors(s32 drv_no,u32 sector_no,u32 num_sectors,const void *buf); - -s32 sdgecko_doUnmount(s32 drv_no); - -void sdgecko_insertedCB(s32 drv_no); -void sdgecko_ejectedCB(s32 drv_no); - - -#ifdef __cplusplus - } -#endif /* __cplusplus */ - -#endif +#ifndef __CARD_IO_H__ +#define __CARD_IO_H__ + +#include + +#define MAX_MI_NUM 1 +#define MAX_DI_NUM 5 + +#define PAGE_SIZE256 256 +#define PAGE_SIZE512 512 + +/* CID Register */ +#define MANUFACTURER_ID(drv_no) ((u8)(g_CID[drv_no][0])) + +/* CSD Register */ +#define READ_BL_LEN(drv_no) ((u8)(g_CSD[drv_no][5]&0x0f)) +#define WRITE_BL_LEN(drv_no) ((u8)((g_CSD[drv_no][12]&0x03)<<2)|((g_CSD[drv_no][13]>>6)&0x03)) +#define C_SIZE(drv_no) ((u16)(((g_CSD[drv_no][6]&0x03)<<10)|(g_CSD[drv_no][7]<<2)|((g_CSD[drv_no][8]>>6)&0x03))) +#define C_SIZE_MULT(drv_no) ((u8)((g_CSD[drv_no][9]&0x03)<<1)|((g_CSD[drv_no][10]>>7)&0x01)) + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +extern u8 g_CSD[MAX_DRIVE][16]; +extern u8 g_CID[MAX_DRIVE][16]; +extern u8 g_mCode[MAX_MI_NUM]; +extern u16 g_dCode[MAX_MI_NUM][MAX_DI_NUM]; + + +void sdgecko_initIODefault(); +s32 sdgecko_initIO(s32 drv_no); +s32 sdgecko_preIO(s32 drv_no); +s32 sdgecko_readCID(s32 drv_no); +s32 sdgecko_readCSD(s32 drv_no); +s32 sdgecko_readStatus(s32 drv_no); +s32 sdgecko_readSectors(s32 drv_no,u32 sector_no,u32 num_sectors,void *buf); +s32 sdgecko_writeSector(s32 drv_no,u32 sector_no,const void *buf,u32 len); +s32 sdgecko_writeSectors(s32 drv_no,u32 sector_no,u32 num_sectors,const void *buf); + +s32 sdgecko_doUnmount(s32 drv_no); + +void sdgecko_insertedCB(s32 drv_no); +void sdgecko_ejectedCB(s32 drv_no); + + +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif diff --git a/wii/libogc/include/sdcard/gcsd.h b/wii/libogc/include/sdcard/gcsd.h index b64b159548..c27a7316f3 100644 --- a/wii/libogc/include/sdcard/gcsd.h +++ b/wii/libogc/include/sdcard/gcsd.h @@ -1,45 +1,45 @@ -/* - - gcsd.h - - Hardware routines for reading and writing to SD geckos connected - to the memory card ports. - - These functions are just wrappers around libsdcard's functions. - - Copyright (c) 2008 Sven "svpe" Peter - - Redistribution and use in source and binary forms, with or without modification, - are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation and/or - other materials provided with the distribution. - 3. The name of the author may not be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY - AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE - LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef __GCSD_H__ -#define __GCSD_H__ - -#include -#include - -#define DEVICE_TYPE_GC_SD (('G'<<24)|('C'<<16)|('S'<<8)|'D') - -extern const DISC_INTERFACE __io_gcsda; -extern const DISC_INTERFACE __io_gcsdb; - -#endif +/* + + gcsd.h + + Hardware routines for reading and writing to SD geckos connected + to the memory card ports. + + These functions are just wrappers around libsdcard's functions. + + Copyright (c) 2008 Sven "svpe" Peter + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef __GCSD_H__ +#define __GCSD_H__ + +#include +#include + +#define DEVICE_TYPE_GC_SD (('G'<<24)|('C'<<16)|('S'<<8)|'D') + +extern const DISC_INTERFACE __io_gcsda; +extern const DISC_INTERFACE __io_gcsdb; + +#endif diff --git a/wii/libogc/include/sdcard/wiisd_io.h b/wii/libogc/include/sdcard/wiisd_io.h index 2c3de8a035..3f414d91ab 100644 --- a/wii/libogc/include/sdcard/wiisd_io.h +++ b/wii/libogc/include/sdcard/wiisd_io.h @@ -1,44 +1,44 @@ -/* - - wii_sd.h - - Hardware interface for libfat Wii internal SD - - Copyright (c) 2008 - Michael Wiedenbauer (shagkur) - Dave Murphy (WinterMute) - - - Redistribution and use in source and binary forms, with or without modification, - are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation and/or - other materials provided with the distribution. - 3. The name of the author may not be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY - AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE - LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef __WIISD_IO_H__ -#define __WIISD_IO_H__ - -#include -#include - -#define DEVICE_TYPE_WII_SD (('W'<<24)|('I'<<16)|('S'<<8)|'D') - -extern const DISC_INTERFACE __io_wiisd; - -#endif +/* + + wii_sd.h + + Hardware interface for libfat Wii internal SD + + Copyright (c) 2008 + Michael Wiedenbauer (shagkur) + Dave Murphy (WinterMute) + + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef __WIISD_IO_H__ +#define __WIISD_IO_H__ + +#include +#include + +#define DEVICE_TYPE_WII_SD (('W'<<24)|('I'<<16)|('S'<<8)|'D') + +extern const DISC_INTERFACE __io_wiisd; + +#endif diff --git a/wii/libogc/include/wiikeyboard/keyboard.h b/wii/libogc/include/wiikeyboard/keyboard.h new file mode 100644 index 0000000000..150086f291 --- /dev/null +++ b/wii/libogc/include/wiikeyboard/keyboard.h @@ -0,0 +1,92 @@ +/*------------------------------------------------------------- + +keyboard.h -- keyboard event system + +Copyright (C) 2008, 2009 +DAVY Guillaume davyg2@gmail.com +Brian Johnson brijohn@gmail.com +dhewg + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + +#ifndef __KEYBOARD_H__ +#define __KEYBOARD_H__ + +#include "wsksymdef.h" + +#define MOD_SHIFT_L (1 << 0) +#define MOD_SHIFT_R (1 << 1) +#define MOD_SHIFTLOCK (1 << 2) +#define MOD_CAPSLOCK (1 << 3) +#define MOD_CONTROL_L (1 << 4) +#define MOD_CONTROL_R (1 << 5) +#define MOD_META_L (1 << 6) +#define MOD_META_R (1 << 7) +#define MOD_MODESHIFT (1 << 8) +#define MOD_NUMLOCK (1 << 9) +#define MOD_COMPOSE (1 << 10) +#define MOD_HOLDSCREEN (1 << 11) +#define MOD_COMMAND (1 << 12) +#define MOD_COMMAND1 (1 << 13) +#define MOD_COMMAND2 (1 << 14) +#define MOD_MODELOCK (1 << 15) + +#define MOD_ANYSHIFT (MOD_SHIFT_L | MOD_SHIFT_R | MOD_SHIFTLOCK) +#define MOD_ANYCONTROL (MOD_CONTROL_L | MOD_CONTROL_R) +#define MOD_ANYMETA (MOD_META_L | MOD_META_R) + +#define MOD_ONESET(val, mask) (((val) & (mask)) != 0) +#define MOD_ALLSET(val, mask) (((val) & (mask)) == (mask)) + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +typedef enum { + KEYBOARD_CONNECTED, + KEYBOARD_DISCONNECTED, + KEYBOARD_PRESSED, + KEYBOARD_RELEASED +} keyboard_event_type; + +typedef struct { + keyboard_event_type type; + u16 modifiers; + u8 keycode; + u16 symbol; +} keyboard_event; + +typedef void (*keyPressCallback)(char symbol); + +s32 KEYBOARD_Init(keyPressCallback keypress_cb); +s32 KEYBOARD_Deinit(void); + +s32 KEYBOARD_GetEvent(keyboard_event *event); +s32 KEYBOARD_FlushEvents(void); + + +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif /* __KEYBOARD_H__ */ + diff --git a/wii/libogc/include/wiikeyboard/usbkeyboard.h b/wii/libogc/include/wiikeyboard/usbkeyboard.h new file mode 100644 index 0000000000..a5da919a18 --- /dev/null +++ b/wii/libogc/include/wiikeyboard/usbkeyboard.h @@ -0,0 +1,76 @@ +/*------------------------------------------------------------- + +usbkeyboard.h -- Usb keyboard support(boot protocol) + +Copyright (C) 2008, 2009 +DAVY Guillaume davyg2@gmail.com +dhewg + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you +must not claim that you wrote the original software. If you use +this software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. + +-------------------------------------------------------------*/ + +#ifndef __USBKEYBOARD_H__ +#define __USBKEYBOARD_H__ + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +typedef enum +{ + USBKEYBOARD_PRESSED = 0, + USBKEYBOARD_RELEASED, + USBKEYBOARD_DISCONNECTED +} USBKeyboard_eventType; + +typedef enum +{ + USBKEYBOARD_LEDNUM = 0, + USBKEYBOARD_LEDCAPS, + USBKEYBOARD_LEDSCROLL +} USBKeyboard_led; + +typedef struct +{ + USBKeyboard_eventType type; + u8 keyCode; +} USBKeyboard_event; + +typedef void (*eventcallback) (USBKeyboard_event event); + +s32 USBKeyboard_Initialize(void); +s32 USBKeyboard_Deinitialize(void); + +s32 USBKeyboard_Open(const eventcallback cb); +void USBKeyboard_Close(void); + +bool USBKeyboard_IsConnected(void); +s32 USBKeyboard_Scan(void); + +s32 USBKeyboard_SetLed(const USBKeyboard_led led, bool on); +s32 USBKeyboard_ToggleLed(const USBKeyboard_led led); + +#ifdef __cplusplus + } +#endif /* __cplusplus */ + +#endif /* __USBKEYBOARD_H__ */ + diff --git a/wii/libogc/include/wiikeyboard/wsksymdef.h b/wii/libogc/include/wiikeyboard/wsksymdef.h new file mode 100644 index 0000000000..552544675c --- /dev/null +++ b/wii/libogc/include/wiikeyboard/wsksymdef.h @@ -0,0 +1,776 @@ +/*- + * Copyright (c) 1997 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Juergen Hannken-Illjes. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _DEV_WSCONS_WSKSYMDEF_H_ +#define _DEV_WSCONS_WSKSYMDEF_H_ + +/* + * Keysymbols encoded as 16-bit Unicode. Special symbols + * are encoded in the private area (0xe000 - 0xf8ff). + * Currently only ISO Latin-1 subset is supported. + * + * This file is parsed from userland. Encode keysyms as: + * + * #define KS_[^ \t]* 0x[0-9a-f]* + * + * and don't modify the border comments. + */ + +/*BEGINKEYSYMDECL*/ + +/* + * Group Ascii (ISO Latin1) character in low byte + */ + +#define KS_BackSpace 0x08 +#define KS_Tab 0x09 +#define KS_Linefeed 0x0a +#define KS_Clear 0x0b +#define KS_Return 0x0d +#define KS_Escape 0x1b +#define KS_space 0x20 +#define KS_exclam 0x21 +#define KS_quotedbl 0x22 +#define KS_numbersign 0x23 +#define KS_dollar 0x24 +#define KS_percent 0x25 +#define KS_ampersand 0x26 +#define KS_apostrophe 0x27 +#define KS_parenleft 0x28 +#define KS_parenright 0x29 +#define KS_asterisk 0x2a +#define KS_plus 0x2b +#define KS_comma 0x2c +#define KS_minus 0x2d +#define KS_period 0x2e +#define KS_slash 0x2f +#define KS_0 0x30 +#define KS_1 0x31 +#define KS_2 0x32 +#define KS_3 0x33 +#define KS_4 0x34 +#define KS_5 0x35 +#define KS_6 0x36 +#define KS_7 0x37 +#define KS_8 0x38 +#define KS_9 0x39 +#define KS_colon 0x3a +#define KS_semicolon 0x3b +#define KS_less 0x3c +#define KS_equal 0x3d +#define KS_greater 0x3e +#define KS_question 0x3f +#define KS_at 0x40 +#define KS_A 0x41 +#define KS_B 0x42 +#define KS_C 0x43 +#define KS_D 0x44 +#define KS_E 0x45 +#define KS_F 0x46 +#define KS_G 0x47 +#define KS_H 0x48 +#define KS_I 0x49 +#define KS_J 0x4a +#define KS_K 0x4b +#define KS_L 0x4c +#define KS_M 0x4d +#define KS_N 0x4e +#define KS_O 0x4f +#define KS_P 0x50 +#define KS_Q 0x51 +#define KS_R 0x52 +#define KS_S 0x53 +#define KS_T 0x54 +#define KS_U 0x55 +#define KS_V 0x56 +#define KS_W 0x57 +#define KS_X 0x58 +#define KS_Y 0x59 +#define KS_Z 0x5a +#define KS_bracketleft 0x5b +#define KS_backslash 0x5c +#define KS_bracketright 0x5d +#define KS_asciicircum 0x5e +#define KS_underscore 0x5f +#define KS_grave 0x60 +#define KS_a 0x61 +#define KS_b 0x62 +#define KS_c 0x63 +#define KS_d 0x64 +#define KS_e 0x65 +#define KS_f 0x66 +#define KS_g 0x67 +#define KS_h 0x68 +#define KS_i 0x69 +#define KS_j 0x6a +#define KS_k 0x6b +#define KS_l 0x6c +#define KS_m 0x6d +#define KS_n 0x6e +#define KS_o 0x6f +#define KS_p 0x70 +#define KS_q 0x71 +#define KS_r 0x72 +#define KS_s 0x73 +#define KS_t 0x74 +#define KS_u 0x75 +#define KS_v 0x76 +#define KS_w 0x77 +#define KS_x 0x78 +#define KS_y 0x79 +#define KS_z 0x7a +#define KS_braceleft 0x7b +#define KS_bar 0x7c +#define KS_braceright 0x7d +#define KS_asciitilde 0x7e +#define KS_Delete 0x7f + +#define KS_nobreakspace 0xa0 +#define KS_exclamdown 0xa1 +#define KS_cent 0xa2 +#define KS_sterling 0xa3 +#define KS_currency 0xa4 +#define KS_yen 0xa5 +#define KS_brokenbar 0xa6 +#define KS_section 0xa7 +#define KS_diaeresis 0xa8 +#define KS_copyright 0xa9 +#define KS_ordfeminine 0xaa +#define KS_guillemotleft 0xab +#define KS_notsign 0xac +#define KS_hyphen 0xad +#define KS_registered 0xae +#define KS_macron 0xaf +#define KS_degree 0xb0 +#define KS_plusminus 0xb1 +#define KS_twosuperior 0xb2 +#define KS_threesuperior 0xb3 +#define KS_acute 0xb4 +#define KS_mu 0xb5 +#define KS_paragraph 0xb6 +#define KS_periodcentered 0xb7 +#define KS_cedilla 0xb8 +#define KS_onesuperior 0xb9 +#define KS_masculine 0xba +#define KS_guillemotright 0xbb +#define KS_onequarter 0xbc +#define KS_onehalf 0xbd +#define KS_threequarters 0xbe +#define KS_questiondown 0xbf +#define KS_Agrave 0xc0 +#define KS_Aacute 0xc1 +#define KS_Acircumflex 0xc2 +#define KS_Atilde 0xc3 +#define KS_Adiaeresis 0xc4 +#define KS_Aring 0xc5 +#define KS_AE 0xc6 +#define KS_Ccedilla 0xc7 +#define KS_Egrave 0xc8 +#define KS_Eacute 0xc9 +#define KS_Ecircumflex 0xca +#define KS_Ediaeresis 0xcb +#define KS_Igrave 0xcc +#define KS_Iacute 0xcd +#define KS_Icircumflex 0xce +#define KS_Idiaeresis 0xcf +#define KS_ETH 0xd0 +#define KS_Ntilde 0xd1 +#define KS_Ograve 0xd2 +#define KS_Oacute 0xd3 +#define KS_Ocircumflex 0xd4 +#define KS_Otilde 0xd5 +#define KS_Odiaeresis 0xd6 +#define KS_multiply 0xd7 +#define KS_Ooblique 0xd8 +#define KS_Ugrave 0xd9 +#define KS_Uacute 0xda +#define KS_Ucircumflex 0xdb +#define KS_Udiaeresis 0xdc +#define KS_Yacute 0xdd +#define KS_THORN 0xde +#define KS_ssharp 0xdf +#define KS_agrave 0xe0 +#define KS_aacute 0xe1 +#define KS_acircumflex 0xe2 +#define KS_atilde 0xe3 +#define KS_adiaeresis 0xe4 +#define KS_aring 0xe5 +#define KS_ae 0xe6 +#define KS_ccedilla 0xe7 +#define KS_egrave 0xe8 +#define KS_eacute 0xe9 +#define KS_ecircumflex 0xea +#define KS_ediaeresis 0xeb +#define KS_igrave 0xec +#define KS_iacute 0xed +#define KS_icircumflex 0xee +#define KS_idiaeresis 0xef +#define KS_eth 0xf0 +#define KS_ntilde 0xf1 +#define KS_ograve 0xf2 +#define KS_oacute 0xf3 +#define KS_ocircumflex 0xf4 +#define KS_otilde 0xf5 +#define KS_odiaeresis 0xf6 +#define KS_division 0xf7 +#define KS_oslash 0xf8 +#define KS_ugrave 0xf9 +#define KS_uacute 0xfa +#define KS_ucircumflex 0xfb +#define KS_udiaeresis 0xfc +#define KS_yacute 0xfd +#define KS_thorn 0xfe +#define KS_ydiaeresis 0xff + +#define KS_Odoubleacute 0x150 +#define KS_odoubleacute 0x151 +#define KS_Udoubleacute 0x170 +#define KS_udoubleacute 0x171 + +/* + * Group Dead (dead accents) + */ + +#define KS_dead_grave 0x0300 +#define KS_dead_acute 0x0301 +#define KS_dead_circumflex 0x0302 +#define KS_dead_tilde 0x0303 +#define KS_dead_diaeresis 0x0308 +#define KS_dead_abovering 0x030a +#define KS_dead_cedilla 0x0327 + +/* + * Group Cyrillic (koi8-r) + */ + +#define KS_Cyrillic_A 0xe1 +#define KS_Cyrillic_BE 0xe2 +#define KS_Cyrillic_VE 0xf7 +#define KS_Cyrillic_GE 0xe7 +#define KS_Cyrillic_DE 0xe4 +#define KS_Cyrillic_IE 0xe5 +#define KS_Cyrillic_YO 0xb3 +#define KS_Cyrillic_ZHE 0xf6 +#define KS_Cyrillic_ZE 0xfa +#define KS_Cyrillic_I 0xe9 +#define KS_Cyrillic_ISHORT 0xea +#define KS_Cyrillic_IUKR 0xb6 +#define KS_Cyrillic_YI 0xb7 +#define KS_Cyrillic_KA 0xeb +#define KS_Cyrillic_EL 0xec +#define KS_Cyrillic_EM 0xed +#define KS_Cyrillic_EN 0xee +#define KS_Cyrillic_O 0xef +#define KS_Cyrillic_PE 0xf0 +#define KS_Cyrillic_ER 0xf2 +#define KS_Cyrillic_ES 0xf3 +#define KS_Cyrillic_TE 0xf4 +#define KS_Cyrillic_U 0xf5 +#define KS_Cyrillic_EF 0xe6 +#define KS_Cyrillic_HA 0xe8 +#define KS_Cyrillic_TSE 0xe3 +#define KS_Cyrillic_CHE 0xfe +#define KS_Cyrillic_SHA 0xfb +#define KS_Cyrillic_SCHA 0xfd +#define KS_Cyrillic_HSIGHN 0xff +#define KS_Cyrillic_YERU 0xf9 +#define KS_Cyrillic_SSIGHN 0xf8 +#define KS_Cyrillic_E 0xfc +#define KS_Cyrillic_YU 0xe0 +#define KS_Cyrillic_YA 0xf1 +#define KS_Cyrillic_a 0xc1 +#define KS_Cyrillic_be 0xc2 +#define KS_Cyrillic_ve 0xd7 +#define KS_Cyrillic_ge 0xc7 +#define KS_Cyrillic_de 0xc4 +#define KS_Cyrillic_ie 0xc5 +#define KS_Cyrillic_yo 0xa3 +#define KS_Cyrillic_zhe 0xd6 +#define KS_Cyrillic_ze 0xda +#define KS_Cyrillic_i 0xc9 +#define KS_Cyrillic_ishort 0xca +#define KS_Cyrillic_iukr 0xa6 +#define KS_Cyrillic_yi 0xa7 +#define KS_Cyrillic_ka 0xcb +#define KS_Cyrillic_el 0xcc +#define KS_Cyrillic_em 0xcd +#define KS_Cyrillic_en 0xce +#define KS_Cyrillic_o 0xcf +#define KS_Cyrillic_pe 0xd0 +#define KS_Cyrillic_er 0xd2 +#define KS_Cyrillic_es 0xd3 +#define KS_Cyrillic_te 0xd4 +#define KS_Cyrillic_u 0xd5 +#define KS_Cyrillic_ef 0xc6 +#define KS_Cyrillic_ha 0xc8 +#define KS_Cyrillic_tse 0xc3 +#define KS_Cyrillic_che 0xde +#define KS_Cyrillic_sha 0xdb +#define KS_Cyrillic_scha 0xdd +#define KS_Cyrillic_hsighn 0xdf +#define KS_Cyrillic_yeru 0xd9 +#define KS_Cyrillic_ssighn 0xd8 +#define KS_Cyrillic_e 0xdc +#define KS_Cyrillic_yu 0xc0 +#define KS_Cyrillic_ya 0xd1 +#define KS_Cyrillic_gheukr 0xad +#define KS_Cyrillic_GHEUKR 0xbd +#define KS_Cyrillic_yeukr 0xa4 +#define KS_Cyrillic_YEUKR 0xb4 + +/* + * Group Latin-2 (iso8859-2) + */ + +#define KS_L2_Aogonek 0xa1 +#define KS_L2_breve 0xa2 +#define KS_L2_Lstroke 0xa3 +#define KS_L2_Lcaron 0xa5 +#define KS_L2_Sacute 0xa6 +#define KS_L2_Scaron 0xa9 +#define KS_L2_Scedilla 0xaa +#define KS_L2_Tcaron 0xab +#define KS_L2_Zacute 0xac +#define KS_L2_Zcaron 0xae +#define KS_L2_Zdotabove 0xaf +#define KS_L2_aogonek 0xb1 +#define KS_L2_ogonek 0xb2 +#define KS_L2_lstroke 0xb3 +#define KS_L2_lcaron 0xb5 +#define KS_L2_sacute 0xb6 +#define KS_L2_caron 0xb7 +#define KS_L2_scaron 0xb9 +#define KS_L2_scedilla 0xba +#define KS_L2_tcaron 0xbb +#define KS_L2_zacute 0xbc +#define KS_L2_dblacute 0xbd +#define KS_L2_zcaron 0xbe +#define KS_L2_zdotabove 0xbf +#define KS_L2_Racute 0xc0 +#define KS_L2_Abreve 0xc3 +#define KS_L2_Lacute 0xc5 +#define KS_L2_Cacute 0xc6 +#define KS_L2_Ccaron 0xc8 +#define KS_L2_Eogonek 0xca +#define KS_L2_Ecaron 0xcc +#define KS_L2_Dcaron 0xcf +#define KS_L2_Dstroke 0xd0 +#define KS_L2_Nacute 0xd1 +#define KS_L2_Ncaron 0xd2 +#define KS_L2_Odoubleacute 0xd5 +#define KS_L2_Rcaron 0xd8 +#define KS_L2_Uring 0xd9 +#define KS_L2_Udoubleacute 0xdb +#define KS_L2_Tcedilla 0xde +#define KS_L2_racute 0xe0 +#define KS_L2_abreve 0xe3 +#define KS_L2_lacute 0xe5 +#define KS_L2_cacute 0xe6 +#define KS_L2_ccaron 0xe8 +#define KS_L2_eogonek 0xea +#define KS_L2_ecaron 0xec +#define KS_L2_dcaron 0xef +#define KS_L2_dstroke 0xf0 +#define KS_L2_nacute 0xf1 +#define KS_L2_odoubleacute 0xf5 +#define KS_L2_rcaron 0xf8 +#define KS_L2_uring 0xf9 +#define KS_L2_udoubleacute 0xfb +#define KS_L2_tcedilla 0xfe +#define KS_L2_dotabove 0xff + +/* + * Group Latin-5 (iso8859-9) + */ + +#define KS_L5_Gbreve 0xd0 +#define KS_L5_Idotabove 0xdd +#define KS_L5_Scedilla 0xde +#define KS_L5_gbreve 0xf0 +#define KS_L5_idotless 0xfd +#define KS_L5_scedilla 0xfe + + /* + * Group Latin-7 (iso8859-13) + */ + +#define KS_L7_rightdblquot 0xa1 +#define KS_L7_dbllow9quot 0xa5 +#define KS_L7_Ostroke 0xa8 +#define KS_L7_Rcedilla 0xaa +#define KS_L7_AE 0xaf +#define KS_L7_leftdblquot 0xb4 +#define KS_L7_ostroke 0xb8 +#define KS_L7_rcedilla 0xba +#define KS_L7_ae 0xbf +#define KS_L7_Aogonek 0xc0 +#define KS_L7_Iogonek 0xc1 +#define KS_L7_Amacron 0xc2 +#define KS_L7_Cacute 0xc3 +#define KS_L7_Eogonek 0xc6 +#define KS_L7_Emacron 0xc7 +#define KS_L7_Ccaron 0xc8 +#define KS_L7_Zacute 0xca +#define KS_L7_Edot 0xcb +#define KS_L7_Gcedilla 0xcc +#define KS_L7_Kcedilla 0xcd +#define KS_L7_Imacron 0xce +#define KS_L7_Lcedilla 0xcf +#define KS_L7_Scaron 0xd0 +#define KS_L7_Nacute 0xd1 +#define KS_L7_Ncedilla 0xd2 +#define KS_L7_Omacron 0xd4 +#define KS_L7_Uogonek 0xd8 +#define KS_L7_Lstroke 0xd9 +#define KS_L7_Sacute 0xda +#define KS_L7_Umacron 0xdb +#define KS_L7_Zdot 0xdd +#define KS_L7_Zcaron 0xde +#define KS_L7_aogonek 0xe0 +#define KS_L7_iogonek 0xe1 +#define KS_L7_amacron 0xe2 +#define KS_L7_cacute 0xe3 +#define KS_L7_eogonek 0xe6 +#define KS_L7_emacron 0xe7 +#define KS_L7_ccaron 0xe8 +#define KS_L7_zacute 0xea +#define KS_L7_edot 0xeb +#define KS_L7_gcedilla 0xec +#define KS_L7_kcedilla 0xed +#define KS_L7_imacron 0xee +#define KS_L7_lcedilla 0xef +#define KS_L7_scaron 0xf0 +#define KS_L7_nacute 0xf1 +#define KS_L7_ncedilla 0xf2 +#define KS_L7_omacron 0xf4 +#define KS_L7_uogonek 0xf8 +#define KS_L7_lstroke 0xf9 +#define KS_L7_sacute 0xfa +#define KS_L7_umacron 0xfb +#define KS_L7_zdot 0xfd +#define KS_L7_zcaron 0xfe +#define KS_L7_rightsnglquot 0xff + +/* + * Group 1 (modifiers) + */ + +#define KS_Shift_L 0xf101 +#define KS_Shift_R 0xf102 +#define KS_Control_L 0xf103 +#define KS_Control_R 0xf104 +#define KS_Caps_Lock 0xf105 +#define KS_Shift_Lock 0xf106 +#define KS_Alt_L 0xf107 +#define KS_Alt_R 0xf108 +#define KS_Multi_key 0xf109 +#define KS_Mode_switch 0xf10a +#define KS_Num_Lock 0xf10b +#define KS_Hold_Screen 0xf10c +#define KS_Cmd 0xf10d +#define KS_Cmd1 0xf10e +#define KS_Cmd2 0xf10f +#define KS_Meta_L 0xf110 +#define KS_Meta_R 0xf111 +#define KS_Zenkaku_Hankaku 0xf112 /* Zenkaku/Hankaku toggle */ +#define KS_Hiragana_Katakana 0xf113 /* Hiragana/Katakana toggle */ +#define KS_Henkan_Mode 0xf114 /* Start/Stop Conversion */ +#define KS_Henkan 0xf115 /* Alias for Henkan_Mode */ +#define KS_Muhenkan 0xf116 /* Cancel Conversion */ +#define KS_Mode_Lock 0xf117 + +/* + * Group 2 (keypad) character in low byte + */ + +#define KS_KP_F1 0xf291 +#define KS_KP_F2 0xf292 +#define KS_KP_F3 0xf293 +#define KS_KP_F4 0xf294 +#define KS_KP_Home 0xf295 +#define KS_KP_Left 0xf296 +#define KS_KP_Up 0xf297 +#define KS_KP_Right 0xf298 +#define KS_KP_Down 0xf299 +#define KS_KP_Prior 0xf29a +#define KS_KP_Next 0xf29b +#define KS_KP_End 0xf29c +#define KS_KP_Begin 0xf29d +#define KS_KP_Insert 0xf29e +#define KS_KP_Delete 0xf29f + +#define KS_KP_Space 0xf220 +#define KS_KP_Tab 0xf209 +#define KS_KP_Enter 0xf20d +#define KS_KP_Equal 0xf23d +#define KS_KP_Numbersign 0xf223 +#define KS_KP_Multiply 0xf22a +#define KS_KP_Add 0xf22b +#define KS_KP_Separator 0xf22c +#define KS_KP_Subtract 0xf22d +#define KS_KP_Decimal 0xf22e +#define KS_KP_Divide 0xf22f +#define KS_KP_0 0xf230 +#define KS_KP_1 0xf231 +#define KS_KP_2 0xf232 +#define KS_KP_3 0xf233 +#define KS_KP_4 0xf234 +#define KS_KP_5 0xf235 +#define KS_KP_6 0xf236 +#define KS_KP_7 0xf237 +#define KS_KP_8 0xf238 +#define KS_KP_9 0xf239 + +/* + * Group 3 (function) + */ + +#define KS_f1 0xf300 +#define KS_f2 0xf301 +#define KS_f3 0xf302 +#define KS_f4 0xf303 +#define KS_f5 0xf304 +#define KS_f6 0xf305 +#define KS_f7 0xf306 +#define KS_f8 0xf307 +#define KS_f9 0xf308 +#define KS_f10 0xf309 +#define KS_f11 0xf30a +#define KS_f12 0xf30b +#define KS_f13 0xf30c +#define KS_f14 0xf30d +#define KS_f15 0xf30e +#define KS_f16 0xf30f +#define KS_f17 0xf310 +#define KS_f18 0xf311 +#define KS_f19 0xf312 +#define KS_f20 0xf313 + +#define KS_F1 0xf340 +#define KS_F2 0xf341 +#define KS_F3 0xf342 +#define KS_F4 0xf343 +#define KS_F5 0xf344 +#define KS_F6 0xf345 +#define KS_F7 0xf346 +#define KS_F8 0xf347 +#define KS_F9 0xf348 +#define KS_F10 0xf349 +#define KS_F11 0xf34a +#define KS_F12 0xf34b +#define KS_F13 0xf34c +#define KS_F14 0xf34d +#define KS_F15 0xf34e +#define KS_F16 0xf34f +#define KS_F17 0xf350 +#define KS_F18 0xf351 +#define KS_F19 0xf352 +#define KS_F20 0xf353 + +#define KS_Home 0xf381 +#define KS_Prior 0xf382 +#define KS_Next 0xf383 +#define KS_Up 0xf384 +#define KS_Down 0xf385 +#define KS_Left 0xf386 +#define KS_Right 0xf387 +#define KS_End 0xf388 +#define KS_Insert 0xf389 +#define KS_Help 0xf38a +#define KS_Execute 0xf38b +#define KS_Find 0xf38c +#define KS_Select 0xf38d +#define KS_Again 0xf38e +#define KS_Props 0xf38f +#define KS_Undo 0xf390 +#define KS_Front 0xf391 +#define KS_Copy 0xf392 +#define KS_Open 0xf393 +#define KS_Paste 0xf394 +#define KS_Cut 0xf395 + +#define KS_Menu 0xf3c0 +#define KS_Pause 0xf3c1 +#define KS_Print_Screen 0xf3c2 + +#define KS_AudioMute 0xf3d1 +#define KS_AudioLower 0xf3d2 +#define KS_AudioRaise 0xf3d3 + +/* + * Group 4 (command) + */ + +#define KS_Cmd_Screen0 0xf400 +#define KS_Cmd_Screen1 0xf401 +#define KS_Cmd_Screen2 0xf402 +#define KS_Cmd_Screen3 0xf403 +#define KS_Cmd_Screen4 0xf404 +#define KS_Cmd_Screen5 0xf405 +#define KS_Cmd_Screen6 0xf406 +#define KS_Cmd_Screen7 0xf407 +#define KS_Cmd_Screen8 0xf408 +#define KS_Cmd_Screen9 0xf409 +#define KS_Cmd_Screen10 0xf40a +#define KS_Cmd_Screen11 0xf40b +#define KS_Cmd_Debugger 0xf420 +#define KS_Cmd_ResetEmul 0xf421 +#define KS_Cmd_ResetClose 0xf422 +#define KS_Cmd_BacklightOn 0xf423 +#define KS_Cmd_BacklightOff 0xf424 +#define KS_Cmd_BacklightToggle 0xf425 +#define KS_Cmd_BrightnessUp 0xf426 +#define KS_Cmd_BrightnessDown 0xf427 +#define KS_Cmd_BrightnessRotate 0xf428 +#define KS_Cmd_ContrastUp 0xf429 +#define KS_Cmd_ContrastDown 0xf42a +#define KS_Cmd_ContrastRotate 0xf42b +#define KS_Cmd_ScrollBack 0xf42c +#define KS_Cmd_ScrollFwd 0xf42d +#define KS_Cmd_KbdReset 0xf42e + +/* + * Group 5 (internal) + */ + +#define KS_voidSymbol 0xf500 + +/*ENDKEYSYMDECL*/ + +/* + * keysym groups + */ + +#define KS_GROUP_Mod 0xf100 +#define KS_GROUP_Keypad 0xf200 +#define KS_GROUP_Function 0xf300 +#define KS_GROUP_Command 0xf400 +#define KS_GROUP_Internal 0xf500 +#define KS_GROUP_Dead 0xf801 /* not encoded in keysym */ +#define KS_GROUP_Ascii 0xf802 /* not encoded in keysym */ +#define KS_GROUP_Keycode 0xf803 /* not encoded in keysym */ + +#define KS_NUMKEYCODES 0x1000 +#define KS_KEYCODE(v) ((v) | 0xe000) + +#define KS_GROUP(k) ((k) >= 0x0300 && (k) < 0x0370 ? KS_GROUP_Dead : \ + (((k) & 0xf000) == 0xe000 ? KS_GROUP_Keycode : \ + (((k) & 0xf800) == 0xf000 ? ((k) & 0xff00) : \ + KS_GROUP_Ascii))) + +#define KS_VALUE(k) (((k) & 0xf000) == 0xe000 ? ((k) & 0x0fff) : \ + (((k) & 0xf800) == 0xf000 ? ((k) & 0x00ff) : (k))) + +/* + * Keyboard types: 8bit encoding, 24bit variant + */ + +#define KB_ENCODING(e) ((e) & 0x0000ff00) +#define KB_VARIANT(e) ((e) & 0xffff00ff) + +#define KB_NONE 0x0000 +#define KB_USER 0x0100 +#define KB_US 0x0200 +#define KB_DE 0x0300 +#define KB_DK 0x0400 +#define KB_IT 0x0500 +#define KB_FR 0x0600 +#define KB_UK 0x0700 +#define KB_JP 0x0800 +#define KB_SV 0x0900 +#define KB_NO 0x0a00 +#define KB_ES 0x0b00 +#define KB_HU 0x0c00 +#define KB_BE 0x0d00 +#define KB_RU 0x0e00 +#define KB_SG 0x0f00 +#define KB_SF 0x1000 +#define KB_PT 0x1100 +#define KB_UA 0x1200 +#define KB_LT 0x1300 +#define KB_LA 0x1400 +#define KB_BR 0x1500 +#define KB_NL 0x1600 +#define KB_TR 0x1700 +#define KB_PL 0x1800 +#define KB_SI 0x1900 +#define KB_CF 0x1a00 +#define KB_LV 0x1b00 + +#define KB_NODEAD 0x000001 /* disable dead accents */ +#define KB_DECLK 0x000002 /* DEC LKnnn layout */ +#define KB_LK401 0x000004 /* DEC LK401 instead LK201 */ +#define KB_SWAPCTRLCAPS 0x000008 /* swap Left-Control and Caps-Lock */ +#define KB_DVORAK 0x000010 /* Dvorak layout */ +#define KB_METAESC 0x000020 /* generate ESC prefix on ALT-key */ +#define KB_IOPENER 0x000040 /* f1-f12 -> ESC,f1-f11 */ +#define KB_MACHDEP 0x000080 /* machine dependent */ +#define KB_APPLE 0x010000 /* Apple specific layout */ + +#define KB_ENCTAB \ + { KB_USER, "user" }, \ + { KB_US, "us" }, \ + { KB_DE, "de" }, \ + { KB_DK, "dk" }, \ + { KB_IT, "it" }, \ + { KB_FR, "fr" }, \ + { KB_UK, "uk" }, \ + { KB_JP, "jp" }, \ + { KB_SV, "sv" }, \ + { KB_NO, "no" }, \ + { KB_ES, "es" }, \ + { KB_HU, "hu" }, \ + { KB_BE, "be" }, \ + { KB_RU, "ru" }, \ + { KB_UA, "ua" }, \ + { KB_SG, "sg" }, \ + { KB_SF, "sf" }, \ + { KB_PT, "pt" }, \ + { KB_LT, "lt" }, \ + { KB_LA, "la" }, \ + { KB_BR, "br" }, \ + { KB_NL, "nl" }, \ + { KB_TR, "tr" }, \ + { KB_PL, "pl" }, \ + { KB_SI, "si" }, \ + { KB_CF, "cf" }, \ + { KB_LV, "lv" } + +#define KB_VARTAB \ + { KB_NODEAD, "nodead" }, \ + { KB_DECLK, "declk" }, \ + { KB_LK401, "lk401" }, \ + { KB_SWAPCTRLCAPS, "swapctrlcaps" }, \ + { KB_DVORAK, "dvorak" }, \ + { KB_METAESC, "metaesc" }, \ + { KB_IOPENER, "iopener" }, \ + { KB_MACHDEP, "machdep" }, \ + { KB_APPLE, "apple" } + +#endif /* !_DEV_WSCONS_WSKSYMDEF_H_ */ diff --git a/wii/libogc/libs/cube/libbba.a b/wii/libogc/libs/cube/libbba.a index e36ed1715d5d8b460d69df7f8ee79b83cd63379c..35758ec0b614229f96395c73932ebba6afa324af 100644 GIT binary patch delta 86824 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 Y3-Vl)aSQgx=eA=THkfu*L}L~>%P{# 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 diff --git a/wii/libogc/libs/cube/libdb.a b/wii/libogc/libs/cube/libdb.a index 977e03d45ef6b07045d2d18f5af86fc6a5727302..4c0a55971c39aef94b5e18bce30fed550dc867a4 100644 GIT binary patch delta 52537 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 Ef8=Bn^Z)<= delta 52023 zcmc${d%Rau{>Q)XpZn+Bs?$kPol+9#l%!M~ii)P9(nWNqD5Z;{bh;sg_|VD-p&7Rj z#V5p6LdeK%+(MDBT!zpP!teE3@ApT|{ARxM`~LOo;bTAdd%f4~z20l>wf0_npG99C zvhcG*7B>ppbf|9A{`#h;)h=|Lng2ijYX6ta-7O8B|I5#-+V1?Hepjz`YCZh#-~N7E z=y?C~^G_S@*x&W_9sj`JhSrY%FTWtO*D3r$?+xca{A&MGz<&7)qn+?yevzr;{Kwz2 zolf-s`B(FQQ5N0UMa!m*n>1|Pq{$PfO&w!SxWqqr^~+wbxb>-{atEg>ymswwn(H6t zoi}Lp=+yGoaeuetIgVFmPP;UyOpG5la^kt8j+i{ceAC4LH2wQ&)w!cqpWJan$~<(o zS7Wxc_Iu}EImwuo9iq~P`;|bWM^;Vi*|$mxapb7gV@}@dny$^=hO1}xxI6Na2j!ae z8CLP3<2VByr>^Tb@%7-*!ii^d%lcF`M|qrUMB+9BFV)c3!GBUdDYv^%rF%}UPTxxR z>|6)@zjJPA-|O6ib6@tI-~27qXp(9!0?!go9S6Qrd2Q~-)4ErTcN{+}lJFdG0}bt- z+jH8mHva?36Cw%7pKItZ;O~_uI8LA`BV6M1-Wt$fv zc~m6fa_~k?2YE)CW{N3jX_L3)M)$9Bx8`o_U+LbHTMN$ScJ&|Dd=FaUY>oRf_&nkG zTJROZsrPc@2UNMQfqlcqX!=AB|gtBAK1x#Ah&H`rQ7F*L6z=^T(d#fWhxyflTpn@ zx%Gpp+$p);gHCUd_y7TDI+{2f44y2U7?T@1xXS%=ZqeXMw_R@4;Pc%_a}9^g^Wxv< zmJg}tCBDtA9ddFu{+r_zsaGXybLlgOxf^ri&+LvUYtEcr;X6*rOi3_)Gx%~%{HI*E zq1~JJhvWs3q?&?X5%$gkzbTxKuU<9u7}xES+jZ7UZvWhxv(I-g&NUv^&;24dbr^a3 zuv^^qxmm-jz$=HZZUeU{S4T_s0Y4`RB`*fU?OD&{W8kj}^4#JP(=&A)r@l5?s&1~% z$n!I(RQ;PoC$V((qLI^!2Q-F>5S{v=02S@ANCK+%^&NzvrTTiU)tzD4Qf+IO*(Q^zP#LRoi&3;cn9Z)HFsaB%qG!i z99V8REaWvZoqM{Kwf8`DxQLRkfjbJv-T~JLC%y%rq`VA#x^VVaFa}5_mqsISfFx&b z1&36CVklChWHa&lL_)NY_>p`KK{NxGN+eg<827ff+fV z97BjL&|2{48X2Z`F;Y_QZ$RxlWtiH_3P+S{WfD(;4;6Vj1h-ZFp5VI2$w_z#PEHX{ zgl5vIZoS$pGT{Y^8D&O;X9*V#0$-_&LCU*ZI5`izMwm79)+(T!*hEnWH{a08JC_kh*3DO^4RHEsG` zuv#{W!tmm1)1l5B<@(@jg&>#0o{btXoB!G z;S9#`@NAXCC&KfE=?5XM3Ctkc3BE%4B{1Spp2Zju-X)xR1pKgY9BD_rE!R519XJ^x z0a^40&M+96&czu9Ig!>iqwogx^+Y|LZ>(eRx8Gbg4K%I)?l?((I3HTt?U~3 zg5Osn2N>blznM@P7Ky33Vn`&W<|@vB)mrX+uv#mc0#<8fH<+!x-SS$LJ2pd-b93O! zgfqW_ZxHrShuH1H(VO6v!r>0^J;b6DV$6-P8XYxP{1zJA=_!GT_4Z zn1HR*$>1wgiSn(&{)=FBtJJsPuSFhC0{^5sm*O%U3dfEItDXEk;Dbb-jKJDQG9A&Y z6KymyERmS445v@1C5kA&N)v?@5=&I)eej(sXU5utQ&)qZ5INIJs8tdlfnO7OkOzN4 zMz2oaffH@&I9wpH z3EPaB*&l^%X0QO|VN1wS>)#9aypHNwMo^En5k3?po7oq_-g-2Zj#=rmz(pd@AYS?) z;Q*FOBNJwjLYnF0g*gpP4-)1qAPuWhCz)gWPm`0(B=Ah(uo^s9n4^38MqwAjM!Hb5 zPr=JY&TCj&YZ-$hrXLV_3>Hjl7Y$+A^s^!_>I;4q%vo;eo1Ld)?$s5;R|g4qz69&2 zk$wt{Vai(VdN5jy?4AVHvPY%h%S4_)-WheP42+RM9O^shwOqE5!=J#nD#O(>7<=td zzzcBZUJ3A_kb%Q8LUJ$|l_zJO$L~qucm&>{au_PJSvZ0#WYj-d@yzEUPy7kKt{p5h z3*1EHu}_`zo$L{+G#mjPHJ}2Fnlj@!ET0`G%tW(V`!u?FcCN@HST=i&u=5i5W?^?B z7@6C2-ZYc?W9-GyoP9w=DX3+4s46@q`*-084Ve8=n3v?D64k#0+(>m`|3}4iV zVYDfFMj75$^onqR1}Z{)>ZDPzB6un}y8!&1aOwv1y`tYV!uz-?ri5K2SX?gbuLM^L z^G-u?m2d)$P~1s%(9*@-h1rjb`w1tDz{7+&CoMi-ID~#lF}W97v;rp$B_M%TFM%m- z%_wgt%vLW!lTgl9FBvV&Rxg<(9Q8GQ&v45#Xyg*@s{Tqd^$heXG)xJuUDg&Yz;6oE zAxpLkC%*vWM;+%<@b|)r8yu%pos~J4WJYQZ*-hf3-af+bSQNh zM%q&f@()B_d>G^~Wxs;_YmsMnLH@Jjn8}0OM(%TF@gVou+W0>lrw-g`sVdi*Dax4> zAiu(KjxWd;X(DL#I!m#rEXW@ed2~PIPdLsA1v%P-g%8(2{*vPiD#&-JycF`kV_n;| z5b&)8`0&*_zdFufmDlw}9k!igin=-f;r^#J&3;fV70lutDshN1`;n4v>aP_$(Q#$1~# z>Qr&1YW>4(9_n7#{3*w2aH5EkoxxD)qK0Xp{SQ^1brurrY?hzpmRG>78|0+s;j>`0 z6%+SL^IOkyW3Kz2dHZblZnxOX83t?4GOLEU-QAbX-eE|ht7$mgtr~&u*ytfiB97*3 zgddaOaNP*jqEX}UyGENt9>c)U25s&{487uMpu4c;!_sCOXu>K)hmBc=j)NYm;I}&y6ZdQ$Se|G1am7{RB!|WM_u%)K{Xt$qxvl&0yt!$2jn!YWOqf@~j zOQIQAzbQHqE1J5;tQn2?jmBGCQ02;t9p`ARRwc|vd3d(zHpV^Q?Q2$z zaj$c)H8tm;xh`~^X2_~cm7AeET04$2lMvh!<8gDCw^W09OPIl&kTusUaM1`b^hydk z<3xu8fAbl_-ZZln$+ba?G{0YSI3D~6id%^GiYC1h@((oHA58so-C^zmGvi!1%N%ph zxo#)eap$=(*(WAG*8Q93er2|gh4e_%a2%vhnwoKLxw|w!2xq?gCo^k2>{@NMj(6)d zV1H_j{z8wai;?aK9mu`8OC})wPfYa$nB;5(oGeP^sP7SI0oFNtq8W~0IO&WDZl{Xx z5OTd})rS)uu|%{oALqABaHqKLTc&0ridAi9O+>NoH_Io&oTz_wLKL~et8OWrL^jp! zl+h!rYYxyEae&Tv;o$AZCb_8H9Jbjs~8zcQpZD^AJyUj#-KuZ&<66h2XIH#xfgN_jdn`o@uZss zaGrBij{~@maQbJ+`yIeTg#8@kXcT5BUWJ);?km#%7X!pb8vyr#fVbiD;=kCf$wpgCd%Oy3=jo= z6vIG)|AzdV6;99znkz?*9OqEwIQ;y`0*`f^DrGLNs|$=~Y*XOB!PS(L3CC$y;HLY> zo+K>V-pb+KNsQec3QDMPN99zt;~cA;Ib{C@CfhZ?=^?i$t$BloO{Up;9JZRN>k;EGyUZq@I;PGB9MWbq4{OXC9@d*+BMw_k|BX<6X17^k zkNeCXiaVHY&*1Qexsiu@Zy-xFS#wk$KkVm z%~(njeELwYG@{?BZRvscR+}}@gkiQZ0$L?nlwLCbwU59G>z;)=L{N^q0kmj*d_+Y|)_uoC3sJH*I!?~jzhfh%_jhuFl`L(Hk zv1t%@EAqd6=dSfk+x}kZ!TWXp`ME1&968E7_Pu+&S$wyDeg3*1+|7ac>VCgY{D97#ZTE{KYfIp+w7|d-# z3&1Uv7lCmxpgi0Ot`UxX0mi6f_1^&xQ~5FA^MpNA%)LnE$j8-6MiarXhNJtsu-_W|p|Cq1j0|mN%=ibDzlHd|aQstnp)$zWJ4ocgY;X(V*nQxmgu~~+ zwa07Z7*2W#yD*if?dq)p<0`_8`Oia>*n%DgM#5w!=q(ctGhhsTRtJUgFt(DT!@(O= ze+wAxPkF7)OluQvMVn}C+*iR`8wWMn_m3d2_&OYUgRNnmXtU zE|?k>4Aj!W2=Fw`YdT69pyaj?@YZ0lFdy3n=w6ijjDU8twP8Ye)jt%xN!Ymo42#)x z&H#U)+zqT12oC}8RXLhE48gU?fYXw&R03#bDl(z?OJJCo9HKTMx(?YN2R>QY!`v+F zr#cUUhbzMm!V6S?J9w6G>^<;R!gSEuaH*WQI}q?^4cGvO=_(w)57zdMp*fvB#9**{Bgc#b6kCn&)6S_p@$AhmB z_U;73QK{p?IY4h++fIoKpd3A+eSOjI4Tbz-J4H|ZqQLJ=G`krR2`1Ea7^hfiS=_ba~%ep=XB zh5ny-MNaq-Jpu1z1Rqx6qZV>-Gq^<9MFvSVonH^EeVq?qlkg)O_eyXV)jtM|oukcwBXSZu7mQk4rEXwtr`UWj^e7L$1)~{kfzT~eC^(rr z15&$G2R$J5l`zJ5C$&fQsq?dP6Wra6oHK1?4{e+-l>iqtNgpg6yajG0?4`gb3dcSH zPgXf(yqQ|KFOWuIZ9zAi;l*Bg1+1NZc>gLV{g?ztDYF>C?i1#oVz0`5-@IMyRbmmo zuh^UKt}=5`2ZpB$a={e z3C6iC4Qj%>id;u=d74%8L{FHNh=y7B)>0G}u2*!JX!)=~k+!yf+mbS`lRM6IF7t*} zp!tfBTw%*l5qcoA@IEzb%Dl>oKVoW~l{7+(CdFl1&ZcH}87e%-#Orw1dO@XGTF0AS zi>4{*C>k!gMmQV-h6^xZ%clzSDq7O#06s$*#}dS`btR7wj;g_94&d>^9@6FQ@5q+i z&EHtpyRE3!{S>(&g#X-MFmNb)uy>)l-ga~wm2>al?>nRhp`i=%3Aj;E;96L_z_dHdV7Wvz&)@`Q5ExMJ$@)t-Xu9 zj@!+g*4}Mi$1hFeBfQ>T$Gv9K5l{=v`XjvQ?q<{BNSsxhg*P7Ei<)=BJPF8i#yl#)V8d?3Wm1R-EHi)uIb?@j_AX1h_^x z!i9YT@LVjy7C?kvL{Wg@gzFP>>`J&{k+9wUgi8md^x;WBV9VH%jr6Uq}P0GB7^_~YOUh55{n%M;3z)4|Jxxf_Pd6Uu#5n9GxL zH^50p(|Vj&+2u5#7C6`e)&eK1z)dBdw;0?<*hR&;0%3Y#7qe&_9FeMbi70ss_#xro zT(H_J`3P9;mF$W}*DT}h!9}9aqH$fpq z=XvF|s5X}o6uFmxG5%QHJHUBiza4m!FgC{9WrWpX+Gr=6+*@ERZvZFbGJ^6DV;+|g zWOp;TRMWwghpPy2EL4`u2pa+R;xd99gOhL>L5}YP_ft7C3Wp1`z3A1{31ELNBP=Jt zR|zLzV6Gx;n$YDcf{blhwRRc76YoJ-rjJHIL@pyJrxS1)L5^PvzDPLe0Y*dHxF{Hx z5oB&Z;WC08qII~8AScjmxr(qlJ;BymP)yXY=lMo=DXBOhu4f7!Xk;=l)nLM+k0pN?ggbzye0Urs?!0Cf>Z9# zGg~L16Rv>hClN(sQ5^Mv5JgJX7kL6>Te6w*Yv5{OZd2vcL?*{=gxoo0i)Fz5Relm! zJs`LYJYIER*W?U5L_X&NucVe4+$;eJX7DFro591v-uI9{r#jS!9y7E0>f2Tyg|dZU z28cs;r(hVD--XzcVDRlV74M{q4h-t=@4`6q)f6?X3cquW~>eGR@+qrs2T*9mjeU-~BD z03&c3R}JdNuLj>K>@)6z!rY3KhW}BAH}TTj9A}7)@GMS#mVjV0rl2w52<7HhZR&9O z%0~w_@*lumh3)>PKEiP{TINh)|1W0iBur7zTzvG!Xb#NEtxz`0E#SL^W6VZJ4F^Z= zbfS)rvT~mp*}Dh)h3cOR{y}wCVwT)oI7I*9jy@ZA0=P@zN|MJ(PmTO2cz|%c96Unh z4}cMgkrNeQ6r3EPIkT4u2Zw{NS4N?^f0jA{hQ;i?%J9=H@}NB47$Zq`gPiaoPxfWu z*dQ=UOC|3^@F&6!YL)#)*o9MOe-Y+AgQA3Rh>VKrst$ToQ4?YIwxT11qgLRKL8{DWCF*(=YWVT(@@5gPW5$zD^>{nhN9 z>{T{LS14W~L9r*m4+$qwtYVxqmFP}WGX=iB8Y1`{MRc3uUBcX!Uc5&*cmxyll8DePvzRl;<+l1{==65L(bgBzBhQZ_I6UCH?v(Ec{XJHdU#)Srqq>0;A= zs#i4uLs6-=Vst53TQNcTUnDy3ca**)Y~_CwW>HH&5)NU7l}vTei46d3+pSU`Jw^ONR#cl&s@SN{s{c0B1@dj%G@ zV@-S^4pYsbg%GYXdwI6b^tjS4f!Fge)O5HC>*L;g%)+Y>IK#Ys6_&!yOmH<8zCBFK ztFaVbg~GgK`cpE~zLI3FyV@(p)6eA$U5|#@ZMJ5Ere42QW;aCcJ*NI599o*1Mf+F7 zi@f^&(H%P2Cx8=z{F+5x=E!*P54#}#`@dNbPc##s^h*C}Rh)ac!@2ojowq79&u{SF zC?7k0#OTqJhm9X|firC4Ip<6nGu4?oZo(LI{lKu&yuQ&p&8%wShi2F_-T=FP{*Ui6 zjhKvgnM}#x@R0m#&v893vuUeW*%JeRgWg0@qCL2sFrQvICkS)a=kyScMuYz#%3hip?V{m>Ky_)*r3h;1c_$Z&tQO<>vJ6G7> z4ZdDD_9l3RQznryn7A02Y{pB>*w-+6V90Yn5K%A%{F%l>-d;>Nj*jTn5q7@>Hx~A< z0i$2pa*YLd5DrcS<2qsG2ZQ?xyMF`^752{tBfnZI#h$?l3}_jK@vav3mVh5u`LAHK z0d*WSq4%n=`xE$m<=4Pk0skLh{A?lC!E+GLrauy#QTwX^+zTS~~6oWC?8w z3*b?4VGo0GaI~=V0r&*r@K`ha4J_?3x&>E?D0wjWCgET)SdGKQ2A{;)q%nr`1tM|` z*Y%B4L^^c9<~N`Z1V~I=qs_U@@D}+2B4ZZwJ=Sz_njYt;i0=yDijD>;|h9Llh`h zt7eQphLeK1?gAIuI|8e@yt!btRt#lpqflzCBrL?oiOkGFMdE5L|2?o;D^Uhk zYnkL*UZ&zD2>NNH72x4oqkB#DTbP_BAi6?C>?H9Ug+nxJ{0^1B2!@fEZ+Hv1;Fm?H zv?uZ;@=s{Kbh*SyB9FlaTud`=G7G+6n78?OucH+MXywE+65zK0|5Z3dt8jHp9e%9nE9HczWbag(8wldh70_*n=*lTnF- zcDj?W*A3iTBg2qst(n(&$-A)MCP>be(BKL%TF<5cd!^BZ$qC5Ps0x|49nyCRJC}nu z3Uh&!{;ROhxbLby%#r>d;owv7FTxJSp-cjI;%#P)aZ*3qf%jYL zYESXbG&e!?DoA0|T%+jCi>T1_dSWlh!rRnf9P6M-$hlb{D9$K1~ z`*0X!X7Dh{Z02FDss9U}RCe8E*8YM8*+NtOE2P8CoL`a7*tgBrU%ggd@T1xHEAC2+ z+iM#ChDBFPl(>`W^&9Loic7K5TCm}*_WD@?D;C~25 z=yz_JaBP=pb`(^LA=0Y(3?8h}ZUT=I4xTaNsd^Pe7>t=}^fLHfVedHbTf(sy&6=b9 zDsEQb4neANBJCZb(S9-ekdoWNG;ZgYw>beJ<0OQSJ-undd|=?sQ%1txa^diKGq#=I zsp1vX3Ju1@xyjGhj1t$Gb?yA7UhtvW-VP0T4}$L2RDK4p)+lIm)|AmX`{6BMa^fx| zr^&`PfHhg(Dhmqbe;<6f=*K<+A0r&1NI_RkhkUU%U}6AHu8;ud9WcfhTkey=cL=+f zKLofg*#f1^rlVo%#~?!bwp<;-T1L*_gMFIBPbS@7su`-E#$Yr~@E9#V5N6-uk~@R{_SJf zj@6({f?j5Ua!_ z*%lt1ELJT6+)WTuYb2hSFcuQsa~jAHWM3sdEz_!z2B z4qh_b5j@~TSXrHfJ6z(8B{&ILTrJP`kB<_03@s2>YjX`0e?jE#d*C;Pqt8vR4)9?g z`%OCd;Y6d=&e{QJrO%qXuUSzLbsj?hK+5puLE}#_Rxwc*pl+-b?~{u z;WuUulEVuSOON$Cxy#HO$0EO1aOFQ%6cR}jbb<)&mmVjg_#viUC%=1bHAFcT%?IBs z99#s3JK7?kEAkzFvVRr$5n*R77+sU{@NDpQ)jt*dn{aR*<{T;2c^h0VoR|fMyV$N9 ze7&SIioeX%@9bAKKL{bHG*jhk1esfeyK0j@Slr<^u zE)=N18(|k^Kgg$h`E7l#dXK5;<4z9@Az!(%L$#?*B6)T zmZtG(nErJ}Cu(7OodyXejg(+`b*7r_>)fW^shBjL<{uiJx((g>7&~h`a-S(a9a_tv zHPF7%)A#fP=8g4&HtpLUZRVVgjK=3zp6CuQPo9`JQ~bb38Ai@5{0 zu*oe4f1~_I@IGN5x_rxrI$;dlLYS`&xhNXtyui9O%4dSnV<_icE_XQA&phFl8E$d2 zd@FdGun(W)O?oSz0M>d$?|?C@pxo~OUL_ny{djZU%F!vf_kryG0l)8sW9aIhr}BH9 z?)IZ$R7xOmuTYy|;6p`;vn75sj5=`~IVmMaUBIWPe3e;xsb4i<4n*kZ4CW1eej1D% zqU`)M7@6CBy!FD-a_|;mejv?zTi9KTdTAM>?xx{vxWr^rGuyA{1;u6%PMgnz#+{-a zya&d$*QSn3Cco!pxt>`*8=d@CvvxLSb0`akIfig16=>0e2f%Ywz5{%%#zs~71rX|U zH*J7{hwQ`l{3e&>v%njLBj^UN2s;D7=&d%d_2AF&1j(MDn1MC~KjIbos`MBbPEH+e zPUlCtYzA;>zAr}R+@0U#B6D9TzsY5Fc9`|Ge!WAZgCRR#!(rs`V&Px}_zL0p#b#fv z-?Y|8`rN6;_`HK14bkw<;B$r9Q2fjmb%OTbxvGzNtSsdYuCx5imQ80DSPjE{@sS$F zzM=vHP={NwqVI8Ao+q&>_^APSVaDoKl%50^41hw!)Bw?Zuo@sS0;~q$w`aHmifJZh zfX^0oj|Zzkcw;bzFzN*7rEzkZoWxd|mUI1++eXNQAI_pe*aqA}I1cN?HNj{H_&k;0 zWtPwN>$Qy~A=9Sj$GP~OESmkg$6OSe-0v2p%o+prKj2 z0FxQim)otFg!?zJ7B4=3$z^EIZl>8~e$#CHP-q+?T8Rm!KV-F0CC<+jSsdMmpS5Kw z0aDDM1#O|O#Jmn(O!k_9>#F>FaC2eza`558aiqb`PBxv*VC|Ce6Tw|n|9`+;9rKUN z{L&FCz^EYgqL3<6&QKgG?7LYW8m-lw;iB=pXz)EoxHIBnHhUI?p>h0 zxogSZI-HBSrl+cpnst}^FX5XU3$O6IyMxWvEBxsLx?{?ro)*@E4;AGY>RY093qJ;T z)jS>pBM!^tlY1+poF%6h*eqL!)d>8hWUPpSC(M?Gen0M5<7bL&?5_FNSNeHB1B?GY zyBw6?y~vMwm@)3X7E{FGrpI+SEH+E8!~AiUDPD~EW5;b~_+m&MvuZJ>QP-Mni_!Mg zORmQ>5G|Xy+qAwOf>x$4B-my${AUj@MqKX~V*AmByO-H~0s9 zp*CpKwrx8z{01byIlt%ze|#y1RhSX4Vf?obZ|6Jy*+0lP2VLkNYKDB`Uy^TfpWoOw zGd}a%n%NKdJM4V2!SDACtM9Dpc=uvz~{u&CXSRRZp~_gK>fiK@;#K;jjhxQekg7c%I7Jg0B&F;r-l~&$!-2 zX6VD13Zh%_#cZ40Uhwn6{;S~El%dWSA8fSU;BSm+kq5>KqLILFJtsbLk^~;GH=>>$E$pg z+4P8C)diK|y9^9=VSB#IV3WHVe6Oma4&I}}0d+R0{!gZQH70FGn;xtE$_iY4`R0O6 z2^S!~xj^<7ngs~%f}z4UBJ!Jn?-J$;s=$TH?=U-8V_F!8N}(!4 z!CDpW@(8AB5*xwjV@!fC3~={^P3|i2t-{_p;QN$eSH7%Zvxf=!vI5yT1Po`g@;ksE zXrl+$;Y7>DS#1FCvr4EN-&P=dyCieVUBO6<9IXYn7WUz>d|AQjTmU{<*o7_lvI6D2 z`5F#a{j0H`C4{1luo?lggu}N?%SUnjaKAYGzXd6 z^Z7yoIT!<0i$v%STwPiDB(Pe91>g$_l=I^ZF||neGI)Zfxh{>9OXMV+Z2CWj8%y`3>I%F7@pS^m^>bjfG?|lmzD{7} zkAr{3eOR8jw`06dXuvPvIvU{y@EIz{hpF;@(=&KKp05npL@oqhuDU5O^le6HWxg^% zj-CQ*>+nV~Um2jB4{W$8!lu*Jtjl8*zSeBd`{jJj!6(cN;f}3jbJapl$u`2#ZKmN` z#OPsa*825o{l6nqZFa98p#P!jqr%BTfBGKt zHeYq%ZrBiUxXpkM54a1^s->_8A50yu5!Nhu98=-8kWAE2YHAU^H%;~9{;-M& zQ?g?oFUcWR~%;(tNodSM33&{svgNv+2A67yOSH-HhFU z8z~2U%xOV+$(PK+W@P`@FpiJjU?MQyY-5Bi5dLUq2n`3B)*BJ97N5a6aE1`J>Dazn zJ{5EFjQr+}{-KRx?d%j`VS3O8?V5U^3E7mapFFKk5b-U}}(W z_&@&FUcUG<{~0%TR*!@8Uw`hWL*6{)%)sskxWL4BLBq=PYxpv^h}dV@CxUB) z{n_A?G#WY<->kGceZd1&-U>WgIOqvRC!`Js70xfn;mzPnh3PGvU)X(#;R>8wqX9>O z;V6vYp+h<7v}8W3;+vJ0SA!oG_TK`p6Ap)g;p5Z^;4Peekp1@H|4~Lao@RmcG<#kmTZ7ai|q;RZG{tqmVi@}*3h=t#5vTdbFtLexh^s1#>1HVrhn zKSh|s9KQl%qhUzoS759T%F1aD**_J(yM%dp=QM|MzSziVj*UAMtVZT?Hb7CVf4WcM zL@n!n3|7lJ=m30M(`L{GT(InN@bN0|3ZAB!9Ri-OjJk3{WHWvYe5U4nuRKF1TGc!(6XEWQ73j1xV7qh z5ALWscYhM7zCqOpMf#BijFg#&1a{@&6(3>~`B1crZN+T};qxmRzCxid2`jyaw zRVWWG2W#_UN1B}+QO=DWoE(wqDx4fy{W-NbQL`0hM>aw=%ywaVqo(6G zQ}`)+%7YWY+Djss6R&8B{%-JSVfPKNwz1m`ti6P<|0d?D{`KH%gu}_;n;Xjs@38VC z+02a3&=U_U_c6skVAvQ1(RL9zUxBsRo!7x|c1Gjd;Cy6E_PT-Vs{A={6JdW9_z2+` zS~OYcBn`kPiJX_rXP+F^s2tE5&iXak-tN;b1XCt+sjC@h4{484!cXC+DX zVXOa)$X)8ca)3U1sMTj)p9%-ZVryp-&1VyZYot;duoGM^9HDhmu)5VL19wvX*bLu` zVa9H7oh~xI_K}*e;pj}M#lr4o;AQ)_0H!cNGd&M2o?4A(gRBVt751xgYclt%7QTj& zdRO$rt&pQ^oZVUdUvLX-uU}e`!>lkZ8|wHRD_x@Lzkz3H{$KFz!RQR# z)}ryRFiGNOE43z=JvdY(p|wqt^!I>2(yVSZ)jwm_d9AtUXDkc(@<SyaQ)-9zkXW{x%=Pf^r|5Hyb7cesg4eGU)9c zzT2$hX={^C;V{(<YHtu;BY+Wjq}B; zuDea^Y|w&hyx0gch@uwT?WoCw(tJKVtov`b{dK-BxKQ>FR{Xmgdm~4Vz6)8o#dvi5q2szk(hI=Sj(u>B|_hBk7nA>=)U zxk7c$5a!bb=S<-^1`Tc#q&{EocP0w+y#@!4OSy;P)R`;H#Ugid*D`=(EB6VK?dH?l zgcIW-ze_ll0b@+H2|WdVRG43wa@GsGcY5AFkGK(PU0IxWmxOcY_BjquX(Zq18!&FA#Roz1&NL{m;N!$wVXY zt(3z{`LYYQaxgOAjpF`8a$*qpV~zYE7^b&61HeBkV`Sn>V3hMYDmN;UV*&UO;W+xc zcet>NCh%YZ>iC!fc!{oZ5?yL0tqAJXCNZFLA0rj`2#os}$*D^4Jmp)!%Z0fS%zHqX zHS{nz*~C!^z6?fo*MVOZc8&vU;gkJP2rYbw=E3I2TFDIN_79Z^-VQJnnUJ#qJWM!h z0iLe%wcz=}E_JR`?hZy_8JCk*u5HNtP#CvRlEeOBwQ}kcG>5Nd=A$j{p`=m*y@I## z$bK_$!L)w{t7$n=;f6Nq#NfDrT9#iS;PQlWK7-?35Hj~Va0?}wlU;71Y{@wymwMbo z$$-=w;3tK-`5{1?QBEraZ>r7&@JGV@>owfdV-p<%-X|QvqG3YV-3x}_P{&&VM$?k{ ze7-iUmXi?P&8?UWNYn)*(DDxOKxHJzt(cV44>--T2|Wy+ql}tyD<5BLUL~=<=#T@9m1)*z-mRldd9t( zwh*1bYONIV;ecl4_kj2H)r4SnZq8%?Zw|)PT;c6tHCO6huv&{FUrenPz$rPew23}y zw%#3-*EWafLJ>KafoE&*kzkBXROOD57>q>@FplvNHks}i!^M*v!3AS~QJr(ZTU7oc ziit4la4%%Mv2bb|7>#8IS^6HgZ&E4#1Af{9gP(d&vNw3B%AWz(j+GM+?ZVGE+Q|LE+62)C@FJC; z306Pg+BmsF7dtcb*^_g%j?`tG~-5-IUakQmI1b)Vm%m^u1 zhRn=Ta89y|0`VeCPQW_+j3b%f&*Ens$v%9apK&C|mx1RA)1gzh=%~(VMhXL_jeHWg z&}Q%leujl|?zG^X-zJ&^zas1z@JGT9oQt1vq>eWe{FSgf5xhq@M1}boN9u&94#%8S zM{@sOuyz&Ri%uURN1o~r~Vo!A2YOqgFS z&1jX~1ZLPMJas%AvuR=XK5%_uZk@`iC$m`D>cR{R)xq`w8##s1B-=+gJ_KB7Wb{RT zHia3`nYi7R%$p%xcknZb{Fl8}<=26=@A4~%{NqrK3pywi;|4D}=7a}=x(yPjQTF-$ zAK%ZSmNxO%&7=o{$_kW&Ydrg1|2p7O3HE+8D-rBop5OXFFv`o!#nQ20zfx1PDyYJj z?I*3mJa;7)o3OMkJPKBZ3nG~nEK`qW;mfqLe3!axvgjmE2HzsguQTym8@6n4#4?PM zmQkUy!qB_`uYt7^d8`w7xLP@ygcDeb5dtbL5q6YyB-QeC(@Se-c<3*b*R_7SGXnqYOsz3{(E5v5v#j~7ndkgxM- zFr{8CM)Z#AVm`T@hGWd@*x>-yc-+j@QTv?bQ$)ud33=}Wc!2T?kPkk9Q9)awK9G-A z7Yle&7>O5x)#`EbMG_$am+E-Q0X$cjALr_L*#WFx66*!|Vv$=m!rX<|QTqkB*6Dbs z1n~Whj;OUQ9r*!`fJ{3+d;n`#^_kE*kz0O7I4ptu`2+Z`!tQp+Ups)`A=hBsdk_Kd zOMqqgFAEWC1Np84_-kQKn>&72;C#22gXxFY!Z&`u%YkP2{ej?x7<-Wx|9P;|?{_>_ zVhmO}7cGTbQT&)=;Wk!)PG9(YCc)2eXVs6o$!!*<$rsxA>D`DYv3S1b$KaR%FHO$) z1-CeA%w`_&Y1LnGSZK!bu*t0DVS$PNhQlB;h=&`^Jv{U^dw;_{mBl-6>Jj$#uK)6; zr6E$eX;=6)zT^A08&1c~m%bikakHF<6=t^=9**~C8~R~WZ`YTm#t-fD$#l6HPtlx@ z`Q_IZ&|k~LEVG>o%V3MP_Lj-~YEvB`pvDXe!UOM^99@0PF>TEqLD=%&0&!r%zwCts!{$1#raE{SD?^DYTFgKo~dB;@3`U|d1SX~_68C7Hd7 zFH@2^Q$=60?4$Q`t0d(abP(PoIguwW3jyPk`6iBYuP{H8?VuA-9-jh!QkctZXT5N? zuh}yrtZe=XME?*`_#u+SDWfG(b{FG0Id!k;d~sOmUSo#y(8?^pp?M=H+@s1Zz-xs4 zH^EqeBF^9HhWPd0lmL8Cp45ZK11@-!Gfa?}9) zmCD})|D=rTN}#ExFl+{zs*lDD3KcpA++OrkD1C6EFrRP)7&vTR3&9KU!WU06s5W7HM{721`mvFWDStgxz0 z9HJf~O4S7q5Ki|4k5qXA48LMD7;(X@u(AR*3GWtB67~*JP@8InSwAZ*uPBG1a802o zm<^sGoch4*M(hzNexyZ?H3L5kekm!~%t%I`>taV5=H>)lU%Q1p&zBH`j&XL%Q5|O(SV{Zw^zB9$M!}2a$ zP-#ts%@Myqf|H+vuh#s~m-tN>mX8mf}_ClTdGEb!JCD7gEXNz#8JzH<`BOW{H5sl4}yOaP7Ou3EEbNP06s{V@33+i zW`@*;CAA?=I%_~4++CP|3Nd-QMxF~sQ`oZOI>%>BWInr2!p+Hv%bUhtc%A#!pZXz5Q9zm-4rGo{|x-0Fkfrn?O)1cFPO%2!g|>>5>KJm zQV(rEAn6~q6V4-?2v9EoE&e8=Y}VH(LOV1ZdjQ??@l9UCY8ZQ z)G6u>Oo}M=lUWPxL*qy}(@s;H3O-gi`Wv`Lb-%=$2w~-blOdX`s_0Ld<*K>~tiwdY z2d@=57k3$iu>`#FnAs)lGVUJXR2AMt2&o^(5qZvfQj_OrNgquo>&JiuX ztXVW!IPsI&K0oZ#yaJ*pM8w7|LT1*S@Uo)UgySo*=Ra(ETm(ldzD1+M2*q~`(+GS! zv0#K^?e{c7@y8;E5tc6q`*lHUmGl%*@+B}zXUo4BJWM#z4}6}mb1GPUEPj-!z6|wx z5WD@us!SC^U`ED{&ohfJ3%k41&D)oS{jgiC_2pq@Ejlg#zO1dy{otXRA^`{c^PGd1mkB7%bmJ$W@xuN#G^IiL|M?0)9LnBG}uO=2kQ5im-b{BTR={I?iF5 zZe4UL2B%NPE`OxE%j|-dd!eab7~bOEi_Q4(r2b|f&qkP~SHg7n=GR>r;!l@$Fq^Kz z=~ZUeRpH(6w#8S6!(2bV`)W)>Vc&+=;Br=m>G32CEy#iI$T!ed;1kaVwJOK3)nI{? zBDOR?>l&twzYKS6cw~d*K1``mN0u;I4%V?X8e_Ixi@ZzoyRQwqx^5TKZgF^>+sSNN zjN-m;_AIsqtA9PJa<3VFJu0@!%(y=6$0gt)CrifZ6=1jq6OXMjJFmwiIrE!|-w@7s z&oGN_2>;?9Y&L$w=f}&9=n=o6Kpwn-MOo!bp zd5`FFYi;G;0-I`sD=x-^W*8$FJN}%RK@sfJ3>}1`=oGWwgq2-jl4gBH#BXXf8z>xu z6Er*X03InEzZ3Fv3Y>4eH2kn}Et=u?wckv%E0X6wZxOB;1-=zcQQ)63LMi)=G13$m z#Vh==7avYrSo?7bTDPDB$1JP^15}zHOht2HiiN()KXPe#qujW#{5M%3lEXfFFN{3O z`Tg%&hG^ZweK=0)n`t`y5MOiUD82vBRPq(Z76thLC;!Xi;a?-{j@Yu^t_d4%z+tl) z&%;8qjt9r2H{#IW4CP^lS;@nCvu`7onHTIcy`I4-{;DDm-OQIf%rTue;jqXo;$fB9 z#>05i`dP%daEqB`k2}p4d)#drKF2uu@y~_Fx!&YA%*yAXH+j3+XOCZ+UYmKo*DTwN zMQk@y=LMXu++#++fN0oV`vQiKtIhTo(1RPB;67N&|ZIABQ-hQt2*;)C;FNIxCi>0`T_0Re*i`e5D zMLYlLnZMlyP`rQPdhV#IiRX^8(*0}S{L+J?YvT45p8wYxcl4N%)6T^wg4(o*E_VOj z$~J#*%V>6x?{P#l+B0*TMRm zhw48A{!+MTD0UAb+$wP$?4~rr-_7zrMCG;bLUf{toX+4r8V^QthX`kPgC`0HSAj7X zu=x)F<6=gRQ@&WZ2!?SnC|mgrV9a#L{M!KTUxfJGHUk%p$qx->X%%U0K6GY!dnF2Lt3dIW4n6Y`_>ol+C;9J$NWB!LJIJCPqyVL4Sam*ck zqq?;*Tvxe`m%_yB;C{jmS|l7U96b+4%Tb5>1w-wvY}s(3$m5TIm#F@Y;1$A&v0#KT zE^nTN>xH=!G8(C_Q-m;nfYN4w(nd3d=`MUaX$uG6jBZkXAN-JTb{Ke_FsC_@HmTbe z4EJH&QcO3ZUxYK~!zxLQ`>0uS8a!b+L`a^heBc>7Rk#R~ir66GVw62LMmW)ak;MKy}cfhbmZ$>C%1}{rM@-N_bg`JPU+BLWX zl(!J5U-APO!!bEA39JPQnwu4;M^%~D5c?8be7o6xdQ@I90HS6pf>n9%k+Cxmn&N&4 z9t{zUMo}@w>;w#D`BhWX4@SBSjbBehMX+VEiEs%#EU9JUUn${sS6ilw!KVlZjlsyB z@+8KTDk2twi0=Ty#xk{K{wMlN!2)BdP zkY#UzVPz&%#<)7Hr_i1FNmt5Cx1rV5Qh0oAKj~@r3uiZidkDwYf%^;luY-pR^99tR z@v4tP6rqAlKUoRBN;v)=7?q>E0iSsl-K7C=-6BL{K)A$g8HhpUScudelJLhOb%&@f zSluC$hqtRcl(qvGNfJpIs#x72J`ao*vq{5UijNXbzY9K9I57u2P~+|a!y_U__^Na!aBxq29n1_k)`|DFz=Oyp2H=hsOZ=X66JW^&Ek z)E7{6%8+KF++>_N6z(63wJRV=MJ)RYtNAx&Um%(oRGwrJa+BPc>LfwMW4}Sw6VXSZEHE=DGr?Y(y z4A*m_hM$;RgEtMUjcea<6HcU}ZQvEt=OxAY8vXg}hr`GF^L!tkWvr4jn7&@?mpNXu*i+O@okeA@bX3y zQ=$!%>A(q$b+V>9W1UPBVx*&!HBsZl;Y!#$NTg4#^qK35HTh;Jir{O5PNrEiQmVfT zzSuKY+;o+3ff8xD$+#H8R14`Rs4Y#88RxNLldlGPGi`d;IiWlvq zC#u=P)tolBdOi{EFwTgtHrAG$&E64<7_XUpM(6(-{IGGU0()a>L3A_597G=V*Ze2b zN&XV%+)?w(_gXJIDHzhF&#LsIdiC+jy$&?x%r}uA^+iutuW2R^PeD$VI<~6sT_kuO zxi?-q3$HT$NRB7=uj=1#^1=#q*7-M)5Wnl?-J(t>_E(|@$zGpY1T8?X&~T^^Pk)uX z$+P#uT)pO?L~`#In&eW!Ei@-7l2?+XW~_8>#z5GpTe_l z%k-eRje6SKpH5p*_SWf8jhA8XwaE_GG9&1yP$s=UuwZ=|uJ^~5QgObUIU_hYKB0T% zjDQh?3Edk{4&F?%o8#(Jc?hP!2K>rmX~<~6qZX@F=e7_WpXxq2HTZT{8e6w6sRqFp zRn&v9NycHx4LzNjsx&S)QR#IU6(twYtPH%zIEO6kN9n@qhNgJ&D(YvH+7cAw4(THEm8!MWM ziOGdHw*&U&9`Ra}r`|@sz6U>JTpEb{`5ydRXPIU)9#2~Ug$RHXR_3C1X{y@r^FxROJf{u7GCF=!nK3rp;eCPm}Goj|xV+ zwp=*T9nltV>Aor#&dF7%M0(B9m{WNK+-RKqjq6njTZaumguf|R57Zh!5NjE`x&+0V zccK9VaqS2EtBOxfV+%SSVaQ^(k)GbXmC(*nf6)->eSJ|fH=4arf|i2%;G0vEdbQGK%~FhP23}l zUe5INB~ff&f{*dh8sOuNbH9PlG)}IEaewI-aea*oh{Hkfa^pO<(zrk*9|GTNoT1Iv zxPat(R*uF6-q|DU)3pfq@#RuF1*Tz;Qq2YMVB^F$;E~3K1@K|U`cSZj1*ETuKpGYh zmuRFkEFg|w15-sJ`3~3@Q0*$1cDG9bg)eh(ttk~rM8g7-XDjey#=0^M3rJqf!?c>> zkUeFx~oAfH;`u*0$g+-H7fmQHpEOD1d_Xq^VJWC>nOtD1f*~qp48&&Ej_Y26v9(44A{{O>jd!}Q_X$f~+JaL<0Sd{S15>xev2)>0W3BGfP=Mq$ zxP^uS#41e<1&G6=VMb0fe^f5a+2^+Oi|!t+2O8ZGX6Gk0)SnkJxkY#ik#S6}5GWTgLIUWrsM9qiM?y zagI8y9Xk%!fjUXU4Hi&yGE74uxf-#MNMbEh$#}0TPKOULd8XNo+cO-?&29OfVXO8m z(DX&cs9omP?in`cv3kwFn<)Q@dkd{D3Z-VZi3+rDS=>u8GB3m4RWkkHfhJGRgFB41 zdxw_ANxygtJl6B8us4`GxwF$u9^xq3Gdz>$>|)&SyZvy#{7W4D(1(y>_EzIEbw{sO zIzwp-jG4tcYqnadII-5kMe_deAB}5qx$I73b(+@tE32gm)|6T4Cw~sN$6RCou&xW^ z)Y7;}u9aK0NBeXp!o-ohND*qsTXCT`Or00UUV+ayPQM6$-|NhRuQ9GcR{LY))HwJ- z<7j5%<5=PrK0?%0{E)LJEksRTu3)T6mGfng!df|B23o(BJI?DbgMB@brE-^>JaF)J z#+j4gpBkrr4d3k_N_uWbQ=eR9bI`WJH?{MN5NPyvV1Fim9YlE3qLZ} zc3T=9mQEROFRVA#+kfGCZUL7pp6;1K)pyV&FLlFR#>K(#_l8Z~ql2b-{n-OQ;gS~@kq_A|5Z=tg%aKOo>l)|etXG5&*4og#w)jE{?h3Ba|B`!=l zA$6p*)HwYP?3={|1})(T(otqg_Zz34fHxS&f1l$3x0h0(&ULnhbUkdP$U~DQo`mat zc-}2<3!BH&(v(M=sPIsxV=?=mi2OP4e<$+e8H4(AtZNUqM8 ziyp4)+Pq_GGI8B7Q!0{B9R;okMKV-3-ng{HtsX>v@iFzVE4Z*9j1P!4-JO{SF6+NTqyXcX;6JBbZI>+5f5?#MUbhnB0{-`M`QcdBi^&}~- z#hmJ_6KfQzeycG{)?)SV8;5=2zZs|c^NN=?&XP_;AL9aMYZz>-Pd7Ah+0o_XyWQly z!;VAAa>L~oUK$TyXPo8|8)#E>{ut+PxZgO>IU3d)XVS2 z)i|W28of`~90QYeC9Q|d#(j+Q-*){5hfQ7i=a9|t@w(w}8YgzZOME;^yYV}or@;Oa z0xq@DUqS-QH&U`Xj|PMrpEk}@VvXLkg-hWrCf7%o8vh*ICyG$U<+O-Yk@L8f`WwZ% z$23ua#f9_TmciT-qV8|JH|mjHO!(mzuIG;?S`F#eR@~n0JkLyY^V&n^+&<}6w1?AJ zy0)V|)XeN&`|yIYoU>1O>#zm%>CU#`^nb#> zvgfG*y{IWlF3t7!B57qMyQ}-ieM4ptKjJRgFKn$4eGkkdwVEt^n5mJ)_4|d3nSOZ4 z5VCl^>(oz&yKqQ2ZTk1ijzQNL}y$rs&dP?|CFXw7{V?|}9h{yF_ zWAYr<>b=h7xvB2Rj&Ra=R9a~2lr=phw2ZT0ZT;Btb+3wdw9NASHmtgjzW!SL6=VD@ z9oUzarR8>?+&%DJ7EQTmdCO&GjHh}Mn;CX3x|dG zvaoIR{^5W~<@M^9X)hEY|PT&x1B0B0oEZ~Q{OK<_AiQ-vZDs32Ceose)^(nbg&*(1 zIKH9K!c|P}rD&LITS9v3~!*i;J zN?YZzGy+wo)v4|YrUhhs)giUNS9OYY`uZ>GPoU<^>uXQR z>gYyr4z=CO!va;f$}<_?sPaM^-_UuPMA1F<^ze;vuLkOWZvDupz|RL|OETE6wMypX;2@;o{A1b@aRKngvKxZlZpA zxs?lO8xC>37IHM%ou;2o_rO9DU*e`LA}r%JEkbyj>$jMn^W40};Xcf{zF{%$uwk29 zyEu$yIhWVDZ4%9SUDKTR;sm3Ygo6@K?QoqOrbqB%(>LmtJae*Jt&sUU+$&4Mo{M#d z?>}sm&2wJ-UiXA^!unz1V^NpmzW<*t$7g;P)~CCh?hadQ*Rp@vhWON3C!cZV!ufoT zpnKRo;fHB=!~@}||8q|BIS+()#ock!*=Ow+4~5063VFlk%d!St*lC+8HWfW&) z?!0xpH0+Crn~6l)Ku|r4Vl6II&tk;WVVapJ+7&R5vf>QCnwl)GSpchTgwuD!+zG_t z02ntEYo}ZFK#H^6B-U0~+ObTW-U=UMoZ`+NpXoUV&-FT7 zvw9t)bg)bOB6=XAgbwDwUq|L*n2bmsz6x_faiSA`!&n=G#y{}#t#0CDJnvCd37_BK zJh0plcBkXY}z;!5jj__e#IRu4;8gMnH-EY7~=CakB;{h6D$9!H`r*U}Az)Xs$; zF=qFYX!UR;$56@t_Bsh}9X{2}8rY|r;E6`7hov8)tJT9|edRIbFFM!-`-|3#Tk1l5 zOiG&Mn7Yy;#C`?i#geB380Qzqhr$mU*J38UEJ>bhfL}6B{1D#abq2z;yixi~VSfSY zRZNE_r{lui_&Bec4jCql&iNnkIO7a8KL-8<<29_J=tZt84>*0(~}7GqEI3-36~QPLyD( zujJa?O|LLwWjJ`oSbIkWA9BGR+FC3e zW2|YZAt#hh@=x&b#@X4f^kmpvp^An}y(;rRV*NnBiC(~*ie+R}Vlw2(}E_14}d`a5_NUp84GRwWrNib*kFOVJ)F;S8Bi zEFc*pZ~PZ2QU5e4O`N*#nhj(ZtEzKAlA3z{9pp9f{TlBk+Mc$i)8y(SQ~$U0lhg-& zQ#WGjOwCT?6t0owtdgg>Oue9rW!C)VmBFv8T5#EOn^YTB! zzEr};;p0rM&F8YSJX18;vy8R5T$akHlVxx#jZcXK(#Uc?am_y3Ki9X6*&_(J&qu~~ z*|o;$7I>p^_Cpv8Lq<-F2mwy&>vz`w7cO^C;jPA!G~N%e-B$J?codJR6^SQ|Oy7sQT;0@7nR z=&}G!x>p~OBGfzwU+v|K;g!a!I@-!B(&_ESJ;S|wDx%+-C`F#MzpsK5FTr@DIC&n7 zgGA9L@=Q#rM|>n)tz2th@9GI$y)e*pqK-~)>>3)bg0F5d>{2+2S$RrGV@m}R7H9jz zCm3tZO5qgaByLggt{%SQ`fViddmy^ef@^*W-)79xw^-p`V||^kK$Va3`vdrCWA!H$ zUiLb-!~VMUxK{YUFMz>{S*c^YweX=oJR@ug@ z0Va)}-tn{23?Jp=?v>Am!xQm~-R9?c5kswhFH@6i*6;hdTFa(zems7dTmAwq?-Je{ zyy4?iyT+8MrM~Lcz7UR8Dvc*rW5Q<}XGXhzFNV!uQ}8c(1k;Ep`v$ z?_kM0x=VivM+a47_GXxF|7pyIZmY zolD&I9q7#4-I|>|X`SY_>^@9W`xpXc>|KcD}6K700eU+Y?@Yh7#Ywbwq} zJ15T5*F7>%zrVVD_SwxEw|F4$;`q;nnx;10N!R|5fB&d~m+H(QU-*KGYiY-xp>&D+Ht|L<+?I?euz&2f%t|7mNvPILa* z7N0vsbI#n3j@F#tjeoj%td`neZj(zj&tGjv7iylL_i1td_a8TJ_ps)@uKoXuE&l%^ zlT&&4-rT4C-&_1Y3jTY?{^V-y-`e8;ZUX;i{P@3B`ZF>Q-Pv9H7qDfp7%WcnME%FCjv~aE_TRa8-OZzyNq-5j&+7|yiGEZ;PNBb{r=M0Z)>E{gp=i6%w zwe-Jri~rpj{6+flzqNLMkvZ~?|Gnn@%L1VN|5q*W|6BXVj&9TbJ6rs}qx?7M#!r>D z>Xw<>-@1L-QLFl&w)h_j|Ld~ME4yody4^EV%j9ik*&lCl1Y|Xx_`kNr|19&IgHyEs z&Q{~P16qw67Hc&IA9J@{&wTAKw)j6+c=(W(`!{Sgr#042Z}HOyd1*P?sVy^0%WG8l zKeMf#uH~J%eP6ESrM7qq)IPt}KJ8!KYTdkAt2Mjm^!9zBR!eOKgO_WkwkM}+1#0V= zf`4aU`<#i|sjXi(tu}A(%+hKf_b+K0>D0zPyIJ#QEfV9)s_G@QyNy}jc=YWhYs+T0 zGn@deda+jB%ESAO9DZ}};eBr`9y4G-@!$b{ZoZ)}r7d@A(EWS8Wz=@B_hLG-!K_{7 zj}(ikq>i1H{f9vVhV&gg>iT|57CcbHPwhW5(+mDkO>!*md-ISHHxKSt)OX41*+1!Y zu$JFTy|SGuOZ2&|9GWpaFFkxJ`n7#W_34*rwO}f(c&BD;NyUN=2F2k&ORjrzWH@ub zrfF%KR#(?Fdpx*`aM(&5c%@Z*8zkq7#CaWjm9Xb?a8F_1_u&4*5$I}zgoCZYw+M%x z1ILB^bHH~9o3p_W2uB8kXA0{k_%Th(;bMh2hKA7?LJRau&E$*dI;wNXFv1kf@49T7d^jXs9x{T-cKd zzDGE)3jCySa5MO2VdF*cN@05s_1K$V1J+HH0J2fEx%$`+~a&`v)Y#ueHh?1qmw6W%ld`t9&Dy5`A9F*M}x1 zzg8Ttr)kzDDuqSh>y&;E@H8b~1%5u~iX0 zFtNQ*;x!CwmpdxL)z4*dfSi*UElXi6t6>_;;=*}~2PU>J;b zoLjJ=DVW2kl+#f-a1Z!0VP8}5F-=Qc_Ig?zp67{(-1-Hq(hQ-#p1LCUpjkZ~gbkF- zbFpyrHn3_KFO23HDDrRt7-ixzL~DWPD)~=fxCYD3#^6^qtveqC3vqxJVfHM;hVJ1; zo&f$rSVKh5L1Cvh7{+6rhymj{O6P8{^2gw?MClu`%ugX{DWUoYV3?3&ITI5@5Q;I# zi)L{p8DLb1+1E8O_l;N_#q+6@*%f?ha0p)tE*8yb0(^_GfxLWbvWyL4|Ornx+N(N(U7S)Kq*mxS`@Za6SlNaN|PwkYHet zumghyMhn|WFraGVLG1(giah!b7#46XcNjchSdW9B6Ar@-0%&a3(a_%lZwUuK2fGzZ zY+GJCG!{q4CB&JP2(O5BMw}oj!0|$T#f@FQ5{wGFd7`fb&k?pB2B#cwH@KU~!w)Bh ztcYb^1<42{c^+IY?E5`2cSTHpGO=_;egR4pM33c^xvhii72gSlkFY#=VWI-5bq4(` z63asQOclC5QM59a*$s+ z@Zij%s7x4pw?Jt8FuaeM8zP)3>^u!dk7Bv=5?D2cAC(EW7J1-TaAy@4o)^Ac>3^ri zv~X`Zu;DS`n}j`&BxbHE*1t=vU6rp-P8`7hHHq-**yTt(;u9SW@gh}}KAb61Q`k2U ztlZh00dAq>ux8{u;lOzCB}!hN7`r+@j^Qid)T7ajj*@EqabLy5&m z;iRTj!p7-aMVeMQAna+AIPi8p`($NRv2eXa)|&iKH%NA=)Y>JwtjX68CWfquWuhgj zG|{vyq{Dwznu|{8fyCT3#rmg-jnIKbtK6<>HBvegMaQ=wQGw9g5c())aj8)BcrKNv zVWMd57(JR;xVERhH{rZfoCyG%1CW)MTS~a*A7uweyoDezp-fA$OD~AcH!I!w&Ui9Q@i{Wx^ z0NSkD5(x-aODtNyA`_!RHq@g~<-hDHDq18laf4gq?3W}_KBHwPCDeaiV%>(rnJ;Tv z^;bn=^asB!937O{{CURUe<2b)?Mb*EDee zyZ*sM%kQzPnwauEN7;t|gA?_RcGYi5j6M3O-h4^c4{db);zai!$LPN$HviaFzdn)o zQ&;`R#PFZ$8BQcI_osaQ!NlsHYTIay=bk(-!uthVn)j3>F!KAXzlsGVcJCdyhB&pR5)1$t?fV6@bM1$5+$X>oe2;Fn(gyiCE&k z6R{h8yF!FOblvsMw9Z@xmPOfBdV&BR9&a0vGiHeK8 zwpWF6?uV7U6H0)g!;OWWqDPc`J2+R#uYRbTp0B_1&}jWGz2++w`bWCHfp$)>6{G!z z-dsOId8R%_f0mZ-s2!shO^Dv6@J_I9>CLIGtp{nq&e}n`#6qjQ_2YLp(iAU8@^H>na$?yjwSjnFlyHGGc8Z%+{&tBZ!}MOpQ* z8&0M5^jHZdP1@z6V08pvD{L$Q_ZHSqg5g-4h;au^M(j97dJSiL7THDM*}^9LLR+X9 zBf7RsMZ?&vtx!Wc9G08S!6#H?4DyCY*t!^8N!V#ehwAGYS$s8VpuclG{xi-~ z@#auY13lJy7DSlPaIifde2=h&G8+#G>oAz{nBrovDy!97(85=${1!Q zn$#m{S`)x9Mh=&S7qP6)D&Pz7l`7*7G^C*(%Nz+2W;|}OaWc22D%JTk7s2u65Miv~ zVCz|Is(2>z1|@$P{FzDuZDQ?HdcZDV=fPEMXnf0UPFU^TPOS z!{MX~XeqnBihwh{jmBmrrxtZ9((~f%98OF{yaBA5#QquFNaQwJ*lDfOm;+XxZ1o0T zFLJF3c$i8Dm2i|@_@dEKcCnuTD}&gdgI8$RxP`GN<3L%&-~eS2=R$DGBIkgWMXV|C za%B6Fwu|;Ic$AXAOY@82 zim19rxsZu!dDQ4&|Bl&E%I5G6FHGQ?7Pj{)Giy(S9}&4-4Ga^ojtyV%z9?+Y2fv}@ zo55R@9RA~lHM(;I9d`Hbk^pTx_@J+UwN{9)M@l6-DF*WtUi`-J&3tlK}d;@+>>B9^@xF+iu$kn$F z8<_umsxd8;n3rr=$7%>xjcGg%hAHW)61}>uXkz}IqODDlVm>)%=^Y!h2}7yz2qp|&rqo7&dkO0>XK1jn z)sV{1Ld%*ErCJcV@}fbi6+&+aJ7~4g29*Tse5&{gFj_igybuN>W-T9=IDTQf4_I|O zu2r~D>7;{EGsd{d!+Ntf+7D_(FYxNxSA7q2z0e^xG}>hF|DZe7@mFO`q3W z(Nk}DGL!S3*JB2S2AkP5?JP{*zIst#;Lk*l;K^GyJixvITtzta9L;}2&+m-UQ7aZv z_+~IhLRJmD4sNGZ`-0CG_UC{v5;k$d(YgzVCsO!LoIv5?8qO)4MCf)fl4lNLq|zn{ z`#8D#h52TL_K>iRagGOH*4N;_+6zj5I5;UB90Xo297ccE-V-+9Ga3eATJWZxmbn@S z7^*lS2OUSN5DwI&ja?K;hT#t1|D;rmeDEJ8&_GZ;EOkoTaj$8_!F6?_3jIz1Op?(IE zcljgAS)u2ZhG9WN70=TjMOVcO!^~!7(KRtbn(c&jj31_Q5zog|zCtgK-vyCs=Ey4W zW1{N7G^R371jCmJ^SDJl1Xfw{TD+yQv|`|tMXG_7MS`%Dr7Ysx1XdP_TmXhS;%=h1 z;b4?1BYeu5DC}tozE9XF0?!eSyaRq(*xCqQsu*clZz&zr)k21D`aQv_0?t?910wep z;tmKq4lD7kSsN#OW^*JsP1t@0jK0Nk4?2!rUpVk3xVbQ2huP;T`4`}B!rXv%FJY$v zc!=Uk;Bn0G*f0l7k$?aSV8g@R%+NIU^C|-5PA6fWr8w{s)(J` zxTt{hps;y9_%UH#0(atz<-o%Sh{TD8U{Ys~aQH{?VZ}|szX|ia+k+m#`hf-D3}K!g zdh&%MsEDVLFkdNpS_|8|!Ci#oVUBR6QbPNBt``m~T*s?$*FO3kT@;T${)TU{#ywZ6b z41ZyLvo82!;XoZQYR7WtMespk9}3UQzAO(SeIJ^T+4vCc;ZxnlN`R|MKp5uq4G^|I z1&SDPulNVB>R`b`v~(>_B+p_rYA(UX6<}D6trQpvK2O+tH5hebxvv9w zgyK5jxUj!6SoLqd&I&81(pG>U7oA`jtXhZb#pgTs+|8Fqe6N5rFr(mY!aVqg_X#_2 zv+z-2-w7}b$ohOe5b+Cp&@d5nLARjkwEP{k-9r$y6j5jx7+r^h^)}#cO4R`)D$Dt~ zoyb68zNC(*9vo^5o-XpB7d%TiydAty*vtCLyk2;7WI2}mIZ+#~99gFlT~7Vq#q|i< zJDMgUA8Z@V6ZSU)Hx$-jlBjAMYdjdX=j60nVE7)hdo_vnVUFAYxf+Kf`@uJh+>f$H zRonP&@JtMI93eQ8!tY@X=Qqf35~<2*<1e~W;=x5q-@}zx1`S~?v{)K^(A63VRwefS zMsr!KD{X|9UWfL*r}xA)MaOm6WzfQP=tmi}PIiaZ=_fd$N+>2L#LHWi21s^D$k^b< z>9fI&Gg)?vHt6d!Yv9f!ydrhSq%x}K*5Eyw{yuX3jTXMIchcXZLpaKO4U_U-l7amd zxZkM^ayDXkTm#VqFqf)sm3gPq>b_C$RD$AF`CVc=6LB-fkl@hWV6-q7n=h#|(odzj zd857pdC&MjAEaML6(68L?@`7kcK~U*N$+Mvbeg`&l`h<*x6;?r9t38>ovJ<~3Hsi^ z{sl?UUPCz_q81NAgtBmc{vzx*s&X8oG7jbj`&tFVidEG)%UVF?AHozFwDv>SiU(vD z-s~PV-mEXl{1Nv&hr@T20kS4Y%E9-jVlz^PJ7mGVIpY8Z%dAIL#&=WEM`-A4sK-ap zLTR(MidMKS_;aPzk)|V9kI+IWXZmpO5{BZmBIt6}Vxr~Dr9+&^Y=|03a1_2(4V|2u zHFS(}wn!bT!O=N(6i!}E4Z`L*RJKLW59LENRATrRQaNH^8GYs!)cy(D2?ZFz_}JYQ ze(VZ|$k7bhEtTCi*;U9cZ>t-j<5vB6mKQ~<4r8U3Uii+a^1AMyxSqP~6IXku?2Jz( zvrqN)oiRq%SRkIF;jhM$R8;VrQl-j`!K+2i&vew-pyYGGABsG5H?{l>m-!j=(r0es zTV;1#b~)ShJz-w%tBJf+(ZZj@G;o}npNPoZOr@V=J)2LkHIGRav2VdAQd!fG&tbYo zH2HJ=(l~r7591Xl#)Zo3EzA$D<_!?mj)R8@hZlnbu`-gCFFZd~?!}>1^ zTiwBLpP{o!4NSh5sK<6azvN@AvDA}r=Mr!`VGnw2{*@|?FTsO_!ybBRyWXk<70Z7~ zM0}pfhrPKveAdk0A{@9DjHt?HIXiHwfNHIvi1^y7R@GE6xR#1`9=Pcl@-D&}nxNJd z!ge0G{~0>UQk;FQ+ePk6fR&}Vh_xQZY5wIMdRjp#4wQM^fRz%#gDTd7c~p51?9eC0 zzry`;m5-nKCJE+eBnwoYF5e<@2l*6?JA)?)dwz!et}}SL(isK$jMEGQp1Mn|Sy(|h zxKqz;9DfVvH#RQ*jNNEI#U_T$)XJkd^K>6FkDeZQ>?Ro6l)jC&4k&hN;@p(tOEDaz z_<_@-wgW%nMYv|1v4dWey2sz#YHCYQ>q8jtGNQcfnMTWARH4$^Yo{X*d^=-g6=dSv17dRol8aa6&(?Nn9` zyKiW2HDio^F=b@q=rZb`jTmckX=%1mpW3z4E76bHMjF=aoa#nx`xjIsLXE2%dBzYA zEx)`*jBcuqd!$1eP&vYJGj<{GUZst^yPuBn?g-`N7^%CY(I)vZyJ<f+FdvLHem&6o|9%LuX@^OVI;c#o|Am;8ROonnHY3<{jL#w!Nlo^*YB94 z!>QZbMt=Nyh>ArN%mKF+_F^){5A?GtU$STy2&ZAP$P<2+hYo|U6ONn&BP~}SP0SC9 zGuxHGqlMFM2j3>FV?@>_V`YVvqM10r5WyVb2pAsRgo?nA3p;JWF9=)9z^@3WqmbH4 zVFR60Td%kgc&jik<7fwjJv z@nD{y<1Ec_d5uBuE9}K^%n$dn+`JS#R@gz>I(oF5SAFn5nBy>G6C6A(0epqVH+5Yl zjOlz+m)U*|40AJEEy2iy*+hZ(rY^ImCRkO5uRe_$A`fApG?1aIe+~F-VSf1Bh6U1suV<1gvV4u7L|hZlUeitgOS&belbec~zM27`yVd;7P)KbJ4s{ zF&vcNBw?MvmEb4Q{(Ml$j{{`L?D-a~%wDN6SeZTj0+?PEE<6jY3TMOA{5%N94P69Q zrVhUaR;CUt0(TIdbQIFMRXA-l+TXfM4tNRIdQh0JL9NGxjiq1=|87BRf?pT5zXYQh zSZ?14{#ZD@2Y8QgT6eIjfafF_QykXkyLC34wox1hCiUeoW-)@CiPNy6MBxyo?Br zYf-d2uOo6m`XyjxuC#2hGMDuY5@vHjhi{YdI-;8p3d8G&Zrt5qWi7oKSXqnjX7f5C z>!j5MD{JWn_<(9XkNE)J9#(`@iaQR2lM-vnW+HaH=i z?tqmg_!hixfyj+{;1`5>{fI9!IkON7z>D0>{+-}0!hz;!f8Q=SurEWv55nPlp=hZH zW55xm^ANb2u#V>NqfneE-~RBo6pp?LK2Mkz%Kh*u)^Y9wUngvi01sfMed~=#{COPS zB|(*%gH=5_EB~V+4=2IT2>Tm=am>l`AFo-u#X$e@Z&f;-z`KQgoTh4!DEa}vbHV!2 zSHV?OBRGXPD3JiG2Uz*9w=Ed0=w=4D8Rti4E{to@-=vma5`$mYm1z*(-+fdRWm+G z2Qx(OzZQ&wunreA*g`naAM7?1I-z|W2dbr_$H1@vNASS3yy(enb3)2B({sS%MXucg zhR3juALb1z*VHk31eI&@iw8mFn$GWF<(jq^99O>Si{U`|rnwWmTN3rH0)HpWH4DM5 zIJ5L+V8mh8aiZlhlsWBea4TWYQ80XgTCyJC+uGZ9v~cf8azta+Y&rM z$zKFNA{<7%$P-{b38&-47(pN>>RSYUQ!yMU@}98s5E!*^b!vil3mY(LMAg`+hXSUF zJW>MA77k!6;gwd78>|g(F06Ofv>v?F$^kY`HN4cytX&DdS~##0e7$h`Z1By(l@KpF zR+zgIFST;qz!%`hgz-emx=pw|oJj3IG>S_G!Iqa`F@kfzU)mL-rK7W^!5%eJ^1({J zmF9nF?9Chq3!%ihDmYzvwD~N}-E2IGM}0efgk2{rvl+3>Bu;FkX$_#PpAViRX+>Vd zGMh0b6BenAUQ|t`Rax~2BbOF$F?#CDDEzUJUy=o_b&?1_7FqcNNyPIMc%PEPGb?|q z3ObGYAQ~PP1H?MuUKAIWALWakuM%nohN)cn8{n%%?!A+YPmR5;7ox2FAVxI)tEvV{ zE^pO|qH4gVRi{Z3&UWw&kq5d_-e<1uI`Xc72J&uDa{6b6M~|ZmXQJS4;gA?F=emrc zAS<9a2rg2LiezEG@iNmy0|!28>S4 zw)71LZxp$20ao_+wKA~*ZdfgNrR;hoqOP-ET=qAPY9CtAa!b6yoaZoQnhh1p|rJ`~o6fj>pp zQf12dI;Bt3zktI-wFd0U#R-f9dsJ{5El04PMO(i>e*Ne;?*>uMF1HZvc{eE8f0tnz z@%u3tU;s_swy1fBBw@gWHSd$8!!^Me6WP?k1K>G01*sC%d?r;Q$k7DSir{xtI%t}j z=!;xLK9%wEG3)T4Uvm$ZC%@TaR7VM&y>8L!@oo^6?KPHkz6Z;=utQMgl(*}2PI-q; z=al!`>74Rm0M3c;yXC`KIVUuBmoJfOKN`ZjK{SJR1+-L-wtZ=w$ovS)pv%ytDyv#> z1&)e=Ag@J~!p=yept`Ihw!ESi;X@7r?_)YyAZ$ zPNh8LYe~5fLo$~+y_TjG;_RWyJQu-8dFj_~lG}JUh$_A|mc)P8wAvV%QukSEr%N36 zo7&kbEo4)>W-2Q%Mkmgr62faYQgYO)c1tBkhppWvl{dJvl3x!l6FJX_YF~|Vx*6x< zpuYsb$=mODOWB`ygJ{ZrV@1hDnpOv~-4$|-Q*}nDT;UIO(A~K-l?Q+)D*196d%zge z`2vXGVyQLWI=`NdRu`3aqoEhq^`@eMVE~p_LDF?&BF9kI@>>+9ANAnfAetyg3*~4X z@1CGT-=YaP))JM%lVH^)jpdYc&`qH|?*>u-gGMLp7UL-NG6rr{d+6;vXw23}(Ae*w zm!!Gh8G|xm&-z187rp*n!rm>EcgQG?hY`F|^33=StU62j2C(WNezJuoC=&Bk&vc4Vnns z>=UhoBh$fXl2eIZsq`;|Tn+4@7GO0|aWlS6bkgAV4W^zEmxRqnFcEF=xC&?wrNzQL zp=_{Bn7=8~VC@+?+t1KZ19RYBO>1b2+=MeXRJG*w)P}WHTnujwkq1}62mfh!6*Ep( zd?C_MosRfIq#-&gD}_6O?-6#c13xIt*N6=l2&bX>8oqc2BXc(cq|p#_8Rii74OOAd zJHe{Zt~{>Jtsx&y8R#6T2t@&5?#e|N7Fe#Y0@qY>6sV|yFc+w(xv(}Dj9RlkPu+{U z3Uik&x<<)A0^cAU4{gT5@H3RqBi+b%L9S}A!7+=}sP85;Pw7vC{25`sATNR+aokFm zgWpo=a3MA-eJ;dT!l8%3KdB25E@?3$a%6sbusH2>|?ftqkX_|A&%xU%IPL?3*?xMoZ@Q2fgX_8ID-p?eFGq`cLuAX_+~&3gS$5m+=FvO z$%{@=()JAQBpmt`@(a#jv@jRK_XXrvoWby8mh)ptCB4t!8-*Phs)UUN9dNN$GC~fl zK?qPy>N1+xRYFUYOiVF#`_afRzz9{7zKQBZ|4m&Tcrmi^V-Ec1TY^b_ zis7lL*XsRsv{t7s()g8-)G3>n#CWpHfBuu0h$`lr+^Gx1z~jl5_04jxF{d&uYhrfA z-AR8_>~>N2re>M(k8E1RhePQ&@1CVDXJL0f&Enk#I&cx0w2gNQ zsNUHKoL7g&o{ht{w2pT_QdV>9&Y^+4yNs6cZUgySV0STf=iM$^)B+J7kJ52Iyq>zW z#BLtV;@x&Sz`HrrvK4fmXpo%J%Dhj!}Sqedu5d2P(v`h(Pk zcX!Zm-d#qs+L-G8>P%l=RT_F{%?8H#ZIj`)=G<&gDc@K%p82yIt9V=aUwzGi@R~z5 z-Y%cTn!!(QzuKpzOO~O75v)Wk2*MrfOSjYJZd@n998Vohh3SnH-Rw|_j zX~sWx_sG)99|`J!ttvJ4WvfGlQ)MLVmxBCX(BKTiGMEWdnOhvnx%7(*NJr)fgj)LEXAPiGnSPRuN zCklJ7rDem-o&}h)Sg9sl1FkN?{9=K1fw1pfDji|A3Sofbr<6G*?_iod!p!fS1(7PE z)&~5c1p8kH?@+PlfcFcdxSE9_ijxSS+BQtZ>}fzpk%OK|MI+4&BjBTsBh5?WxoFpF zN*l5G166J{P-f>!;UG=~yg==y*aCc;un(>3pz16)5zk2#9KME?aaZoU9Q=&10he)- z!U3e=e20xA`#+$ZQD$+;ZzyH4gmWIAbAz-~xevgy ziDAQFWeN7wrt(`*&?{&rv`R7%a*c#&&A~SaJM+LJg!#3WU|iUHhz{I>Y+t9+Tan1) zbj7V^F-{bdZ#7%S?Grc=*HVh3!S#jtg#`ZMAJ>8J?S-#aj1q_Y3436r@GvER5v=U0 z%>dsca=z^rhGjV&emXt;l#1IFyhNimW6gS~*TAu8xhHA*STol92sGg2ZVa5EBMpSL zU$94Y-4e~l{#;=ndlHPra(+Q2a;=i%!YMLRaXR*BIo1i_WyjmhP6fp{MCWz0LB;vr zvYRvpl&DwOb1#+Oi^1uh+svx*c96rV+$83Jy9o1hEYZuA{!Fkkh^H5LoXAbI7JrY( zO&^Bg?-4Qc2*oSc%zo(d_lTIy7r?J7Ij8@&>UZAuR5%WnnnYd3nfLJ%o@ry%WNQ^z zHMrkLN5|nzo=XF7hjK1Wm)%RZo3r%?sI1)V1mVnbggr&e%Ha&{=|DL=k4uRz51gvk3!a#7s8%PBwsQ`1FWXHHEQjbrG=(BnU|Y4VE6<`_dC zOdIdUY~mKmxd*#DXbA7-&~n~AMd2ytXrpbECQrfPjkJ|_3#f3aSsx|qHWlR@N28~j zg$_@+f{keYR5QC#k17%o4i7!Q;%DX-ghS-$Ny~d@o#+o;>q^!o5AGB&&(Tb znmWV!U zqtF5QARMPI-=Rmpg@rg698s;Eq87dktg?2-fYHr4hG#Ra{?2SwfM&BhiYU|@e5r8Y zF>o(o*dgx_&Rm#Y@Eds?+y4o5gDA5C`NOI#;>Ug*co%c<4w{bO_-zouByN6n!Aao| zn%7a~i@*eqDqpw?Se1_#wLG@y^Idel`r~vQj6eLjP-ed2>1iOWZ2-3rwlTnZP$_D3 z*t9eAaG+|XA!8n)IdWhrl^w>3aVGUYjFB-(i*eL?Jw`gE%#;)e;s<3DmdSz_eCYxI1EK zmyjQ+;OPjn)d;N26gWxSj+n(EScpH<>8e_k@jY5|8${z(N>_qWR1OZF4Mtg*y|>fo z?@>&2YJT^OMV_m`UkZob0izHs54}dqzlUvBk#iKgd@4H%H@F10`#=;TMCA~b%tIDv zM>nfg;6h=3!7ivu$kX0nsY>@J+KgzKIOhhT!qIpf3f?O0{er?jpk-E4;SaFRdk8_j zT&?fG7&Vw9H=}@-uwD#K*|rhQ_yJvE6|Mfk>=Z|T=I0_fh8IN)mbdfd>Z;1 z=g03jr%h17=YprH1Ro^-&t^*_xQ#mgY<3D^Y)!ALg0R%VBKTu^xr%v!4*l#plk*F% zsya~nUvPd|h>1<6DDYKNrF@hZS!x5obwnNr(BfZ^P2eaU_{E%rHXQOR+-e=o{nhNL zKSLFK)Rc;jBk^w3@i;sc*;d8?!YLV3z?&o`zWd5=TDkJ~z+Z^m{~^6}922&oRPO{% zGflCKb+>3)7lBjN?MCG%%%UuIh$^p0xZMN1Oi~F=r?n?glzDXQggFq!P4@ZCyhcaS zmj7se>Sdn8y!NhKAoHjG|oIKt1vrqU1wI{dKvp=vQO@;FrU}; z!w*fjiuJc&S#Fi@8dj_TNoQwBa^be%JYjyrD;w?TX48$v8dkpEndTx!CdQU* z)uH%#%WO0QYk9WQMh?cv$v2@{Nlt4G#W`<&e7(J2oLCL)fcCN!OE_InqXvgD!E<4{CY(7gTnl} zWp#`mqC(5 zhHHE(qR7v5ltnKpBO=15Oa?kuC~d`s$@lNYlLa{LPE9Z_{o~p==W+-4?SGp zs*8#K>iSk!jNj=EtTN-;%G9R;4oA{U4XiQxy;QFuj^3rQyxT(Sc(;qPiV*fG%_zcA zbK1kZ7pQTuRi7?-F}*U61N?%F))pK7W*wo4#g;qIN2ZI5t$Yi{Qr89hi>-)#c{Zks zls3n%TpeC^X585r!!(#xgTH8bi6O_TS?GGut*|OluSQlH3O>A%Rh!pM8(Hpx<=Ksh zKha_~X>_)HH*d|m$#98v{so?FN6o)jq2$lx-H=zGiiX{^Yuk8oFKdre4%jQ7x2}>p#->>upgtA)=!wfMy3rH4(|q!5!PP^PZSP42gZ;P z&qW4&YS$i=0N+mVqry&g@Uz1FWHDb~)IQ_{38e2JBm>eZL=`{SOQ;s2wAU z6gJ^r`efos4|FvsDd^KkHy1O%DC5Vp}YI;MWPh`<*MIts|l z0~h}?1GC2gtJ?4<4fu+P<$-^IYYX!S@r@?J_N(AF!oDDQfNEE5C=OJ+hS!2sTZT|- zzFx{jqCAD+>m`?$g69bP&jvp&%r!P}wqhN=YhbJrHeRDc&sec|1C(Et-3w#$H5IEy z^1*q+*2Cbg!fYg7PGKGIo!}8lj;u}Cj^%vk(VVKdI~aCjx!(XkE*vcYKd;=)17*HK zW2NXhU}fY8GUY2YmIv<^qcig*64en zHAxr^i;u0`F9)9A5P())3_h4}~LWEG`tw!-&V%dCZRq zdi=tH-Qbw87yiIsz+|1sZ?t?de0V)X7l?>2ANVSYgEe#kPe0*c2^dy)<-dYqc;*mV z)N`+}f%NSU&Iq;Rw?3!IG}LE%;?&53JyGEdf*V z=b`v&nUy??z@G{SU=_a0#&RELtXi7C@Zv*x#Oe&>RjuY&x!N{%%7W(Y7p(kvdx%t}_{To{FGw(ds>H8clOM|W zzbkSLfBr4P#>3#Rh1rn)qrzUeR6w;vr~<4;r4Z^FC=?wB9veX3-E&bc9-aba62QI_ z=q{}F0QVO*MuU-XF7!if!R1PBgQp7fheQK2g*{8@(2JP0qag$Dh$#2~c(aOj0p+}e zV0d@n2N6ZnVQOV^r!$oyINlkeQVHfvgI$FEKCm*deE_Ts%pX$;-Yhzvp66&uA?HsSCn;vt#GhP0{AtpAS}d@Ey#kO341RAel_c(aAuzwQxNhK%n5@BsS zc!hAVA9%emFRp}lDs%bI$H9IHFi(Py3EO)yHX6d7#^A89e;^p`lZ!&wC^Rp7Fne>s z&|~&Zqv}IEc6&ywY&Z-SamGl1n^j;gJ$6+5Z32c(|HMmIdnC6k#Mjl zc&TutH5kpuI{f9Mh_bsE4j$QtF^vP<8>es(SLqrApwP?)x?)sSFa)RMFU+t!WP%$C z^S#6Ws%ulZIng9}b_Us^f(hrXfDd`Mtfg_i&*J=D#%6XjXr!Sc)O$Fhm%US=Ec=(xJi} zxrd69u*fsiF=@>%LBi=To_-`KeWhsmo`HNlRvtL<(YAwk`aHT0K_)D}E6+`(oGe;qovril zXjEB;jdR9d6*biOo=KL!&f(p#UW4}GB?129S1EGAzA?1%4J7|6L}ijZFTV4O6C8|^ zRUo+atq=`YBJ`fv?V@TA0;@*xVKjJrg23ok(Aohn7yDr-pzyt*3NoflF0ui7>hjQpyhp*cTqF?j!}XpL9HAI2i+ zUi1qUEnAJKXq1Z8D9+WC@s^d}8&%5QEQ#>^Ao~+ZgomH(-6H3gKeN>+smPddr%rcd<**ddMiXNRxxaSs{#JE9YB@7zp+IfS(HQg*<&lJ}0tePiM{ z_(%>+cvIdN!eN~D@(u{|sF-(5$+Pf22bwAuiLy?9=(J8gdL7I87Hxiku&dMR44qEG z)(_CR5_}ey?kpUjRJmXszL7sd*p;JzEaz7_^Y2T^Y2kZTCtfDX->!n0QBGI24*2Uc z_>eHWSpLy7_*Y?l4dlO{=32_H`Ej^f@Qz$$?{Y-g=mmKt+}-8?_W(v=_QFMK<($FF z2z*^%tFFjh#(2Z}{xIZCQ%uX&;Z!*vqAnteFkd1ZMB~-E{0zQU*s}$4lqVO-xqO4L znGSi%iI|6roL}j!1y5ytmv0yLpzqh305fxdXJ4|<+CsY-{ z51OS0YNyZXb3p1|F6(F{1qMYAxh$mEj$1?N_ zw2zO@r)Cw{olBD|unb+Z13ohJc7+u+Rt9Nn1s0zlgUNc5anj1O`>`3^AM&AdPC}($ z9V$DCCFI{|H1D?4T;469wX!>OQr4C6b1eAno~o}jwQq>L@AT8&<<4LKB+H1Az55QrT60NOjY53M1zJ7IbYzzBr zy#T$77cE`wA>d)c{drR(QtmeQMUq?pd$^-RXJJ;2+iCVS`iQ z&x~_-V)p+^%Uao;_@NVC*>gn?Q1~1aV-b~}W9Ns02-&GZM$wRS?4J75wDBCf6`pDG zx3-Hjo1n*IMBu3AyI|Ehech;AYdgQB7etFB*zO9(AjGOZ47B{ngqtJA2!3S3an?q~m8Ex&Jq2FK+oI2d%9ioYC5i*w6wY3L@9)Z%&or@BT zr=91r3;3w;JZL-S}biIFaT}S&GBed-FkZkOrDKBT{Cok`8f1_iB zD!stwfo3}IR?^N3>@g5taUqU&(ZUPuGNXk>$1b$%>%UUoMacC*>Ufb|o4=$J*h#}7 zp>`AT4E?hg*=aOkXedToK)9yZ2Q7>m;WF%2QnNC<(5Mro9%XjwcGS@3PRwZ3NPZW* z^TWx_W%f_mp1$rlvG~u%iT{~r=p#4TzsoO!|K*Q3-85=szgzG-0fAfW8af4j!V~wn zC)GN+@>ct7!~IpKWR-FD2+QyVY07wXkT|+H&erlAA{f(AX8%IkJRT;TLC3HQtwhLJ z6_QJZ6YNXzZ0pzwcB|0G7&6*QNZ@%|Jpny%KjlqC%5d1!bL*bYaC9W$ru;1pfQWQNF=N7kbm~3{ zCG9|qC&5)#P~jbRo`GNP!ZYPD>V1dZNbg89?yy@GjKMInL#2tCFh4!RMGdS49}^C? zrlWVDavxB)JMEtQicjjHaJx77N~N_FtWNa&UFK5{h5t-@?zHm?{b`WF`#E)^6r5D? z&}aDmwVUfysy7)O^a<)d8K%$18UG3uax+btjL{sCJj+GIzwGN-FN}{)9^;7TP~lxL zFs2fx9^tM4?^ZF+p&@snWrxy?yX?HuAncrahC6UBc&MnE4j7|5mx!-CeN%+_i%vcg z4vwayNQz%U{iBDveecLa-5*iMyD>gK2d`2k1cvCRaW;>**&ORI+Y_tuS)ZIx1H9q@IyLw56p5sCSgZKU4!%SE03-{ds3e%Zqyl5 zFlb&)+ooU$f;Cc)O#8b~%c&Rx(RPtsiQ|8nmQTg`0ZE>E?0F{mS`|DP`;o%F&#@mb z9N16k_hL}|9*3CKaqj-c)c;=OcOC}CE+PuPLu;Xh9u%Gi>pg*xO-gwec)Kuuo1)7! zd%eCsnK2z_TGYJkJ`Cc+X)|{Gc4MVAqUd`#+2?-y3%dYk&eS!Y@fG|Dx$_@?DE`#M z_Nrw6nf7GEC}}{49>&0VEtNik-FTYLyIr)CcL%9xmOUE1lNQdx;V*QIcTK6|Y>cfp z(D2zX{o6EiHpW(XNboaSysuU@+A-Vq^7pyaa{<54wxgK%h38;U{ZXD5KL0Z6F~=@+ zigGbD?2-qD8)>w7&Z&WR-q*FNn#~%i2ZsC1OXmHec_s{4n(ib!ey#-qZ? z`R~|Yc_?dcW+3_Y2lhIhIuB2;OdChp=~Udv_R`8);alj1T6pOs6vukL_bJOC!wEg2{_Mv2U?M z=x_X#0MGvYm1y&JyJa8GPRQDd%trU&M*}#Vf25rsJ!TGc1Y_F4?8^i968297t`z3iBvME<4#O9TOi~S74b@T`^DMhoz))s^=Ee=8h# z5tUY{`j9z4MZh}d5OAtKXidJM&2k^iz;}$8Js1qFHY%MR;8Ezu9DuJ34B3UI!pO__ zuUW)5RrvljbMPXXy9?HR8={>mdNZ&p692dp-=bz!=Puf}%Pwln9~QUK8Z7gbfZ<5Y zew^p|&a*3T0PZCWn|0i6=Uov%)%fl*hkNIP7YaKz((WK^-T>|@%ws!G!C9Z*_u?tI zn>Nbnj25=5)AHSRtanw2RE?Y{IH{6AwRk$t(E^b1bll|tSXIl+hxJedH)+WE31(({ zF1UtpFo&A$!KjXG_!(sm<`0m1R1JOYz&9y5PTn3^f_3~)(v&@R@#T#m!WhdU>ozdv z+|17RFobGj;~j9e$b*;z^92Fx1iFEH3j4Caa7>m5>r!~H9V=M|5t^GtCOWGZvub7= zmGb@|%!`xW3Sl3v!uG;JkJDJ}dQU|QKB!_$0?!lHaaQp?tK_Jc?^R(h`nnG$YSLv)9T`16bY`&EqD;5kaZ zg=T$;;ltSl*=8k!i~Cg_c^=?DA#(qFwC79I>wa>+!p@<3yt|dkcy|{K$1XGw*8E7+ zgH37vS9V?&`vbos#3keBV}tdCJ-5=%uk6_69IU+2ZVm1(!Tk6N-*)3@ff?Xo!u-Z( z@OEJbeh|DzScg{!9}@OmKwb8sP&qVYAG&2ZLUyXyoZC;rL9CG=I8=z)2)YtyWM59J zIif@R_Sqfd-mftaX(vJaVaxD^!k!}V&5GerVK|&?_;ujB6i2}cVQmliQDNUT;Aa#c z1TRYczC4>_8Hq$0}1&IWLQmE08YaAAJ&E`np$=a(TPa7pF>s=%v)ZaNq*`FC1e#x-1I z8KxF@e1j{tIyCbeOq|eB_`_`+&X0&il?Qmfrp@2j#U=1Rz6^Df{SK^pIp5EY4pPz3 zb)zY3zD|wzW8pxfA^YtN!*`G-@5e=WU&=dR55l6w^aCPYcmQ+Bf6&$gxOje<%D=^_ zElM-LMa;Ko^S7A1_NBsu2)l|l9(2R@9Yolzl=mH4-KLJ;;Zo#XTFys(X^-rjL-vZy z`dHSREamcIi05B;aH~Ftb{?`@Huj+>V-#jp>9l{eUj zlP!zwBL-4D%l@Yei8`|uyjhB|h)&}81Nq^-RBk_runAN8JV;AlG?GMqBwI=n(} zI_mr7<4h+FYai21r?&kjI_v~mW;*$LDeZ&=uje}!c27|ec2;woYpLWrPo=~>{7`tS zIaJPpb7&!c{#&gh;%A;?R+GjuajmC6oXoPFo6|f~`Ks3_{IeB;e`of(KIUxK>E!s@ zHoczd%=)i=xO~i@5kq_T#Sc9vFUxXn*J;JdnpLUmqlS}A%XVJ2-0zI<&UJ3ILOakr zX|e{5>x3%`oZ>kAfuCFDTa)}ve66jpbqg3n0Lz`Pz!(Z#M%UNS2brxU;A@rq7jSRI zBf;qEu0GC2{0^C`KL9*l*zkex#6wsd;Aw{gj6KZ!$z7hVGHY;helL!hfAv8dtXFEIL`n*sWrjsi04HBcke!c7z>HKUTS6{E7+PArZ_HdKo`=+*{|#i|}u+UTZu z9C)aTHXn>++~ghu-=i3#t?`hs?gt}`bu>=LEjt?J32>_D3&1FPJvXzaI5?&fYKVH} ztH_hU#lq$h3fDn-BM|je!Eb;E3G-L3`C|iaa`V85%4}YOP1)3w1S^|*&IhZq@CTYq zl!f(;cHop5<6vb*$1Bd@dLYlbEoDc~NN{I~%rim$d1+2an*zr4$SuTp@GvDuW>&c{ zKYPfJK)M+d7;Wn^(y(AGX3sU?mxS?-I38tHH88J2zy=90e+PditfK~e--#pZC&51m z8=u1SP%f66sDK?3w%35OgqjD}%-3$1RqXJ(V2b?l2Jz(iB?>oKh4pp^Dt zVH;NAPffa+y^OG!u+b8X_^$r5;6_UR7`U~Pql@vcQ@e3504poflA}2=B+(ZY6+ygU13*spGs{?%R%*_)o6X|Y_KVjUbw-YM>7Y$fKim^+ z?31&{4*n^3HsCSZ#Po{#SIF_=!S&|+c(qnSqvXe{$$`(o#;zjQfFBika4r~)N$d0n zziaq)@Q1<EwX3eFL>@yv4@7Dp9;GGuQd}Z?3P8@ z&_dQY)~N6Bk!ab~Y6HBn7i?bzUTlt2!AdxvsK%A{sKB#oNhSOit0&-8*Tefy5=CfY z@QTd+pMo5IIxXaK6En=4+bSrx$yLH3^x)nJwHOvdolpzNJJ(`V0Oi~VL{;et_MO=G zwDknM`r(9vw(z_iCq2R0gOi@{=66H$>>O3t4sU)daORWU*v>^=I?t*>?d-BJ%1uTt zvqpnVS+GRwhI!~gfl3tNn>H<8!|_lESpf?UOuup2&!xe-x8tZN{X*ES{jnE9%or5~ z{Vz<9Y?FDSy?wBeGg`k7zVP4P2mkjoMsIHqHBi@o79CUfKaM?4o-uCP`Qs;Kz8Gmc zk?`EfmrPKz#~{SK?U54IY`lFBzf99kB`4UQ>KDcTJes;;qMfh0&&YC#w$UqtUj82o0XzY?u~oh|FcyR#)NZ?cg55p&P;d zg}G$Ng1u0mUv1{bC~_3GYfTZ3cL850>|O`HOxS_#a#c??1K5Lbu}nO|=t1~`NqMLX z_&EN-x zBNu?5AtR962^S{S(FpimQS#P;KM@YL1%E5duigZH5_UHtr!nCON+g&o97E9tQMF8v zy99i)aPVvJ=|&%2N3hz|pM&DzSE?Bx@(6gAu)PX=sR?{J7^Os=@B?7@=^NPK^}>8u z@M|lS^OZ38xzQN_J}hj#3jR}gPzXg7LOC%2cTw?KO^)EEAya40K`=Ts%44^J+Z%n@ zOvqFje-ZJgEp?pns`4VdCNzTxB~6iwdxjPYdsKxjQto{Uen>cq8fPt0&isX5F^oKi zb_sJ1k>3@d4u3d>P1572^{`1gk2nk?>CN;F7U1G|2@pb_!lQ+GJUhwi zA;w+d6a}_`*9mi(W_Xiuf;!I&M^KsE*-HJybg(H?5BZ6hv~WvD1Zkm8=w7g2jHnx) zSx&h-ABvLnS^?A~y-MIdFLp<#rdaX_vuD@Y5ns3}^;4%|YTW~934l?p>RwoEKjPU9&hBofzf6uXRX_4hPo|s@Y=psJowYqzD+oeRNAH|iotw1P_AzVU1xwW zw*Wb#jXruFj%-thro@qLvP*_Jks~k}=Puz;T`)hHr4`!)Hl=0v1e?-I6oXA^S)0J7w33{Kh??T^!fM&2c0o}RqIr@Q z>l5(R!tvA97I;@*2NC)pCN+$v!)5I{*-wJE3-fnO6qZD}a|0@+L^y;eQLI9kdqrZV za%gFs6sLadEBu@K;Ho5^=|g!4*^R-9>hmHv2p5OMBaHlWj~3UdWacg=J9K zR~+eKFgpiq%*?t5Y|_h(VDZ)Fp8M5aM8`9#`B@kSOTZ}N=ty)j;KohztgUGC$R6bw zR2HU-~fnDUG%RJLB8+CU{f zZuyaMav1F{`Jr$G>E=nqlt(WH|7dhpgN;G5qfEs`&R@MLQ~Mn9OPSi|5m_ly`|&pD zy;G+81Kr@!(*#}vHr3BFcv7Q8&OPs`slx7e;6;W@!Pg0Uw}J7`gmMFG$`rW$3-~dS zbFFNI{n~URezyf(CZ*XCfVE+mSwDttEzYq4TA-7 z=d81YqaDG+QR$HLFKdj*aL{|<2&AJG7?t5P;-p-|v-y|HqL2X`$AGRyhw+r!W zx0OmRvKL{s=JG}Op$wbLo@w^?z;Lq>mrlY8wRe$L{(F&qU7(R#wirLIFI8(7LwJMQ zw%G0;_(|2jLJQkoVV6}Qq8wBSCuf3aRXIo)BXUvVIs4Jyn*`>3?SxB)3JDr#;yMCGPr|rtbO5=t&?-$_xiBZnol8~kCCFf*x@3u6*_wm7x$lS< z+f?qy5*4Q`au1lO&XJmY`Fx7p|#2-X{M< zkz1_ruEOpSb?8bwl%K-o1Q8{!hdbMNKc(tlg@^KFT;A=A;65xILg$eGbS?R-!rVET z|9&kw?1(AiQ84+x35S2cY?CoJ7q>6K!&|3%4!B%c%d5nbm1+Dh`!Tl{)cn#4?yISn5L%aC-~XS@0T1HQ#WdrOgR{pr2eijZ z_=c_3HD5Tf%!r%pbO`I9Ft4S*&Z{tdF-whHVSkU|i$1qv6l1@77{ zHF2fg9J5oKH)fXxhh3zeSc&N?WI1t*e zHx9NBtF^pbtajX1d!PbmG`4BoM$TyLdr_v_?e^^ro&9>KqV0bhs`!7Ix+;0j-hpGG zFKd*}#9p;K2KAz<|KD?=CrubLi|0Z=)?lc*<8}K6^;fTwx@zauO$yYkx($xgb62l# zvzrDJ=o~oAz)>;hUiJ5Ow3&IT@=d$6a};9EPie2t;DN#%vbNCuP#$dr9%FRQ0M8J% zzf;TJMB^Q)Ho_?{gwJO2;rsz7nHbvc4#u_S&(!a4+EdHXqjLI3i^{+k3kT7{IQ^sL zd(_e$c27jUYlq#THD94QGea*fVByRRIeHoxowR1$oj;Aqks+${PP=0fx;9R-P!#S4 zHVKKIt(Nb!M^(dk`9qlAoaf-&h>qze@Nx3O) zE{5gQh>mk37>!9Yx)n~1s9A5>$6dDqra6&kQGT@YfI%}65 zDT1HCJGnJ9n8`ihlYP0`!VsG>2X@<62e8Xv#va^ul3KOL zF5vH}B)Vcojc3r-J?PsusSY1dUyc00elAe0>hHzC^dvQJFA}s#y|Nd{TZB(^*`vlF zUFp5%F2{ktHB9->!WJ4qmR%#y$`ru9AIB~H1-L;}rvD%h zU7Xqdjs0N|pIG1c9lG?RDtJ&A#w7=F^`P2D=WA7b2>tx$s>dOu;Waho5W4xhP{V(y zTOi?}j2Wsbp(fAz)>_LcwT69D!9+ce*?b z@#@5f@xi~p%1U$9zkag2S3ipaL0_*Q&#*s^H2YHtR$Y+?(5+Z75v{WxjMpwQyJQRY zs(B%}yoRbxY?>cLHps}6U-t8%vwLjT>YCR{Xb!mRTq&zynPFjG1@>w}R|lV^^dt5)@K z3Nu4HJNG$yo+Ek8(1(vZf9wQR^;m;EmDj^*8$EySoKfS)oHs^I?cvNM3}Fczcc2 z4tQ5T2oXwxA)+h5NIKcN3OrYsN3aAT58vM0Pua(bUOd6_Y8*DV4CC<>HboRa0`4mDB=W&9J)OTE zU{hwP{a_@mK0Q+OxI>fz1Hi}^Z>UqyYXn4Ziztk;;<9&ohfl=+zlBq;f`2vK zOe~f<{A3HqA<5Bm)ILO4-4`MRr6@8T|F}Du;~gA_CVQ*FqlJ^m8uhe%3D|FGsICaA zTgUS=_!h$-gYPk6e*kY3<|mIM&!dOcH@g>UL%zu27R<9`Hf$}EX0=h}J7v9h+KUOdl>Br2GT=gFa2;0D56Debf{ z5%mI_(n>c}mBUeh$f#oqhYN@~-M}cU)nHRN9`4WS1}*;se3LNGpX1a6<$>?OrniZF z1%{nd9zF_wP1xB3eovUwBF+I*fLu2pJx)AA4Z&@N(@1;NB#3s!aYjbUZ+~+&JUNZL zML#iN^T5W4xQ&nJgzH4CL7yBH4n7V}2-^=~ypdnwpb}4hg^xlLV*3zG$*Ej$g?Vyt zpN6|mJR*04HyMVEb6yOPctXt>>9nl62BH-ra*DuEr#JT^#kZJXXb$n$g~KD&j*(7T z(M=GcQm7h3hvvnNDz)PG1gaW42NBS#5)Z}~0xcU*jAJbp%wQ^GN{1kQIc()a^lTx-S+ z5=(^jMr&k(@-z%IalbG};`xmb$`daBUodjmQsPZvD`}~Aqn-R-PeNvl)IOEZ;IvY=jCRV(pMYqQcn461$?HupSQ`&HV=(V$wQsaj z%E=rn`Krj$?ZBT2vv*B?FU9+V=x60M56vIxkr9^j#dQR?Z5!tN?C8mrc6 z0G=nzRSD^(!XC2E@pV=N z=kPsa;(>k~zSnooQ-{W)6Q6;%)P^DoeFa9D(wnOTc#b?dir^f+Cnr$1{PsK9L0$2C z?^+IX;=%G{?eXMH%s3DHdTk+bTh^~1?6b}*{EHe z7Sv?+d%~RX%ieGJTD5*W3=8F+7<^};dU%ya}Cv&&g4a!$SG zATovxU9Of*fQ@BC1T&;aub=$b@H)u97WS?N|0rz3mU8O~N71F`B6?k1DB0ZB!tpP_ zo$-%2`Il?*=d}Wx{JF1#k-ugP97*HCWRN>fa*;vG^+!J*6t-_seJ0|a|3!FzfOhW3 zeMr2cC#!k%eg;40B4`T6JI`30(@t%e=#&Kxs9oaxJke>1&D@R8bvlNsP=rOs>^KHd z)YatUW$>B8{E<*JOc+}{xXiiLN5|5`MlrEXu0*g#B@*IOAQ;eL0=ivy{ zu}7&RQ;>oKs&uMOR*$Jp$H3KU;Z!C|ZJg@#4D3?BPjyCN(d5u+T65_%XHnpBm7If+)2D0WVK$`S`2e# z+T2SaM@tk|BWE}rtDlC*R8Wk3f${zUY%0qoFBExX3wTK_zE(JO6XZA4;uXT-?vUSJ zi|-b;yFh*)=9+Yw@nVB`xagwlZLGzcg;S#;$IYpq8lCAg)0r6?xCa)7YyJg)LD?G) zx#%W+?udHx85z|>H_#6u;r<>dF5x*gi}Y|N`(o!q&KDiJ%;^*CTUT|y-06#LX3OZD zr1sHStSaZhxn9kqvrg@xvq{yjcJ9P^NL%O(RwL&-7X)WCQoHBF^BSDy0q0kB!2+jQ zFkGtEEI@5vuU=W;G>M>a)2r2y1x{(CCtAKabE(BbCky+oIxlpZ1P-f-bnx{rI+&57 zgVUcDI{wxueRc{~!k)dTsCjV08JT{IoKQ38DLouC{r`SAsQlQNOzm%onnkcJXP!IG zvL?@&ts3UL)6{&YD4~}9kWQ%iw-$vn%^r3-IO@(jijtYzo^W20xu^en;y+@l9Czaj zb#gMZpK=;SFwayk^T-zGa+}W{j_Z`5CLMeT{$;1-z=jZ=D5A)%;4a3y3Vf=t{XMv! za2yTAI!Bme3KsgP5=7_D0#6l=7N{*RI|Wq(Awr$dJCFp!R>&tUY%lsl!$ zeg(DpuxbXU8W!xI#~&#K|0!BLaGF#33=umBMh8m{qUmsp6FEE|+(p>#2F9b2@<<9i zS~$EDJjKY-Qw7c!=EBdw0vONsSDdW!i*a#}ctpPdKO!7z4BjUk+pU7HIxV@sGicJq zp9evxl;EDR0@eFf{u5BO{lE&h(+a!eiK1n{>;j+=AoJLT~wP*f&X9tIpX zv4-$$4V&ciw`3SaLVd0$3wIWF)`5EqbA4ZUK6)W4@g(W+GVuuD#^Kw9Ba6TYM4iBP z@Z-YxxLfw?cxT@Y(KjNBmw-(gBQV)WNaS{VH597VS3%THL=nWo)t4nq-fZyM!tO{g z{*qElX8jMP%JdCVGt~9(4e6z3%tKx4#>O}X09~I`3L+&8RricC-_E7O~_o(DH zc~!6%7~T5NH96TLR^f@8Nm{S_09#Gx}bGLr-(d;;)|N{=i;~M zTO#LB1zw#T9XJ+NE8lR+sv4nwW8&}N`OGuON|;udX{><>Hy(^~(DHri&>LtG*F*G} zh`8)6hHTP1_!{^PBOd^MUzjT`W1k7zXwV$QD1kmllDON399oRqCWT{m6Kv8OPJvBzx;w!aihcy=_3VI!DTr;92SgVY?8F{FdId=RPF)@VN-Y-&PB%0h1sjuhU;$#uX``GH@s1*!In7ZVCRh$y18<99rSCdZagSy1;>X67YRkKl;+zjffhm3$ zDZX2^eGhL46Y{A1cy+kM$UFXpaAw*U&IchZBJ1%D-usWLTfV`siLQ;*m%JRH z+I|aXk6J?KFiyFEXSZmk@xPskfnc{1wd^~G=PK9-;r+ZCM5nu2d(dgF#`G!5QJ){g zPlKcC=Y#n1@G0_eBfe$ol!alk=2Wl|hn%!}yA8I7Ej|R*X;{#J9}L6Q7CP6cFX`aW zufG7zb6Vqt=gI+!iImB*?QFJ)d)vop~8Zh|N9>l|9w~8nZ?m@ z{|84f&YduQ%&bW>=Ww0E>SWpU`|6fQ1M2W*$IT3E96cIR&;3$VnK{2%^b9+3778Ux z>dl#>cC?CC2BS^Y->sr$oo<2`?2xT0HUd0EnB(f!XyIrQJV7|r7YuWte*8W)vMO4@ zPu}otMMv?uT3ChHJshoA6)h`AgXG3ndhxA~zX`}3Mc_GJI>?9W_p0dBa#UR4R^xpH zjK>YVIl&Y_|EpDBQcGJ$dtyoIuGZ0x9Mcb)Wa-!O*`gJHA98fP4B?#(Mz>COo>ZNW zk9I6-j7UQw;zO4wanU=zUoAgA+Mg4vA@n6WG~PaV1Q$7i_7nQV$nhZI5nNiw!%KpR zjwc}TsY-ch47iSP^jB~bVSdDmyP~M$JP$_qr{if4J|F!OFXF4!ls3_pfv42UHqo*~ z19zFB^PVI1Zb!{}K+BBU`R8$Dy49;mEt- zM#3H*A5N7pm(@F+g~JblPe=1Tt8FyG4wrK$yfN1hIHsm!_$}5p%AwdyFHwrRNMA2(6`jQ_DJLF>K0rjVC;OqWMKEO z`j!eERO=JrJgzP|5jAu@6uuS(Z?#%~VzgyBte(r=7{-AWdMFk$S5$cC2;;EhzY#ic zP?dJTt(T~N9ishEi-gHR{5-XVS{>A(4!Chs9E{9PAgm^KggxAXzW#X$ z*P{9r*#_lu3vCgepD>_nwHek)s7%t(Lk|!f?lF>H*>S?>Hwp z+OzyyTpByzR(EbT&>8Cp*EEG_mD+n!v}G0RW{P<8S1`YsLRAkB<@9`EF5XZ3ZTctG zp%aShOo-6zbrBtcYpm4W3;tf@(XZ69PAF{LJgdHl;y4Qqp#wi>4t0vQ3**%B#@(W& z!DylC-7VS?D;Jk^gKu0t(Jgviq6?m{b0wVDMfE!++MnHOzR9+GR%YWV(Wm28c*FM} zxj|&+*mxWo=CQ{wD)iWR++UeheWTX}F;-UDFRG6(?-%V8?AS`};N|tIet$Ths~L2< zt1bPb7vg!^b^xvxt0i={tK9>l%>!dpa3In?EUX$2j5dk9figR&`VEYhg`c$iC*rjO zqiGoIDk>m5)wX@+(p6;@Zg$y!9F?0k zc`OFxT3#@D{DhfUX|?81^vO`>(j(C}A$!yez2NGGIi)#?V_~_<>c)}=d6}a>ML&!2 z)Z%pJn}4F?i;G}7d}hvq^;w7UpC=6Cm{=Sus~!(gOA+z+GM7|Q)j108F6`p{olB}H zk6#8JB+Nz8TvA1Oa5{LBk>hE^B~_Grzk@FkPPPVD3-gE-c8AqeN#UQqZx5(i*kIErNDx# zFM_aaF1XSGx~f%mV*1-(Twg^I#}&E0N{0)BhYEXWqFi4^IS-%-Tr8aW6TDcMAK2si zDjl{T80jQC3&3bZWcK1*UPZP;;De@c0_cWB~t zS2vME$T$~Vk@*epU{_&I!v)dTQ0~3}9wN+5L0o}FdGK1)6_;S~A`4Z;*%fkp2l#5? z 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

!a+)8D9-C3i2W;+(b%xFBu{f|9P18%6KbO;+ zzaGth=@XM{X+FoKuLjD%(ypJ)?G2;9%_#H$n_=w_DQ8woZbRVLKR0$YGGRkQGz@+( zb7S8my94qcrXD%Da@s!^DCeAE3|Dz>ik=1!IsXK8ge||#Fh<&p+w>@#2PStYbCLcS zTaIz{ahqQ?jIqpI|J*Hx@r3Ph#W2PxhZ-2hKW#?s$J_ic;@OOWdxFi#V4}^h7{(-< zF-}aj`BU6{ZT<%7JZWEGK$vRt-rsr(F+c1{cjPd4q-s3&^^}LjH%W-o39$i+sbitt#@qxXY!*Y@dbvF zu;r_hA0WYd^Ecjt;1i5DYM4CqtW996{&}$K_iPW`Y<3}c7QbCLfi_QeXr_|)dj$+w#LqcpozUQov{cH4Y!@&zlr zG;Zv%<H9@H^cbBX53wWR4yq(#%FAgXKK! zIhS^?0iDC*TOkQ zli2A;``8&rh3inpr)cpyT)jwV*!hC$zm3#BjL>w;tx1R9hWKu({0^L6H1-`t8AIp! z>Q!pC9?mtI%T9ATu^xWisapb9BWPs;S2L;bU0f}v;qM~Vk6pCQa^sY>fv@XOpAGPC zLu=XTN9IO2_}ceIL|sKY`KlAeHo-Yb12-YY4j*l_+|m?y58_X#+j|gyl0hr^@?E;} zUU-!GsX@cv$K~C$jhzXUwHeMD>ch?tw01M1>^8{Ug3IpIft?YwjGcvao}J~1W?RFv zdEas02e|x%3b&y|#}bRTvGg)k{wTcN+*6Uxe+1tq)a+w87ijLsNcVGtPJ9gCFRIeY z?GV?aE9@+!);r)_PAuLLzQX}CIs6GOzo5#W!uf&5eu}934BBbA5sK~P>zXuhC%gyK zMs}u9U>BSv)Qz3DX(cMBJZ4XDqiW)&C4u)SN2sfp2#j%gzYe z$<9oQeGX?i4P>VcZDi*u3VZ=)6?J3hBUV1R?_rkeAi}xb&FH`8uUU+t*`uiXq zOl$Yy3O2bP&Jyat&fBzXfA|FyuGs-xous+!9H0{iAUsQxzQh#_ot;%wco0rI8h#Ld zO(^RtT%i-OgHFWGQ)C{3^AUAm=Lju3#Dz)3z7FHSw{KDst-lF}9OgG=sm~Ggqrp`9 zTLhazW7#=GJK4EFv7>PArh)9tp^fY`q`-G*sM9Xm_g(m$c{+o(9Yg(2SEQ`t?AA&2 zIUb(nF#nU1IDaDC#cTd2Laomr?}fDO4C1e$te@cgKz)7+S8+6;SwDpf&36r2`%}2Q zr-ctIzh~*_PvIgQe}hTZOEa9=6geBtbZx~`NIG5yXKyt*8_qDdRizGR5#vc0f@RS4 zG);gp7A|Yvtczuw=94+J^K7^RPC!3@Hf*2$UHa#6#Ccoodi0CSQ_0->P-4K( z;ceZ$_ZlV!q;vo65UxJa@&Bi1ebb|h9q~lzdm{S+t^tpXx-Sv!5@~LdYhs1}&FNbs zah&(@l%mQswQFQXB6MHmEf=5R9Z#HkAd(T`2XzK!#&=+NcKt%;s7MX#NUYi-@-2q< z?ZTd?z)ghx4}k9yHZa>WI%pW&@r{27`*6oMaHHg;eO17iCNO(K;8DUjZ3s&PVH0~FGrNz2F~wkZtp{Tw#mqNC$9uw_C%|WfeTCp( zg#9S6nWbUMfx{|)8;o$AjssH-vzoB+mqA-bM*^LjL)J!Qu41ri*4q<|ysUW8zNuw# zZUp~J#c5{@D%^RS4#-+)gm-$un_BB3-NdW5s8$eiVA_?Spx z%y|W}?jrM~f*;a2^Jq1aEWs4OIa5ULgJASME}_v1j3#9EHv_K~_Voc{CTPh~11Cys zF{Yo+AB8>lfiDU>QDm2?4105>2|GH0W3Zd%k4G}2U*Q5XHBQJ4)w;C2{y8-C@kkNA zb~pENn0Q_I{3@XWmB818T>}tHYaM6_#x%?-(pIph>b(lqRLuimTMH{@9)Iz>=+K^}$*$7xMFH zH*~*6o5x11FBN+pm!R&7@SZB{g$;VJVB;iwPl8`mIXV^}yv%aewr7*D3)y)-Rfg^I zsr^>=VelzoZ*B1J!fvp4j&>Y2Ht!Pg@WE=luL*M#de^HQ>of0%!Y(wS_gi5T_2<(; zIkSKld`Z}i@NAV<1@_61VijmR*lwo+gT8wr5{f1uLnmQ>*B0<#;Xo>-jf;dzoIgOO z%D_QYhEJ8jLzGXI;r$-GQQ{ekz&nI}oF3Yp)5d{(hVQtr3vJG4^0M6dC>VCa>_*;v zoVF$Z3Y?3zqUCV`7q%g}!N{EDIE2dZYk~NqE&f#^_oAZw!(uB;1mVys%#J_7YA9Y9 zaGq_SzN%nIkEv03Bc-@&5yxo31;^uYVps=E_@0wYkY)XXKXee zy=O5E;H$;7K%DL3TpSb=ngi|Ntwyn0} zf1Z|2j0{46v`LW$wVuJFmymH|%Q&m4B8X z9wdTUP+&5yc2o7qk)HS-;;hM$Fs@ciMm;;ymC2E{rg?!@Pl?P%ff_#$EHctU=etxoeRx< z3ZZt;o~KZ`MpXT2+!oLzr8-LBlvd!b64*VDdcZps@k=3lZawewH0fznyfI}>hvMF# zX46rE#x#9;q=RYxn~qLLNruox_H0b$XTY;L4V{6jyJ+bQD9}acXW*`4;wG8@ie!oN zl#Kk9lD=yQRiBCSHK&0y(FS#B*38J&5>%x0BU%9F(ZW6$d+8@`;>p5(3?{tg!3DN> zwy>ub$BiDeQj}tS0V% zGtp&M??)AF`40R_+U9TYyJwrxGpi{3%HemkHbcGD zZ0?*K?R*%9YuNJf*ch=(?SuW*QV+j3`C!Rk8YlTiP6x~hHL)g+wDpfcdriUr{+Iys{H{jyV4|fp2F%G4wiV^;Cw;D z*%?FIwjt<~*aG-4!YjVD>~y6LAHl(|dp<&#cd??jV$A&*L8tPHI#~B!1lx8PjGn>YiNX;RuzkATz1DA8qNqTq2cty3L4J1#KxT%2~dW8yD*yHjny)w zhp<{k%q>{Z?v7M(w5QN#=;RHtW{y;F*MY(Jqya3MN7ZXp2Bhn;=0k@POOHk>R`B6OQxiS2@_$>@ZT9@1f56G_jTU*_JxBH# zIe>nflb(~fBQ<)9o0@&?%qseCpK0nnvfsmxU}5({el(JplND|0ATuYr)-(Fyp(A>Z zpba@utWHN1<|k5fqnA@st3fds2^&I%-rbZ{7_Cu)0frZLEOKGsG@1yz*MZT6Sndyl z+i0{3VBFJL?t{$eCCuls^WpU@H+zGJ3;WSC3=Gaz_-X5B8=}G&4spcYVrIJ z(@uD!=bkGIi`fsKg%ZjSr907hR*YI;yN(mU(1lfie}XktFW9B2nq$CPX%8yL^JWh3 zh5q=|9cB-d;nGU`VKJ_O7{aYYYv2M2FdG}ePYSzWg08v3jz_>R2=jf@wMy9h6^xeU zxF#CTwO!bc8-oj#v(m?y?9vLj>Vbb2Ic|kisyxhaEUdPS%Aiqqbzv{e-Q7Ug*BpGe z%Ap*0XJI#5!QEHb`5pLCWt78>8#L$dI|P14*aK^KKPSwGO7f!5Qi6$y9%N!gK!5eL z7v`q*^bq!b3?8JBOMz8UCb|wzH%Ac zb44>lbK>Y@D^b^AaE@kh5UkoVP-w4e%L)6#S;$g>pJ`TwXqYFrIQrNU@#YYYJ{IrC zXfwP^P*m>%5jksuVX|C(*9YJ=Do0Pn(Z`nD-3+?44K59wDe{0HtZn0mE%`c$+*<%f z2`w8q4u)+pn4#a047jY+LOSTlrcN|(bP)O8vG6GfZgLz)WAITMwbj| zG5Dt_0d!N2#v5#bw}tsFm%tX~I&{5Kw1Fd?>Q|1|sPzfvv3Dh3xCyqFQ0~K!cS+8X zg7=Hu+m04jj#e+>$ye~{&yN-)9io}B)sYTx#)r0Uh8 zJrQbFwP?t6x@bkUXkpA(9l@{3`$mpovL4_>y_@JnwdiaFA6`BBOF1-qde`I}Jbjd8 zZ9+@w==hdqAEK!>qD8IRK!nn>h<8u;;3HJ-&M-56%ECBg~V^l zSpI0~%-Z7bI!nd1qG9|RaX>9(QXW3fODIxjP7lf`84&Z9bH`BkM#J+X_i^MR^wHIe7()Id01LFar-UNekpCx z;q1)Kwn=4}A3%j#DD$VJDxEEo%P-zgvzK4ahq3&k-_}&fDM7L9^_CMgk83LYDMWj{ z<=mQFZ#hwYd%fkVY}{CHxf&)7&eb8g-f|5|nk%o2?e!La<&e$(cBs*Cy_D=5e0Qm! zg>b<#?DdxGt7P|bW4NwNse95&C%$YFE%2I64Z7GeT5LAOr)BSs^0#Ccu+uJa`fgY- z9#xKN4MTb=ajtdrL5JhTM3*+v8YWgeQ;Q)!M%RlG_yQHTMG_B`rloD8l}&dx?QDw~ zO;fJ0qBgX5cG(>ItX(t% zi5`U%iw;lwsJ))}!tDr~cqC*kAF4i;7~4MDFT;DM^+@QR|F(Mgzj!2+*w`o9-$B*- zMem(A`)Zo&p@;j`p10&`{J*Xo`u6VoP=9=oWo^G`wmGluUs?2;uS_s;Y(TWXD>WPK zmZ_To&r*j$(V~)kh%ii8`vd3!_za6M%hAp(cRUJitb7uDkA`^)jM31FTM-O>TjAdW z_fz>u@F11L^!TH0R+#qS@tE*f7qBZ{G+5jejAmjs9>IT@mL)#`MnhSA0gQpk3IoIk zScLn6k0|3#V_+b&!u$nB94jsg#z|Z9mPP|>kJs{;0guue2xGRRmIgwXb)XB|TQLrF zPb=~cT0IzJ815##mauwq8L(Cy4+@VChT%;na|oOsRGyvV)S8`_Y3PtB|2%)`5TvjJ zMp>vS{0Od~h1f%T;EjY%bDYT(7-}U{ot@*@Ag_qm>-$IPGEQWjYTB zKYp~nYH9^wj%r{|Anzu|RKW_90XfFr8?5c-SP1#8Dql$Fnxuyl6CaJf=BOQZqCc3}shu<) z;}c$TU0tPL76@2;x3}tP|oCxVm>cGxr>~cq|I9k%4iP1u{ zvO(u3VkAS0nrkS3Qnbi54#nUn-Z^yNq-cg~ISNI+V_7-#9zLI*R=F2^x8i>p{Lh~^ z^kU4cQkphSidINHizG@ziWWCQ^ESgLnu6``|KAAby5;sd`q;bnzY^moN8ioH#`hcD zot1L_r`-z5{9li5dv`kvXwLV(-tqq_W)1!HRAS7+=yDT}@}nMFa=SM|y>`1BQ{{f1 zoW%RjMI#QnG{BjYIItu-(&-%DzducU-BFWL(~G{M=Z6&r6N6uhhD~cXrPBYHi+=RF zU;nR(LfR$xs(3nG{p@4$M$0M`}vq3`qI-z@hKxS2420NKE>!E*mWD*ksg-0CHW252-4 zOU7f$=#0h~VGoa?PYS!<2TvE~Rk?xWIXQC(twwSsogl(=&C2;s@K#}-ksG^&`MHsC zP}qws_&h-l@4OGJwK1!L(SKRauaP^N2>X8ow-I(c0Y;zUFs>{23+3Q^F?H<#=8ryTNY=^McKxh30Ky2WAacA*zEBhuPYi`9`@RuF(-$?wg4H zX2%t|aNP~1AYu0KJ_;_>c%KDplR3Tx^Rsx4jBo84ytBsaei>XW%%3xK-Y?9HOy`5bz6D@4J>+FL zCx|@oFnFo32W{U{Nlx(-z)&dX?}0tKUJ(w!#$9g-TYE#tRel0;RdN72 z;!kCBTpyI_)}ol3z)-B%@E}~MW_`DVRk3^na5vRNdxJ*{dxn6Y6y|M7e5uOH0N>s+ z+%Kpct>s=N9M}uqAne4D;NC8b*2jmup&%|@05oCI2qPL z8j+0&U{#kBM#P&)R-(PYmbwrIn&OvQSnmCWir}2^F<+9+5!aR=-m>PZ*I9J%80WK}fJDdFZVk;fANT8mE{}1(9 zjWxs%5DnF!&x6sr9F)J37MQB?)nIL8XwuqRvWkel6nIO+Yy`ijj1G#AW?AX@qu^7@ zLGZ7_&heOlrQjDooRHZC7ZLGry$D7fS#F@L!J5Jj^p&9A2Yk!G+Q|HxM^Ke)ehBWR z>CB-XZ$`tZC{yrR5&0X^q&G2#UJsErW8hsdnu&9BzD%1DqvT^u2Yn*qjQH#q_V&O; zQ%Y;l{$N$AADT+JUF7^mQ%ZAT^AH%L2FDGA!1oK|afOlcps*WR^H*j#j04(9DN&7h z|HQ=%@o+NRQ;4NtHBEjoia*57kxi(Qe}c*EZUg>A*q8-YD+yc4+rH9 z;nYH5=Pz)pD_?-SP?&X)x?I@Nm&~_dG^lc#8o7H4Sli3{9Jq=Ebq@sB73P=w((Y6F zMKILI*?XP=KdN%rciKONc_Njj9h2W4NSiNmeB91RdsS8BK|`ml6AxYrrEL{<_5kk| z=11&lXa_5^5#W;=W(Zg<(X|T`y;Zt4-&K5S7fVJVAF>oc7mj~Ao#=C6|jEp>jONB4lDGb#8UtAxO{^=UR#&`N zkCoRPbZ$2-eHZJ~`PAc2Pnd=*DaQt7{gru-8i&nr=5buz9C;XC!bjv6A^x2oQU}UF z!;U7nj8NlZcfMIvm8NgFvGy8P&l7gtUbmjEy@tM;xV|C!N)_)m-d{3T{kQ$4|C^`N zr%p$&xKfAo89w5X(S3V9Hlp{4{)umYir(k6KKfhkzb&bT^ndKJ-Vb7sr>1Y`yW-TpvM(d?^QGt#PwI!LdM5rs+wK4@xQ^$I=;*w|#3D~C za1&u4Y>J;yv)tNqX(Q}E0XYT$mIo_?dujM*!59o!&hJ<96KX3iItV|ZW_G|XjY-16 z=HS`rAnd{OUVcK&>CGr^~Y z-7~#I7DH2} zQ`m(u*wotaBM#PvmDxOS1r6UFe2cL25AYqrUKG@v|3NIL1SK=I?E;&?k4k`)7GMks zoM6f}@DgF3q4DCH<@_w!d`B5g#M|jsA<^#m4zR_%GBLIA{K&|uh4-M@`2#(btqj`Y zqEI3@ktk2oS?<6f$7?8N&sQ|w5et{FH=5M)#@Om4VP6gK%fhK;!EXw?Q6_#A%;8h- z1glb0W}*CAmOw3Vx`c5K0o#fk3RXo1x`Clc%VvE@h*zteXv#+LNM)FlYqGGTF&IOa zRrb>0=Y`E|FigxUP;GER*!edYEzNR%dh6ONobnR*sBrK%*sM!y;QkUGm&L=2M0ugb zkxkq|+*!(3zy-oCXp7&xwhHtJ_;z9IjcK$t%lY@`?v5%y3+^S%t?q_4ESu#gzwUA3 zfjkZObm8D;Fz$hzkRR%DuMqY;j@E<5Snli!ZmZ$ZL>|~D%h{CJB$xwFg0&O5p9QNH z&0}Cb1c3wbw^==^M$Z(msxkN=Sk;w+&f-yR1-FA$TTZmESGDEe1y*f&(AHknR?1bd zYK!l;Ue#6_|DM8Yt7|{yyJDdd-jDRcaJXQ`C*ZNdLDbYcP1tc9i~?~O$IIZCgk86R zR||X4nY^1+{yrFKad`Ikr3;&1gJEYZPpuE`2%F%G6bSi^Y-ayq@Hh?R0e`HK(JOsw zSpFx#--?`j1wUWsxNh_)UQ;pq%H#ia;lLuK>lZd>fOCX{@03V;a|9Ox_|XK+ChWnF zwr5W13?8p?G@buxVK>Gw|9oNI+4aAqa&gYIW`irh&9zv} zZH0NiD+MEkhZ9QaPDi~M;Gx14wG_u)U>#ioLGS{J=Q;&mrfFa_;uiocb-fJUD9mqT zrDzj)1K|B4=X&thGpsCs1jFi>9jWL~FzIG|5j>8IGUDNeV)*qwmb<wW3O+|(* zXCI-|+cDv8KMv!!V>vQ_hnilccef}1M;1n#H&H5j_*FurNvaVr0e zs{5g$QV_i;B7Rwf*H2c^HsH;|ya$xFOPGJgllGOc`yTN38Xi`W_KSwe178*P`~zzc zuQ309Bwd@@mW zV+7%Jc;_R1hHwh%oKC|07F7Dn$`|l3GhKDyqo z39MpFVK43myrQx+w;Y@=Y-|8)!#Urf)d48{K8RY2cgjw1XW`UN;9i;pY>?MaR&wb6 z87LaF8}^M47hCM<35H#=oKHf|Sg8yf&d{P8kY()C@UWqbqpEQ3^BF&B1au;PlY3U&vhwOQ_L1UDw^M!hpJmRsSUhg)0N$(_EjaL^4`E9spK?jmx}DXb(j`^bfJ z9$c6WC**h+?nLDaaAyjqR)(uB=e(7!2Vk;m9HiIJoFLySFXvFB>NgxB~{Bl~$}&Zl+^$oFG7 zK;BN6WX>Ux`)4H1tcC1(V=va^ZYOr6}dYDoG)@` zqlB3m+wZ{lI*f={WC7StL`|C0ixh~QUq_785cWe|kp{xv`IMC%Yf$ndL=!}0!gM3r zklx3@+K}9U5$%G(XTaJ6tuWfKR+#OQj?ooiv|+6;L^fw6f#=&Cf4zaZ_WHW91ag|X++udaN$7d zqxEm%rot%?Lw?syjFFbZdr&YwNl`d4Hz)RHW}^*gO!)DixhvVw`~b){7U$-qsky>Q zLv;;Fj4vO1ogZFTt`y^^)??WjMmyR0f?}0p#b)!eG_W!*$IwQ0c2l5AY&8Gyyb7)k z&^gl+q93Zn>X{E#q{6DPDvs?`Ts2mNA9l}jV)Nwbs<8}yEjo1oErpmI1ImW!5DObe zpaIHU=*eDCEtZLA<<(uD@}42XAid3c&;O2w)Tdgk0v?o4uNIT{a&G1K{KM{=x7WJ8 zE;V^OtD?EE-?Z!1Vu|b3N_qbD<;Si4lehn0?Vq%)7@t-c=-IdT@P0iXdwghL`rtQT z4jpS9-<#NXPrR0g<_<5+O1-g-(!KA0~qoH&Z#fx1+6a&N6T}VXII3+oSwt>$FW%~4@0<`-Ul}iIgyQpV28;N~1aD?o-bcV4g?S?4?IoOv zBJ<{k6@C%TS{VzfcYW16|E|*ejU|;ZTU5eQW#!%)57wGj9=Yg_WlNbRyYRR1389)xj1sT^UXc(`|hCuktFW?-gp|b-B zAi7S8%NCRNh%zjOHzrsfgi)rcF^2vE+XjdZn1+sTX(@dh zE{;hA51JwEXHBRoSWU9j!*m_xP0hkUQBk}@yQy$Zyhfwr5KYtAXk>o!Y846N2JaIv zmnsE*S=e13yh+1k(X2JlXAfEnr{n=lN7BW|GZu_k96L7;tV)U?c80Aa$oNSrhcQZn zRY|dpU{z8CrN~evxzOD+=1BMex<eqnfXHOLGKy$E~CO)G$YaKe@j}W0*Id&K}m5mBmr9*ROf2i^Y!LSdOr!@h8tqdE> zJ}I2>B={F$ewv$oO_+Z{m7}%HNdf1GJPSq1fxTvNqJH%BoT}mxd7kRNjqdOxb$dJB zlAi#wPB|367nSpoaOwl#FNC>kn15l&hnH}oxgUeSQ8{cr^dDh<>cp!L4wJSQ z{I_uSMl1lsLAl`bgu*Bl2a2Hv;UZyUA-INcsbX*g;k5g}Erql11$PvVegN*NJPtfa z*f|wET9`Ewp3K|^4T51Jti3fb1N@u>@}gkjox+j9U>y!T1HtESoZ)MPFG-lp$Ei3G z4?9lNfCQGhFQN0@Dn98K!A)^A8LGyA5gkmjdVxC_HxBEKJSgG$v18;htcdOKV?>_a z1M(?19T@zy$WxJCbtPDjDjQ_)|1vTZZlS6`eHk`LzGRs7z@(${8$#F0& zjN32k8Jz1FpX^vfx9#iEnW{OLe#6>Idq^4q|ML z&&FvlX&<04i>S*7@pZNC$1lfXk~`l3iV7r`G_-h8WtDFNtCgf4r~2FC9dXdatZitI zMYLjD{42+F8vkLu27VT@`os93C^~037!RL%oO1w-3Ua{%ixRazidS)@F2e87W{Rv- zc^dd}e3zp%)!mK~en{Q6qiC~enOtq>t3{Ny!>Us49muK@1wM&?58=5_SeVHAH2#<) z`X+u8btHLEc9owbdEa1Ky3?xpww*`FGJfrK&4)zXSrKo{kf z<%**eW50mTZlyg4#nrEc5ykT9K-a&3;+iI^?~T7;;%J>c`>j+@??9}49DkxYZ!x(1pn1PYZn-d{>(|=j$yaH8Z?(fVjo0os6YRkc(wz(n6;0f z5{qz>C2Col)*nF*f6(D0=w*LU{co+S9^b~Ro9RKC^(_>IQM57c7My<5|A1k>Vs~_c zLqA8Jqi{M>WpRqd87|I(qv%XcDD6A6<35}lG+q*Fo)5N0GYr9xQ|s^I4N~Vrgi%1# zp35;XtlfbjjI(ZmLFA6##M{%6_IwBZbfnV=1t)L}7S)kj9E%Tfq|w@As9;w*aST~M zN8OHFLB=1C&+d&DX!e$*k&6NSPBfon2hJAear{p0tsdMo?yRDDZpJ~7Vc}pDj2iUR zrnsw`$bDbY&=V-vn>6(V3iJnUJAu3xB~G6}XDUHLEoa#Q!7GIMiGE8AR9uksN5Oix z=e1%>bUv2z2_-G{4xe5VCjv)Ap89Wa*TxcPJ zRl$1W;9tJC%9RK{j9snt=8{vB(oUg9ovHk(_^8_a#e~-AG@KN_Owd|wAs6|zzD?vg z$HDD2sj0N*6wGW@X z{^fXEM-(@}2XL=vyPUiUTu~wg7SXal<5w|mExm&L*3q^rR#~oJi4Qa*Sv2q}bdg1y zuVO$r2J=Bfa1u{rfa^I=l8F65=iu#dljoXLx#wQ-@!Ww>um_GYy)^i^$T2JxU(*E9 z_1SyIbi5S^mo<`klE%Xu#|v?=r3_0@Fl|$kBqtWaP`_Hjcg8X^m z^rz^YBQMOig#O=&2*0b#GV_Y?6sE43$2Y(6eDxeHW2Yl+7w3#PY0kWkiz~h~6a0cC1KZx{ z&Lhk$5*@sGZ5_3cgGDZYlI_z&^{lMN3>8c1-7#}kcS&3oeSiJxvWEBha76v=ir5QzLX!# zyV~k&{1EwF5pfY8!PMDmh4NrE2Yw(q%##c=Oa}`t`Y?pEs_{DYNrBeO(bN>=y@=MQ zW7G3$l)Q#-gJAUK{CN#E@}I(N(<61x z%KI)O=WFu!gI^NnB8=2*xxGei6nQqEu4k>!|36{ zT!_)*h54n$(aV^rd}dyHl(SIfSy`Z+IXmw$D$ay`p2AN=1GpPP#D8O=;*E*m_{_Yb z=r)L&i}}9e2e%UMw3DBr~-JU@kCpR!A<^znpZlM`-GYo zXa2;~62?6dtmYLxNsV)1oK0zJE-ZEtt<25a6}^a0&Fq0Xv^e9wy;15}p}gv5ZiqIA zpr$Wy)O1;?==7x0)sYM%YtCr#bc_3PhpblT<%y zCE0_Wjx-5QIT(4#Y$^5!u$2;RljwtB*rX&$I}x-NY`aAJHsAeA&Wd-q6!=f!v{b{G zP+xQZEs-C~8|~-cqReQZVVRo==b~@TP?cDGugGIrkhi~yb=b^+5zgo?a*JV3Ts+US zkfRUZ;75e{IMf-B!Jj=+@1| zQP9?mUodG!UY4F^I~Gh<|G^vzl-i^VFHOY^Jpc zTJi@(YWq3N#p0cdc9_}WCcaOYUsRs?z)h_B$w575s(vg+ow&g1xsXFYH+ZaY7z6H1 z3>DVkXkDNh94PY*cwp?f!E=TA*NQXMZY+LYaorC5!oVLC~USfTP z{07rXKENXg$oP+6b+v~SCtAuLUik^LeXaxl5SHJi;y*sb+CHzxg#ndcyRqa*lMkQZ zKevheY;KOtC!5jYd~|Aw6$sk4kMD8+j;$CC#AmMC$MkqmS9|#NV4$>*KjkN{R-v`y4b$3`9b5x38vmxk$(-_<9zaTQa;PRj>`E2f!mb*>2ho@7nM0dJhi8BuR8DK0{AgU->&cJCrI$;7CoX*=RyG%)erWTWf5SF_C? z73uW$eBPkxu>(#UI=CaBUvw+~37mh?D0Ys}_D}MQ&7Nf`^eHYI(g1eG(0X=ulV>NK zlhkD=!u0ad3d^lZ7g^knTI_=J5G`P5Ih|(bGS%G;rw&bJ=P5e48!`KorShNQatV!M z=Ok_a4AQ<;DYOTdGid-j2WUMzm&x-voPN~hbA;(1p%r{N2U~`4ex(*)z^O+I*jYoT z*{MTy_rm#zrtU?IhYUK%mxHPNJ~)SH)ILZb&Y|sm*^WZ{;hd!b`ym}%mDcm+8uA=~ z(}cRPGmciU^95aGX9>0V63(l%;7i1K#7C$3@)N3i5YAZ*_6gq^42 zbef%2RQDT5M;J8Ka%&#${&F1=(Y|Vp968lc&e_6@f z%X$aW_y6i0$R9Hb{xIoWcERlb{R@q~hxZmBkO|7`^fuGRupMjskU}#0|g^Oo2GM90&Mh5clPOZq-z_`UT z^Y2gij30|}ZEO|x%m8E5X1TL3_&Z_udN8I+Eax9lI0C{rss+C_4atT12Rtw_;z0b1 zLI;LtE1_=SJC!j4JML9Rf%xzr4#RIsI<)rY%V4{fJ}^dV4�v4DB&nhYNkcT!Ip{ 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

$z4ylyG>zR7(*5KtP6+GlYFy0K?VYHGc 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

}S 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 delta 13225 zcma)?33OCN*2k;f(tCH(OO{SRAdx_V5Q2aR!m!DvChQQl5D<_>a99Nwy3zI$6T=gjf@a!%*{>R-3ETeqs-d);d` z2DWbqY;0;*bZKAF`MRP39aep<)PMQt(Z`kEGW)-MoSG$hPI_=;=hL&aMfEu4M%wJy zvAuJFQKm1eUudkV@V8ZlQpS8ocPtLhnm%dHw8?Gf*18+_>1W#ink=6-S@r2!j`Z9q z^XJZKJ8!{dQ|3~Vt&v?0Qts9zx{b5&&19r;R{ge4R;C5&a0#H z27ZC;%Q!n60WV>Wt^!}f9IFN2%^dg~{4jH5ANU!uDRJ73E{={-%8aoR{bXOym z?`$4jlRl-CRlph6``{9(;teNJJuJNo$|I}Ru}8%oo)F4uCu55mNdra zLnAaAKV0scCiU!d7LOsH-8QB;JskSStQ+5hzZ09Z^Y)l->6=ipFDp^h<{!cwy54Cw zwp^d-OcCT|>#rh6s_V{i(?Q9=kuGc$nj~`ai0p(GLSI@t}QL!HnPD?!-!7Z7y);JR; z)M&%mJt0p=okJ74>1&)sP5;_6m5Oc>o1-H97y8ev+Z71u zfY{vYd_A$eCA^mmLV1Fftc6bH%x=+MP~H)xmvbYO8YusgQZ>$dGiSEkp;RG) zjfM~+K9@P#1dJh(9&O^xo>km(50qh2mRQzt4BJoP1lD7h)$f{hOSEpeQZ@?GAMHGW z4DZ8iW%vhFENo)2#WLI)vzg)EN@WXM=ukYv?cwVTf2LGY*hXZg!1enVXIn<)VdwbL zN~7|G)1j_PcX3wW|FzD6x<&dyXV9`rqv}&C9MJY0Tg6JifAxu5eDSEJkpIR+acVA3`rjI-OS)>$99O zt6J&d&I zBh{SopGT@Q=TK4n^ts679hn!ng|F&jr|`|$m8bLne<$v5ovPC&*ZU7Q_18~1a)Yif zIQ9=+_#4*Fpd*F#srRF1vp!wNp%;zLc}ns*KMtp~)BNNgr%C;nr#|!7zw`B<)9Eu1H&}9gF_rcu;2h?_4tH}z7uO+()!8hW z2wByI+4wyetCWgawctU_*$7TGia99w>T7q{n$L<3^%^cniexBKfQ&qjjtZ3Y*i^|g4 zRmYf9&A@2f(|=HPN`23X;0fF=AZRGVK#z5lIdBS`FE$vBE@n0x!0njr5EzS{%0>o) z`!Xjhz*WqeY_QD9#>Sn7oVt|A`0gi2bcrcyo`65Bh>4Um=!UOSt@K?htDs}Ik-tNgQ8b}ktUl6Y)wQ4 zu_7*GPHq9?)}ycPh!gD!Bzkd1_CfGy=HPO$j6RImH)Ztx-frh?EV1U0o@LY2R4{Ik zyf)7Pzs+o7DVdlt(i3s;*UV7_m??d?KE_f+5Rpv|;>MC$G!T^5nXIS21j8p}la&CU zCo>nP!UH)YnGK%C9JviVpP9yFEn`mX2Vcu0)BfvV zY2S}>wm38U2w0q{5$?7)GqMs=*4mn_?-7}Lq zUWY^=#u?dFV41TpIuU3kIszonQ3}HsfnLnvwqWs7)+1o?Q}h$Upoc%L+I&-ibER*cJ0lZx7e*&);8>;hWW_5{jU&+y-Ivd)vtVPCwWv~XE z5EehC5D#Hl$?6)gtmK#<{0oJ(6TxMMWMjnkX38zKcG20)3Vdn*0 zaYiPR&Sy3^fzM=)%yN6= zVVfBM2_Gt!^)`4ov%U*Fk=a1sqY~rcTJYtp=U{cyYY-}{{|Vm6oNNY`NY*cb?_u4% z3j8p07&}Y!8KugoaN=tVNRIYrt>;aSDCO z9>#28xY;sivG2e#Pl0OiBDM))g=Mc~&c?X2F`raV5-yBqGuubNh0G@AGG3C|ks!u< zaYpDC@P*748i>nkNWvlUOIY_4&tuL;l*X4b)AM^A5$ug`Dp;1Pc{6+xVBJ0&EIUQK z4eodnrJRv)k9)Nc83)Waw_eo0`|a?=wf91b;4i8}N^!-v!tE zm<`w_6U;fNKZz-)dScgt>pF14wvaeS3Sd;pKFoiQUxTMIhYYZEB8mV^ZNvOiF9JU!fkjRnLX@T+lZtkN|0cW! z{5o?g5Bx53934x2EPNvvi;U_?4#OQJuEePYVC*Ku7N#<%fH{1`-B5@{h*{3*#ga*; zTbb?dVCk0i53oc-@;De#K-EPs{v0eg;&3JS1E~kj&-s$se<}DU=4?z@iunSOa8} zMfMUUS;ui(kh_*M=wQyhK?-yNZxQ|hyn~sZS8{iW{T%nbCOWsy{}Hq|S&Ll)hKHyj z3z3lf8M7a4z9Opo#+MQ2r2RuYvK*7UCga;v~Ep zynyv&J{XNt+3?xmj3*9*?`NGJ7VGkNb0WSG881o3ATUNjg<~&+k1-o7!4eY&Vj>-4 zJ@i*_E_1v+xQID*8MqyD0-j0_WmbOh1dq>FVJyS+49vzhzTM`;_XG$v)26iS5uceLUBVHP?CF_ux&abk)ZGQ_!fZ1@H|G)2f92 zJEhK&>I#NSYah6in(Okq>yQn1o}0;D&)M;9&=FYYWOT#_RhN7mI(pJEqd&lUpfhx= znzJ+di>%Ys6&#eZn7V>v%vLAx&$7?Zvs+<6sbVQyn8QZC<8fDU0Rjb(HLtf~~^q-QGpIzi#iYEz&jme)m+7?xtUEC@I!w8~SE< zOiNv?Yu%+SQB$3JKV7D{?~%CPHA-;V;Fi#3t2?Mfe=%a8QbiIvbT41Dh+8q=0V9ku z?~RLOO9&g#Z&a!$dS&$o-;(JSco%bUw!5JfUU!`Z=`}Ik50=UCg&KCZ(qpZG3*j?V zK|`nY*h)e>k^;-xr01PhvNq`fx79qXV{u3;1QV5oLnfW2``2|x_TO2`!3t_6`wFe5 z*0S3MF!iltY-2YC%U+Tw1k3i3^$oZW+o)dPVa%Rh!yHOO$JRp4dph<&w{=@xJ)#7w z4KAXL6fq`|n4SF_H9eQzw-9v5hNZA*XgrZF>+gjoaaBnvC zcp!5at}DH$5f2v|xVm(7BbG4*a4?ikX5C|niUirumi1#ljKus#g|BE-;40=2=B0FH zBmHV-9~vr^F!I=8J-HOR+lXZYpr@D8ZLEXqROw$NaW^vVYsBajIWT7=^hX=<)679s zUiw@kepze^pugIPF;c3>z*%4VRwF)2T!%`ZJ84Yh%yOakGqJ? z0qEy7;y%nFtfex1s2-0inX~snmv!iIHS5Wq(8ptRR3O>2VMBX8C%+DRMdo`e^Y+sV z(|ih*!jAr|W*BaUu@W=;iG3;VheWp#ESX)--h%TnqrZTiJHtn?PYU}Uz-9t&STa!G zVCxIrM3t`6m${SZvc-L>_-A9jtwblvL?9SnJ}yNxavyI<2~i`#n$GVAucn}#5n z?;fYi0JpOgzI#(O34!Wm?c~)JAI9eAOv%YdSLqgln zj@Bi{b5FXb==%KgZlW5p<#w$`a={6AQnfDiexK6G-B_*DMyJm1j%r<|FKIYbt?P?$ zn}z*Ghuw`!^dDOP`YjTEE%IAGCUM7HrB}K$m+S0?cdyb<8P?=WYUjG`*Xc9dpO@)L zzx5@S`^++3;68S>j=I0xphNEHbvouQT&Lr%yH2Ov8Q17|!%NF`Yu)h03SAJc8;mH3 zD>ViaW?l}?QL0)dQZ-@Sm;k+47!j??nCTlMyj=Fmsy$#tGSy@31tXG)^-k~rv3UYK zg4wJBkHfa*87)C#vJ{>H{=M*8FpeRwQtT3HxiGHuwUk#Dk*csG5Sz8&2brxf_(^7v zQZI@<*cutp!4bDCK`pN5%3GT;C zI|Kb<#_L=fJW6c70(%2S`&Jty=5U5p1jat<75EAKh*Co^GWyf6N#P(ECu!#UX8kSe zG%fUnQ|9|-1E;3fp&`&)VV0#HqZjMO7U*>sVZ+E|Op^j|yMYn)$>@j+ucDWsufn&I z86EpA=~hqZI}i#PU8cai4>~rRij4jy+nb+2$39J)3dWDbFPx!X#~g-ncPj-siLp;QD;Cc+u-<7jzN<`@4(| zFM9R}M*DY4b)%;<`m^Ci$}pOOr=EW3u;E71)t{kb6q&~W`zopEap;H_xrewq4Tk^27${jgF4MITDv4S5Y9O6`9ub%A8~&_l07-EgdxoPM70^<-TigO1>B znz7FWZ!h=2COpn;M)tF~C&*;KBh_Ig)9Db;KyA{XFiw$eG z>b-6JqrKzht^fR)h4;(F=zknG-p>*nZhBQuHyc_U&`;{V|Hp3}R87tNOKav$`R#LR z?;+i^;lnrd(}q=3GjFQ<;UQhyaM7E(r_r$PEj_`P#x_F7OB1-pXby&3iS_rcaTGVr zk3cGC$%mOxotdqPU`)Jcidm!+gxL2YxJqnhfQO5YCR8o6jcrmPg2|rVPAhbQ*t`O~ zm|0&3z8bp^WvG?-{80+D0$*)mXI6+(wOx287#*jw^j(H}iP>xp#s=W&t-&bc z@g6WDn^+@cG}b1uu?f2mohFnp-$zEVa2^=(NV;`4IOB;H;C`$tl+)PmyowHiFOjkj zgJr}TI~3g)dp20d8k-9--O%Z6#7&UEN8isG8oP|fLh+2AaCaZW>qnee2KrBuE(1rH zjlYAX@ATHvI8%!C220;H=~ypb`&7>WX7fAn2xiq5Jc-#y=f!Mh`wK8;%bOt|ylnh| zGyLa+u^CaNRv+*~%=C*5W4AD-pKk8SM*RqegFHrKrVPf1&@p8&rURD2_`U+SVSAju zb&7su;1#|Z85c9t8$5G~=o`UT3uBs12_Ll=yoGi86#xz!uO9z&@T1J;Szru~>h~`L zeoi5i{LO*sFy<0Ap^+hJGSo zZ)K)eWcCBh<{iiz!mKes-*~Z~0-k~Sr@|CmK54){23{qFOTf2D;mg50nEe-lGjoiQ z`Ti!AR)FC>s?#3^|5Nm}Nc))eJ>Vp>JqGjdZ_WvG1{e|S6&?oe%8V~Ey%j0T*((gnf3?_SD*ZQzegM1;O!o)I7f6V^=x1sEC)vov)i0Z$ zQ4f}7W}!@=Dcfk+2g;cJXe=NdqF@YM$~sMB03PrLHUa#Gl%0tA4;&Gra%5os$;kJ2 zyuK56sk_0YQULQ9lodh0+X!X?3NaJx#Ww0F7}G=bn1jL9%(e-}oRdyJ@(H5j;5tRO zrgEq$?);k%|olbBovw9A^Q*027LGh46Fa=*^-TWMk%=AVr8EF@Ym`!L_3^O@}n!5B5!nD9yn4SJPgzX&a0R?Wc6nd!w<2n~95 zE(338Hn9{#yG}nlgr1PH1G^#Ph0}M&p<_}JmQ(1n(+?FPIqb|H&@r0K4`AtM{M4AQ ziJSNcPula{&L81@=va5|M|ksjgS+h`y(rxqZ{S9rexRZ6{i%$)%h>D0M1{K8uR!|Td0TIRC4)z*Fud=NX4I;*d zV!U?2t}%*bVBwC|?1d9m2xYy3SiDi(8p-hs1Y|Ht2-;xX^P`1AMf7yJM6 z7p#9#tnpVn|MFPyKm3bto{lyCesxYTRoA)7pr1x{Dr4q>$NRC)7v2tm#MmU zKfFD@$>y665AQm_ThE_-_|oRo=L1v6$NX3<=nUT(A9OVzeaJCKA362tX@?Ive){ww zGp8SPcMCyJ4S-KP2pPrFZJm4MzUm>)CL> zU@I>?WoCSfaJOr{Y*_nCkX-ucmT!3B?19Oy?iE{&3;SN;Rr@!RTchs6W9J+)WZKNB zbLLE+Hh9|7VWW5Q!_NmM+j_dE1S{g*Bd)6~-T!Bo`yH>uVzEjrR`g=A>_c#ivA?W4 zJ+`ZM1d@$S608l6H1Bi-Y;aSF&b>WkZ{cYj7 z#;FkgWh_=xv62h9xXc1d{ow1J(lhWPrYvQelsH8;Y#W8h+h%=|ad1Jo^ zZZ|Go3S+pajcF}^sN-|sQO1>DbPwIBt#%L+{-l}1RK9DcB5mipb}I4dQz+?VzJgs7 z6ezKOx5-QEz>gTme*r&d?0pZrl9!I5|GJXr{|Hm^?x%LD3|j$@bLqbe@8jZr4O4pM zTgt)IR-AY$EYAqKYX3rXn~CB_!fzU9u7N)^jy(~J#p_w#2|HsY`HVYb6|RMyu{>Nq z?u?ar0Ul-PB;SLNHV*EA=Q>wS;SF*8R^^JH&fnF>d0IApvvKA=m`G7Qdcn($Q#Zn7 zB6)Bc{D#w62D=I*Ux%@|bW%r9ci-uJh^r<_cHtjLK&Nr?dU!qKG!2^=VH~>x-p=U^ zf_F2{(1;0KR~e{r6Eln%ZexiPjT4feYn&#}1Zfq$?#1IuHJU5&fQ7_y;^ZF21#(Ru z;9{H)yHw>e$rDVT`YU|4)0qiVa+M-~2JG53i|ZusH@Pi&HL09+wyXO4h^>FsAptV=9K5>21Es{p2V4PbPE|?Xx)m9*K^^d;@ zk8!FLBeRRk0#C?bR}~|D2khD`|0~$lzjP>ktm&xk8HNMt7l**78y8-M&ofS50{`Ip zhyN3InY0DOagMC3XW<#xxoPop7y~NN;1+mm<1~iP?rdCI4C7$ZDbu5~(~NUCN7fZI zwG-?LmpYLCk##;BqvvK_$1MB^-)fOl2g5za6>6A$-0==DHBx5TfWLQ)%X`5TN^;dO z`>kyODD!1CWOo8*% zS{VfRM!smA916Q}GJ(nSR46JCg~{)09LEazGmU2z=z#f)?IM+guQE=LgKsiU91h>* z7=OsSzEb`<{H)0f^p*T8#>Fo99pe(U&Aa9(KM^iCDroZtcQ4t!tu`nYD{N#+{>Shy zjpLJGSBN;{Wr1F*8pPj%A2hCDI(f6?iEh|sRxZPznmjWL#`Mxjb@1srp}!a|#A545 zk@5Uu_R>V8zsdeYSD&JwEH5P1(_qN}&fWHO@cHCk-iiT8(qJad`@#&aS~o_!*P?Sw8<*zmchK*g=tFoALRPagxR=ercRL zj!#t!oggH0B>*RzVO&>Sya(=MTp12;;N-Y`X@qfFI@=g$hQ)HRk}@H3c8_q$oS>}( zw=X%jPSX~p3oW>`L-*@@_B|+%qn1=xV#GIvse?GN3Vz!-HUs{|ID-$CTyqs~W&8+C zp4|m5xwzP;+}k+VuY1yjuG$w!oa1EkuyY)LCG5O6I}di=s{y3!tX$avUSX-lw}am_ zF769|=yJh0WoK9oCfvlLT4*q-kl(hdl17t?bE3*+uZ#yO>yqU|b28plq8`I9_(6nukma43AIu|EWU$T+d8d%?uE4$N1PTN2A( zAI9WS%C~o~AaoITlE6=#lqS>!Ns)wx1~#G4YPl%}zo znv7+Mrge?;_rXJrOMikV8S4i?(@f(W6>D;ZPR)f+aQffDwT6Co%igUMF-Vgeij&*I z54d2A*7TCG{HV$KMHV|X_cD3n78sMO-i1eCSFFPCyXWrRwxdGFI?bgpP9e<%IW|u* zR*ucCa2`1}&ojAlY+h&_Kd*b`-fgve`B@k@Ng4aLR2<(8Z{Qfyw2UmCzF|;4s)3sPHw+pCaT)sMQs; zLcv-GnLOf6jFa?-)@_UnpTWBt7k7jAH;yqNw;pbs+CH{ttku=PyPp78gWwK$fhk3a z-e#;{U9Ath$dtbIapMdHY<w?l>5609l*8aA!I&S-?jzhkZwSQ|D>bV`< zDwR;;1=xAHGUym+a`oa4*NDoXV;hqzgN|K|OSDgiYsB;$uxrHfKVjE~v3=pl+qys8 zuT4VOcBK;s@3~EPTx3)!)arU^_@lI#3-2fN+paM~JSWx`>zr;E zs%7U*F2ax9&riD9JG%Rr$wRztyBALG>t{ader9r4|7o$<+GVFCZZS@t26xnXY59O( z#Crv_MuOb+FTOUn!8#8MZ#z9Ww|lE;h45k~;+77dw%GHxDR;kl@UH$gn{;n@$Z`HQ zW4ad}a=dp!cjuwI`umUUo_Xka@9^%24&A^zx%D>h5>=di6Qc zj$o6aBW+4_;^L)O9zLaCI$qUOkbl?zwK>tH2VA^={C_gz+0^~J%ia#xSvNUssegIV zTRQZLbG&FabHIO^%{=(TSyPXgK5Y)unZKQ1_QHQY?(ZHJ2PKnByRNJz!ju0NbS~ZV zx>3oFA2DWy+XA*tJOb0|V(-K5#lP;V9gk#)lQ2%lMmWt4;4O_)I96<|v5%+6=$ugs zo5TA#`9AQ0#+g=lrsJF8ql^PEc8YOsIeb1{C`xD!7x;rXPTz`M+rg(9Yf?M7z&M!My=+le zjk*O7n8e2of{%@pN5Wql$8N#Z>e*B5crTa2uV81(3}a5**)oRv#GNgZ7sAe#nh=f8 zb$QK)sd{9yI8GnG#wD7A7aOOsUHrGkNgO2pm~j^SY9>n6i(}*Xo5ns>j(_BI{sp@V z#QW2o=~0nBg-(=>b4{`CcW!Q}1wSC$%w&l}U~W0m)o+``?#41w;sE31FW?!D7r`eQ ztK6F3RNR11&2NemRsMc$9P5Jba`L6{GqL?6C7*j^a*73HO0XLh5_ne9Wgy2%o?|+3 zye>&ck20XOlCHz2v1*dSN}k%id&T0mj-!#_$CCK#AWa*m-?;3SuC2x(7-fRw_qJH6 zkGgmJO=~TeMYNrXGVjBC8mI4s4>r!?ZW)?am5EdMjLR&;c%M1W#bs>C@F$&s5ivtc zh&9IO7kI?)F}^f8eGJ5Wr8RT*FfP_}N|(Y|Oc4^_z_f)pyNW+LlsHEnvilgP-i2L3 z<7dIHaPh0U$K2Xhy9mjRrs=-`(|eSHHvq=dqLi_B_EF>XkFaZp)N=SWr}F_!@ui=6 z9;WTYx^rZ|GY)8{T*~PeV5%B*<>WzJ;A4uQVM?=;;y4Lvc2ewBVY;(8w=sWnjr~2~ z3ylLZ%iZ93JbasR1~cVoTE+F3;Bb^n%%uE`SUzVL@!bh%HBJyY-`6-83lDa@HH?o( zg_sD_wZxetUN)v#T@+caa?DSy4OPxbOYImSH-u2lZh zaJ?k!!yB27N?o92$}ymI^(Ztd)j+sD;_L)ZH+ft-$KdyS-CpUB2Nf z=P-KlIw#*ArfAYngz!@1BnB-$;`q-nMV3x%3{2jUqXzW5;@eK?9{3YuKMmt#ijXSt zOUl_GpM<%VJV(5eYe}C3^-Eat%v-Rlw@+pz>>zoPN|u~YrOx2jYsochej5UuQ{`LW z<6H*g;4_U=7r_@BC(eVfa-4@38tdC+=}zMS_tQ+KGWHfQH|QJ3o8hPeoz&oRF8GXU zgPF@C9RIR=)tznn5nZ0^k|0Y>UrICao9;eK+ICdvJtj%v0p;b!**@@#j%lLu*Txx| zTJtE8CHSmRX>t0)?zv0aygj4LjbUjKf~N3HE5iw79TN5U@A_{gQt-#sTi z40oyjg!6HkdN~3bCGE-->`x2VxqIpC2e%FUk)yird1SmduRH$ecyDp{1pYs_dm;Z{ z+5P3C|MbRozrXBw@7nH3%g1};x^LtEmv?`^e0@LO+CAv8zW$#1?s1O|Ok7FbcIZCg zu`cf|`*rs_EZ{PdF*c2NKk?W=68n_@FPlFo7~t=@tb5es1HBd92lM}B-4{LH_;uHo z*m(01o4F+~SFFDKiC0IblOy!=F1Y6Z+RwZ2zg_aub70)tB=z6@0_?dg=dB&@SyA#P z1>xJ*dFzF9n!NkNziytW_WMu2{|-6skXgs@>o5HK zIq75=GPP1gtXrt=&Eon>6>){(P%Bl$`8dp|B~G=%9~&2y=8v&hcuqgByjPwfMaxs9 zl|@^#)8hK_6mjtw%FLCwynrUh8qz7OfH9ZYKM`KXI7!=T4T|L1 z3*mi?z4zeR#^uf6Q;ZXz$HJ)tyuO81$Zj)P{DN@a0I%x^F15}?NhNV5tuqnpHm7wa zVy_SE?3FzpcJ|UwSgkXWPVg!`*En@J%xEro{9695HZGhS_8I84?YIM?AF&J7kHWlYYa|0Qx_J|ey0IEV z2?iU$KN%NRg$o9GLxy3H)EE;LFNVoLs(Q?r+Rr#Y5q2(}oj!j(ud9E5B-dD|kMpM% zyA-%xrG9H%9UqQe&l}QlFLw^tGU+2>mr(F(IFDfOU*WR#C?$zxQWmjhx4 zaE-2-+1NyJx@=~&<8NWt9jfAkO`f<9CbOv07r?IBD>QiqZ;Y&aK0M#JKv&Y-tK@mi zn{ghPD8f%O(;1m$2^UyX?0o~jZ(KSpT(~~n7klWJj)KdV!5zk_Kf$h7XgWHJ?W9xu zJG`N>+AMp6aX`GR%RkN_lXXLyzNBS;Z#w0*;n$u1?_hdWxWfisrQ;u5d}jfbsf;7e zrulor*&AT(wZa7(V9pN+Aymbv_P}H#*7C(1E+noz06SAYU46y)i5oc(&TW;hF)8LdT4%- z6Wt7NVw@cUJLiqx8eY4h*R>;qW&Q>W4ram5lF3Q1vt;6O*jci~5S^znm0Nruo8Qy6ce1YTU&-?(xse3)^OA+j*XxU?^gX%>1Y22 z-(wu3?F!3`HC0sjowJl4I}|r?0jI&6Ii?pBcQvjY5x%?;V+Cr(vrSZ_9L0IYxdpK6 zu*qULXs|bAN32kE?p&pjihnWH=n1|X*UDYUzc6|AT=++)a|msdF)pxDWU$v(cmmP- zCJOclpHL1bAew5TJO(Pwbiwz-#~UYUz7lN~wf0IFgNv)USm{b9|1KOg#Ov~M;glf^ z6_`aU5u~M=i&EWhjt=Lc)ls7RIsecKx-uC^HQ5{_;SM=!l)Or}syGv<})wn3z%K2~up+7!SztRh!#Pdl=)z@^Ha0#)}7$y1cwB ze5+{{W#{{hH6vBUNKx5N~bo;597kp@rS{` zSwo)^MR6%X^K!?^(hW(;S+FaS7l(g{#ST>j`IlA>h~p&QvZ=9OgPjGmzP05jlUKXo z(;T}~7Jk2=I7}HwM z@>=)`lUKzz7$@hzceuD^SRSSHkA$Bwj@Ask!i{XvCf-{5UfEWtM-EqPf;0YX{-)j@ zMSa_B`O;i(tG?Iv%oKR~aYg@f*qMSGR%Z*MC;5 z=HdZU(!!hGPZ^gnK<}@Ni`_hr_Km$!FfOYMf&<_+D$u!=i;H19T|t{RgQuIk6o>Jv zDDK*kY+*!d%II@+@H zRtv4pfbTNS4}=;06|0F+zw=?^INscevq>I*34Yc%b1D3yapg7mRby3YtzJ%NPk4Z_ zy4zZqAfynLf-d&90EVi2MtVaEn0KvZCQ2*|S5ef$I(&tt+bHYY);-Oeds`>Gx5Eje zy)C`_!g-^;J+~SZi}j;_OCx(3Ji;YF#rioX@p00ATuUc?0(_&>zb@>vwRgOJzG|jP z!CJScuOebClJ7rc4W?d^&dtcTT!U#&$+cLt|MqL}&c;RDp#S(acrVA_Bj1maT9J$2 z_jHc&YHj@&lQGx&7tlBA^H{h>V;(En)w67GZ@%wO9vbempSP<&c|y2&KX1G@GhD5Y zi^8${d)Irng&*$k9q+9Ur%Xb)I$Sad)k`*+KiON~Pi_%zIGG>ymp6yIP4)&Pe>R*p zpAnuinQtrCX%1_k_eA&%A^zpthpV_uETqHi87)cJ_uz2M0Vup29?q_;`l5ukVB=v! z!#fY~HuM(vym^3^8=CrkG--8WG-=iA|9y5RymX1*{9o_m+UgST|LQ)jp3CNWcm0nx za_!r5&3tcDPdm9PJ-yaV7QCL;tGqd0_+nS`sGeTecnAB@Du+J*?{+w3$n+zb;aYG+ zJPgM??qAunWMDGzd+uD|%}jJ}a$Qr;28+DQlO6Or&2E)&5*l zZET`oTX>|gW>>XsORB-0@J_}B`i7>vBro0tGrWl74A`3P5?9uOxwl9BTbQ9p?9-=W zbB*=fFWR=HfaDuo&>6+0P;txJVcCb~i4(4m(Sf zv5w}&q@TJKp5ycx%Cv1Ok}rkli_6qzT`m}66p$>1=iT9TP23vMmnNz(jQEsU!P%d~ zjBjEeqiF%5SkEIgqbAli0L`dHd@wx9xboxtI~mNsMskoz@@K=YowSug^Jj`x&cfUR z#Mx!AYl0#*(EOR?rH9~0jN=qu(`S;abXwIArNga+{~|7&1``%ih{~`O7vn4-dpk@U zMv;^7Y-8=)(43j%iPhojcjBw}BD&2)+9IWWTMEt|3V&!^-?t@sfx%MqY2xH)*jcN{ zK&|;S$+cKQ^J!5!)LHXs;#4pAXyf1ucrG{iDBwsgxNnN%_w#qPaRIkbp`wJ&gq^RJ zdf??IPpyJqFb=qLXogMt+G3~~wkZ7)%ol}-pQY}!eWY_dzN&p&y712L*xV8ryGriizR9PI z%Rj(>=T4}AU{fysXw#PDKIYS=EpdTCFxs@G3;nRww5T|{KJ0o$ebbiYnUxrVLW#>& zcmw0~Ij}2G@I{zj>J6^N+mL-~;S?>F{>C`im2{kA6kmc1CePDhGS16mbKx$Nmk)%U zaS|zbjLC~QUB)?TfNthdlk4F{<`q4+q>x1{qe6>Im%y|_RFM(zx5jD7e>7HC%w~)$ zH^I$LpO(+|G1iQ@<^&@nbi*T!^T)#58>bf0ceBoGQxAq??qT?%1+r93@lwm+i;Sz} zm%Y-s@@M!~sll`3bOdviL0cCx)+A@9`?N zX+)xBq*R~~IcMek&)^{@FK-0bUGQo6=O&LfUhQd|#MQNTQ0bKDGPxPX+1=sejpGzF zcd>E0AAB{1IP|v^f@aITZUF%nR4tTHv>wB?O5y@)5jT19J9w~h91G|7F;;?_30Bt^qOo!KkYJpY2}Xm&9F zhOzd;F&p63MT@Hw&($@%;(Fx1!Ru!t;!)43Guq2Z<-) zdV#Komzz#@bNG2(uBPYWi*$zibbiDC&}EqNJ}pF!scoKkZb@9~BlK?f>s zVWP_0FfO4qO8Bg{4Mco7Oqs(#Oe9)xyD+ZUc~y62gipC zdgv0^R8NQ`iuPYUVyuPBS_mO|emMNHi>7QSn&inH;E#<&GfO$+ z%qTuv9V_j1Sre;-w3Vf#KsdG|pU&MY|9~l=nb@ddeSCf zvF4lg!(5z0R(3wF(L_%+B-d!7U0dQf4PL&>xcDyYhWcPHSmr<{ONTALVyr${e#i9{ z4J~EoM%4i@KCcMn-;+twIFDCVD#n?CaHnxXIvW~m5pA?Tj<~rrj0-EBH0f99oMNqG ztc*8K-bY`l9A_5+HL09s>@xyrl2s9s7+jOAQDh9RX@9X+aaHbf`m|$(ek6J7JNOUA z+7TpQkM!SyKQ+#L1V@#ukq|9ab+zngd2VCPnen_=2qkuzAR z`k}ENY*fECE==RsZ^F2II6TbQBmJgrjB|g2U7?GqH@P4~C0f29y!JtSa%)7#n<$Cv zH(lb=z?w~qjOB+-&l+bxfaTgGk$40C$yob8n_XG-sJ=O8a;;}>uKruUSv^#7|B8G) z>JnX0h-NA#P978P_K?@QlQL~S(PVM@oo0F!?q3NzBk7A+GZmD)LW?w0xQMrjeqS2@ zJY4b+Q`98YLRq3D=E8d$XU2ys39d0pY3f$NIh?WOLSrqZXt~PC8NFJZN%ZKp<##5} zOMp4!jV zNa%E9pK7+c@gdC^(u!%MlcB(^*Bi$V3g3K~W~Mn?SDGk2lL=kdRQ>|kHA#x>+txRo zfU>r^o}0+SlT6MkvRK=6;}Y)Nc9CO>(&lWFI22xL@+_lg+h?wsOBk%Z-2#exhVvf5 z?zCF_922Q;w$n7Kg8EB43<)KZClTvBV$U+pu;tkGU#v(RUQk|P}0v(;Et_~E2o8rKguuVFAzCfDD4iK zppkUlE=tNZT}_BBq>+P$f2 zWQtGV$;R5V-TN2D9&vj+7Z1*a*C=l9n_OJX*xMCLbF95za(9j5sa(8fO2HubFUESl z)%!i;1n%1VBjduQu(P!u@oLUlg-bGY_5RN3_hIrCndJKQ*O@ZbYS7Mtaquse7hV10!Gxi=a?tGJ9GWdp@|67KkdS3>@+)> zgzECkdd9xwUF`egMuxBdF`Bv^^fDiBh9~Ib!|<7xnaJIBLfHO_cbtD1OW0mPJUd*e zkK4kbuX-DJFNKp{#oo_{b6;idmfBaZ4{wv?+HeIDCU;ls|C#as8f1>1 zdi;UMO`SRY;PBD4lEcG0CIrjECyV}X|GUMCI-u)PBTD-Ia4G@C2dVhhdYMvVV!Hdh>fG@Q4J zgJ9?in!J@rtDj#&6Btip$%=Bri^j8Gyz46JUC)xIT9)*1iGF-HKxj zJldWnuFQpBW(16sp6B9i3rOt-e{5Vl0{+q1`vY~PAdx;1HFqo4ZU@cXieu}-I~W%? zg?D${8+P?BV^YoCN}su#A<^WmE_9lPCU2tvWj5b9vmSh-adOje?s|S#jqyNpw^FVA z3B!@KSkoYy9TofB;52tDE*%H=GtSYRn!A-e$DpaXTXB^;uU12fJ<6!nkdYi?Yc^M$ z7teA=)1q`u=PE$IWHg;C&eCd{&K0Xpn$C@M2EdOP$Ctv-8AqA9%9PK-d0b@*55V=x z%z$Z0rIXrJo6^SFMYQ>BAD7UlD9tw3te2*C6(PBHxMF>bb{C@COccKle$zOM6Kg(6 zsxitW#}n)KzNU7gBo2n1F^d<%&X^u$($ubWG)1hbU9n~ZHMJ`axP`{&I-{j--~t0F zApR6EChrgkMyV-fv85^D>no;He;lwMQ2;_P5}vSTWuo4e$x&*2lD{x0yj z#_99nE5tPtB_r)wQ-sV(Fik9uFCddWjEk67lf05^UQ(01V!4tgc_aCOFwGP32k`aA z1w28Myprc`h3_}^c7nt0z6zQPIH6{BrBQe~EN|qu?RXxgU)MzG9+(;`IC~_#rEzf* zOq)txq)?jS6>GLjb2^d!KH+SVt1U)Er6sC<2G2M4F{~zZB`@Ian$V4OdczMJ>*1N^ zb0v>a_S9=mz7kukZCu7Am4%QGh>_%Zk^fLI0(a4Uk9zV>%UPxA3OMT8f(8#yEW=yn}J@I=nlN-jqS+?C_#* zg088TAUoZ{Q+yB7u%qDApJD7Gj^QuaMaIRqVDgQ0-i9AHuHFs5==ef}KTGj)f90=Y+*E?yFrW!d9VH;0IC*M=n%JXU+Mp&b{T|-cSTlOL{fzVYvX0M^ zPWc(w*;o65a;MR26%eCwb$*sODJADrrF~%xCAm&7%iUodS3${K@-z*Sd&$_l4xgpR zORmYAJei1t>2NROBn_FT@g+~(SL4EUg3@;IAr=s)CizQ@b66;kS1Lm4boeIY^i%L% z#tA-kd{&ewHOxP2T)|p8K1=c<718loV(pO9@mU?(hNF!^dE7(+RWF<}j9&IfdQo2! z>2XS7u(5Xi7B)B5@oqX%OVQ$#so=_`C4_~COrD@_g{O_HPr~my`TMZ)CvIg6c(rjh zNjWLop$bS{&PCAz{M+FUV=XY(FeV)>GUpj^#5pq7%&p`}J~eYI_NKtJQp9J&`#Zir zT=K6V8lW^$tKbr2y(VfS{t>>+xVk4y<4Ufl!^OqM1!S7Jl{|e*SpJT0Tq@DaCh~DD zP1HugIH4wL#j&m6uZ)um$rh31`EhX0IG}koQ7gIj6>FkaTzZhd4UMZu!kanytMIn` zD3MZTdoCzQ#P~vKALHyd;p~kWtU^TdT<|QoUbTb61siiK{{YdSEI57|{8!`TSokyJ z7@ko2!8khrt7MEz*TXGN{yFT5okXT5Dk@PxvCFQZbR;J@ zldW`iU1${2GTA6m60f+CM<;1jwljI2h?+r@PG$&9!NrL$U^>3o!~GOTtPxO?x#IMR z@ae{}xiE!|Zso}pTsX%HehDu(B`wgbykM;6sJ!7K(;Sr#jT3lN1uH27A5YOHy(qI@ zaLL%Clj-S-YI*M*-A;@&8w~x6>-t(WRoWjhJRtKqtB|x8>dcy z&oVAhORdROIyz`gYjPuA4&P^7eGPuexRyPS3)gRom%@LyfW*l#rB&qIBQy_%5-0uw zw;5-q!2OM@Z^0WI7cPeBAJVT-`=(jO9!=JCnsM$8_^jA=k&-6Jn=Wt>NU({5C~_3x zTE}>C(_-Vq5imokbdp!k-;7Zdmu#-P7>(KNx~--Fnn#(Yb~H7+Vig~PX;h`)Q=R7V zE;Z@z=NQ{JA8M=|n~!$#t6^7KHE#2bt{s;T^@dwbu4CO= zx*Wd;Z{--z&@6Cd0{TnKKE}C8up2UcT)%}5ES=2W^rMy=?7}~TfIE!S*s)UGUp5hvjU*ZCfP=H3zR!k<2 zZ33TUoO%>?HSq3)T@3=P)r$2RiQ;i$zli)r<206PeZ@GMJATtRJ`=fC>L`Miowfyz z`D`mY#;Y`gES)rkZF7F0&1r4>nOucyJIpvp!510pM@8FJPUjwYk#QNzwLNQGD_zNj zGoyBrw9&T8OkeEU2fGO4;EBe?Yv8&Q-2{gwR|nQ2WX08>(EhNo`f2-fE-ua5PA8U* z`f2<7?#q=rYWrsvpx)p9qvPd#;?0Vn-ruo~adH5k8yYKvj?IlV5OlaURt6nW8{0t8 z;hMOt%DN`b%)z8uwH#%j1YH})4uqXEdOw5dcG4*y!>2P{l(BQhDC4>nm9ev;D%SCX z#jX5-+2yR`UNGIaqeh~7pra+t%D^MCmNAQyWZK(Bs21QYO|Ii2d#ixx=$T>f8BRVE zzS_7r6~5V673lq-aj-AEMg?lU-*u6D6W~hP)XWSn9;^(CPr_V_wU>1Cx@DtkGd$;_7Db zUdFk9!jp`f$W(`cNko%DBc0-x!eWgJaSV`0fF3z45}996Q%Wvo3aoljVRzP5C} zWUPB*=Uc|b(^-k!WSrO-t~b+P!WEj0{Obenq43l3{&*H)kJ^oo zmElFZ`Mdh#a?>i`XvT&oNVK0FbMP7ka^+Il z#?B3&nBa4qLHH>j32ryu`_V&%9p4W}P4ox&yEKOfPxNicczEeVpOa-aL9y)XCVX^=2bs!7Y zNuJx|KjhyP^!)KrznTempA$bWJg~!S4X@uYxu|FB=lrT4){cvJ_8j@Vzqr(~J2t0_ z_N57epTjMV&kBdW>31D*7NQX*${YsM*`%873vX+j|1(Sni;{R9o?z_b#j&Zz@hxEW zdg5wcCpO2p#7$0fK9VOk50|~kS6s$|SZE^uLHJtZ^!@NH#;J?oJB*`K5YbZ-X>I~~ zb|5a4U~XOFoa8Hvqh|^@o#a*SEIQgwtS^F^n5gL@1?YFASnH_0ys^(W3N3AkA{+%% zM{$n+uT6*I=$V4Efo4TK?!A&1Ux0sMT#pduJ4Hy(AYh>dWR}BA zjFXGP)qnB3Cf?2$N8dzMh7f&;RJ81GVeW3?U^G0yxJ+_BgQ(;>JV^)LMf^3qlX26` zaQ0iY!NG`To2Y<|bgrFL%iF={8&{}`f3tCpu~x_0Nrx)L{AErj1wU_`*a*fwq~q^Q z(Ol6hlVDf$B5tJfqQd0ceq|Vm1p8Tp9HW{>!YDEY(ouF%fxdt*Fiu_)j(wY{hKYzC zFj0c)>WhI?wQ(_^s^Zw67zFEiGBoSUfaJ+P!_HhAa?|NNd@JtesfjICU<(nQ`U@czfgMslo2XS`Lsnz&J}`^rS!; zsCD(EAj<42n6$*n$KflCGgwOx3i^8Chb#SJElYto)GpFXtc&gxK{j!7zWcGm`Hv)ExVy{{_onw?qN(bRdr$A54I4_T3^UN@lYl)N=b4n*ceKO;Wi@o5< zPG?ux*(OcfWTrchC!grh2}O<;gdb-SQpY1d!zH>1{-v?zK{AVtbv!|4sj<3T<_Y5} zqix3Ziqr=1pG{so9Cmif{}GSZ$;(lxxew@QJaKS8e58|i!e<+oPKW0im!F3zl=S0s zVAon%ER}uOJhS|hEaDS7hSHsTfyw_pZWYuQaHJOIz{7I&t{1J9dmc(lLYg}Gfg$~Nsc-0a| z$-6@2H^j@4NuI`g3wdLmeo|<6iQ*H5e#V;ZD-1QRZUwtupk>ZFluzlDzJwp_N3ikbwZF5GQb-qAOPX1K4>(FDgn z;^xNbjo|HFI(Un2l}ac1dw4&7Dn?}_b*=pr=P{<<{ShhM8ovC2KjaAINtzOA<*8oj zA&y=&;oQCa67px94yMv8J*1;ot?8SaxVRmE9~o-_x8CR>d37(C@{5Dd!`XlHTWc9i zTVJJ_~O`RQ3g6}w1lEE(^pk3BNyuh45ei*LLA1Jl2-sFFl1& zu%1%uDMXYUolj38#93}gW!GNiv*DkaJhuSe-Niizo@^X%4wsQl?FmG9uaeN#kMbMF z0q$S^n=zgeD>M2?M*{}?-i`52J!g^kTI5!Vo?@)zYKJRZ6Igb%12`m&OStdbP0%qxCn^NmpR!PzsICQ6lI zDx+Xov$@Gwe%M_1t6A_QlPAf$d8V;Wy3qp##VuikX4h4H4B3p~C6DxJjfhV{J|AQ0 zB0(Ya)IppohkZU}?T6CCHc>FX+>$l+F>Z^qQECyqgUPFl;XNH+10Uh|hH&nuK8K;u zkS#qf4Z46{5u&s+UxiD^t~MUgCnm~w!K;nS$1)k8G}dji)tN-cZ?=v!IlVE~>Wa~{ z5sdkjbi~IQrx;OM&onOm2BybIM`!r7UdIoi9scfDCho(9E2Fkxx4JUMPk`TDBcXp7 z`zIm)$vFKwbMy&g9T?TdK%xxde-Cf_JIze8ZM&E#!;sPDn#x}VyCzAKeOqWcT8`EB zka6N#_*vsLX|%m+toovNaNAHv zYF}wGbLK3|vc9aIg+qO8Qyu6& zmg#+slaGL(GcNUoUo-aR!p_NqAK^91+gUXo*|F1=tLYVZwENms`V|-3n^N!yypwU$ zDe!K_dX<*u<7F4Eh0uJwSlfd&A1_YPb2J|>PAq{LP{heNe2lR+WOklp96x&s7nEE| zRh8}><2fSY4 znNvePW8(dso_U}7HP72KEPufi{@8GzFZ>x($$uTEtQzI0uh{gvO>XB_VQ+8;7(Vl37*fZ7pB|GG#}3FuzYg%2y?EEedRVe(u#JmqVD zOD%KjqNO9lObDMKC6=Ur`85SUEo}eB-@-4K!U^9XJv}_@8y<+|Rw;YF+cpC3UB5B$(VbhP3iEUHY)$Op9;r`~}3IDQ|V zVC)?LA8VZXCyWayu3lg^=xJjug&9Pjvx@YL`PN_Gt0l*CS{F(ZM!cDE)4j;IT!R@1 zq?6wj`Onv2;!CboYwNq4R>T-oa!uN-f8ZK?m~rM+l}{!juvDmar@8-IQpj} zIQ9KX|I)AY+}Atcyq{&^>OR4EZ%H_IT|QQaSFRiE>d!5QAFdl*&y$Pu`XYTZe7$e* zEC2LZctTfn`HVi;BGC`sb2jNYykBsb$K#L{{e$EDMa|*Z0R*2CUO9l^WkbUc2Lu~< zpM=c=gDxJCj2svYOgzSyl}vcBB)<#iZW?b3uOAqcy;b27LcJ;B>jOE(`NT~)%z2>3 zydWPv={Rxwa5o+AeCqb$34?;h;W#|#7(QZTxO`BszIS=gr-Ooj3`o5YJ?Hq}{1)?` zgLV)4*|9bM@m1rqj-55_@MCAN#bNe_iM~BQ=KZI=aMr}&%>T&-3wr~4&$PXRTYSCv z+zWL0&B;qwY;~*OGj~exPF#;X%H8|_EZWg-e@6w#ImaX?>+?POfo8s6Kun1C5lr4zpjo^Gr?#X0~-@=5_Few5}E zc&>5kZupn{B2z%}Q7*W7iAxNtjrW$n2QM;tj&NG08M0h8@b3>#M|6B)*IfzMcxtK-SJwm zvxI(eYZHaiO#K3$<8;n|FK}{3E$yKwMl)*MO0|hX5faqcTVWjg0DjZh^I-;g>1dix zJ1oRn@kda^nTz4PvHuv{Zmd0Y+F>F6>>2P-$5+C&QFc+;iwkNbB|TEn7KCsC^Onwtd*JCVIhvw?*4PewJ0-Jo6;1V&DAFV zxJC(6^3R3WF;0F0k2B5?FWATFG{duv^*#gbuux`+=i&2=V@e;3Nv?-&!2;S}7g-!a zU-+Za;b_`_A_AFN#`bQ+k<;k_GrUi}qhc5gvfoGfs1_)cy;}W50*Db2@|J-HbKKt^F6$ z(b9T7RS~oGEqbaVPJG87%_&Z=&r3aS9M@9&5*c|(7N@e>ZXu2~MDPtI(!B<`OHY2K z?G}-o;%K`?#8<$yj5v>lldeUx@5A`6J+l56Hy8#Kga+(AtrC3+OhwKzs6(FTo3PA$`G8<)sb8#E-> zgF9`|C~6icc$5p*wPSC=7n)M648LsbPls0;2k%9%Qm^SGqKy2A1T`6xDH!V*Bb~$( z73My;%UI`T=_DS>HD8<=V_e)B-o-dg$H`1^ybN|OkiQsqR@2)>c(=OsUOk1%oa_?n z4WDjYcnrqTm09vP@DIj87XM5e$B%`bb#y>;^zIc^1|#TIMT#3pzO`}sCz!%YUb?)- zg}WK*%#AEva`oF`*Bm)4(s;KzKA>lVitCYvHiw8cU9N{S;^_Ix zuEu)!ugxKn>n-9n?GA||kcf7Nh&@V|JIy$G7K~z~a}4YpI&&p_qsg`5PPZ26q&|b6 zG>&$ttTrxJaQwhHI1nyIT#NClkAJ^howm#mF(sWMncvqqjuY2kuC7y$%vzV zrxo`mW6hm5-mOl0+8iSNGT)Q5IYeBz9)5+k(nS%o=if2ben#yMi6YPov^hi^dxc0z z<1AiZXf@V0J?$2ePMi$%$WpAO`h{OQIr(U}NTf3mCS7qt?caC-JLWCC>H<*Kl!KH? z-@~68XXe7+7^mdjzOhde=mqT3PbT*3*xMAo)A7!*4(wJ!c|~~II6ek;HBNjDzisjuiRe7_s6eWL^MhiD^#YS;4}?p` ziO1pI#sN)NmL3 ziW@-G9F}K8RMi;rP9&(uQdvd7sk_O)nP8emhfof zLIK8MR5-0sX}m)|4ZCicqR&^IGwOL+;~nx;wDAu4GvP&+j^>za)kp0jiz75%B7ZUb zhRbXu?7ErW^4EBW{AJ8sBupp$F5Ki2#ebS8pbDB_3=cIfJqb@T)*IHEW=33#<*1pS z04YN18klwym;MIRJmM(A1&$9wKHpd?h8k~`$Lx)_%46!LmrO@a+IXw{Moe)J2PtUV&mQOI8o!>^LTON-Sgs2ES=;o z@HWPUzrc(MDo~Mb+j#fR1tyOYz0Fu#o?Eei^iveF zm7XKc;E1iy8OI01?;Cqp!=E{(Xk*LXEO{?K;0=@iMRt;g{^*jZ8UW^H@ReG!^(^K2}tLfEs8?UCP>o#6ZKN9|f#Z}jByqcczp#Ez5n${pRUQN${(0Dcd%dqPz z%AoOTdNOFdnw|{muclW9jaSp(1n+Mdr~eKgZmh)ujaSoO3SaBSfA0t`=z?lL?c%Jz zr9R5|36pCFTSwiD%GjAP%J>tP!7q`ocImvyQ>cWCdoo-#_I?d-Xq-HO_HVqV{vjSG zt>+@sRT^)pzX0CX$+v*dGcHi8-uOu5uvDNo-ANpbhh5vN0*&|9WA?^->+goYM?d=h zN39w!t}nr9OGwKa8ZWNLDvcM{zY4pi(HoySaav`p6`|UzB969+xLPLmLQa2|Tuav) z@2!7|{;$m{3MhX-!1l(ub>W?i^_mhr8f15sz3HzOmaAA0iK3)!=IGd^RKZL8!4*L50c81O8F#r7ycl8g#G3QXo zr?oSnH9YB@pu&cgi_T##eBUv8slC7NdEuKVd;9Q0`vLywXTlB7{r3cUTVj(o#@a5dIrJz^ZV|D$ z#%ad1XbxQgsWDt!W&vf!o5n#zkHU*go?ijqW30!0nnPFI95+SHp^I6S|L=o{E`&9b zBhPONziphF2Y+l_{1u~c>_@xM##_yyM-jGyH!{{K^_oMEGT02>!MHdF-rX^U)*QNY zblP?OAfohIFnW>~DQNv1qI7?FzT{;FrW3ii(Ug*BgfD+atMCm_)8vX*q1XGAS)9EJ z&Kn1mwQ&&9Q*b|%Yigo#5Yc_`D3j~EZ~Y)5pL#S7B4WVTEVArNs#N13q6zRLCfCbDG)*p@C^J`?GVUgalw326nkA2Pmci>7r)I8s z5YbNr&;pSX{-$Yiad`}UigEJ5u-_L!m+sk(gNV3MXd+yy+55sNUj%I(ID_WBB}(1} zw;LDl4(AbE<3_4!ZUt)|tA5OoR=CFJIytq_EVpztGp$)}aRD=HmRqca$C~99m$@Hm zmRqbdW%OG~taDd1%N^-_1(Q}}^3*Y0Ac!Iy&Ap6<7wfeQn&lSzlwGsjVoluEPZ`SW z3y&~)Ogh|lq?7zTyqmFJEnYumNX=M3Wr$a^vmxO`7lB%7np=_ew91Ydip64E!@qX& zzrYU|$7yp-LrA}fBh^nC(xP)sdq;Boq;bj+?NUEwNIw8I?H%pe*3^*Zy%j<0Vm0qA z_9&RC+6_7s%c3mT@gpM?MjPXa)-qJ~Z$KUzJ)m3oRt;tw%owbU?VJav6YA^U<<1A^^ z&m|fjdy$LRT)_S~%-Y79a;P6nlxc-sf#St*!q-8UP9jOKG}ZX<=tv^%p3ua$vMbRD zn%Iu2^AFg0y&fTHVq5YGw$sG6SRRxaY)y68vvROib1 z%egquloI>F-@Al%r;oUX(n}Z`XBT19`q@S0f$*lLpP@19XBTDGfp;)@Jb+0{h0f4_ zvXhN@Pg^aPrPfi+HYea%5bs4Odh)!USwRt*7bvp(llV>U?bW? z`)-te^$hr3V{LxYTz2HjmCLyJ)&)@N`bkGxOHx1SsQLr!2JQS)@G#Sl<4yIGj{GdV zt;tJxTH~anZD6dbLTFx5Q-9*}AK`j?lnx9RtY&0uLFT+t%d2&RkZu<5%-vzEUvrwf zmOTA?_$6bH%H`w6T6df;8S9nrjf0I|frpwr@dmu5aj6@|RicqCejpc@SU?UxX&h|y zGJKQCHPzTS*hun+U84B2=B`z^%9$`3ii>}S-!axn<(j&dyv%T{scUhS{G-PJy3pBQ z1tj9!6u7Ukhm{Mi1H{jOH#d1O3ckuX{y6Lk8b1zx$mH7gUU=HL`UH%{lzy^5+;9ge zt+s&dg_JxnW(RCcYbX^#udXU~xX3tt(YZ$PGE7@BAhh3Bbk3EWB_%E$%T>1#6Y?4Rk zhHqwEjw9dJICCewi*Xj+`q@X?Y*U(J^4K9T28|9&s?sU+B}a*7aQISaTs}Gc@;kmy z&;Xi@R&X5G)ns&3t}DW!-&2KKF`aA2(n^^6C^%Pxdpp&=;DN^aYNC~e($Qn4^47-w zTJXijiD|HNxZG%%c9niG9KOpq_ZUpih`Lo3p^mSYk_IEqJ&WVNff*IWrIX+aWTJxA&M08{sfUw~cT)@*TQE2n>QY|B_>tX*WNv0e|M2uW(F^=#tk z5yN!j+>yv<8>hbx=l*~Jsd(jf69shH%7ex%?TQw}N6B3QyY3#tM=P#(CFsSKe>#2q zxbnSAdLeem7<>3Y)%lV(UFcPlN;8WuSE*BEK)q6>>MG@7_WY!`Zr@8yHWkh zSg+}8axRu!8>ZeAEdBiUa8&3rLp_;s z?okv_85;KciJu^fY{ozh{Rxi8A)iuj6$+uf36TBwggFZOiG#{w?su#+k?9Yn=Qwc(IdX z@s{5j=V-we^ps9%1#AA$;pCZTHQKA`m zKgalED{&;(@ATGVjMG)vRY1QcTU`a>Y4|qNiPEI=DXvc+Zruo9)J6JsE?zX&cehrY zSMvC&@G4`kC!FoY+iLXfwl)_H)i&4c{tNH~C#NiJQ;h?x-FA+#4hn4Rb~-6|fw7K> zYkSFWl(Ov)a2@fr6G9Y4=Ii8~T@p&s7RVVuO#J6y+51|1ulJi0}? z7FB2Oa4o6~I$VoJ=hhu&`WdC^TC}=BxXO=r)h78)jU`th zyjR?Df4E{?ya{HEkv%-@)N7=%4vFsV^s9Mz)4IX`#>Kv-l%#%or>Y{C&x9{G)>nz% zHyC@=p||TE!F+g)3iN){#l^6_T|t}Z8k!GQn#CVrx{H`Mw$vJj7gg^ipqB+C=!czs zTm;;$ad;8#RX@BawLd)E>EkVp!;2n*N1HtR2)w;p}9f~S%9`{cxD8f#ALh;!CpZ`u+=-iS*~ z9x+8wnu%G+uVW*ZA8&5;O1~xG_BHq(@NvigJ<%UWteGOnGNzM@ z{xr?AHt9b&4S%W0-(W2CtOo(LN&i~FS*Xb`r8|1oOUc@#{}lemq<^>Lwu#PxZN>!e zBoq5*+_-VU_KE!)T>m&)^&9t%ZVxECEqiqBb&Gp~9pd}A4|SR6CauTiVmD8h``pXA zJmyA?53Y%?a8HgWfoomw1R`F`IS3O7eA2C)5Ud@)$>rC_L+811>jxt>O`(3Go3(y0 zG%j$O8jd`~MVd|y^EZ!c?zWvhj4yUuP7KzV$iM!E z>{zsDVz5^HfPtkbj84B4y``A?zj?!=gXaX*q`SH!wX;q?s1B6&4f^B%Kd&je2JYA| z*ecM;2fMg~4-SrWw>BiI|Kn!?NByh~q!Nn|t~1;jN8}3?F*)Ae~YO(_O^D z+wg(Lm3i=?#??0XB;y3*Lag67Bc1d45L4vz`rKS-0p$XGjaOnw)|&_E8{^^z$anS3XH0yKv3?=O8MvgMUJW1bbq&Incv~g|^7=uclI~ty5tlv(F?Txkl zQG&FjQ>6vfGUEJgFvCpLDkUnK=(m8fB42HseFy%Hagj#bq%IMimvQ`;^nvidz5WP3 zEz@4-HC#EwRU<>4LBJ5>^f-83V;#q)ulmx7;c?-X#;JSZnZ|lh8}f-26_l0^X<>0j z>745Ie+kbwt|O`Na&aHj&CM-7;1QUwC5jw8&PU)+jf<2zwYS$f0QMQkl~SjeJVP_3 z&hcBgN(WYiBo3eYkB|J+rTszkR(I1aDS|@v zxII1IIQu)e*SNSNyq)K7;N6Y&Of~JhO74ES*yk^=WA_~Q&;FpZfax;tnSL_OKCKQL zOP)CqKGe9>1~cGDUZjSaP%ln*!NeDbxNjZZBN|}zs7&i)6p)hAea6Y(!cQ4jFhkvo zUgu-@P2*^0KKF{7-wOFZjpd?x?;yDz9A|xjf@QGxsNy~J6>T~$rP6BzT8SXSB^U86+`#-nU=sLD;un_!(SlzFpvlEv{C}=6xY@ zzlOgvdHPlyIAyGj8+iG!LsSFpQ&8x%fbeFR+NoxhY4Akj;x+K5#-$Rxy>a;{*pCa9 zhuo4g=v3{9PPgFLx9|dEy~HkDZk!~$!oR)zPq>6HSFj)Ky+Qk<7e|?nR@@iI8>g4T zQ;icVVEkUi)x_Z`^};t8$9@ho%1ghB$xFXCuDciR!>1Kc9?Q*}#&K$*IrEao zDZS>*i*?YQKKsSNxv;OXJ^}UKLh_h+q;d8T*!w~0Vt5mi=csvk8{=YXYi@pOH=JrS z<7_^k^vJRNkjcUe;HQjrFt?7`RYu7M_$^}%AKH~fat%v5WjA81p!XEw;4YYsDlXw0 zdQTxvqObQ9;w+VBiahgcxzQM<_Y`7{Q58%V@qBo;ab*%rEhBvr(cvlLItrxsjpEcO zm}U~kcY-f7)|SDQYmGBs!oM+&&BrGye6lM-x*mSRIC%?92_;WZn94WCGJiERmieny zV||0t4ttUQ4lq6>&Rh*|Xso8Ldf(G@5S?0r{V@f#srp)m-LS8v-al1Ow8&aJqt}5- zRNHpz_+4>DiC$-%riS{8A$frwQ+?97^gZmGvfK~9ZE~g2rvn=lL7!PVutBUdVC$QW zwU%B7Hb|cPE9{*t)dEj5x!&p3?_gZL0{(?@;W~J(v0ky%FE)<%z*v|xnP2}cH@?&v zOr@Qal$oBc*5eD}D8e5-PeJ~?adpcEGCwdYU;c=M+F;p_4*Ux z{b+v$6o1W)FKO|9_(+o{sIAWGm5vsI=@m!Bz3@U~6+*8&A~}U<@D)&d>pWk{qe86o z`Z<1N*9J3v&^CILrni7eSP?1|qH#OVx54{+{w;j8ahz_ZdGylHoda_()(*3c4;k0p z1V7{Dx5F=cc?N#Zer4L~fiHbrrS+vxs@uJ8%29$J8YkA``mJ&1 zX0HD+uEWI5DdXS}xXU<>LpQJEnPzF;$m<^pZ{Y`_%-7s_AJ977W?6y~t8mSWjFTha z-x=#vSiSs+bl!(o7?*I|=C3@T&pQZj!SE@#)#O>a=Ahk-%gs39pqeAnMRfG95{*9s z^DkC^9`vfQ#)v^57^~Y3T4k(mtEZCESGR2`8mrs3v>9tGXc=W(?uXZhH3(@iXxYjF zQa^`xHC6^KdmBd?`1Xx5@a-FA;M-TvUv+?y3Q_la7)y#PAHlwfc^4CF@s6mSp8Hxb zpOm7v?cQ|C7;8mxW!zdbBQm(lBYg%8JgpOaI`6>KeB1-!?TzCUtn~on6wTUZ z`fQr_G&lSD$RyNuj#sL{mw5RG@MFeBtfM1@RcO_qjjkltBZsy%D$t%cxy;_~3tC+U zPx9%IM*CFX_DM>tR~kyFdNjPXv8M3pm4@V6f2lVb5pN04GENh&HyV=bL9pIvMEo3l zsBxC|*7i@5>mi4>e-c-;JieVk-Q+Q|wto_9BP?zI6h**MwEdGf+z`f5#dXwH+dql* z@vQmu;;5Ey87JOE{+V%^fvw$lU2TloK|yv`gyap}U~aL_Kkex7kuQKp8;5gXc`Q0< zB6dvkjF~&OGu9-Mj@^xeJ~wG$&^?C%v4f_sJwfld(t9>e=JHzK0>up9CHBy3l^wV{h zaVi1dy9WCj=?O&FBPNfS+C?S*1M+A8%d$dBCDI>_FmUOGK~JJ(oBviLdC-3~lFtmR zyg0Za!3u>lT(Cp9kVyBq+jeK7{J&i=DzVvSZrI}B^TcK|T*GC-v58rmx%rpzYG9AN zdp){Nabqs$-M}kux63i#8SdoEdFH>)5UjGw-EuiE2YMUrV1olmxmGN&cZyrG9y3h#Q1S;$sY01$@u0A2QpU% z2b`6DH+ogD;(zn2f^WLR_w)a+R|5lYj0@kgoq>k_PbVN8clexr*4=yH!SUfG_(25CBg zUJ{6d7u|>Zh24FJAi~`x3h6s~Ngz&c4)ZV8H)p*h5I5n~dPyK2bREnfCXU`e(A47g z!;l|ptkT|yii!$0*Ew<&!FGO?!EXnBG-uct+^f7(rR4_;Vjteq?34L-tqu(ygH zw8u9yd8`-S(YWa=*ju7$8N9#A+Zb)NsfaQw(8c1X8aHnRUm|WN;8t#~vw#xU`0d8o z$K9_E2)lLuY5YGXYCne&i@`|gRmQrN2ZYUi{fNezNH6OXla2MxJi*7CR67`Q61x~D zPlxAtIYUSS2arx<6=qNsx9kM-K_YI&w)#pXu6zpnHc%B33{ksBN~5`X%9QlfGx3sf zl$kGk>wS2YFMAVpN;aELupPXXaefEbdlye$RvZ{M7a9>U;3}K!nQqmASOh;!4wxuY z2Y+B(*~N`JC~Rug`q99rt~q!?w}m(V%*{Rsi;-I3EtB61#=VugHV+EUGtPexla1sV z2JhfT>xg;DT2= z4dyG7Ii7yD@G-GW%6mIWzX!`Ky#yTWb8-^+!HCuSBap4nOK0L!m z$PjR$aq&a=T4Qza@DAfLO&dOLtfy3|Ul=#h+^GYNON(Hif&3zck11nKTutHjVm*q{ zJ}Wcgy*L}ANXoZhJq1WTW=dL0llrr9`#AU;c0?Xx`5Cg1tSO=oje+ zIKevQl#W6j9T_yVOqal;M?*X>J}kdc{m zV`aXrB#gs5VecW@-c^eXq|@*$?7cho0ZauXZ`&L8#?ewj2rgspJQ@u4VS&fcu*0JT#7=khJD7G&X(n08I-VA z)@Phr3Hyx8SS0&T(`jqrBM99Y`Z3jpi8SR)ksJO96DZcxUrkntnEs%}1Y*62)=XmY zAS|V=oFbj4VQ=0Jnl!h+$vduwz3)}W!e^SioeKBqr~*Z zhQ%Izr(gyNQ!&;Thv91AE~$FTVq($0rv%h3j|+_JxbKFpCP;PVYG!=M5}EoEmHELq#66%=I4;Hn$v%Xm1ncY5mfn z#=$DLgy251D*ejGQ0yhfTEnJowxX2q;!>?~&VyevdE0&PO5@59_!DEje<@*0#myba z_{25hD$JN6*3JjzX1m)xNSuD=~ z1@`sOylS25C%Fy~(s9IM{cf#JFz)z0?2A?IfVVSwup0J_rJ`s9n3N*7E_Sny4!h^z z$9iZjQTi;Hbi`Tmu2Q8aAI0NetgUo(aIm-qKd*jlT%}>FUmI)1o~CR{CpF!zJUSdY zwT^PuAMJG~!TrV|?NC48xV{r!Y^>q7-aCKC)vos#%(f{aZz?^^tM{hTK&#!cm7NCK zdf((4XzTxD^3Dd_A!po%pEe9KZlGBkx{XWs!|NJncZa7MC&;&9Gw*lRlepQ&0`v+^ zkF%9=>@9eXu@;{+ka<*pWI6;uoK(hi7_scDiTP1nY}@dlafUW+c-rer=dZ@a;~3By z-nAQzB@K*%ik!iC4c@W!VyMyAGDBlF`dY@{frp!Z6PY%yXIw|;ZscF-=+Ro^w#Ll| z!`^8c$*1us$@_2`TBy;tT+`4*uQ6E@yttQi!I_xObHEY0v&27EV(zB7vJ?}h(n z@+<{w{M1;p%NqY}+)2~uWMk>cRYNZv5eVtpRv5I$-7k*Pj4n~<)1wOt{4vrU|*C$6JdIrbdn5H&6M*; z{jr{pL_V3`p#Y8DJn@c{a>u*gTfaR_65^I~;olf*UCtnH zl0m1!m`FMe7s0+59i-b*GI_*p#<^3Fk1`%~0!%YT=~IQ4O=E7~6T<4uePCb4B<10h zf=DOz9(?v1>5!k|CMk~|WJhJ7uW2tBad|iRF5~pkZutqcvP1L_6BV&ut8b~`=df>) z0@=4tF&)jT(&Gvxmw67R1;hm!s`Vt}R;t;0wQ&nY(yw6Y)FEqq+_=KEjjBYg+)5W| zTgw8P?{obpGI-IA+RikQx@OyjKHkglHD2`&_%>tpmbUwi)mz&9Sgan{_JYaP1KU;_ zs|U6*5UN~SsN2p}tlp?a0h{WknGD)}J1K*9-%iS)-M5p<-Oh+7eSPq^?_k`qj@#{| zuzTh$h`cSLw7ttjN!RS6q`h6Dq@TAW+JA}sO=CUbZ}+{vd6HXk5+>r~q{9byP~^_C zSEXv56O6SGy0h1~^;-Ba<7PTR=gG#}N}4EMolljqlk8O>xy{puTB@0sCuaEq~~ zSPUL)%#66c*x=!I(=myFwT&C7+29`IPMl*fwNs*L+Gg;^#u+6#-MBm--pW{SFb2;s zRxJk;rnnhuJ9x2i1J)dTquA|pO4z1TVg`FZ(mcbiys7EL%`S?f=na2?2YG%Q#+Z@( zbJ&l74UFPlz6;dTy}QPlPAGj})ao+W7ga0xy2v~F)u4r$T{A60+ccQYs|@OY3ePdt zx8AO!jVlY`6OG$%fcrh;(_MZH(IW0HI)>8GDJosp7>9p?{YMukl=Q{A9<~52KkjLuS9e&62mvGHPUV^<>bhfjS!&^%|c8Ir-dh8Hy74_I5(|!7XhIbbC(d%yI z#@D8T8He~`qizVi$RcP8)R3!;b%N9o;;3fLd&2h`Yv;@%j~M5u<&fu$gAL(VjN3!l zSD@|zKq-#HZvA}+~na<7%M1CeMkV~wGo(_2%<_C&G02jS{G~8m`c?~?pxPz7) zwxx0T9e5Yx{O#~;|NK^yaEHycfM6e(Oq5yE=J0vOrQ6_3jf-?9E&Y*B76S~s)62{7 z1IC$e-Rq}OKR$eh(dbew*TerZ)`OnmN#n*8TrzIU!fnQyX*GPLaRKKTKHgZzEDguT zN>itL4W~Hb7Ce9W-o|<{G5j$9gJn>?JL8v>g*F_HZKSK60ERzl+`cdTf^nAaI{aN@ zJ<=ae`$=DW{SBu_iQ6w?T~O$mZaji&OP=RC!k4|U5j?`=;Q-7yyjGO)1>E>fQT`6z z%_p=J#`e;wyzFM29(Hg1IilxGq!X-0;0FrsJOqB&j#6#LVMo%yle~NsaU`$OprhzyQ)==dCf5VuQR~EF8`b3NdHG`GQ|X}-Y5_Z2 zKr2NawI|EAYI1KRO>rM}cq}%pCO^jX>*)!jPK(91s>#nXc^1zbbzv+vwI+8a*Yl%M zc+q&1kBttxQ4P{G+bC+kZ7srszCfMGpZAf6x`k<V#7NuQ~+&#)36ak1iP3QQpxF zu~?5!ZZu)FY(`VZC>w^X(c?|70e>`cq*FHr-XRtnSBtyH8gUPd#oUOq!u9)T&(RcQ zY)$EpYbY^3Mj0$Y=dUL3z<8tIj>Xok>HmEV{ncKdcxz=$o>>Ibs_S_DwXlNdQew&a4d!*14@jXFErGrr2rJ3AaI>1`%madvpR2Gq50$8UT}YvcQ73O9FN zIGISd%(F<#=S4|sd4p7he-T+993a4hSmcRM#c zNV<=i^h3Mk&kJ{wboP0X?iuHWV|%dNy4PE+Qw+rG-fU&k6s&cB>*bHb=&7tNH@J6w zDwF0%sm!uV|9mp;bW7$_ssZ=pe9M2r`H{|Ub~*X{a0~53IqqyrSj#uY&9{Ub_H(aG z>xWA(2=|1gt%2>NY_AspLyQKbl{17Pr?K#vk(1ZD&qfDP4kM~?a zN2iHpDEqm@Zxqi*}Jmlqc{+>roURVV`XYxEFUe60Y9fq5p zzj-+g-1Cmf+fIT%$6fYX5Vork`WHl|`ITLsw9BVeAh0S3!}R+(Pd!9h2h%q9vXP!1E!yQ4SvG7 z2{TRf<<}#xi65IhHNxF?5gu7CxD^+XHJ06g?_%mv+A(8;v8L9%`qGODrGgu5ZK2xA zVgov^Jf^T}VBE!FTcYm^Mn7LzJx$o?6(3H4HhRxEw-@}Kv6kRZX5dg7T3$BU`+(w3 zp7LM)$$qei^kBx9U=Cx5^E2 z;n?B3Gni9pg=jkPl!?ZbEIi$~*z4xHaNR^D>#igU+g2|3x2ttK&y87Zp|ci;leJ8E zV;sLW&1U2MEs@L!w`6g+huXP(S=4kB?6Mn|;k5eHoEf*3k$!5`BGo+!cN(V$+_jfc zU>tMm!6qs!hG~o13f-ywKdP=G)fR52;{R(?H~mee!>gX*Qv>5J52wdBemEA}gybY^ z6*D%AwaR-Fz6I8}H#FAS>b-R}c1x}ZhwiE+LA`@b7BPKA@diDO+}kzc^-Qkmo4ww~ z5ffkf%||2Ow8n1Km0@?`Wkgs~!HqAw-4JbzJ$ik^>lJ11Q5IZ20X}XGKGisTKJs7I z*xh$!IQb9^(#xm5QmqsJ#z&g~-?;|U8>ExJ069MVBR^_fxf;3eU=jbx*BbnTaXVdST4D{x7nOaAHk?*mgBy(pZGya|#_mh9 z9KHjh9WV&Nx8;n@%^dBRJFl#3WwKoMg66=z!htJI<8pbEA5k@PfBSD z)#U@ywD6D`-_K8@8Z+c{*ZALjL-(B7ns2-{W;hyAW4>qAKDaf5cT`RO7aNO}Z{3X8 z&Odf0Jua$!XQ-pY)V^=j@qt(SuA=8*<9tF|ELQuHq{U+E)#R@ZjCv(}K9hK4j9dLy zsEu^DeVfY?ccm^%-KV;I>ZZICZlCx=+0B24TXxFTWvLtUF4D&Xck;X39`2Uwa+_;^ zkIOA?t}e^nQZDYh_rttvem|VDoW$veM1f<(q+}ABRox z#53iA7e5Jq2eiBSpONP?qulGCg~uk68Mn*l+^;vx{pxcf%y+9k=cDXH*YyRTOj9;< zn|%?E)VuP|=iK2E-MNWvApGku!U~%JEG3u~{_lPfj!4`+g~RrSr{fwl!b#E8ySuk_ zv%W-QwL9a>aE(R!6W7~dJ=;ro&b0&I5Hu?Nbc`;S9QD6>>fNoasn3J|*VH?A!~+RC zGtYHZ5|x40A*oElE%{k;)&Pt2^YL)sWA{DuX!q){)aP#Kf_QcG|1>}Eki(8X@UTPo zJbdmkN3mYN(v&!Apm#*-Um4cxR|mEjo0=Q6>`c$7@RJpP&a8$Rl*Eaz-SY9N?m3Km znu;e;au;}#4`v+GRJ=%j6HLDp7oLZIYFu0l^YJdZ<|=8uzBoEzk57S!uXQsfq?)&4 zgpM&3NR;{=e4(+{L22ThlkP6cIEX`%`;y|w4;f%5L7?GrCMgR)2upi`Y4!xaS2hC4>HypckTHr zc}_ge^9Xo~v8Kjr&)+C+Cyar_mABx%jPn#dK^ttUfZ~VTP)>1)!8UQ3u@<&!&)-Og zIwgMVbr=`5=da|!Wp4IFO!O80;mfX#;~mJZlRSx|1pWN>*G+nBZqB!WU=POTd#5a6!r&2; zr~e4!kx`P82%YZKro!d>uaG@9B_v8XCr7eG@qcga)=c71I1yUGGtS8jk z@>iV1S+(V_xNxY;Z^*br!)RAuiS#p4yZT1KU&C7(Ynf?!rm?nlOMBnXPJj>)`K=H5WOH z>q{OGp7lm3(o#B*PV&+bFs2qK-=s}+BAsqD*-vdI)_PMNNEh+x@ZQGx4Pal;^r5gX zT>5l(_+(uD6hyx<)wJ>-FxJ$G?4zC;ZL@zd&K?K9Wn6v<_MVkh8NW4o?nb;ZG_GP) z9Y3dH<(uH)#=*YuT0AC5O-WVyHs@wj3($c&+NL*(kcM|R*3=bk(<^xq=aIXMV{gEx z8mFk6j+~Rcq_~$F*WvQowpVh^>CO3Wl9v2&3UR3l@heK0G$rl7nlBosC|KT)cHwF8 zSd;6d7A;|p5}gcVba8GLe1UPA8tRxi$ukS!8;!#g;k!I5E)|MK$1f)a2>q@Q#$20VXQAs9_m(1rAyGjnjj!ijNViH$XKJaw&IjL$F=w$AMII+ zll3|y;6~%pco-W?zd~c{s5o(Hd;TXHXI8?~jH6}j+wxRON?FRKweI3*0X=1o5_$#s zsXoFa_&np%;9!_hS)8I7^u8rZPV!HTvy%JfD&eeJ*)E;zt8mF! z??JV)UGn5Y*VW56iJ^$dDpKu-z2_uxIc>Ttd2Sr+eO#kS*;`rjA<8REN84Ly&t2&k zUxq(4P96YzQ)^_YV1y`5($-q`sIOFex$$mPMMI0(rKF51JwC$o@D$_BGw>G1;qCBG zjpIt^7sgp!Oy|8R9W8pP9A+G&!)gOx$(jGoy2R`3CW(J(LqY{44uY3@B@C&U+IF3;@+;<2o!?jVjqk0IgE>wT#nh)v2bW zd9FI|O_9TO;N6ThpHk<&NuC}8dxt8N;rS*nT?G54EYp-a^FsR77XBYL)**(~zGv;G zsDxfK4mX2+SJ8m1^WLIDT+KB!)_M+|_ZB7E#g+Kt!ggH88Efi}&U=$QKA7uV;~W*x zac`0rb?$5Z@pe-_(JkK;pH!E+-bATgxc=TaCaYpy#fv5c*8FM#PhMJ09zFo${!!W+ z!@evb3xctfMNh-NJ}er@tRxi-~GLFsflTT~+P1Y^BBX_{uNu~?_GNvDWAHvOEB z(wjC*Rc0Q*jW1*THQ1Li`7V6z8VTKI9POO@ps}`PYI@XI$6GW#Z5;f}Si%Ms%NuDNqow+7Xj)G4#4(TR3b1l;O1$?owR@OJuGLo0NVQ(9K?bkdz z$+PgFcHhb+Mh~62rhwwwZrSG8y^Khnj!0co6Xv3L`@r{k)gdt6BDs2tj#v|`x9Es9 zvAUp+SQD!Y>V!41x}Z*26Nf8d+Ec9Vs1w%g=jRY^d_yS%9kC`QWuPP0#N|ma4JEGI z7{*xQ%As!YPg318Uqa+<5vBc@1*@lP-%_bYNqf6QNq^##phxQvwJ4jzcz)@7eX;1u zTVNuIe6SWU>BzK5wFlM!prkK_aWQe}S$Ljt;XC*e7=lQcF2wN zo8d8@_k!0m&NjlBJId?tdTxzK$-jdh-+AZ9Yp#uMD$5*uaMStxWLBWNIZrPTp?s$)Tcgxgq@m<`k ztx|h(S-MqfvX)PDdgC&H1zV?X*4&N3r(0AlVH$j%arS$7L5bwq85Qx3}6;^CUf|R^sH+fz>;tzSBD9Z+1%Uz(V9L zcjj`XTdd1+_uQmJhyOH6lS9kpBFtc-DIv?Nk}7x*9Yv6e~~r+ E4~47DMF0Q* delta 65454 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 Date: Sat, 19 Aug 2017 23:28:38 +0200 Subject: [PATCH 091/137] Small cleanups to Makefile.libogc --- Makefile.libogc | 6 ------ wii/libogc/libs/cube/libbba.a | Bin 836524 -> 836524 bytes wii/libogc/libs/cube/libdb.a | Bin 521996 -> 521996 bytes wii/libogc/libs/cube/libogc.a | Bin 2624714 -> 2624714 bytes wii/libogc/libs/wii/libbte.a | Bin 472300 -> 472300 bytes wii/libogc/libs/wii/libdb.a | Bin 522152 -> 522152 bytes wii/libogc/libs/wii/libogc.a | Bin 3469662 -> 3469662 bytes wii/libogc/libs/wii/libwiikeyboard.a | Bin 133126 -> 133126 bytes wii/libogc/libs/wii/libwiiuse.a | Bin 416460 -> 416460 bytes 9 files changed, 6 deletions(-) diff --git a/Makefile.libogc b/Makefile.libogc index fee7474d04..1ee68017dd 100644 --- a/Makefile.libogc +++ b/Makefile.libogc @@ -34,7 +34,6 @@ export BTEDIR := $(BASEDIR)/wii/libogc/lwbt export WIIUSEDIR := $(BASEDIR)/wii/libogc/wiiuse export LIBWIIKEYB := $(BASEDIR)/wii/libogc/libwiikeyboard export STUBSDIR := $(BASEDIR)/wii/libogc/lockstubs -export DEPS := $(BASEDIR)/wii/libogc/deps export LIBS := $(BASEDIR)/wii/libogc/libs export INCDIR := $(BASEDIR)/wii/libogc/include @@ -44,7 +43,6 @@ else #--------------------------------------------------------------------------------- export LIBDIR := $(LIBS)/$(PLATFORM) -export DEPSDIR := $(DEPS)/$(PLATFORM) #--------------------------------------------------------------------------------- endif @@ -155,7 +153,6 @@ wii: $(BASEDIR)/wii/libogc/include/ogc/libversion.h #--------------------------------------------------------------------------------- @[ -d $(INCDIR) ] || mkdir -p $(INCDIR) @[ -d $(LIBS)/wii ] || mkdir -p $(LIBS)/wii - @[ -d $(DEPS)/wii ] || mkdir -p $(DEPS)/wii @[ -d wii ] || mkdir -p wii @$(MAKE) PLATFORM=wii libs -C wii -f $(CURDIR)/Makefile.libogc @@ -164,7 +161,6 @@ cube: $(BASEDIR)/wii/libogc/include/ogc/libversion.h #--------------------------------------------------------------------------------- @[ -d $(INCDIR) ] || mkdir -p $(INCDIR) @[ -d $(LIBS)/cube ] || mkdir -p $(LIBS)/cube - @[ -d $(DEPS)/cube ] || mkdir -p $(DEPS)/cube @[ -d cube ] || mkdir -p cube @$(MAKE) PLATFORM=cube libs -C cube -f $(CURDIR)/Makefile.libogc @@ -265,5 +261,3 @@ clean: docs: install-headers #--------------------------------------------------------------------------------- doxygen libogc.dox - --include $(DEPSDIR)/*.d diff --git a/wii/libogc/libs/cube/libbba.a b/wii/libogc/libs/cube/libbba.a index 35758ec0b614229f96395c73932ebba6afa324af..31761472887e09cc811b279c90fc370167b882f4 100644 GIT binary patch delta 53 zcmZ3}ZoH=5c!C^@g`t5-qf)C9W2+KVs}ggo5=*NRYpW7ls}g&w5=W~NXR8uds}lEC IC7!Os0GJ{UjsO4v delta 53 zcmZ3}ZoH=5c!C^@xtWn=qf)C9W2+KVs}ggo5=*NRYpW7ls}g&w5=W~NXR8uds}lEC IC7!Os0GaL%nE(I) diff --git a/wii/libogc/libs/cube/libdb.a b/wii/libogc/libs/cube/libdb.a index 4c0a55971c39aef94b5e18bce30fed550dc867a4..d283a6ec69e5a8be5b8aeedf8be74934b21813cc 100644 GIT binary patch delta 38 tcmeBqC*Si^Rf diff --git a/wii/libogc/libs/cube/libogc.a b/wii/libogc/libs/cube/libogc.a index 8ce0ee5db430c003f30459aa425fd6fa8153fafc..c00e4b65676c0f1d385cda8f05bf6b9d2172c520 100644 GIT binary patch delta 139 zcmWN~ITpbH06@VPf*_ViVi$Z%lst{=DSofjDP6!Naw;jNp6dMxs@kgvAGhoMi3HM+ zri9Xxwsa(tuJoiYu?%D=BNF11C#G5^N+dX+1w|nw3dD?;H!NTopy_vSJ z^=6iR4p!O@RJ#3~5vxi&Lg#kgU97c6VE*>LH>^+mAW}f4`1W3FHq|V+QnBr4ma-}I F0{}4oD-r+z delta 134 zcmaF!Qs&J|nF(?%=4QsG8~5kJ$V_od-5`Q+98D7*LpK;U+c{* z`y4FR4ph4RoDr)^JBVux*14T`7i+B%SbBTk8`dX&5Zyqg`1W3FHq|T$AE;Ao`K+?dm>V&@Rto|$ahSV3H{Yq!VDXXCnskZq`B*Qf&kmc>Vo delta 231 zcmZ4SUVg=U`3Z6?=4QsG8N0n?voD6@y@OEFy0)>`JLfiRxf_L?B(WA+Gc%p_(d0|a-*A?9m72yO>I q%dam8?i?1@WycWQnA5Cc=MdbUnQYrw5!{&hY+Sbx+=fbajXD6W`A4<@ diff --git a/wii/libogc/libs/wii/libogc.a b/wii/libogc/libs/wii/libogc.a index 5008f7b5b18d506b96182bd1edf0e1f41071430c..5b6819cedfa1c398ffa41f558483c3ec7c3ea1b8 100644 GIT binary patch delta 1158 zcmYk5T}V@57{^(2ZhoJZxpSPksoOl|)U!OBBdta$eV{pzl(1kl0!_pGxJdBAvOE__ zt+Y;<7k+e+7&uXUq`c5RpoDNB5lDy?fslgH1|?nep64Cq#RLD}`#jHk-sj`2epyzn z5({L;xE&5*GJDZagdk3B`RAT0stAIKs`X@)vQVQoz?4z-?Jx$(-uo=!bEYui^U9{t9F2xgYYg!9 zlBVGdGI*yod_8qBrd$^KGh%0pqAqXj94!Hu>Dcw^e;2Tjs?%PLr);ifSQyf4Gqf~o zp40YTk6!Rt+u1~ANUJN=P{}0eEEiGAq(}o)HS0LF!cJ_8)ZMCs?$)^B7kEa>O@ku^ z@h^Yx2r=>rl95jYBcC++9?zvvBnd*1X#vr}QW9J(yBlD&2hu~cGviKP)U zfW4MAmtYQ%vCe)*Ne07#wVmt3!8m2ocmphVb60BU?Kr5q6)vfiGEU=WTKb@iGRBuw zrgQBI7vpQB=7n@(Mq(Mn_CfPPrgb)&FO#_hJ4~LI9r+30O=Hn&$V6BOg-v!Gi*sh% z^l3nebirD``Q$y6*!*L*ELRwjcAzgkyS$4sv&gejcpw|X138bzXm+5?@(WkNMR$6% z!tx_+NBV@{a_cT-EV=5Zcuv zJPNv{wedV+c32zF7f)e?OpZ8kMDnK&QC6DJBNWUCh0KHhCt!b5IL%Y`dShAmvsviF zwJ!#rSE$HQTy81YCP1*w5vapR{CUqWIoyMY_^VGe9=!0J1~axIU~J-BCwi4>a1f~z NKPICa$Uffb`3n`sa(e&( delta 1158 zcmYk5Ur1AN6vr{0oBwaiy!USArf&0=OYe4<{j(gE^ass>q=W^M1e%7GJrww0S>A`D zR#pr1L9K_xKt=IL`JnxQ62gH*AR(&=f)b1-RP@mKo!wa`4j zzWV!KE`^ZbPC==ux_>}GTMPaHb43yN2E*nHN#x~s<}a9++8Jx1@F}09yKC2>WumP| z%R&>uT`SplQV!sBCO?wI!N}k|FL$%SV6E7A5#~GP(>0uFA?g<7v{KGAjVoD}-jY@E zJ1Z^ndB$FPjovzAL9?P|qiulJnH=Y2EI)*E8M$clpIw!o^366Fs|F_`K{#r2v$1IE z#2?#-9#RmwV?S_r|LeYnAK^(JR3x$39m9qTp56PM*VD-RLt!4@Y3TU`58?xqVoJI9)*3yx(5rU*;cbhus&ZiE9GqAIpZeOEA}SFUL9)yVRmC`KSz7>Ca^ab zPWd@Th6?q_kQ*XHn|%lQ1$ZQbXJzx)4hjjeCUmJq6Kb(=mq)M@aK9=ZS9nAqkSM|5 zrQ&+F_L>*!18PM+NqwYEg^@N-u#S*^-eYr~ZM}r_s}DDOk3VIo>4HlG!R33sg}iJU RGOX13-lvlra361U{R0@KbPE6g diff --git a/wii/libogc/libs/wii/libwiikeyboard.a b/wii/libogc/libs/wii/libwiikeyboard.a index c947436ed4b9b9c30e094bf8e63013d53850af44..575ed0c242316943d5b9a711ee0445956458cced 100644 GIT binary patch delta 59 zcmZphz|l5=V}cxug`uIrMkOvLFk`a;lT0&&70_yP1d@y5TG?+JC?k1!7=G-Ha zvk~0w3*#9pE5ZEjKxvseAk)xbyInX_%4M)9&trri50eq!ZfVKV fnF`heR4CSdXCBM;JM&nzLSaJU+ZDgCu1*60_#io1 delta 169 zcmX@JRr1VM$q8~S=4QsG81)_!Lm%l13-ShYeCDipu4u1*603cxv( From 1cac74d69f4aedcd9c1fe4cfdd35f1e0916fe254 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sat, 19 Aug 2017 23:29:35 +0200 Subject: [PATCH 092/137] Makefile.libogc should not remove already pre-created lib files --- Makefile.libogc | 1 - 1 file changed, 1 deletion(-) diff --git a/Makefile.libogc b/Makefile.libogc index 1ee68017dd..4e00c03f64 100644 --- a/Makefile.libogc +++ b/Makefile.libogc @@ -253,7 +253,6 @@ libs: $(LIBRARIES) #--------------------------------------------------------------------------------- clean: #--------------------------------------------------------------------------------- - rm -fr $(LIBS) rm -fr $(BASEDIR)/wii/*.o rm -f *.map From 06ab96c622d0d6bd35a972ec6a3ddc0bf83f89e7 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sat, 19 Aug 2017 23:37:58 +0200 Subject: [PATCH 093/137] (libogc) Exclude unused dvd file to shave off a tiny bit of memory --- Makefile.libogc | 8 +++++++- wii/libogc/libs/wii/libbte.a | Bin 472300 -> 472300 bytes wii/libogc/libs/wii/libdb.a | Bin 522152 -> 522152 bytes wii/libogc/libs/wii/libogc.a | Bin 3469662 -> 3284452 bytes wii/libogc/libs/wii/libwiikeyboard.a | Bin 133126 -> 133126 bytes wii/libogc/libs/wii/libwiiuse.a | Bin 416460 -> 416460 bytes 6 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Makefile.libogc b/Makefile.libogc index 4e00c03f64..a8ff32f3b9 100644 --- a/Makefile.libogc +++ b/Makefile.libogc @@ -20,6 +20,8 @@ include $(DEVKITPPC)/base_rules BUILD := build +BUILD_LITE = 1 + DATESTRING := $(shell date +%Y%m%d) VERSTRING := $(LIBOGC_MAJOR).$(LIBOGC_MINOR).$(LIBOGC_PATCH) @@ -119,7 +121,7 @@ OGCOBJ := \ lwp_messages.o lwp.o lwp_handler.o lwp_stack.o lwp_mutex.o \ lwp_watchdog.o lwp_wkspace.o lwp_objmgr.o lwp_heap.o sys_state.o \ exception_handler.o exception.o irq.o irq_handler.o semaphore.o \ - video_asm.o video.o pad.o dvd.o exi.o mutex.o arqueue.o arqmgr.o \ + video_asm.o video.o pad.o exi.o mutex.o arqueue.o arqmgr.o \ cache_asm.o system.o system_asm.o cond.o \ gx.o gu.o gu_psasm.o audio.o cache.o decrementer.o \ message.o card.o aram.o depackrnc.o decrementer_handler.o \ @@ -129,6 +131,10 @@ OGCOBJ := \ sdgecko_io.o sdgecko_buf.o gcsd.o argv.o network_wii.o wiisd.o conf.o usbstorage.o \ texconv.o wiilaunch.o +ifneq ($(BUILD_LITE), 1) +OGCOBJ += dvd.o +endif + #--------------------------------------------------------------------------------- DBOBJ := uip_ip.o uip_tcp.o uip_pbuf.o uip_netif.o uip_arp.o uip_arch.o \ uip_icmp.o memb.o memr.o bba.o tcpip.o debug.o debug_handler.o \ diff --git a/wii/libogc/libs/wii/libbte.a b/wii/libogc/libs/wii/libbte.a index 16906e4ebc0f2c5419d557272ece2729643eae61..a3cfae914a44a9ef7c29ef7b2c622235157d3adc 100644 GIT binary patch delta 126 zcmaF!Qs&J|nF;dDriSJlm3VnU^z?H^EaJ_cyzQR6jN3hVnY`@aqU~$FnYOR>W|n&n z5^4u3+{5*>2EYh;r6^9rmw{?6_&GSQXC~WrRyZ$aJ{$KfIIp3SU84>F>Rm)W delta 215 zcmZ4SUVg=U`3dsOhK2?km40$D8yZ+_mg8Po0AyHBmg5#{eo(#rK{ez20FVq&Kz#em zGmMv#LA>pG226jWA*>#zuf;GGTWgu01wuJu+iQZDkK4m}F_V~;4dA>PhnTPXz3{`K{L%Ii6Wi#PXhG08t~r7HdohB)1{N z%o`vWO9jaVLBSx#-=uTOg)*M5Ad( zO(1Tc7>S|_!dTM;lJRIS0m%rYNluWaUW^Q)M&^U)9BBe+6l6&YN2t~K?yr)2yE->o(OwW3E25X6VX|f zxhkV`{oIxXLYKX$^L}ObM+rm3Yrdq2<(wrd6Wd*QojKBb^EtE5+N=s0u7_$s(34WzyXx zR^p$xino{3R!roaDjM;eE=Pr%vn1yo0mCinu4EC{CAm|0tZwHtd$+hTYRn zT%Z-?bPBwrAof6)?}&n^8NBMm&33c7MiibwtkNd$&7P-n@;Ogc*dH z1O-8f^ERps3+dA^xux?z(q1xaH8$^6H`7^@+oQw1-k^SU1C#7-H}$KhFQQ$63GY{E zj?ZI~6)!B)X!a86V!QCx^k@jP2w4OzuIZU=ITvW=$*}#kx@EimYfkx9_c1+!gC}!V z;od=AJ{`8>>?7UxM`?fun)Ry>(TL4-xy3MlFv(@-J5mKId{|>#Sx-DC&t0{uyn{!L zc<^ZUd#72WZ-wb0y;euyjXYUu`a==w?5H#~zRgT_!nJ>zZqk_s?h-FGn#Gb-l z&Dd9MdEQ1lzf?=r`2I1A_6_P`^12;#vZ%EpXJ|dGSlcC5WB=)#o~p-6h2PAut}G9E zcRg0aHqztrk{x62>Kyq8Y#sfMxmdp=x4W2m18uq9fwnw6(3bC7O?{qZ)Yv|h-}Njl zV8?B=6`ZvdrXOKGJwML7T==P#E#;P|@$kLEm+9;3#2&Y;ESvUu{d;WKzsG)P6RrB^ zA-Va@*X#?9QIGv0J9ZRp`HZM}Ue4mcoW*&?MLl}6YCN>b*+>8JE==C9w;KNiZNZtV delta 161707 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≫vUj3|KJH@`iui9Vs` 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 diff --git a/wii/libogc/libs/wii/libwiikeyboard.a b/wii/libogc/libs/wii/libwiikeyboard.a index 575ed0c242316943d5b9a711ee0445956458cced..449c76294a6c9ef6aff147771a29eff8d453aca5 100644 GIT binary patch delta 54 zcmZphz|l5=V}d-hsiFBsC2l4Vz1e_Cwi(O_XtlipVr-uf$+*@X%yL-Bcq|P7r&JJR delta 54 zcmZphz|l5=V}d-hp`pP>C2l4Vz1e_Cwi(O_XtlipVr-uf$+*@X%yL-Bcq|P7p{x)s diff --git a/wii/libogc/libs/wii/libwiiuse.a b/wii/libogc/libs/wii/libwiiuse.a index 0646a531e8e15e0f12a75279f5db1817d5953688..74880e97e86e0a2c03f2b6a5b211554129c41bb0 100644 GIT binary patch delta 157 zcmX@JRr1VM$qDkzriK<9l~%F=X|v7e*ls2Q8RnDEv59X!m@z3D#F;L4lTmzg?h&ck zaNhQX@r+fKAntacq--6SWf#trdKtt5>Xz8PPmB3&99Vo^Cv)L?sJQrcOG}onR47lZ W{mwj=?RVy}YKOw*6~C~qP6Gh%mNxwW delta 157 zcmX@JRr1VM$qDkzhK2?kl~%Gb8yZ+{KF4-55yY5$j!k^?!Hh}KAkK8Tn~dU{bB{>P zhV!;BjAyK>1aY?mC1vYChHSSBXG*;c)h)4opBD4mIIxO!oy>*nq2l7(EiGBPQbFp0 ac8Im#na8sI&OBD_P^gIbcEvBOtJ476JT|!i From 2b496698981e0a75428c810888ea50c28f8ae428 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sun, 20 Aug 2017 00:50:04 +0200 Subject: [PATCH 094/137] Update Makefile.libogc --- Makefile.libogc | 374 +++++++++++++++++---------- wii/libogc/deps/empty.txt | 0 wii/libogc/libs/wii/libbte.a | Bin 472300 -> 472300 bytes wii/libogc/libs/wii/libdb.a | Bin 522152 -> 522152 bytes wii/libogc/libs/wii/libogc.a | Bin 3284452 -> 3284452 bytes wii/libogc/libs/wii/libwiikeyboard.a | Bin 133126 -> 133126 bytes wii/libogc/libs/wii/libwiiuse.a | Bin 416460 -> 416460 bytes 7 files changed, 231 insertions(+), 143 deletions(-) create mode 100644 wii/libogc/deps/empty.txt diff --git a/Makefile.libogc b/Makefile.libogc index a8ff32f3b9..f4cf82dfda 100644 --- a/Makefile.libogc +++ b/Makefile.libogc @@ -12,23 +12,85 @@ endif export PATH := $(DEVKITPPC)/bin:$(PATH) -export LIBOGC_MAJOR := 1 -export LIBOGC_MINOR := 8 -export LIBOGC_PATCH := 17 +ifeq ($(PLATFORM),) +PLATFORM=wii +endif -include $(DEVKITPPC)/base_rules +#--------------------------------------------------------------------------------- +# change shell on Snow Leopard +#--------------------------------------------------------------------------------- +UNAME_S := $(shell uname -s) +UNAME_R := $(shell uname -r) + +ifneq (,$(findstring Darwin,$(UNAME_S))) + ifneq (,$(findstring 10.8.0,$(UNAME_R))) + export SHELL=/bin/bash + endif +endif + +#--------------------------------------------------------------------------------- +# path to tools +#--------------------------------------------------------------------------------- +export PORTLIBS := $(DEVKITPRO)/portlibs/ppc +export PATH := $(DEVKITPPC)/bin:$(PORTLIBS)/bin:$(PATH) + +#--------------------------------------------------------------------------------- +# the prefix on the compiler executables +#--------------------------------------------------------------------------------- +PREFIX := powerpc-eabi- + +export AS := $(PREFIX)as +export CC := $(PREFIX)gcc +export CXX := $(PREFIX)g++ +export AR := $(PREFIX)ar +export OBJCOPY := $(PREFIX)objcopy + + +ISVC=$(or $(VCBUILDHELPER_COMMAND),$(MSBUILDEXTENSIONSPATH32),$(MSBUILDEXTENSIONSPATH)) + +#--------------------------------------------------------------------------------- +%.a: +#--------------------------------------------------------------------------------- + @rm -f $@ + $(AR) -rc $@ $^ + +#--------------------------------------------------------------------------------- +%.o: %.cpp + $(CXX) $(CXXFLAGS) -c $< -o $@ + +#--------------------------------------------------------------------------------- +%.o: %.c + $(CC) $(CFLAGS) -c $< -o $@ + +#--------------------------------------------------------------------------------- +%.o: %.m + $(CC) $(OBJCFLAGS) -c $< -o $@ + +#--------------------------------------------------------------------------------- +%.o: %.s + $(CC) -x assembler-with-cpp $(ASFLAGS) -c $< -o $@ + +#--------------------------------------------------------------------------------- +%.o: %.S + $(CC) -x assembler-with-cpp $(ASFLAGS) -c $< -o $@ + +#--------------------------------------------------------------------------------- +# canned command sequence for binary data +#--------------------------------------------------------------------------------- +define bin2o + bin2s -a 32 $< | $(AS) -o $(@) + echo "extern const u8" `(echo $( `(echo $(> `(echo $(> `(echo $( $@ - @echo "#define __LIBVERSION_H__" >> $@ - @echo >> $@ - @echo "#define _V_MAJOR_ $(LIBOGC_MAJOR)" >> $@ - @echo "#define _V_MINOR_ $(LIBOGC_MINOR)" >> $@ - @echo "#define _V_PATCH_ $(LIBOGC_PATCH)" >> $@ - @echo >> $@ - @echo "#define _V_DATE_ __DATE__" >> $@ - @echo "#define _V_TIME_ __TIME__" >> $@ - @echo >> $@ - @echo '#define _V_STRING "libOGC Release '$(LIBOGC_MAJOR).$(LIBOGC_MINOR).$(LIBOGC_PATCH)'"' >> $@ - @echo >> $@ - @echo "#endif // __LIBVERSION_H__" >> $@ +ifeq ($(PLATFORM),cube) +LIBRARIES += $(BBALIB).a +endif +ifeq ($(PLATFORM),wii) +LIBRARIES += $(BTELIB).a $(WIIUSELIB).a $(WIIKEYBLIB).a +endif +all: $(LIBRARIES) #--------------------------------------------------------------------------------- $(BBALIB).a: $(LWIPOBJ) #--------------------------------------------------------------------------------- @@ -202,67 +349,8 @@ $(BTELIB).a: $(BTEOBJ) $(WIIUSELIB).a: $(WIIUSEOBJ) #--------------------------------------------------------------------------------- -.PHONY: libs wii cube install-headers install dist docs - -#--------------------------------------------------------------------------------- -install-headers: -#--------------------------------------------------------------------------------- - @mkdir -p $(INCDIR) - @mkdir -p $(INCDIR)/ogc/machine - @mkdir -p $(INCDIR)/bte - @mkdir -p $(INCDIR)/wiiuse - @mkdir -p $(INCDIR)/modplay - @mkdir -p $(INCDIR)/sdcard - @mkdir -p $(INCDIR)/di - @mkdir -p $(INCDIR)/wiikeyboard - @cp ./gc/*.h $(INCDIR) - @cp ./gc/ogc/*.h $(INCDIR)/ogc - @cp ./gc/ogc/machine/*.h $(INCDIR)/ogc/machine - @cp ./gc/bte/*.h $(INCDIR)/bte - @cp ./gc/wiiuse/*.h $(INCDIR)/wiiuse - @cp ./gc/modplay/*.h $(INCDIR)/modplay - @cp ./gc/sdcard/*.h $(INCDIR)/sdcard - @cp ./gc/di/*.h $(INCDIR)/di - @cp ./gc/wiikeyboard/*.h $(INCDIR)/wiikeyboard - -#--------------------------------------------------------------------------------- -install: wii cube install-headers -#--------------------------------------------------------------------------------- - @mkdir -p $(DEVKITPRO)/libogc - @cp -frv include $(DEVKITPRO)/libogc - @cp -frv lib $(DEVKITPRO)/libogc - @cp -frv libogc_license.txt $(DEVKITPRO)/libogc - - -#--------------------------------------------------------------------------------- -dist: wii cube install-headers -#--------------------------------------------------------------------------------- - @tar --exclude=*CVS* --exclude=.svn --exclude=wii --exclude=cube --exclude=*deps* \ - --exclude=*.bz2 --exclude=*include* --exclude=*lib/* --exclude=*docs/*\ - -cvjf libogc-src-$(VERSTRING).tar.bz2 * - @tar -cvjf libogc-$(VERSTRING).tar.bz2 include lib libogc_license.txt - - -LIBRARIES := $(OGCLIB).a $(DBLIB).a - -ifeq ($(PLATFORM),cube) -LIBRARIES += $(BBALIB).a -endif -ifeq ($(PLATFORM),wii) -LIBRARIES += $(BTELIB).a $(WIIUSELIB).a $(WIIKEYBLIB).a -endif - -#--------------------------------------------------------------------------------- -libs: $(LIBRARIES) -#--------------------------------------------------------------------------------- - #--------------------------------------------------------------------------------- clean: #--------------------------------------------------------------------------------- - rm -fr $(BASEDIR)/wii/*.o + rm -fr $(LWIPOBJ) $(OGCOBJ) $(DBOBJ) $(BTEOBJ) $(WIIUSEOBJ) $(WIIKEYBLIBOBJ) rm -f *.map - -#--------------------------------------------------------------------------------- -docs: install-headers -#--------------------------------------------------------------------------------- - doxygen libogc.dox diff --git a/wii/libogc/deps/empty.txt b/wii/libogc/deps/empty.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/wii/libogc/libs/wii/libbte.a b/wii/libogc/libs/wii/libbte.a index a3cfae914a44a9ef7c29ef7b2c622235157d3adc..73af7a1a25d29f8f39302d425315f00a3739d9b1 100644 GIT binary patch delta 134 zcmaF!Qs&J|nF(?%mgeTB8&-0t z94yujRJ#3~5vxi&h-(7Yxt(_xYpoHOzrF7b>k~hS6p$&tz1NyeH4Cm(Z2Os|YzqAV DOmHi1 delta 134 zcmaF!Qs&J|nF(?%7N&;g8&-0t z94yujRJ#3~5vxi&h-(Jcxt(_xYpoHOzrF7b>k~hS6p$&tz1NyeH4Cm(Z2Os|YzqAV DJ&`Lm diff --git a/wii/libogc/libs/wii/libdb.a b/wii/libogc/libs/wii/libdb.a index 34f72fc4c63a49a0d0f63c8d5d7fa196780e1ac6..632fe4058f619ae4b9713e6401ce14d11d319adf 100644 GIT binary patch delta 231 zcmZ4SUVg=U`3Z6?mgeTB8N0n?voD6@y@OEFy0)>`JLfiRxf_L?B(WA+Gc%p_(d0|a-*A?9m7ATHR( t?H&9qzrG;2b68lH9Yb(qPP2-gL+I_9$+nFZNp?OP*DVCMp^{yr4glmONGkvU delta 231 zcmZ4SUVg=U`3Z6?7N&;g8N0n?vou-ff;JxpJU;fl7_GCvK3@x->*1Ti18M{r{%F)JB>wSlbIKI0Jc wH6H}GgP-Ns7X)_>3+u9D2yV=2Rh5-L1fWyzn^z^4~P5vob&yj-#x$c_34b_ zD~>*MLUB=%d(39^;e)3*7`d%Nj~aaU?o%`ebO<;`F`r5pzGo`d_ih~P6`wy)70w#O zWnKx(yz06&mO~IaqSDt=Ic{8fcf)xgq4y0{k^cR9bxRs8{mWJx%jnVEr0()kl~>8I z@Fb#6KTS(>2F=@Dw1ia%9#?Dboy1(^3KA9~n)!Mv#n#>=D#d?^U{%MM7%KJ6=CF{T z!L(nBvpybRPWh>RpVh=diBg-Zj;jldHsu7ZN2i8xi#AI|>f)qd3zPoDiKkRf%6*Qc zm%n8e{kCNA+jNm8k^?;cZh@A`-?XjkT!EMz!SjnL3l)^jLq--NuTnCSRd~?gr6Vd< z{5Y3_BNaZ*rMdYHS@b=ef76;1H#oY$VNLoDy%Hou&8=VZ%UlMbZm5j2g}yqm1Wd;fn_8N-5*zu#i-NZh7MLQv%}JY5OV* zE3T~|9MLa_BMa76w%8}++Y5(`<*jkv1Gb4C zb|lt>olq0z&mAWz1zt8R{o#vm#S~C@W2f&)48;d^E_hH^@X#$Agx-SpsWP4k7M#8O EAKBQ0SpWb4 delta 1214 zcmYk4T}YE*6vx^3)NOw6c{knWrn8lEx!P8iVkjY*jaU{!B5DyDOH!nqNNS^AZ=!jj z(Aj}?HhRM`4~L1tKAvZyH$o740naS29So#>(y*G593ltvB- z_@NX(+0P+@NQF3f4r6;r{OJ_N^L$BbJck5q$RrvGhX_n*k}EwJBmI&KZVm}32WNfhMV1z+$fzk#lY-%(>%6Ca}Y2ihuPdhNRn&0B(aUR2K_@%_}o_Fkar4 z?elU-z_Tv-=Q0ivjJ=jC6Ii4NF3!p+DPVCn(P6r1ehv?HzutSBA*2 zH;Ga*r4&l3l+qyVP1hfeHHKf$(?^zfbO1=(Q4XFIV&C z4rf-uwU?TLJ`NGgxU`N<4yk`#t~=UI@4@D8uE`_Fj%giqOlJ)~;4BEtE&A`#UqMeZ zdGx=PT$TX4Pk-Y!hY03$hWY4y)8;9s!CAq!Ur*;LN%N2a%tP6h0wxBvZ?kRJ+4QVZ zOhD*(PMeKoZJh`~ad*zQ)2vlHpR>>yOQ|5W#8~EJ*~ym>(0a?5)kL$MJxFNF2%)Xq z%>e6Rrce5J!KB|5Ji_{h^?53?Yr#ZmH*_uR$vDP%fr`IB#8^n`PN2EQZ0cvbP^g0O z4fD8(WoDB->iqf!mgy<5-I?#mX3G7{)XG3UR0b>^XW1D2(O~(nrSLAppdH-X_LN>a cSo@f(0LEO_$Mzj|Pp|chVh3OHTd&^y5BKAmoB#j- diff --git a/wii/libogc/libs/wii/libwiikeyboard.a b/wii/libogc/libs/wii/libwiikeyboard.a index 449c76294a6c9ef6aff147771a29eff8d453aca5..7a038b88f0e944efc0f4a7a952bae4694796a772 100644 GIT binary patch delta 59 zcmZphz|l5=V}cxurMbE3MkOvLFk`a;lT0&&70_yP1NEf;A35v* delta 169 zcmX@JRr1VM$q8~S7N&+48d@y5TG?+JC?k1!7=G-Ha zvk~0w3*#9pE5ZEjKxvse2-7Z{DdjSl2{b}t`#vq^H*pY|b)C!w>tQnD+bu0wI#Xd> ZvGzOjShnAp$Ep Date: Sun, 20 Aug 2017 00:54:39 +0200 Subject: [PATCH 095/137] Update --- Makefile.libogc | 2 ++ wii/libogc/deps/empty.txt | 0 wii/libogc/libs/cube/libbba.a | Bin 836524 -> 146456 bytes wii/libogc/libs/cube/libdb.a | Bin 521996 -> 102260 bytes wii/libogc/libs/cube/libogc.a | Bin 2624714 -> 531728 bytes wii/libogc/libs/wii/libbte.a | Bin 472300 -> 97912 bytes wii/libogc/libs/wii/libdb.a | Bin 522152 -> 102260 bytes wii/libogc/libs/wii/libogc.a | Bin 3284452 -> 722704 bytes wii/libogc/libs/wii/libwiikeyboard.a | Bin 133126 -> 40698 bytes wii/libogc/libs/wii/libwiiuse.a | Bin 416460 -> 63960 bytes 10 files changed, 2 insertions(+) delete mode 100644 wii/libogc/deps/empty.txt diff --git a/Makefile.libogc b/Makefile.libogc index f4cf82dfda..77d3bf6c5f 100644 --- a/Makefile.libogc +++ b/Makefile.libogc @@ -102,6 +102,8 @@ export LIBS := $(BASEDIR)/wii/libogc/libs export INCDIR := $(BASEDIR)/wii/libogc/include +export LIBDIR := $(LIBS)/$(PLATFORM) + #--------------------------------------------------------------------------------- BBALIB := $(LIBDIR)/libbba OGCLIB := $(LIBDIR)/libogc diff --git a/wii/libogc/deps/empty.txt b/wii/libogc/deps/empty.txt deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/wii/libogc/libs/cube/libbba.a b/wii/libogc/libs/cube/libbba.a index 31761472887e09cc811b279c90fc370167b882f4..570c9a23f0fbef407beca8cd4bde5ffaa8fe4cc0 100644 GIT binary patch delta 22624 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 ZG!4LAjE_OIN_oJBBFpsMUoH_h+Gm#kk}?B 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%0DO7nO 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≫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
  • !D8 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%0DUh+#_{S2V8;sSTi*SH$lqcIm$0L5#H2V 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 I|V&wm}C&+qwGMZWfZY9FvbaRKa&&RV64O6 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�Wb8u>*}hcSx2 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 diff --git a/wii/libogc/libs/wii/libbte.a b/wii/libogc/libs/wii/libbte.a index 73af7a1a25d29f8f39302d425315f00a3739d9b1..191c62e51b4a23515eea2785a81a151166b4fa6c 100644 GIT binary patch delta 14061 zcmc&)4@_OxdH?Qxe|S9p7(8siAvOuPd5KAkF@_g|9sCbJViHrwiCIEoY?G9<*l`+n zp)2cqYup8?G@*)@!xq$#)?Lu*HZ->ONNXu*^ETAF9qPOlY1x9dOraZEEXC4DW6ArS zbMAM}iDPez_NPy}@O{7g{XgG1_ug~w!Y?ZpFGq%Nj3n3BZK(Uk&99~DbF=hoJkq}& z=l_@_Qb(GJ|KI;!{TQhu&BVqT@~%GGE|B+0kNv~sUHdq2sBizFCypG!pTkG{9zFIb z_0=6Z{Zqd?uDd}zw-6}}*RQ*?K@|Tma_iFFr!s_Jz5GK7+D~1l2Mf-v5o=4mgm~a9 z{*vtOm0m|UyQ<3jFhAXTSjiC;65SaN=oLgeqXGRX(2O?|8Tl5XR6LMLIe4c-18-xQ zy+n62Jwmiq`+baPlxP>9m?vsydWy?(X z8!u)}do}X(+I3#l;XQ1%foM0UzY#R2kCg9Y8P_v#6VZc2_p|OJpjo$@=mFM6#vS6# zbzW(ki6~(c_qvGo1)^RrQ75ZmL>VU(;Wrtdkr}M2^QsCSVh9E961(fXXEr^|mZpge zJ?qf(4!vk;|E#pSWW86q`oSO{|7S$&Wj<&X|8I#N407}5h#nEU)_YZ}yV=`vq62}N zhi*C$hLbDroZ({B+y8PI-jA- za#j2(rz$ftk~bT@O7Uugx1{a20$thtPcz+4)Xy|3_eG|=h<=-Cguac}xeU>l#FYlG zH2oz$Jwjw=&g(&sBSShvG{7>GM8CuIS)wm9{ij5Gxu5<5bXY3lhk~YA2J_|~miako zEd%5NQAWJf=v8^YE7Pnhc!pInM90N@fL3$OY1obhO%Z)H5S44)?}@jQUe&teto;Dd ziwr8QQTP_e)Px- z>;C*V#Kqj`3h~6L$ZPRUy@cfo$HStt$={Jjn=XKX4*=r|*jxlAUjd66s4zgPS*mPK z0MIHU8bB{otx}oS0J=-&2&2hO{$Z%hgF$@&Ol*=i?&=0pErAy|D;|}XcP$X;P(aHB z7_Bj;fGyJNsFJv-fpcKaD4^voX=AGtS2o442Bf$K<}@$`KxbduB2~6YmlAwfWHhjV zIFbsOQNRwVuj8oPB2{)sqdK>v8n|eHDFw7{H$c%=snR-PfNl-IOJHL{0Xtg&ji- zNR_rO06N*s4*#D4TmYcr${ua?zvls&V?-oUN@u|U{VBh(_`6^|9MTbfYyMq~-R&=5 zPQ_qC3Q~XC7KtKf#K0Son+t0yh~h1Pu~t&6IQ2$kh2PL6dUyG^22TS&s|zoWtgo%B zuh)+Q`!8i6Y90rkqpxKbcKP==h|?v}gn043@KPb42eOUZLq(D7U$%ux^U~&)v&gy4 zEWx6{7tu1TH$3?f(O$+Y9UR@Thw+4i*WfOiab#}n)EoPFxJ){is?z3;x!O_d zcGN~4wUdq?SH8=Uhf5RJup{s0-C{Z!)k2j`;%*C|;wJG4>%a?J2VVYl9H3}s_33f! z_gXuIK%b2BXq~esc3 z^G}w7OX^kv-EN#sInJ(=4UIeU?vPzieg^)HgIUMHC(Rz&m;^eVY7IE{k305RUgf{n zQGk#MXvk5hbR2X!@-vRSo4{L+%=NNIMbpNa+i2$fBi~BL_z()cmI8f*PVVBo!nyX? zYnL}*Z(x1I&SCj24hzF*rUb zo;iqkzY{>Y5FKI~emLdaV-7v+&}STa+M%8C$i;YYqs7~8DDh51-%Ig9tDJ|#*>PTl zL$^5eUWe|rTW5I)^knv_L!m~mjhlcRJ^9#ex*NfpNr8I38YC|7*v!tCEWCKXC)6N! zV;ZueIJ_?QvE7*TitzXGoL^6R|6xcZZwSi=|4RVMa14n-1*BkEJ%JC2Sq;du-AW=+ zAyrcSU@%5d=~qBo2^gt1B&Ib`X@IgDrAk|k0eUr%G{B?=wi_U}QmJ$ppi=`~1{l`> zY8tp*)W9(S%{YccYL&7vVI)R0a27zVl9<=Pf&r41QswRn0}N`Q-2k&17%)KMCZ%!; zKsOH5Ljk+;!R%GQv0KFQR0?>_PNK7iAz0v@&Dyh<*0ibPkYGA?u z;~JPVz@h@~DFP7GqgvXy$L2Dk0hx=InAgChv5{P@ROSsZsDOKAJLouOHIOnk5}%SP z_hP*XjP`3_$^g?ExNLy3TcpZv*$&!huLk7UYG6_WBL;{il*+WR(W!uru#p(oK)nGL zHPB;#)UDD+#|ZUkJ7<(H{!f2Wj17+1TyjzrjY?zP&(nAoF)f zBm24ykX)+(8|ol{HMGx!3dunnvV<@Z`wad&duk1X*WOdxhs~xHq5huBs5R5*_0=5JW?^S0Z74}VE6MbObul<z~1jG@UIW#UQep-P5^L#E{y4IH?1&VAt{3AW>>Y~TA`4t>K3#UT>=s zKaNSj<%%OxHYAr`R?drAkJnAs(h;l$2$P2W(?5 zt+6sod#w!Op=B$G^3H?6>;Nt9SsHoVEJE_(jr)PxotJ$b&P51maYf{H!Cai6%XbuV zm&DKrz|e#CswiK>2a6W=d`29jh>jijh>{l%9||0tk1`vXMH@sY-#QCbICQgZz7U#{ zbwgdUQfd<7KJ}!%f`uj>8Ub;c<=%%;b{vOe)>*jBp-~~uK8&jHeVkksdC3l^$7}}S zQ#Q-+S-b-c7Nqbw>o|;njG-BOy^mB{JCPcPZg*&8Y%bGD-6uN#lr53m{W90@QM-FW zs1Ro_Z&-{>wY^MJ#txZ$KgGi*Ux#uP<^6%d=c&$gv}`CNM2--Y`4&}PvUiF@%OX|f zCJ|KJ&?v%P;^k$L(skyZ6RDYdQKZI&mz(%}zeuR{o#NePkznuP?N=kSp{w>DZqQ$X zG=ve^6po!D@x4fEyx|<^X2thQz7Zs$A~-*-cu7wwzU=$*{5zn>72hlQB&sAU4*5yR z-&p|~6#^f7P4WrQ-HPv2{2*wgg!AKyM{(57$4;@R_<8U;p40^NH^P7Tq>>+z{N`!U z{feKL{9P@0Mp{&S@(19zpe+LXgNo09uT|$~6_2t7`6XVD9EoqioCx@_*QLI+Ri@-G zN`7mRIp1;`@>{W{YWvyA(~*1q_|^dcI^m)}kqRU#UN! z2rXnFX`c29D4uQqVdSTt{-D}?Kq0pMBGMv4vk~Fv#YOGAkuP7>OcmngjsB2$e?C$b z4|Tz!OgK+e{xb4x@fSflPpv*(JC6`zr?2Qd`~>KWIHZ}l&LdPNx)2)VkI7!xi=$K|8ltW7SP$rG#rG?I5OhlM(~6%ld|4yp zb7f!Es`I^ym$I6lRD3^pZ9kTbK3g0E>r^r_eC9IsGEl z6y@iC^-ax&4Ygd!qRtFNO(k!lm3jkUt||KWv8&3NefFtnhnL;=g=pF@ui!$$RXIPv zp&Aw9y{Ds9n^y8^M7JuSmk2kq zn?Vc((_;?4-J#*8l4Ve9qkGE1=ZNmmGT4S+gpl~xezb`E!cL?|qmk?bqtOH2RSkm0 z^_ysrf<9DI4(KY8co_p;FbcX^@%@UQ1>LRqX~`ERL6=EBTQ(Mb#ETbpfI)^Zkaalg#7)4LHJ@_wd!D+d8?`*KVD{35dO_TPL?2pTb{+ zUL}qjbnE0di^1=Fv~?Pj8|s49r1WG4qNa6jr`xjme-z!|bWQfkd(pT3>?7|-Plng6 z<vSobdT*W5;0b5v1 zUu`~cC8w;p-a~e+SoN#u^99Wu31;{v@uOcwo60vc^cF7rOfTTpL@fC*+O(RtujFe6 z7WGQ3s8=IJpMa>hMSK_k%6XH^gOOqm2bpgbS3X3pJH&mLqiYLl+0{EJrFb5YmlAJY zjyCyidJW9Jo5lBZYIBanO9ntght^~>wK*?)#ZQBFR@qqZwWrE5`1CV+s>Fsd)5f4Db6u;Z Q%JKrl=>G&f|D;X&5B(_^AOHXW literal 472300 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

    uB}>;rl4NS(?O+^o0=$EAhODVVQCvtsp*6!| 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 X>*cJ9HIuc6HS@Pv`s1u=34i|vP_1sC diff --git a/wii/libogc/libs/wii/libogc.a b/wii/libogc/libs/wii/libogc.a index eedb4c14eec9ecd511bac361bcf61f427e1559e8..8d1fd55a9fd701466d96f2b539f08e7c3573f54a 100644 GIT binary patch delta 72811 zcmeFaeSB2awLiSi%w%RV$s`lFzXp~5T21G^4Rj#0> z&a}`!iNZ@}b|AR)xM2f_TUsW;o50b^|*k_(1BTq1kQt9b))5HvB z{i9TSlv$rlpF6^=^QEg-Gs{fZ?O+jWc@6uAX}ybC|0s1ZX8oAn``IA40?Aafu^=-+u$Z##4Rt@Qm|=J;$<^PV{8Y-E2oUE^ZTPn#m2R`7pGF7l}@{ogSl^65kMzhXe-pJ=Q94FmrF_NNZ$ zI*|PTQi}Y~Do#jU&pve;0ohNc$R~mE2U!B8iAT<#YEQF-&nQJcD@CNoopt1&OO<62 z=B_Mb?inlp_0+P3x&P%9`8$O>bD8^Zr56};e^x2-DHM4ETbL)j;j>B8jxdjrBA%I0 ze7-`SzY>zVG**KmBNc`OcRj=gatK@V7ge@4f#2o_^cHd@B8^nfd-kO8+F7 z%N{5yXvA_ADqF+*E=?pK5$L)14~BDYFT#Ot;=p+cFXEzw>GU< zdP~d7Ww(x9Rqk81_PS-Qt8Z9!iwXL!TXoBAt5z<9KuG+JyP#siIIM3~PU64Lw6YQ| z99LBt;@^$!pEl+jpomKJWF?%zu0f>-t)iDCMB#;P{Y|6X{CGJ@^ZMliPDHjW)LaM(7SET_K!V0=(=;IT&Q0r77H`RmA%;t{?r%Ve(M&3=@Wur!l7FY0&4%R>qQC zn_bueAyu(+tF6fSsI7>)oKnR4v?69Lw98sg+GVY0?Xp&nQMQ=MhRGNFRighWZ=#q< z6n%)Xp`5>Ng(D+Wa0(6GV-4L1+DKIlBQ~Vy5GD>qqs~!^Mt@YkvhUkE*^h0V4AsYd z#j}e&b^$BPE?{A7s3=>xx&X5#+wu$s>6sNWqm>b8%`!FKAfsu>#9N55TAX@(P$vE` znP{O#gI;aWZ3YdGOMSfgQfu-HMUKT{!tCbL>a7g^*eJ(szVvO-T8C7~bBi4_ed)(Q zQ(c98CGi;{&F>XF>Wt?nk9KVJWpsc?_k(=*Xvk*>!=)WO(9 zRq-~XK(8*q*g;z<1z1-AT366!7_reP+hgF+IpJp1ul{sl7;vFGj;4U7CZ)elqwros zX}^J=U~H0d07bOU^BENRghe`}Uc<9&Ls71QH=wJk%9b-WMHzh~Xl3;6j7?Semq9DM zgRyBSEB%LOI*c$#)9~^lRY4zPHL97=WV(%`hH+>b?Z9EiW+?f07`s>*@gZns#Gg>V z3bp01LrqtussgLlR%D@LYNaOKV&L#hm1W(Aab~3VD?`cuWW(bkgD%EYr@XH)@EU_g zaoxrNqhiSGNMJrzPSP}?`x8zU7e`cB#v5T-ZzyUvDmZE=J!W|PYa_gWu=Q9lUR7-2 z;z?C(p+BhzMd&oCLTWYJH0v_xJqC>k%~nyl)UJSCVOPMeH4IvA8$=hasxG>g1}*!a zg;1*uiy{$^igl4)*fJ`k3lHs0qa7h~KzU}h8PUQVp!Cx)*7V^~b^&(MR>THu+;Tw? zA9ctPj_7jrhK}_HeZOrx+iKg+o;CvYylp${HLAp5Q?^r}boW66&6fd3uv!?aSJ7W> z&`%f@pfVLe_N-AED%K+pm8sEe1#Ba%48|^t>!-nXxvC2dG~Fi~OPntks*EUOixh2+ zHguUQ6b>)-Y2yH6SH^MbhYgCxxl_$k)<}DvqMmV;l8ICpiqJJg=SJ(W8F4R(Zm_*! zD;Qg#jPM$`IpRacXf873QL&x}DoV+JccvcAoN>Z@j}D66eAK5gjY8&S){xvF)Bdls+GqGUA2;_F`5Id ztHX|pb<-fC+8}gE-TzzUz#EI`FzTOrG$XvaKi_He=T7n_7M<$6&P6wk@r&hYGu;`y zy4E?#SAg({E7ps7Tdi}ZuK-F}JJQAcpx_5}e(oj6FGN3O2n+I83Vwsm-z)h2;J1nV z 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

    MKPp1~chL{e#_inG@qjZMqvpz*ki)!= zna>33N2O(4?lsu^z%6IiiB)Q__XPD|S4PgO-QdKM^8c9c@t{|#Kd6|VTczi~OTl{V z3CMO)3H+VV|L5&p;H<2whyUlynfnaG0K-kW%)oHJ4Hp4%z!@0sw-Hb=$zhlaj0`j5 zTmTIfjT8$D%M=w6jEoEuO_Pii4UN>4j0y`C%e-Y}Wkp5y|E{&y^PJ64?_2-h=l7mZ zHs8ITwbx#I?X@rGInO!pt722)UvlP%f?I*VlO_>4wB9Adfiz8qr`OBGdm=4gX5>@r zHCmKhfhz}<54sCaQiu7;@ud0m4s6Vb0`n>B#Hm!7@LyhEEV=e`wX)k;p&*Oumt5(1 znq+jpKIg~VEq!-q#JUumHdbHFh@C$$Db+h<9LR`0TrhSn)#HOk#xL7Cx^JJtegjtz zlue!{URYO5c6xrlOZxShQcyIaAYR`ZUwQi3 z;O`ka#jaa_dY-+JE>YdN&PDY^x;DJSS$qSF|7wcelNsCBe{8{s2Y#k2Y3={<^u|gW z&mP&kcRVvcerTOrO`lAc;QnIm(t^Hp>7ESf(i>~FOFJ_1S)C}q=E}P=@-6i**l}7k zAIpw${E4^Z$Fp}7^o#GjcE?m|J>91HkeUAgg{Rs^%IH0jnP2d$PsV=~8_BNzc)v@z zvP;!o&zv*2Prv@X@0mMyCBnPfbgN3zv>60=v&)otazvz^GC2jFIu{ zV{_(BM*SzP($xJ~;yf%ZeKo6C3$?B=Qo=JLemt1dw?NJtrSgCAtm62WuYH`;OkZ@L zRU?mQAS7!@RM1^eGB^Z>le>zl^UtVsh^5x&AB8#l0g!a2-MUpx!O;SE?JtK zq_CrvoKgBkR=(`EceT1+sh``mxi@K!D|fmpZ|jvi^a@N}X<+jC{fhd1ObYSFk@0S= zlbMBbEtWbbHGXMpzf1d{JGW2&z7MQtbD!KlzV6NVE5TA}?*SKzm({8je(YTNsR~xusZ~{6=>1n6dFIub&oQeZ6aew|EszRV!M8=EnM(fVZF%D_Vn=x~ppB zZD&wX!MoVX`Wj>v75pM&TaCOYtl&2mD^}NBiL9ko17tnz ziA!V0Nc)v7Rq~crnh7eZ*0#zI)z&w;N)@&BZ7r)R=C+ZOHmz7uW#d0);_QajvRbu7n^kLriZv^m8A=ee*1HP=)$wKhuvwaAT@)qzVcy#pa`RMgkCw2}rcOQYV$P_UaaV4tYpCG2jB5~H(N@#a%3leK)L+#|(NA#~XJSQ<2(x5Y#hS(j z?lCPp{kGq-=(gW7Zu^B9(p=-Fj`$VGRH4^3&GM_KBz0X2ZZtI1RJBUpu3Onu$7B>Q zYSy+^tYUVoZ5usa1q>!a?jy-K$S_;BS2S0W6D@Ts8)~Zat5#Ju2Muj&Dyr6yCp09J z+)YRwkbulbA`R$FmYYL0)ltao!rHo)I{If*pq9H=L0g00f{aTz2kB0=)}u-KvZkrN zhRG%^R5Fd%)~In-otnxPY)ae-xj5g_R8v(~TPMxCrAOz(l8dIdHLqMTzG&7}F5;y1 z*fFP%us@hsBPQf`fefxD3VJs(SVK45 z0_WzdrKApRYn}YCF5^^RO=}I+tb+|JS=1_-_VsKJVNj?e>jF6~cPm{^s{u`vs~Wk1 zecCkDy-2#UlEhZusM=KBCcBC5EH0XCH_bI`8e3~B8Ysl&Tu+{0hYsPIa62EEh3T^>2c^Hb;tF&1X zyK!}0O;Fj|TC;`)hsnSK?3O3lBPji3>U2%vRe_*T`v6 zXIB%0L|ojtj{GdE4G(rLE5oB=Vg^!mjq6@@V;d9A)f_W^95rSCTv@qhO{Ini3d&|L zo>nn?!IJ5VW|U5wUa@$|q6?=j(P%|IkYh_j%}OSw?9n=HD`Z!aLqSko#Z2UYiLWvb zSc58>R#b2fVN2i?tL@0D6fQ}!JjlA$(zYU8x->1qnI9f4IZ;-&YTBGJS?oj>=TL*2m2kR=5%%`#Mo!gkTdb1NWa`LiR&(LBIg(g; zGNy@q;U(vFzvWe3Mevx|Xs`T`1$2Bn_ zGw-xBQ({cK_{wo0Ix&^CL_9Xx?a5(1JgakT*E6-| zfZM9%oI@I{XHevWsR|ZSTNr|hnuf%RF0SesPR~IcNJ#0b)ioRhn_8L~d#x;sc3neD z4JO>ol9P#aPL|#ZS!`KSWZ9FQd5tX8biIv9dV0G4i-_Br>{24!rgg{FgMv(qbrtd+ ztfFOIT`Onp)<*U}8YJwlA&!^pBwAX@^~_CGn@)NFy;3y%J%e_MBjcG^^QX<5Ub={d zf60Z5nFlp;!sP!sT(dB-4alZ1?@20Zn;KiFsOK*||E~yhwtdQShHq_LSLG!IxyRZ^ zudvD@=FXe`5l&N}rgp`wn!1&%+&fNh;W;g<+jPHRqH-i8ATp3HjD95Q8YD_wU&;0) zN8ISdBO|A~W_1heuBpnEOcT*D&0rlv*2O>L7W zoKpnV@F_ZfT4Xz!Yy}S0)gyF0$RDvXf5gHu`6Fr@_^7|Nxvr{pL}h(lWeaB_gtC#h za&#WSFgKDW!~Z7*SLuc1n*mApIlMDT2DK+Ex0X3GFK)w1I(K1R!&qaIThN; zvi!88CDxd%t2wi>AWGP(s@zO(YOJqgp|9g?!Z`B=%o{!TMs?b}g^M{9)vj>+z1vkw z-LC3_FaP9=*sQFos;O#f)rA!A^lg(&KzXxy+M$$8&<$L-j>NX0he0>{?45xg0X1!+ zG4xi_#GJu#T@7f)&v@QlieLIh#vRb3(_uw3FHwyF;VCX+7iJyjxf* zWU$yqSOz%HQhiw%|g>GZ}3D*7Hn>o zxJ^X_vJ~m*#KlI|BoW)@q=%JYZOa+&0(BddgFC%+ZzuJnDphT(BLPA4RNp|XKv|Ac z70dt*vTkD`y38h<()GN>tmn2$V{>ahhPge_DyyK(Go73g?8PK^V{=QO%d)iBTyr@h zzu7Q7#FK;%)O-JJ+`EA0$rTl~Y;WD@Hw2zR^18ANAo3-1;qncUss&c=#bT?iN=&MvZx>dern zhs%JjrRs(Z3d1NnD4AB(#4S3xm9U=Um28pRcWIKax%D&9SrrZ&o3I5%&K2`3SJu&< z&L2)o6&KEvv)*a%)TB4^4p84X=<2LHndF3*u!C}_`0=?9j%p}jLF?12SM+?mTrig zs98FiTjdDN35h9fNyr;Ecc2{;9!ojRxr=hJa5Lbv-KjK#^$peC+wCR z+l1WABZO{P&PYzy%P8kaY>H+?@9=mzdxeJD4ZHN{v`f)|);5qo(jZf(uBDot#~T*A ziCKCv?|;HO4jkWWTI*zAbZ;T`EXR_2WxbvZbnVqMDF0|jcy`m9N!kQU-GBO2mpo`U z3debxOYSaUxJHh+&Zl{^7tHliDLkP?iFm$bI;^E@Pe-}kr}O;_!T(?ayWs<+#3_p<+ayQiGJscx*>PBS=8 zqoDs6TS9~+C+ZuV1(Paq#)K8*b@Iq-$ei;?1p`oflf2w4O zDf_znOLKC4-R13ceSb=(sy|bmKX=D*X&Nrw6Z^!O4izW-iEWyiGZA;D-jO!-&eSt& zC(WSxOihZPy%IXiP1f=8H6;P7fBam|Foh0Z|whX>3TU4 z5JR2kccqlcRGuMoS?2kQ_KwrniC%xpt-p7so{>!(s5--?Lo^JhjT`f4u*6DM4wryU z?S~=oV_V3$$y#K~&H0bP;Te5x zXz#{pvH36OKrH#pex4D`|E8b*y!}tt>wW(ET1od3Tc5wK#nRpSGckyMUTi3uxBPXGDw zS6_?va(`_9lRWn3TGA}nW~nwO%Y;mx?a4eaa}DjBK4s=5e9hv#qU-NHvDsAGmVQT? zt0?p5YHH51wfC4zg`_(~a_p6#o#uAnujlzuPO<}7&$lPbQX5SuS<=h=eka^8vesoRbl=a#3P=_-AOS~u~Qwsl8fpjWwraaR$qy@vEhj`^p#`*_) zJQ|;PQBF^kwDHq^N|5V*9*J{y9CNiOhi$8Xa_4sT^4gWVwJY~%S3av<+0R>PzfZgC z`R&U6+Liq|EATZnFUR%z_;%O5eM7HLYIohs zO}%d4S#VnTQ_@a==*9J`D1q>k|L(d1Z<3Q7g~FpH%p`l{ZmNhu^jGG0K_nAFUiN-v2zk9Md=E$PS>N z&6d^Eu4hxup??!pKSMEVM%z4p2i}Fq0^!5_^DZlX5ZTzgqbyWyV7OsbhUfdnJ@@{9ShY(BE>(^C&-H*Cjp+D8Jy!u|mq_l;5`NCn+zY{E?Lp zQ(nT9>g|;;qD-Il^&!`nQl4pL>Ho(lTYO{5l$TKs*Cerb8ReTzU&e1a<$JBXkMau2 zkGgU!opLp0%NMmr-;>`oeaX*Nl*9QmnDXWPbI~k&@`}|{uBV*q%HiQCg&cM-cOhj^ zyE0>b+VyExl=wAZk3PyPX%^)s%5|=swSjUo+wS@k z?aI%%vd+J?wD(H8>%X$HtX~`D1}1kmPrFTTAAjoS4X0i3Zr{33BhI+WXF2{8l=`{c zw8a-MnKoS)P!hMh^&we#UPi0)*_Hbk zH}MIU$WQwKFjT|^XNC`z6A$<5ReSzUSp7Wx37|8coN{{Yp0Z8|-M4ntLGOc4|1$?q z9DN=d)o=eXf?SZ;o%UoY!zG_6$u;-kgWkgrpKM8p{g35EYWLE$;u)W?io(DC>{YJ( z%MX|3Lc%%yz*9tLe5jHT$_VR+QzFtp_zw>z^v<~J@AWhBx$~L&r(gSbPwYrN?@_sg z8Sev<#OGFW`HV+v5|1PMiAtBkr7;u;Qm)JD$O8tp_Gh!TW*V~%Rff#@@4_`E@4^PtM*M+2@>471}RhD-ZR{gPGYC1|^9TPUJ7`Aw`9ZKc zv{UBEIkQA|sy*J|@pjMtZjK3|ogD=n+;9C^Kou1BqekvmL0pB8<|J&Tl^SR6$ivykyFL+FDM7~k?%Ft(G63I94);N?C zhiDxCU+R-5kw1(}XL_%KgT?O=6U*?J^e$T zK4THaGnNztb5ltWUNPc5H`$nRye^D?p=WcsXLGw}b9cg~yhn?CUgqiJPvrAfPv4J8 ziI+>nKZ=Q;8;nI{e_z6WEIDC6mi=$+6VGV9s`l)!O4yNmwvqiq33&|PLjPm4Jo|o5 z{wFyz+_UeuyC-2kpkLt_$$QqwAAFAT2c6I#`BB4vsqfpr)f>~DUR~Oa>K1x!{kLOB zUWI%aBwztt~J_%H9xn3N|pQtW&!Wf?B!@)$|;ILQM*WZ?CD>&i#{JvNBL$9u%SF60bhdh18^k3%2 za!;Rj!+r(i)&Fn(|0E9NdDIp$iQ4*iec9vbGhhC%`bRwdW1haBOaDpV=}R<@OTAca z@a%8$?ECslJbiSc{%-N~^F8~^JpF&?|8Y;}-^Ge}Ms4{yMh--CA@Dfc%Uf(lIXuzR z*&GDB!g;Yh2<{DeujfDQe#zuAFG3$;c?mnQ!9lP))G6}fK-{8s{khPTs2lvde&O?~ z&>!L)og24$O#Xy@kCi8Uj%`WElhPADC*^v+5r;jY{W$^8W)VDjErOFB%KfXzha+CQ zj926jb2jp!M-Y59j01JUy)3pNaqdc@U!i_diO1-Ku}a#RIIku>5(M{~&7=dKKJAA3 zar$_p>BRFBzQu`K*jD_g$0rkgPcHP>^Cx*@LO*$%$NPfdi`G{1{)Ala(}iuNOicKY zf)6`QKZS7#=XlE3gJ8bIya)Hd9)^>R>F?J^0xgX*YaNk^Y+X1s~JjvcA9>wEKYRXJF^n zkntgmRYt4FTRkQYk}kaKZ}@zHnVzpT;lN(k5>i3ZRRsS zJrVVtt_3CX*#b7?GaKQQgK)aZu_2#zh+OZ_69?rNkmos$7s8Ca+8GC9OL-!kZ(Izc zr}7ebuyGkY+;|pDY*l9-j4kDI7+b>0_#*f6mG{CWrn3yjmg+Buv87xMV@o(?IE*dj zQ!srK=C|qe{<$!}=%M$@g_A#omzzHQ6W^kBrX&$txwjpyA&(^Hg`5o@w3y2|`RjbN-BP++r5)b_nk3IL`VP@EO&|kf(eA7X-nj zu)c`D*4;vBgmEQ2$?7r>g7Y0GO@QY)PM!i^;5c_1e3|3U!{I8&DR00{j=PS8+l=3a zuXmgzpFiH{IO8Ait&Y>>bHzIxcVR6F?sJ^k1^$}paPL2O(s9;7_*usto`8SgSYjZb z|4ARaN}peMoWr;V?>SEY4g4p^xqn~|WH?S51m~H)Fu5moIuMUonPYjDBo@Zu+c5bj zI=Or<6IHcyUHJScX_Vs*d*JhopMz&Q?zR+O;y8)VCzC2o zUJkEuoJ0JQxW6TBb^Zx_gX1nI;N6ZpFkg}$axDE#;fi33z*kq6#`gR*^zNI|^Tbw%;!WQRP3v6-Drtk6@owS>N z0KVFB@=sy>5P8OUn0Y0f+7F_I#lSTh6$9asq zd^V@;GA4A>wS~_q9Zct1n7JW3GKTV5oa%ob9_KjoMYz;)@J)Dua%38-6%uP8zh&+wBrC?V$a|yiDaljbKSwiGljqo#$Q?4TxA9tL)8m@Dk`Fq&x zOOB;}(&R<(R^wM;#!_r{Bu`Uqd^`LTKIG&v`kVSg$6fQ`laAxa(g>E;WnW0^>^LCz z()v11!pAh$KJCj*@VSn&55mkzk>?Vhw8f4)_k@=_&Y2FcG5vdB=B?<<**wkiHlrTC z)ycd48Q$eM={neAm74^A+sV7qm$buLj#rkg*K zlj&DFdGJe^F%#e9IfL}q9Vd~e>A!ZI{2Kfh)5#%^@k#XKe}FqU?#wu3kP{-$!LJOP zFTpN&q?6}e09y<@lMfklt?rZXbB<+>W>~*cE`!a7PTzrvk=XA-9%jZJXORz?9UW)3 z!g-F9zXjVkW(f~-^1Lqa1Y`Q0In8m-i||6n8DE4g=QAFJS30@uU70qHowMMZojis1 zGcD(nm}i+goV*Kt&9wZ?CAOL0bn=|5;inzvWx%v8{p$QV_-Bq|V#nrqI`PXS)~fR- z_#?;Jo0vE65jJ(LQoXjJ(S*x8qITc>(I1QUw#8m93ehA<0xHGws z^_1x|AG2&MI=lU1NStW&%y&7=lvBP?YPsGFnOT;Vm@Wh zcHHF@e4*p6Vzbh5@ME~aaR=7g>}wpy3gJ&Xj(-V$&vD8Pu=$yi&YBhaM!T|pNxR+X zYlpFp)6Rj3qsa5V2Ae@t2C-s?Ci2WFhqhqqwMlWwe49e&{CUC5sf$Bb`*f9bd@>sW{1nw&kT1F;r6 z9Uo;*COgjj1Wdk)ylZEeJQI%p4Yn~#s)LzVBF`*^&vP7zoN*F)I`b%p`7E46404t^ zPW}pP^Cj)OaI=$l83g0E=yxTTayFZsxaNGpaaIYu!}v}3tByNd1V86kp5>GEMeR^8 z=Y+BNY5AEgzS+2U8b$wUQ~e}2I%YeTn04&#xZ5nazvHaMu=QQe4jnB&I}L@GI-Qg| z;2Ou7V#mfh=Qa3dv-x@WPRD`pBaS=7Vfrurq|uj-A0>2h!<+W!T!)x(A&+V?FX09Cx5Exx`v*rY_*E2L1_mA|E^D zI_^qeJN0&)OpZt_RG+cyG{Ld#C!NY1%lp?(iyU{_1lxRxt$^#DJpLX`9kJ5^8=aV| z!fBs{Egw1&gHAi0Jh&Ksz_I%IxXFomr|&uL{4jjfai=Zt8>Y{E>}2yo;@0W!PM*_` zHJ5ck+Rb2`J9l-QRta-Wklar2El%DQ-@4rHxFa#>a<}6Y z)|oC}GJXiQc_g19ba~Lpv#x?4b(}L2KHxZgJp6{^uEeIxZyZbh$z43h_9vn#R6yUTGWvHumv z>d!YE%b4c<*m0Nd!+&#}G=lo634K}b#HPHT>)OY0XY{*TKIgpw(|^&)WPR14U7vNFJP&@^ zand?+?o-B(z&7sE_ii@U(wA;FzS5U&PdR;wNw*(3PNl7GCmeT~3cv3-_XhZ+<1BQ$ zCp(t&Ykxz^-kVp6>{=?aj0+WUON5gaVL+dhVqBGg%vV=mp*nVLg#6dm&4z4 z^7Mbg&Fv)+HZ$k`H=+33<;>#>e1(R`*tz z`J(#dRL}D~IeD!9Z%0mUD362jNm*>(Z2Ts?%dxya>iHe#bN52{5clY;?>&j5v?b4K z_hcNEvC;GIPCx7CJW8Eva_XJc&6x2&i<}evq>1nZr!V{FS@@~)&F}?IE-^f7naS^h zE1g{C)LHc={~>JS+nE@gwZX~bw0{Tl2-$?$Z>F-1SCu7<@+hUSTyJr(S)jtXMaBU?&1ott0 z?4Lc%VZ3V&dXPOl8dS&Tz3@=$cL*29w>#~9CE7nq;)vDZbOyvoT_h(RwK z$CROPo5^Rx*BJA+7wekzH-)*_3qPbS*+YAg_Y%W+E{spAgU`Lb>dC)pJQ(?RjZ5Go zrvEDZW0Nn1ZEmKf!S9${`t^IKpL#Y-f7A!!);q_seAd*vv+3hwZ(<_;q>h3IdGaEY zv$pp>*OLAITgvpQH+>L}XT!uqIO7!jrpfWWcNmisFm<#o{ObJ=^8tCEOvlLqOuW=4 z_4@QRc@LPlXx&}#I8R>c^pn$(FExH2rVldK$@tL6awhF5m^_c<^jEnY`7N$)is*mQ z%E^z*&63@QX#`x8DmFb^^ z*PDJf_-ar7X~!v2_ik4=Z4bQ5F~b}}}?zcM+t z`@ZMN|89(aey;IuxX|<;frohVNydAT+gg`Fp61&clJPve%5+42r7`i$XHPF7R#~)@ zf3Mm91^g9HzTcSf$^U_I5&VYJ&y>1vdGfy)6Q2UczC`TLf_s@hbG@LzlaDbjN6xw? z`suV)FyCUh6#lr?WtFr6ltd96Cz;M+Yp@s+$v zA?5|-x%xmn3%+e~^00t7YF%=y;HdFO@GG7Uu@fEnEVSU)#?0e_4~_A?;IGbp27T<8 z^H!1{1kk?LN_`); zJWONk`r)VOrJZUSj7Na<>0!$DJ;OuQU12Vb*Rr z2g;eG{~eCyeQW>w9CscFOzz!#1zJNO%( z{E+cJC+JA zuk<&Ed>(R*F=H}>aTJ?LABR6{aSl)9DebSg15B-txIQUK1U-`^@D1H}P%!hvDEQ$FQ74+=lfu`Af+ASY7%w3|}SYspRS~)}Zsu<}e$_?01nfj*~(;eNlb>4qI(D z@nu+(lXsJLKjGxLV*e)N(J=n09r9|}eJ1}H{Gf3Iyx;hG_$lMtVdjk1-3rqO8KW4w z!K_vXFV8BKC4ZU6Kmyt@MPm682?nx7!AiiP;75JA~50kGS zlm0G+Pnynb_#X-Rh)m-q9vz}zT6Y`V*W{bwQC7DCCZE)%$V*M1IE=W+_z{@Cs}6ZP z;&Q9o0ylbc)*o%_Ao81y3t`4XNo#amj>)Z(XI}w)Gh(DP98{xm3d@x^8 z?`U$yWn>Ry#$sfF@iBO)@o!+pOl{`F^Ns1_$V%g_aI^Cvh1iU|ItV714~zMT zkvmK-K0IvlA@H}2$&r!xA!FK^`7!bb#FuF_%n(%MBU+99ZQM4!WF68^D8>}vU8O55Z zcDBQh8SjPqO(T3V24x|3yeo^#Ovm-wL+T>f|4~>ack@Yuke-MmLH92d- z=xnQt&!dTv`oo+WO|B?E0xxhr$osX?%z?4y^XOFxpGPyt)VJ5sS)cHEH2b5-Nu6Ny zEye{feV2a8Sd89f@;NYbQ0aEGYmAMr3$+T3vh_`>?V2_N=k^My`qvF~(#peJKik`@QGeDYJRL%R$la{1KdO^0hGIrT!4h zasAB><27!A$$tWu7{3Qwf4hsFMNZzMGrZL5(%*4y#)sjXjE}%~I^W`%F!OYj`8b=)B*Pdfm=Wb$S3Q77+^55I15;yTXOs2nvbg&ALE z;&e_g$30VE+7o%tp71cMOB~LbW&9?*!kBS9huEqAC*d2NKY35XCr_IWPck|4Xu|nUo<$!g%rW^hF!`)8c?HdJB_b}@3*?*!`EG$gA?!*rb8Z0_^u~EVobhG zc*E)v!wG*f{rlj*CFB#cj1P16$u}n66UUkUx8QRCou=r&%JPO<453;&bJQuFp2mNv%XBCZOQZ4J;<4B z(pGPBY*M8$F_=WZRA2ZSlhf}>tUs!MCA`)6X7~={dtvNq-N7(xjxv3pbj0{p_zmYn zuIRtd`%HY0*Cfv5p>OA?F>lo-zMaQ^;zRciFnt+fzMaS15qW29oM+?J=Ti84W`6@r zA5~v`Bd65|*5LDOzv%M}{AZKD0{_#P+$>J9y7*Sy&lul|S#Z@ReihGjKBQu^7(WJ^ zZ^e~PF6V^edS|mQ*NU%ja=9N^jDO;fe1=o}Y2y{}=bVn*zb(GghhZW8H*2n zoqU_MwH#)xR6nnSA25B!bn;Us|0evLF@Goj$oMt*xH0{k{0pngm`-M_wOz(^N*80s zbV{M~p({R4p)Ui?w<%Mcyc0I2%yu>l$dM_R7#G7UjXw@ISzTf{Ws}LthbcE3e+9Na z%4aN7=(F^(;3fFWR+m0bVI0+mZSbqc#AC|ujrVfDGs%2=8t%Y7Zu9y4UKUUC=lnrt zAOFuE?&O)@hbK6Bzf5?#aX)y0*}?zwSD5@_nDtBi?8o2p8B67B;j4|m0N-eJH^O(B z{62W6CuhtwXZ9eck80-$7@yRC#^U^+854)||6=?IpS@%mAAqfoxg=@{eU#5d z^-<>BeavU_Wa=1`UkuY9)geEpqNjWY<>7jmI;u~uPG$aTev15R zZ`_E;J=v;K2FOqo(D75(%;+)cqr?E z7~wT7?8^)AY^Nh}p2m2H&jaHyYmwBII8UoKc_Ccq(j^qt-Arf(dkH> zr!i+#{t(RkRUbCN51RZCOdnO}82psS&l$gu{D{?E3cqPgTV?ntHe=~9W2&4B4|G1{ zJPecD`RK^2ti;JXhxi9y+BW5%=W7GwUF-EMV> zXW1jhTj0aSr$1x9N*450}IASK>dIT$sMnlQX{B7JZ%0dZmnS)9*Fj z34hag5BxpnfBXRaGG{dF*Yr1>JUtCLW2tQ|gMaVjc_r{EliwBuGpHxI7o)#3tnY*0 zg*!R9d_Q1DFQ-3b7))-9%^{WWSZkNq&X{R({GCy5{1|LwJ>+@V`aXnwp0Ud6qB~=w z@nM)T)4m*m>8EgP7W}01N4~#2gIw*6TwXJNVQu{Ze%tBDT$n*w{2V$6{=4ZDhncKR zDreoD*~6Hznpt3sk29^0L)XHLy|y(DW_*>Gz?H^F;Wp#r@D0v~+#kc_XfN|~CUMku zZ$kdC$p^#Fnw&j!CT9rM5k6+j*v@>z_$`<|s?B`9qMdBK5vDIH-wY3NKFIeDXYt?J z=EJOcX6LWSFElwm%&K$pVI$#Yk3V5N75OIPi{MXNUGd>7#v9;o8>2hx1?NLv1N>9& zXM{fd&g{_Utdl0khuM~U!*;-3O-HzoF)^FXSW0|`5wqDNtS&yxo?}cLW?yDZ9A-B< zALO@aXJ5s=BJ*MP=gkgl!|c0EEo09d{RWlaU?OBpW@`H$mSCVmEQ>GnSI86ejk%F zR`dItJ~5a-!sOqDEj}Gj!Nn&330&&*^F9XK`C+8^P;S04U*=z8ybNArOwP~0&X{>H z|MQ9OBh24s@&m~4HGdfY`FnYG#`-(|+fJ_iea87Ssxvywea%Vf?~k00MqL5Z2W<;K7oXS7m?54nKJW#f#s6S5MFKVGH1&hJzncL z^B>5s^7uN(sVk9_D`H=Hi{q{@A>Zop?T*t%BEQRH#!u?Tuvbo8gmbcB8()<_dyZq|Y5DUWzw9_p-j)Bv<5wMbya)Lk9+M~HPX;kAf8XOjI_~lc z^1pa|%5gXH?E>bf)KzATg;QAbE}(A_cXlklm309*CUWK8jysW$7Zi9r*m26u$cHDG zrrdXJ1d@%($AGq`Vlxo#XnYu^EtLzCW6HJz<9y`w zNA-(f@?QBMe5tXtRbfnAgIdRG^K#>SUd>K9|CoR9nmrZW-#p)vD4AP=;U!sL>22~6LVZ-qZF-VUGi znD$g>CoyHbN@Tov#TYMT=6#IuikR^dj`iZd0*?n6&qL05sg5w?C7g5!p5*Zq$MW44 zd2b^+%G6PQ0r_H&FE&1kywc+u#~Jh~R_`%mCU)ev8e&&@e2wF*4amu3(Mdi5-(pNW zVt06ax8sy;$Qeh`S7scQwf5 z(NiDrC#l#Nf0Cv-7JuZsZK9JV{_vl&__Nfp`omlkx%yM(Sp8wHiCq0@FcyE>9IHRf zLD5lvHanKzhDq9DEd6CY7ajQxu_V?|dC#aTa9PORdk#)siq#z$e= z79IIr!1!WgY1igs@<#YFlW&7p7{3G8IZh#l@ioTp!}uyTQ;Au8z41x-TE`Nf_$Q4e zCZBgKzrPs2&9SUMahsbOhh0uC-&2e4aV$9*r)_CVzWWnrY=pCx!;cwnfS+}&_MdaC z_HEpg@G)-VuJ(^R9kov%BKtP(YTw3P)*1PZrRb>rkBnCm(-e<6AFIwPa$H?rYo&`9Q}>o8h6xOZkhwy~Dq-<9XsR4#1e8$1Gso$?tclZyVvSI#&Pp8z&<_V4M!y9FaXIM8MI2^`y7Hs*SB>HyVkTXUq>#6ib&JwAU9n0AuwbZff zDXF%OslKgaNym^AM~$a2YmM^Ta2Q+RMkiPM>m9584UW~moh#J-EuNiS#^R^NJn0?y z0h0?`ZYO;JAN2I86ZPwP$J*{oj=OT zp9xNjI~M!$U0l)0oCtR_UIO>=xSuh3DBsbI^lkmgWKPNROe$yW(k$mQMgI~fj~BtV zw#22a8j}mx85hI&BzEG$>y67`TW8|SVOwY7jHmqOi|Py8niF3I+qfhr!!|DR{apEN zG|^Xn*qA&|d&+T&=saVb3m-KW|Bo4ugWvM_J>wGOc9u(d2mXhXr=H;aK^xMp+?Pnl zu5c={^d27f^7My!`ZgC-e}bofo~J*@lP@r)opg(Ts<6dB^$1Li)Cb{u&yK}e^)1e+ zgVDLmvwx3g|2|{-k$%51w$m-=Q-y6k*Ek$9ovp|Z8}EkkL;Vr9n5XW6e{OQ&*NtC* ze`_pu{$RY5Tu(CI52q&dGc31LPa(H6GfR^G)||AfJjm&%bwqCKxtuXFY(1Cnz-E*> zos6Zh<$MPIX3TSPnNu0%j^SW>I$In| zPG#KfIAa66%NX5^M~o#V#6tR*v6uhCbw=W2>r4h?l3{C${Qgpg<+gkWIm6vTt{@Pe#_&ejJ@J9*#EX#S(&&o*X zXLU&E%lDtv=MT}zH+dJ>))tw6Sz}G-9oW{Ebm8+&KY(X=Y->(NI`YLP&x39MRex$d zn_jdu-q5SVLy%ZS^py);vX^b zS0;yZh`%!N&LRHF;v40NiNEqa$ccZ%#9vs}ft)*y8FTr~NtKH~#9#Hrf8wt!{uBR* ziGQR|&PVz$dpfUp{Hmw_JCmQlCS##>-{Ceq@mD67dbAJ6>dRe39=$t8e>Y_Gsnr!r>SR zuQmO0*v3fKhmO~od^x!W5!^R!qZ+ZM3na8YAYE$$Xmr0?0#zk55|K{;Wj^*#`H0_#PsQ7?o5y88cVw$GkwM|_cCL#!+g|euF2!-IEjZ zNS{4dc{_E9x$ZoCZ!C6hGbUD@?)G?>vDoK7wL|W8B96*phc+VlVNZU{lOOlw zzwzY1PslstV))(R&ct20mFGLMjCaD!AC>QhyLo(;F@5RGdZIe`*_rhuvNPF}mwNIG zJo$y5yw;On?#Wrt^?StlE5DDb+za01@n&OUCclxbI>KKtJ_r+Ml?xMRW#ZQvJ!SEq zI4f^}zwPNiX-w=pKkM;x#$t!{TxtSSK3!N(l+o?NIY(LQ-e>ya!vh{aWSoqg@l$>J+U1b3*g5LS znG2D9ViD=T@5yN|l;_c2s4w5&9!E^%CBFr)TnIB35wo`{Gw$;5d_>F`DdS7tSdS+d zA4fjJSnSU+?gcXzT348Pp)C6Br^>`FkFijuzj>_T%F-5Np-jK?m?IHiXDoKM8WXp? zTaCreZco0)lkfNB2R!);p8SX>XAK`4#_gBJeX-9Pu5#hu8h_}%TOR6nO-|@^W&H{D zyD}EaqF-Q)|MHu^D&GPRH)d?R5+jv=02A|w&odS~#9Zb1@B-s;FfmuT@Fm9duj_K- zH{ohya;ht1q58ti3uUo?jd2Og-l}r(ll5O&(`GcgX|zSH|R0SK^}IHy0)@%KPBIc>H(cgFNEFTBJI{8OG$feg|I0cQA}C)!6{| z_w)xDA3{FT<1xl!r_{Izo^C95h`-ttIq{F|*Lm_ao}4_7^sn>eTkU)6xZ3SjWBl#L znxo&T7rw`sILI?qDiSr@vBcqdWAXoGPyZ*z5(oAItt-qJMRqlFP zkC^x?<74+Kk6DXUeiAurj`=77qDw;GH6J3ZcEEcRLdRi8d} zXZ=^+1Tz-OQulx{@$3Fwj~OG?5j%{9@%V?apWNty-w}^jd+ z>FF~TY9}B0a~{8FEOwX|YG)PvhOyZBy(j-uLN33X5bF12T~bD0enTOW_x9w(MZfP) z9C|Vq%6(z>g@_poJ}h4M*wlgErj zWQUk56RV!AQOe_B&P5TkMkyad&b&~5A7)-CGZ%X9_xOOZ^ouo0bxPoujK$B_J^3#^ z`5!$wdxX|SUw+dev~yOLCqK)08#;ZAcfuo$_rk3IT9@%UtJJ=O&$yg5-Iy_v-`Uph z>Uy`_mi;OW~Qu_<8olp8Qfz&YGj`iazHbWzoOZlZRs= za*MerPQ>c0seF@7H=pH==LOg<|U%d`Jr zzlT8R&i=D;5BMJm?nPXOOKhbH2yKR&@>| zpX2cYWBS#LII52DGGpxmp>pEiyVzs;uk!WC$!%rwu=iZ!N8m*sUt}!yYm8~9cb&1=VVzey zB4?eC?BDFkZ}H@;=aD`+AL&18zdIrQCFh4q9!h@?dVI)O{2|V&Bl^TyS^E16k6Ck6 zE`AboW$7<#jm zzh!~{eJYIUZ=YI^FED*LR_@*j#KZc2<}^2HC5Z7g%X$tC;rMsF!5IwJI{IY7d`oFo}9HP(q}G2cK)1@%kP+k zzjIQMVN9G0ay`y7X6y=>3#u>7TBQ5}%v^|ggfY2LP;5**3rdWMVFByE>I<{}D~tZe zJ^e~!`d(1y@fzbz$XkuY2jZf3j=B*Th zk^YZ7IWZp~bCy>D>%X$}k@!bU{FUG2w;wW%x5GKc-+=oWW2Yavt@^~F-$;+g7;i*= zuJLhrvhfMH%;Q2|B#QSEN=aNY+Q&A{ZY9v{ZT#)zwPm_jTzs5oZ(eR_^-y;=$~#Jz}d#V z;4U7s=4)NiC!du?pL|v({{7GKn3$`46Y>&c+U;Lvd<-VHRY!QCvDm-Nm^k-eVJvo< zJ^5NseuF3fv?ssQlkf244`9pU*`K{tIiJ7Z^7uQ(P5eD%yq&+qSM_)DmpqS{JXhY$ zU-DdeFn`H&WwAqUNAkZVf6UWo zZHe@m3lTr->615+eex#K`K8Cq1(C<-U*T^(X3bH##OG9k2L#6WKcJ&yM8N>&g4*8# zv(87{*Z2hTfsSL?95B>)BRtw;=7_c{_RAd0_Xr2fGF}N^YI;+q!t$)zfDb&TJ(ZWRKg3NR`vcRAu|JTxpmu~id-{c*K64?`8Rao^A+k@- ztB%;8?dgeGX4)_pN*J(R$2UKyoKd8aHBD@ftx)hZ&Zg^%D+z$ z*u=gDvJ2{?Owe z8*e~P%+>xO_=GXzGl;cF<-+XC%3`0rKw0|rkui4U_m4vPVDevC6^lM0^>5Kgu<8qieqIQI@Fy0NXHx~OF9IO3s>=^eUn@uit zKj$%Pm--{^vPP->rSN^mV*fEu{%ueGyeEIjlfUlCf9c8DqkGF(NWVBcDNDP|k&uTb z8Sml#O@{G@Fk_@T^l@mO$32WsAs=L12s1{iKNe>0C@+Jj7>j-4AIXWovdC9>@>);6 z){|f5$#3HJne}Vv&BpoIVU1F`@Eyjj@J?g?4kf;-!{4D_^Y}qy@rOC0I)mY-jm6H( zp8O}C{4G!Zo+tk+_n<>R|6z=8!%{pZ=Bm?#JlA+TOw3h|&%@64xUVt(%kN>S4t@?B zV=Q*2dUEnVvVV~$|ClGQ<1-2Ka~L_VEPk?HMa+7oOdN)7G#1}B8H+!k@%VGb#BSp59ZSp59E$E;Cm6F=p5 zwUqI5cxPkm4DaX32YT}Ho}8T5x}rau&p6G`;q#60bNGcGUt%o!%Z>4Kc(pNp4qxqY zqp|pTjj{N7y|LK&yeGfSli%mbIj^d3qW>+PO9=hsys9jI9`g9GV|hMv_)8wMM~Hrm zoE^?sMEr(v9`biQe&3k&WB8vv{+luF%5Qju{)}M#QJ#q$TM<)V+e${xT!^^8G5(Ag z;qho=>W!G_aj~(qJJ)f*Ys5lhY4;+JnJ?Ow*k_C)US%xy86%Yow-}54PdQfmHyMll ztsdWM`eL8?64__IL^i+b@dL(U|4GMc|GUOwpSdG-1K}4CD9BEOZUI-<`!Qa%9B zF+K{jcc@(SFXOun(l6Q{xxyHGBkPO@!)uJk!L1&zH!eqhqj4e3+NCx{|4!psFk_+e zOW`jYFM}BimDj`jJbuKu2{~h-I!oa1c{)Gwbbe-xFC&>ds=pa#O;g?m6YGdSFy4-w zwM*q2c_t#B(2?H)%a-`?8r991@g3FM;{xM7$cdNg3lBFw2onpH3r{pY2G2AmZljnx zs#69p_V{9B{2ax2MRpi3WwFDVN?Gi%*C?03%ok?l#_te7DE+ zL3K7Ef1GE4Lj5OR zd9F_T67VXr@e(GsIiY?D-!}+(7SF+lT+VahAur{bXfvCZ7KbdA-dY zX=`JmkMjFS;XV~?wf#$Uw%ML5ywlDJ!h7s&BfQVfW5WCG%qe`(-X94cw)c#}N9?_` z@G-kjB7DN`*9pJFy`<3R54hhE@=4xf8_OU4tbxC>C+TNN!nvGlL!BO+)k4l^zYlpZ zdr!zktYsljWG;nV!gz-~i(v}6+@8CWwwBtnh{DV5`Ap$e_N=UMlRa-NyxyMi7T##j zy$f%)XZ3}*+V=~Dx7l|qgm?1q2ZTQCvG1yge4l+UMtHw{_e%Jn`+gi4{jQPn5&JDE zDe%%fECiAh^D9U?P*<6B{D>H5449&Ef99&Y>&JkeO}6dQ}3 z5@WGbW-NAQ8H=5H#s}bXZ*F2CoZ@7XsZUuC=rt~Vy$!FtQX6YvJ( zH{p%O;xl!^`+G7+ltqrO%J0MYs{8@G-P7M=IV|nc2hHcr@IGVl;Spo$`$3n_a<5PJ zNd4Ti1U_tB4!>YbzhzFT&QkcOvBdL)<@Rp)O=H@Z`K38e`||r^$`a3$p8S+Ceo5M? z&VD#Kp)Yey=gSu4dB(TGJ&d=(y^Qf8HrSI7H{OoC$ap6_&eJbRJPREwGZy=^jK%&u zW3j)~=FWO}nej$=x$!2r+ITD6g!1$-~{V;mU2jIQNhhVNvl6J*6t|?1f2aTmI^i+<$*b(FZkG*$~kE*)%!1p<4 zW-@sY0t6Byz=Q+@iAjKn0Rl{TSY9GRz^LftHGybIVlsh%2}uZTfocJvEh=JA>ZO$4 z3k9pTNa-zA+HzZarLDcCm0qdhm9|u{r54HWyY}OpJ(CGwfBpRa`SpB0GiU9!*IIk+ zwbxqvapplbIi=CRC1JF0oYv^i$y@2}8D-tkL^qUV04pObKrXJW|5wqnRaP^vlfG@C6b^-%Y=SI|0wo=oiRb2U@d8 z!l*ZkC0qx1sf70eUarwsYxJO-O7G*%|c96kYfi-b=C zMn5_J6kzDh;bVZ&PYxdkyjQ|+0N$_Bzl@Yf`cwdqHVCG8GQm%x1a~7LHkyz3)mu^cLiD1@H+PeX4}fjw?;VXvgIfFv)ObN;nxX^dmVgqJe%KhAuAXN3a|1sNYX>Cjs_L zJn_zuFxqr2kh~Q5Ab6e{T7XWyGGwBU=L)w_DC4AU3(=A*{=N(ZUcNk!jR`WEa8)Yk4c#19G5W3 zIU!+^13K!Lhvd8=VUlx7!f4-hM#5;{bymV?-*ryHF9SX=VQTlXgf9TTB4Oa%Ov1pq zT>_55oyL!Jh)D*VAmLQNcyZk>0Zx-J$?-`V$a7~(nB=sN=d71AbZV z1yTVYk#HK|V-ofOJ}%)*z$YY3a!yLv5BM#O{CriSF&vo|To;(Q?KHu4odkQ2>c)znZ_sozm;n6p>Pxs7|FyR+Cdv;He zgb80P_c+wwr2;mfyQjq2%X=!Ea|zFKY}urpJ=GH43;H@|k54&eAkh%M$=UCFnk7v5 zHfQheSuf!|z;D1dP|1Hx!bHEtITP?~m+%$fcR1$*o}B_V&_7S7+>1dC59AIdnI{25 zmQTswFX5MgKj54pcn%BL@B@!JzW*XQM+9s@U(Ye;Y{7F}!leHRY*&?hw8!Doz`r5) zVkGC3gwFzg%Q=7WfR3L zCR4x$?lB{sbB~xT2}8%2T;~iVCQrh!WlX+v9uiX^VZ!_69*x?aAz}18W)>6QUncxK z37-ZGUHNyk311{&+IPkjJLe}cOC?P5OPsTmmrrr)ZKK_8~6b`J~K@L^q5=;T$a#L1=BN+*9>Uw3k* z^?{QoT{tUNXOFH7Cm+)KN}WBrW;%I~eq&ahJ-U`T`Hj{*DyO+{W~N4eE=H_*88yoNt#B)G`QKQvdWoa4sXFMoDSG$*y(607BtJG2~9ujLIq z|5CXk1``bbtRUpXjCOJY`I|a>q%l=zk1;q;R%eef?>aF~zsIP~9=+(hI(wwwOH}de z{hbrDvGGov#jX3D0;)s6N zZ@k3EPjTWUzTAnC_{W{Nh{rPpe$Ifl5^$cc&K?tjj?X8oa{N5u9mltOWjp@d>yYEa zNu`e8GU)Sw)Q6=ye#`PTe1YS`3}a!_FLnHxE!XgfG5cH{<7Lxtcl?~atl^J1KF>~Q zc=(ci_WqWJKkdW5)yhQ6&8xI}$?=~>3ZQ3;adM96bU~`)uKA>`!=ZuCw>*O(7+bDWk+o+sI>kS+4 zck&yp2W&jXB46g5n8!5y7ANn;ysY7mI5{xpoQ6N| zF4gcQPR{gd`p|zH(Agke^dDNb9E^)!;$zWwg^xvBay^jUuzE$Pw2WmpgzCk8xq?E$ zrVz`nC=He3VR=IX%dQVrmu3?-dwF?PpsJ<{)#13B;HpT}vS27sT~+gNB)+`5wjmga ztPeJTytKMHvZAzpStP1_MMa>zc12xvFw{*>T~$q>KKMu^3+WMfIJo+nbv3o!x>a6V zQxhx?Rn^w?*y5_{x*qF@JzA6X!DWGp;7VAsvNlpx>RoAfqjLjA($)t{D*|PWm6gHz zKtt7kXKPrAC_=Ng6`6^}z~0)@0*I8XDN( z%3w_>P+3(S3U*UuRee<`7^o{<77T={Rs?GsyN!aNXeckO2?T3O%c{Hev#REi#;W>m zE!PF>t7XE9VszGLj$X?e6A40C+jv{l0R6UYV82dV5BZy#uNN(;B<&E|A6jIft zb&>VtjLXXdq1wRmKxKJk?ebcf@){|F*ViR3!4sa=2i%omlE?Y3AZH zRkUh*8iPVa7_hl9)n%^;t|$xO4Hl${?h!QF&{$0t=vJ$_-nB@gvDTHBkxhl7(-+-S zG<{a~?Rhq)ThC~Y9+M4%2GWA6OED>}4Dy@{Nj4gjidG6?1bITX>j^`8OFK5$mI~`C zpW2eXrg2N^|Nyv&|S>rM}+X=X|tgN1N)Z^n2BXmPC{se$*QcUy!$CGd;6|{)=kyl74E9lytc9OX+t4 zC4&7NYta8S*z$0mXUjVaSeHlsOl_-6$-`$I!{lY6Omt+wWLbwYi3*eFM>(3jzXPx9 zmn-Q=9zKt%^rO!-gvpyH>2Twh)X%`@iNoX-pse(xz7rkkHx+lizr~UcH-0I36H(Ij zqZm^1ZjyB*?|#6#yb4K&8^4r1oQa0XBR^I0sE8(>Wy{ZAA(p8EeX zUg}cvaQ+`AuNh?}Z>+2%dEW=D%e#c4A2@X>dH8I2n7sWcm*7SH&BIIS_dkF&dA(3a z&l&AY$@@7l1p9f7LI0&-%Nq|^$@>_vCXfDKAe#S~A4wiR?%+tQ#=GioK42-&8cMZz zN&oA;6!2-h)Ft(^ZURErZzsx1-b7gkovrDBHF-(Y)>*vNrR3qcLYTahC@XmdvX11H z0@md9NkjP*Ug}cvmI9&ccLimV^AujHEt1!cvM%oe%2E8qY6f1DNB@0b>*tqsB=1?k zn!LWqRmL9R)TQ(zJ#={#ze>MpvX10^7qBKTc^=Bq^!v8t@#7AT-qfbD-weRi7Rmb^ z)#4?`mwr<@s=U*{Q=K0#l1DaH^6mgE<EPM~}lFLfz-G)9`dKA9-1@mMJ9NZ#9kHF<-Mp-eK>rR4n&5W2h~l$AV!sSfho zc)qI3OWS~Q6nSo<*X6B8S;(_>|l2;<@NWV7# zYx2^!qfBk6OUc7?>M(gkqvVyzI+FKCz?!^aGf?ybr!FP$eIRuG&Y-N~qe9j}o+lBo zCNE%7M`3)uG&k7wJdzR7djK zaM$Dwzku=;yws)SMXcBQodbcgUkzX-?>WGlybl%))t4nWMw8>IW68>A!q>;3JaU9Z&Bwja?EpSo0k zyMQ3r&nt|9bSJxzzmUzS4rQ+oce0-v5AyXW^1Oq9*X7MaS;<>3>quT9U|k-?crx{rL z#%3=COzl37m+HsUfHiqXFy6));MAqs{W1_*KfacRRP!=$B#+K!l)V1{tjRlyby>_Y z;MAq$?E^xS_w`fwe9;@gk-V+4j_mTEfHirqJ&VsL9Rp5XN*=8zHF>Y@fqwgeBYE3o z9m)F%VB*Qe3)e3L_#6?PHLHv2@bapBD(U_Rd2F~M5;UCdJqgRIKc2*A;%R)c#KEJ~CqqP#%K|j_9FBwCCj34X;?{9XICo3Af*Vo6ncaapHYUZtnQ;<9$Bd zb8pAp=PQY8ojLCg!&GWPtijJw9fYyEsEu07qc`NrdstDk*L-1nde`Or62`U|EMXS7 z2#$7dL;VCFW6fUcg{`>LD?goi6|CQ%MBV&0=7a3FsEw93{D9hSme&00=%#JyETMVz zpr&o#W4`8H8BJ(6Yg-{p+E&Vvx3%MsBYwv+x3)9-Q(Pklvv}by!`s?%&fnZTsHt!# ztC&=Rc8@W$^{XE=wI09N)SB_*CZcU#GpMPx;@3^B-@nMq&^N0ca$2Xq*+e>bpxq9% z)6&-N>p)u_XsZJ{bwG~}w28iqB%QM{N_HEceaCL2^~kve)XwfHERNc`=T+B~)}6Eb z{%2TG>$C4Pb^MmG*7q+jxTniCg=ktgUiKI6>^k54EPI1=YF;0c*ZSzk$t2^RM_p5L z5E1@eEVFgzIY0Vi6dvi?-uh@v-rTOPk%domoh6xok1HJMG|A5xaA|VfF3?!PUJ0-v zm)qPrXm#N_=FjhB3-a57|4i06RfIANc*hsu?nc!zbwoYX(;72?e zV7Y*^V7KJfcmCc4nL2-u4XU!Y?NnEwR&^3U{&N zEq?aG;@PeTTYN_5;yIhIw#-`8)b59kIu`gbrZaLj!G}=xALY7d7Jk{tBp+(IWo}dZ zEy$)D8C&}-?7OS$9N|fS=*P0W@QHO8M<08kbW|H7`EAeQ4^WPQXFd4~^R;K99oQW7 zsbp`er#h0=diL*4%Ezg%7=JI7xsRaFs=wFPpY80fKWqL+^{4hpFRtq~bZSTcx574a zyRKe>y?G1*KIh=Ob~^a3Ep5DCJjT!EbnqBYLmVbxyprHI$*@&w$2-DLa-M|_7nr)_;f8m?mIy-gWTq$d_iN3+?R$tm)ZQQaZSi|Bb%Sj zpxDW6zA~u^Xhq&)v%Dl~^;+tNa&Aby}la@L2vkpGMJPpg4@pKDw`PZ>i8#<9szsiidud=Sf zb;i6MC>QN>O+kJjo&w~B1meZL*N#`2o8Y!C=Gq;@ylw9>*933Zm4gQJw!}ep4B`~} z@$xMw-;6ws{EYZ>b?y;4y?O1R)o3?q<7DP~SX`a=DZG46_p(E^HP48bdy1JlCZrgh1$}eYW(k4vJlkf$a6Ia6rviMwx`HAL3jLVUYQ!q{pK32kQ z?0+(YrIoO*F8UQA)EOub#@)ny2<{f{LveTE?!(=E;CYq=IDN}IEU)m(EO+;4me9J< zPceR^rRsk2o21>df!oA!d)r5e91Nd7zcGW2p*(-k!kln=TvO>N_$KCZ$Qz^PTk=WF zX9vg!6^?wR%`IH#le+^fvAFTiEAgc_%x)q4K)4+cC1+gi&2rU^Aoe8MYU;I-_g_Tcpxj z681{NIJlI}V6RMWBQdVc+ummRG`1MWL>gNf%fmmq;qmpT{$yG3w{?6y?4fZ+|ENF0 zPf3S#=8Mv&(|VkDV2mivY2KnWao8Gow~YH;2BUeE)_vu#c6CiEVFiZVUMeBB%_mkj5J+9j) z%<1Z)ISOsh677n(jBJin85=P>eaF6Teml@&HVz@vYu@KwG}rFKC(M$U%? zXg5!`o0fkJxuui2?S9C%pN0(RdP?P5z%#(-m+hU6rmy7blxz7NPyCL}X#NV~CY{Y| zeg%88@39ih&$I@q-io+e|R69yakL^^)xv5@6HQOfe3XlMCP>}CZ|e2@9J8Eh8( zcEPq%R)m~Xj2yKTF<7yCI`i(%pgqt6vfTpcVvvm~k4-uw)|(=4nakU-4(U9~;@Wm0 zZp+2~2)2kPKWOcmlT5yFPnTy3?Dbab(GQxQUj_eon#RP;n(9YvFnn_YHkw!h_zYg{ z%sZ(Q_xpguePSCk%Tv3$*1^Z}+q$kOdu_n(yY3uce-y6+Zw^i;pzFMji`XlO7|7jt zH*()pb7rHtyYQLb+ed$%#TGsjS6uX7 z(!`dD`PnU_{ySO5oKLiC_*(ZOpMLEFu|A2F`zBhSEW-LEW_nZWv$SvOy;oa1r^0VC zTd_wf+?BW`a{UZF_`Ye|cVS1!&BEHO+rFt)th;Evwf6b1i(I}>>VdUS*!~UkIIXK& zw{bo4yXmow^yqb^M?DVptVjDeR-nh(+KQ)}+8Ug^w0jIQ4`LnHGWp%C#iOvlzMGlp zm@$b6oMINbchd)yuX@^g*gHNx6Pp^YduY*so zgHNx6Pp^YduR~09z^{>a=5@fgk#mZ$1}VmzwG=tN1anpe^80ei?;FQpjfb($f0NHU zu?NSozH7^$ZrX5=86uZ-&En&Gw99{EX=mh+ z9lEV4FYg|O91q*C9sF(H|TaXY)X-+%IM7VP}-;y+=n zE6=xbaM}yIjvT$28U9^y)f0Zw_3FV-7$NcE`W1}}Qt8ka+IPM1Sk8J=Q@%q+x zU8S=qvdzXEW+0BPw)|vHGVvlm6t!Pvu8nsw_Q)*O=6|m1B=}8?+2P$e&X~i`N0Ka( zc`bSVbzO(+W1-)3F_)b2xRR&)RWsQDF;w&#))Tx>o~(`c@;M@@{ZGiL0+$M16L}t{ z{YVb$z2R@@&&GW6r_(4Wp=`?XNtFAbY{~Kwl>4IWlI8s<_e0q&%R8Uz4d2|7>xZl@ z+#efgEgW}cBQ_I=Z-3h{tf|Jav}~N_17`ppjJt{Z5Zo=?hvM$S-G{py_jJC;8bLmv zk8z6I(fq@4@r^-{bgoi%~6dz@GKScW0pLl zA zWOd6I*&<)8O`4NjpCt3eZ;>zXX@y5d%6zerQNEb5J3C6gfXuLb5h0KA#Ut+{U#xSV z-8hb~hhq!Zc?zVTdhGe4j_*|~_}q{iK3}w>44*UU{>|@U&F}!9M_g^&V6XL*GsRgs z^`By$?ACb*^L9)}lbl!F$}e*8w9S9?uj{!k*z1?xf*4=K#uPsH*E(9OPw+E0V$1~{ zD=`0vHT%)O7Udt~Yj)Ose*J5{n2Y|JD`TDK_XwZ!sGLuJLB3SD%Q`Z83*~w9$^@U0 z_4IdH0`0rzcKzj?w2f)ohW5J8{pAg$F2?6g!?poy9r0s|P5z9>iOIk0!T4FoLm0QK z2|fBy{k43^wPo#$ZNi79i~HQJPmV?SzzE>>>+=Y$<*-KX#D0Ecl-vjUzs*CgCfzWH z{mma9vwz8op1(diMS1C)?RH+`{nqmmY{ke&92cu#Y{Rcz+5#3F_Dztz|trlq_4xLS$?>WTU%@&$Js+qK3*S(v08VD z@A)uZ_8L#jEti_2%`Nu4(Fvc$yg__&?%?ObbGt6_d5rImqU}qtM-uxZD^txI=u@tG zjs(~z_DSZRf7bkA+v4cOik5dDZCdN@XzCvC7iUSo7V}6hauMeAwQ-=0?PzMbW?#&C z*Y1mP?4Q*a8gt|_7jn2E^4W)5R1Ty%_==bOWNz1oO?*AK?rLUuEPmJtdq{u#FxBzB zKd*P-i^UFn>5ZuI_S}c5Jf}zO0eFm2PLGH+JzrA}C;y$>_2*MhEMi&69scNj_}gLG zw(Xl@|MBP3bT$aTHq_a#em0nY%-kJ$_8TqM(f)Sc&v7huZr26Te-3|G%x&bOTyWu% zV~eXr4*kWK9sDPC4*sv1;N@pK{#_T&fd7Ij7aqN`1^wwZ*N8a0a00oY$&vGkcvi^u z`6Ma-J$xDCJ?tqye+=u8j}~C9NqMSC+9zUNcqpzJJF*FOa%zw>aDFXr_FDvjF+btMh5>10>vm{$xLk zIseNnwDCc)r=T+%i7UZbAoc`e4Tdu(W8+ZT6ZmOOb{b_9WsfYMMAvk%YTstoO$qmv7eS@hBET-za16pJmU!Nw9Y%y zhVw-7XIj5U&3g~X^O#NeoWU-uLgfm-{XE^ukIWBi@tFklE&O@Up%X zCC*Uta2_JgxN(+`Gm)t0_=R7#yh`_N&x+5Cv@gY8CBTw*$D#i;cgFrA>mXp9!4i&f z+$i8~LH_sg=Znd-FY0_9IR($~^IyY{rec41;BA(K{-we$nQHGu^{`hmJ-gZ+gR$Sl z$Kx#NusegsC)bb9R?vKyOnWQ2p2lZ03|d>m)DQ=mzub|LQs`4rh7&n{E( zTz8(p8@V*^wPF3$R)K!Vv)Eb8@D+aR>RY_cG=BE!-5tPZ6h=);=Kl2zE8%0=(;1&1 z`?bM1uyeCRF7jcn-~Vzgi;C{@+6WOhZo1LXP#}%s!LW zUGQ-{k7TEtpUG(A&(MVbIP)Z)-6L0=Y270}bJ5v_XO8r&bcpb!!~cgh_xpHOdXAZ$ zpD-`{a763p5r6oM6rCl=XQnK_m8H@1jLxI-GXZ2Dd9J1I$TwN^ybb5B;<+L8#M!I; zIjsYjSbHa(>AH$B=_HweKfab+)YJ3F_0mq~V5bEB zxi$K{2cC_{rJ^3SdD^|IW9??wKn=cW94H=Z4(Z5)De9*T3KAsFYOI42r{aUP0u zBG?LdAMS3P%@+Vp|9|m(JdK{W!bS)fZVTqnGN&tZ2UM&+8u@ny01+P`}!#ucBDp}hBEEMyJA=T-M|{Di+@D}$`iw`iU*x-;WbfAh`#be{ z%f?%{AF+=A15ViJEO6vg%EqTqCf`yvK8`Z^n6mL08P6B#c_Z6aif8NXu=RKN^UYNH{0jNE{Oqate1Q1eKE}Lh7(aX zaPN(~iF*?67Vdp;r)S4~ad#g=&IjC&bi;Zl8S4=jK5ya0oj*@jIpH6TanhxY{2Kk> zHbh@wZ~EL~Dq>gvtO4b%w_uAI(k8RyeIDKMHIHOQ*8-Nv?`iU$#6Ry0)bxYQMKvyi z-swZo-7fw~XA7s+EY~tTR4p*00Zp?EuYgDe$LdPs#w#+Q5xt?tpR3 z^YoH3$z6k1`gO)p7dcms~5@cZpIQJ#V!c0h6 zlPn9fs3unyW}{|vo-Dv6*}i;PxDz#<1+uUJU3$eY3vf!dZ-y-3D@n#Hvt(frcwU$% z3rmP>fh^oZ-6@iVH6SZ4PDMRBw-%QEg)vK(T2b0z%#$UoBD^n|r)6madj5cUMwT|B z?)&BiS=t0yueto(lg(uGCcFOgfjX2}6?zZX6LRFnhYK1!7C9}?x8XsJ&aC3{n& zyeOr4=+A-WaPpQtDF`Y`j-EmuRHjOnp1XM&6{u%kV<_Bl$UuSFi{rDc#SvfdJDeRzfHY64ILFH`7Dluo3vz1`nf0`+IkYm_B&R94+lC zmShza7|UfLNQF9CfI`O1CRxDj7IUdh7M8tyG|_B3K!$358ir z#DkOxkn;?tGK>nZm*qi_aWBei(olgQsG|Xq@M<9VEK6E>H*t=IT7x;MW)M1Td#N;);4pwYEEiN}jHJCSmrSA-k8We%<AE}gWN{(Wn?FAwNEUA zH_V$XNSKK4%ZbT10rNoYgJSYcC;&WPEKm|A6YSy5Crlw&Ot1;a1+nwv1l~`uP$i*| zVEzL*EMXeKLal`9fFBf#n1mUCr=}*BVo{A5BX;UQA?6O!<|YAu25|OR^565l9H*$YDg6}g>yVMyYCD2A{X8R}G;RACwlZ)0Lg zn8$-J(Lm-(xCdz;G1%L+1%(qM7Uv_dpMb5N8L^1KZ2*ssSd3`s?b;4_?}$Yl{u1CH zj#!MS=P!#et|uXWId8YO8^elI$);* z?smZE9PoJu+~a^>b-))K@ZTJ8uLFL~0rxrJ*Bx-b1AfB+|J?zxkx{B2a6s5gVZZ5s zhaB**1HR~h-*P}CekI{$2YiJ<8nM`^GX4_x@?mi^J^+1-Fpl$h^z_40E_SK_?*}+v zfDHg26yO&C)^Pv#B;SI+VYtlwHhDBa4Cz3OJ#+Op(lF=vkb&v{4~C%XD7(2jSc3wb zDDkK%=+gQdS)f}i=@8_JZ?l`}CsO+x*wgi1ELI@>4McbEU@E1FL|CJDkSpIC&WnPN zH<{YsK#cbOnG`jiU@^7!H*P1nVlC3&$fx$>ZmvTU6L9vHl_2#(oF*Pky1A|l6^PTs zLw%(v1ZpC(0&nYK-tVLVH*rqt-GD&^int$uPGc>}?J;05$@3;srw4EYh}1fO_dg-A zK3K^H_=qM^i2fxtkoY!_vHr#h(qFBma{GVLIlp4~6C6-rJuoSFrXoPrIT`Bb-`jB@iC4`DYERkp$ z3B=Esp?4`OHF`5;HDi5J1pT9eo)a~51|c*lr42+638HoaSz;Ya=^#rA>!qwGnIdbZ ze3sz2#QIPZOZgm$5g9b)^91+e*6WiZ1}0?_r2R|?evH_}z@$7*uqp6gBv>}HnP5+1 zZC!|^Y^CO9liPq-&1@&Qm(V;dc!I}CP7$cCy5t1J_UKJ z?=8uR_!VB3g2dIYf2z>@XEg3f&v5-0q#$GU>o3GVN1znH2P8|S&d5&eHK`|ZQsPl* zj;|4%m{`}af~6o8*$sb#;J!j8GEm|nG0~(T@AP>{Of)ITHi>ViC6-q%V=0G$uajMT z1v*T~6TII6yeMD5uL7h{to+V(obH5ko@ecRR?T5xr0Wl$& zdV;rp{qdG~l)rJBeuEUvB8NuQOjR}YP7N_064m#r>aF3`r$lv=s(vx7Iw^}pNSd$k zp-4^nF=NSc>`oFWhvFyNP`ts1LYVx&sS9!_-UR%%STd#jlFT5|N5Ajzh)%̡NK z0QFzONGmoxj)q6#=aHvzwY;fFeaRi%s;TjmpIIV)9h}iPB3CEkr?OcpC=;J>v0LC+ z?BD>DlAq&&AC@9iH7t_+diQFMu^6&Cb_j_Oc*t!LoCWd$Mjxjz%;@J7vW)>wVWKfm z6oe2Y$G(|P?H$HoQ9yF+KM@v58cTz4h~3JY^Z`3p5Kw^hza{qKIV-W-<2%L z(f!}oS%6S1nA%`ePj9;6@*2n!1MbSD)WEU*`WuTd<4Kx+FX9(IB?}({n`ND30ajz7 z(pH;={so3#qLmi~3t=4=ULuyUL}|Exjd3_7xC|F5m+~CEQPvG|mgw*Fz&JbAOUOxIdx?OTmx4g7YuYg9nJ- zSTr4<9Px?<$?DZuT&|q~Tq@ya(%T&!}qv&QLV*lnj-dUX;!-D8u!3Fs)xv&cJ>%aJxtq`Cp;H5qDOgk7*CYM zs81H7o}l=o#=U64L`_eA1k{O&I$~%C;}6ZYL><}^?jp(~W^2ymHE20J=%+TD@*l5s zs1k*+9V&u-76TN{!?@*8x!zYMhn0`hPz~NIhKg!*=i}u?G#FxV=)WKJ!E>EglER0_ z^$}#|*oF!V+OXk?VEYT$9*WM^ZD>@t2ZD#XeZ8<8ubh{Mgp8upn&EH1}xzRe<&i+^(^l^U&ntaW(C*7${rAYo-8}`qO>e(!Yqrj z2zxPwa!zdubs_DEWGd1GmHY87i?DIks+Q!))Txotrr05;WaVQK>0!t#krk2Y!DX}X ztUBCH-KWcNtwFC0K8klTHXQ3%#t1-c&=oPFp9OJ#)DaDj(+IZDfvq7rTaS*A2_EJD z$~o=^ZnuaDiXe1K)e!ZIGFlXFAaMVE1FjUF;iW4T(SX2}e50f*0nxAj+=eQwBwT>| zJS5#_2_HG>Fvx}~Yno}~FvC_$he1u4!w}^mvaoarD(en|vObT{!w4CwLWKlUf%xUn zBhL<7P36hU@vmft3z=5tU7nX+y_IH~L#3xn=4lZQl^z#aA!h1sSf*#xWP^TCI=#dm zXf?LUG9fQe2(QZL^RdkPIcZIo;mVEhn~4zjZ?-t@q)HSoC^5Pg35E;lGW}hfO*NXJ zSQWya7L>zS;QIs)BNv?t4L=%olkG=*)*NFy9@71=>L&K(#Gdd1R$$!`q!fnJ9 zCi*-54w=^@mbIHv&C}3-(jtf%);ogUXeN)!=n(5K>-Wl|#He&DzpGa1vfeIFZV1AO zt@mgrN0Mc|U6!knjH$BXuMysnF*343_YTV@w>z5AA$y$Bp==8G%m|V>9(Q7xaH}Qm zF41NGQ*x5CURVALgB&J1WXeg7YD8p7t$wH?L-r#xURIop?8k-3ipaES*(~;UCi4Nw z^iw5G1ynM0nig5vO`^>f*6++msNY`<$9)kv;fmy6o5im>z%EhTMWi2Vw=xB&LS&@j zZs{z~s~R-`@b%31?FQ7sclraQ2d$TjXwAFW^e&*!M&UB7&r^mnATwtQ9WWXeJUQ{` z6h6^fo4EWOPHFyyZg_A|K`PvmKOV(Mg6CkH5?9 z+bv%v$$VKHmTISKtS}*l=;k|ZRy{)(cT2MotQh^9*GFd!Yf)F$Ygq7~o4;?fsYcYA z|GKRP!2Yq#9;R@QttJ>&34R=Og3YE{RZ~j$RwI-y1$$FB_MVlVA2u&q^@g0g?USY;wv1=Yd%}+&*Gw~>SNVy|Fva^6pGpZ8fKPt8-PBb`b1Tml~ z_$pnaZWBA~LQ$N4hZ2N2a@0bieauO4B)n1zS9Ak`>i|xy{rL*to@jleP)S{|ZIbMQWlIuMa^mHMRAc;3)c38U z3^yfx5%v{8i3Eqmp`Z}!FS{s~bBlTHJ6H{@CTIy?&7Dm}*T!Li%f$GWO66+!>yGgX!9EraYOeSt& zz0EorSrIACVX>v%db4E0A}UPUtqGA8-K5zpj=%JAObypqaYk)9!7!1bvOnt9vY5K`mTmrs zc5!l&6YcQFwiZ%(VUB@`HEdmhmY)S@?f;9GzXkrU+x*w*b%fS0f%m234d{mY0L-z7q4 z?dZtBam<(k&Oj$d13;i39q9p(U>KM<$28l`e0nuY!2hz%AFig7)`JThrQp4EqrAG_ zUc)HEk$9fXt6CCEw;Ko_<0-HQl#<7sg2y*}rC-8m8RWB>R1oZX$t z_z@1IhS{8|w>RueCRS799<=%G{&8ng((F+Rw>145V z?o> zjDz6sJ{`Jf6650?8HVPU@tk{%-C%eJRr5W#w6O}jkJ!A5`Wnhc%wi_^zhU!#siGYe(JXA^M1DvxB0`{<|Q>i;X2bt18*14tSrrQC>{bbWI-!COZ2U zk7~!*d%|W#Pzi#!K!7ct-24?vR(p$zZR72KCz8){lFdwQYV-RLO9!xv^|MNd%pWd9 zs+~6NQ1j;yj;M=_3A9D+pvS7j7_G(p6;WGk5iKgY)2Xemh_B?SvCV7pZ;PE=c%aTSCNu zPPjrfJ^KiBn>ZLGJ^C3|QWGcA5Pc5KC=UZ}KFQT^u*$?T(Uwg|xRnt&YH*uuu*e8M z51CGl{Tnf~*=Dp)T*y)re@>Oc73p9`x+18j3e_h5S@@aoY@*Q4;?eXZ`ml`{2mXXC z>?mf^tt9<%?&$n1W~0+(;-x3x*RsBw#czanZoAfyizeB>z521!fI*6!X!?2}W&*rgg2 z%agN&8p@Mt)F$6ys}?b8lgm-lll3OAv)K&kvPvp%>C53QQR1I`$d=dLLX+v~Z-kS| zj!!=4bUfVcr?_p2(y!!Up!iUbaCzlZj27R_fEmj%4?krB{DKpj;G9Z%FN_mMx$2OVALH`0X>F#jm)*}* zo=@-iHs=PihyN*Y(77P|pc5NN@#s#RA7YD`cxox0+FumB=s4zxsRyti@FfxIUH~q8 z?NKTf5Fd+yLX3qo*MON;KsU%NUBhqM_QBp*Ayc9u;rh~&8fBr5l-8%9@ZV=!SEJ?` zfQ+}8yF6+n3r)~|`UoTjggro=)8$Gdk0Cs+5;Ah3SB>@8!1@|k#UZ$oIGxbHiH^SH zpw+N`%|WpTsSy)y7dziVLj{4ArPZ=r99mJwXcrJW|85Lp1EZBaKG4icw1MOwsVrPW zW8orE_Ml)5>7!qap^J|rK8v;}BaL%Y%+qD$Q}3o-0@L7E2mz+SKcKgt(%Y}-?f2X( zYzkhw6PjZ2&JQIDpH@I80bnWo>U1(0mFO~D-$WbEMumPwC7PNvYM$yDRiCo64f|3nkAPyUs0B;Hc{IAC8J9FSSA2>Khl9dwohW;@_;jrjQr z#pu-E?0_TeYK>=)26t-kb2eXU5;OW3!xQ_(TZw}b7pL?wl2YKh1DKUKF@93~?0)!W zZYGP5pMrXv)=Cg=;O-49zAGy!-9#CaV#LQ2n}LG2mnI|DFlP57Y+O2<-7g1>@%=Q~ z1cx>sb-nr-R-z**5w%{S4b}FhmZ`ZUPUcn(_R)m6@p!yHyBWTL4>aFAP_&)wM%(x} z@(6w#U~{`kF?^SXcNra_M(}k4y9i+eZH+kbO;UMY7$kem3uz7?!mJ;J6hMg~qy)7x zG|v`0bs*LFMqpIaB^JFB*kQ1$>@i~*w{d+lsXwIu@Dybo-r@+fNVI$eZgvXPi;*r) zI=i2;(WsGVKMggvxL|$K1N@U zKlLlqct3O9wo=3~21W8G=t#w}I^XPmVVvVMQg~vXCJ4pb9Q&Clj*o})_VtiuZ;v+? zrx1`YaF~xbt}{?QhWp*bP3sJ1rf!{v<|nBNEc3FN(}UUle6Y-9G$HLtO-yl$m>vZu zHRBiHmqdRHQDW2qV_XhV{+Cs%kS=6M2uq+IPKLA*10m1IopjqE>gEi$4Zb72>W5 z&`haeBL>5mWH=TwG;DOx8GT!l#vT>437w&e(7&e&o6~7E zyf<1m&CSV*oSZmXmwR%->-*-7_REOkO`G|4hwDb4Q;4|C%?UOpO10(;nu|o3uP47y zf;B7YV;yF7&0ZSKbq%Q{2y=6RYLJ-?4h$JuxN8jI6^b`3W}=u=i`{4}3a1;+8NCR@ z^;i*R8a*HO#9=q zRya*sxWnk?x&b@d@-)MQIkfJXQE6-mPHS2m>Uwr}C#_bAiE0xqN)?^PdLstVXf)0q z9nx+kYL~%wU9;#>?-B)R^|PeoB+yTvwm)@+t)(+!5P473Y5N8%Y>}FmIAF9| zr)_P(G|y5z|E!D^HM%YQFP>_MMTz=|l}EHyhO@X+g7is8;q*Q}q>z!z!5gShteX3U zd#g>*lLy)aj@uYj3P~F2u5|+yid7prZ6O)qKGlkv8qyuksZbQU#k9Qbfc*Rmn0?r+Mo>mQO22!Xnsg5&6NlH3pH123PO^gOcqr4U_dT%wXV%AXM$v`)Y z6Y~-Faw=?jj_YWC0yce~c6_PF3R|A$=h4BaF=4YmtRP0eN+vH2v{9NE$ALBLC_;Tq z|A7Je2Uw!EtnEsp%xgEeIq0D;nvNP6O^s{fzMyJx#&WL%OUV3!Y2%_*uhFWVAX6;n z8U;aklO6rDiBMx|BC@K0ci zLUiytg!~yFr{SM$mXb7VKnY;c2~@TDc?H4Wq9zgzt4OW2YaBO>E?>u%C_ZLH2Q|GN zg0M!y3YwHKylO^wXD5efo~?n3Cv5PYG=4owZICOKD5kex=3pHHvm?tvI}{41^G8kD z+B!q0El~o(H25?U{y(6-o|38$S`2HTstp@1$FN3J&>W|E>pw^lU2;@)G$Td@qcPnm zF4~lEom3W0wC+Ivd>x}o)S8T@(T(CXG10*r6%>swx_}7~i&lMY zRZV@}7NzagE?YR))G0<=1hzW;ic)<&vuNY0fz~ShB*_UvrPuXOl0K!0yEhSL;waV8 zQq{H1emzr|pUy+pUeoSj>N^_|Wk78XP^cRi>eY^ib84p;W#rB4D0pqZxqWzKZr&k?T1ZFfb&MM9((*v@*J6v~cuM@D*yeZ1Tlq=5M?JNLn-SWEQ^u?637l}9; za4M82eM{sl9eX?h=&{0<*VDnN{+LNy*gBw+ppTCZYma$M%~D}-w4v3Oxz5RmZmpOJ(TS*!iVCkD%zi0&OUzWtm0ZCHuc_|FXcp zEbuQ2{L2FWvcSJA@GlGe%L4zh!2jPY(C09%^DWb5{2gBaGH}5Hcp1|t=2Tae;ftO1 zwYN4j)&=WxI9ys^zC34DRTWj%E-TNeUR4%iH%MDmQ(oOz5zHaJ6{Y3Nt7?L*eB#oI z;L3-qLUr}E3aTq#T35R&SYKCuYp}GeYN_N~`j7B5tZwM34fJ5?vhs+w#%GVq&Q&e; z#2HPyPicftNlrHVv@B(zAY;{I%S-FB@yFbZ!NTRihKAbu?Bz7(fr?;dX=8OL5L#Uq zYyi#zPJ^p!%O3_7d#Q#{1!w`|D;PEf@b$r9O-PUgK!bmJw&`J8z&HV1R<1VE9a;>;xD^zUN`b<-kusg;WGk8oo+AFYD`vwh9ACW%Hdc-#ZO%5Aw zdNj({V~nwBnQ2pVhGs&f=~;(&_Z%PI3dCm(U+$Fqq0GNGRYI3vaK*mfbd@$Gh-L z4u4JP53=<8tm*X-d?Zf?G zIkL(}ru+ft|F+<_3#fRVSG*!BUi12f-IsG)nbi=k{ZE)N17kZ9ubND2gwMLqhnTTa zeb#qdeO8+nuO{EL+#$o#3kQ?`V!-fjdaU~5DO0Qg1ydqw43G6-u{D-l)wJdnSSMJ4 zHD`Y==Pd9nx6a4-tnE!ce&5qntSYSki7B@BHf5(1_zT4U2%RgzRC~uxx9O>9fAwLgwG!ItLc} z3q#u$m4E&yx$x7L&pOiLOP@MrGHGJAPqKQ?vEmD?Z&;ymgz)UbyL%3qBtDx|li|+8 zD~HNc@perzbcW3Nvqy__Zbg&dc2V=MJxZP-;Mch-fUT#R=UC^gY^&T`oIVL|@`&#S zm6!r0WIJck4n+Tf_woruEDC?(g{{rLp;Yx}%O{kco&^#R3!q7`E;n-%LJ3~{0;$EJkD7TF9ZCgN z`MU7V3W2T5hFv293BH@$(t>Qj(z#bsNsVgSGY zXts6K^=+i4UKVzTs)Z({hFl$#`!r&~L7#;XlY5{3%iy3I|jH@HaX9 z6Hx&wlJsAqgsRL58G|#d={y3j@1Nuv31orxR<6niT=tiEF9l4w6pfze6)12g`J>@m zfSD0|+c@bT4ByR=L>8H1^)DDaX1q0YPHyhx^o)Clrq7+4Gwohzl$$XX4Ch<8sh>jZ z-3n7rFR;GHvXNA$qi$CVdD=TB34R8Fhr<7wKAtR}7R9qDPD#%hRt00_W(>^{GgyJg z`oY@JIB*>k7CpwbMS*MkJzn}Q*A%cdr~s=8>*u_g|KiSlnEUWa;lqbqzG2q;EtOVm zfzTdu|GTAt9OTPr9;I_F+*k)Jbj7rO(#%T-E#HU{kUiNt+~QjX{GWy8zG(P{O~O=Y z{lP3CbbB-J*j0;*Y7?a{QR)&Jw2=m%w1kMfOLV+Vw0u>RqL3e1TZs{fvA(mmz}jsV z3>lI+WQafApR3tua%CP2#HSc zIB8906pvLFg2b0aguHI}Xo?W&?poZ_NZMd}6H6ivVYRi+oI?{rjP-Ly(Gzn!FVvDA zG1ec^uh|rj2f35H$w%)S!W{oCo#gAHcnZaPtsTe z{}I12Vp>~UDWWfMcuOlEnm;igWiZ2f$)b)M7FWT*bjLM$riJc?^&LZ$Pp=i_9jyh{ zRV+kqCFRv5WlbvP#2-kelmhGTR)G~a$2x>0Z(8rJCB>fR9{PLXFi%N`30s8y#ckAJ zk}gS4pF+krJ;m3`J)XNDdJmjwX!=lyKh52n$|$_;@(mti4al|zX44d_M6Fsn*Kjt0{oPRqzCItVuLxKU+hlIl!Cy*%~os{~_A@sc0Q_6plYx z!#nmx>n z?(yXe9X9kEs57kpVrQ)%xC%^{w)ox@XFUAiLr~*Od_DIEzTVp|*L#2P`Z7?pdDR>; z{ok+(Tbe^_5X9?`Pq0QY(2g;-bl69`10`DK*qxG`$ubQMv4l3e)QZqkw+Qm<`X@i zN@k_DyJ zx7|K|L4EDAMZ^w@s@j0F^=5%p^;I}xD660iHw)HO6fXSC5^8>Tg6}78su#u+?d7!i!8nZxSO=Ck4`ao4QR^Ct_ zs$EgmfFp!bG#jYlf>9S}2!gnJd|oMUYh~5Fchy%dtD-JJ;br9&D=Tn>K|J^51?G*N zUKp4$d(rf}=Fguwy(qA7(E>)e1%bO3%$yG~IQ3w{Y%6d$B2Eink@A&n!L-G91QyP` z1E!fDYADak&*iqMtqd{PlKwKGvA&@$01Ji@6qd4;l~vWDV7(Lu$_BE88oTn!72vqD zuC#h=Uha$r7Qit{{fb(gd6YebKCCKVE*a}+i0M4XX056r^EAp451<*GsKF(cS5&h= zZA~E9R22%~e?}YRaE{HNT@#v7$)$)+1y+>RV`QXJt7~hP`5=u2s#erB)&~Q1p?dO% z20ABtm<7nE9AyI4RSh9>9qwQDUsRAnuZ60@NrXkvKeP{n(2xdJ)YjlgYial? z<5K&SaVbt2xuaHB)jUl0s%lXECZ|}ntgZ^qy|Qu4c;zX9`cl{f=B)`<_{x`;)-z?9 zGJgI;j?Fzw_%=5NgY&>!B|#;Qv{++}E`oZY95q1prr0TkYp)EV|1}R|yueTwEU&7p z3Rb94tE#E2h0SL+)-Nj?pF3-f=s6r=+*o1!iqcT2Fb%ZAF&aj_y0)yeS~vV1^8B6&Mum{2>yE4!bNP=vIW%hz_i-hYT=X%?z(H9GpKY8mPt zAt%ss9(R87x;3>pNJd>Vx}vnd7z zS{iTEtc>gzkHr9DFIZaBSch3PL^(Yd?oK1mQ@@yQgDZmd%aD3kvl^=6wzSi^&|33& zDAiE9q7K^Em4+}ip_4ULwFrBzeH{h@h7k(@_|l9@wE}2ZM#~4-gB&+dvqE&KqP7vy zAUMX3&jSbf*s{_UD@wWT05O_#1GDEB&0Kg#;q;k-MMVo2PcLF2`qw|99hM$y;-@rB z1Bz*gbdob#psp-X2GemBxLl-(+R`u&my>U_jJSQD&kZ<0>2zpeJhoQcHn&U1tlQ?h z^O^X_d+I?wcf4#{kvm*=&b>YAxoO@NoEZ>$7OFWb^CJ@H+~TUgij8TVDa9vBoHMzz zA04eY=&H63l$hv=yTEc{6DyjtU}=77%XiRESsQ*)yvojKM`oxA^7 zH*N`M+>6I?^YT`B`2v=oB@0$a+_m!jv(IdTbZ3;e6*`eP-wK@abdGa#qHf&Hb>ps@ zR5$LXrQE*lUcP94_qe%>7tLM4!4;v77Tt@MEgi?%kKQqTlMLm`euzwNc4JDX=yT>R zzQr9_?M%t9jBbtaGaik(oF4crx^oaa{g^Q)JpUl14EtN=ES}5swv@Z`3Y~}sG56=> z)23f_El1s(=J_L!omu)p?3ejgmU((S{}z`{cd(GvZ~@kNf^W%A+iXqErNJf$7Q*qw zY4V)qMBp~`*tK%0PVO0Zobb7sGe-eqZDKxgvW13QKoq8E(TYns4O`yLfQvtA`IA_8 zlBFf@))g!P_G!nK7n0r0d4gMI2u5&H?rJSx(6fY-c^mjE7A{-f?atKoVeMM7xNNyC z-tlRbJ7Mw-y6J!GqFMI2$OR}?)45L^2_GeQPO@?y(@=|w2I9QA#MiAbH!XFybAvf{ z%|)$k@tNtZi)=3V>AHY3@b1^IjF+-f+`5QQJPMs}(jUFGit4N}<+ z2?7U;r7T~!uHZa3w^yIX_%t%_CO1-YVTk*$OSG zWO9Dj?bPKHM-N9b<(or)7w7$p?NhHicMs$4jsfuzgOk7oeDGSlSPQnrM2Wp(?#+wl zyAPu)8Ak476RYu@>!#~~t98K*Bp(wss&xBLmI!f-?@~!B6VxmtH%QkJ>ABkwWJ+%dcg8Djv*3 zw*3sWQ zw~)Je?ev!DH5lR{&iKG3hu4fENUt>!|=~bv^gExdV6tU>(pQVLI&pve?gtt zc4OXlV%4Z1^(3Ll<{L`0ycJSx9=1cRo+_w#y^5w));w9Ty#GQ@lPo!|C6&r1`nfE9E z1AqLecYAqL8+9H@T=Iz&wG`cllS>L)FLHjA^Jk8mB=em^f%bwnqum#k*C|I2CkgK~ z_RqGsO)IZcID8F$J~!`Ya!t<9OWFPLjL)g_c3Q6pxLULGb^CNpEni4;tsg7$W8!Ko ze5lWTRqHB0T=9|ekCv@3y}#sv;tkor=BKfFjYajqPhR}-{uh4q!+k$^J|B-@%oTLD zmNzMe8`C!69x8Yw@n9jzxe+rq&Qvw|gvzJnCLB)MzKrBRk8eXXGHR60u zgL={Nsct;AGUgvnPJJYy$#E0vN{6bp#a4((Lq0Bv_SW(``Ta5A~`4yIVVCj^(mNs8Mk!sV> zYEyXBPx%}VyLhhkw)6ig)6^-OTXZBzN3Z=Q+{43PxqXsTPWIZ5D8Erq+@_f%OXUmU z(Lwoq_?Dn7-T1qa(r=~ALt1X*wt4(Fs=WaF`R|V+qO7>(Hp<1h0zf&8h01Qz3yS2>Qg6Vu+< zUi-)ODv$3~4%aRDJF(aPNxjNvP_FZ`WE1&PIk!217YkHNhrhKc(IvCuVpLfPOHu&$g za=Oa@C6z}gOONtvf93tDV87z^ji9V}eLpBG{x1b(#ryZXNF9Iez}q|S_a|oI5A#{O z{O0{hRP-w6=8)|lWBa?Q&-~AQ^Uo%8B9{}>w-_h3qtE(~|H88E@9_2#tJu$ak?8W} zWG!XZi^Lt)UTpuKUgeMVDu2q#mDHz+#8-Sdag;Lu5_@{-ALv#7t?4(T%=(k~r|sWO zne``Wr*FwMlv#h0{rvtuU6cn=&aDZ)f63e&x3Z1Nf=={VkCGZAZnOOzzLaQSe;xaC z-(I!-@ACVjO0F^ecFL?*$v7Tq%B)w($8G;)%J`PtVf7Us)~n=RE2}-$tK`qE zoTbcqm5k#dd-NswuV8-@vyL3OP5Kil*9B#NXGIS?`;RffhYx>ywAU5B;F58#J??X8 zFPXcf(Oc&3cTHR6j^|{=&x_-;JV|`gD&~7q(vaqP>Uyu7r6W-!^m& z>(ikRx9yGZ61ctYCRgCEyR(%4sOT<5z3wKKZ!+isSLeMfxCY<_x(MSb{`8r@x)m76 z3&X3LzM{LAt!cx0dd3o)KTP)))=Rgs4o!;XtT{P3Yx9}0ye^Ql4or^a4S~FwLuM@J z*fBNcHV&OJxAPGJ2+g&c3AUramJrmu5YQw@sV$_{X~7h z^f4!&ozF`GA98lq=l#^5WQ%PompT9G*Hy7UVP4t;IkC;fe{qo0jX^H3pUcbcfRE(; ziB9D0s4ub21a0Mf#{Pw|Ka9QHxM~SYJS(2nE@ux0Pti`@?fi`Ega6uNyT6G2F$UQHk5#&tFlA`FLJO=QnZ8^3MlX9&`O=oaFj@An$*4EMGT)Z@D-$2X)uvb##uC^Ji1OUx_1m)*r=ri}{nB z6^w_~flbE1jj_+qacaW3oZEf_r;V|hi!Gvft|iEC&WBz3`JNz#@!Xd`F(>gk?w5Rv z$4rtw#&(kJ`FW9KUc_@G*%k2Nybr0)d`wcC@@=KI2fQcXqj?`vC-Od|XXb6DiB;@R zdTl;dX>u3mH%-6dc~?-Mw_iYC;{Fy)4;cUBz89>@w_8Bm;&>Jk?;HpI6!!2ZeJn?O z%_g@FWNM>my2&$5d7m?f0zQ`KY<0db+3tK_vRm?gW_Jd>FW}>O|Mk&6&Rr2XjmKC~ z;B!$B!y@d&eJ>(z@m!GW@z^WIw|HI@)2~>+cyc}_#digapRpaCO2>6eviZ6t_vh=D5r^1jSzRDs9LVuM_PLCh#QNnm zeEZJwSl*S_Dc>6C9LndS{A8XhDg!1~aoj3e@;R!&PCO`3)jHdcRFG^ATA>3`n)ABpq@TkiPOX;s`Z?bex30`m^#wY-+I?I-*^s2EdfvG zFBMvj^m#pZ?4#W{<~knb5o{g3S@=}){aCDD)l zOp?c(&WXGaDdH2im7?!Co{}HiskVIG)a-mNQk(O~&D4&7@h8q>it!(}tF<)ldpetM zD_s*X@riv%6O*{_T5sd^B)uuHvo+tx^iKXNsl`9NJKt^^e{y#A<hg998Uvml zF#XM)b2jJu9<}G=6A|b5d?VV(UoMNs0P%_Y9vumE>htFY(dvA@qO}3zXB@-uI4(Q! ze9>6S=|rd2jnA1A^ea9Fp^`tBP6v!U*GF=Zc7FbFOiA%%xnahf97$T`pmX3qJ^RT|}IG79OZSO3URR zaup5ZvLEcWQC4>;C9YjcU*lcZ5nWwu>o27``CH-3JeN&_Z}40$TZ{+kq}RZUJXh*E z33er~{0sa}&pMw{ekIRl;Cnq6z6gKBbHxOh>u^qoYb?>@o=ZLsZ}(jE4)|-Hi+>G& z)3es3h(5b^b!~^aCN9yn%U^oV&~IIrle}y({9n%rWC;$^PX7{koaf^EV6LS~uGl0l z_FQ%aOdHNl8EkQ=_&$8ImuH@VSC|elN!(-d=ivuD7bW3OdMN(vFTg;0KVT*Yp<))_7FI^6sZ-vB4Yqji@-342m^#h;jIL?i*#kufRnEKLB?S)r+ z&d`taz2?Ky@PnR9-v)o$b1{8PZ}(g=5`MH11<&!U&)H>f^ISj-%gCkk`Cag8W8zTuL1Xe*_JHR~;#T&k=c)>L ztLO4#@K-!nFow&%Y5KDNeUndx4|pzJ1OLi%7TaZiGW~flV@Up_h*i1eC^-qHJ;}3- zhjL;ej^@K7Jr}+iZt`4m8*FP}>T&pD(`kgS_FT?5ET8SU@>Q6%QZ~yE@>=e>h`yBH zVSGP~-_j|T%_lrZ#IKw=EP3T__#38AY|3qXmfZ(i-b=_!xsA`NF|dt+qG7Q0Jx#wV z3cZ~yv8iC6>=zt|$9vZ2l8ScERae4`Jtuz$-yX={ALz4Q$c}yuwgO*WU(SRrFX?6Q z;h-*gl}=_o@{^|jHTqfYIsGzxj%S_kR9@t{>@%>%IbyC<+Po-lfR}ik(pTUWo+}wU zmF9ElWAMAZJUt42pYc24cudmY$`5;a(M0%To)c%o4|^`Z0sfZf%sb#8crLpK{+s9G z{qSp^^`~&EYCKmmU#jXoE4Df}b@68`S6ys6ZSakrGta_r_gs7#Y-6Tm8+^CP@ui9} zBs)5HsCv|M(WUUyCTCyOw>?)fuBuqmrLVbF^$X9=pWl1d80b^#x#B9ASV%uX-uj%M z*Y86cPR{;5*Lg0-hdy&XS4wVqiRgPDi+O^$_W7{aNqz$6<@_OUeV*`Ka4-Cf=kg0+ zVkDh{3*n!7&N4Uq{MvJR7yK8`THE^k$8!pQ`WAUkGG_YjG`<7g<5_+0OU~lH^gZNR zed&9`vtm-6_N=z52bj)t@CeUk^tXC~=OWGrt8J|)cmck|%ZnGn*P1?gt7d$t-IDe2 zI?omVgl%oC>VY?UdDTVmlb+MX@RvN7;a4^DM|Lvwz1rfIAlKE_$8yGFHGRAU9c|Sw z^Eo}{KXE-F=2y9{Zrm@+^}v|Rtlerpf)C{5b1Y{rT^zIZSN8kS-^N(Zy5oHN8S-WM z>j3?_y}aT+(fX1qwCZCGdxac^8PmFOCLmD!*!%sPE4hrcpGx&?}%95>gCB6X6#P9=Tne-D=|Vjb(3#%=#ETU-BzpW(7(th3L{v(h1s&9VHDmur0X z|AWcThUufzSsFzHBCn%yJD|km#C$-d*-XNNP5vFY&e~lMk2Cui8PIGx_%`5tyY_Z2uiB1RG1Bg$Y(*bvzTs|-!;;}K{ zQ)Y);4ItmASsVtu=;alxX9IraIokv?wui(z|MBt+^Qnfh?R;p3ZEP1Z7HY`5lh22T zdj0f2;gMV}Haj(wy<9P`VLfvC?}1snHBNL4skzGJKZlv)PUpXHr`IXR_ZsGcvzo;qG)jJ&ohBP`#dMUiOx@WbST#OO`!7^YxnKw z{KLz2o;VO)=MU`+tTIM-;4sgru`u&peXM#bJkjJF2L{py*Vb`(x*r=w$Kctfb2B_Q zkTWi&uY2PI$-856I`9KFuIT%~k6GRK!{qE-^ou3u7~%BE)xfV>yNt1c`;Cvn`0aGa z)u2A!=k$~C5cXk5+n~mLOa`58Z9Rs3ikB-#gDx@o?_v6-zU#O%=msy>XZb-3tzSFf zx0}rY@G8@xAA{~R9r82i9vRwU(hPd|kzJ=)1hUs2|K);ruxO(|_lK{ABK^uFiXhZt`)^J+z_LN6odN+f8R7 z{8ev9>(9_{c{`eGL!UPt#^F$M>e_06e{MEA;NJ!OSJPKpuNo7>(+bT#^3#em%))c6}h9Z~FA_v~KfxH@wDJbw6o3T`+5i z`jue+X)hS>gOB?-lrhih##l^ftL{ubr=hQ{jx|C)6f@`QW}5yz@Enu#Uf1d6I?u0L zX7bfAzA0Zix341~&d#IoU0$wS*D;rz{4ek$o=aNc&0Z%Y_XA_% zU$@`;tT9mcvahQXp}M1{a~P%#7xO0g-{u?khcQ>>Lum>wF`ag}((7oP3>$1Z*c>*> z;)6fK&NVs5%3&7<@)^eXGi-q|`5m^%+t7!%j!te>k^l|t!&k5Qc zeuMF3xWkxO4PTPCIefK`Tg8LOKfv_}IlwmjQS);d{J7WAF?aY=Cf@)vRyAg_N%$F) ze-{;)OsKEAi27JxU^?WkzSQi@f?1>Ew(9Fl=e@{Bn*X#_KPlfbDcuSl`xsT}!KHJ#=z%UVk{S`FoQ$M$yPZZzoH=k@QD43(3XEvk9@;9C?-b%zPR- z)9dJ1IdYDdS6m5qTHSBJ#8G{$co^>X@?zpJl6*Kh$Dffl9<)x5q>qwU;>*ZQzTM;@ zm^jAqAGyPHCLsU1℞{{2i~OT#vN5Qz?HASi9tR#_Nz@V7w8gkFwvV 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 Q<ds2m}&wcOdwzg5hH{TTk4Q6NJ>aT5@4_i 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

  • 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 diff --git a/wii/libogc/libs/cube/libdb.a b/wii/libogc/libs/cube/libdb.a index d283a6ec69e5a8be5b8aeedf8be74934b21813cc..4fa2e465e6a5830b09fc1112bd47f41e47ca3a5e 100644 GIT binary patch delta 12460 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 literal 521996 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∨fa#pot&gAe+jI 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ÕrPs(w_IGc75(v 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 ?!h_{U~cWir&sPdRvd8=jN~Wx9reS^teCf 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 jwQcNs_Rz92KbsVBJg--7h41N`8YjOBIW^YE+P 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

    s;E>5W2D85C7&Gh4(g9AS6Q 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

  • QqwfIj5c~ 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 delta 33097 zcmc(|37A#IwXnVCbNUS3r{`{Hq@ig*#%55NZ2@Hvu|-fEX$1vGP*E_VjpBeaMx;xsU3=9La{v3?`~T1LJ>S>QbEvmgt(sP? zs$FN--iIBZ)~x??&5{mbzd;TC_PwF=BQ3og@8JK7pO*g%l?VMZPX5!9hyRmdxPFUc zKP?KMH#y;d`b0y@od4gS)xDhPzy6#s{q$+mXPl6; zDiCkDv0t{m+i>F{*}c79n;x5=z2U=T=4r=s9DmV`#b4AFo_@-Svu954ef9}`PoH<< zT=Tn9zcjapEKW7KKSsSxuXMCFvpZ?#^jP`dB+JVD%6}6)_V$H4VSs3FIa z`RtSCo;|zwIp@wf>1>H=)yK{|<&@Sp0{6Xy`LLhgx%HnJ_YZ;jeW_nk_OnjhyuK&S zJ*m(1*54Mpi$iny5Wm>8oE2qSRW*0(G9(s7(($2r(_oXTIq<;tnM%*J7E-zjZ~ z2C2xq5k62kJQ5zST=qCjT#Bd=K2|x}37?|eZY6xCa{JrOgyC*oJw-XxDA}t14Bw%g zX@gfQr@EV^!`-3o5oQxP+)}e^xI3hO*f7M6mD4}L7b%xdGR-60 z&R+6UbLj}TF1v=Le`!*?^=2I+x5{iLXgSDnyvds4y#=43Tr&bbL%HN5_qh_I2MkL8Dt&{kr1>HeXjV5yd!*Q)?IDo$FYnln_*O7XhYL~5mtxpwFT6CVu8RB)4ak1G< zP`#Lx?=>ZO%yAMlLW(a-nzE7Z&}<>1!&OvqtvMD^{d0&`smP~g33?Rg7z{tH+Z)9| z((IzRehgpgXcZL|z$YtLUk%%NRQ)+@=TXUBX6$IU@9;T@UQ*S}0QmRHHMA`CfpYt= z;IEZ)Ov}`d%I)Tub)y-e?T(WstMskpD7aBM+SlwHjW3>v$eOim3Vgm*#aGgoDOc0L z^bN|Dhr!e$#kqJy`ab1?FW|?m&NuLL%0+ll`Zvmnp71v1EJjGPYMILqbc=^)aB@2q z;5q@lQ(E zVMdlEkLXknhpmgW?`!pW%2kYZ5tBt~ zsA6&y*^zC3Biv@?-@>mcm%atRt(=_?Z&hyh3z$hN<%E2S>}2)6ahx2J)r=qOb{L0K z=j^O3*$>Wp!pm^p6V8W6Ye7{9!PYCimD6E+Ob^0ZZVChUsx^Hw;mXFAFD2;Tcw^9G1qqZE;t2csuk zLZ^%E5SFioKeIZ&H=D+}75$S;(2}&uYHotNDF;l&5<629FTne&yz)s?HJ-6zEhxD{ zMd<+krE=8}_%`JvGoa)?0o4}MO$98;Ir8ClINFL_tx)ikN(6XkYaz+Wr7 zcwWgr9cN$ZTlEabDNSiYeP{c8H1!CHW}j z>@ea4$+IYl*de$L&$-V z%D+}oF^fexJ|hL!aGgGcHG~2yI;qHc7RCqSdhaz$BsVjtf?OhslkZio_RZ@gpU{!y zk5v>6gTJ!5t6^-A&sLdGuGo(aE4>zZRX>>g!a3Sp*;6@rH;kUh3tlo!6WLSDGz%xX zmGv`8v3}^%`O4>1tCCf^@;A!u_B9*GQU5v>;1W_ulG#wz+p1272P-GGn%tpo<+voG z<5X0EM^~Mq95TLD=UVwKFhxpnW$0GDqg?VByiK`grkQgnF2kjudWwp~V%2sDkPB_~ zjVceu!*oE3Bijpyx_z^h*e*YnXD(}U>xK_Sa0rB+n*@*6bQ#GGc3_fNx5LRQZ#T|No#fU{xebwBIg3l+ z$2Ga&WB57cLfYNoT`R|;9X_!|82GQsH6gT`9L`zjvf=6_G zQMsBi>G+y*%^UFVEFT8jxe$#v>kh}MS%hmbxs=-OZL{-mx6g=*caT}fsif<*{WRTY zxN32QxCOX)?QrF?dGILZV5m8EGE;0lqFE~HK=HM6mCM_~c#ss4SPfsJ+cW$ z%k4O~Ut=DiIQN6rT~pkbU3Z1qaAX_}rn&<>#Dk7@OI^3dOgJVMFFnS6*hM`0IQK3$ z`<&zS?5-7rADCUoW5f>-<$eD?(=ZJ`V3d1)t6FL7)64rgN3$d!i^vXmnpxCqhHdcz zvt*h(ubTPT+b(kAC%wrH^s)PUX@iW??heu9wX6W|rgw&BkVT z5y6BL*eM-t7E5rTc|n55mYvA9>66wjC%VVD?k8s9boU;w?60Q#3=x|NGu+eM&Sw1# z_i%D#PI7OproI6*X$*Dtz(og~Y3tl-+D@WL4ETUnP40OFyg`#I`J~uYc#&g}F)o6{nX%DSCmD?|BtvSzqr(nwU zjx*s;DvN}-DTlb)1Y1+g*0;)V!wHyDYK{3v%lO10v@VvPV#Y3XhZMH^9vLkYS-bDe zl7(!0E&$AhH zu{&f$`Ja)kP+80jjO1%S1^JpinAIU}WhL@;c{Xb=rp2=nS;uTY+iXG9(hbp8)v6Yz z7Rg=X!}cm2v%LURNT=;c#cXXB9^g0=t<7R)$&+#tv}R&@59Zn=^0Fn!E4Y~a9AQy8FIJXa)Wpm7;A@rT z;ydw%J$Sit#SG-u)-m6u@`8UMzjqIQNV)nu2fdYPUSI*mut}-m|ym^wnH*^85%F);xd6^&{p+Ov`fF+a_dAa-2SSW@+e~ zX9{Y_^X-n)FV7FRUen+`pK@oIrlHpHRqe+e=SZbz@MA~z^StHS5=6eaonz5q@=9}fC zNbI%EY?tUDGiWryHD>W>q`luXn9dEeBIMXk?v zGiNN_>a)vimvG)X(>xA&dV^Uzj(kg&jrV$ZnP*L}@m?KGZyN7)3(v-1D$N3sTxnL0 z_quuoYt2RpJMT0*(V)v!2ggC91XIndgT1};Cqh+W|AG4qYPfM?wwv$1F}n5rgT0Gh zN}MIfLf)tUt7D;mJJ>N_y%T);?-DsW`ZtN329@tVz?nH+j&B@i*7Q?aPk1-z;7IUx%K`xtygySj}N>54@XE&)5s|YO`CM+A!gOLQAKOm%WrdA zxAgXZNE`QXzrD#0@#mZO%A#DW8RFmDqg@f*l>?(=aY^q0xLi5;j+uIrU)RE7>#&?l za^V>;^HSLV1m53f+Yg?g92^KArkvyA=dd=2e#szsx^lQ3o}*k&dCs|(S!tb1l)We5 zD_CG8bE*rGrJ9gr`ZzZ$mp%jEqnwh0er0tiQ1+*iH_cVWc}Y3@D*PK|>8JCiaybi< z!<-iVLe^*JGv$IZS>V3WNbV0vVohRW}l*3!$x0K_`Y-dV8z|CxDiWoIHIFr1hD+g!7 z$+b>j$3IddnXM#PAM<9x7pS}xw~%8s$&eUrX3X;Is*4e|swkv={$Fenx0#i*{L1P( zIp49>$#Ib!w@L2e2D6Fe7Fr)zQzf5=xqe7;K#PN`l?#r8nLHwo7)3dY6E3<1W)~uy zxeI<)xs;)hvpA8b7#=x`6Ao|#Ig1l6W9Z~8E;e~`J(qrbRT2u`gK^?mi3Z4FoUr#A z+)X)oGdxf^^+)&sWrvv-PE=0pf{#(o(D)E5N;xu&vMG=2`h-alUTQPkMgn^TNl0Pt zaHX;{9DYbSE%FzY!^Kzw%ZPq%9(;;&>YuQ!K>Q?HWaSKP#3es2|5NyWVJ2k}l}2^| z3)Aoms^qSQf2UmD3;tf&-^|!!E-9#p^(RrH?A!-;RQ7P(1bO1h*2068GYm`OAm!ZO z;TCpfqEu2(q*=M}FxXCw%&*{IsNBuL*7*uWxL8z~3p$>5&|3 zirlAza;zy_f@{dJrf}g_*iHjy72HSVa?ewaHDmp8@WGZ}gI`tlpMhz6?6-3Bw7@o^ z_!anDRVu~bQoeF}7+j>Bx)m-{4%%QlTImXxmfFuUb2l|gxez~39jaWg!AU!* zV{GJY({?%&xsvp2RTNgh)|EZxPwIA+mmUbmZima_nkkGD8{|s(*UEClka|P8MA}Qe zqT@KChj`S4_w7c{}sIA4->`6m!L)n>jIK36&SdzeZ@ zC%c8u)mCS&$;|fqwlH{d+ftG%iebzlT#6%PH(S09{#dzuJN%`UZ-kjyqF?kJvnfzc z;jD$$(aZOOaTw7F_!L@Gd-z9T1Ll{6)GX6B8#|&WD~^Z?8UMm#ZN7)#naYV*;j@)X zu~p%P%5q{*xY)|^sX|sIDJMMvzTNUp_&(+Ai7;h}j&lM0mUZ0nJBVN>Nhm)AwvLry zHp=cm?}-bgCvvS7mdBEc)+uMPcG1_$iA&(0cI)Kw-bLOVUKKauQh1zlg~*Q( zZqY(>(>1|6lZ2(p8C)c{Mmc-{wiU;j+f-hF<#MkpXYYo$DM!qfVqdv4}|X7rX*fmdG>jzy~Q8z6smm&OQhq z?>I+`QnDwJQ&lM~72xqAPtd=z>y*psciFAV#Sg(OiJ}uX=rLs(#j>}QOW!hc=F&fk zD=$%ze7BM1OR|-qCdbvnW%R9_nJb*a$IB;L{a4|ml|7uJ{AA_g5I$QuL3!m@DVH!u z%9kleTi`pbL#2)H7N>%iNX4b}s$z$7PL#e^PQS~2u|PRNZ!7I=&NAwiH7YO0;VQc; z%R*dvlyaFcYoU}c({bCr4~flE16wgnX;rv;NKB$kiRLV_2OkKcXhRduM!{Z7b_ahyqc{j;nb->tfk zCra~j>uRNQkza>j9G*|0YtrHZ#|)guSFvHF|Jre;N^%oy7ng#rX3ji1G1Dxb=Rf9F zn_=_)zV2Vl=>*khayM~;=J6K8huI>#nsuTzvUS^h|A=HuCc#a?(=@I41o&d*^k3j> zm1S7#ZdR6csO}!+5)4|`YUPYv9rloB%R^sv%s1iickt)RMeFsZqsXQFE?HbeB2qz@ zYE_a&uS-{Dsi4b#$_Xmya-gzQ&}Fife*n)@j>}o3TtFFJmMF*Ntg`x2&cn)??Nvmc z(Mb8R@K)vYNYiwQU(q6k)R(AC3aPJCmd4cgQ1J72D^Da;>rJnl7m8IwP zjHYzFfW@c&6J=?9{a=;kagO?bI_8s0{2uO&Cbx($+<0zRY#~mNrq5k*3MnGWn#M)` zkakjC*K;*J!*uKV3r$a~GfNlwb#8yNUV@x?UxMvVTuR9v9@OhH{|EO6)BSS)@P1UW zH-0Ep6n+Kg-H@X9zFp--N%$@;Iy=lfaJm1Ldy83dh2KXCd;JQ^zR&Eug7#vHo;ckQ z3X{K{&9=QWP3>Zw_9-)HF?lDncE8f+v~HnkzRF+Zb~W217;0u+?O*RcXTHB$3+{dm z(&^@bYjEAm&HEBtWSXyyV@s~}J4@y3uJxbsDmIz9*ZH@)<4x{*|5dLvW!}FY<$k7l z3Cho#B}=Hgmszuf;@>cXZa_HO%(_8KxaJ00G{!9WrQdfPzQ12P?Q^>m;f~sTxq$D- z+ATI}hpX+^*P5BRw%-sdUk&fC^7KHn>z8rqtyMSrEpjZmd?}SaXf`gTne)tyn+P6S zw#>h^+T(bgZBPE*`p}28h?3*Yx@GiXy%}T}B<9DkTePB%1}2C2K?Q?1?0zdJ9AVWX4*5H9t0pH4VJ=NlclTrAuT@?)!Sq^*DIPb+ zuEbYL&5o6EOLD6iimhg;1Vc^LodmyVU2&(MaNSeQ>brTY$Y)Ggd!`VV-w1` zsM>53u$ZXIHg5uplyIsP9)v8fGe+gIEu1h#xndN|WvV!@bE=h7{e=0-$=BeE9LIcn zw_hxCV#2MO5Mb>ItN3z|&%9RUvIm{OKuIGC?uB1qEy?R_Re9kw({ztt5iePXFcf0? zKF4z)8)|x#FbnU&E2!d-y=*cbe+UjJ#YX#^wURx@QX~i0arU?212nztWV7WSf13NY zX}lN5V`Z3nZ#)7EB*>YS5^Ogw+{=Z3#j-VipRTfYPCQ$4hgf&w0xU>P@;C8nl~c^* zHDr9q%wOX_R{tm`jchceJ*C+CP`fkAu$4RXBb8_Rn5O&KRUE-Zn*~`^lfu^g0lSK( zqf{Pqv(>@MO>{lh7d}ln!=z}My$7GCoGw8Ai#_;a<>*Z0m)Tul9Jxjl%HJcwUKwL% z6_Lsk`yjW&8}pqicPX&x9_7MH_<=p-k0=*BjQsIEc!P3s2Dg-&+VT;z_Mde90$&yHwQGLDlcad%%3;QE%W?&bBGV+&znQaud({!q}}Ju;leG? z{9*T+9Ch1$_#91hem;ASo@N_p3yrq0(XyP#veC)&fxE9u2^>9t_ME^c#;+s36D zm`MZj5vJC_Jkz@T(`~6&xPO+Hy8R z35P3pbL7NfL_XnTju$P8TTrdq@~Q`?E4(ae!xrD^MgQf8OQbtc-yG)pkqtnG|6yKY$> zu`<&n!DzEmg1Kg=1l%R8|#+HQz@E$hy|$C@SymYbE`(J9_&cE;iNrg3k?-OUmSrkX7h zEH({2P%3%BEbKwlF`FdFnA)BM)G5Id)7BH6($`I{7tvm(S%O(+tprP-=pB6EdR5!a zmOdy|?J^C05j$p~1R1kQf+|zn5X>XX@&UEn*Ela(-6UCEce4rZ+oE?{MJSWSgfe>4r1 zVdc1k5WQ(t2f`mJM}LJsQ_h|M|D^09lXLpG=wUD`eq7w8W(mbjVTF=oc@bqj*!HUE z*YHf0CuqG(&te@y_bMyr0^_p$id@dl+&h)S=gg0lVOAm#)Y0iBFWx77gN0n=r0oeZ%3bET%a|u%`z>N zCGEn>mRdwjDv}e@@Hk}|#_%-d#FsFJkRrk__*|i!JRQcjMD838-=$p89;Tfl59m`g zNjXbjqvMs6U&EAtvM7n4MDuOJSoku_>}jJrlruPeWJfgJ9ez^f?hN=P<=jay4U{sy zui$^!ybqge+Ose*1_>NPl2ZfWp~~4~VXBRr@)kTrIZc?bzAs+|WjiH0ZV9|VIWYvr zcST;@Y;rYWW%WixYgLqc75)$9g7v16F%eMJZ;g$a74$RA=S% zuV6b8iN!Eh6rIFtFzc|ebE8w~q>j=^_GJ=qH%aifnYIpiE{#lC%V+TZ)J>Y4Zh==R z%PXL%2bBx=hVxFtgh;)payfKL{m$xK1LJg3jr241sdDfLmk*jG^5kGR!HT0D(QrLnl^Bm#Jga&is4LpdA{ ze{UJ1X3&dAC^v#gP7|_AVLROmX>o>zNTEfnsTq7;IQI(VJ;>JUozV}GFN&cTczp6h_eqU7k&b_Di`5` za^@)U^aFN>!$QTWQ{G~wz*pE&PQJ*TcR2HkIJdF z*q}^Vu8#5+wdnZRCwHK7_72n7nJ(jJxieHG$Ck2d6xG}Vd~7Q+x4$CrSP0x7v-yL?q4?ZG;C9)oWq%m zyC{pjitYLrJ_u7-+-Uk)e7tgk8C!goa%z9rj(hrU_)05Z&ulEdNh8t0B&<>{U}hCR zsT^*FUsTR9gNlEzEVHHf1Le3upDD}0mSmKRM#KG-T?VRT_-=hUFdrsIg)RyuQ#7HF zQ7kz@IoFjho?+i9vk={Ag-p~Ep+#gV)3FjdUevV8ofVv(|Ve+9kHzYbBs z21e@3mYCXZVVzrIMt7raE6u`gVTG6Y&Mfa1j&Y}%Et1$|g6`oMxj9vN|L&Vz@&h>zDNp>-ycnxIUs;<(60HCp2r~JNP*( z{}ud_%EP0~WU{%>a7!a@VVlI7%(niRc7qu-AUsX#84wFM4p3tbjAH`_qB6iN9vF_1 z-xjKG&=RAw%=-hwq1C4$nynQU-40tPOI>Ih_F-rynX&uCr7e+IlUcJ5V=~Qb+b1qN zxo@1-v~L`ntFaAntaZ!2VXNm}XqFEqakSYmm@%Deb_@>tjF(>az-wh3N|}p27)dc) z$dL88*~(c7d(fa*egSM(rXr?Kk98^!o-;FsVBtyTg&|bZ$7~-Gx2Iuf+@8rp@uqOo9joHk*2tT{(x>oxYi#=4ANb{OGy$_e^9YOg)GUfJVn zFlz5Tm}OM*X67K@XAd5xEWd#>s&Nmt>!nY=QLG^G^)QZ1Ql;W~Bpk5^AFmv+2#-2( z51y$kk8qE|d!!LDpRMfYke{~)U#MKfrT{7$PZ ze7|y*MS0Xid48fP>^ix{djZd(5%TB#m6hMJKM?EWna=!tPO*&z!ODY?EOdEhuI0}u zp?+?L&E6S8Z`A59dq1m}+?isgOmT3d1P@ZDE}V%E9NdHJ-~v3G~> zB-{p5`(QZHdwZvu^I$0VYTG1eGP#Eca;Etq5;w0mYb82%*~9!h*)%)yguyd zo?)(8A9nWUY%y!shh3w`Szn5Ih+;jH^ulFNhTXWQ-d%!>X_8=unJ+<^St&taHa;2d z9sgqF0P{xwpwjO@Xdjc~2C>)s$JSv_g~ya~H^O7*^4NcMfB5I01l;2%`esgdoD=7s zanczlF3UuhnrXicZ*A?nDLmQ#FK_6oW}ns@{}BG<$$MEftq;E)CcW%h9IIFz)IZz2 zusQ79;{F2}Q(K(Y?G6vN4*V9}sO-H1Gu>my<_hjiu-pU2*F^5GhMO(7!6zxpt0)dL zS#&&H$YE6w4qk;X!PzC^K0t&uJ62*A$a`7B+!k=0RhDPLtmh*4S+^XncESO(-PvH} zEH@65B`)U%_&v*4!+*A%puWKJb4)hZS|s4=>vqrtd7RUwcX4H3!7PZv?tkzZZ*^#Z z%Ni6n;s9Hgi9?Nm*`g`}l?E$hzszwK`SsLd&1P*I0f0M{Zxm4ZRRvO{O?P zkNv#a8E=1!%ELvlZJaxX-r2^vR4T7S#}$u+t*Jc<53H#J54NTj>jbCTx|-qnmRm4Y zaG6HjM);S?ULkykmA?c(U^CRgPbxbdVbbCb><|CJa&Opnz-Kneu*Et!aeyU-JvtUL z6IvwVeomxJ6QaZ6PRjlWxR1?H0S{Gn=|MQw>O2ZhvCNQ#)2;pq@L9_8o+*FQxFbuZS%>M|sR^&#a6Im+;Ghu7R zfZ>&U%91zu7LKh&t3oP`thvN&a#K03;5^uxD_q5W3d|KZ^ljK$OCC8$bW(ZL2wQ6f zSWE6Wi@v;mBX^vIoo8TcEwNNWe#J1Z4Cjzr&cdM&FHm+bhOe}l*TBoHd=7keF@3a{fo1Gtq zedW%By!I8>Kg#sl!u5ZwX(Fh8l@w}?_lD=dv?4a)Jaf&Kux~w?QlHu6w_w&3Ne*s@ ze^hpj*|LT2Kx57KQtqp!W@{WYZsnV`_pO<_l`lA>%wmy_H4kXwCIYEDjblpPE~}^P zN#nYEnaoEt`b|WGRph_fI`*S*T2SAHTcIX@E~6La`Cqt;Wv_SZ>wgXp_Sm9TeHy+j zKMn9H8>*z4`WYLeq*)`uX!HGN?2q<0T|TE-GtAh}!*1cz6gb<=6-f_0M1Sb>u$awU z8>zhJzy0&DtJjO?7IqL_X$DEaMr+5EF-9zfVW^d*-!GVUhWBVRWVWVGF-uJi915K=(S$@kMGQLSgr zI4de?{k$w%8D?>0*(k}wKEV}cdAq2tr8AL~hHp6dQ`9D}KT+Av7 z5i{Ghz47Z|=7Y$+t$Y}UxDgk_CCWa9dV5*@8Ie@D*>RvilVLfMu!7_Qq#bkh7M!vR$z4OuX%(?6`d7 zQirg6Alx!UBi;-mm^IFfIsN0UQZ0O{)ycx=S^gt@iE?l;e4S-{#?PCb2FUJE%9Q(| za!rjZJ_fdpYmo;S{C{YIc)HwF7bWj?IB#m!x4@cOZZgP`yyyf+^EuJ7=ySP?D$I{z9j>xE<6-fHSrrHnwsmA2+lb?xGyL2sbE)&%wi#qb0BmERBn9g7b~0p#`U_-20qg zqbOLU5n1F5uD3i8zExQkgMu~6Zlzh-DT;q?qTsdNcbeq)Af=w*1ha``?w@b(6xCI4 zVMBtO#E-$^s`B!?XnALuE}f%!?z3h^=cvxzV%j=K746&)*>&IyqV2u}&{%}nSL*S|nwXPA{;wEhZ76Lnq05B=GRlmR&nC8&K%{4tB%83Sxb5TDEJa9r(Ai$QRMRN+#$cPUubrm&l*T} zxy>b_@J}#PLs*_Ib6Bs0eX`4Ku9z3XtmVQiA&!e*#q#gq8s+d|m^mu)kZC7(xnk}I zH!3HZ;3=$uaRQ5@%c3Y8vGlm7D$52(ep5e|kArPLWbJovwmR3rcUv8%ocjkWe;3AX zwUp^{A(WdD!txcxrLnR6bjM^bh*B*F(iz*4U_8tOlXU-ixSO(Ev^>T}v%n2YaQnt*jh)*4hGmVN5fbr9$KFs$z9L5GA_ZvBFo>vT&6@WUp50) zN?{K(2lrcM#SHKtk%yQvctKgFNANo#=!sX|OVqOMYb46QVYc8oYvexoXqv6(C2`rb$TZ>Ce!dgqVr3q`TWCd)k z6;6e%wMHay6#2hSq+9@vbDL)lyr6Fc}X58Mz83UsQScDr`L`S`V}0iGIM$k-JPW(`C8K zBJg(R>cC_!;p5# zk1W+nduPITC@1^Czp^|4enweNJ_>%T?EeO4*3^<$?xxE7F)@D(7c0A1JB6L%Y3Myq z#LiXc1GvA<&=nr195F2N14OkH8es7h%d>F!32YtFe*`{9WsaWu(ucbUBfp=3WxL#{HniMbY(ctJ$hTQ%p_(@F;uxKHlSpGG< z(Pryqwp|(x@%(p8?PauXkZF?OX0z}z`stX}mqmxu*6)e+!z+uv&?2Hq@L#nEnf3DI zniMVHr{u7=mQV1!nQ%E>+{?UwdGwh4W=HWDTdAl3ZmrhZBi6jJ- zyT7gkBU?A$5{(JiX4c-p_H>|`Bf%WgCc&oG+{)-=*BiFo%wNT>b=WSmaaD8&o6%W! zl03|;mtd?(-o*y@bhGd-VyBx;67Z|ztJ#NMVJ56*oG;~-W45>Z(c?qS3XxoH+K}+0 zr`si{HMzS9rkX(#%;3#pf;Y|LyZ6}Lh6DE9XWs_%ySt+v?()_j?~ZO8!1;j3=-u+) zZg2nX-sS&?|MIPMzxSfzsCCxX=o7c~vX7%$_kVonXX4IaRO?^1MJ5sNgWLV58=!M$ zoqx`W=bm%Q$=n0Ia7T2It8f2s4>Z&I;TO@MqUwVg7S<_wbuY`%%G*D};SAI8&!}@@ z@)cwQROYQQ&Hs!lTD(t@jaQlcG@88bBYD#Jsl4tZ?7sk?qMU7n&$P_CDL)4#I$jc9 zs2sJ2uT>6N2b^CjXBuGEW6_t(CpScoi6aHFfUp`!LV~qZ-v1F!vN$`ehr&*R4;>KB ziVpK4)_DN_P+5+uoX?a~H<_lNxK2>4+uN#kga<1-w9!4ts#1--5G2K=u%WyVB%HYy zo~azN?8*JKScfXztE~J7n59?b^55gRcPg_}a$KgM`SVZQ2|kL*E=|ZDjehDEl9W!U2mMS`vgq>Se}DVR4&*bX0Tc$A-#~u z1)3ng$tJG_#f37Dy?c~X^h{n05_zU4%vDm@Uj@Ia99L#LlNm#r?M#Z$&v&LjjI||i zIF4H)@}f{&nG`nF7PJPQqnzmgv;2upaNJD|iMke=)pnp4GVnwjBuZI(bhh)<-AAGvabyam-j!L)y61r(x^+iMPxq zYG`>0(UqE9NRk}MimDtz$dPPZTu*qda+X%ek*vrQH}bJwFFzWbc*n|_Qu3aV=*U|c z@}7{eyy__L2?>iECDAh{`-#2XgUk}2-r^pvMBe-nkv|V+brN=&J*f+o({IDp{E}T> z1rnX)C-5re%mVm9tIz5vuL6mV^Bw%6a_|HEJF9~~$*Vx|s+M?)$fug%Q(2mPl35-? zkasBJ2GPhg;~|_4;ql7eCfK@8@Ct05IbbHpYeAwf50a-bqOi|0F0Ta%C$Hjmk-Qfq zk&qUpwVo*3#+3y4&q#Ue<@f*pPmIApf2xs4gXIlA(@Y%}IkMM=c35+G* zaYSE!e^-7wQ&>)w`J&UJ1zkntS(^b*mluCTDa9fsFa8J@Ci!f&I`pE@_EsK3Dr6SK zg`Ua&yxi*df(I+hov|X@nL?3Mhw7W9$wb8wi5{nZ(B-9%9gUhY>{Lf zSAI%A|IUZJ>m%(cg4bYfcdLLOuuw);8a z(lIu9smWv#L#tPi%z)(oD-QYXOR2+aX>HCVrhC=>_-^s_?nj#|I%s+_Y2Ghn>xPLc zXnYgVaR%=am$lgJ<3gV!mi z{(_w0kXFU~tg`$Pb1W=3#VgTP#oE!O5s)#w&mHpP?o5x z=ki?hgNi)3gQqNaLpv~yV++k&))ZE@)|Drg7q{HI+nOG2&5x3Y+vLYW9!&lD4n{j> zIsK78IbzK}!S64OpVU|RlXz}kXA>inXPPQEhU8Da35e%&ktT8}kWXOX^H1IfYg(sv zOY9qZhix!RdL<@$hrMaG#NiIp&^saj+sQ%+=9o5xM0g0accFKwY zi8@XL+Xf`MMuRYF;k{;uh%Pj_feCr?eUJpBO*28rJn;jw;7J~qAGgV@9hm4^F>xo; N;5F%~{fqnh{{SEtqP744 diff --git a/wii/libogc/libs/wii/libdb.a b/wii/libogc/libs/wii/libdb.a index e9f68f660b6cd45fd4fe72ca914535ef23df60c7..93e3eb5d7af504d336ffa2fc7630337866f13591 100644 GIT binary patch delta 56071 zcmc${cbHX0_U^y)$)~%an+6044T2Jyq=1NkqJknISw(4*f&wC0L>mMZ1OaWNP#ML{ z7*W*2m}nFgN6d_2L`6l#j2RX6zHhB{n7;St%$@su|M>AdhyB^BR;5*|YFF)Dd-wX! z8m<4j(aMHF=gvoTysF8d$_b*v zqW}8W>;FYrbYm9`oH=posEJdjoi}sFc&Dn@jM9zIdV}KDrK)baur%z@rE`}~=9KO3 zq24+3H;zlKYaI_#j^{XDTl39@L0R#%@iV5KH+tIG3FWgVPAs1^am;yVk2UWO@;+(s zXCdVir;MF6bKLlit-5YWnV}!}wOahC8qygzrhI1Kf#p)ZwqwnfR{n~rxyKo^tF@op zc;fM2y5@&w?!o55d;G$UWBZuMi~m@)zyGLupE-^*+;K`=$B9>i#|bC?sG2dLym3zXTbA> zQ+>fpl%J}abjk_!W;>3b6-js&xW0xCs@i_asP^AL@`y-+kHIK6%bbpbe^kvmjuU7K zi2+q32bH-~tL6_X%{&VEeAS7nZXHza{#3PNP+8_?$UhZ%^3|$f@F>W~4esXNP_=Gw zxqETd%Y#eZtE%=4E^Ge}$B7;i&2Sy~NsToWtSO`}25U)@w^toCq}+YGYSNH0cVpE` zaG$E`A)}iA0V|)GFA4Y@;rJ%-M~@rYpK=Ju#seCoOG*Hz!2dP)66JI5*LB1-XP;NF^Q>#CKf9iL5fg=me6uBh65+9>yh zs@|ucfHan!KD!>;uINIId@cAg)$CN&VB`szQII?*l2n_jsUu6>+8Y;-?Chc@)n`2K zj;dOA=DF^os(oh;c7LquH;TMz)b;N3RYNMu!HX(3wqNQvrRqe<)4*^@TjxdK*Oa$_ zzsk$2CXAk)Y3w+4^NrTH>Wk6mW?qHl8qrC-x^di?*@Z*9IZg=6@Sisfo{;BRjuXrC z4z#ke-x^lT^F)|E&ljN8^8ES6cGHjb-BndHX3ci*uKHqDfA83I)lsu?XjZjs_H4JJ zDws3CeXwfCoEzQhs_*B_cE?psx?q62qv|pI-?J(`_b@LgsOmDe48bGkwg_KAk14BK zjPvhJ&*$AbwcIKcSo34qyEmxXG4~K}LgT9aP~U~Hb!L9K*VH?DepSBL|;@scsxUI5gbA{KyoHsfw%#}5FHBlV3t|5Wa7WC6Rv`&58f|m#vCc*F#%9ChP??GYK*sE4v1x5j>^ex`*>LpjjG1slO?+006oaok`W#fF6;q@dr%&tse_k+vA3h8pjHz+5@b8!!$3^qU)HrDvnytZX+!w*MX{!9G#5v*op9AjvPGk|3Co7L~^nSteqr-7D}{N9atg( zi&=ftB%zilp!^Dv$L<8LR-HZIn^n$??-foVJn;yb5trbnW=VVrhO00GcAUgV!fBW@ zp)DPU3nV>}$A1O4QCnVQ>ZZ7O! z3sxg1r-QW~iBrLSMJI{+rH1B*Jy7+iF6YqIk3AN9qCx8n?o_QCnt`s2gbW4$^kZ8JxaB>TH zgfOr99Hp$mVXZVe3OREj7(a5@4ZMIn4z2;SrEx`KfV&r*ui3X?3~`iuAA+@(?1AZf zL>{XEvRGu|!2DxR;F{ov_h{!=lW>;XeG+I1^L64kWYjzECOY32X z$y_R;#3r!%Os1nL9PHMqj6%r%BH`hE;9G=!I7a5L%Im=hW3oxqGV_oyXYgDWQXVe? zZ&5j{kU>!>kKjNVb-oa_%6umB1ROQ%Ij38t491LX6A6gHR9QF!Qs&B0ZopMh&~%D@bg?ZJ0xI{Uym;TTL&fDEYwbwaLpS%`~$I@gk zHPuX{1i?=_&Pn;;XEpOBW-o&~As8KXa6b5Jjs2ZzJi;w=UopK$xJP;k$IKrA?S76^ z4A2iJoO)q&44*n0+ybDP%m)u*A@KjfO7 z=5}`L72xKC79xR~mcmhNOZ7D~PIsFQOD1q*qLs+p!@*rN6{J>oqUy%MvxIp+rY@YB zX{0uRpAe2HM{7|Y4KrVyjv`!O3P+-xuR2b>c@jc@ss~@7R?IQ;M!GASZ*!db$A~D2 zE>*uTZYdy`|LSWGK#kj-;g+>$@It9^h;gaD`g^z=j3I=U2%iS8k>tFSbBoS!W3KzL zS$3v-hkKCeGz!+e+>9ILp5VS|?jD6g_BSt6xNCKVTiO>Lry-2RgyOG(w`x(*GaKTZ z#b%Ff_<@!e-Jv0x)9Rxs8)|d9|IAfXAme&(I!>cg9jAfTr_lt7=l3`BN4sskc*1NL z4X?NeYPU!-$zI^~qL!^=b|Ki^ZuX5vNiR1I#-QAT%(yY`ukLbFF&1ZEnDt{3c8l3Q z)*bBLY8sDo%QAHwrzx`5wiq}LX>2qT#zDQ6*+7Lsj#D;G6bkm4T~wH8_KkDTbx$|r z#=9#fqlKHH7Zq#4o4q2+0ot({Qm&nsWB9N}nc+CiePIWExOpw%1V4b`Jg@VT$T@sBe^=8P zVYZ*;j&fI+)@P%Qmzt4hyWL>NHD|+Qd(C5KyRUoRp=Q+tNV}SsC!o)vBefhYO;HQZ z+VU((DSJyUJ<%=m-3_MQBzJK8ZjRIXD^V+13I0yh*qd7artqqR9+0hPryEdnZ9RAaKvfHg5u3BwiZ3fqc zo3&Z3$$gcZKiQq`x*wSDr=V)xOuO^kve6GaPWd;Y!Lha+`aXHR23YK?r&-|-Xco-#$@;ZO}S0D3mozC}9Z|A@Iu!n()x32lm zKOG(eMjyk;6b#Dw05tSLd4_}JN3H;uhK4E+P@{wMdA?vJ#^bVcX6CUl;dYPPTM@gJIj?5=w0pdjA6Qcp5fsgl#>{?JLMT| zet4c?(IYIwy_0CKF8Kh|xT|sseeg)-%#r`PCS}je&AHDlNV!|h;z!&8?#sD1A8~uQ z?hsS=F`TY96L@&gY$j$;*aBWz8S&82D6@rU1s0o2;3Z)K2PAZrCGy6KeLC2 zt)|On9Cn(;JnS)V^6;rq5G2j4*3>m}>U$u*Y=SibGGcn1@Z~O&;FNwS3y0;(IT|&6;gU z@P%Tt#~vG-F3%ynwORa}JKLSH`tLXyX$JDp%&hyn+sd75w*MUiY%{a>?{1552VC}a z)8KhX%J~GL1xz)8hh1hR4&ew)7?#NsgL}7|T@;PPXfobDGBAy|yF~|{mIfUTKfD7U z8MJce=jLs9Pir0<&nE`%5C5Yl2K&Ethxlf}kM7a2$z!I^7(HXW8Fjl~l^ghzyDhL! z5)S<@o+L~iGxMyrV{?u7y9fDva#|~Q(jRWiSf(|)7zQ- zu`=q;8`lK57tUXbHUeAj!};zzYB9Pq1Xm6W_M&i0KX^f_6C10%p08UPb$9;@qOVq zEac@YgN(g{L>>$SqAsB|FoJR7O3VYv!jc|ZO{9A;h8^QM}KMc+rc^O!Z9Qy-qqlLq> z7Tnp_(s>vo0=2BO8myKL;4Xn$)|mwEp&6q?1v51>IDD{B`5o{|VXrp$FTy_c?^O9q z;2gOUCT)+CtrFmj2EQU4k>6EDEd#AV05b>sR6ZQO8wv*rFj|||@_qp~5{|zPZY><5 zG9e0LE!_*uCp$L6K%5L#C0x3~3Ss&|h-5NVGdxtrdem zMEUk^3|4FTyP>DniZ=w;Li^j=zlRewSCj&)x#CZO)m%|C@bOZ(_%^Uw%RK_D*5WOT z*krBDn_vtFw#FxdFBkS8i>(rN530n;O&WkiV)qL3xoYfDZbj$ef z!d_3TP~mL0KvThJ1~Q+PB;b%%UI%=p>h}eY6?V(P=c!JA^#8<#auPg&05wqrk4;pG zJe~pHsQfngF6CWd#9?N9RGoN9IH&+ak8*zsSgz9XzQT$2b>8|- zcF@S9!Eh=j#7jvMJ%sE%0v@T{4Lm_OK!NyNfjaTW!1GlHPMlmO40m&q+EW5Jdh%8X z7{Nii@JRzXtN?2}+01l2@R(V?nV8w9qVLAQ`KCePQc00hKZRysnk-yOhhFBDYO8rw zPQ;0Nb#M-NkOV|0fVKT%Yr*G=-2Vm)2eSo*52UUacBu1!aBLcQlj<}8Ycs``gLR*n?{+iH2E>Y+gk-a!A+$`^brvAxZvXKf@7TNGv`k#H2a zwidJvxS`0SIJjv(Q?shJx7_o8HO-2>*_GQdN7cd9CHGXd4&dH3_$1+=6!HNzc$hNE zUUXUw9xWWf-;2iA;7P(Rtj62fk@bhSa*a#88wx5t4?Rum>D5J-%`>`lzW&~?=vgZF z4~PHd87-8~^I|-L$@6t+mpnfWTju$57)6=86R@I2pT)nRSFU$+@A$y$TGuQ))EnUT zF*|u!WLh7F!|vR?!_c(uezU5TH_JORZqlv28@wZn&E2iN{@#&|&HmO-4jH|fy3b3NO6=QfRX;|j@3{*P8j zuMGC?^6g6K&-bJD80FP9Q=9u^a_VwRkbzFT|`8z0I-Y;i^8;CslAXxLI%W?HV{dgVx zv}KalgP#_;cP<$2WQP}S)#B=d5&Sd2dsK;$zY`9Yf{`$Fyu~nHLO41TT&(g8c$o5u zV5CL;WKZxIVa_@e>NXe_uq8?j5wo zgKYAd8v3u+(0{jv{%6AB3#Q!^uTEvW4dzYtRkuI*5Y>eRQb?2e#9;jtnvBe?fT^*< z4hox^qH;7{N?R+j2z;EBQ%|W9j$CX|iJK_XkudJ> z?wx`@u>hhYM8r*OTs%9=ExFx^axNOVmC5Shn0Zz>Kv)L$qul!lj2>q7Zw3D(?0<@RbaP>@ud?k`j^3B; zt~T<&$4Os}j5=qB3dhk4vZGZFXUt9(=Gc(EKscHXzEn7v0KQ5Yh0gv(`4#YAm8XK? zm@H`g42&DuEpn2$2?6LSNCn490GGxEsHsf|o?h^yMnG)}(dv}*4hPq6R_6+E z2Vr_k;nBizv~=N#!f5F()9`+U*UgNa=9P^`D;J`L7(Isi6y7JyTRer22uJUMpB8pT zfL|64_kwq-oZ0OW_EGmjG$PXszBaq2d8O_9VfJ1oA~ypr7iP(dU^=Su&O{M@WN(dW zIo%uVer@JW$13)EvuV0lUhjH5r_@G_P_|myh>7c0&+tlZ=<57Y5O0N_is0ne*&qwk)|0@Hp4_rU5 zb3QImd9H$U<@r?%F?ohV9#|K{2@kA`Yr{cR$0@e=O>!Sy;;r`G3N!CA??!iyX>d8# zuPeWDcbS)I8^;cQRN0IF=k@S;X4@lPt&%@|>}M(m zdyUNee&K-J$&Y#)!XmyxIeMD?O&fpy%<Q3fr`wRC+L z%RgoH%NX}*I&?`&61~8kgt-!Qa85aQt2^)&a&#W}WMS`KFglTqi=N`3hmc(uijP&S zJ_aTSzD15>G<7akZU|n88*U6><2WlNAdJ99*t^J7vy7`Dsuod{1;Ybuddw63p6ot} zA36lti-9qilDPnIn<>u*w^N-%!AA)P&w{mnF$`5M(q-H*2d;3OW9-QXIMGV+BIhp9 z$jt02;n*(lt-=wEz$az45I31yUqL;NhY0g3iUQch{Zyk3mNHWwF9zdBcK-l37WQ|5 zan+zatOR!v=Gzh;E*e&TI2cZC<6Z|IDa_}$-gL(~i~+G1ae@Raqv1VV^vPU0dw&zg z{<5jBVxs3^y!LRpvI$}!@U*}|8vKLE!e#@p}k!gP?zsFyBe>hdZ6E66f&#I92)%e2H)b3-~L9SwkP=H8Tz$Fh{+H_5RBc zX?a5!)YtMR5G9C}N*)TnMmV?w{Itq@f?p9% ztOskB$iWFTOAp~3i>--H2CIqU@a0fV6d|2ZO_cZ?d^-9XBP32X19xB!y9YA#7mD0- z!7DX?G+~I#4ds46@SVbJ9{R6M0!MBG{k%aEo27AKW$sm@e&ScK zS}{a{Vrs=W)6ZKA7K&MGp;o;9#?)NiDzKU>b}d-V#mNC5&@qD~nm4Z2a!`|aBa!>x zg4J4ygTZPoE{)=9tr&(iF29+Mb1S&ALQdij;so7{0d8OLT;ZTG_;O+YE-(s6ov=Ij zCY8SrMvW-@po#j5_`n@Gru=OT&AuHtuL}q0`8o&^h>&j{$Kw9eX7? z>6-a(V1R87JV!){wctyH*#VQwg##EZd7aAt2FBoTlY1Wgns5TGlZ0zg?(PI@OGjv} z9%fL?xb8}Bxz01b^r^vBcG3BH`mXqLjQ~efJAnh@2EzvYS z0yhzk&j7a(4$-O^RG#^J15Ny&UN^38v!$x~j2ZY(48qMILZ`4MnG4n$^7eoBER`dN z>@;Dxhm%EZtQA^B67VC!sFRb0yW0ymXYE;a)ZlMm zb<{XBMm3mFY_=(U8|8(i3+iebd%*__$G-rhF19R_!L3y1ad2m0AO2hbH=&L*9y~yp zR^!`NlzVT1;TmM#Wi3EhehX>A5}n+|;Wq`>VA{!q@UP%HiQv9(w!ZDP_51?!{oCFN z?jPo;omlX7F>`i`bp1{%-MiB}*Ij5vz9Z6Q?|9|iQT8I#rw)<~VV9yGBuTyn2~W0i zKDDeBiafRgTr3>_$n1Lu2_J5HzUz&0Pd4k`#SIY{yVlR5;Po+E8M4MSd(XRs#asU# zRwiGW#=E>aJngc}K7AXx3lDP3%`%?-W;X1?I`n%i#L6UlzLQ&`Jt-Jsc2VmJ6TI)0 zWu_oR-QJsGIziO@QHWqK+A%@a%TfS8Dp@7+U|Me8``)zTF&gi6^DUl91ru&gFLJ;!G0WenIZe}OtW{P`F=kvx4}&M4bsKtvEPu+M8~9m z_YU*IV$JP=u^IV07GrR=mbiR}Y-LgOaw*_6ht{wIH=E+Cp_Wa?+n#5Y!^<4O$*K?m7@~2BV{aTLW z$P#Ys1XK8Jbb&c(65L~N%x#m~(bTVU%?H0nwK4}17>N(@m@Or41G8e7S0}fonV<2h zdh|$`4@P)BO}2%N^l|FBZT-a_KYqg{AiJZFDUSnpvR(6RlWy;qRXz_misPgNc2qej%{b21lwp6p^E;=?(c z4$|hrksL$eT{K1!pC53d%atPoJT!s(hAN?y-1}nXPlM6P$?muK{i?hfad6F~oU0%1 zRwUc6K{OJMp^#oH)kmhhC1lh50DQ`^a>BI+*OCn2zG3eS;lxSciNbuN-J7X$3|SsV zQR*k&2d@*3%FMiuewjPntn28PR{nxwY4PylrQ>Vy64!zckr*Dl$sa7t&0Dm$twLKc zoY$5JX5d|SvWsam*MXK%Ev^H}Q2@R}n3G9=qk30RffFP^r6e-tLrZev9(aQmE{2Q) zEu42DIB&bIV6`2$vGHlU%?z^OSWV|G@CC{!Jhx<1$N3rF6<|2$3D=UrO~UR7FfRL) zCriMO3VSTXHs!0q{}4`8gV9*jPasn+I&7L}gZB%EebML%VfPMj9dacarX^0wB)~_f z4BH8F9|ac+Oeh9RgeMBeuLKWQISR~impT#B2&W12en2>1*#8c^T$o=Z2-gb7nt?0t zloMXR>`h-By%}I_Z(hG5G!HZI8-r0mavW{Xeb{6!(j&E^N1dBQo`AbYYQ+!*iqwkn z&%tV~$^@Js%C|Ra5UII5m@B5{ilHVkYc6Dl(({%OGv-Pqrq<%4BW_QnocpHmF$U2= zcucLu;Vh=siaicKAMMWw&SsokED_@Gf|m-r?ZIn={ola1DZ@!)4+wMF9YcJk<1>Tp zD#s8R&pRxfI1bBDC)p6J1xk!U>EdH0fODcaYDy)pyW-CYb0p!Hb|{Y>Zz?*Y*KUFc z?mWH3VCb=MZXx(iawSU2%pR5io7t19#LQk4=7yK#hr(7r@8>KWTGb{B{S?e< zEriTc>N4&rV2oju$8HCA)^r{LR~{=T-a?!VRHbt8*}@TOo>Euhd?BU&%zgYRBRbBT z;9E4E$HDh0-vfSDbxJX+vdkUAu@dlR)wvG*yfEL#$h;x!O#y$c z`VGy7Zhoozg4u@LD$m6lLH(K=JhJN7F&H;Y{0_d?9{W`L`?K*f;dUOTn%)Ea{@#go&8h+Z06a(B zJ-}~;)pp@P%q0h!P6PcGoRlQnn+i%6%g)#92Kq(rhSk-0^fzToSeQL&8Eh~Izk~3@ zC!@-}`cXej3*FALZY*zRnw{dez`K+EPVr?stZ9FhUpF|SLw-AKw^h07Q~VuuaV_@X zPIdn;%flKf*I#|JBc$m#6vPo5%0;`MF z(Qj_E+>J9(XH&c}_FsLGaN^j>Q`?#|_xKHRpU(6nyXLEv`(u{h+t2(1^)C{)h*z3{ zb78W-m>F~Zre3heteNY#9Tx6_%0yA|TY)iF(TgGRm)AHt^P3{ZutHPlH!xtzI*h=3hqhIjF7MmO{fc!?F)p-xxLO6N~ z+)?>?a8G3v-Gx(9KMtRDD=={IBo@cXITC=0nEgng%>bRBn$;#wq-{l@HpQxUy$Jk`D|tt;KPIySAo$^l!sU1 z*IRWke1@k8dz7E4I=D83D3sMd&MCDYTF0=VHHUB_Gc5n|loBJ7|%% zMI43V5KlQPfkE4 zYLNhi;aATn=W`W)bC2x9wPI=!uF+y@kpvRu$N#9qyF@XyNMa#aE#hMMkEuoC?ZN2c z)DMnH;{;8>lh}MyJl{XQGW-P@*B2R=t^9}{!?{5?t_emPz-TTjpAA;4IzNG57J2j* zSbZUe=HW;5sL%bu{D_{-^8!pNLX}Sk7dqyx`F_Lt;hQ)?Nv#t6o@){t`9f2;0NvuR z5NWrd`)~!q;0Wn*U$TwX8Vm!Hxpd)b#PaoK>H_q?SIuIiREeIPY$_qnC*U^1{#W2G z!raV|)RByjg7`@krsTn-$+5y=Pw;udiSb|^sCnZcnYRwYlU1S zO=uGs=ak#bwhP1M`d{s|C1c9}nWXdO&2@_h=G zEILG@MlfZOmOMn4Dmqq^Tn;{=2KQG+|1KJoXS4WnOqEg6q6s1jt~Q%4_XlSVf@qa$ z9h9rP*w6Wy=5SF|l>fZxxt&Y>n1|Wq?kh2UTx>cm$6=FMv>bEGTh0FEm|Gqhn0_lD zZE4o7z&z`(X4?uhKXHd(BRWu;neds>aN+zSl+fm9^TNn{$;vsTPK34+($rKblu2Z}ai( z2!6V{`GKbmH9q^#um9^;`zMc|JO&?|C|~bC>?g;KpEYsp_}-&uj5Z~E{EnvdZvTCA z-z>kD>GP?7nE9!h+aQOp_`m69jz`VV&$+6?X2y#9V3ta=h=-+S{e6CU-wsf~U_b?4 zOZXKDa)^PBUy&et=&k&Ugq4p1U#are;OmrcF^xB1eEcUw=$KX&?aJ9B+5a8f&l*(+t3et9%x?r?7VncqnEMRtc4MQBKP%!EjBo zHyDgaR*u1y?@^J1Pr%oz4mv156Jd2Ie@*3c!S4xkmz?{#>YN1rN#)(J)Z~j)j2wd! zU!)@Y=$alp-!e+cZJjoQFTfpzxw!Uv2uJwT%Kd)%P}rRBOHtJ&uNC$&=5y1RO#=1c z?IUt?OjKLU_egLh%z_fb+Bf>+b56+syK)w-WA5P%kBFvkyd{xS3 zbg)_ZfM3Up>Y4QqV48?V2=YZ=0@kAYuzfI7qVVo^uu!8Tocnofd9DEeMcAtX!#tFG zuq9u3B2&hz5E)xY>`pB!e-ZpHHZR%}cp7gvk^Psz`!q5la#y{Tmw;;t^NZYk;feBS zFBlGNbuiZPg(tFiz1gtQFKrIT3M(`i_710L@GkH?;i$lTu@RF(KE31`r~58SC}Xdt_ExUqj$hse>MzXVX|>Q01p;+V568CgxktulSS@* z3Mb*KOpFlTXzD)XpV0m|%-IS=M8D#zNj7*tSkt3(@YN)nPb0JPA-~QTwi91PvbuMJ zQ7*Dy4c?>jHQ?`5{xKLM3w7KZG4LmZgTuhZs=paLO!dDq@rV7U!-7J{w8;Jq;LB9E z3mA5>WkLty%SM)APrhtq`4{lx!n|e5ol=zhQ_cK`G1Yt&BB)Tr0grzLh3r9QY2Z6g?$S<0i=%`PT^mQ0Qo5g)iF)zU$IFouBx$t@SQ$stL~{f(w)4$}_i_H2#d z*A4_v&G~gIgEGvye3ikwxCM&Qg9pJnP=(vTI_&x>a1YggA3Q?XIR!jc*dBWVI z#?KzxB6;9j(NIXA|5A@TCfwxruh$Wiu_ILn4Uq1m+|5kddtIRrTA$#X% znKLw)Z}w7a7e3EbW6n@F=z2uQBh2V6{$cLg+_EkHAq}z35$3>s!~gu3ewzO2WZ=Nw z1@TWjtx>%YR~{ZxoriO4-4j6s82U)&OKPho!%7y|(1&NKK8 zQXRA>w+&l4Iw)V|Ci7VXXCRhw?+pJh0gbHA|v4)`(Qa6A~DggV^I%I-?`j{<+JjLLF;Lb-PqhFVTgtP;j=PEg1p zB5;CYxi|Q5;h+lKQ`mzpCn#121>*d~@>k$00?CV67zYa&Uf9-#!IKi*SNM zr3l@J6BM#H1pJ<`iy@g46r0de@J}l520dRmHU^xp%spUqd+Ph>+MGPt^m~BOP075d zdzBE_0JO2!PuM*X48Ne9H}Lu9H<|zV<~P}HVz^j!7C^pM*vDwenT*vzjX9Gc^Ob1M zWXK+WF9_GSnQ3i;N|aV>gH2%--(U@k0o#W^F&=ko@HKFo#tQIsVdpPkM727j!7z~3 zLCf)CMdqU?PJ+lG>d8rvi1_^G)9j5nNJF*9y|=j_TB?sss7aD*Pn*%jqJ%FW4@E!=P5 z%Z1&Sz^jCv55YI7{0T6c!KOJ14jF^#?Fr1!H^<3*^MungvJdNUdPb&c^IO;XMgym3 zRz4f7P3FL%`Q|v~;UMrUs*?oo7WSV4e{C5b9zgr?{+-S2D@=~mbnXq{LXq383EE4d zhLFQ~tUlr<#tCyPOhVh(fe$6Lm+*^li3O@}z*h=~bHLX&mXip6kho1aHWYln@@Zzn z4;VI(Zeo{+oGoB&b_YJlKYzipIB#G|l@Rty!6m{Rn3GL}eHe##1gRf80<5jhFL)%6 z6FD!LNenNxerS{=>S~7#^c5$m6%0CqFBT=6S-z7nv(*}zncb|3!X1*i8v1AfW?&14 zFq;|m-&TF*^@(uM)9L0U|4=2kMk=KNpMg6w>8f z(5Ca7W3KthuT>8Yl}6v>)?z*nOBbpB3#R%ff3y3DnZM63>kF-nCt5B#6koh%DZKZ< zh{4!iFK``^+b8UeRXzjq=9=ns^Tj^D9B&~u_!-OT$n^Xf)9!bnumoAN2>6#-lTX}C zrPg$_3Ws{|`piyAlJ8AtKG3XgF)#m&IqE9Y=NGOjU%-7l6<$*C;dYgTmot@H4_5!n3c|(D|;0&hNrO2iP|2pRciphU864{^LbEzcty<7;H^0%RL(g-+O$IG#>E7wdq9A-)miLMka7N z(A>?#8nd5=ZKhumhka&kGI$oZ1IML;+4zpq&J=_@P3trc_%c#DXypzz>(fC~uXnN8 zo(@`s*P-uCGW#fMiDt2Xzz%~~&0ByiTbte)s7`=*y=k}9YZ@JgM#1)F`)BM9bW3xLG=+ot*Y*60}z=vqPFXOop+2HEQv7VgEdwu^ebNPSsN@23o1!a7H%_$dA9BN$jGB~OY?kyaf4(_XbJb0LJ zDhobcn2T@+7H8b#iQw~8|06K`oN_+3aux`unt(6E;K%^?Fq~Yakui`s=*E=uoh9xo zCUeK0vq9J|20tX6V(V86yFY`US6&8wT{wY0$bH33hkGEMA5`vh&X1bf%pO5O8Vh?U zfQu1|@&EyGJ-cW%%kUb%M6w zr-fNa4{<23w3%sbxUJ6D+C;s;S{vSY;5KAN@VnqQSlF!#9wp3I(6|kmI$Xy23x#>} zfZLF*9L>sY$mAFY3ao|WCn2~End!uT z1FNYM4}#Uyv8TYtiVoia<2GcQZ~aP~TrMYWComFbK!{Aa4VlbM?!mpn+`Lc{n*=Bku&mn;AKIDR`+cx4p#H2nRodZ&N-V{D5$D4tTT59|vz2<`yAtLuQ&> zddC|Jrz>mWL`#&a4<0K4iT>dE!l}=|&uL@~yWED%gc3>c`@(#7$=BCx24{hP66OV) z`;sY-p|aeUY~%g_M%T3CKL?wHn$h0}o~a4l4u)kIfv;S0B|r|*-dqWgc{4I`t;(MT zt5xE6g5fXJ;r0mL)wMhYtd+r7fbUYl+zjAtV*aH(a)kbwKtagCC^UmF>>dNosvMrq zd%iZ&_rT4BBh)xquJZ4}-Gq|{tRrj^g-nj5941MkE%{|zCgjZq!!c~4cY(DDVlWlI zY-{CcYkt|59KHsIUyvgfVuP?d2mG|K&FmFr=Jk%S&8zZLIq}g0I9M&eFlssA&1aS z{i@@CcrzxsF$oAzjSr1GuX5rdqx3_BlKX+0LuBFKgG{tuZW$t6SE_VlG zy-W@ZQ#BVp-@5+Z0DrOFym@cXw9@slmTe=k*pX^?6=sEMtADewwY75L1K??*lR)d% zR+o-8gYOV|gjT4%QJBv#Y9oxs2;Rm=g$`5s)!+(s%jj90EUBTiTG(9xxh7;ISBsoq z&MAIHm<26H|6m6EGe5EjNDb!J`L`}eNiQF9m{zKTChdYJMRsT{j9G!*cefH98R9=J+ z-Tb&AxW6yV&A)+0g$S8)vk^H!q=&**Ms%_2r^!0!vE3&B4KhkxMCHo~nE7jZ5wA~v%f;8w!?<7qAuqdbIFc=LuF`@pQ4 z9hUV)g!f@n8(rj2lmawV7yHPn#)o6L^N`q>ly9 zcbtP6A=?@!xcFGU4t$qz;so>H9Jovmh<1vI>G@jTOd71^jdcNQd9#Ou+l#(G9DJrQ z@Avy?ZDtd@9(;+)2Y{CgdoZ?-B2dTu2l#e%nFKQRACQ17+`)fBm`}X9*V>l-J@7Be zqtPTW2T-2t1%NO5Vt@KE9O#o#e2?*u+i7|pn8E}F3yM0bcNIUD?taBK<&ib2AhFGObw z^V>RnH-p*GxuZG4=>%Avo)fxAjo@d&Y6N}-CsHHC&{?8qv>DUi<3y{UJsYgm&s4xC zwEF&uV68syCGtiD3lSl1tgUbsy^F6#Q0`Jk?GeJq_&ksD%w(|I!}$P%UQ7+b7hhxO zJT`J8@DkzlOW@Ti|I)YyymmAq4o52lc!@RIgB|BaM<)tkC6jvyQdt--ajVGraGQUd+~%_%{Fut`1#c7PSF95|F!I}s7ve-q z9A~0mh?4&z_z&R}tcDMLS$!Hbd5~}beSW5a>2TcSJ~wi@omqDg2E&UXQcvV-qkIx- zgNK19Y7!~%Ea5~I_!8Cm8El042rqeyGK+Gbu!m#vQQ<^q@Uz1F#2mjDX0J{5mF)K< zfPd+T9}KhgMr-qfVYcirPAV|Y?w+Z{GN$LS%T7-8ysFPR@{y>;l<&<{4^zWu|B@7Ou zrJHE9E#TI|TneST2=nrn#*fJbO~L3qmTQ40sEz|h-6`k$Lo6EELqnx=!Vdf<{gg1@ z7*D^AmshBiIT9zIs1h#v93pH6zacCTj-xd*N#S&J^F?J?UfB<#mLl>V1h*AVK$hvG zs&IHFZ_CvRtQ{j=3O+&P;dJm|Vb(R1Z-VQ=3pAYp;B}f#J@DOH_5_9--aKIjSr~^m zPi$sezzWIEfyRtq^whnRW}p z(&lLT>`D!$>RREjHdsfj_`PP*g0QUpHxT_I!KrhwG{88*9Fm{PZ4R5;MligNoXD7J zM63J=qW+rd4)AH3L?!qv;Y=IwG~pzyRB*8{FT({_2)lj3tA#yyK*7zz0X(GuJ&9Rz zoGf@mb>JNZ&*f@PUR3f3*!B^*a-i@p%%J6yE_P0lep z7l!3nT%{MGeNgvWpG$~`j$P{~jj;&#iF{$_PH=&6yaarZaNvRSJv;?QL2YHngSCfe z9s-ZlboPQT5N2kqzR6!4_jkpZXqP=Tx5so#->a&G#9BotF z5uX-@4*wNvS<*YfD9gEdxi&)T8pww_&N+Fx`l6SFTz!$oE{6ZvVLZ)5)d6{Dv3Rv) z%nz6ps{`7M)d87qF`UlU=}qvb!l`ZGAFxcyXAH-tj(ZDMRuPs`DldT%Dfh==#Z!Xu zCI6R+OBzT(1~o5f={SexBcSIn0{;p@Nmp#5&CAiMlxHw3l$_`s_{+y7sD#Y`1uM}S zhr7VjMedb=ZG{Ulw_||Ogf2AWF2g#zmDzb&Smyq|`f_+srD=D0Sn7^7eJ&3dx(}P} zmov!hW!PBLcyaiKdyLt)7{XPi!IJO}_e`^ONjNHlE>;f%APeFan|4=(qud9~$}7S< z>YayM2*+YrL`ZZQxQ}ST(+4gM>(u8<)b&S8IA2e#uT@ANZRRfxOY5PN@WCdd+b_Jr zhnY$2%iM;gVa&y=N}HC2<@I31gZ?2w{JR+kX(x#uS$!qSdUmeamEo~2{3nV zEVFMp>hpt!V-OO9~6W!W?nYYaDs<5p2EQrn&wTO&? zg3-CSESs2T(|Q#K)Ob6{(3lL5w=*MGVXWE%(KRAUlh+Ez&EKUFxm_>UAEx{DF)u` zJ~NJzZgPM0hHbb%T46RI6feTQ$-{)z&*A^=rX>$+&A{hs-X0A)bnehe{!YTv`*T~L z3;UmfuWn<|_V4|#?vEby@9v+Thfkoqa*qGbf7tcb_)p{N%Pr+h;NRYX&8=<_&5!@t z{ne7@QQP#WnNwy?A3tu?w9!+>Q(3K213L z4=^Scl=B4#-ghO}!a(9;hCt>%biQC=;|>C&Y*vnNccXAJ3EnImoeIV%Z;tO5HK?rp z9hyd4uoi|Yuc5}kEPy-lm=d=Hd4~%Zz5wneoca`evT(W>jFhQg`(`kPT(S%6dl<8= z{5r5UQD!}ODH@Ccg_taOYecE&IWSC0Irp$}!9*@V)x4Kf=OXai!U0UqC;Zf5X1-RY z2t%Z=mEqHIKVO*}z%V!UW214Q_9x0o3ikJBYC``6UnyLKLipDTN4@`7ZD$@ORdMg} zUhnPh>Ah!RWRYc17|}sNC2CZN8%hurl_)ruUdHLrN@fa2%B-3D@)Idm`oY*Bkj#-k7Ch;L%>6FSwL9rZ$YEyfMRh@P$6F zQ84i%zYeLi9&}M=dOju9ZCsoPuQ6^&!Ot027Qufo)&hr~dx|_t6|eijWa9Z z%e?-%FxOFoJ+g2*r1~nB@bgY;d}dUwECd9+(a9G}e#Y5QB_YgqkvV z+5&R7!>=0a83cKWbaEI&Cy$CNufw|=XR&0)7brE#t(p*Y6!xM)@m{Hx&v6?k1TC#I z5Vd&`?V0T`F8tK>KZM}1h$i^pz2TER-{mF{+|^G0F%zYJ1~(g*@WR{xtI{Frh1sLKwc{kBK)g-McRr)^zIqI|d;PH-2!Rx_g#6&Q}Rqf4B= z7#?F>TL=4+2Gme9qtelwR(`J6e-=K&xZz{?N5;WS_!8q9wa@$JNM>LP9kpNjK`tIQ zr80@+-!P6d1m*ourYZNlZ;yuc6xO##Fc>CG1=0>sow*{`34n!djDvCTPR2#dT=2b` zFLBP8@*Y?^fPf=>e3NRKEYZ`*BGl}g}aRP zXFRiY-3rac)D?!E>rXwYmZ}bg~@g5 zOz{uK;W_Z9#(LJP=)EEQD^1vy@Bu{D0hG$DaT+|_SRSVVPx2yNLRJ#%vAfbl;ezw`n3z|>Sq>80-V!}&Vi8qpgj%8i7* zI|R6K$-6`0Dy;6^q1pOlk^oGwo1p6waz7IcaX;f)|@-xQ464=)x_8R|gnT zu@*ur7Z_KuTjdI4)xC0^u?CsS9mXN{t=#W*aMsF`#<^GEmyES$Tlv6PGcXk#+Wqm! zpfc@T47#fYROv?5F+Oq+{B2`>!SORB@&Ro_uTl`zRXgXSHQME`_c+V`dH;qF?Dsv|+7V{v8^B9pTSdc$&)9erH@JPGi!iaVU&k6-@)Y zCauNcV=xXV&Rz>s7jYWrZamsE25y{gT)hUKYg}TuYwYp{DUapi#}-g|8}u|OpWT9HDe92GHb?{#LBFBXXEf<*t?Gk*NpFet$*wm`lKtl z@@n4xdv;O#DHkN5fZA^G&%M$(m;y!-Hn??1<1$%9@0lomDEyJJ-tX7^m9fU$mYmla z4L2LtUWEr5Ywu&r4xY!uWUFj4;uXf}G4RdCr90qz7%xto9F%t|kyA@#LV6}Ww*?E< z=e=4!wHUft>qV0*)$D=phRH!kD~0Msf9s1#f4%mx;LKFFaWZwAgorM6Xg%0FLGU2* zi%nGz2KBntIFd7-45;h(m|V}O_VNv{Ef>9f!&eW5eW~^HvNbgQd_S0R!<~CfP|;@C z*0xx*H&bP7^^KkUo4f58%7{H$_qBLwoVRs?PvZ>uMB~yq@Ttb-4KQVp6?8y)>v_gC z>e1@!RHE%#uQqw{cGx?1cm+&d>pLb}?`ODGLg`!FxGBN@J2J$!`f)INg<9Uy(09mI zy<@TMQB5p`sg9xrEpE+}U{L%B_x_aN?ZfwD&hr@hFCqHtJ;SszSfV%Gu|DD2o0>&! z_yF=B`86XvsrS!Ku5Q_zl1ZoZch|o&Xki&=R42`SJt3c4j0AP+{gv06OO~>^C@*`W9;E3pDV)%^44T+>+5rqywL>X9m->TEq(b!@oCqb&P8~ zF*sZI%7f0{tUBnz&B+a-WGZjNLUiulLTAkuI{3A8s-5Wk*;qF-gFf4=-cAT%B^lW zSFQN@Hoj3~r@}9qa$(o*wKIZk6Ivq~I?E?4#_ywgt%n!a+4VX(7^E|fhx&%jh%d9? z+Gv<;6fNRwjgzg&>G6^$Tiqg(=z0hdql!coagTBSN!a^G#7~(#^)m8jx8RqI%UR^~ z6QvXJTgFMH`Nu8z1LG3DHS|N@!%G*r{xc~HuG1b`xL&Ey?psUyfZD5GE~XmFM~@k_ z_uYcqjCFuZyKjPsJ4~LVx!Ol;!MhpjiI4U@>r)-N@Izj4GCbClBKE^y@nhuJTZM@D zXk%@GXrEf=?(!+YdHoK@xb;4+*}D2lkY?!WD?yrxtFHv5FnoQJc^aeE2PW+zs}Ekm z#_kP24)#nX77lU4mIn*tH@TI|11+t5qK_W8&qcxb#NuJ@l8d<9 zowA=j-k-QI#t$O?{og4w-6g2<4(ip4(aBhRl|9)%d$`LxLOR_@7uas`?rAPqn~vTf z?RLC6;G9ptF7j+o_oAzV{SOQO9_<@{>p!lG{D)Ccdv`jH|?)*90EI#$i;Os2u$GRV z&Vf;{X9sjEpj7a}4Fuo_&WW81}#7X=~ zD;VMeX=nvQtdns085(iwAb1&<3MgO21wB%%`#r5-i1o8OcB65i2)7uQj)m{>^4;M_ zjdkv@RxqM8DVSC;#Olpj!4L-wpjyEY7nb-H3|+*};GfK+2>ZCsUSUhuPY{hUQEV7| zu#a~Pe3WMfVy$2(T51P)v9UUij3T+VrD_F3Tu_>PBS!Lt@SVnbbB0zhBu`8J0l$$x z>lOCxBBB;B6i~hu?&~8w0S`4!Oo!>w(kb2tk2cm^pB6AA*PNafFvJx`7%gCk@b=o*aVKpX7Cx0{S3y{7S_SV#dmR2yN6K{jRZLDW8HEv2C+yG-B zagy&hRxrAv3z{^h6$}NW=J4NbtfxM;f+4wf)M^DoTsj11pcRL|h5ur#N^1op(xD<+ z!4PYyMJpJQKE}`rhPYgHoxQ{6u3$f8{7a_!8LeQ5V^}`jX`Fr;KE+r&eYJuiog6Kz z6%29c;LE)JN|^sB%}MYb#xYts-D8}^Fu^h22-+4E_!iVRj`o%)vfL%$t1?Pxd)Rl7 z%v#tRO%terH(JAB*c&b00ehpBm5w(~0^{kRE~S}&+s*640EeT5-!M@QN6=ARQT7XA zZ;xU-?CqiLlcBdqt^|8~#FX@T7B{3Q;U&hE>)~sS;~&9(jMA>*5JwuX%*txEl<^*@8|BO{CeKi?j4x2~SMK<}VTX37YVWwB6@Tbf^bMQ0N+w9c zw|{XKOq~?o@QPbUc$a<^>3x7voYC;J#(ESw`>JvBZ}3Lr!WS_A(l5~&av5Xgk@NXv zXx3btkGlfy@H)rCyZgALncJTeB$ZHkAQ#@~4YXfwswrs`f9_<@U2b_l3S8`i>`E^? z2gcA!qjC&KGA>);_eIbWG& zpND^8oVp0U$2e1kABnkNZyi><=vn!s$&;huqH+2SxXm-h%6sb<@%TJFFsjT0u0prj?ZzoQA%9=}E1FizV=+Z2yam5#Ts#n7Z(Jf`{sZGO zM#+C}9Q!$O0%N@}O@>rD@f1AJSWhGseqfv$0sDd`Ut$<3_|oZhNQFC0sWJhk`$V-o z7=F?-Ka7hbjrH(Xac^UtxnHFDqm1{5PcYUzy%rB7*Gnsk6jq#~0>vA}UHIHwF4kCp z2GQcP#^oJg-+8k4!ta_q_!#ybDg6b^zYKmaeQak zJv<=nf6BfPIZLBLuB9o)rETDoJmV;(d0r<5Q*!BR`?i)H#JVpo(FWqo9GGq^E~8tb z4aCWv-GqVkzzk+Atu!s{)2sXkfAZ;#hCee7a0sp3DUITKIPZ173->b4U+0#$ zVXw0h?O~#lq8;EF->FVCEzhP+w)1!?A0v#(BD7ZLqP9PN?B%(n(UV+Bc20 z@t`)=>#u_+8)s?Y+H~XazSy8xZJu4E@rv4+KHx@pnQ`hN_xNCbbNma@Y7=D-gsHsp zOp|x*1!FDW*6`uTIDFPNczw!R+hiP)cVo&}?>=fQ8#jjj5RV~i6M;e(Bf zE$}JEnHaptIN1i{kx@E$PSXXRuZ4XjgVXr-X!5m8EGOUrQwngurWcL%?b1XGD4`;) z(?ns#dX7!!REYIhhh~PwTBdH!8|N7snkiru_c54CM(2xA(B@H^EqCQ1VTs4x`wt0Q z3Wp%Yb)?;JtlMWuxPSa|w`@o_Fi|YK+lGWwiP`hW1^chjKo*DCHh$8Rt%$*zrAdGpHpw# zMJY5aW6JradQNWm_F;==+e*a{EPv{HN+?42TUCyYne zHy-!#!=_Fb>w`x|>2<*V>o8maPxEQt1$%GT^J0BYXM`Yq{q?CE;#m07n2YZa_Tw>$ z{ySJv`>gRvW3xU_d|lKDJ5cRA+`JvI#RPZT4!+)f86u*Be8~z+J@f0_ntY8S~{A5>HDa03A6P5t#QLaZc>M}{*n&zS?E@Dkig6C?vC)v_)Bi$@Q_CcXiz>R>Pw=Y{#&p^%3g-`*FYkFz9zC&+HHTZ;9Z7?n`zK-y7cbH#!7`(q9q-1a)Tc zs85R~Z{e3hUH&>9!*hzF~seP`I3bXSI9wtMzn;p5TUMF(~td3V?+Z0*60*fRQ(dI@eaP7HU; z9^lu)dx$i);x_T;V15~iby$I>gT(=zThqbfa2!nk5huP2(@(|mCGZR{Uk>vHE_tR0 zW{eVN_k`&b;^Z#yGA?zI<4aZ3!QzI!;H!*NU%@we-WR5`M*4iw>hKV8_!GFt%io0g zRT0T+F!dFu&V|<-XZ{3#Y8+p{PdvgcLT_qO|2C)h$G01F71 z@#Bq?M2XKb&Rqa6HrDN=9*B?hH^KEf{Q+N(k?Au9)<|gKuPDn8lXZrTYGG-;P zs}j|3bls~*8PIqMMtyOHIwjV4oe}Ul<0J)3yl$++ZFRyyln%Dj(IQdY`Eb25Ntnt> z&XHP7{!XzA9Zr$N!xRvAFe7i2P&167#mV2epFM=pz5?&}BAi*LhbTB;EY)MnVx1tY z(?i6WPT1$4{1EoW)D&CF8#7*n>&B$5b$W>6>SuWhgNilbonnlRoH&JHbb5#ak_W;x zZj{+1n6F`RKq9F}jkPy8^}KO93%_YBW2ZjwI_JW^0y=>*jbADq-9)K}igVY{r*xi( zF5-VBfP^EZz2V)BHJPgeMkLpfquQ(%>EL2IU_=~z3!d$nmQH`)>(E=$KQ>Oj3SVxV zJ_x>E>_)8#OWJM~9BDxr>Kh#A)vkkaC}kn134F4;Hww=8IxFCnUS|S)yRoKub-${( zy15LVGS-w{@R6~O4GsR~8zFN#BSPK+V${=Tl(p6cz3r_}j*s zod}OI)^2#+m__>Z20gzZ)?)$TS;nac*bxw3U>6N^Z=HrCrTD`z*HH#b;a_{5LGVMy zL8CkKk+6B2paBaZmu_wfJlt3lP#Ir<#A|N#BY6BmGkM}Ac&OKT6W-a!Wqitw_Kc(DeB*>G@%Y?#EI>;s zxf4A95vFyc+Te3F1pCIxJ_)Zfc?R8Fk8!vVUTd5?4Sq$O zqP7!V=VMHorA8tA(iAkMuPJ6_6wvh=@YyI+3abSwae5%Ut8p9?YyCm;+yn4@y{1leZMdDK~_!n#cC|w|8J)Drott3yAppMB9Cn;#&yIS&G zxWnYCUEYrwSt^;|-{jc?VBAn~W$iq^B5r8u;^Jhxh|ym8MaF?Lz~7~$)mrU_7boc5 zIu1mv_t4-P#+0~FFC0y%Y2qjY(kXn?>)?C^3L?1{1PUrpbVj5S!mAaKk`nDI)~Vmx z-Y-tR15;SBjxH`>VsY?1e5u!Y3|?Uz9|4n=bmIHMcX?*GDLiPL!)Lk*-Z>ghA>d^T z$i4^D42rCE6wM%rb>L}Xlb4U-?jdQcb(Ny;s`@Ql^t~iUI>k2ANt^-uW{UqBwyw(9 zKZ*-Vs0?C^{Y6YHPHhVxZLD+ii;NAD>s!0%dx=&_i!__$*}LKMjCHVk@nSE>LdC0% z)AzwQc%~VPcY2csKj-3p3yAFvKVh7Z9CJq*^o7@Z9lEWii6z(ZH$@5}PE&|d+Vg90 z#W?j8ywK}Y`_kF|mT54RE-kfy5U0`IcKyDpbghqkhHHE(oI3Va?#n1!{dTN;u#a{Y zaw;6%Qtb*)F}coyFVFDuNiZ#}GKNdLS3ebwNN`x}#;2J}AbJfCRP^)}@Q`|R*Z&!A z?w59tdL}$AexRQJYJ%mlV|w~ zpxZW0u4e^L_rXiy?|V6xZ@R=da|4V8l!R*5^qVd8*KMJX&qdj6$IU0%i&G4I&3hQf zscQ2qZe$hEFqVrI7LeQ8-LNjazZj;tQ~jM!<6m)T2xo@ifn;BR^pa zo@pH4gnZ5x?At!G5jk;`dBi_3)~g^}v54dm|HSiW$S;b87Vz0!&xdcfj-5wCp{GC1 zveoAT68CO4cH(Jzs@Kumpz8PbNvvG=pX9sU!#)UiP4cAp@f*2o-Y?}=Z44JA_A9$# zA9ANV&Mnc$8n;#-=eRx}aWg!@U80XqT>fK(d$`H^xXRu1aoCZXtsMW~{({VIC;u0ETb%#$SN-2E?3cef+zJ2fFEZVo|N3`(9Vhz# z{MY&aqAa?xsqrbJCkz@rVdD5HlSi22FZCO&`is{y9@3@S)HFzydu`j^JkvkeyP*H7 z;i;vq;{Hy@a~!Y4oOXFokr*?2==hPt4x2c{{Lt9{vgFUx%8|ny$Hr`W?TQAkdbs_7 zlzH?#ue15KmEWu8%@d93)h;Tow?6=A_|VEJJ^EBih7KRLYQ#yqUGru-R&Uj1-S3aQ zs_SG=@a2nmMOeG&>3sq{Pz2T7gei&6VI8 z!pYxjHl1GSep|EW^oopu{415eQq$^;LGH6P^Uvtu*3@h~qq2OG<3uCns(&YVvT)+8 zn!>&ntzU!W36X?L!5cIlq#0?PDaN3=P2N^Byl4qSy&zV~8J5JGM z5@Gxn@KqZ5Z#7*9c5Bubl2=8NY65;!*gF^eu5dcOYURMAUAK45j&omk`_`;J??U&I znnr`paKEXUJczt)&~5Izn(2cp!7B!@Y7Mt2Q%6ho2EQy3B`*QP?OD#`li+{kb9$CHLbThzh?Th zJKe=K^)8u;=6Ta4z14CaV>qf z)4ElK)7xJYJID5M;eYDm()+utk;8J=#N6kyW?$d1%-mYry~5Ot@r*Z9{?ZSt@Q zhY!n@mAS35=IkL}gWRBI?wb|aB-)Gv%MFHwy!xhN54WOvIYftwDET(Hy>RTW;LgH{ zAHgRoF9Dw}oZSmX2g&Hts04P9I4`)IQXmPNkK!Lpf4r6 z+re-U8_`-Y`ciTl{e<(NaAGSsCmeJJL(j&8IGk66z3;#%5ak|j5za@#nG*01!m%Tq zYRB0lC#i3cI679F*fwwrVSg3)2;ry^xU+B^otk@!aI6qKSat3Lqhn$`@uA=;!hTEe zOyLljbZsG#ei~hbyG$;mP%0NaFarmaqYJSaS_A%C1H;rVdP>Uu^(dXE3{!hq;fQiA zOyXH^bCIV*a2wU{0j_ndoP?L+r^klM4Yd;SbQj zs9XPh4R8e*e>T!r!Pf|TzkwGi!`b}1g_H0%{}JIr^xnLCGHeX-@$N}3JP}pH+b2&7 zZbEfv?$VEf>xw*B4p!5qaQg_wvEpcF{0{+k|7!fD!ND zY9#D2z!P$zuq}9laEQ7N(5Exf;4k?5P`KbZ@K?gwZD1`xY%Ka$+%c#hzZVRLCHsTH z^@W2L;6sEXWWG8)S_2$~3tffNsDkh`;SBol@H~~nC&CMb=?5Y12}~f`4!&CXbuhwE zo<$!K-XolP9Q>GY9C1gzELS_hT{sya7qVy#9APjpor@z3awZL)DI7!R6{#70H0y|F zgic`$tX7N<1gjOZt-xxnf?L6At?X*}g5O612k7D0z8O&(7Ky33Vu&QB<|@p9)mrXs zuv#mc1XgQh*PG3~+_GxqJ2p+Cb8Em?3TO6$Zxr@WhS;6L(YxRk!r`ajr-V87iM^~k zL&5I|Cy?E^x~KmhxP{0IJAzSJ(&57Q7=bO*N#LthiSo_D{%c@$tJII+??oO?0RN^s zm*X}Z3dfEEtDXE^;Dbb-jKJDPGVRf-6RkBcERncE8BU*2OB7IkjYbM9Bo?X8N8r0v z&V;oEr>+G*Epo<}P^%<91HUcuAP4?}j8>h#3nyCDakxOz6Q%f0uy!?Z_;0e4$RoH< zvb(SccT1ijoH+svlhTS2<)ej@_kmFe%H!xQl1P)BL?M&a$SqH@utIXNuzL)6nJSG3 zuM{qr3*IQqE+M%^I0lm^(YhH=03S-h{cM~^fy+N6?X%M7f(t~RLAdlm!T~ImMj}igg*em433C{l?k~(yKpIx1PO^se zKSfS56Tp`VhgIO2!tCACHwnAwHq!Z$eF z%D@;IgrUBJR?BG{Is6TLyE0rYgTB{x1-t=g9*_$@6f$sF21uR_M&ZesSMc|Ya6AI9 zS2+xo*(e;r6*B6dEO_Q?ktgnjuWJL#Ob0g>dF)H)LMMBeDhTKY7ad3L7ABUm;Ouu?dIN+|50I;iQwZo+KGg=YvS3&4Yf zIVLTw!8U`@3-rj#HH!E%kRytodHF=qPnMb&&vGlP+u-t2$LXHGtW6+$ zDddk~9+#J+hh#DZNys-i&MA5ME1Emxx&%G#$$9z5A}>4`a+vary!?BSXLmsUyW^ON z{oVTR%VuGJ_n7MV&yG_HH(IR9rI(3v=6J}jcAVq#^7$GGYQ1zZCY5>lBO;F;g8XU6 zIX*8(eK7OkYRF%Aoc?+Frz$Uo{5#BRyW}tYC>MPAYUy6bIa}qme38dHo5^RpmG1Fo z+1YMIIjXT1%sdcUE~>ZII??i;G26~|&nQQiP#X<~m%W$4>d*ct({q4Z;eMT)Fu*<9 zEf261q8UxVYGuf%&GfNm-8pWPGZV;1okKE@<|wDeOQY|jl=KizbNt;I)?f_qTA5^wT&@Nx;4O@UXb{3`Gok%#L|*P$rgbTeuw%G%AW9P0k=&NeHC;p|hh zYZ$IAHg$%(XSlbRF~i-8W{9ZCRtX%P0{&bg&A|Fi(1=*j)N-?WIKnqFdl;gd<5VD9 zyi$N7S6t#aM{2PuU^dFb^Gw$f?uBk2vvP#Hz`fpdJ|ER}k>fN)QYEU~6wT4vakQC$ z%RSH^H-mYL^)i=)d6@&UW_kxM7y^b~QC?@X=&<8&Hci-@Vm2eX)~JzY4`~X=fgeY9 z^TFQKs8>M#u?9QU)EVgxa_5+7BjGGF%<_?L2iS4@NSN#k6CdTi=ehqd+eSfpxT!Z9 z(q~NP(QcW$IM*L%zI(5kJ_dHJGMmS^wd=AywL*KLN7O=3cbInM-poZ~5&svaYAj50 z9xj|DN@XbTVWgNvh|QzIv(ak`KuD5$QfQ$OW`DvscNf?7FpH#0G%NR=!_8#wmvz*^}P(zZ1aJL z!bPTVqFce0<~BPubcN{*Q8hY_BO(#`hy1Y1q4PzdLdzt1z#B z-G1-(?%3ZNyhryp9B(~t8+rY=W#yV_`JK`ALSAi8P`Ywe@-bjLD9`Az^1TqJ7WGvg z^mCjBc^-)#CC~F5r%|4lJ5FQea1uI*JU@YMAkXh1{igX7G=gTzQGLg0t{jJ-AD-t? zj#H`3$#qqpQH`zh{2p9QIhk;rws~%{zwb%HqDNUdygP}$yIo!hC2p^rs&brTlrs(Y z-(a#`axXsW7Np#zX3NuV?*uvqXAb_*m#hmL=1zIWt>dD74PWc_Mh~%?hlM71*6rmz zyVLZ27N-NvG9KoeT|BHcU7y3n=eC)fp2KNiw)4=^w0$0jrDhHfYs?lNUNlYD;jr0E zUWX9R?=Ua&)G?*&aY&otJghdWd01zH4LEEveK$b$g`H-ZJ?=5PC~jxEzJS9Pa}y73 z&2}Donzk?E@S>T+Lp`&Fhnq~(mvC5}oBWbH&i6KLH`_NN!c99(+gEwqW9Gby>v6N? zRd*^n@t&{YtesiHgJZsZ%{|l|Wa_+*zQ!>fUw2!CPr-rvm{F7@_$Z=waYQFnL(?4} zs4}ae3B!EI0H~s9eoddtns|>aH?1~7(hjYAM9tF6O3j!}Zqc95VatLe+qSE+Phto5 z&u!e~4rmrTnNKO)5B}3rirV|1LFAvrP8d4neA9bZbcv}Ocgu78esb4%rcGb3xWRti ze|=uT5Qh&lPyXT_XBOV?-;i7ItGh8U|9HqR&E2ubE%5npwlMenKDT8o(-?(A&t{uT zrP&pE71f;~I#fh#{(OkR%kH&cTq6f)&Q3R#-vY)>%|>xM_-x^DDHweb<@Wgj9Go1k zg&h44IobujT-e7L!HG!_j?5*lz{?MA#hz zMuIjmCj6_)-$!^~IQ}I#Ul=6p9VGJL3UCYI*n{9Bgu|D?)yHYz7*2W$yD*if_3Etz zPkFUXOiL4PMxAJB z+_%758V4oun@E80dvI@!2p00s5%y<;(akebHwA`e$zBQgTGc`I`bIdI3cd&RZ*zAO zP9BvDoG|%$v#$n!Bk~xWF3`+zF)z@}c{9LjYUeqynmXtM&YKzq4Aj!W5bzXDYbtUX zAm=s{@YZ0VFdyUwXkL{241jvGrC~%l)o%`dQP{Z=42#)#&IEs~+!d?^2pfWTs~lAw zhTv)>z=29wEEi~IDl($@>tL9e9HKNKnhx0?4L(WO!)Pr$Lv~G*}gz2Ew;bJ*)KgEUn^ul^LOc&wsBe2$Y4Al`06nPBhkB||YA?j;03*QH;6`iqQ zwPFNkjns;<1X!$C?Zn#PM9mdLW}&|YM}@Yo2U_a+yf)CjEB!<5)UcA3w}=6S&8@&K)Xk3Vdjt--em zS357_nS!H3_Z$&AHk>wn;|sI6f#ccUV+pO)j73>RR; zmQNApU9_n80eq%1jztJ#%Ss+1994lw9Kd6QJ;cie@yO=f&D~VXyQ84m{Sv9+3jeu( zpyN>XVDEf!y=`bVD(7y(Kle=aM@8r5W3hCQ=W19x&$t2Q*LD2OuuWdR54mxjm`yln zo?Fw*J1Owm?Ob$-*BdKYeRvpXmh!MRxAPEK5i_TFEAL{j{WdeBm3N2N{#(=NFt3-_ zez%!$7}Nr@?l5nvyV0~e9A{N#E)Sc`*2BF+-CicBM3oOWEi1hi;j1X-52i0APn(54 zHc2h0^a{K-+sx8RuesNMm)Qt4x76(9VY;bPg~M9Yxyn0OCO&3dl~?W_dGiea5U<~y z-0CXt!X~jscG~m(f139E>*lP%eZ7Z#Gp@NmEcZ}<@5Gp$?HsUWwRL~5PVR?6-YD0k zhK2QVQ-^qsLOw;~M5YY(OY}F(&i5*-(S$j9p(uD7+*vrnjfp$3C=Z_nqj}q4sA}%O zBF8=j4;PMq3m&cdUBDL$N8`Yk346DL=L#o&17C;PJR{=6eNJ91qvzw~g&Z=m6&e^G z$jJ-k$&P03NKC@!K!jFAQGo7*^AmDx9^9}%*zSkIt%q_iguJD&zYKh&Fb7<2XW;<0 z;Piz0KC;E>2{~*GzCf7Ur8qsQwn}IaPTQu zGn}jhH<57OLU32=CM5^8+qU3GhM}>otV6|8Baj@De*#(uZNyd)? z7l=Ny#(4#!<_(bZ3Nm-$a9%-z$>dpu{n*P$h{Pd{>SRx z125>S?BPb8i=W!ZAb~l2HH6Gk~IExU+LSZ?L zumNB%P9w-MI0>f_Q;ynV(^wt0f$Y})SbOKHz$nnd;7Yhg7!Ki2(78&C-g3JvmoJNpC)DEW+)5s*%$Oa_lwyskwrCz%Z8$3{U4Yg6zBsR%`j6fz?_GR2Qca zR_9@`S}Ps{GP1?DtBRbb#Rxn2VDtT=z-I?YfwLaE%pJ5*n z=H{d{{Es?Z#7lqZI0I~emvHjCTnIK|2pSWPkZ*3@rVgjCe3)PZp9=0GYMEl_$KO1%|xKsX4lEX<44g3VSpK!bkJVfOWgAs^<6XjrJoE)J#vsVfS zhk|cVMy9!=mO25t#q0yh@Y5{Ppgi6PJxO-Goba(v_AkP*{$S*mO5P{nFN7VGD*J=5 z3#ZKfAq zg*ay{(cPx=B>4I&h~RS+(QOKM2y>%);V$9eaSYH?sspnYp^B)_0aa0ju$uu_3e)9^ zItWKea5rHOZdimu*|gwyMHiw&dvB6=y!*JRGZ}Nzg{JRhuW~H9qGGMZ=yI^uVuJGL zB{9(s?>0#vYEnxU* z{#~M4b@uDmLT^r;WG2^rs`qqioVy49r4e(FZ$6L*|H~)n!J+du_0EJn^ZL{FTf)ns z_sYxPMAwjK_;-E+?d{G@nC;!~;{jittGzq%xNptXnAnao@wqrmHvQ*9xYF$A*;>^+o*Wltbv-KKGg`1k-T1$CBg`0W?G)ox9% z6XIsWwLu+o_e);Onj>N*xp!ak#sr*e7v|1*%^MzN=Azv2uezuX|5o$jX0M_LIsgZ) ziK4_&;I_hidgUB1%u%1yT{s#JK2?|-^qm31i5{lvEw8K-nuBwZ2D=7)g>o@?wlKF$ zIcS7TGC-4XjIeisne!GFofySB5k+uf?q;QGyoXu$mRGx)OH1rOZH|!ym$WU90apoo zXaH_UVQ!9gHTN+%zl&B){cst0urhp<&*doR#L1m0?C%8MARK!ayv!+)!01d|bWAqk zMP}67=snQoxgU!tm<0Yx!y#=iCLBjY^h$-@Z^4a({p-MJS2kax!0m*CQ^2@SSa}0* zA7S@a@IYbzJTTI$rc&$$oWOvVVHodPVQ&%mDV6U9qYkL!pbEXWgx%l3A1S{L)&lrH zgYjoGu@;_#a5ny-;Ed|8bjlpRTu%JfxX?@k%rHye@ydD}4iO5&aPiZ?X9;uZ--k<4 zp4b7NB^<#R{sLhZ&__P0<9A-P1yg(E-q+l5ZyWO62j$ zU<_)g6MGbVk}#_;(smZ0%|&n(>iGM>6UgvUP6GKT&jv>1(R^W=Fm|vo=lU_2k2<`Q z#b7ZT(RtwBDsKzc#=yB>Os&WU#nl$-Cw79>iXk!-t5!3{pTtStT=#(U^&NrLT;5Eu zS}O*(imA1Nt;m#GD+vqnaUv6QP>{G<%l{i#t(7PNtF=t>eJ@k~Is|8Epk?5}TA~L` z)%zHnB_O(5L~JDSn}kDDYy2*izXpbpm~MC*IPaGQD6}W?B+^f4x^%h3i6W1|2AoVY zY%&XeNSMofTn*9d+Ij zPBbf7#zV68MCrA~#hA(!eleT1)0NTJ!7`10(fW6Xa!sG;GX%vObWry@V!p>FT4Z@rtrQZl2{6iTxs%!Sf!CpW2F99Ys`?CA&Ej4L zR!bzy!KbRuc<=yaw2bWe%E&9XL))mo2WywbRr~BUA`iEK7YPTjVD@gU`}iiDJfasa z1V1h8q`)r=d&o>y{Wd_r>?b0RGhub!*ceO_eB;|dyR*iVr{ z0lb_S!ZS_bhhFWIxu#OkMU_W@d#f@GS#XZ9w-G!_I6^HHOqMAHqIU}Bss15m0^;++ z?Pl(W-r=6N*R1)_>*nrQ^buxpjZMdoL^$Rn3eD<|ybCc%Z}hQ9`+STioaJW5$6i^p z9hjma;@Ze$6bGXTF~hMr;8IQO1GDyH#B+!VKJf-MI{{bV0}R1FzxZp>3Siq}Z4cg& zW-e6S)69-fyjjfMm~GzF^3O4Ex);VkNd7BbEg^Av&o;~wPBe`^MaG(%KA+;z>yMZ; zAp=Y%c?=kS!i>3}f-6*h9aw!T=wy~5m^;aA#DVKAwX~&p=a}6PHCqXhnlC|KsQISq zO?l3B{>++=D}ZGmVD{W+M-4Or1aQq_WEn zv*r&>$mW`=y^szzGxj2$QCrRCz1|^S@K3X6FIFW+?>3G0VbawSIqqP3?t`6%aZ1(# z;TG-Hz-dyOn;JYo(cif+Ob07bJ?U{a6yY_fYd8k|Z z#0o#wI96!qWMBV>IoX&0VQ=P;iNi+8-pr2GLF3%w3jYz;_-A>obEcV}@mh8{W+1j^ zP8>0L;`qZRO_?xaB2VSRI|HYV9_Y0)&h*~knG)ScDME`svm-=QbbV`a3|qlIv5>1Rk`}@^iZAxK2tc+9SkqD zQO^gD5{{#5bH=JZ+NE=;Fkb`4=uwhKXTrfwH3KIQiG!|*9A6B+LmByY?hy{}1jGHQ zuLOEao1eC7;@-Vzaa{(71_zTnOdg;DTf zman->Tn}z8a_=ZG!c)iD1V*w}e;;_N%3lD_7IyoC7bvH|sBY^s;YOU?FBdp+Ow^ zap7uV=dWP&$2Jof0Px!jWEbPD04<1|OoE>g_Pzz95R`ip!S4zu;9LRfit+@*Y5@ZB z9?Gjx;dSws5G5BG2x|*_aN@8+*hdo#;lYfE35A`6W3U9r)s)9)fzMJooG2VF%&iI` zGDRK#Bk&C67s2gOpEh@eI9Vbb?Eu5gZDR1)sGG0{3q@Mr@n6ikqtL35zern2Pz+Y1 z!Qf7Gmqz_DSdA7S{YZ@#-v-VbXE``uyLG_UI56hHXmM(r7(6R zINZb$Q{(UrZtT{V@-+jiahx$=HBRht@I|8I+zGxym~Y+1t`&BRz>9_bH^BEQH^=CT z5m-ZgW40X)gA7GQs5^4+QM{2{PQo~GO+NuU#)pZVW1P5FNCF0kzbbO~Z(#MJ7(6Zh zsmQ&pV0asobdjg{ufm*ObE0Pr;_k*tMlOWtS`xTu11ta!P~HR{BAh_2CE(_^9LQv1 zqU!tutOjA5;fE-w6TJ?GhmrXO47Nwh51>8qOB6iuF2IHL!ZBErPeCZ>)4BxQfb91K z!`sO0)cK^D96uSnSD1^>eCdYruqn7y<#2_hS~va$_(;mpp5llodAukkjsTx3%$_=_ zy?*#Uc!bD9$dc*;TpCGUF7lu^c%JH<4!&8K1MK93!ZxiZg>72Z8|1_$247*WJp@dC zen5b{qcd~A@7GVoghM2jDp5JQz?61lvD?5$YdnvFQ6)Bh_)@Bma5jPoQzPXhDl#*U z@ymL^N+}~EXASrs4TtuTLOeE(>%gz5&MffXg@d&iNG65dsb(9ZD@XRz$B2ke?b9b| zu#u*)gI|`p3Zl^>iXUg%cJM2!2SaqVMgsRpBQYi#N2b#?%E(mu7U2NCl}2NosPIcBCna*s@eg(KviL+3@XItaU%GB;Rv^m%=4;qDfo3^zP*rv*HPc=1%?&L z(Wl_wRc9nd=LZXiH-O>N=IM@peHt*UuFFsDWYu+J{lV(G@f=uPH+&PUuIr;Fv+BA5 zBG29>2?XbXAJ&9_1wSPmLx!_23CGb5XWzmSkj?4aIMIgdA))M7qU1aa{#n?4*39UH zUJ#W~P_Ci}z|Dl&L<&%$j4pfu+)3C$JdmT!cFP$FcrhcrAV5aef)T zUbp->{|vXG*>jxVBg-R=bcYCi4n@v8W@Tr;13wzb&m>sU;@s}e z{%6TH+@kmAd=VWbJ5K)d(6auVJHmPLPwo65m+tAe@x7{DrgLw9s$0jb;i0>!>f`tF zdh9ea`uKeDZgU?_u*{x5eg)=%jZVXKtRr&Q-1IyRlA&e-C3BI|WV3Cp+r&Eslep9T z=Fur1!s18US=`}!OyTL!S^}-J>}z&?PCsBCS378ZRGTBsjMI_OnB0of{VjE3*Vw7t zAOC48_b*S@a_h(Vrv?A>d}{Qtv3yF_=$~$j-0>Ir{k>??CF6!q9G^3j{J@Qm8j9y| zBPLEXjaK-_o6jfvIFjq3o@9Jk>LrGATtZwgH zGyF1G;w3ZpGQWuz7Mc~8`G=nw6+&gSsBoCN9aEXbg^A&z=FDNwqaoTJaH0~Dd;BVkZgku5tY315x=@sY}ZZ~VLz?~C$ z3G!LL6s%bf9tO{l5WIr~*K24Ll^^P1-nhj*ST5|t_WX37&GWh74Z;z01Kcbqclv?R zWXaJwFnYED_5|4sv?BPez0g;sC&6%X>hO(`u)eSlhvrM1lye6jKb=SBW^H~tkL-VH z)>Zqpn@0^G!`;GOhmpfego7dAtA*p2m_5~glWHIFbNeWD`B*6$pw~NsM+&o|_%%H0 z1V@2qsy@Q8u#`JhU^NWqI*}TNFRMgq7>@V(H9YEbe`NFvhPFJ3O~RiVAh;N;28cfc z&Km%kh^Yah*IBqPQ)QoR|haPuM*UtOns~eGJ#A6I_tS$(3>vTVYzx z^iOINArXGxjtXIGa0}r$tP|G==^p&N9d+XOn58rQ+HLHNLaUnJ(Bo|1#(^fx9q(k$ za=4Gp%I`5dX8KL)a&?wpth3iY0billA2Lm6`4#=(Wt`As^84Sq9A5H(&?SU1bBT{ozWI}f7fCASXv6k-2ZvvU^4rlTMl zFCxx#l9vfb_nJntF)rB$(VZf4;NnSS#%2~?kiB)cY z*H5XPsGlm@ub)zfU|Okzwcq59q}1`E6nqOtJGGgBd#277j>FKY^Hpaq_;S@*1jZlr zx#X6*OE`iqKZ9fA`2nof4*vkZEOKn^O*yH&xv}wU4r=UhjFz?2kD<`%_8P}yV0a?q zi@`YQ6II?5++Wx|6Rb`a)&mb0c~H-+nd4WMqrBV$$tc|Sz?!}I>_u0iKD(NxS7N*q zZw`%yqLmnH`a)J6Rp9&_k;Tz``1NVV!qIC6HE1(64};F6u-6z|OXa_Sn+dyDfe#gq zBM$CBwDD{NYmyW4 zfq&}Xae)4Vs`C?ca>D*sX4F-FhjP?6w-VaXz$sWc7F{-Yg7Hrr@+QfZW_bEBXCn)C+0j^CzDTQm4Z#J({%|3-gIF}hZm z67NU-hwtV8>+rGtef~kdIp`w4xf$?Xq)Y!7N#ca-MG1@o=8m zzS6Jkf%@5Y)Qh6Kjb;2&%0$-hBSnpyp@G%Sw(a8Ai1RLFM z@GHXpTi~~qq0V=cY_Of+ACw2dV7S#$?)L$sP1|_h1h-UvAAF>84{&E;56#c*hYpSb zxZ%Y`WR{14arYr}Z0269@)N*X4!+#Qcay9RoQv-!*|3j--%416k8ps(@@)k&&Y{;8wyuJeKbhS)FmK~)HInxd%p2wcHKwXX#Lz0H0TJ z(-ITowy#u6VGll-I!*(uUi1_O#%&-OuUDz5S@hmDRZsbY$|DTWj?n;TgW<2X1X;8E zDgXMqT$D@ypt9RBC_ssAqE4>Q(|)zr?61fGO^knh&HB%^rzUVem3!TCyVm+2dtUt= z`1BNp2kT7Fbr=>*FiUt?VZL35`*%N6XFaUk(R5soJO5`4Zbq%gvdTf9b9_)%^evOH z3EBVEi{s-|7!iyyA2Pru2>)q^3ibM%RvU0(4L(EB^(z=G^WL za^HXLr$a6rb68;a>x?t;ow#$uS5T|6zXXoVEnIf5$qC@j!u}QD6EzrG72kZeI(@)r zsr(S|aN(c_7%h-G>`^$lAcwbrFBhh(*v~fE3(IhFonANs3@@SFLu=yGF*2Wx^37+< ztH6&5`|pF-3WtNhaB%7ba1{)OP$G<+uRYiY2+yY5F!ofkvYTXbC%io+Ni2ddnkB+NdJ&p9Y}(I4_FO;!ha z9Dcc+4@54LcC5M&`^mKvwL&cK2DFsAb*H!D?9t4S;V`+XOm+ z^Oju-K2GIbz*97_hTz%CC@V)pHsL41w+nmleU64G_fE&unZqHT1aFvaKj97#>;tkuicQaLiBoExt= zG9uGeI5M*OGpcc-X3GzaY=A1r)ok2s#G#Ru!%`d?k-0euLnDzt4OVOMqXQfnS)DoH zytRgc)mnTc#F0_mYD5%kgFiJ_upWGp1m=PphenLZJrq1xBRv&7R@nOue5r8wBlv37 z-vho$xe$DpGBV7!sTrp;2o4#0Mo(_Tg^j`i%*L@5m3)|=V=G&lu3*g&>z!jOD<1=% zF6?{`en~j&34Tj?A9%a4j|RZSI)s(2`&_NFiS5AHMoq_W8u7;`C=ZSYYb%LhPP{@b z`a8kHh21S+tz)+-SX)VeYD&yh{Tsm735OHGw=|LyF1GTs_DqbMEfS9@_cn#UqT3h- z(KZn|{{U;XJMVzu>5U8wnFbLt!RtVrYG2J~m0J4_o~gMD9}m%>(q&Lajd2 z`cgPJ#_8ZBQGGU2xJD|a7q)}Tgd@~W3Rbr|CEyOqpPRwE(aqQm=u<_;*RoQx^*S0; zYN4=uC3wmHExIXm(2UPRji*-O@gWO>fBF67e06~P$@5>UNqr#t;bzE@HxBKr{vTKk z+wB*Z*I@XUmJP3bq?Inx__yGhn*TgL5W4N3enk&xWjxX1AdoLB+g$t=j1b&L>m3iS zEpq=7a3ht&jWW$N7h_G&-~389X{P^%p`c@y{)PeURw&Fv(wa3s0+q0}|ptuL6~j zXSAq%iTSA(F2-4%$B|f`f6N83pv=eS>Uzn5-vkQ9bMK4kU@AWT+A#y+8Z)1VI_ASna44Sp#`$7omz}0nHfX^KUTlczPf?3) z_EpNF>Bx!Zfq7~fH_M=jmEBF*pn25wTU?!IhvF?iH1!IC=H4NDOxJ=ym+dYp2|nVM*9LA3zC$=MAAFB+3>_->;o69v1wSF2LWkVTm|I_ki7m6GT8I?<+9OO6HR`4jjqc z%E!eatJ4qsyE3{bZp@{en?1QPmmEVU?V(D@@xOzSDYAMT&E&TYcnJHrW% zjsFGkD&Y{$$weD0-;SQcS2L%2!larzjzqYSMt?yy@#8qr`c9(hM1w_% z&J~RnP9WEjHmeX-!=1d0)SC;wOE`tTfIE39kDB36t(ZIqtk&XZBf02Co#g%CJ*a;h z(H1lzHCF-|;#OYD!{@^3YvYW-YDNDpu=X)tZ?yl!bWutjiwiS_L)141^foZembgXb3&CoY_$2USB9FnU zTu8Nl@w2o^LiYfe0n$ z2ik06NHp0&I5`;HM|m80pfaj534gJLLACJXt2Qi-$!gSrjr3ET%-0K-fz=P#e3Gz+ z)nO)93cHQLF9|1^n0B{GCiaoYJtp>*FjqU0d-v<}a`~7@ksl$cc zb09xSn7?hqW<;GNWc>On*+*;O*H_8$wcuI8u{Ge^ggNd=-6xzJ0e)8d|Jcnqc|k5D zJ^<(IuLk_4$UOu8Oe4AjyhG)%7QepAgx&GrUBcl*;NO*zu{4~-X7mAYiEyfJcbqiT z3)8`H9x6FQ!Dk9{(x1lppMha+%RM2_cS>8#x`%?=$NKL>h6HRJ8^KQqC;kpzui*;7 ze-ZZJ(CIH!f2b*45mZ*6ijg$(&M1pOoH+R8fE4y;rLFlmfuZa z6poTm$HOt37Iq&5*AeDjB&%-CEM}|n12mKkyA5n$Rz|kBFgJ{5^EHl!$xk2IjQ#<> zT$mrQ;M|0tI_1CY^&*cR1#3g*mrS$wI)DCpMi!Z3Ji*tFIsW0Gb~!Wuiu30$YGgNQ z96y-}4+j8#*&u`nAa8Gr_+K^HEPN zSeNlor&bFMdpx+Suzx`{PWs3R_kh)!ulyc(u?Bbp{FJc!0T|W6NS#Z-ny|AS{ENt$ z(b{k{TNpH#+O?FA05{OEKY*Db4tqj0&f2HR1-|}Y8;#cnMy_km5av^}+SjT4XRul& zLBFuIjfRu8rNEpog?&S&j=@5pnXxB2S>^+QUZFu{=|lKWN(i$^%$EDK-Xj zxHt7J8)0tRZ-3jLT)u+N?Oz~2jp@bUIP() zM?8tebDjSg939~0=xKjosid>n$OAs1ycdVLW)u%Enl(JkG4Xvk^f&!^xXCQ%p^w?U z4{I|Ex8K}7?B(6??ahlr#B%eF@Oyl(d#f8x#Uf5053;yf%EL0V(+dy9d-C=Cu!*Tk7W#N%k zM<3nB+!cg}xJz=Ig7Bj5SOACJz4PqiOToXbhS&v{13u#XLu3ETe_elhs8{$$nA_Ml z9R9zqx|rL~#s{vjG#k&&=^rk4b3+D%lLFKC0l&EH-_os|JZ!>f?%l_`(4BK7gTmdu zc_SUGZ_eRHt2>*yrMXjvg-c4yXQO(Gj7 zD>BER;^SxyT#>PSF8EC04Eh7E$WWdt29FX>qnlzEMLC-v-;5@65R99TWgpGlL36F< z1%61;xj`0HA`X~)B5b_g*`Iy^7_rSpXR2N?fCezrS)*OFK&YLXqH0}W24B>2J z@O8=yzz+#0im|Wk(y$5M(OG(FSjHQxulbAlU^QnJS@T;<5Fe)W&lBcL!`x?MvvfXq zmdY!^*9&`1!RUsm<30htPngeu{Kti}&w`)BjrFL@!lLReI8ozqpDJIzWngX&4m3kP zj2-0dbrx9dmCAwDUWvM3wO96P@EnOJgUaKcew(4bV8lh{R;>VCtE~_|Ptuy|L*M zz}W|$C(IAh#^6qj2tQl8`SP%0EDRHSP2=tceqWf&BJl>o-n-yKg|n}NHBEX{e4NNR zHRiW)t#Ouvw`kb)V0D({a5MM{w6-fyWeK?)rNDXLKry*M&M4xrZ9*MAjikA_MmZN+ z6P<+vB*~YBto(7X))VJrT>GLtdH}pqbv^{I)q099!O2Fsz?Jxf<~QC8toe3rAmQL`aC2c7y%zVGQ77FD+);Jj$DM?IDK8{?;DUN4A4;<; zw*gK8j~3>xiR8tqe;#<2>ih!?FSPo5!1oCAN63?p3VRE{&j@q5iR+%nxYaN(Ovf*3 z*-W4+lAj23S&&=QD35&w{#Dq$9;HqTr;%8yjxZDBlTPY0u@p>CWBbstKDd=|1R3uejKW2E(p`lE7%kmLm zokNFy{>-qbd>Kwq7Dk$>1b?Z4pEV0-hGm&?5ThP=IbGMRo*7nlLU#BI_Y`r{Y6hhz zbH8P#t*TOfj4)ndax&T)(rMFZR#-L!xzDIk20|PR;Xghd?FjpA4SVB2J zs+DTMR!3b7P`b1s5V7JC+~HBZZAJBmDg2DrO0pZaG93p-oE zV}wH#B|A;nzY@Gq^$!LwQJoU-Yr=7~+w6OeX+Jw`&>9^^R{Ph~AWR4%4g0YyZZL1@ zg^AE=4m%&h(13h1%Cpw1q}*m_ApA6|IlMWf)d+1BOqK<9CC<73TKS z;y~EhW|mzUR=UP)LFjVSRdA!+j_qEU-4$aGtRekh=wN7^a z{I%X%y)}VXA=eUz+raQcTY6-&mKK=uWG$l+O)#zIVtSo2%jSj^?yF|w+_18IGUoh4 z@O=oR${z`#l)tp4om)c)xqFnSX6K zh~JVZFPD^@U1m2#?v1AZd?@r@bX{1xZuACL6p#W_ie3kwrTP8LR9zRAmBR_@PLRtS zuhpF*m$S3XU|e?BM**L#=0ToLPAT%8SqqPtwrKz^7=e zo6WWx!X|Yydm+1g{|`1doS)B)sdr=80iRCje{l@iG|3dJ=2k4x9fKET*6poEYpkGz9 zHlF4MagGX~Zv`HSTSFYLF-%lkRGe?Aqy5n%)1#&veNvd(%OHsXy9 z9OjxeJUAx40f)Y(KM&K)avs*1-5an1I&P2Y{sKuTaDC!7v)dlOHQhJze79M= z5&eHxQ}`-QSL`x_Uq!IES@|l~SFbf6zKV{s(W2L|cv>Ic{hev`8U#tx2NL|)-ZUOs znx(uBWBWtx;_8qkW+yL*8vgquRDJLte+?>dM^w*TY_?#SY@)sz3I>FRm8; z%gQIdGHGsz+>iccjnyu~9-udJSS9ti7jFO3Z0^nm(Tun`u0?d1-PiX2T2UQ7V(65S z_`2k@7Ey=bf88MW^r6uzD;mER$Q)I$9K&Iq6uF+`a9hH%iJshJT_{>0xh1{9|}ZAL*~i~7h=gptHDpH9PaPDES$L-{JL=QTVOOd>Zj2!I-jck zYv6B%3(!~Kven_oLfn+|B^W&#IrSIt2`cXhMjNKQpeJ~MaCRSfyl`+U z_!8mb;ov#Kag^3wC|ocdj5`D4iQfWV1-4%sYKW8PDw!6QnwW5_liVTf@<+_ z&Vb3!&B9($S@o|F9WNsO029AB!prH_;IlQ@Ch-5$*_l9DRh)VJt@plt>(|{hG$_!G zbc?cxyC^D3ToQ>(#3gKER6qm~#AwpEMPqP@K}rpYXc)IJ(Zr>RqJc;ZF3I2)ar7v- zj4{#CL^PUUGQa=*>Pcs2&Y5$DWBY#htFN}NzN-6PRo%J_nv%zV4=?cY4KVeVy!b3k zONc8NMmt@_)eqqZjq|i#;xS{@A@OgVP7*0mnZ(N$pjW6Q-ZoZdNniHrTd*&?zKkcm zu@gUpF|5+j0UXJ*jPo@$qZSR$C~<MhQNb|U5-BcH-tb(nj{!sP>TwLO z*%Ikw_JMCQu2Zz|cH_i2_&(zjUL0bNFGXck28;>f+~Y8KsN^I>10)ShnRvBAim1F#v@mTHBuE?e@+RbXr^xejy6c6c2Jk2Eem0`KSb$x^nD zvRnX9^7^yj*`Bw+i;UwR!ykEXOk!vLiz26Jyj+WqP=E&;SHA`OI_U?G9{5mZ*(LCi zKJF;^1mhf@n44}~I~MkyS-TOwz~sdT@y6Wcc9FS^fbV*~6{beYAf^K0FyacC=GJ>1 zS}Nxoq6tsSy<~Fz`p>;Ml`YteNqqbit~5#hj)zB)M{ZH7XvJy{$<$LvN#Xk z*W`LyQ`4i0oWpE+^rD2;z+W{kUk#sStam(Uc2qirb70>+5_mxVdnT`KhI=Tjl+v$r z5%mv7Pkd76KuTW0D)~2z6UW2v8*8~l+rFfeJef>FudfO<8OINY{lJnYW6hmPU#qFw z0VeKAU&{rF>7wbcu&+(9D}1KO%a~V7Inqf#4Koai3l;vpZ5&YZ!ZPDJ&ZIsr9i2B& z@D)ox3U4&I&i*UB=I{DZNogNN$aNCn+e`~PMc-z6U`>xaODB8?_Dxo$pv7S(4~~Gx z7?&`!ericS)(U$k)g)o@D<-e?$6Q*Jkx~^0(iE?_3G-+K5^G7ei1&+Y%FMT4u2D-zK8mq-tmM5RgS~WwjpW)~S}q#bsdIUhah}F0GxA7BXG@m9U>rUM<7LrJ zUAxE2(=0&ysmpVG1PW26fKkTX@Kwf{*I{R@{k!EKdHHYQdyLbUyAMueB&VIqubC(( z_H7@e;J=u>_&DBAU6f7jP`K>%$HBhsbt+J07n7&{0h6utwePTUlyUY7_(UHU8&yv8 zqh6)T#W@y`B=O3H#<2h1&ay;wu(=8UBOG z%PO>QEH*8;>PdXz9*@uYkv1~{9_;fx8}?l_+YI~0(Lq_&<4mV;I6TETF8M5Dg;y6D z>xC87ON`YKs@E9T_Jwb57y%Ed-fjVU;Jf-WW9 zB`@CsU*>gAadS@QKKd{s{uJEw6BzFiSI>v>@QA+yzv6Y4z;Ao`)9{~-ORM3}jJ5Qv z##P)Jjn~xV()_sf&h}Qub)K^C|S+|3r4Ag%@{)PcYV=fF|Feg4^KPCa+?j zCf{gHH^3Kr`Kjk(F5sg^KD%#1=e7tjt>WG!99$#d}Mn|CK)aGy3Q^ zIzlEkJJ#awO-+vw`Fc}onhF2VxP&{k+-+QLfia>o)*5At_X^!KTi!N#H1qDeK$7m# z@^_P0c5^#VVW_I7xQ7lgS#BJ>yJsrfx}UM0xoBN!oIVKlZdt~gT7Pcx1YNY%cg@Oh z7^A3M)xW_Qa~Q0Dt#miZlj!!tA4|5uPz&VTx zKIsA9^zol}l^H>6C%trl&#f{Tj&h?1(wPQ$pG_X*j-C;W)I$9LnoLVodiU`FDiayu z61Qwduz&ox-c2)tUE_RiKP`A88UKpgat8U+V~1?CSiw6mL!@F=2D{3cl$qJhGlNTe zx|klnv=IVd+bAV`hjE^6G;~cLoeh0-=srrdb`?5*FwWf$f4oD#gZ?iaEq!$CWLz!5 z+$|#a(t|V|ds~2ZBy@b)SdVjeeAQS#Vmi(;4*mi680+n49e&V_5@m#ps`(yr3L*}0 zt&T^G3lGBBT5?_@+!O1-4|P#^jDSyeMCeQ!YuN0hw2=;xJNGrt42JR3#&mb*Q6|^D zt@AYF6d84X-B^!*bgnek%t&X{$Zq(ope&Ca=3PpUQVqj(lwEqRn=}i*dexmbi(77s zTg6oy)*t5EQg1vR_JU9U_}(qEf?X1wZ?o7r*JLU2LgNBn({(|E-H5Y;q2sV;mv8Wl zc)11ZR^4@TAErzyPXZ_G`j-Z~r6kdV^|~H5k=D+;{P3a8BwgN5B7VwrQg~(8zxCnY z8SA@j*T47S*Nv0EK>i-BTOf+i^~C#h?>#pT=@el6y;IxhJ`e8!P(ymtv@GEcc|o&2O!S zobKNkeu5wH#ly>kdmg+dI53r1^okpQeQ-W!Xs)?F(0WJadwlQ)8B(Z**8+Bu_ ziyj=U&vB0%Hj%%%m);H$9>2|(}fV%s_O+jPxIHzs)UVT$= ze>ydKpHZXT#nEQ+J@?*YjGKN-&>dgeyY!Y|;&D7Q$vBhf{qIlmS3eBi_@8SU|0L-> zXj`y7(|gKi!OVE?r+*JFN&KIS6km^rzs*If9qs?LiZXM?$Y`}=DsS)7Ci01e@XF{E zu0IySIfXX7S!)wo=F*v|TAL6v`#rBM96D|^BAiVk>Jn`l7l%KBCzxD=tJW$c*Xua6 zRuSnxEqoB(EUtH6XKjQMp3LMe6=(oE*|2p>mRo2_>6d$iS*q^3lUMY zxerw>JRvWW_B!si$#pNARDq+0$pe3@~`7YeOAL^*JW)w+XNkM(NZL7ZXm)Uty( zJ<#nlARKzaK(9ik*ofVm-x_1;6RIz-7~V68fci_}1?4v|hf%)L>Z+ycLC9LFED=n(0A z8TLglUgfHsILnl@Gc-vZ6(LRmlC*RbnbA@c0OEAUUD+NE>B-UZT6>Tz z`4)el8tWykn(dc7MgdceOc%i3Ug_zuw^tFHqz*QHZO%%0du88%y}fkKx>hHmyl4+r zCwig_?OoRLgaULJx0WZwg%jZo#@S!N&ls0m;a81ADyZd&C{Zk~^7{OjD=f zMxVyHZr)B|YbPz4@orY02k&LUnPITcE_u0Iy;C@{hjC6vfGVZZQIsNUtVu*|?3O(7 zI_w+0G#2hQdH#p6_uv?o&W<;E8IRABR+MH4a~-8an`ya9oRkih=+Q-SJr{rT5%|ny zj5BY+KI06{poh_;$V*_Z#VU**Mi-YKfG2wXJ?u@Mckon`hr{97o)4o7>A4j}j?E?D zDq|f|l>5F{IugFam@mY!+@)4LCDRO*1>|3scx$=jYyui1dJcEIB^3+Nj9>ryDO*)}oT{Cb@CkMj}hLWc*hkdJP zpG(2FN@)swk{_V-)JwtlK4$u2g=;Kwa63#vl#txA@Gr(X7Nqb~&lI?TQKCY$!A}?$ z?}SN9@)D&hY&9;^ni>Tn{S`f2d}vRk~JtC!e3Lavtdr$EaH4%`c?w|=J|Ls^p?;L z^>WqZxwS9_jP!@N?L!$I@`!vVs*q24iUpS#;mf#fls~Saml2CAkHZ)}lJ5h1*DG8G z-(YeLM&*@W|1kK+#@dTg#?Xoze+XXh$JX$#?%odh^1TROHwFECDf?zl&V{|7rYV$` z36zL-4^~RXm6zc*FW(G%pVjhw#rtgbKzKjX(W}n2WT13nC&FLxzMT3N7c(p%dn-)l zQpzdv*NuyG$_jdtYZ17@T}GV7U$smmPKHrCWvWu0;A0r)xNI2EkCYFrwOSu20F zi$oUR^DUU6g{w6$e-R$!BhZr7ZezJ%6|*bj)XDIn#u^#)3IfTsv!Z&E*P)QrnZ{a# zt)2tRmvwGV)z`9mF1*~75_B5vdWbSmgr69fXy59ujH5z4W2`e)s*N#{idEn7aj{nQ zW8(my(PP0%v&8t@Q!Choj-;yfGcL@5eOu~>LyZDPwK)Plz__f0zTlYx)$o7mXjP{+ z%{X3%NlWtbHSh(-dK98|dBnVzl$zC6SU?W**6uN`P=ngD#u;j^rCcSXN%z`oUOoZ- zgK_mSeiIjsb2LkncT7#aXirZR_iA{waq?(*+$6iuR)i*MC#3@B*VcG(hD@8zFb)}P zn|zl{6V|lE%V|d~AxJ-UrmGAOhxX7qO>0e*#js5qeK4-n^t`doE^OLjT)rKC*EsV> z_!HxBH-5yXjCHKI=7e$hQ`mQy>=d}m zbpoE zquk0}`4U>DY^{__=_Q_oZ}~ipO}mDdvgh>p5#dlh2HtO>X{B+1et!5M>FY*>t?_j4 zog>0S;)(2U+`GGx_@%D0d)T6!hwmQlAHUtr)JK1}a(4pnavSt!0m@x>Utcl{Y#dtzU{OhXY%lC@O0zCMX+~d?I&r!kj_u~`qzGy>F8ki_8VgE zh*9AnP3O1Y@6-Gl{BzTxs7ppgMZIwp)n4q@jtcj0Yhkg2!ZaqX1|Dn5RJ$^oYR@5< zKeeVt#DTQ5n6$=^4)^a=@WXwAaa;>V?#Hlv)vX+Dt-oP3EjW<9$#ieEvtGJ0XpBWk z^e!J0em}m#tr%m<>&8&lfo}7da7rTkiQ8w7kmm;InLE+sid@+WGgd0U)IfLM9^uF~ zYPyrJZKV2}&x6P=wh**&;2}PEF$umJQl~8=$6^lnz7+=yxgs@Ct(xa zC_Yr~!D}q*I;}kTkw&@QoINS{^)9m)z2a=9{uvilsN`et1s0c%@zJx+JN zo@T_8N6|bK0Dsh6Ys6>n@ZI#aJNiTV?j1cZz|xH^@xd94CO&TP?H$WqA;WBAM|^l5 z%SB#CFHq~>;M-!o>(2_e28o4lx>fVSFC`XkciZNL$1vYHVLl%t+_L%ME$mGndoEY! zxy$si$~}KBs*AR`js;w%+tm^FUqsrg+}cHijdx?uN4U~mrjPsG^XG@V#y2frjCXaoj>TcL>AbqhO_C&|P3f)f zJB!0g*C^U;l9?|0KQ{yYOBVQ_cszgndvb)^Kq`zv@9JZTt6#v!&hCHgz4wA}(CF~FXd3r`|Iak;eyhW?lD#kA6Ap>@4*V&d_Wzv5J@UTr z;>7>{!lg4#KW+9o3m5RhrQRnW2>T~wK)qHoZ0*On((=J^a>_-(8FQ5_w|Ru zYS?xc^=3rUGY`Q-aI8hIUl{}^Ll7Kk* z9?aLgNPjn&;Zz(hg4cOD-CfhYk_U`En(Y;*_#&a%UUBAG_#@-^fw7@6WR?(qqHoJm zVzE0Gr|(Az@y@TunDgZ}uYKoH8dt(IjS~#zI+9iL97BZWf5oZmVR~7lzZGuO>1Oy& zlczCQoI8+olC#{#$7qjb*flUwo*SfWtl%`&*8w2nIOfv%AL1jc>ZRh3*v zG3fjcah@XS{EsN^>9B97{Ct=}LGthi@Dkr1*^{`q+5&P%!9O+*_JE1Mpwmud`0*Aq}t{y4KX0!2yO1bbsgv6iW)yA2F;h+12axe}fo!n6PIpfr?;4Q`p zzS^W{?MUZB*jFHhPwH?G$y0a0b+5CGKBdz^6cB%qfZdIC2CohWkzCuvbU27uM<(lV z5OMU{gc)AvAINbb$<@;O-Y8D}6#kCarxCOdS8^35O+nh@Zq4IiS#z3t+k%4h%yMv= zS0njgo|kWh8_80~;3}_kD!j_;>@;9D!^GJ&;0?$#^OX8rsz>4WM<;Z z4EhR)odLHQ$De_R8K-xH_b?8+;PJ*X1)i;Ytk zvg0cBUYVyah2OV;IEK@So{Er}4?ke6vmnA>8mBic-x#(GOaB@boIePmFcul6JC3#lr&H$u8E&p`GmF>_q-Lj5Wipo$Qf5eM~#q z#W_ly^)8~>t?V?D#}~lQds`=z!D|+fSP%PARfWkB7G?G>Tr^J4g?%B?R6pl?VB(uF z?I3-f*p=JUIET4%2YZ&>w+)Mc%pad*0jaAAINdW|r$|w4@Wh<&rdb>!=S-e>7$!04 z#7D!vZL;^lc$?&zCGa}qa2ouyagIjNTTt6Idzl^QwmiZ7SaJ)(?WUkpwKc&U)#NX5 z-8f02(UE+7Y7HpAx5?uJ;aSGYT)Wj3H!%jL5aMWVdb#HVk>6^ZrCa5n!V*ygJTC9e zAN-IhikK;-j)(Kc=>y%0z>0AnNj&4!F zSH$^34;QoTB6bms1r!h*1z+jq40zg=E_wVDc$;zJDZU{4f+nbau~9gDM03MY1~j3T zal|^QTRRHHYBnt|wMX+~IAL*$1?X5io#YW^M$;6}GfpmrDXip~M`3!6IJg$R!Rwp@ zuQZPR4gRrloKk9Id6Z@+yxutX3wlD)J4c@OD86U`S?+~e%us~vpI}TW&g11pEFjkN z8ztXWGsnWdt7@IE2Qn&v8}Jv+E+oT6Y_WKjCrb5*|7{|=%#V&y9>Ak4#* zx-ofBzST$G&n^2+IQ57d`LRXW8o#kB$M|UUz{*MfcM`2q@vfA_c$G7~d@_8t*Pq{e zz;DAn67i~=w~3$rL~o)m>1S5@W_Y-%B~NiH369V2U9%}XH-2P-D%O9$Bg;DN7MTl2 zY4(l~l2&us-?f5d&zZ#Q_BIyu|L9d`E{xQ9i-i|(gJdIH~hKq(UQ*b zYJJHka$xVa=fWV~lX!>Up7@9&MLgX&iQ(E#@54B!bmHrf&+Eg!?K32-b5W%e@g<%= zL;kHke6_LePi^0gg;tH%dY8NqzR`BX5wsKu=$~GQ*7$|56OtR&PGJ4UulK}O{L1U= zDanQdB_HZt{eHN&UO4jRpZP6(*wb$8hvA~cVVm9R5BdFCciZ)`)E&KzkE7j+ZT!UT z=jtEvvDPj92w}>-qK}zw#K&QGBKe}5{4u|5SGbEl=C^JO27bWZ`7u8k$3JDS8ktIw xeMwaM@gKNtABV#d3qNq}e<224GCn8TvUJECH|H{cYGC9xA&*dnbT9qNh5@Wgq{#YqzD2kO+|_zpwhvHAfRB)0aR2}6oM=jq}fqX zKsi=K?4YQKsE9~W6jVf1R8)L_Yt}x%z4v(@pX>A7d;fUz`Ap_JYp>nbUVG2Xo;`C` zz4o5Ib;o=9ZME&=j%#^Lipt1Z+Z7??w@UQTWao~Yyo$r76>2E0!jY&pSQ6^T3~$d|CKHI zzm*Z^6Re2-=Pmi41^=z%Q2jmHzqTd+)dc><_{o2{22y~?k1MsmvL*jfq*%Xd?eA`H zKcmI|WQ+H4w7zI2{o67}-v1xBf9|Z7T5gj6{U2`0zmj?0 zg#FsTX-od?gsxev<^8kU=0;lHpKSR#y)}P3EvV)Hhb?)O;KlY@{{Qxt{3kN3b9uG) z-`e(U*6RE)U#s)WE`KYY{i^o&w&dRnNXzS%XKMcwTS@*f4O^1`{m1RDHCoC4+Lm0S z)jMh8k?qv+TD{@b|DNspBCXz0TUkj|`!8EEEgU^jEBlLE`Mg!yf8OdB9nk!(&or%m zdV8o^tFN{OnFBT6l4*MWvL*i{ zqs9-vs{K!H$-k0#(;p6L>8+x2z4k9`$^R0$^5uit;q9BXS|zq-Jv(d7Cd~OC*f9U| z_Y$spyOH*1Tk{L6wSQ?#{>222DLbJ3D_e`R)@Us*Sg958zrVB9=uc;@xH9YFo;+LD zymigK;kkMh_3CRjHWs|RqUDIW9Rp5CGc?VZMZMm0O0&n0ykz{?q2q_2S2^kY^D9T6 zKWyx|!>Q`FW9rP===7k+-*bA>kR4|IT7OHgk`}eI^9%oG(D`GAkG^!o$Q9WS)VFD| zTag(#tadhXTG8f_-_79YvBNJMJbd)n2_xx*UT$8^*vCJj6XRK#WruZ-DwQf+Gdk7_KImMVh+`Rym@5Bqfc8Vy^yIFt$6FX3DNwJr)gS-rZv`VqHVOEYDK#7f9VFQI=ld;@}%xEhdM!}3O z!XY$^(MQ<496UwoYy;mSY&{0PQ`qS!7ZdYo_IHnhKm((-{G z1veEos=#OlU;YvJWZ__Ua4+HbL*R3SUHFfs%pPA2R%Vaa2CKq_KLD%3nXsbu2I3}> zaR}YSQl<{WX{_xkvzcIJ>i9tT0=gy_C^iU;0{VqRfo?qomVWID{r}&Jgyn zcMb@fuWFi$?&#~k0ERO&vv0X7{Rk}QHdM8DPr$*6Dsncsr*QlVuxjG~!d-vRKq1gQ z-I+=U&En1%j-rO{!z!KL;HQMcD6spAunX(B8-(M@$vF5_4tN-KQ9Hl(UBJHx$58Ts zqjVkwtF9GB0RqKJ4j&4jMjSWtGq{bg{w)}3`Drc&D{I*m;Gt^#4~)RU7^Tz_th$*u z7Q9B}rUiamIG)02rwYW*=w*sLiW+;BN@o`MGGPM+@~#yQeF?rz*jkVF_msI}*CAk~ z1n6)&??qwvWbm89!B${&Bfpkt4iDbUY(PJluXs1Ou5b*!Dp)S;B8^~krQ?GAUW4{` zAH@OsH768;*9ZFvd#Gh_m~aqbL1iKH5AYO`hgX47Q@=pydcm|Gpr-_vh}?P=tSaVy z2UZr1hr!A9DuZ4)fMfWzc?P^oIKcA#!X9UENI23Kg$*hl)GVZG9Jm~;{2*{Ic!=l( z(OjVmg`Ka#6NQsb5e`&sT+}{vvjoIZ>JSMBV&KKX`T{U4#s!U{2|`Z^Yv|LVmxRN= zf>p(gkHFYiUxyV!p9vd_z~8FzKXMli4oZN7+J|jn9#X?`Vf#aHfpFv+aJk}1;3{GF zV({_8777+tp6?>_aBq=EQ7OJc;sR-%YxZmm@ika@f(l&jB=3uaDXui@2KdE$Jg79kL;054yitht&5)O|BZ`ZV%OWw~&o)7*>aR z1%~nk8S`rS2{=|(oR^1FGRWu8A z^rAymTv#@G5i@G)K8*vIj5F3-fMH^0zM_rJ6gJ-i&lmPMAy|NQtZeX;id%zU6n5_i zBM$4>Mc|JVBfaS7!VdP)IZi7mhc>x!x1jhJtGeyT#zT!XBC>)>PPB4o2pj znKv7JvTz7Z6ziqrD17W3VI7u^oiCg;;V7|7mC}RYS&F{}s~SgM0WT4G0NpEw{>+&L zJA&1y7PtYd`o4$G5!);}?r!idVI7?;wqH1UANY_O2fXuewGxy7b00WIDIuYFrIJ^J zj}?w#P>RDZ{2Ffsqac2P(8J>ntBF96&`fE>rR^ z(El?~5{|%^Q5i^>nNK_!^MrX|%RuHVxB6;Y);eM1G4R*IkviZ%lui##%SI(w-yIB2 zDEYnMQeh31&6Z{zu0`M+*{Ut04Z&*cwmN{-$YmwLNQ@JW!=tme2?vLQzfu`A0UuBd zPp<`C){lKvvvqSK?`}wr(X@O>_^(zg35_hPiGEzE|6J4l<3!%8kYBB7b<#RhMaO%& zX3WQlzH^D@)6_iCp`lX7k5w z^;k{LmWq76NYiqzmjI(1c#h)!HG{U~eUR_iDNh0qMB(F&* z-+v|Elu&JD&C*Xw^=&IQd@|NZUI}xmp6#IX7G#T3U;wyS6>cNAov^tOd=k7#8KFQm zZs-Zf2T5iD7^+~n=*Q}V$B5iRmnfK^(ti`Ad z3g#<03SDrIN(crnz>wsp19vZ2A#y(B6s%J6=fN+DTt@*4)+_lpTFnXDOZ4G2!?u^| z?P{iN?~{ihP6UCAvc6} z2n_e}rQ+siWjC3&$_0>9n&XKZ>M_U{6~mU6d)ok?(7&cP8{-YUb>0 ztM9Jau(LD|{jvxq;0lB<0pBW`W_eBYvqW+hBybMS-fII!m3)SYir|mTQFvX^kHRiS zhB~MU%dIe24Kel&U^T=Pos(6-H{k9n z0~dUT$RiOjJeu|O-)lC1RvF=ILaUE2M<<1!^Hhn%f zFNw0G8_hsD0tn(iWAhP%ndot0CAUzIv?tpbtJA&Ko}g)&O2@tq<9?d&!4Q{b_-Ia= z-@xzzUa{|w8!i0|y28>=*N4zr-i@Yw8@mVT0^U7G&+u+C1s%PIF|q{>%n3qc%LVCGzcQGAA9KK4i zieaUdJU#zt^oYE@WYW4Nt&##_(+$1~p5 z|8OFk+Qs!X6#F_a^Y2WVXXpv~Bd#Y>T{BR5I_+VrF!f2MzEF>#t#}IBZ_}Z)v|o$T zD)cR_u@a$awC0LS!5B+fm1kPD4odzAZOzsbRXEhp3;dMkgNG`}d5SEgov+6M=#|WzzEBOFggXHul zX;&@%dcAIHOpgAZuD?m0a?$4dXjU$4@dy=-Y?h$9d3r1TWg5dg4or9E>tT9hWV0~6 zn1{xBcY1L)?atHV@RjJOW{GSJLK^#TGi>;?>Y$&{qUJ^xwaSNII3={VYyCvVI)o`V zXEmoQMVr)1&@D}km=V-y>8NJqP7r4Sk(c5T2z5NgZshwKJ)LYAr}OX2h*P_@wc_;FxOhC(tDPP&B4?rQ z@IM|$+zJ|X0@`Z`P3PTsT6zN9sumRbih|V{e73N$0z6b${{svc<3x;W=>TFUQxM%I zBA(FF<_eqe5AA-%nc!zsG@L}VR}^0ahR<aC@cH0*o+UJ{hd)VZqsTWX^JUhsJm5zRs6m^bubUgXyR{Ge0cR zF;M$Dr-R{b%zClbMbnWOAGq}(NY`d27(IyPW-IWoDl$$4hAV9K1ZN359cfTUJttrP z0y1=cj>mt-$tvDFn$b~Dw7Ux;T%>TYJsEtXu!S-kw+rhq7*Fi5j$R2?Wwi#c78BSU_yo2m_tRK(4410bfJj&QIa`H*hUvHuTfkdtSrOLVJgcwXns=}Lx--Z zjG?avD`W7$Wh!HsdFalrq-jk7!x%+e788Bk>ZSrd1)r%hK9RO|(i3@?K!nq?U+gB} zo0RHeik_$^lB*!XsKLS3BiK~&Oy)P0{0ZBQW0JSqp?}ZsYh#0)Ju}=98N+-JQu8*#Qq7~ zOyo9N*lDNIm&VW)=b3{B_Da8Lo(`yUK-3RLfPPgZ(?Mn9??fcLZPp-?XrOK$%&42z;l= z?E)}Nz&bX3A+Su?Tnv6r$v1#EDmnZo0Ba272s-Q@*d_tm7Vy`?7WzZrXBFW(TsPws z>1P0Qd2wNfxlouNMtX1%)^Q6d+F4KFv{&94)vQ6tR0%QRG2RSe8&}C5yvQ%b&EWfm zjW5AZD}9*3gKM&mfn2?{*uebfsmA2lEPklSI{awOQ;lid1BNN-_0D>2eLd|$S@e+< z?4l1UH}~Q~^kURdr4>vbi62B+{QT~r8C?)%JuTjpM$*!*`h`_}p}Zb$mrmr9qZ0W-U2?#;L#i!|d#HOiy%Ht4 zqMM({{BHUM?TufdxdctFQVA=Y=_pG0RaF!eBmAB!3S1_Fox3B&QkvLZ@7$bC z7)g&uFk$2jr8WUPL|BJ8Bcp|_rnI*^TGoUp-Gaz9qMVRhA@ZE4I%u`Xn<@#``A~5` zFj_ioya)y(W~~(WVnJbh7+7^Xu2r;L>12XYGrH{*-PY%%=A5Fpahn_P#I!Ap4o9qO zj5*R=#_S_)ZmguGBLZzx?fU3-Oru^l4eE!hxbtXJKmS_4{7mdt)5J6N#`-4OoG2?X zj$25to{7u(mPqhCYLp96-TBlbx2)W#`!cofkE^XMG>Ug;(2V}LmM^JCEBWwV+S*@l zXz^MVO5U8CYaQDf7w?1forcDS4^zDd=$H3(2l^LbEB}d$ur^fvQhDZIz7pI1n7+vU z8*5ckQ&M^@i=N+Ud-TGy`b%Wq5X)@%XIE&KoHu^t&=KP*hNq@Hr%y4d=k3u5b-C9% zKlRXRz1oqBwnyKr6;JhjO}{sohar%!(hAYk_VwUe!rJwexd9$EAEHVTMbT~=hCEi~ zr`K9XVSX;7brt64YuahT7Dga#pm1~wc(Aa}>A-P0ogj2IoK2V`cY~{i!z;i@H^~7W zXK>sc@cDvn@w0Pj|e4zB+w>>wcn;jH6b z0gecV&I0EN8?S*eQnHTq8MsO~01FyawNcNm8U;F2r2M$b7%m*W7mW7cn6cjA8N%L| zG;t$*XAnd$h)6?pLlrRc2Ur!*orc1z0`lV%Gh6gcoJ-7(!a9;Rl~1{dXO2|zZeZm* zTqN^qksBDH%p23b^8gN%zrjsvHyhvv4F z^}?{KrL5=e16N7ltd!NYdaxf~y`tB}ls+ZYtKwj~{^1#>J z{#kNh_5~LU^K-g@DiAwnK=tO(d*I1RXEFE<6}KDsec@17@OEM6UGUe!-hA*+!eLmG zSH%_9Mk$Q%aG<)4wE~L{mi9A#r z{JgMtB3PA|)9_Sztx;h3C>tcqI=={8xJ(P$n%0N|^jbK`kN^WN5QHzXJn{j!QrH_n zV?NRoWuHRSM@0M_D~R;{B#r}*6UN2%l8^M#s(}zas)D}FNwI~iOmY``tU%F0|xe*WU0_4)cX41eQHoGcZ7WKCQ%B&1< zwOCL%$%A1`jksQOaES!)s*D&i=R~6z@?&j;BQwFBh4sPU-ojovc#zWR557RyZ3>2! zIGxB4@C@N_1MppV*5qe^b4=`h3E)+BF~4nK#`?7C6ZF)r5UEx%(2;qa14q;0I&nv( z_bxa?*t;04>cOkc;z*M9wQs%VQf$0Z>@zoL@iPF-oxc6*HTeo7a3+zO zhwv%p5K>hBsa}}}m&rIsv~*nMWDJwE^jb8AwT_`_(9%Dnm7nTu^>=Cir?^jUNjcm6 zT^rdA+NSU9_7a{VVa!TDVaigqWVgyfExE8fJ(zXAWWbfkLa}@~dT$nd+P8X&rf)~$ z@6uA~#p{zgi0qC$@H{UfJz3h<3uc(!t8(xmvZ*8#q;GDjt*> z5-su|I3jYM%E-w)oLi^Q^!xJ-=;a_w|G^2e%lYAOcE;!Wh5FSr=5x$}A@#&cNhL4| zjMnBF8pYr@R8CRw2f{qWCXlLcKs-|UTyJBHD&De!Ro`4AXa&3bZ*soV*_>op2SpS$d?eg6t^9#StTFP#q z?5btA_zQhSUN%-6jK`>jg!nIiiX?=l8}p@d?fknWBfgHwU!XF2kmi4ha-<-7N`k|% zdOo@+*Eu$j)^jlGm%mAZqaDEL_#7M=MTZcqS5nSyxO_t_06?>FWnyrpf`n)}t7y<} zBm!F(G?QRn0A6scO5{hH!NEwgpoa>EkMsHm&ci&LR_(^KvJ!|c7LoTV?L`bc3w8GR z9^Hs{uTT%(wWRT~nAzO>#AAMVP&h>N2Blf+AoUpjh{gy+4Yd!c-hVQMqkHsi*<12ke-gKv*Jj~bzpTi zUUqZntWkAEcdmm|moJ|W#(?RY9{r&XOvdtB-N4(@B?0eIa_H9iR^)s|QRf$2zHHlz zxy5(s&|bfsCExnH&a%5eb~C=!ceHnL=BSH;rmJ07oz8T$O5_ka{8@fG-2(ZxWrbsrkACmq1biDe<=n!&X^zcmR_s)OYp72daWc5?vew( zx-Pw6IL3uoF3f&cs`?~fO_gpGdFU$eXGiJm6E=`|J>a|D*(5C%*=}?ZREY5k>yIO)hcx*joaX;-lMDFX{D{SMEqMow2uLA>d{_f3? zzaxyHY2f$z)Fdy*DZ?q7!+pL;m|uq|Q~CR>4C$a;WvDmn`+SXX0K-k$^+)jxrE@#v zvyL##a(F3*W@)Lje$exqCtt!z3<>g|u^kC3HgQ@>cU5!FkpaQne`Kt+(P-&KHTL_c zgo^9bJ#sqY+x7IR&Y5}StjKrYJc-WF66sw~Mq^smPtT$e&5aB!GMU)i zsBiy_ibQE~bECu_1Gm>GW09FfTbdhjV@wm;3l*#^$TH&eZlh7W+eb5wF=UlU z>p6MHB#ahSbjx><#zyv4DWipP(M9gDJkM-4{U_#`|N6uJWs8k@p}#T3OqgPBl$yBI z&<+0u$iKbDr0Ekzf)=+3WYWUM^&_-zx0y+gO^Z3HmmW7N3|h0+Z9{vn$Svk|sEttihrrNd9Xk&^Q8)wLPrFiB{|-D2x1_8TuY-dc35an7j14RgVQA6r z5$3m)cp{qR)@tyR!kJt+9J8EXx8wJIeCEEfNtoAbYdE{H+(kSM1!s;7z$mU~$wBlp zoREu!tpacpVdqhBYhiCQSXsrr4~(;#pD0FpeYny=!aNnvauebD6~azA7=4)Kyu@C= zn;D~c1c~bpNq}vFaXR#so&xVw@)yA03R@k(ILG-Jpg_C~f!VDOR+R}g2E(c>=LJg! zj(z>1;NyhtZQvx##{of(tlE{I2^gwfGdO~3OTI%gE*1R@3@*l0;Y>7%ozi~ssaIYQR_F6d+(rYqSDRyl}R?0 zog)F9sa-1UJPB?l9N-A;gn22ZmWWavTGTGenr3i)XFI;S+F=r)FBA&J8gN#eT!-XT?fF}!Q zeg%F**y;v;U+JJJc-ETZ+8Ani)|%OU5&V;I=yVjy5cc10j0l@BKTlfw4z&iV-b{g0MVzHMW@2nF}ru)=?N9HT{eif!hejk!cXk#&UkCFxX4j zxgC6tuz5N7d}ivm-H0Wh#Gx7mvW^3*dh(l>!37c}`aJkyVSe*6m=f0T$MfEPF;Mp) z8p1F3Y2fX`UVE@=koYT7EY{&yPeZj-Bk=1yJp0W7)(EijUw+mVLaVc!A0zYZH#0w# zR5$4xU!|?=*I{`2}p9>VY2JO$U0Q#kS53HO;M>peF09l@auEMVXGRL#P%2)Iq z;B!=5G!wr9$U3pduw5z~=m4Ig&TNE(WfH(+SnPSlOTcdkJ9EMB zD|vnJc42-59aA+nnxTLhB99#hE))*c1*?j2Z{VqME~tLGrVZk`aXzqTBA|ybFD>A? zah8W(1!GKL&b$jeRyeB@SoQVrDd0IuA59ToBy1f+ZFb>?@CI7G%c!gx2V3^S^aE1j zzl?sOrK6ZU@m)79N9Xj5w}mplFm~o$jEqs@VilaJJlb4N(Jze$^bNFgmyxr8ZcSuj!pp3G_SbHfB2 zlk?!K#YC>i*{>3%O8zCdfykXr;A2G2%MlXTIGx~o;1lr}gcIV$rwLe)12T^V!&JT; zqgSH8$OAXg_-~Az?H)l{M?wr${>!~YrHAt7P8Bwa!M8{f&KB@2k%#)zti8VNR`RYf zZRXv$)SLVYXmrf^t zu&^C~&PBpp!2HXkfbQ4et8r%F2(hba`aZveOL;erHt?=7CL;Z#{O^nvn9*4OosnpV zBJ%rh9E+1Hcv_P4+JRSzJc48k(5Kmy-gxkOk$X$1WWS$FXWosY3-%jx`@-=GKSJ+N zhAlkG7KI0nWW>t?IKd#?o8L|20(claYGdrJ0P~8X+OG< zukF6W1ocy*$Ie#tvM@VL(YwO>B=CpmSxA@vioQte)1e>W?@+B{NO5?sv5u>P6IAgd z{Joeu|L9lq0^W_I8N6#u%l)I&rXLN{NZyLE0OM!+IZ)keB?$wisf#eKDLDjWn>gs}PP!~-gjR<~CrBe(>SM<|?yVw0d=*4W z-i@PGKN~B$A@>s4A*||NvQ1)gP9=Mf^SucRbt4eKAJ7vJL)$Uc^1O!H&b#{t9~0LM~AI{ zLOOGBHzgkd?jdr%BC0`j3$2NP>F^x0LyFT zgA*bT^}l_IiAKMDJ^qioeLpkh=zKtJc=s?3(#=F3O4D$Kiv9ptbx7l7n!#GAnZ((o zn_UpK$S_MI@RUZX>d@<9m~-{ZX%9m5=P7EM7v`Obx708Sq>bPBdf~uknq``m{PnEH zt0m8zZ@{XnWUd3N?h!3k_1LZO@5!X})c zsj4MUrZ%mw;?4ng681cBe`a(^4BJ{$buQw&kfxW5QuH+Njl#}wFf8Dkv@ZBw;fx4) z*-@-cHXhP#x>n>7G+9$sXcJawstWDPlj_9EUr4DyK{x{rs0ayjKd!)_z;YeFQGv{v zxj+?7g!zuOqLr{VABYr&I_(z!-B@B-SY61DJa%!ODW>}G=> zQ*v0R@>$_5G*jieqvR+Q$IZm~rSglTMA z)vQXGm+v-fCmg$mcDUw>dmju)lCT?puK6n7Ekb2KBK07ge=I_X~fB*HJ({owiqH*fP*ub zRU>=7!1svU>y-)y&2x|CMV#q}i{`1wA9484yz$a4Hk+P zQgQhOnDm8#e{QeVSqT^ru9E4Yan0@6h-Sru6xm=fn6?m;Zuj+4Pq~ zLT4YjI}F{ETGGL+4jA*|)To|UpVr$A>xoR;w6sdSKc7gP6Bv0F%Yor=JP^=J%)6e{s0Vhh z(-pismDciZ3+11Vi1&o)g41z0gr4EuJPP*2?n4^LyE|w}Pw3p&Aa$^(d8>{GsndI# zlb~z#LFiS~n|E*0;yz|$s@hQ}i?;PKGw=rX{yt`X`!zJdc~o?USz_E$Ni#A^5;Wip zGj3t{GiiG*xZh+P8j%3aIs@vr;U@7bd4Kx0$+QC^lsnkhOuu*Ep+HYqty{KMFYk2i zkgD!$&M$P^^FvkR;eY&4wfe8VvP1eY#iLUrCYX=96t2$Cr}@=RBbsE!Gt2+%^&C75 z9g6p-t8TLEq!wLiZn5c))kab3&M9VBlfR_Jk3jie!YQM@*Wy|Srv!cxokal-Mt@=U zJ_Dm)FuOSUYTbm*AQ)o>%Xx+s?_K(=yI_nDzCK2B?IK|h1Fd$2VhnINx%fH`PU_mt zxV@Nnoq22|j)T=oX*O-W&P?dT>A-ckl*8DrcaV_aZYrNpO_a-ITTrT7mT zhG4xZO`B#`=3&gxe^4PfIiR)t7{P|L9>HZ8k&I3%7-KQN9Ki{CsHQPc$p=xz9d?3R zUvGxnT>v?Jg>~%N;QNJxCxV|=jIo&S%2+3G8hD4WcNR^(9_6lp2ZltX-vv&nXgz7w z_3&2Lq8-CX$`(o*h8y2s5+-^BA$~j zIDE~)NXK%oFZf|$11{sFghNQf`34&+1>dF_)6L4N-%!d*3FkcA`Lmt`p{ORJtDuqw=F}f@@xaW=1JEcAzWGfhcb<5Gk<8d=I=` z*qcln5UjsO2e2!H;dynmpY09ci-nDC;H!lLv#I^f=ml?4znhWn?FdmN(Z+&RNdj1^ za<`q(Gib@pW|wx8QF~=V16?aPThik9Y=SCw5cLRtpz^o}{DW}lL#nvN?1R@;r{039 zy@}?2UWM$W$DRaZv7FzAik+?GuVR0R;!Nz(a;y`=+qt)y zUCJtPh|cS0gNny~66S}qan%Oy&9rwB2B%+cGjo$2A%|1>Nz4P|lAf7gK#2DhcISYV zLEItWt3+<1wfGZttna`u{E0ed9-(;RnmGtv{zM(K`8fC~CFk^CR{bu}iRR3NrLLi8 zW}3I=&Bcl43U#^lB3Lze(4%3qa4s*V&9k6fOowDwQiFT+nY5|~H}S>f%tqLQ)Mz%G zp%V?94G%e$md-X4{0-VH_!5`In?W09W0ZRmBDN<)fhSY>x0}~HWhh|!f{~}0(-(}! z0XQu5_|I%Xn={KwQ@iJyXBfBwYCj(r6_?Qr-d#&uc{h(L7GU=vRWC3n8Xe+v0Ecu= zqAZurS!lMxOTKd!nvGGyH49PRtLRXoEJ437G-D3W&WD>(<|4DiZc>HZcr{lxowmq~ z>-}laB3xxWLi71G;x1uY%7^=C6Ymz%p+)Iy4}9Z3VO6zm)k@wQzWeLc_{HX-_U>E$ zrN_a4eChG8eZ1v?a)G(c{cs}fc1Ai4fNJtGm$#=2lFd~ms!PA-F`A(cOwO; zE_|J5njPB@6Y9up1^zP-DJXE(QxvAUEkh5SyXvju#gFrNZ+Y<}*|Z{KXSjg;ZC z00v@7C_yE6s3aO`IAE5asn3A`&D{F%nvF#b8{RjT0pw4Oio!AbCk{XNyb zQ460=gRg%~TWzat)$<5hEn2*`#Y0s%hSv()hr(7furgEV59;n%mHet1uh#HYEt=+_ zH8(>vS*3I)7)9k^o@@%DEX;wcX_tdyqC@k0j4X2dgFh3Fyaq-gSRQ$rDqPs+MViRF zQd;H04SK{B$VGSjS&J_;r0Y4xdo&|nJ*qaGXJ4RFR z2DsqQo>g04K{-LIq?|wh$NuhDWer%_iC3oZr~FwSnM8wvR!+YFGUV^fvW(wUj13cZ z?gfugx(JI+6Aq#M_*1~FA2YDc7j~Zpr~BXvS{t+~%T_>iNP_uY__!y`-WgZL^M0eE zkX2cQRQ&I^a;iPSsp$m zZW=`UXPhirk$b3l7+wjN=cQs?3x2acV~Pqs34Du6a5h~Lw%Qos&9pLXb%|hX&1|TG z7E&+*5&V%K&-(Vt!vPRTcdERwG@q6gYhV3ObkaYXnqWd_okIGcq+2Z#sI=88Pmb>FV~Ty>Y9;z>}1s4CFO~T4o^Ug)}O| zx&Wn1ZOE|B(ovF%EGv-*!za+%oK*lGk$}0`3Wz)i!H7ID3vIEGR%Kb8xoS?fRl@s5 zvQPEMwjR^o z3F7`%yNfWtYF`_p97plx!xbZ$+GEpl+Jz+ga0MP|10+Ha($hUyahFaWut-fg5dCt|mark{w;@F5u|;iwh$=H278_#~?_UJhG-5}axu?LWz?&qa^Z zxZU-#sM*O@h6SUkn}Go*TQR$DAubVV$}&5H(hCW}gYtIQAkZG?eMn$v@!jWw7E@2nW&UYWhh#SILi|;;|!*609l~;=K z0e}9RKdQ>?JP1BkIPe6xgD@|X*83_Q^iX}U(&+}iK-h$*=@W(di*!0HQ_Pv+e8smn z%=}#+zP%~thqTs09K0t1VdhVTZ8VLJ%fDho;2Q=V1!U&2jDMzz*>%9GHvBOSzAIvR z=x%U*VY4~-7-9P<@Cm|R7<|5JSM6dPsCJFM3RZ2&-%;j!reY+@moa?L~{#>SJ1(JaP`!p74y=tV1$Y=ZKuvIk&nzOO3gq)Wji!qy$&(}mecJh#F+f$P8% zlpI-`upP^dcfdC(9teirSRORM_Xx+!z>g_+;|1`1m&Qu*(JV|EvS(LtF5klVJfiOy(eGAE&MG7joU zfb%#QO;XGeD!}MK%;CD=&cYE`i|-J9c_Da+Ft<8?M~LNoqi0{GI1ZjJ932KmbFxmT zA2@lx90XdSlXVs5r{DZ7Y*vbP0S^^sS8`Mad>_j5&#c2QKk(vrW_~%wSu7me4MrQY zJa8iTIpN6X;GM$lW9YrkJ~@b907fRooDgd128Bc0!3p62{DHsU$~v*%sN!Y#@H&W2 z5fR@)@SPL~Yv=;*Na1i57*_Y?zkp$Q<_KEUy;;~meOxsl@JBNF=SWz`34>P%^Xn7t zY9)UL{Fd@z555|}5Lb){7Rnc>D;$SE22_FA_xRVNSSN%!2c{?;7ra*3$^~yyI@7^B zgzcqZWgGt8EH5B(qYix7%aQ}PCjyFu`I9{!+@KhlMNk;8g|Imve1b49JMpd)w&B0t zEMdz7-zywL8XhcJjC8CH;3tG#Si$ox0aNmta=v3`C3gwz-w6eal^kgXRbS96z^z1X+z3|9&2K0M>%x(Xkr0=R-vwZ1pAC)?HqWDB zuVNyk6GW;~o&$bdg85rELFJkrye#;-$Tj>0HwqhffWHuCLk9N?2jEg6)e`*S$B-J8 zBB*DmTyz|GYzTP|EJnF_cnbB90QQ~GKw)hVc$Ba)5sZY3p&#i0u2ymze3LML1~)WE z*j-73Uc-ev8j^o(sTk4t$Ie0=Ro0x|QgLGDS`m zkvj|AU)X`C@=qWXBOB)v@OojkL1eQqH%LTfgRhxK-+;LmVr)D^1tTarP&o7wc&ISH zQWYI7%#TcX8lxE5c=v$k3J0$NKcM6UULmY)0ly#|9tmD2%o8lpt;$@%t~l5&0p=gz z1H$%BjE#n{+Z-Gf=AYK$YldPJ!bYKa>Vr8@42B-FcMBbQ!^%nWCxv+GgJqFLVAbyW zBVg6ByeZ%-ln$DOr$JbsUrgs|5N5oB>rZ_!hX;dKiagd1jOJr`06r2^b`QY8W1BIi zae)666%OJnorM4tn%O{CjH?Pp;FSD%AeQsj9rzsxW`3|3hm$e~(OU6t!u+0aT(z8i zEf|Gj9bO?2hk=-beUHb%rE(BM)5RwX$1z~?r-FQ?C1BNb!Aro)MIPx)J=Wni{}vjx z4x`SE{uRC-BN_sSMT?)v^G_CWN_tOlJz*ZW_$P~4Zk`85NtiXnI<|_gI$s%Tc zKE&_vGDk7E@J|*oo9}>eG91MR{LnLFstVvj+#+n<2Ucf1cA5+v`}%PB3{{-~yf6dt zSv< zLYb>Y%X=8|b(oCc#D{}FR`N+S^(|{f9)h!`tKiSTsy7*V)MGsoe}qP@$L;Arn$Ek6 zXz6DGvc^l^8`G03&E;U zJd8$(8JM@=Xsf{(3OEUKAg$TpS7+A-Ye)BBU6`!~bw?2Yf21$gk4+=k!M0ofq+%9r{5wuW^GW<$(;XWlt7b{fm?4A$)L&-5P)JB|Q zq}_&)XCsaaM?8*ed!;B8FZEBXK_>YF7k1aqYqe7>TnSAGFxB z*{aMt7gJ6sV|q%c&Z!a{J&T%uY;~!+9l`ME^h{En2h+ijqw)Pz;pKHwB8O3yd<;K2 zf!2SFImI5SLmykC^d!F;Q};0pD9D)q>b@!JHuiPVfr}yMtLeJmrjr5xDjdSlR}xZ; z@uDQ5cqq935&aU?Squ!LB_|%Gf4UmvO$ zc~mSppyc^@xdTmAj6_+dG;&0z6upk+{D`)+OxV|Hdz4NWVe5P7oC!XbOLr^|P^x0E z4&Nx9AneOgK$bfk;nuXAaz4c)6@qAs3T8$*ebolwFOK59!t7$D`;X#Zg!NY-|NRKp zQ+~~Bn)ajKUm%i_|MRij@)gzP?^Vk^7AChV_F{$XleD z8g0X=axp~RMZ~{VSg)6G7>!r2?@@fVFn?pR9?DaU@!56>X341Hw0MFZ&9-C4$Og0u;rL~%UA)^u(OTHuOD$zL zsFs~x4$D77mAa>veO@g6yHsU%u36QrnXFN1voY1L%KtDfdmD1ZcHmFBEuW?RJ#k$*P`#*3M zPhEYAJ=`z?ztN7<>^^+M$kWK|k^y)WPa`vX%cw^WyR-}*%`?R;(p!S3s^E3tTNSsY zIX&!3eLua582W(Jo*wpbdKo$v&sX}1jRB7n4!#Vo77jI~&OPnUMlhFV^u$`fx9I+! z_TaL6(UTq%4gNJ49x*tT(6eClBCFTW77h#qUnLxx zhIQR`m%LHP0zHzGG#Y`kRkYSreFoBfj~1U{&(*)D_I+($4lu2+Jvj0k?18g}U%b7v zpF^&oHvQ}iBX`1Ts2hibX43M0DAEGS*BlOj)GTxzURe}PH{*rjaS@GJ16=jTSn$T10O6+9+xw0?y84fn^6 zYTm7;`-j`*MuRx5AFc+E*0k+3Ct+Zy=+)P3Y;?OL)oFzNW1&0TA1apq*m}RJ2%zrR{Jrv+5{nTj=EH;ZqVHa7AkSkP3G0mA{_rXfnJ#*}~k@qoh zbdZqHW7M3`4|mfnLdtO4^eT3@8{8d9_$hxyn>qM7h&qYL!BwEqLj~JZa);fyoIeM6 zcy&75?C|RJZ@@d0Zh~gq0e}4gT|6Wr{b_JQIFw0i??6dUq@p|FFfY)YJ8|~lpP#$I zOwhY`+Rfk)#$9&XvPl?BK2d4nQka*}a8db-3F#%|;dV6aE>!MqT7wb`|4z+By#{dodYz z+a>M8uycAvcjzSW#iC|9V2trxBEI$Xe^wjJpLg;|~7e<7euNI+F0<1D%xwZ z#QQy3c{fJMN8wdUi)T2~OSyTXFujyJJcZiKM~gMZT2@qj2Abe`mDSC(YCh_gNqZ5Z z=ThbZ?6y$L1rWYVqZYs{BXAYAU(_`?Uj*Z0Ciu8fe6+}FQ5)~ zrzHz95~A&5#S$m@1XV1;SprEOUIaY{e6|W6jr}FU-pANa77p#Esf#c)euqO`)^YB^ z=2#tz{7%Nui0fV!gsk`H$HX(M2ieaUA|kgLsMX)sNe)umoo1<91{HT-xzC z8sTMGJY0L39p^<2;g6{KGP~4*&#Kh|7a;`KfYr+|xc(qZhr6CZ>zCQ(!HQxG65F6z zo7P({eqNf2mj8z_*J|0anOa0VY+-8Fa=U#)SAKkG);}I~NB?WT0GauT{kco)8|8;m zEk3u`>U4K3E1TNiWM|TXlkGriZgu`Wdg`?=?TNbo(?iYvWVOKHNkcCge%^?&=T;2Y zMvl2;{N+^KQqM^Z*<+vJ56f}FWm`D){MYtnb_89IR}Ao-Kro9s?YG+ubGJg)L1Z?1 z5-$_raQ7TAhEC>CXE3fqn7tD45aHldFwWt={zfpom)V3j^D<;V?f}}l-%jMsg9wi9 zCxQN;%~jEQQ1pA8`j=4o_ZY_btxIi}1lb8N9G;^DR-id!D*B@|=6iJFnR0^QVCyHE z&#C0lN`#cPMhLE8{D=>L(Gi&WHA#Ln&+N^iL*L^pb25g@0;T#1b^gIF?e-!>&}1zQ zU6G%oGvjk${&lGz`yhCnl3xX`R*d5Fb9B~mt7-WUcH6wqkg+Kudp%gyB6J-&Kf=j- zQ==d4$|UYG`RO)C45J13GM3p!3-D#EFCPT{N;tF(l~$>G$edRcu#PzfoURXAlOJxg z+=ChT=@GL#4Sa%1=M(Uy=+Ybz>P=gJL{ni9=4aU~;s-4JESoue8buGlx-UbtRYh+J zRz>3PU-9E=R&}nYeh2J|<~HnMqcvFORe|A1%t4&;`6;w7Zvq}744bVyV3+g@p=$i3 znZpB%!S@S0Hqt&(*gO|}x-bv(d`-^!{2~}%lly6-oX$jHyEaw)WG9B^LZoWs#K9?* z1ggc?=Nv5r8DF3K90IFqnWeBEir^;=Ij?ADw&#QE2#1U4{+}?wBO6|`%)$I&QdiZ` z>j=I`$#EWcVF}g=K0pV5vMc*Gg9yVdi>xcbxCm!BrMKRwYuuiBq zc(AaS4~Ap1Jlv3~f3_1<&p?FcW|4``8o*^XvyDmxz8B_+%D^FE54UAM!$A+y9_)tR zgch8wVq61WD6HcI<2|C}sF(MYZ~%SXgGo6De)`Uzl=Qhjc#AN9SK6%l`yF?gGbF&8{f$v0B)AchZT8)O@l3@#p2b>vHe;IASN zzCpbYqF%SrMBX`c7w;~oRlK{Nc3>B|0M>j@)Wa<(^H;khpZ$T~9paMldf9LzVfS+C z@vEKa%fZSU`AeALffCG1S@;ngN8^t_gvSZ+i={95q!isRrKVQmL^fv|TL_+iCggI6j2TfuJ#8|b;wO&S&aZWom; z10NK*1@pzQ`9*yeth$lw(4gP#L~=Al$_KcyW1U1*?*hhn$k7}m6;md5-UN?Q$xR23 z7Y_CW1!4#vyaQpLERi#>yDiywZsGxP@J9KtmeI!Zhu;k;Zd zt~|i~f;t_tE34ptd|&D(`wdw2a(=cQzfeU(*NvyG`7A9ygqZ}5w*Eib-UC{SV(a_v z>6z)C&@*##0uFEvSpg3yDoK(cs32etWRWZaf}(N&5fv2#mBMfl)QiehRP-`N%t#Uu z6crH>5fG7J;9k9o@BiO>xA3jyd!KKuXT4`Fs9*2eRb63Mbx)-}8pXFS_M0O|@vD5W znfFI@Bt|ig{^3jSD{`8L{&rti=kd@B_Z@JGaZs2Oa@t^TNT-m~7wYpv@VeNvw|&10 zZTMYp=GjhVC~8*N&Lk|%Y!=4VVADsOiDBpU(i1SgH&YT7L;ubXY4~OEkm(t5TDOR! z8jD(pjGsy=YA?*K5JlaEEf`+W`KsfYmm^Ns9)7r`A`5%)U!ma`-&?|5rc|`)IJp{f z6y;lVAds6LQKwD)t{84SRYZJV6l*egMsTs3LiAvEY1H}A>wv2K^UV}i7rc$yN70X= zs`c#FmpqVPRkbNJBw_*NUkV!df_BGrwGnQb0Hm!9@4qa9HH}u z=~@hDmziITLLQ41(zx1Y`jt36?JG_)%Ss$Q#C(5=lZ$bXqa{wm=xb=J(@c|6)JJ>M zv(#xAL5~(PbBmG%=B`pF2YcxjQhFMt9qpJbWVPEoWDY=#!HFV#A=4jOJl*&^?_0Kz zH`gYi1=(3;&egf@9sCiD6Y6?zb}Ik+H1VptTmCO!T-!8twuMZC=FY?Zn8E+}Nz6$j z$B!L27@sZAzSG>fDP$I1-MGXoI=3<>dqrkTn9#vK)Le`7(Ii}=m{(|Npj?Q@Z~E1H+Z1( z1Tb2@uaAclx0w0*!@*O9?Kt=rtk0r{+YuM&ipU`pHQ!#z7R;Vo=E(e*wSsBC)>%sWv$8!q!abYem3ZayI`3Ugq!lBQ>>&WK-7T_PApj3js z71G>927u8j{TrYqhLAvVs5WwhT=0ANN)zB{_6cIc%*OyM!-V}{OA^e5tJP6jelCEZWgR%>YfGGv_$dz z3L`Dlw>yG^Vyp&hG4d2r8iQ|vd?Ox4SIt5AVtA|VCk)U>>=ZQxcRn1R5Sa>EG-H_!SG=t-%QI>pulPN#%>d?Np8?#?P+%Vb2C@DRPmvQ?145&cKBh zBkPpkUH2oM3)bRt(F-|RTF%R0EiJnaSW7GVBv?x;d@EQ>%SH8}y8Sq<-e4`Qw0!^< zL2f%|=`}%1?8d-g0Ycm+{G=8QEz}E`fkAtVH{C)5om7`s{Xj9aW zbOWn>a$?!VKg!)@c(689oAiH_v=k36MUQC>xoDL9Dmw#&c7fHdqIZIy6S+MejK<{a z^aX#UyaxQau#1|D?GO%M58f|~9<;Bl(I60E%se|pAmqZ~J(W%Cyi1K6v~TOFOs>aQSLr=nZI zp9ouLg0(a`y1^eke#Sol|3?`OI)N7Nr?&!}FYMr%m#D4sX5bTqIW)mV+y3oQ_&jvw zQa@4%6UZc)e+d+XuQUjJm9U!xBLd2~r-&bZ_rpE{hB*gQyb0XgkLNA3vJ>7lx0x-S zoaUu@&_dQYp|rJ3K^>5oGOkI-+1Y0w1^^;&o* zN}~uh2Cr1_{}SZz^V34EuQ9{Cx#NOzhg>BbMi1_tavZ~As1rUB^7h9uDu8ls7V=Qg zj$CB7c5x1dI4%-3U-bzUa9L;Y+Gvl?9_Z>kZ^zN1ED!(6O?rFt+Gb66rxAWT{?Hw7 ze(O!A9(ePsgJY9=I1h8T6qgx8vsu%6#isY!&c#?*w)AXhK7@m!;CzaMqMQ>#bIinZ zP%;Z}UX;_oDM0PIubEX4@lY5U+sqvR($WE0H6uJB0mG!t?2LWlY8)+vkWFFJSgdw5 z8LF^rK7@0o{MW_h=l=P+h{>f=JNU+Wzmu~KdOF|Na|ifui*Nq-x5fY4* zat7A?%W=u!V+N19cF2|43nn&zm67|^4p>nW=En$!W{Z8eD?esoicODt1z@t`*AWu^^MM~7!P); z$Tq&k84~3@5nm>`j)C6?unL8(`DV#1G*;LU8#=ucc&1pe9dfcG82`wzEV!$1co`Ty z73E$RFpPy9x(0lu>VE_tAwL{M>w$+jNXKDdoviy$9tkZW_8nI93B}gu@?$pAwGF1;0v0 zpahCAq^XV}l_3r}x3Vs_MIytfmyik}+Ds9v)SdEdLXLzE>xoJB*9re!u9xOCGM?Ab8;HQOS2pE1@m^lvPANBcK z7TzSxk@4_$VcsmFnMtk$Yi1mjT0}GBO$E0U{qTIGG%`RgXk+i#716U@gW}K3I#v zmR9lzGNGjvhE7aND_;F0F0{C~Brc}Kl_~{maakXMrMUdvar_nz6X(IWxEG6TtpICj zB^raLsQeG`9m3q46I&o`XTa#-{QjSl-Z7+>5k+7FTrW>{HiOp-N3Q^*$S8MVz41E2 zVI(-N{dsCISQF$S@tka@K6g#VwaQZUz*{tIJ=A|(4b4XCqfYXEaC2dI54epmKS-YFruuJ!`wCk%!6=QQ(8=h_JK#c#F2$SOBuZQ} znm|JQ9LxdVr}9~5%sl+~K?W0Vs0cR5$$zSH(@)|n;p8LWpOo(fqc;3Jp-{QciX1)z z+)&tQ4{j;UVWK4bsDo7l-vkDOCv?(p4L$K3vfS?dv}=w_n^Svf@r#kLU6s=!U+_Z_kc!m z3m8e@Z8($ZsZ~2~f>(;%-VN5uavOm^5xJiYB-ziai~J%EGDo#iFg(A&Jy;)??a{+Q zt)!}iqc?zI5tK)#f*%)V8KjV3%2|sky>SQ$=2_B|^YtmM9RjD@(%PKd0bpc~I@pL^ zZKYew1+88n9Z1wHByE zt+K7=s(B{g1*>`5NObObq941^>Tl&<4)egx_?J6SJd)$Vqfxkl9QMZqMUk-F>rgs@ z{8o|k#Kc^f9Cc`txr>Ey9!-k{_(}V`xscA;X7U1OB$vbtNb%&pSOGjYNbeWKKec0(ryXfBHoD!X8QxU<$QAlTJ`^lG33%9V_=x5 z9|8$3K({5CH|-zvGdu`R>DllZtXe;SM~IelrdjwPa*9$bxLv%t{H*}y>{t7AvjN_r zmS*>ZPV=f6@Yx(h5B@?zaAK%nr$+cD7{=|_(JiLyL(aNt7-8WNRGF3xz4$K%)gssu znFk9Osl6m|o1)W29-@Co;baPKcVV0DNE-;dr=lxGo?^qkM%b6%hp^W z29F-61f!=8&n+l=<-(Z=c2W166R9a0KRB zjB?;@d~Pco{uc5M0h=BRoyvA-cEuNpC`7(OICU0y;Bh=mb#_5MD&XwWh0cSC?i-F3 zx4j*`JWBw7;VF1r1iavw6^3DUf#LEEKWGq<)3URl#83!U#%+BH!$bQ`lc$}BF|WAx zX^cxfWnNx}S;ifv#WNUWy7(kB{Tb-oZ8klFA*3PZ=rb_C>rBP7m|{f9;`pte&pH*+ zQ&Cj9Jnr^qF}c{*EbDY~apBXDM)0o#{^9Sk_4w}zv-YL33g_|(=zw0AQKZu%Chs|n zBF!+ZpF4gOso1VM+0^ZmIl=CAU3S@X&O>$G9hQwo)at*FBKEbI zUc1d{WBV)O>iA;0O_WKlkru#7+!QPB9PcbSm1%Am)^!@6{fBfiPzoIHgE=tR8rv>YM`}Bkb%q zzwSik^fTpOqcYt=>*pM#(JBh zyD&Jr-Sqng-PF%W;p-X+OrDcf4B_DPXn0ql7&tfOi@rcat}vG=b83om{+8j?l+U%y zmTyp^yNt8jsZ7m+4}5)}kZHBs>02KiHK&0na$A8L3iCJ+P6JVn3@l@4v@%ZgP~>1e z3`C_515XkWw{-I-t{+pbDcgh6f6KJrgFIagpWwFRz?wgIw;4lkv{=r?Fkl273+H0U zvDIcFBB{cqtEuv*WHeRIQph`sDkq6K{o>#IBJ;x@r+>Tsh(UwJYJppdH@h!RlK6Mn z48C7D^gj6Ss)GX;_M+4-GAs9DSx2$?l~-??Cg0-f1T*woXHIB>Ir1&mft+D_?1O2X zYUb^84yMpwaaEw7j3H+BcPN4pX8Ct0<`>Z8G|AKQ)MJ9ta7Iz4^NzL5Oy`p z>^q1QzF=A$LV9mDGY>iaOA%?#R=sUw@IK{X=I9~R2)uLiM8s*o+=@TFn;k}b7-qU2 zb}G`&QFu-J(`({k7z9Hie=LE>Kf&+(>AjrZXq~ygi75Oz9<4Fq*rVA4hn?oB`ki57 zEEfFPsMBDTvyIC9vxC3hU*&9YK5|L+ra!o9WG}w1@_pP z?g?lB%foIZ*5qsnyZ(N&*nf;2aVt5TrCoKqh?|4;&OIY;LoA4%Natd+Fyc0_n-`c> zyqsYUMBHE*h`(v1)ybw~mwG4I?!U8xqV9%}dkK5wP+xPZ>)!fbKC)2$m;I-X+&914 z%-tC-tnrsRGA@5l)#Lf5GUkqR`u86=?y8CA?U>uh6y=8gFDD{D8*>ZHcQJRDnSL|A zH1TcR9cBLUw{XH-k#M(N@EXbheXal4gjsQrKA3{x8!zP{^amD9!Ph~{vzn;Oi0{bN0%IG;zU2T@6-3lAC9|y1xsQ_i=FT#MsKleKPXL9$|tF)tSO<4w( z@|)?D2`nW$HsiK*b@34PDRNt)u6mz5A$y?6&1(^hl>1Neb^lMFjqyrcEa$h$6!8a?s@KZ^F4}Z0+Lg;=b?JHCNJDs9MT6e84?R zWS;%R?|zVZ{)&YsoX_Yo_}vdOPdc(L6XxfBE%Zi|ryGIsOee=`gVB$Y`OyIkEchHr zgYU$ZA5mLe%oUH&rC{_Denf4+PYS2HftLx#Zvej}97Tq#Rl?!nVA!P}CwrPL!gdw- zE8);aFl>}MsS!vGT>rv(0Gt%|V60q&VSii#X~95Q37+3GEc^3 zq+DVexkNaF5{b-FMmSE1_=y_=MvqT+`+&1#6un&o7w?Ei&N<)@g*ltR%?S*^_t409 z!aO*Ln-eI{l)_#$16<9|Bg80=T?MW!%r!Ec45FNCzqpBk%za4F>aKF(K8TCH!rrss z0m5nIo=Z^}z?%=AEKECyq7Er{95DR+NWTX^CY;^@UM|ezprUUGyZ=O(D}<{f$bmCl z1H1*ED9py=+$_u)0f()MH(P{%T8!ZyV80kq#|f~OqKg|jT8jMafD@F~lPG#Et@K`S zp7vAWskqSM@~#DIap5(@a<#Z}a==xIS17jR&Lg1bE(nKX>A=ezN^8I3?`71}@RCoxqjC z@wdRugj2|5TuaeL7ZmRz@-#A49e-OcIAavwpu7>hOV}v~9~9=)6c5W|BEm&zcKO1Y z8^M~0=yb3q!fgp|uKK5e+X%b0z}61GqZ$-9L4TAf@V z?4o{?kE#ypj#JbA4N$+yHL5=bjFR-@tOx!|*q{3ONtg%9bK5O-;??MIJXoY35qc%g zx{&R^fh&cr+F+E7A1M;ybrj}Fx!$?L=}*9DE!1Hz$9*DXF52Th5i(Cg<315`{4n@- z?f>l`aB-goK<>T8!rUq6;U)}_ngo7HN8K6R-I7`_rKeu79QCOx!O&78Mw3PJD-4i3Rg$k;X)0^|HhFTjx`N(H5_LLSPdtH zQpmt?m^{3gsL z>N&7}2C#dB>kD%=QI0+%V$;Ba=>k5ZaDx8_2JajhrbYcG3z7l8UF^Y!3gimVJG}_0@?cr zJWZIBgFJMP@)$~@ny2ph7svrm-6KZ_gP#+2QTIG`k8-;!SaY1d4*b2yd9-5gzlG!I zaPpWl=qHeYyaHivPsr1%G{7iu2jR?@VC0$+<%|KNZpq0ESnD$J zF!&~sa||@^HsL6q^?COQyJ%T?3x#t~1$j@Zd^Y$6+@Fz#{)vm%h10{qux!e?Xd~}q zVICZkhti;&omSp=!l8G-M}+z5TdoJC4(G@6Jz)ol&My{@OafO3M+aVv3$0`O8SrW1 zk=g^+_G(vxwY^4=>UL7WTKeOjey1rr%`z%wW{oA4N|EFA;A( zpYpY)`F5YL-BIXvuy#it(we_X^!WtO|3dji@LpjLap%Jn{ba%P3Tg^-nRP)!j4J#z z+0Cu~85iyG4{7ILf#%8U0MqIJNUC$1MM&^&RObHP)3Gi0Oy327X}spc8m z3_0TB03QDe4p>$zrY_bC7r(+@1CKu>qSSi)gpZvl6Q-+&Rf56yOQ>>J(Y zq0h4|Zgks(dHP*xU5Oxs##5>_$yb2V(?xF20e91z+-eq9yOr&BK=iDL(jS7geZ|w@ zH6o9E4~F&mB?<#5MHrv2Hb<+Gf)7ozseZEhz~S=LvcAZiCcbQtD90W&v!`P83P~%w z0dr6AwozbZQ^h;}xmn3b=9ryyb{c1z+aCjtL#O#Sm_NjTHc9F7LT4+9> zEb_!1kZV)$xr4~1`+@AJ%jZDQobWb+p?s0o@|AM~;sEL_!5vB{iy2m{UW5;>-x({RX z;&M8_nLhVnXz^LI_CAEW7T-6XkLYHY5%b+9cBBHQ?qGZoN2HyEx6|%t(*PE_%n^)dx`a`C@@oC7goJL9Mg?x|6pcvK_%#%A{> zC)FLLg08L(3d!wbdTe!@Ur-k!^d%HU?+15K?<(+_!p=c(AK_#x@I}ILSi6PZv<|{1 z#)3x*$BNB{t!{DE1rSXaQ3!pH1zYk}@kV69UdizzU_55YZiOlO9F_TuX$_~k6h4Q= zCt3nVCqykC4j(EL=Ep)p=>I9V?*+FMj!Xr25Oz9&(T=GT&434}&IjNTD&GjcR+uZY zL(}j~+4i}cTmO1oJSHBoZ@}nQ>mZ_V1Mqg?_!g75&27%!)Yf#lNV^Rcs>X}WrQ47z z9R9KmWzq~jC@T6S$Y}KBBsv27c4f3tj_OeEE;6gOxot{U~FghSAqYH2EAMh@eP( zoju_8!tN8`9>Pi3M`S9VfK=kC?|h9Qhj3%=JtRlbr9}|Pm*Z*3c`vfp-&AaOE9-B8 z=vxsb>wqf0bXRYXz5!X?jj5K|l-YqYm;q8}LleEBG_nx?x5 zj7p_Ef~@gX&gbpm`-Bs)s_3J_u^r&&grj(a(;y+t^2pGogf1gAww|wN2O!5wmoMTUk{P`f>4h+kp#&6EM?wZ4EaBjB==hxD(sW(H&?JcSH2Nh@!Y{9NDC| zy&Aku<#_hSKN05Q<@nda4jMFvrs_bSBZho0B!_1p`m}KTS+L$dnFEF%b)tC8aD!Dj zFCr+nL{JSY!6+xn6RpkKuiXBrA(N8DM(QdC!c2lR~|CnnACt zSqM=(m~09?iXU5Ra35j!T(G7$k^yUVa+-+4IMk1xXpVjj3o{ViFCsobQg|PuxAUrL zw#zNP;0}n^h$!+l_+#O4EAUss(NDo>kaZA@XBVY3uTFFP1ad@f{R6Cx0f*W=unT=e zQ-}tLw}S+8bcIp4Hh8wmQQ7GSRDKk^MCI>;Q7Ltx&*@bj7($Md*9s@Pvy~@P$dj7HtilS4@54+vIp*5!K9{ftU3$HSWh(6XCV9m92 zm6^T=zcaowJNLM4@J;gay>4-+u4%Q`?aLl7Zz*DA82shEB;j!g)FXS{{#B3SXC~^1 zr;2l)GQW;^b8A!n2`CN?mXFrJ+ag$tZ{3l&$HH&%>*ZFn;af>@{^z2=6n~2pKWe(} z!yCd-{5BjY(T7mZ1-SO3`O3`R=XT@AVd*R|<=?@1)C~O&&9jr4#j6EolL*W9BU6pc zh5M14Jy`2^j>H#%T^Hf8&G_7z=B@n*dacjKmIdlVxh z(Fc#y2>iWzH_A@@-o4eUo{V4!%0GUm;m;oohtTh+JOab<0!DoXKXN1e&=>+a>>wz= z$nD3fAo4J(F3>^U`%7$jvjXfffINHSukL4Iygglb6u$^MdS=N{{32+J(`ev~GF|_G zbI8p91D>5?X1DLw`Dd%xRUv%VZ(%4l38$nK*)eWt9ZKhNoH`Rb0gDKC+OZ0IkY}85 ztYH*ApLY+wQ5>t}tBbC586A%0V42JmDxlA|4w-%iKR*UfFdHDk`N~J=+-u4sv0$~! zfbVOUWQRmzl~G;DfaNbGp_A~1K<5Pe^8MLO@mTkI?iChl%g+8Ue^31PZLL={j}89+ zab)WFD@P9;JM8LlJpAPK(_^DUX2-;aiR_haVn2oD1Af<@5xd+;ornDAO0Bu$%=R;5 z_(o_WlkOU;Yiq*44;y-i(OP+y zp0E0jd7xXY8_v$$*)7(l>P}RHCd+>rzeco@pFoa|mm$2~V07wa_eC7A8*5YA0Fj18 z#78dA$)k62hk4|zSl{ZWAVN>#hsL`{_!(72a}R&1ay&+OK%TGT;fbKp@q98qQz;J* z1lJJe1RxK{qnw}H+`KQ>85l-NQ zPIyk&&Qh6PWTZmKN#LK_%$+evaOkS zPOLJt+pK^V21|C+S!jyRh4ZuNdM*rfqnUj!(zwPf!Bq;z&bLbjP8>47QlYi!)DzA> z&8(iNp}V25R}{QO=H;HT=JjFqTr$ZpF09Z)v5>=v%b(w1LYkU%FC^r9)1nt{J<|;8 z73*7i9Xjw@q8vh9q%;RfbbHilZI1TBjT_-ub9Mp|Gx0pw!+iAgZ%Cj-9q?wo^BS}K zJOskS_`Fz~)O&aaXgU%raJo6}J=FB<9V_OF$IQbLCXUQx{vn+F6$hTjy4Bx@OSJ=@ zJi*N~e#Y9s)us@uGW&YRnpd%IMu<0m1M}-fRQ2#k&Y3D4W3Zr2|7?2nL2;c65t_YU zLK^MpRvRf_EY$wjkzIAczm1NaBXl+O^|2W?N=V%=o z=ARE=RA?|58~#1JY)EX5%|q6%!UOI`GyAGoPrJ=YW;-wMHqC~?*=45C>0&kv!y|Es z={g)&Gt7KC>&@=ru@g-0>x~Lb{SmQ@eObh`8i9x2IuzUYX3z*c6<_u}FqWGssHN~~f%8Ntg_UR?2=g8pkIKQ-IarT~(v63*K zj`+6ivtweV;Zs_+GIt+NHL{oN$Q~IJd*vDT6#w}+?tl4wZ19&0L;pYHZ4-wNxzhCh zTj^-yMOqY_2i7&~mR(&Z{=4U&_)z(m5$K5z40<(B3~L%c&HjtyBeMT#9#2K0gNF?q zGsc9PJB6mx$?+w|`J!3AaZZV!lfCJb__K+`h26WH*{gr|F~cXAY3ZCov*?+Yjpx5< z=Vq_(5bsqt&6BpQLd%-QmOIgG85nP#`Wd2jB8oj`@&?5#xfrg?c#ym=}5R4%roY8v(l$7lONV-Jq^DT{W7 z?0S*q-T+2_Pu*BkGiGqSxT-BgFj0#5wM4FlBRl8>xf+hlsqxS+$`6_qgX7I{KFIFD z@itgNUNI!zpP#egGBYaMZ<^Ud;+3h>Pzs2fBKKCaa!9JnRS3xiTh!ubC%9mXock2`L}4x)=YlQD-SbR?p{T9H zrU#tVDEOdPrH}KHnLIRpGaB*Hq48p@)h@aUdhJc?tKxm@qh)gKk$;yW@V&zM9l?u* z?LB7sRVWOM)x+VzrCcb)5crH(`LK9VI*iUW79{^;(`i_|!j6Q@&|&dzp#x^wFccx| zE1_n3 zFR4cCwnP6DudGHTa1_+f$a1jSlsy@o6?yJAU<9R3q%Qb= z9;`(5_kueK^DJ5}ZJ`dgf_oQZsD>AOf%WhP;78O1JXSdRZ?j|s%Hj-jU<7IwHtl_- zJ_X?Y!r_l$UgxO1FBs7>rpOE`8;@rh|337Ni7WuKY$qv90}I7pSAE;6p2NNc;`Qbg|N^)vOUnK>#x zlH)X)?jj29Ge<|kEY5-mjgnfS-lp~Fcx&4UnTexei;uxett0xBSu#4_CS}mxT8g$? zX%38z7uWv>M5ruAkU0%JQ`kZ2UB#>D&Cu~V{}#>5{9 zrK8R8>kq|4&&Z8t`q+5?(9>q;*!W2N*y?!=RHJ8^W!Ja zTde&!1iHv99EbL@)vOqYx;tu)j*HL1BXIV3nDZdaFTw)&X)68|U#^L{#;hFAoOd<9 zjz=Si)-~l5&~&abJtv5G)&vnRn}9f%nj^e~cGojw5vwUK_tADeJdb3IK5xkx?N$)Z#eh@cbcpcJkuGw&%-0TOs(Yo29 z>*JSVL4H>=ZnCJ)pNt&#GYxK#SjXHTdh>3GKNhO7Vlg70eoJwtec=! z|0eKTq7}U~+vN86cOi6LMR%YZywtS5gORs1{q8`K+YQZZy{%L2n{LXlp zZATr`dN#^9($FlK9pBl&!B32;MH+QoFuESvP?Y>ez-HMTG=qmA`a?wSRc8B~cyS8N ztVKN$IlmbDZnR=_0xe*ej3gZgUo9L$`)Yw_CFN*eJ)oMp7NV#B6ivPx7Ilqz>+X0( zwNq(XEeDDhPrz+CTGh}LTWaU+{tDJcmWzi?OKoJlQ_H2IpHmBr=OXWFcK~ZCayMQ} zlrZI7=GbzZaO@QDUds%g8_&Zg&xvzUbpJ5R=i(*fDa$%}m}qfu`Q!=0$jgDbXl472 zGcVqaKLk$xO?44sF#)|p43RrLsb{v|#}&k+uzR@&~?qQ%GBNVE~UH`R$jhbs~I$5p}n zn5NI~#zhCMx&J&;XQE zXTx>_Mn$&_cr^?l;O*E874)#FpHN@w!9|m&2HYe&J(1XywD;7*ImU@zp*wMoF&qr9 z(Rmf;7$_( z;k;;u(%EKK(AjI88gLev3+Ze#OX!?tj?_T-A5J!1YvQtlnNR0pv%6*jhbU+J)k<9D zgl^2Ps!Xg5+dq0{W<$u&F-IFh3(uxTaMqiJjS?rAs-3m-&9+8~T5neB}e4eYNX#%Yq! zLB@Ly4K9kdYI*ueC!1bP5=}yTvy+=7sxOVji~OHWXZ$aJHvRWu#kMmOIkCKPSB}4S z)P(*ct^Pv>UO#I1Rl_Ej#cs3w)So|?E}t}fc((uSMAr6yN!9t&qd7d92Z!d#*?D6J z4rykp&aP}=UR`i<0lLsJn|9~daPw(cB@H@ ziYEH^N67voue^S|IXo5T4LtQIS*kf{|vjw;TMZaC|EGS>f=_V6;l=WKIIVA#9%j zUMI{&gWN^s$Ad=}KL$zS3JrNF8DOTkwg(QM{yuP8a5mY3|wa zBl-k}?VAa9%CNxIa9tB2sO8qEGA*7k)k%S>U(+2Z5ASZ-FPl{4_0~ite30e&P zS~&70_@L_G#h9lzQ^!Vv_@eA5=wh&DhTm$kYm1yaQ&=*-J`!P{D$LH+uI?-su^(`O z#{-qDj^HbV(;LC4L&{TUfUgzKpvc@g+#Vf%9M9F;T9 z2ZcHJjlF5regF=<@f2tVb{SZUJ@Xz|i#>y4<1TvYc(cWt$sCA|AR*-BEU*@}hv#4f zVJPR}Z4oW$3|dL#dXcAhRpa7Tx#0G^2&|t0+&jRFg}FMF4@=7Ztx>NCN1H&7XAR|% zY54cC>huEd6y^?;h-QFmB6zSK_4z^-jf43LYu||rgZD+Ws`Vtd3cTxfA+kV8j{ zD-A1lw7A0P0bLdsQk_HxLK`8w^YBkgi);2>EiHCVT%$o9rzu!VEB!K9OUt?+JOuSm zCGQ+uTqA7l0HatbPrV9;Es#U|zzc*ObSzxXNjaAlxyyxlc!B%6>eK|U7mmZWV)?>h z$YXVcGu10`p(#qEBw~Zb!*jq|XBiY{Y>fs+yN{`%B~gE|uSCw%!nqci39|nI{+F=x z3!WdgaQr1O^!$va!LS#<|F<8(g%%^fYQue1RN_M<-d#BQ7Wf|J4&a5#CxdZA>WA?! zt|gH{lZUmN+aNN4SIB3Pdt+#;7$+p6|I-*bm3 zaRYL4zA!h5CQ)QeTom=l#Xx?luK;Vkrh0>67k&m}U?iLz*$e(un8%cHV2tu~Tkrv4 z3z<#+qW!<~G@4*Ul`aBjgyT!VWx`Q3HxE_9h>{b*+Sa+jnQONw=lg)yRdtqvkwD7h zN5Pj1C;EV|680Ka<6@j#urK$f2wP}2oZ|B%MLl_c6Xtp!?+M}LmtcgUj&l!qv#`fF z;YYdkIrux(hi!QOQvG5WEi=sip9_#uXx9wDq1aSS;rJnNBV`2SJQ#JtJHTjyKJNpc zBb*)szF2uSc!;pSYi+D@8uHtPEhN60?|c4@55nVN;pA`Ne`o+EBCE_qye;e};sa$S z0y$+oej@fLGZ83y%I&rAO9=CqTUxsCGc2byE-J-?Lmug78n_2|fXZQX=}}nqi-`D_ zzDDGZV^+SCDCRULmsIr*yipr|T8^3n^d1E7XYtw`c;o3nZ*Peye;3~U;k^kbUIgBs zh<6Adv!(YKc>iQsy#jBT21Ca;nJMtDZjbH+dAVG@Gd0B9oh;o9ReAn%riEo)8t9xV zI+<;dcgA{!Kz^3U6BUs66^^|IMhY(obS9`AWz4N_7?a#xDT0qs($F zLl5Ndi97={&uqqzia@?spJjs3qEkR~!@^XhcfXiwR zy+rPREUQ1_51~ZzQ2ERl7p~?dRelpVN9AEKYQWcj1zbnuw79$zRF3%aPEvi;QeGR8 zbB|>n^1}FS#GTj6GILfZ%0tF1Tb(Gf-H=(eIlD+B&JfdQZKBP<#Ta^4^Uk0N6rie@ zB5M=)Az>RgDL|J=IU_H4NtnlB6`*AN93Wf)s*ue2go53wbH6#TR*b$-3y?c;3bg<+ z16IBc-gw0*)bip~TcMVhJ;d}}=O=j_ogrrax8NP&Ww9tBp;2mMs5QmRqcg;;Sf7|v zilO*DIG)9UC?((dzatg#2u|mpc-Co&-ly@-`$Y zOHsZhh&>o>Dw!?b_7u|--bll^4T3v^x=xgQVeh;n`_u}r&tKJLr5 zqM`U6598uX34lyIurYBn7dO>F8YHRUTaLw7W3I3b)2y*j? zcY@ol#wA12zg`v_WnVD^ZFe>DdNT3{{rWJj=; zd*~Z*wdf%EV>bCQ&D?~_e;ht5Gzl+&KNrsY-MqC4$w6V%g84ADDGz*^czgX!#pXn} z>LU<6qTcA0YiU`h(YR`%Z3LsSwKS7#8?`p5K4i5vYnsM^zfd{ST5G4s*~V%e6lNaE zkyk%XG=TC57BBAIoM;!Sz8B-N+Jt$$UTq|pWfp4+9wf{o*=xg!7$g5`PZBv(RC}7- zIkO!+Q{+4lrZ(=vjA#A;<6*=&8NT+T!WQmX`$??Zcj-ojPa{&&*26F-Y?G;P~IQxzb|6|!-wRM_CLi@j1)t9C)n9*l)ln zqBE7_c6M?+`APyys#+B!AI7&3w-h9M+B0LOK_T4}&BVea=Pg#z*>8%9AiWJ{QiRJH zW(A$~#wmt#$XrNgs##JDomn~NNO5u!CJ@GyKzhDeNoRsdmqK{5nOTafi_I1~V@-oH zI8T|0bbd0c$`F3GXNqdzvaK0P=X|q*&M4#5gfqijNarE5gw6}*2%Yt&Yb`kVI3%6l z%MUFwIbOh6gP)!)y+3EDw4U_ zr#ZhO*^r-#$Q(3pRU|99D#l+YmT!Ke!bX#>Og6+;lU8)zF#Rf%4eaYqGBbIJMP!vp ze^LWW!8+6k6-Q5N+3NIGW;F%uHP%#k9n1e}6<55Y zH#uY$bn^M^8V}Q%OMkoU}e~)oxRGC8Fp?(VRlIuFBWzO4jF=p zlkuj*ZC-iyyKdgEk?i;9cn6Z^rfK0C*?(W`y??pRSA^=q=3E#()_(bnS?lfp^eR)0 zA!;t7%sP`^;T2cot<*YOM0se#)_Kb4zpX1Y^qt^A!eMkU7+LaT<-zEfp76O4{WGQ~ zd@e>mkLd}Y-4)<_gv-#`SPO(}^aVeP1w>3Lf9qm;!Vkb@Js1J>x%5=<8!G3+ah-4( zo`RU3@OARgJ6T@|dr|Oy;ljh_DDuY%!Of4U5d9xc zaP!$c9ellT8Hxof)O@*j2zSj%f4cd1c^Bgll|e%3nkUeh3jJVpxv(^T2lq z7vlkhBiej<>2UB0;arrF{kAZ3fI&0SX#oCQ*u4xD0PYg{ue~aUYHebKsRxpxo zUU<>V7UTJ8%y|~9#l`nsEXMQYJSG>5@j}%sG!F)ce#iH4 zcY?FR1*kI|ye1LhMFC@KKJ!EcEQa?vbv5`qVQ#d;!E2)PA3PB?0~}++IzG`)gKG%a#f?x93jN2MxSe*ZI-=)P64*#z9OO; z4Zy2~bIvl`U-60>IW-+3fx3E|5C7;Feg&u9YkJsI#~PU8c03P4U(|ThpAWp*f zoet4E&zRV=sa?2^W6~{!PuzLCeJXmVQKe zEx}d79PdlD6;9&@SQ6^%@a;HtzVa>L0m5a=!LVU=07dBXQ)W2e9TKHr4cd18)@HL-c}pM_Ym45H7+?RC=dyP7Cls z;eyV1`>iQl0*lQwRDHDROiN*YBtCP7%1<#{-oT@?8ALlo#O+Hslgv-H^8*HW^MzxV zg3E=Ga2|B(>%=qQF2YfCe>uH`3sFxvpUl_Eqs~y_((A$6xGp7&H9sA7HANX>N$eV!G(933mHPJa}7`d*-gMJF9qWk(0Sa@zNVV*{u+eo-@ z7DldfwQ%z4!K1w@-C@#ip;Jb`hvUWkIBFn`xl@Hpo&oFoQOVn2O>d2}z>7tv^aAix z!UZ>g^^umw3vTXPA}?D9)0CLG@nt}o1?O^kR;X3$w<#M|c*BnaP`@i{X9+*|oetDBW~xm+OiJc7(u zve3KZ2r{3G2Z6P-c7}kT5jk3mmG`A^4)*H3?NxS%LFa2(M;d~)tV^x{_pq#^XubT) zS1aP4>-@{CP_Uyne}G1pV-CFSHOKdJ%HP2w_&sPnY=sg*=*L70$DQGkFa=t2MHiUu?|994vUvJk^pP(?t)~?#3Do*Z)EoxKx^O@L zoDk=yYkmxLt`>O$mcUy7DUeSUdCnxr@3catfqbsYTSNYkaFWS;0&m2Rz3b(2c_>c) z@^6;g*Sz(v*CuqPIf~?A1$ogbuQ?ChDun57&=?E#eIq&A^jn3z!i4!Y_G#d)?*n;b z&1`x<0qSea9@|u;!QD22<0KWxl&xu-TM^pYD>f$TY^F2gH ztwWae??CHk(MlJZDfC9~Q-l^7j4>4zi?{c=Sw`=U@ID#K!Zb9#xZ~$KF~V$r&nv2~ zi5kOKb$nSNo^<@G&elM8rpVD~tfG0CCJE$5_B$A z$lTw+`an-SVw$Z%PFFw#v*bi8R7*o( z`oh0qd@AJHp~p`H!(5pVE&?gJ1P7r9`olz?VLanCp1NRtQu^`Wz1)w#6Xe>w{W$M| zDW0^}s}-7Vdai{{>^DQ#dVR55^X0W@QcKMCwcfh==m*O5QO+|^%c}4rTW?<0Np4;^ zz-(BD@K`##&f^zUx~}&sY}YX()_bkXl6Yp-$iZ3c8mdNZ36+~~R<8F(*3XBxKBkie z;1%kPhF0Tk&D|5G=ldw$?GPOlk&BwBp|3#&i_Dbwy>7Vis`ur_``-8ZUC4=-n(qcT z1Ai!N6@j(ijUmdK`jBCiwGyJkb6jc_;=4ea=vwuHc+A2L$m;iI#RfmCMIXo=TYun9 zszO%E3q&yoonkpEmX*dsTguT!mS|+<+9{(1c7EWEM7n!!lvu`X^hTy;V{lx506=5k zM$|>VNq^|yZp??GIPXJr7jw;q50RF9v-?A@FZ;_nu$ss8CUxfgnc_a1{IJV6N!Ts8 zEJan;)vhiV$*wz5v6Wk;YxoC5RjHUSeJGyS7FcPqVB?G-dVlO^|u2_n^eW18(arl34QQntfaRSlWLgu?+ge z8(BRN1J&AM7_$D1KpU)`H@Ak@e_G_ej=oMZul4m6l6yVse<3>2MPQW4LQPrye;o_k zz?PKdlweF89j7_xQ?$bG&4^FE=IwezHs&~8%|GwcK-&rL(?HvavmUH3^lpL&&5 z$U?)6-eM0}Z8C2-7_E<;0khChjXJ-~H2Dmj{pse?&%8Mt3u^d>YW;yl`w>YDwCt^@ ztx_{)D~#`Zvve!$XbeX0>sr=W&1GYK56L~tRDABWsgHNQ#`^x3ei3}1WsM0`ACq`d zCDT9m`q?ERv-5Kp>PXXR8=RNSBip=5rAf>P;5{Z-`*DKS3|>82eBt%4MlMdwmv~q} zC!Qe8g+3>qC7c-#zC<{R4*JAvRDJ|JU6|9aCu(2r*x-L0C)Z90y`6R9Mi6XI@k7I+GuR^}VPDZq~H>v2p*V7mI%KW7BWDSKJ*9rm1GL zXcYK9@n-&-J|*nF304D4tOc(qHQ?es3POYsAu zB@F6TRcQHV3&<|t<$Z4B@P*lX{C;f99?90Pd%Q`ZOU$^vF!VQY8V`O1{D@hi=PhfS z#&N2?jb(0y9M6ryK(2-BodfwNRw$SPJ9V2Ryz~Ufzr~q>fxbRl673*I1LA8@2)1xq z7)z>E=QK1=bKbXT_3O=;Z&6G8&0F6hWzBG&kM}yZ#4g|G-FyMM^wVFEo3J!be^WSf zCRh`doCE$^H09sTaDSR__469)hLVZ#Cbn>6+zxx_Z9EdXXfSaaPJ?@zVEzG z>es+j*crzHw$b;>%*BvjByzOA-TS@D`qdE4Jx*1-Ctp?5n)uu_``#s4fwv&$Y*0xakoLT$5*O#4J+pXfAi$ZC;`#9AfR8AdqVQiiG zlTFV9XjKrkt0$sTyp6Qej*8{luI;g4?Yaw>parzMK-kwA80eT~2T*>D4)0IAL%~L~ z9e2QU_(bsYD?dBvpoe{rTTH9NC^nQu2W>Enx`UQByW|e%NSqnROgW4< zp3M-AKbDFPcM7}Tnq`N*q8^17{Ieo+7+m`*KPr7F<)e%4@R>%t9IORaRt(kx^9Gyr z4=5yLx}!F6z72KM?lcAq?-&%)VXzib0SvUGHfz37cGTw<>|+d~tD;DIQubaQwc6qv z!M|uu=3|yLA)M@GR{VgsonB_^58gT);JV~TJe!fG&Nr(v($rZEj_K?Cum;4lw)3;X zd^UD|RhVyjoi*!x)9bwFxOjdRE~~(7taB`E7d($yt1QAU<@!^d5p`)U9*n3|y{stbKB9d4!RqKQuS0_$_8#x4wKb@@sHb6ZOntuQK` zsm;463D)La@Bp}u=*OmlHKEqOz}gx6I+ut}Ngm`^3j1<>IC2{Q%xRQ&fPphoBTDJZ zz>f;2`huT7F7WFrzXS3Q0(o}B&)z)+7r@#s{Yhjs$@)8pbGw&nQzc*KicZOg;N)?f zFI=<+^5THaibSfi`bvnJsfc`va6xbI>Bn(L;Y=II&peK`Txu?Xytl}G*5`7`5y&qW zxz9s{^B#vBzrV_9F8+l+$@snY%O;3Y;&wAJnX0Uh{{ON&G!C*FL1qD1i#D?$yE2&? ze_u8Fgy5$%-ywKp4FAGC(3=H(DXJylk@y`O@QwJ57w`uBTniYjHu#MhiQor@%K1TE zCZB)Y9aA5SUL6-Om|%58l>MbDaa&BV3L<*_u~iUJ*hq&!XA|l_;GZq)EM=b5)IH#q zmenKRKF8L!I@jR-=L8;4VY)eBydDH^fiBu?ACM`i8IBtE8TsczoT~zlemFNdV3^2=fM2t$Q30bz3*KuJ7)iZa<%v^{ zy&5NmSk^Ux{8=1P7BEU^yfWASPpA$qhFaF7fZwsK$pNDSx%#?n0QxC#gDx|Ves0zOXbz+-;cd{Wp-QEJoU(lTGqV*!*J&-BMsJqfNNOR z{Q={R`GJ7@4@S3G1Lt))_G>S1I+h3o zawI7D?VE>A;_rbRucW~b@BB*3dR*oFYIgAJKK};GdNPndh5BC_T%ce6hjKx=Wjz&e z3(I<1ncov$rd$LgdM034^|JvZq0a@p+_IJjyw9?pS1xXiWesH9-zt8=va*54I?H-Z zxx}%o*8{%9vfd2%F3Wm5;MXndoq)f=M|PDtZx#%~lpeLL_f%fi*s@j!3?r>r8(ds_ z+*r@8mbE^RKbT$n_f)tXM?r0PJJk!X)8+4^-s3W#cTzp=VJDha??O7k%%pRt*+SS)&Q@#ey z3^Rt#F0*nClty7lcP%bYHvQ=AHOtmQI{GAYl$U2=Ju{pEW+9#H%mF%gV*xUB#?&#h z*W(i3JEwyaW8a5#Y(0!6;c}GOK<5clz5&u}3e1=dxLjaX(%FGUzL1WKn0_DNvV&Ph z=SFjs4nAGF5zbF$;YR3;FEIyrIl#345Y7xUo6e_Z`-kwHfQ3+-a5>COq4TWSKxefn z-<+CgUt816-;7Ia4yQBLwE76nJ7y-Gy=Ds?l##kPv>5N7ao%uG7CC7qv4 zgRKZZ{UkGSD=yobRdlYy$?9-sn4xsuFe~U_G1@k$-W)R*`fh<)vJK+%%n>?wnyz2K zS#9Ri8De(RxzV)R?mIK-VADOFH%x;s5zp;)%)~EoIn}J9v%?hafV0sIrL)Vdp!1t? zzJha}xsVRN7y1rOb^aIP_=cQ-P-d5MDk8qP*D^J`e-`8Zb?SEEeN zU2tY(7w$?uZigPqcHNVzc5#&4 zhf)orRTx`**<5-kRf+TIrW{H&h@O&zZrbF&o60w@9!lld(_>}>cFpj6rRIi7W#vU*>A6y$AXA-O3boQ#* z>3`W~$upsx6aU**{VT5<-fXaS=EdFncbqU`;NW4Vs!jc-=FoTHI@xV=)0ZW_NhaqP~Ng^sq84$&QNK!GQB4TDR zUL$79h&f+TF^myGxhSYy#f*w#L{wDFsQ5j*cO8d6-u3?0`qp}9ty%r_u3gntyLMG~ z*XgSAUk8^eJI|QKk0g7|co-2c;1V2ahPiDB%hNcYv$>q0Pvdhomt&pagOp{8mux#A z`g|S1?O)l?4bz#YoVd#jdo)=XDp$TzMKL;azFyPI{1@gKT9OE~!Vf9?&VwIQP8Q4+ zk0u*s3`?fZi)!#9_-AFAgeV_3e@-%o`@+%RSKyqnHp@Bx;| zwalJ(b>_pfm1XTenLR(kO{ga)murB0U?mX=VRb zm;oTsmkn-Y?z(Ui>&V=7VOgO|=B^9#C6+sPT{!faV_s-aHnj1WBGc1d*?uryAsib3 zlTqO~X~^_+SB|bsPZyS2km>2dvKM_|f#oK6p>hJ_1a4H0Qk610UG!!DOPQT+4tXM( zX-jf4T?3>#WlFjz#p5u(>s|o24O-*)4ufx1d2%_tSXp)NEf-x zvkd;J?8D$PBYm<2$Y=2~C0$sKG9_I&xdyft;?$jzF7m(z*jh-o7LzIIB6mK3t%YK{ zo7N|jg)wp++PnlyyO0U!!a>R^6VTn{FrZ987nX3DfbPm)gI`e&&oPThPRu0}10-1d zN2Z$#%l?sJTL;Pa;8iO3jfbsoL~nyPsNDYr{Ec$Zz`rVoH&M4<<#-*OQ1*r4vZCX1 zv538Jzz-j1m1w^aD%#E5Z?JW4*@;4?o{QW&6DH%r!H?nlm7}M@?aEK0s?+iPT&+#%jBGI^VU^7gvMIJy`yihnk%0!<|HYO;nO!9Wq ze%B0oI@zn7EXDe&C`|Rp>zW&TzB!BF=4wO>Y%t9vcCoU2;29&=q8grL-X`%eGZ5iF zBH{ydC-#|goQ^GKtt~6c#=R;J^oKF5==+X^yV|%uGvXOKu2E(dhi2+bcE}Vh2bYQ4 zi%Oe|->&l5VzU_4HjEOtmP>MR`Cv|>1#noI#w_f?of1Cf@X;_myvXCD;7-bsa@d+g z#t9PEB=QZNOv@DgAT=t#rVIObgJ;mZCp?=Bl>g0%ZPLz7@F}Xqmr}EzO%^7NM}%17 z1^$BXRrYOzA5#vU2QRnsO1NlLjF(uaal{HD)Ud1wZFpVjBGvWTnXMVunNMp@Q?k*|qG9>W&0a-^_t3rx>oCM-(^ zyt*SDy)tIAGr$$%J<(Y<(j{w<&WqTsd|w z9Hh}%t#k>|JcG?AE0SlI-@=$9{ZYggp=>9ci3v=hPcpMQYOeVY+P|5V|Dmhe!EBPV z!KPwm@@&r$X3@%Ip_~kq<1})iAQvgO&PLQV1QYd(m2RB;i^-EbjqM9xl+3SW<~A0j zBCCcwPMy7c70x2|4=ppvRXp;Q5PTYshsEFv{|O$u3d>Tx)%0=2!O`k$F&J63<|zCb zjCCc|NX$IHiaeZd2CYth>Y2%WYVxNsfvCpfFuX5Gm7;CL{h|n@*JvGS$ z6>svP~(ta&AQH_G!~O+Ht?55qNK z3TO-0VEvG?x2_>yf0|iql7q?KZELW^Unt{l#j)asr;0^2>(^k%KMAHiN*%~1qYYa% zINq5#%Wn4W`!ChUn9qNybDX(xGcR5C!i}VDjeg{7$x&Q*$!p2IWs-N(n$^P zz2VkG&6{r25qg;QW^(WtoT}v&J{z)mZsF3J0&<$26ugSwt>tT#%c?Fdbgiy@8vKXK z1B=Y2HEwAK=;lTw~(fuF;piO+B7&-hSIna;qL{-boHFr&H}pUr_vcplh+sEHiW7NnYBA z>~%|O$_;nG<;Cp5oiv(fPuO~4?DY1&?@6?UiJxvHn8LaH$M*yZ@?V0*SqGpLJyCxPhQ%FRr@@rdO^B?J|8M4$bX-& zit%CFh5L44PO0s}kCLb0f8m3u3OSM6eqX9n zSeE|id!n){U!d$sn#~{atS+jLsK|E{Z1e7_zO3@-=g6&>x^g^3l6H1MZd)9ae4Ks> zm5WY4ThGjlar$-HPHt}>^2KLA>M> z_aHy6$nD+@$!=51ui_z1^2VPmMHjN{t1+8HF*bYicX)$;1m>~fe#%{RVR?VdSh=i9 zl(ifTbhP{6ZXNwe5c?H-px_4`J)0~JRCc_nYwAj-SxNbQg_QM>g|rD)P(pE1ioc8`@_LOYItBl=8ma zQ!@IyRSp-Mu_HM=WUe2XYV|(Z*=&;2{mr0JoId543rBH!k69;&&rH|RNT04Vr;g@y zN3&WEQ%uDe4s*?sa=6w!C5MMhbS#HA&15-jH1~}q;T$eGT2r80i{ihz0D6Uvzhd!^Fe zad9(qFCySjzIWYqN|O)GMdcx4?alwrrf1w!;eEWxtlKMP*DN*Zms16Q@0|wjV5U_B zyLeBS-rhPf73>ju!yO=f^Z#^!^qK{!3j_b}9UYE2aqgif_dM8anCIKg+!D>zn>&wf zDQ~~&ywog@*>YL3-rTap8*86@e(D%^pflb6-W91=LWzG<=8QG~Z=+dqeX5sif8)@G z<=5a4_gH7Ra+r328}OoR|rpq;eTL zlucGe9zPPkl(!c-k$nOk>PR^JIDE6RyO%0?7P&jz`LJ^0ZFHVd_MQ&EsO(t=(}vtM zzl6CJ3kP{nliiqvqjXN5l-0SJw--;9p7`jUW!j@C1zv&a<%C0T!NZk;$h?c1LV)Q@AUlYOJaLh!xiwX2yM~USMn&?L z8|k7fGnFF!m3_E?>?|hH;#=W!mBp7MS6CgwBX=mva)Ob2m4mopgvyY((osd0Tlu>% z6&hs+oE_<=hd`MinKeQ+3vQff=yPpX|yMryQ>3Ti|}m zl9jlv@-VI-d%KB_|3lcCHcloxNb5D{ABzSq+B4X zlbV`|%+|0hMxQ!O(+E;g^1ZyI7tg~tE62LS_bVq}hTE0phpd#fugsH9{a57yI*io& zR_AosR)kZ0^AWwHqBzmhpDBCkFw);CC(eZbusS5o z++{Tpbt)eg%jM-K!VLZ_?B~*%Zpx8E;epD*De!Jq=Wuwu?K9=a^UP!oh|Yy)StZPp zp}|O^zTM$AW%(H=bD?thb(6d&)r;At!|vhrY^<4iPwLY0cDg1Us5s=3rNT846TKI$ zIi}~msRD6EawebXXJ5yqxr+Q{KQ1b_pLH+qf2gg!k1KrN?!7;i^9-e=rM7{|Z{Ver zuxNqO<89QJke|7oobK4QOx8^NH;phs@Y?Ny>4_v*I+xOo%29l!^hagSEsO@lm1Bco z>RR+&#vg=(MU zoz5NG@x$A(Z3J#QuWcv)R5{Q{I<_#;U3u6l1Z==@jBS)E6W|o;Ew6z4C`)MyLzQD$ z*mhsir4%Mv`91JK${yUaU@JxL2Zdu)9^MT;Ll`%bXAtJTs#!33;cBZ?fHAjNLb@Ya zz(hFy3jD-&I<~~Fj&1f17b?8Joz4#(=`d*X&wx@{`x%QsLU<<@ZW zZ9@5*RxVsj@^|_Jw6pPN@6N@beg<0Pg5 zK4AqL^?$WqG=;7+B=?u@9#%%8c32QCxXE_-Fj=EKE=G z^5?@Lifzt6oo5a!_n*+waQ)}C*SwI*`4~CsyOLp?QE_vYd+cr2uB2_=V;WvWJi5D? z^P)Rq^Sm5(Guf9oTx({&#AwbwW}Td!W4f;5@R>PvRjQjgKF~R5o>-O2@B!WGRgBMU zqYHh&{IZGx9Xe*+y|d&L$mR-ihEqcx^Ke^g*8IPH**0U&@h2X7BD-LlU3LqUo8#`N?PgYZ z(~q>@;Y(lQ*PXD(h0`y^%4tF}+|v^)`aXn9m7S5MXGyxT?LkDnR1|m>#@$6#9+2f5 zH{rlh@E*!xx(jEba_Bzz0IPF5Jl*P?4b%K3Zip5uyJx%1-A9Ij+%$#Hp(B(N`BcTB zD-aGZgRfHd91Y)Wxd!HfZbB!*JPHc?R>QPm;h<#VORKXt{FAbWCmn)Se=tn%FZ%vv zju~H?Zjjmfo)K2}d^5i^T^N%^bi9g!mF^MbPH8~DGL zUoh)QuAJO>Xl-sTpN0Rn!Izn2KAj&+XY6>JROajm_fZZX4%;dT(Q>_1i=+|865f54 zSpmxNa?cidV7{51r&c-j-l-xtIh&i%cgX3?MAg3^Y>gFu1m3E0FQxUh*tl=P{jB~i zu=N7xWtjMq4y)EVzJo3IhL5$i8aRoQ(={WZ-TAuLgOezOyvRY+x~*RmW9ytddlrh6y*KJy}%N9ld=~} z_`#W|43!umGC~6anOLdq%0jC zgFON?SJ9Ra-6V#v|76Z9mA!Ytwz9)qJ=ou-l7M$n4$U^}%hLHaZy7RcvWVzflgT(% z(3&hn@q>gll2fG?*TNsfOUs(21kO3EAMyuFEWrCh~ z&LqIL4KEcEIZWj;svbGP>d+n{=h?__!C23|03A`pmRMdOWrRlLo_kUler1c=a)cHlC!57z+@e&NTkaV0mHc>5w&XAR zvg5Q$fd4K|-s$*BPsVlJykCQSW5-W`(Qj2QpJqpY=eO@-Lfcdx`o&yPmF^`|XXT~0 z-Ui3|*yP%f5AOJNF*er9S0Kk5yB75iP`SrzqSfiap6gjbH{IxIGDlXY?=G+4ahl30 zez_30#zVPl4O-WmRyj18IW_62UN7Soa=OC&QbS4~n!dH^L0)uc*Sfk_$f3zRUQ6Hu zW{aGyF!?%Hbz)t5q^MqB=c+E1LsR=Fb?Ffv5qD~E#bf2rWM(&{WwnP_b>JXEr*%2@mjH~sKGMp&rYOH}*q#&l0f zBiQ7o(Nzvj?X6AeHjn3hv!*%y924Eqj9S#q6@ta*Uh#qY*RF zOAb4lnlT*an%Qz-ChnN@;~wuArmO9dK8e?(&3hm|-3;54sI!~Q!adX7*#7ycJ#oZ~ z&H6plEdksra;%AtOE-9j#!b(0=}v*6{izaDUtj~y;~vj4HaD-cnLjSw;-5|*Xp4#UHbeONGjO{rdGaJGZ90diHETvNc^_7W%_||0(%DegAp&u=Em7 z`~63xKM0sleZ8|y|BrW?V-B0cE6wo1o~riSj!i%5k*zVS+D|z?eR?2Kpt>^Jkp})Y z-ji@`+}Y`-BG0+-PL`YD;mSTbefbSrKFITMuaV!d-H-D)%FBzeANO~rTjrMS9HuPW z9y&)W2WZ0b@*?`)D0~jLa`)sqPDsE_bPY^j;j+kSQ^GQX!=W7s2NuAz9alaDro9NW z&N1tbSx&<5D|?TGf4B1K6e6h1L|YCaRhB!aXJ@NJ#-#HSefcrT zLz@(qcMT5-yXnxdJ+_pA5%AeohknOHXXM6R3_mN}M&$iDS)~E;Bf94;W!Znrv%$(I z!rv;(3iTp~dLy5gNTgIBQp@F0+8S}O)yBFJ_>|cu97N*U!J14d@4mpX^@z1Udz7|Zy8|5Tgi zP1L{tUwY!b0KUpHiO7^9xmX|p<1p@pcY&X_a?yFoasjpl@Q2|~th^TfPT7ao%XXNO zj<=O`BXAohp{F>>Yk*7!kbzED>2kQYvOI0en4ZY}2Bt*9;s^2_k*oh1JWDzFHau5Z zT7zs1E;=5XYv3}=TWSBn9(v+`nI>iHJNPU-Qssel@ZQSa74UScPu;+pZ23Enhs!nhR*jh^-9D`~tmh+~*W%7|*0_r+w%@y1R7tKY+Wb%>d$O5M_=SVno zH~-dJxQ09T$d&&aw$_rb+U17@k;}?pGWSSWT7bJ9rW-&r3>~il9(t|Nd}W9BDzlM9 z$FmydnOoSw+hsPA%jn9FIKtvHGI>JS2ZyP1VR?xR+YCw7g~wQV+ZUYJI&U5$mezL#VC3BL(6Bv8H8X<5#JVV+24Vw%~qM_%IpJEyRh+M2J`!vhjm7CF%;d_-mUidMq zv#-3$S*Hk4A1t1&iQ>JH^~&;LRAiH~3}r-qQTE)y+Xr00Ih24Oun9?IEaR5!cbJyoG8u@z zt{lWSqPA*$G`;9oDi17%e^z$rX=6KaA&KnSgOg%uE``fgE?sA=x#Q_D*40M-)U>wo zk}-i`3R3(;GBc@s@X(4U zxDT2AV4EEu<%^f`n-1BOzj%u#;(ghSUBD|+t2u8$x^axeUSMO>FU0?4wH}5q=f4=6 zDs&6{1G3x5UQv#o$Vqhz$&qUQOq-`~Y^tvigZ3y|zR~bsc%O~!ZbSw9e>X=G%~NR> zp6QnFt~1^8y)D8c%vR3I_oXQKSMisE#OF52&&-Ik(xW_m%!OyAdnF!XD1WwwI1jb2 zJS+WFV63;E&eLAeyHm&2Wk2I$a$Xv6u}t0Hqj(ZEhVJsHplMgN~Se@X;q8a%lVb zV=|xS|A${F+WVZ7=^t)C_u|a0p7tRNGn4&h*$bIcbM+OO?(N@Rk?G+zyQXvh`vd(6 zr<^eN&|`R@&pce3Z|`+==8J^6`I|sZd!O4g=MO6Hf(bK@a}gHJp9_~N2UeN2A7&bo zSzK3snvn3a1;)ER)7Ul-(PR~+g=g64bWigB?W)p~I439vPl4$_MK1f;Ib23KL@(vw zcf!>-!?ZEs2<=PW-Gv(p@a>kj!1O+?5|AFw33nG^`8dg0rYu{U$-uZPr{|GHxPKgtx^xChBJd=YtQ_MY*|(KKvL zQ67O0Rk_n2K2Euk;&{$cmX(?030~4Ed&BO9lM7+%4AWh+?5k< zDZ&+R!Cxykav{$z%DM09f5?dF$grh1r(Cxgu2D|4!gRuJn(Iu>$C*MRkLUmu#m_b) zKF%~$$cAI`94>0IPOLnK3+J|(`9x`(is*e6$&c*vD~1H;F^`u%PPp-2nh>QEmhpUF z!paxG<;vyNaI;t_lmvX7gR^ytmIb^(NFR(UzZA(d}d~Ez$9}J^;1!NS98S%oa81%2dgN8Bm1wk zG4?lWh#^Zx%C8WTh-@b8|F3f8w`Q9Jt=_$P~a%#+S6d$l4LM0P;5!R!&j(I-4`&eN#e@Ku7Q6mds6U|%Jo!rz`9s~jy3QG zk5LjKv4oS4RVhRE<%ve*?(_FnW$MrghLp>3D_H;tU)U0!PX$vr@+=A zWpUb?HAu;|rqgG1k)03?)+GE}U~cx3T*YJXB;|(d;hD-gDkFTXvX{0fKXHhD4qJt- zOV#y*UsHJo-;s6BL?_$?=WJZgWtlVc(r20KHZmZ;6o^tyFPM%<*y#b^tsEp=wtp9S z**EaB${sQ%kF_GN-wC$%X!sLeukvafB=VJVjqp#(@@5$M+j>-l78Z?ZKvM?BOC(YG z`Y=k)g$u93}9)aEKJOKZu98d9pWF0j13Cy|Z z6mEwrl^ZEvtVOx55vKOsCRVzblbtmngkfSRO5_9)c|8!pSPw7Em_ZVILaR zAuRSU<*Fm$E3G~mj=3Jq5x0xoZ}qd>#$%L75>0(izzfPU+!gz;Rg#P02BK3k)eQTR zerXw%l~$3Adda6m5?uHl?yOuz^mu>e_}=hvWw{f{0=uGLKL*}kS$;;6&rC&LiUH%t zDOcikaa(6)lVQBmy!mA&)3$;WTXWT9Aa32XkqgCFY2?^l@LS5c5WGQIK52@7t1O>s z$H}-{SjH@5K?C7x+Grx9T<(Rdm4nmaF8rV)N+p+aGC%`luuHx>6?xN6@Hpj){$}CE zOrzX95@*=pbIj6>*s&bZtt#?vf^jH`9i;vfPb$+5I*I=%*N%s&Z_x>1E13WxoWaSc z4ws|L;d*5+ej$5&i%xhcZ0n$!^wQLU>wFD#nQ2=Ip;54{gtDJuTM4pEboz8nDD?+? zzH;S8_$uXEd?!;mw(Ml zo<5*t2TiCRA1K*HIrj-{+n%g4P-6R*L<2lib>c6>WLAnVTQioNtXycK^DH^rDxGgW z`8w09?Iyyl*<#d233-rsHMmI0YsxYazT|!7hA-hSlq)b~$q$xyhyPU0>`MEmsY*Ka z7)thH6mG=jN~@Lqx5J(32QK?26Ogf{(taA?2oFK+m+e&~Aaxh~gmUA5;T4w2ajEs$ zQd~)TInl5G9^R~6S_@NZk;}Y`d{DWGMk$}Rio9$V+@u`zu>VoMm!8O5L7q~JQo~Af z-?zBz&WLOQ+04Po&$Gc8CV!T4;duCZ=(aP6J&y~?s@ zcHuGQ@*m;lR(=)yo^oX?{JC-(S>XrehAZH|Xw;HuJtt*c#4X4vCiq>ZaT0YUOIe60 zehQ2?x~h-DdnuQk3Lm6gbuoN|vKO1k_DiB4Jq%u~T(Q;6|BeQNiOXmV5*(vbl$|ey zt2e?qW%-4m-1e0P{7zmO+~huh2P&6fW?2_OXO&PPg(h1@PCw>j(~9?Nl3cB%Ab@g?!qNVTja@Ea9lY=tE?(h4vdCv z?@_TIywgApi2lXN2<7w+u=TNc0k%FSvo)%$k41hli?{G*grTa8M$3}#D*9%*ehk;I zdQiDM13#@?cNzSm)jz`|f8;HAJ)*BwRG_%BOp7E@v%eWeuqSTz{gHb*O|#nOBRmg2 zO|=>l@OjGdcGza7_Hg(%l~>}I)z-j;8D_|*(P7pS-!%Q4sZK271mBQET6(PS0H@X=cQPJ+v@ zZ|xlA0zO(hUs+aLtG&o_9~cvezARx^Ys*wI1b$NG*;`;+rUZGfU90l)PvH+Sl|&95 zV>bPq>E#(@Dt^iI>O+vc85h^ct{bLNV$+e2<--AD$X}iH@P;?dsYGk5M1;|c%Wv16 zWpnU5@`a9bN-^4%Dz6M9zu9q4FUs#wd1*89hdP$-u6s=7Qh&cdQa{go;g=dGhu zZ6_83-q8RV6{w>ubBl6YZH+ULQ*9>{TBmy*eP>xz{h!`MLN zW$(h)`|5ks5!N540abevV4GLXD3}~dgcR+i{&M9YnXJE2IeaI4x3Yf!`FE6Wpg!|0A3=o-wOzh&ymcS3q3KgHWCHJqZ_>5N(b z8zX@G5`3+S8Ydd>@0mu=38vHUjE%;sc}T73SWdptUNii@nJH>Jn)80oJSTVPM(S>s zO~1*fiJ>)hE5nI+ep3%!uHEw-+*gCkb~M*-%{=E>VVS%amGqbn6{x$!{X67n$ z>YtfWo|DY;e{!)4%ol%Vrg1j%uS{c~3;3GxaZS`mSJcT?Nd?yGM3qdldFf>RE;P(s z|5s*dMI*k{LL-=J!&_|ChlaJ!*_PSWQ@(=V$X{{(S#iJf`wov{tA#-gE(X!PWsWQVP zxC+r#8l0fB?{S?bQnSR&mf#VHY-_HfUG%X2T=lqF6v#FXm8|`0W6y*C)Y$S%brxs=TQdUciI41Z22q?{hVvkTPS#*}=Hud11&k)KqrwG1oZGK$^~Ao8G{7d!1FtpI5Wx$H6bEJhux>&m-o{p98<6 z^2{aeTT@wPxy~|UGuh|xq-a(y(%v(hy)w{@(T5M!70x8r!$)hZY(2b}a^eT`MSVY2cC&AFwsF#zh^PiBXbqjhNIXus0)vgbQMqge z{HSt)Y8<&tS!NrI`~2ovwe>3M5M`$wy8^#8-2B=7{0)?*3vV|RYvn%C|9g4m^rniGRa(1 zOV2-$jd$o0i+LGyw{pgd{E6-4E0oKYBeyk|#{b6HnyVmG{1z8vG4MQO`Oc{xY$^uT=FaOJCvn}V;@tNB947QSvr-muUlRX+ukHivmN`R z$}@R)(xY3*$c1o1<=F>#gx#ZAPvio7?4T?c*u&;pF0cppX|a$ix3%lat^Lc$aO~1&$a|f z?%7>60ux~Cc(O>%p7^h1E!YU}TTBH$Sh;#P*gByb_e_-+h9k!o5;uJhe0j(2O?%#= z^16GG-|v{c8?tj)$8BXpc3$5)pW}@COvB@M!BncGA!(2MQ#nfWY%M6~_b{^?>AMCa z>ZPK_9x&$;t*{;*sVw6Ltvo4+T;|iYPTfxDh@y^JLvph9TdOIG;M>+7jx#=@T)H1@T{usVGM*BNj*J$K$8zpZIaTj+GFk(w z=x4|8qg;IgJk3UknuSf|w-M1>=obC7&<*KicpRpaEqbzfc4?KT6zErs~ zkNiq*=29T{n_2vO0hq7Zv^LfLYTkJ9y}PL@%kRLKyqH_T+j8zOfzK zUP3;EJP=2}4fThuon8L7y(o=tignDGG0DCd3}a1M zslm0vFDuuVz}EgQzpe7dH<4TWySzc=@gB%O-;Terd?51gx8q-xWpl$RRF3N}a&nMY z11e90ZSA<6PYV(?5Kpa@F0)Z?QK?_XL3` zl`kiNNdGWhns87OdVD+PJ|pr9eD5IQ{KGFP2j~V5vfYWxRE_AQe@9;IT7Gwo>7Q+A zqlyo*cl%1=pH;U(u8F?H6Q1fQSK`Z4F_6ezjw{#FR;H%6xBAW8Yd zpLM)QF*%D3@`V>!l!i|>FjEHSz$#}Z?TO#eK#$RF_BRpjq@ zxRGfm@)!5<^ipI@)LP^{xvv&^8u!v7&vE|Qa#FrEnOKxx*D*XHduZ%q<%wj+*h`|> zarU+Hw#2}WJt`BIGL5Ym;Wa)^w4B_5J5P~m4O1+qPNC&lmOT)Pqi*R>J4Wba^{44p zCv$qo{+5|5-2E-byQRln1m?(aBC-E)#^GgWr6F1pM-6uV;P8RD z@ClUuH0$Ir!E}9+!(4N!9PTiy)AX0jX(H}}b5 zuGuOF7IS`v!yV>&IXq-G$>A9@=vfXgnG5CcCL57(_{MZyO4>vG=2Z9C*{oiQc(|!} zj>G=uNI9%9Ps!mY6J3Vx&?Yl^8K?J{`{b~j*(!%`%-H1|4l&ou;We{K4jav&=d&xl z!yV&&ftbUa%)}QEk2bf-;b^l(4kw!tE3!9xE^Gf}MRt^rkMO&`g!CSB>PwjCVzWig zt}-K5arntxu`1imb0M2A@&dEMe6lLr5|~M^wUBKXk$i7vPwQGRV^(KVfnXW!-fVcE z&F+rl+~;-5%vr0mEq?AfQFDB%qQU1$m6)}NNNMZpY;pSQ$K!&9_MKnOPLCA7yO+hC z`|Q+zNAuj9*{+_8+c&+L{jf*qOotBH`}hC;-Tl$#mNB7||9^jOAMxkj4hGz%o6Ux= zeD&t(3zwzCRUWC@c1E0ual?23} z;pA*p@=&3E3?cI1aCdS->xG6^DyTU>_3?Q*Oe24;q}V#TVR{t;KlH7Di6)2 zZUf3*$`;5f`<{bql>_L@*ER0ti6@IPx5-KLLQY0%KK9~TPOD<@uoZHC0tWD#b$n0#j*KGW*l0vri%@V0j(ouXd&=Pq{JG`H zFiq4=dOYRzD@UpLD2^oZ*r{-x)mdmR?38P4u1B=5io%p6I#W4tAUs>y`<7WNs_!GR znG8`C(T6lx=7-8x_i}|04`401#xbuU+G0gRxUe;zY=$Qv(~GKnb1r+i3I~wIMkxDk zfLoP=Pnq*bZqi&t^Ht>G%Cg9^M3db~V%JzzOdGpZIq(krfO3rT#-6nLr^7E>{oBp9 zmRuom6rw*>6y0hXI_Db8DWiM@FIPz15AUWNm}sVU#``ft`~(%n$XMKZc9=}X`FAt+ zE=;8f%Qgs_3sBirSe1sUa2g1^Y~ij(C@JA=j6T@-^6Q(Bqa3^|3#Go zFRRnI7bYQjxe*RwRM`kn*oOxsY$q*KW)k!{BA2h&5@VGUXPee8xk8`I5S^)_AZ1Hj zq8wNblLv_=^Nf-{<=9+vO&4x0w;;MeMc%VuIwMhyc86^pg$PgHs`4-vPOh+=hjAIv z4{wG)upEUqDm!%j$)A*?YZx9T^P(S{4Cky_!X%!u?a?6I_ zZtHG-u}$hD<>*WB*UBp8Y^&6J5^T#Si#w6yym0kHMkNHuI5ltX6Hw&MKfz*nihL)%Q>Y~wC=20OAhpX4ra2my~-{sLa6 z93cbgV$DgSU#i@NS{VsH(8`OECA z@_4YlwR?^qbzd-xdgOX~z01v-9=SsKXoh^~BW2jf^A1Pbgknq??vcxTgB2#z%u+&3#I<){Si->=+FXR&YF7IfC2Bio;S;nJJlHs4S~n=51^8iCf*Pa+#Z*e_T2G zHpdr~{k0t5P(b4UQfKFDkMbF(9{hf>g>^tH?jQ{k8$QQ?oN=J(}W3rEdXEpCZVgPwwhP zrsposzxN+cS7qhW%Hl;fG^iqDFPXF|fBxUv=a0^v=Hoqm>mGRfwPx&|9KJEv@0n}$ zj!BzMa=O9{8pq)^bDi9OHh?oYdR=Be&`!dmz**WI5+mYK18<=hd2e*N6tp91~+4&1T7&dvA#^zOfw z?v>-eq2(o^0L!HVkkWTS2u?zqj4tfU{V8NU8zR*T2&z>rh;RnwF zHd;^k5ars3U|ZOj=%20f7H$%rh058F;p>&_eelD|O$GQ_<$M*qN?CSIV1U45ej1do zZsV@RNPt_w&UiE<0WOyv0QXatcOXUuTzS(Vcn{@@PvQNPE2qH+D|ej;AEz7$!Dm?c zSoi|v>OJABZOt_WIJr#&IvoNpQ!c*+epOjY#v&eWCgfXE@8`-f`bX~%%5pKEElj6< zVOyA*ZLlp&a40-d^)m-hbG{SwL^crhu^yVZk{=iF8Rh17_;%&gC^Kvb?tT-ZH&i6= z8Vnt%(QbrO${0h23tV~4a@by9oQ~lFS63cjUNV1QkFS644=9B zQqwE~;BxMM_!i~V^YCKj(sKA2;Wo#8*AA@Kfc$ejY1!VPmY#@F9yg(U9zIuD+$U%+ zP_h!fS>>gF!cQt!{|>KIt|W6oTgAT1;Ez?_naqXSLV6O$T%i)>+5vFAvgZc4r*d#A zJXpDuUV|mSwZtXxB;~q!@J!_fdYsU)%2nK6SRmBZFZ&F(ji=3fDJR!xKz0gj{j(e9 z4Lzjtz!KOt|JqAnYppKR;dfN0KsALvQ})toL$)Cm_TvR*N0oQt=^?zkvdm>A;bLV`ow)s2>1U0Fb;E>O7)7)9+ZrVCFxQCkNxgD`44uol{7)VgfTR`@B~ zV5_;uM6G*extB0g-@RClt~0t`*>e$WE1`i$ax&%WRDAjn7Kn}u(3lmpzAFJ9IxDE6I^V7^mwsLRW5r7$8J!Tk1u0%Inpc2B)-@q%H6Jq zZDFeDj$^N@+ork@K?e#*xDO8v0aW#!{WivO|;WGIHBBlCS0!UeF$z=mRGfS zALS-W79XlyMis=zD9fz+_;lrxgW%%h!cK6TZS9>g7h@6bg+1fob;{Wn;m?&DN5HlU z5~sp{S@}?&8Y9Y)v*EmQXZ$8%eZH(7wmzT1y8O)QUaN0t2Tn%lN$M5YHh{W);r&%! zc?4{G{nT8uWdv=jCn9@m@A4gdr>Ztrz_y(??*%`t@-FlX30o_jXsgV@cduWw8vZ~z z{5|}oa%a)sV&yNxwyd(Ibuvubx@FgVpzRG#a;oIvCYh{JPLtnc7v-vR;Qq?d9pRm= z4nEHwcWx${?tpEN*X3>4)>hM(@KLH0lMByNE_8*@w2h~NUMP972Gm~%8)dBEByG#9 zOv4YTJarbs3<2fP^YEcoe+GQKvWyMV<5jmnn@At199s^brz}%<(^n|_X+vq7FWQ)sw)YzkHNjp@?)5v}2mh`d=N&l{ zRF-$9w4EtO4bV;ct|^lsNmF za_6nQpZJvRQVjFDDWV3o? zew3`2ll!-Zw;TdLp)7lHQ!{S7E~DYsl)0HXIolY$8{w~1UYG;_qFh$WLIc*~r5J&C z6*rxV0$i;u-|m!jweBFJuqC#)DWzeS?50XhC%}6tcU=WrcPKv=wvDbcwZiHN?geB* zZOOUHJfS!x)`z>LVB3p!c>%TsP7J{vN~}ZUj}8x4ZbJEX_zmTH{H?^+R{dr0w<-_4 z0dG~#E}>TKbCs-CP->mNj&8ctcCXE8*gjV^QJ7Nqxk_#>bRngqHKAlb*mg6q+3-x2 zH{A?dA9FY6vOZS%6>{ri4X47ck8!tK2HQ-x+yz?~%MOCAi)F|(8;R=$QhhkF_0)nd z@y_L1B0@Klw?0Rx8XX~ zsSLs0l_gEqJ#eoZd>7tbSyt#^-2+#iY=W%;C2y>I;L0U$tb5?Ho6d!fcQ6e{{>pgX zaYqiyYdN`rHS~%Bw`hd={gLD7GH&Nacv$7RH<3TR7RmCKyEN?Vnwd*RDOPA^%q3nzElL@Uj()_kGdAbM3r^3YxRzH;4ZW;Vf|9_GB( zd?WMJ?rY8eA!~9}(Gki|0`gb&sVZmgHcQ8&yxP1yK0nx#Gua9G#`2YX2!9UaS18NU zWYrg_a;@LAPCz+gW=+5~>j@!ADSvtw_!DLMj-~p0C#9MlmFpgXv14&$xu#X+4fGf_Q*h0az4DpnTRAz!Ci(}A>lBBjYiyU- zP{KeimKbSf@5RI3lW4u6F}m<#RI@?3FdqI+IsFoBvmKhp?I^&wpUrA*T6GfmAj=cD z*=`8Hb&f|yPvoz*mre6E7`G5Z`e{V96la#$tCmd9ub2z>%i&gOlX$M z(=(9M^hG~%6Ko%;Wu1-MGp&3Te4gr;|7?z&m_MofPRFUMbUZ$rT%EnCq?yh-F@JaY zDFoB5y*8MgWwbVDn5Xu}V4cnSy{YaQ<`>Q;k%fjCs!)3pe7NKMZ6h|ERE&sxqq3}3 z((s+*Y%A(mdrDCnZ4*iyZ)Wd6-rhpD{tIM_C7S!AHuc4>{= z^PB0?B>S}^;A?F<*Tc4b2j|28=Hsbz_RV);=bgp-QV9jKa^HL}`L(ALy{ud=yAif! zX?)Qn_sjRaWc0V3wMMSqIF-mxB>$IsD4F7E9cfo(CyxRhP1PLq4yGl!m zas@591s9i$x17)aK+EK)WjE#gJ1|BPozA>Hv`n@4W8cY~*oRXob<4@BRK65GSJ{8l9G3^hCbvYQY*`lRNqA zT$;{apwz_E6GOZTa_C+!Q5twX_M+X||F*+(uk0PY=lJy<41$_st@%;JMX2KRN#h3xLl%kn8P_!i%ab zYio6VMU@L1;CEDBCW(BY@|FttYvnH0=IsNip#>&8h5OEP{4_OPV^mNR-HunSZWCc! zbM=GZtE>*z?RK5&#JQVwvn9>c!SAYE)(h(Pk>h-1OWJL-%2S<@+peYJMVPL|EStjk zB+k@5VlO}+&^@UU%C?yGQ!ouq*qwWtn5J?#+*5;NXPV?e1eYNiV}m87Rt=6`Z-zZC()J!AG*sG=meI!Fst&r zT7J5oKK3r!^;p<;n^NO^N#yE8c870LcI8-At{_v#``8ENObfhRuWpMGWy8AB>bi=THhU1r;aC?gSp|&A@~9{ zP~&LWIzW7cx$j_Zcod=U6B;AL)%x0}-I7t}3xcVc=ph_-H9Ze;>uDrsZCtURyldVhYrA(B*)D(mjPM2 zfjFY2`4eH=>sBr?i)P`! zlHB*2Ty%?hewJ434%{0g8!cn_7NyZF*iG>H?Gm)NTQ|Y=|0KAY1e1Ne2~0BbH`uoO&Jqttm*l(O0H5+tJnzwD z?sG)9I?l7jXb)*{X1*DAG_B6kvxVCd09FC|Izl|QC1aM z!~VHBbWXSXUbx*&MnIB^3ep70A|ePPA~{HEf+SIClH{yXiim=k7)3?pDkwURV-^+T z7%-0G;K-Q9fQsL<&#puB$NSB1t?ymGUa;z^UAywGI(6!tTW1*j4`rv2U%v&Fb6GZY z#9C$i$TPK$c7|yXh0i%j|B{pR?HbnApRIE4BAkv_J5JX}Y?V8%)&LpI9dA-j(0Cp1 zQjWX`KV_TZGx%AR=RRbPPNn-K+L4o@*^w4`(Ueyw5-C~SR+aNQhs~~vu9iAfq)fkR z`eBb5U(JeOso7CYrwu`w;V*sK3S+O@W0gNPhpQ8l8-2{L{_G4YTT-1EBd+RwuwCD0 zjWX5K$T#vnvQZk|nzrjSUXzNAGTWw6?DdEi*M z+N;6MBPKqb%O|^+oo&a|KMT%socnDBJ2yR1=Hb&51A8;Ycjihf{ovC4D!1>TIrKwj?3ota4Zv%fHnXVNJTn$a_93tGJ^ z)+U*>Ba^O;G*a;^X4_0k^n*DlPL???%B;(}VmYFGRuH~dl`Hri(iLdsnn^f0{W&bA zyN1MHGIt{C{W7BEjM)4I)7JrenY-z&S;f(&EIOu zXJJ<>O}kkvF<&6Wc5UT0c&+2yVq~1Uq+#>%IenI8oy6|g`v(?l8TICI< zBge``|7_;=?sm3pGy>)-d$ZN=-rDiClOok0OF#!3f$KweJDtlLc-;p(&P`r~D>MT> z%AA@_AKz!HW@D*a(W2jO^t9eqEf$H@1aq>`ve`5rBd5n%8dAxO*`pIbxUw;N3{!bB zjNHzWxi#=YzQ*q9+;SrC<0QvV16$4^Z>rkkT`hTgE|)z%RIQxX&2WNy)4DzET0q{c z?ip6q4pU&(0&aiMH$4+pekXj2%1aotJ?&Vo^O!j>hYE+yr*kknR+@9kdpruZTh76r zd+yVS**#4^g88}Q__-8xyV*R~jk*utD7v86G|jAvWkoML|H@LW7gu!YvZ^=XrCwUF z9h_DFfvvSR;i}&&qxzkgJbH1JlgcnK`po01@gyQU=T&?R|ER$g$M}`8wZqEi;5sUA zu-a^!$3g(r-knrbFv~nWk8J=d#%Vil!8+H6DZFIVe4~k9$@rESb{=kysr7!yiw!@i z9O?zzi-(N+-tTxxz`rRco0vIQCOY))$uFNVK52$7tKo|@SS-5F2rFmJ*JrHCr5XCz z=Iq)Aw#`X19J?~ns?8gSZq;b#`e8d{J77CsHa!P!;W!IPU;fT#N+_4inzDj8zlYYPJ6GQG z&(nl*yP7>$Gl$)cXpRQ=SOH(9!F8X4S6Chc-{wVwts%?C&-st4JR#}WIz=vmUsri4 zhJXIMwP&54{|}YB#iCAK#aw#4h0;$NkhPyzMD60J$B%GS<*5Li=Q!8c3ifO6>6;zb zBs#SDh~OJN5qyWToT<|9-rB=X`|VeG(_2jL0ygg?x3{(WJ*j3t+x(U9!9Ua{$0G!{ z>jDq(3;m>W{%^2t{yOYxTwrai{4Tho>Xei91-+Ho)psr!tlXp$uD1JLZbI{|k|boW zDQ-fWPD*IoNeS8OOPxXJTf55Uf_=fOs^g~l{z+-tc6Za{-bGAy z1N>Dm)3QX6+vNUs!=ce8*w#jtlKpLMx^mLw)8%Q=36IcORcl)sDYG?RUg z*}WvOL{4wM$krKA)lwGG*Ay@K=tnnRv3!$73fb z`H|b;JXI=s1#YUGyTJ^9;b`vk@&blzB|-ao7x){Q{|I-e+(N<$8V0 zzLkj%t}0WNs9tsz!B?E5%1w?$Lp8OEJJ&l1w(Tv?C5PI2G!mtGF3spk8{thRBY|rQ4O|Q`MI~rd)iPX}Ov<$TdAyV<)dtlWYx% zbcf578-ETrSFYr)WSDKIDAUWZ?kcbMC_F$}b}fdDP>y^I+xbguZ`eGQ7czehvr|@} zH_RQZ`Eqrlpd%eI>|IqVVXZUlb7fiUaHy2qR@q;`zbRLYqD^DU<>O4dH7wd*Kr|W~ zpjqYbGHc_xSDFQDsO{5cvuH6#UB;SKI%QN>_(@Hq=_%&$n#B51SJJ?C2B>%%HX0lz z+VI;wRoHe`IU{#ONafAXfD4r6Cs8BP%K2}@&6F!&H3!$S5ZZ*OpNitg&39|LRk$3{ zVlCKc=8_RBHCPHfVgm!-R%^t~D$iqf9A1s z(Uae+^1Myv(~WML<(u48x^7C;&yBLW9Ahs|Ie#-VH@Oa8l7-A*4|1<#YdHRKEkWbi=HO-) z&kqp%4f{-9@UI$N@{~C)!Cm=z4>zw;mk@K^gpSI^|1m8Mt$c}DXAp#>9SKqZXWp&Q$FsIf*@3;ZtbbN%_iI-)wgj8UPwMBU;Y|0s$ zTV5M;d@HxGT!^P|115!$Ew(9k{t$DXVi$R3hv4f}$4%~5h{nt1askam|w#0i9J@%JPMcRZNg#X%+P4s^-d#nao#pvpOsXR$ZoC zzdt-z*`aY(E#(Two1xH&?w?-i4q!G3z0#u;6FtY*0*g)Lcy@~6t#Tvk_qrQFytn^5&FHt%J) z+--84HP%!Y6~b4kR%(By{-cR{4D}8HUQpHn_n^ljw<9@d| zqs^hm62Efp(ZPL`s-^j2AH#v!Vtqa5#9M#s897oyrk?iu-KfLG8J$_YpGl$(6W|7W zZ7Vq!-l^KfS?~kO*oU*>1?AXgbNF$l;IB>Y6F7cT^#p5{o_s*q-gQXHH`*a36W7Mc z8ZpuUwmp?k?{8eL@+b|r(X*`QV0%GrSOZ(bD(8~D(O%-SKZfltS3}k~8=tis1kFCe zb4U|)l|EE%SYeJo!5qf4w#lcW1}twjwokp-VDwls$ol_n`eyo=72q^Q4w{u6tW3%oRW^9b` z4vbK;Ya(oWu;F#E9S|;`raD>J+Z|_mY>vLdeHSdCpsi#JK8q^yG7D*Domf2m!fWrf%*weqYa zTb3R($$QJhEH)RsrDWD9w!>;XrEA!U@|a8Q1s-SE?(p~(b`(7RtoD4!tY2yu*4cEW zxA@Mc(?6Ygnhm_xwdiNbQ*%;suPwDg8vm&$q;Kt6%bBehg^OylV%wvpBhKKy+ ze9C=><=hKd?Rz|y6}rb%a+JphSU~&K{+zr5R=YMJuUYL`k$ErHo)ww*LG2xNetlMy zR$opAx!hx}eG@J7yBcSb$NgARdAy=_FQQ-@{XfkMV39Dxa#5?={gWat^s}tIc)H`v zwk%(Doa6BX$C>LfwVdZMSF|fVexUZFP9=Y}dzIwxl)P8_^`?@4JI*yWLV}^Sz++Y_ zo~W!tM*ey3DUpT%1g<+W|`;Vdb`|XM!^b?+p!e! zxECt|kB4#<_jn4|YLAz2Y4#ZVSm*IkuDh1Y^0{Iv*EnSjxG;GEH#p999#fm^J^p*` zlc=&Ec^T5m9ZZ4&fAW2yT@O1>9U+^>p1s$jM3e1xemtofX5W>L62*;IL;o=!}xy4W18z> z%ko~Y_oTfpqhqfp@9a1kj|X$YfyWH3$2@-5arSxqt>f&soMwi79CquUZd&_}L%L_} zYZ7UO){|ZYtokXBZ*-hLdyG{-?J}NdY0`{!OiyY^9kGGKj3!aCBUiA3S zwXfrp)4VTRc?Iq(9y7%r^!Q50dDY|foax~4-H!9R$4@!VA&+U5H(aLv72njpTUA-W zArMxnvbp2D?QxakyyNjjwXc~~K3Mztuu5jY4?LaU9p^*K^%9PA*kj^;IG=iQ#_?w!GeLdsF|G1<%MF+(zVMh<@!mLXaG~RT>B+JDe|o&YagJE7 zX+UOQc>#|&&c8f<)^Wb}n2e8l{H5dk+v8sx=Nronx$u1JF+=e?kGZY+-eZx0xg2JZjqaA;uGqS=Fa(t{jtm9@3}Gfb)1^qTZ-Y4^4)35{fb+0fCCj-iz4IT}j5{Y}?P zaV|HTE=Br$zWG$VLrmLYcwcbL;$cMXWsVI)y213h4Ci^XMVz0_k;~9|xwUCO9B(hP zN}QeMJ#ij4%|_sSZ03veugr@h%GUdcGISJC4(6L(qsr#^4>rxzA1(6EX3rRUYr2^~ z7VQ=0MRCqCsc|^H%%pLI%`$Dr<6CGJi}SHLBu?i{{Rw5Ad|1fn%Src8nc3sIt&M-8 z8+Cv$Wh5CL``<>QBKLW@d`R z>kd;epEYLBRD3&)zZ&OpGeDd-dG`zFU*ydH$uRn`Udun#h1yQ>I61wKfaa zl$8a}Y^X1f1gmS2{0Gwo5Jx1Yg(o6#l7RyBPPu~_WHd>v&C$T?arhgZOzm1CE|-IbkJ z;Q>}>6MV69logIM)-nqgXQI_%(c#Qd=DZ+oDwO@KwmC-2G5LvPLCtx1D4P_*cPEUZ zaEuOj*aUKUA^efmk;q>u2Y10gDM!fI$09`Z!z^UvSZ$XpVb%h|es14m#-*qH z+_Q*&=v=d)G+CM?DL-ps5k=mIzp#9!*R`pu{e-bPN1bIm{v? z@S}2oA_x7JvA1BZvX6ypFooUhEK3$7-@(&g141-y(3Us0!5l10%ER67$}sVEgs`@j z?Bb`uzbVTcBF9y`@}BTn%CVP=Z>2TMc&7L0Oys<8iaxLi5LO+gq-cB8e2ZMlNv7q-JN^q?tEB^%U8 z@>i;As42WmS&lpiv%ZuhqSwN=Svdnso)?H*T06X7IY@Tl7c67DVH(!Wz7+nua-=Q% zy>bYSY_J1Ij4iTN1EN?>zg zG@f%4{G4)B(xcxcZ4TCRqMs-S>GSAO<-iOWI}x1_dB>tw{tjHiouwP_10K(iLNJ+& zoO7X^m@QCjFnq7dBUChIdn8_l9=+lg;uqK&iu{Zw-c02&2kv0w-UD}04xQH!57sS_ z9ZV#S)d~Cm3eyw9q5bC0y2+P(L(R-|vX$>`_Vn4IJhZv}s(9O-B#RU~`LuL^Uou&R9b zu_8IwS8du=lFip;*Dr)E3sRQzg}`O3f1+J9onpAGdkfo zl{WvvE}CeF3<~?|_H1A~JiumF$GlgMbPt<&eJWaGTGmf?VAVNEd@q}I^^+s`(C5+m z$x?jb2Gnz)8QLJZ$M65aa*O%2DHX3WGf$!6?lU`1p#)Xt$SKJIe*ayjsu?Aj zY6dqWu*xiJMqoE{P<-9Z@n$q2zj|)YRmJ~r-UGZtvy^iY%6Dn{!Kr3lbIRAvyx5#R zIGr<&lfTwbk;-Yd0K#*XqZoVTRVVQhq&f< za!g z|1C76C;ya5!*YNj>fNXZMln=8`F36f^Z1k6=Pbj_3KD zLme!K&#Zj{6kbHvd-Chq`tq0_sPvfWxSq!!);=+kMP36dkMz{1M^fR)RDK5M%BjCx zoEm#dJ9s|l@!r~}N|EPyXTy`fU;Bh9!pLlH<=~YvJ5v7$oZrlV5y^i3MJ>z@ys-zURBQf^ zGwXUbD>r2$lc#WF({&^&i<_EFBZ)D@d@2qH4v)gQ*DS_~y+$0S9pY8@=9@&{j!L#B zhx((5cWqrWb9C}n?z0QW;0)n*8)tN3Z49hZF8zpS;1k4Jn_ zX6X3jM?Tpmxg783X4U0rEpK7o6Ynt7Y$6Vyj}m9Bc~P9JGpR{T3#8a~GE+OdE|ZbI zYmQAO=9Af`&y-|yzVJS03M2j;vt>%MN$7N}e}s8fB&;(#G%PK?ftuJhgq-P*V%nz7 z@ko(rIyG59R_&)In*`4xNN@BitE2hhmmX#W?r~31_RsFieR{HqeCTRw(!0yc=gUf& zit6O`d7(4UYUm4@ z*4hhelSUqdREOXo4$+OLqg}%bfKkrVS70cmbCHI1I%?__HE%zi_ z*0___*(wX{C%m(AkkRBY)I?W48RGO+4t))C?RVw0lQYul{{)XymKB~e)9Ns?942vB zKObJI9G(WRbc)=7;37QC38LhG&>Y=^3AHfchm!RhN1rE%kt#s}MxgVBa%c}W60~WJ zH~k*s{)GA2*GxshQuquTtux%mavpq<R{1-qrBw%E43M zF3Jw|@%K}Xuzd3q$IbICm`O-D%5uWbn#$z~@J41@@o+$|EFE9=9z&> z(=E#~_%X{>@UvE@2mFR|gw<-$mRHUM31Zc5i$zSkz4YE8da9m^0*48U zBVa<|3zelO!^4&3q8hel8@QA=pcn;IKWv*N@HuRoMGguL+v-QphHdpZ?biw0>iejN z)Jw7ty-hi}g1KcU4UQvrIl2a>Xd-v|!?tY#Oa>fB?9@nroLd#KjpKBMZR3Qq;n6lS zGR`A*6N+H+5r%-9=y&i+3TImSkT z2DmqMwm^};Bfm)HAz|A?QDcTbN&{j$Q4GLMdnU|6L^v=C{!%%(75-k?w-G+BEcJBIawh_W-zz1!j6hJ<9B>Mi5X6R!Kdpar3H0UP57>n1j!H=8GkFi~`9?>ur zIoP5c4erK%8eXg%?h9M{mCd^NjVg~|u5sH%;Ugw@AIp2b)wqw_MFwsbom`)C$X}MV znqUTQU%R@?>SS|Bm|a90^a;UJYu9yI^oLvS`p6e}i$9p=61i+i%0Z~!;xg-cmCKSm zYrAsf57Tl#Ym=tt&i%>BHH`l3v9;^kY!E{S5T_#z{=3}lkvtWTaO0ci12|t;foMfiXD^aaL08VKl zf!oZgC%F&&3!m~#c4&n8 zhQ3aJ%rl2xXYt$fbW{HjS|6C1hmy_w!LZqOh$Zj8%+rTh1T!3>ht1JLTy~pho0jM2 zmzq=FNalr_)5JbguPm$BgidRi7w&`U@#WXlY5w~D^PV!R-e8q`z1btqQuE#$Clu~1eY39N~f#&{p4Kw}TOkP^&Tu-B$=}_mdD0yHKH0$iu4r==`O>ER z2j==cXjQ4m&s^-BXJb4Fb8&NHw}F|jg?+!n%oeVk(ax9bR6Yd8#$BBnc!A~D;gyyd zkq&de8wd5DXpc>H2;*q+PG-Oe*s33Ohw%=mOZQ1(UPFD+9a=LgH1C?H-pgUeyk z752T%|4PfPVJhV2)sqFjkHO|`EcjR_E{eB{a|1elvXbOHm?A0#MEFjp|%5470O=zDuYs_JB z@{IpyH=)KqlhB1`@XzdCtufnvCcR@^WhsfbQxoiM3w*CRNSq`c5v13p!195#Ad`$+ zpDrf;3)_4n5$&|WPr=Mz672h{8So1^&NFk+@_k|Mw8|kSFG(wiWrg~jP(G^4g~v#; zE+PABr^L_;s^xEGh8}b4vOt`pW(Q8krL5o@+9J_1;j=BD4|hC?yD9q&@?IVr|F6jg zgU&(3=yAJ2c$^LX7N)D*>Il!U%=ih+)Q&<0Qnfbpa-^d!ZqqZKt#|Wq9 z^5^@CE2U+Bd2Qp%eTBD8=I4s+ZIj7ukhe|dpL>#ZU7y(@KHg22LsdpJrXtX2WU!x2McqJ`GfCeltAkzfRYg7L8In z{pNx#4a?1IpM?6@&A$4wnqJ!{-db|e-p3D?OCX`SlmGk-kgFE_uxS(1O<(=&_BeYXUn znGf5f9`)s5xiTlqd=uMZcAS=KP_quvDJqJ*2D6Tp;OIdZdle32qjD1=Eb9U10_E7- z@I}hbF?f{K-wuygmIb?Wg=LJ|nP+vH!q+kZOQOLi@T}4RxzlyX(9MjMr*nt0lYvKj{cZ82<7^UpP7lZmsN3!Au(>4?F|+Rt|CD z@Y~+vGewSnl*)rYz*CgvO69jbB)8@AHJWB_X8*u*vnoZ#!FMV9Z-U=ajy5&r?I_JRs9aW+fiB9S+u?r7@`=E}rOI-L7MP$M z-3()Cu0@fT6IiGL@rm#@;0!Fo0FL4MoEQ{-W&L4!^4GW@alBYfJ}tm0>9y zw3Ug+;D)Nt)=!NSywFDeoPf)eEMIP!Ex{>R?aPqY@A4%aat|p7LJHfnm1%i=id)|O+6X5O)Xmx^2KzCESqPcE;gZ2 z@Lc8aRCD}HdX&x%-D*`g!uML$*Wt&M<&)j=O;t%wdOt)1x#hxQLmw;07QnW=!7E{F z)v|LFj;N0BTe#S!GX}0_do+M)h8Z1_Xz*`v2j$2|Fqw!vN&&(oCLDPW9<40B9-gio zJQb!OZaQQXUZWg458k32842HQbv~mT1s9Qk%C744Np^c{sh<9nN2oaqANAP zcR9?6b8A@+GeU&}%i#x<gb3~Q15;xQreqLGXk!=knP7`H+XXRo@48X1u zLG}Up43rjl3T}Pn0AnMkrR5)RZ&a2>$l0mv8)No%Of?upopZ}o6j}<~evI41v*6FI&Q#c%WAG)IrgWR`V|Ixsny|c7m`7K;m)ID}d6gOv{Qz!ZmA-<{ zvXS3}yICCynb%)AxCI_&&#<39mFO^59!#^p9OStp1H4E>8i&XAxg>A8%XeZt}he5u^q zF!XQDRCP)5O7K!seJ-~|cbfy}a-X!*wCjfNO|wj#pUvCdxKGL$e|PSahM30Pxlh`_ zKn2b4-P+qxtR-D_+QJfg<;_FP$mYLmSLgoGjElgF96E{op zfHrt`yR+=gQuW=LJv~x)G><&(KA^q#|JMh!H(ilB7R;GCdgiQYbH|LhV%Dfx<1!oP zr7j7$pSx}J-|ma1j=SQDQ4?fS>gTIcn|5 zLe&fSN1ue^rqAkBs~U!84qE9^TRUaXwOFmcv1wj@B7tnxfoIGP3Dsx0e&*}@XJJS}t{RLtOmK_t$~BKnlxKREKMiaC{B?g>q;${H=0~u_rI>x;i7}hN!N3~S;93#H%p?Q3QU-0q z#)rbTVWXrYx0#}o&2mU?eq6@7f=iTrRhXMBQzRfedRydKbW3QUmH!JKsVu!7qBTS()Rq5NTV||A@Bt@0(}(5UPUgZBsL-(zZSNGDzp){t?2(4wyl``AK12HcqwdKF>3;BTdOLY z!4tO4mGvxan~Se4I}zJlv6o=Cxd^APBeu1&e>J-|V8aIyd5!Z1Y#T@RdLp)QWaCiY z7L&3&&%^U={itVTxw7vQnBs_z?{;{*a_~%ew{rLqc)yiD0h5+HWr{*HPXqjagRwJ7 zD5pJa3zUsa-f9qe>^<1_P)->BtBv~#Y|Scm75t&fWlYFsmc$J)pyXyqINBH+mdDTH ziQh!RF=hX1xL7%hQcHJ>PLS{zJs|AI9AfmmupEsdH#x4Ho{Ozi4l$#}ZcvuTAF=IL zPEW_~6UK(+{xJ5K21MS3ZEd0@u&s?u39-*rM;2ExGLg&zPf~DPVdoP#M_GPc5wBFv znhQ5qj))FjBKmS0ACFnP^^Z3%ZsKO5H!@qPNI&>m)r|{dsuC|k1H`SFlB*NHN9Fzq z{J7P@eB#e3hZ*#7+Y?y};crwf&!gkNDhFFKHcNR#DH-_bDtQ@KI2aAaYLl3PvzY@0dA zJdO2hpraF=J^mma>f}&*G0Tpcr+hz`yz_yvQm?h+%Nz#|MpycWxEZbVy*p)j1 zvWMXruK^BSl1-ISd>#CdZQm#>gWLleAR9rsFDVCe;dhin=fR&TN3ogQe_Ne2Z0$6BG4~)5mCNrl z@~j~^n_z1Q*;Fd8x$0z{#SD{YEy34_fOBo+3~VhSPGja>s`3z>kT*d&PGRzxAl!z< zqViTNXVVIKMp@oC%Ddh253p_gAgz_RU*sepKVivxPL*VdCnXj~%K}OjK^M+zgm1 z@+qxwi1Cn5QwoPiz?iLYq&K|FGA5pHDk>@5GVvhM@E z+FE7}gXw?CAkYyvr5vIq3aF9DnmXRg!V3mg%iv^>V1J~hJ zI}_Z5e2?N;qyawqsbGzAPBUEFm$G|autVjtOH@EBNg>2Y3+zCaz1#v@d-=IYfmi!> z=ID*7(&Q{eUo#GgCVvIL@gELdWXf+!^~_nv6nn0UA{jIDrqs>8aVB?5s+6aFjkl;m zk)5nin7<`;vz)eF^cv&OCRy~+i6mRztTE&xD3S{?7T-*g+fDga%0h?pty%Y`Ie-Ng zzpGlYb(wx!Qx!gbM^b%@swLv8Cew2wPt}4MvyEV1$IRYaQg8S=l3H0rgW`01nYGW5 z$SYJH#&pVBdAYzHlp{BoXKzh)s9};TTc{#GR##^GAaVt4`#{>d%#Nq5wXhveu8!>k zSLazx#~Ff-?E_cmOO?AiKUlsAouBPYBo7J7{;&Z99VZz$iD?FD$Lt*B(&-*E_=N*> zMKXC3S1N}nWU}E&Y-b<20?Ut9Bre?3N!t0=N9mL8HNfRA%Gnc@7BX&QBHmAy!NqFp1-QhYU48dyyuw2KAbhCYMU z6DbUvJ8@#B<=b_QFFrydjkw~<>M`cQuGz(zciyS{Q!p}W?AV#?vt+*hpzhN_Q~74y zvP|Zay7m0#-29@#`X|z9MLOQ|YWvt)lH+;x!auc0@BO^))NsZese90`53RrM8q3RU z__}UMH+ch2wq|x<28HD?_A4B`&>U!!Zcy_GBFs`mfw?e~udwXqI!r#o`ES9@`oaZA zU?y1MAhVBisj~lf_;O|0rFEt%7q5cnD<_zmxCFa#BV76%ETTpdN-LjwlXunyCN5P7QN^EOXbDCQ*~r+ z1piMgx3X-6Mer%gPA8bLDv|U1o7~gVrK281G*m^!RL)0U5-c}WzAKf>-h^ogk<0Sa zw?Vli8@|iRFNCSP=;Y9_z9*Gq_nT#>(Kk#z@)HCJmM_Tq)5>`RU|Txb$?~6}@=`9Q z@`{q^=RXCXZ<*@K7L3UGfUo<$y|5g9F7MmB@*7~=H-&$KSKGcxNQ4_zscaIwS2>Rk z_y0v%>g0b_x%3$PzH<0o_#euWnLM_Z%=jd=``B8z2z_~M?H1@h_#9>4ifQEpCaOoy zFq2yfS1ARrRW7Aw^6PDp$CjD5Pp8rPAbLSXkr@1oa^6e~mX(62`Y3nMHf9kG6}0)s zDPPbwW(hVH?4tUzP7B(`%%lE6+n8C!@Osq={Q=)%8!c-$o?RLs&ogD;MKUfL2S1~n zHxGVYSw8(B`!1rBO@qn4i*SfWm3`dESt7}{i*T|&<4g8k#1mLU zz}d?2BXAF8`Gu?OyNHhboFp{T>YNHsRnEf=VcDW1Jsn!1oNeIE%JP&jv{PArFDk!e z+2J#D+NJYqRxubZ)1cxd@I|VB1DHD`DG4c~8Q&jf&|2*?y5k z6G_;%Q2`wy+b<%|yBoG`qU(r)kRJIImr<^kew)uztFvrfs;1?pY_7bMLvWFr$$fxsAFIsGY>gA2uAZD( z1k6^JcOv4nj3k;%o6D}faM{D~jmokDi|@#=aBnDNryT* z@qY=|Fl1-qu_l;8L5@2XB|gpW?xYCkp9EwGR-$Qq#X zvMum%t`eFoReQIGtNA&a{Z2}m4*>04oWKA1%U!jYTc2bFWMI(b$ta{nIq z8|7p_m_8SIka3oc?Fh>|TG<84sWO;u6M2n)10HLue)=Wb8c`Ah$?l>`$xq<(Eq?)D zqFg}Dv&lpfk|PE z!>=pnQj_ctmF0JG+5fb1YL#=2va=Va#U#z_hA>^?rq5`|xk5R58BDi}JkcM>S*@PX z4%ix(OwY0tBT96oyAvbq$CI=FB>m@(}@i;t2b;PK1$xtdF zMlE|k!m?Lale<$r@+r>T$Cb004|2UJjpon&SmiSL=YFl6>HynOQ)eEAny>OeC0tiI zw;tS7IYA-vPFD^MhUpRt!GpFeJbi5d#*{ZiIR}f*Tdo|&u;eMYTZ1F8QI@X}$)1hK z-9-0W9m&{sjhnvh8u=Amp6!}CQ{k`7rjF@~nkm?(?Ev=~cpXiqqy=)@0cDJfe6IuA z!L|b&>YHynAoT)lJD`kW=GzXC-~Qz@&ZL;~idz27$_1EnK5gz!!XbK3c4J&65|=0A z!qM&Um&ys03ouQQhe@d59OZ&?xTmtr90dcE#heT5)DvY87SQ`{noL^-bf$1}0!y_5 zJN1-ceg$^wNpyql)Kj(=zSBnd)f}!$m)6ivazT|e{4tmgcFT1+%p@T!KTs>|VdeW^ z@^y9S??NnESiX}`xKvr*k|0ubl6_#g{g&$bH3I2!WH{tJ;7yJyn z)?b6kV-`g_tWpxDgpyDxO%3|szdDdjI-o-+o)T-fzSXcD zHoogPG^lGj=8r~9pRP29=>1^hw?Io4{z?Nhfs-&u$GUoeb|&mc$cwEctuE^u8oi_E-3@ za_njNh;qrBSe@U>Uxag&Bg5d7a_+})W96b37(bE5%wQgE~Q&k_$UG!gRYU zzYHF&oO?N3tz0A-%vVmn1~0Qr%a?9a4s3?EDN9S0?h-zoCZ*=3do@7bXegydl9~K~ zxb$1)va6_dj&gX5DesmpP0}l6&DaBzGV&)Ir4lXiAJeZ}x>XJHP8r1#QGN)fxHo&M zQ&nC#4f&Ohv&ECIQ+d`=HJHB#hiv!w@-+L}*2Ev!PcoGH4SJJwdY?v$tc9QSBEcjeiOIcI+Fk<-`omw_Za~6D?%84<&Z~95zA1gnf9Lr2sab7Uv&rh%S%{D)tPy4)Js`}yMG@^d#25qp% z28}c!nT{G@KhjLO*mMKi$OZdh+sHZJnEDr_<>SG_FTmoMYZ_dqu?uO328;}e9e=^B zyC8j+?@H6IKQ+F|j2Gt{v$=nIpnSNaQCE#q{4m^8<49VK23R@6w$a62TA9>^>E`aw zV;b8@y3QG9z<~5*U&hA9pAMi*txWkqe1}ZefmHJrvr2ut2fE$;?7(y@X~L%0 zXu8sbO&KxLr}A^)ru4UzohD3OlzxZrAboccsSP%XLFviK!H&}`rOL9ZY*wMl{(H=p zL1M{W|yV^@Wb8Jxh3ZL(QslJ$kZ8gg-CV>|?x|U8E zXW9?JM=uU>!{*>?gi&(%@QGAU4Qs0PnmW#@St^gekU20UeY=nC_R&KbA{4jf0aa^o zAN&_pi}K?xf^$f*<#%3+=HO8BdLi@0(DZ(vZ=KmOj0DO!X@_o?#%U6OpE{Ai;bAoH zEYtWhj0deYw#%Aqfo+#Xx55~Z8=G0V%><22Yt6rmjv8n75?flU4IM456b9wfQ66PT4jR>l?_&E9PsYmK5^zniGXQIFdqkH;GY< zY1-lp3Mz$ZNg>ZjtCp+@&Y%fh`S0+lUTpX*mA7ItKBJ?`Dg5G5Zs8A*s{B~%j9oUy zVsms9#i7T~urp2@F1%;h8K#~-Vo^;sS@}Iqu*X96Y5qDuhWD|I4x>Qx`VtS-szPSY0sbHroC+n?X-j!O=J3z3wg}j zIiXtNCFY=LEivB_AE)J1CZ#H~Wh#ZAU|tkwhB-DBTYSlMt#&oXSEtwaew-KC`7gCd zzreMOd;5gS##^EpEb~ewWoIG1!Ijgs+nwCza?|DEuZz1ycm9y%?G`#4;rhM67} zvZ7y1X1(vAU10g^&80)++1K(_`*cfx;7e0A6Ju@2=Utk5L9jKJ63Wr1t4-<~m@FlF zbg$Vvlcs6HdD3E*nfMjy4gpSZ=rM;uPGg*J8zc}hbLP;IFYqyQEP~O}&rT9UpNH)v zQBs&WIwxHemmkw#{G(0;`GhF_f5YgZVSv@l5W*|D<7A+N|mpE7bbsEmX*#>x9eZ5FpH;rG=nWk{cBn0)HmhJT;;CIP^LPU zwN&LL`{C10D6d+E@(pI$a>n%2eB5TTYAu@%^Iwu=!h4!vy6cPO^x96-az(m+s;nNL zzhQt#EtWHoMpT{9p0t9QMuJyr@Jg=TBi3nfB;OoZ!8nsKIfB-d=&LH>-5MS{!yH|q z*Mt!ts3<(ml&_=AHRr{5@}^Gu^wvAHj7sxa6VCf|cph{57OD zn%d#N8hR}T|GLZETeGrGs+=aY4j(`ZaQCEmUMnmmUPC1lqH=p zm`b7c4jwxb1&*4oYuqjxzlJVi9vrhui@$+n#;n)qId#nLHL|8K&#p;7W zTgwnz&6i85IrcMlk4C*7yBT|;)aLlw^h3QFQ{(2=7G@kK=9OjK-O94rHjeA9b~pUt zNjgWAlO^WZI`V$Yl&_~ib4|PTGRn>P^$1@wtHfDicB^wpogdey2R35tPM|>~?LZTF zL~Ys=Y`LO;Gu0d1dTrX^Ci?USR&ZO*fQ_zj&PG>w=SGCHOuJ34aOfsljgFbfOeUSa ztpMJoX)|~1*pxok=ljZhahKt2T7}Oxv^)d!{u!`RUNiM>R%@Q9JXW z%8~m`;mut1|85rCOvBw{cHGQ*qn}A_b*~kpw{qY8H@-}DwW`a;&g>P+GRS6MZX)e$%!;;oH=&7 ziM_**Yix%{lQ2_^B%0j`K1Er!rskfZEQOfcRXIp2%Gp&3{?6CUY>NgeVcVio#;X`0lCap&Rn}hR{Hm+0y-J;~y51{0 zZ0$Aqy=lCIf=F_oYB~4+0sli)xu34yp%=%ixn9_sZ`+YR;4cW7;kQ$`{$|eY>6WRI zMyxF=G=(SLgd3`Qj$;m>)(9)Q21}84JWvbu~1O}B_vUGO($SN?@^ zc%V5bv0pIX-9dieoBDUU`SlQIiJ7F%x;vRB=P(lY)TU6whJ);9a##=+lwNS z6=BU!%B9U5XJJq|mr5_}t{kZc4^|G<%@p31o*b*8)mQhh@r2J;E}@}T+XiwOOOt$3 zq_KL~Njye5pP{*W!bv<$Is9kjSDeK2mF3Ci>ILk6NusWY3JA-KC99WvY*G)V2i6Qk z#HvGr5Au7AHMuHxnGqs7@{8X!G~5ZUr|eMRHH}WN znYPpwc-h*@QAgOj+Ka>;qfTY9{F+r#P1wuj3*ESDYp6EEaauoExg z&f>vGJImCMUg%{`vW7N^IL zlK+WQ#r?I1het8q)2&i;8+&Y)<#nVE9+Oa&B6zNhrDbK+~TIgF|ctvm|ngdOtKR!%X7)gJ?_q3 ziO1+qvRqSg6*m%Iz^}ZHYdKL|yD^!luHE8HEN7K&bxKFF=JxnXR?wEqhSYx0wQPoS z;)AYb4At3IM}BB9$NMBGsRSm!nxb56X!Q`SR8(lFdFAgvtTq4 zr=4yNiuVUoJ_hgfhNgN9-gC?WaV|2sV{vF)alSFT#pz~_i!;mg8%K&6p!MYcKYx(!Xs3F2>U7EB=cZgWtacTM@_NN2S$)tBQPW)6rm%j8bP zdB6-8=XtYxB095!=D6#!fiy|{biG+4vX`eX*mVeIgVN2 zy4mbnBVKCCr{X+ps>S)-9GF`1tbcBc%(ChVJ{)+Kd3GAs)yq^(CzPfW=K*tgdPQ?H zsywU6)SXdLz()sL&ZuZ22YT08Y=+LLXdpMjGb$Q~PU8YzWV(EuQ*54?!C9zRn}eb_ zi;Ghe`3gb3fWOBSQ$Dkz2|xSjF|)!u0r2CE`DMPd&7W^=(%e7c#>~E%6>psq8R;kK6%A@8BWk6h5bF*3MTG{@vnfaS|S7o!pxw; z0oJU(b1nCV&$l|PEqq*K+(L+st-burz~|MnDa^IXEyNQrS9W1Pmk~0DYiPzPcwVsq zw1ST{f}7~O@ZT+G;BS@XNIdyTxab7$BC(iq=o{Gft{eg4ucvbVZSbj9e;wRjSuDX{ z(^EZ>Rd}eiBpTiWkFfHCFa;EOvfd%lE_l7rAdLOrHz8nc2!j zXhpxROih4(m7n8?Qsgt5JKrXR@yTy1-N?7VL=q0329L6GuC#J0g~)v~VJ`nJi_W!H z|9yC)vfM5NNK16&cnsdHuW>z5@z`dU^Fso*bn>f!!0#HtPX_WUeu*4<4Yo}ko&ncW zdGH8qn>uZN!IzaIBDWQgpN9vz1rZ%NMmPAqvV24%ME-6%7=0)QmIcZGq3u1OtSGj=@6++* zb7lsZVTdzx0tm_gA|MDRL@}U(pkg2?iXtK?m@WebM3M+fDM~P0%$PZfNKygAHDBZ)odkCP@E0q0&TVZRF8 zNqH0aNadzrIAL%B_yIrLM|My`?;>Ti3=ig}JPcp*P$07R9R8u&g1B+Cf4_sA*hs|h zp%KmmAFpya7uQZRf`32$X)|+f2CErSV}jsE_Co62R5r(GxX7e=r;=umnmQ)w<`fYIKaq-Fv~; zDlZ4)rb2!DYVcjc+*XC_Hz?=+h|%@JsNGD6TR8<0K1IMTOsIhp|Dx&#A^Z?tfzO7n z#LI*d%vjOj7+PNtZMfOR;PVmOvHoc@R&?c*Y4IY0QD59Ar}zLGL*)mtH=Di)wlRm;J3_d+y#KUJ+58*M6~U7LmMa?=TBjbBYktW*6F zV0aGY5txw6EUSu_|6FzEK>l6*I6>k!k+bXLHZOx(XasK4!GxUV2&kwZWJqc`Lh!^S z%2E6VK@uGT^|@p#i7GA565xAy%0u|R_Ue}1ttn>S>XtRO<(cKHVN&dOjss_UCwGcb z>{Gz%Q5e;2vPQIft`WDpF{rf&M?i`)qAC>s9w6S)^XGR`SSY4b*nVL;DX&B{I>RyS8O{69;#U zG>j93!#&d4+lB5ovlwnM92pM6e+8rSVlKjXiMJMRgDvE773-+Np0zFOtV)=_4E0eQ zFe=kV1iQ_7xn(W1*S;)yDnkQdn%>KZ0S{oB?pU+;W!MX*EW25QKLF2?U?kG+m7rk# zcsR<8f2HMwI#`eM(}VcrUcwHVR)gdA<6@&g9X04La+?f~W8Bbxz~}DA=L?4yLO!yd zp}BAPEaZklX3V=4Ug5HJE!(E*_~WeDaBMgeJAMAyXVy1PdnP=&D1QO=}%ie z7?tnP6^4A>@@P-LNyl~i?xBYiw>-T4jl!<)TXs1-d~@)Cc-UV*ApXDY5`Rw*ugPCO z8(R1lx%VfJg@sXFt9sey?QT^!1fL`S^9|~2536cq${uc1KJUJRo12@uSIsnocja1` zC0p7ZSeSKK)w7;C>4SW;!qB6tK5!~=`{ZLFhhg2f!SF@0^`+_8yDC$MHWfNpL^ix4 z)K!B!g5eERwflgN7mhptK3zD9jyrU=utTpwbD(}~6L_?6{1EUp!q&~;Ny1(n441D9 z^3@V2=*fe~<={oCR1IDt97Z3-J(Z}#2Oci0CkH>(UKX}%asHNY6m2WCS(v+wu^k8c zW59?XTx%j91J9EaE@9^ic?Q^sXx%6r#W`2SQyxVFv=#_+*xG_|DfcFUmkRTjx}}-( zz63)rxEQWup)m)13;1KQivr9vyN|7^twY*&Uc#ejt2R0<>V_JF`v}{szuVgZWZJh+P{5ou_j_T(Sk%_0DHM8`N)91 zPS|Mx4l<8|*Md<_zZ4W!!JwuZ8*DFs_KFPULOa zN%LYI2(A!07hibzM;-qO@UbD&|M;phPW$D`sUWTaUnCqGZzdjJRguG`y*otYGTQyZ z9(=>YIioqZU`YTP_Y9H!vKKa<>=wDq;I3F#buO z$CKM6fb(7=_XzW0EuzlPoggDGh&<+iHwb&>;C~9+sEbI^14o0k0DN?a{3bg5;0D*& zGefbP_~?TKc*4)wMKh`dhu}jR<=#W4?@3h^mAFO}=~LvN3f8*zA2bsY%pdo3nIHyC zAH7>R)Cr7~1NjzQ@>t=>Vz5@12Rp`wsC*On64i%?aM$%9F6t>iQx!J8|Z zOvAoarIl!vd~{+28^z)VEab>ItV*fM^tc_asU?j42-Xtvu{PdARQaWcxVm@vC~&dJ zmzsr0qK-*S7gdh$#kKK8CV~Ghaz2s8pAzjt))x8dG znpRi!V5KxFff3o8bC+^*(j9X5eX67jvn914Iv!8Dic% zt*XL0xUl`Ss;?}5GNKW3SbS({gey`lx)sM^xCl7b8m#8FUjbjH@+si)_{ZF#^*6df zm=9rGY8u4-1Uy&d+^@9JLg7#f#|Pmrr<`6@YBe;&POqxz$p;;N7BWb%GdO{K_CR6xJ<*}? z`=02~AMghw{~Y*hyvVcb({c)hSyQV1u<@2|*3DIX`?uxhs_}OJh#5Eyr!&lwX*eC( z%(R$Z)z_ZU(2SlA@r7pP^s2VjOtWJ;oai}|no-rt`wy;gujw`;@UC+q!E3^W2W2bF zf*Dn5`?e5fO;@$zj?0!=j_SDve z`7^6p9~$1nry%RszkUk(AHU4~=bN|xAN!P@H*QR@O<7^chN|QIKYK8G;LWOLb_`pP zU2)0zgU6pg+#G&yWuL;}cd8z-%mk;TtopCEAVczaixz#aYNE?6;hPrj-&8d@&edLg zGU|Xja!&@sH^`xK)ALhw`|wM?Aft$1isK71vV*407i2*+Gzq>SBZof+_fw`mx~3rR z5#V!$ZMbIWV&RAnhD!!<(OyF6a>)LNV6^Buo&-;9w@84s83DIx^pl}ig}Lt|2ls*tpi2pTulz3f4`J(eRCZk0euqy+jpc+tCHR7jk)09XuF5#K zj#5Ua$rohQ;htlbmY%~JmX^}L5sbz{9S?nJcsh8yuu}on(zxiMt-T`Wt`T-j^@o8`YR0uM#lIS1{y5_^Bjp?bT!Bff|JvPBQ3x~m2UzglZ?O@C-w|smY6${1s9tLzF*in$t?X3el#&!G4CINHSZB5 z!7(>RV;T6wL=N2p?kVgZ03N7vT*5)Q0{wpA(aK@))xw?wo+2E11UyIG%9(|ez{)5$ z?hN#4CKN%Fa5Qs#8R&d3avR;FgG^D!M<)4kuYgyB)v$aNbk(pC*u_0Vbi#jtM+k>j z!L8hJa^gIPfJwr1DHnzdGQmXW3)@$LA5iWMenxeWpu0vmya}uYaNxr(8W7WQnV~O) zEm*|;iHw}_i))@O0o*&>OAGUBNnSHy{)YEpZYIRvgkEQrUkN^1n6>VmD(rLv4_2-Q zUm_fS41A61?*P}`tV%m!%Dgal%;R%ca4}R3pU=p2B_A!F?4v4tZBz~#j;~g!2)V6ZmkklYlY4N ztF`PO!9{DW1*^3}IEK|)%vkso)IUoTLXN`cXo-h|FB0ZP(tL8Gj?)%=gRngpe5SRK|vY3X>B^Qnm&laa%J)Zqm6$rFDhc(5uh20til!734TG)_W{ zz#*w`pAUXr*xdu(sQTB*O+V0?3Qnm0_25d?SpcpA^Sx{2Ae`hRz+~w*trV7^CHSegBuF74~((&oN{NQ$;1wn z01xdxhJQ>bjAj|@rE+vIu~UTko}FJvr%nid5W7&=Y6`wWnD0koM%YD_anWaxxx>LI zWS(*H7keJ{&j9-|oV-&1(l7R!$o+MYqh4DTBWUYzpM(7KP$*lJ?-c#ecF2FhV*jH2 zcaeKP;ip-&esXFYPRr}ML%%{mllu3C@s^s<$B?&CMo#0$2=ikyaabaw7l^CF@{Kab zVh$?GQMZAGHkl?nt7=Hy8}{7!Q#bN zc&WEl8`YEARR7)~1&eAbv2TM^+TqXv`QZ**%#Sk!T&r4ejx-u~@eKxFLuu^mz75Rq z6k=C0HvR>%Uk7XV5x&pt;x#szvhRXRb;g00D)B|xMX^eflB87yhC>%$qLgIzU22-d zUW!8aQY~byl6LOBT$(673f4xEcLD9@{pVDc=X>eV7Mh-h{By!>{2p zF!NpGlwKeS!!P!Va?KBca_=AT___|tU*f7oWi){xch}>!oFk?2mVzT9=jw{G1}c9G ztlgpmJC~sa?0YYW9+2s9F;`hv)&CZJr0O8OGF0)hAFCEvm{Pj%r>ctN5yAUX&$QzU}jm4ZI7tWkxu&-cdQvY~Q5%N%d{TzpcL2aa6Y0GJRyI z*uMG2f*QSW_=Cd4lIm|fJVA~wuRhuO!mQ+Bh)Gr8(8-+3!x*!)qPnj=AXL~}QT=ZV z6JEDeR!^{I7X~(|zQE#^+)b;;+oM{W&ds29Wot8q$EzBfjm@gtT6>M%ygGv<^UbSU zVL%)s!=_*J>KgC(7ATaw0G!dhx)gI|7eWJvbF_h@)kIBH9cEY%cE_F zx!(>i_d0j%)U}g*0(!e!c&bHp$>0d)0@=6^EcstP-Ddyv!Snxkx*a!CA8zZazm5bC zw=MTY;>O#daaWC-aNgj{LxabS9DeB~!^e#+Oqp8!yIr_%dUcg$oT=%us(lguWQXl> zBeB2sTZcp|3m?v?-V))~+GS?uuF81f{oAXP6_tx%x>8wLz;8eBIrk(~sr{(g^C*ms z&$~ZXT~UYDO3!Bq-o{{sf^h6G@IYaH9==MI|bQkI59d=s>woHaSsgCL*}*5s1_<-n-yiB-ptJyg=A*3w~IW$bbvN zarlAzvM?Wn+;@bNyv!D1|1R)X!p>!2+!uLyjyZGjV<-ioiQG1N@=jmZ~%ve4wz6 zo1b^6Fh5D)^%f4#0rwXU!EwAHs#6KpCK!R^aaU}n&syWI*uk|fhL?Nu5sohhYwd*Z1&nuYuJd zoU#`#8U!`VXJG1BFgCZqCi9t_a|6ifx54)abG{CDWurWP9ry)o$Py?u#mNQP3rt{O)wRLFl+y|Q??up5FbmS27&V8^0 zRX7S4o&`EMM%xI-rh$=#Kp#yxdW3N5O7IE7=>gz@!hCte=SJ$Yr;CnKZ;bv2Cy2y= z^sC?-ggHx&50R9+M}twJfzC3pHVOA0^c_cvoMQmo2b((1zrn+V6R6{umOBY2;@dsy z;0-MH#Gaxj#~@(3M#hC=^Hlyh7~aMR-2IoY{Q|xjjKs(>cwcOtFyC17>&uk;@QRqW z%Mj9weJAq73e>7iu7lDUIDrc@Li$N?6Xnams6ER08Wmq<3OEG|@!Oq&d^h+M;g}CT zTR8nK7@Zt-Xoa|z*g_`xRc6YQlfehgkrRGuERH%1A}~YRZc;~rVeTM8(#(1m9oTS) zHmeBNj&B!^;M(!;gGi)gj4r`wb|Hc<_T>!&cDFti;jb4%i81R zy=pM>9&})w#hyT(gM4)ZqkWJa920OSa`X`}3_M73#ZfIvxGxmf-e+~Cc*04oL!w%-?rfv$17D{#l@pp-34&q8%Y4uww57Eyd7_%2~i zr%5dlb~l)-3uyn3LiDkS(&&>?UkE2*yVMWLtH66z2W>p96`LvrYahXnh452i%taVY zFs*$A-%@h@C*@8Pu=WwwZ{QP9FG03HH|?H-WA%e zk12BEV<3l3`4~=){|B5AcA#ItR+jLk1Bap=`s}Nm|{BGgw5*Z)s@ylvw3-SEjAa4y-;0Si5AX%uGKh!K< zZu%h@4=&f?kb@627%H=Znc)T_L@O~3JXtt=h}rl;^{UE|c+!5Xeo(IA3JH#GGD}xf z54Pr-)Qk9q`2il0aOpm{EIW-x-9^j0&m8|^p!G1c@b>miIegDUnJHfxgpFSrgw2=3 zN;z!9A%_N9zEbms&a)gYQykPQ$0cb@=QGo0RrSTl$h=iSGRx(#WmWaDSWuZ?9fZwU z9fU2D!)7_`U5(4%Y|dR%T>;JUYoOB4%wL0egUz-z)%~rdrt?||=bAx0d|)QZ;oh~? z$5z7mnp|B!lF;Plec7>Js;=eUnN400gK&GlCT~e_{7x_$LUCZC$(Q@04ST7&JL+fQ zOUTV!v+SkdikorhaWDocv{vYwO|?5o4FJRSXa&w5Y5HXSKuFWo`_k?9a&@~VX*8au zyYS)_x}iy6ZCLJHbKT2Qf6d^XtUrFnxS4hk(c8>Q1|I?u9FS82_}A=ANj>t6+4C~& zG}rWfCCKjBSE_qA@z4&NN8yL6-Mq1Czh~Zk1wJ^_*y{qT=5gqNYHSWW^2%{^JIyDH za(X;?D%w&p5wkCmtJejIJS>U4$-@WcdkFchwH9b^#rfVX@)F0}X1c9Mt)i^!1LY++ z@Lty9dA-6t-(tFq;qeTi<_Q2i+!XYH%i zgE^(D`mp-(qiWnL)H}PqhO~B@i(W&@4GXhgt8QQ=TVR9;>8i%k*YObc2V5JKR2&7% zl?(V@qzE3RW-D>?yA4?A7$O zr*tw?yc!NrZsh4rjZNOi=_oUvha1c~9_}{fVI1BtBY61CEaTxf<3|uf93DcysCWA8cEUjtf z^+cuqYA&MWP%{e>7shbSngLb=^G0b+DVE}Ip&r_@yN-+GYwT;DFzw1}T4BA#z_J=0 zA`QM)=yvSdUWZ7pP841%t2v`%_@iKibkzTHg!KQz{GZFmjFKVJ)xB$Sf4VT@vlD8* zvdqg??yqP1AR&x}zIjs3<7PqMn$EXR>d?@96K|g=q))C%TZOi#)XeZ@jr>0c){Kg9 zA6^cP@;wQg0*6M)cBvUOxTdBq;X+m`G9P^f-)A$NPf{E#C3}y9(L<8Mi^2GVUAI84iM$>*5I|m5o9d1Ugh}F6hb#o9Zd5IrY{HSq`+T@Ji3mp|2H|Y#-h|= zVJ?*Bhlv@1@13lU!hDHu!6ySbtZAuLq7Q)4xlzucWec4;nF|E0D}?#sRBMv3Hw27M zt^5E+K<~&`&y3)~To%kt=G z^T2(Smw^XpG-SapR@79mR#XC&W?v&ZkqO|Ngky8Sw+Y94gP#%(BX{;HVU~bjI~~Mq zb1t%tyH-&CgTbE)b1syld5<3s*1Sj2)j4Wwt{!o4&baP2@cF{w0jBS;nu;Wxm-AnO zq_>%|!(frk5WS)z)CPxV863`;rHE09%($Ak3s>cQdIm=~n=J^gI}#!_3@6XH(;VSTWWrTY- z2z#^9{5(`|5Wz*jVhzBZj;}T;$5i@|w?deYhkWZsd2|w3YsZJ@`(srOSMbrQsKeoB zpI#33(KPws6~t`-4y@P-6~zdvC4et0{Gu8E0IRudl#;&-g2+A1lJjaZb=455LBhv_ z)gT;u4XZ(7&B1Dr2!7#mV1`L>NljP{62j%Uc!F}ijSJ5f=F;8p0$~fa$d%>6<<9`) z&fb?Ni9AkTmH;1pN*L}-dFV0l7L~6-N2wkd?+flIat~#TXol>SX5RTVwRNvRv`2zt zXf07slS7Kp5@CBVSREvG5g1wECHZZ3z8?uLPo2Yrau{ud|evK&K=Wvi&@`p~_Lgu`1#C<=_LAmw>e?M=k*O61jI47|y_S z_@ayRUdUK-hrv?qjAAHx>^cdscY}?vbw2n$Va{QRJuV#O1+-)l)NX9O$T@u^_MYkw z0{>e$g#Ib^l`t1W#eOE&0iHwyb|fI&7@QV%&I7Bdy%)h+i`J=NWQrw-!xQ3Tg!u|8 zevPn;QgZy0I?glTyM<$Sfwc6!L$iqn6LR0Wx@_}oj^|$Bzix% zjd1*9aA#pI`R6T^I$Q&nfcpg*JqHYHkQ1o;#0cS32xd+o=L`ssHGMBc2YM((--yUT z)pC%N!T!f)B7*Bs3H;<}AX*HD>yd3lNsbqe4**YAoh!jJg)I~-d8csrQSje|`SK@; zdI)j>N8pz7WX>JsHzWd{27X^%HZdJ1#XN2X?-8Z=b9g*JBu4O2!>JNs?_h9KVGHh_ z$_sPaU8;j{6zxByZ794Ne5}Zw-Qa#2w=`ttj>M0sw;-D+GJY&Pb+d5n2k>pe@i2Ii z>U04=ta3O~>RI6^?3=>1g8ViBzpgspfnjLM?F+!42wU^OJJkr@zi<+`aR?vnz|Us1 zT}E)>ZRwOgn{77wM7 z03(Dao0S*Ul-Kb-pPnHye;D`<;lwI1yp_7%8{icxM=zD$ARImqjH;!M1M8)?3cIjU z8l?^7^TEFeN4Mi)&lR>&dnG0Mt1`M5C(R^)i?T{utI}`aLxef$y9A|SqMRXLf)bNM zFmuTn`{`dRoIplPiq(5HSgSWN1iV;u{4p?b$)j@O!O2TrQNGaZxVWZU6UzAMzu-|6 zjiI!n7}4|`Rm0(=fum~f>Hv@8$M>jZ!DC9bzj9iFe^NQJRa*4+r%cTycuqRO^u}T6 zTxg(RjLo^-oKnPs`D4JRsC*ob1M2fxhC&4TxbKx|jmE};8Heet$MFi$4}Xhqb<{kK z9X2M8uBo*qnx&(IYrl&_C9d7Dv&3<6Eq+o?u5D76qDw)N4Vfh*$sbt_&)k<}&r54A zwqC=RH)?A8z&#p4lM(4Qjp~G5B;E)$z}Wn?%mp;Xf;EDh1#-ApBXu+9a#J$~S=(WH zkE!9H(yTGa0!mbVpeW-RJXEf&-t*1MF*V)saJh$Zu;~6WDC3IdXs%3|4_T#m}@tu&b+mHVt%om`I-`S5p5KiFk$d85uW+Q(l9Nr54Li>u~d85KCTT_9v~-C6?3sx%juRT1`Ll3(huOiyd8XSfHH$FfvH2DZ zTbyV5&Blnw_-5wb*$BMWd_TLUtvU5{I8FOoYf9`1S##8_7?OZjC)SzKx7O5nz0hQX zsa*}tLr~$O49gtZ&Td%x8UkGWI|BdkH{nXN4RP6Lhs>?#v}s_fMn_8gE2|J;rwnf# z^Qaj#2g4hq%yo124R1U#r>4?5v}1cS`@3Xo`;Mx@?m0E5J`kQBjBecYzZ~88>x~|6 z?w;wBC>=a_2Yaf5>( zGxKm&d_kHj+!WO!C41$E}7!XJ6 z^uTSMkwbXa%i=%jm(5zS5AXB3dc_Z?-1s0WL!wa zxLCD_nPCl7DF;uh66Vi6uI3Lej2o_XsBjpWvD7L)8Z8$>1v>u(4_6(eXN?xN7lP3l z20Cci)~&)Zrn!KOu058-$wLyracFCkFn^5m>)MRWX-C#Kssr;|zY24OyN&KCxWHzx z7KV>nHkuygv7^9kRevcMchn%wz2Lf|<%Cl~ZLQbP3b58|;(oB!Wqd053eitigRc`# z#lee(xgP?j-v=2&iTS(~Fbc_qp=3TGU=3Qpb-~57G@NhlXlb}4hMQ3^LK1b)?d-^0 zwdC{{wkCiF3x{!Za84bXpF2ec7rPRCi*hyiF5w9JN#_C7Kb5$en6sG4Tnq1fDx6|M zYIgp1cQtd|w#(JbxhH~)rmg|2sX6!GRZ~Yk0HbhBKe-!xm2l!8bvU_6PORI&_!ng2 z1@Jw>9KLc#kgpa97hJc(^Za4c-jX9`(lh0Ip;cilaxOL z&k|0c|ETlO;RlJLG~UC)T#>{H&y>3dgSEaB!@xsC?sWxUBFw=#|7u|$X6D>y#&t%4 z?-Ax~M_;YTP5-zS5ju6jNQSTGO3p=qnk#`i^3`0 zqs3~$NSGJk@LuEx<)^{uTqx()qoWnVoIu8RVu9QNql$z6-+`%l^I|s|IpdlXponw^WGzO*qmJd@~vK z&u==!ZkGUeF!({?7$ZC{%uQMOc*=w#i@|8J0k;N!Da@@6xeEs6sY+N9|HvG4iD!jF zxF~nYpd5ps7XHslHb_AD5Ab`!PIK_L!q!`;Lsxa+1Bnu0E|E#(gd?y- z0{s9p5khIX^*%ZNELaPWY5>*(aE4H#PWyjO;^R;XBlxI_gq9#a8T_cogUHVbb3tfA ztHU`G{I(@PopUv%t@&4*HekJ7D(zKI$y_u>^1mQc@kt ze-iwY%HKx@q02-gbHPbr{#fB29h7?yfYqP4YCCnD#w~!=pRBvULq+ahgZ7`gL{9v2 z1Rx_!D82%GqcB$k#n+Sx=N;5FrlOYw2!i3O_c;N(`D19C_Wh+J)DRQn*O<#du4|AxvLx3#T{GJSD%Q%>}mK!Z_3d}gwl^mLh&u&=Y%7ln59!P6**K}`aktw z!$`yDc+K!ujO}>B(WYj{luQN>fvKA^_`K*I1i@WTVe+`GmGl+0m}Pq2l&P?eHv@0V z{EDyo_M4i?RKn*=9}#74J68IHrn$$=nwqKLM1#`TCD<7Uep`Yg$Kw-=NaT65{N_w; zA0*PCm1ud$e}e->%lQM`MdW@2tiG8z6O3A54*8>~0ctKN)C$vaS|-z>J4D)1voH;2 zN-&?W8!RYh0IX)S`u1Z7fUd#Gm*h)1?BJy z1_y5xrb}?RBX$nSJb=AO2F}c6XuJwUq!vfsE5;PB0fwhg&cV=%Ng`*?E09tkzZE>Y zc+tYznVFVW9nx!zPJ!VZ0p^GdOU(YZ@#iZ47kH=0+4VO5S>)*!;NMgq-Ed`C<-@@V z)t?NmP&vG~vYE&|l(rI1P{s?V(a@AsFur-f8TTIF+E7U6a0@GJ~z1(!u zb2e;-+%&0{;L@?+yawNnuQ#GrCz~m=GoNCxF}cM|);AD*A&j+Lzgf=Vq?A4lwO*%j~h; zk4>A~MZ4u_(QaZevuoTw?TNQT`)p&+LuP`Ipgdn%BwT`ixgK5xlN=9rN&=u<%=E)_j=oBeP^ax|Zk6 zYdpMTcFoTmi>{;dU74r(0z0qGi7PSl=*n8@Rr0MRwIr%A-$mG34DKb&y|MGB3iDlY z{#=#Auz56wpf_j=hJ%x>C%{WpUI4!UhYs2?zL|VC@>wub?#|TG|60LlEL5fm7;Pbl zj!%?8s}k4`x(9Svb4p_6{xMs^jWMc(HT_qdYAHh8&TBJL^Fo@v35TRFO zA#%5X&ynEh9@CS-5Fc=*1n2JoYfp(zXY?Yt>JbpFmlzJ3`~mL?$FbyX5u6jPxJ_JQ zw_Xk|(Q6-M_A>Fc5Ve)yHu!1Nro9GNns$p}=F-kQo zT;?OW7krI!L-0c3#4a%EhB{GHXQz$A;cj4cH_ij-v^x|kxDREnuyYq+tK{oN%Oy_} z_Fb-n!c{uO@Rl8x>iU);&TKv-H)p@GK|(WyC1g|4&4Dcehf2n0e2R*;2d31H9@BL z6k0r%d1-7NtXA}H8*W>CA;6WHd=BBCgJ!>P)+l7fDbpT&kuMosGrp7Q@Pb;Z4O`Nf_09km^KW$aX~@itE=FPnOhg?jJ#Q28;ZWIqt;LQFZunfrE?uJ{(&) z)}ns-1)u0U7v*c<0?P5`uzrzILx%?38o!y!L!oXOkQh||ZMg(m*OyOaJ*?1rVKWuOE2jTQVGoFWU%{m@>neuix++jxW zu+uDS2i2`5#;@hEnHd-yTbm`pv6ImBh>8GwKKNzPcnh`uaYL@Zvqwzc8aGV*)!wqH$58s;I zJoGZX55ZxDnRf`{Z*OL{^K^{q+!=?r%@iJvD{SnXt+P3O_0a4DB=F{;kX~q7bVC%p zTN>Rh+t#|p%1?L% zP9XYIia5!Y(|^ec^ca|$9x%t~LdOYn%}3~DVLrQuP7`)^f`q|OzuSF5#1o8BynrE(4ho* z{S2(vvrjY=pUHL~kbww2FN3}N!0Uy%2a<(WKsnzd^UV_3{TuijVe4@4ud0JS%*H*8 zI`QvJ>e*}s+G+k-WM(Kr&XN!g4{=@&wZaCh1&(buqoHaIG;?sML-Fk`nikAue<{qJ zsQA8zv15OL6T;3l;KsuKg<#wcsguO*%V{snW!&6cfbv8Vtkq<_1Xfe=2cR1|nL$S-=mKtFIv0@myJiFqT#Uj`HZg?buO4oE zWKK5o^1{jSW;tVwH9HE~c6CV?L8#3jG1RX2v#^C5x9DNJ2c?U$OcBT}c1%|Q7vAJgD^DuNbv+Mb6O^R>( zB5K?Oc5GdqEwAH1dQ_c(yRUN!H=}ZNDte4?@*%Kh+Fu6NOgkuBR5O?C23GG#!0^$< znhtu0C>$=x&RDSKoI5f^*B6cdI8NRdr4aHS{Y03XO>^cWBPY%PYq>%%qihjP^g%G% z4s|RzSgb}kj!NST9m?${rpXK0WBXhH5u#F*+z!^{SWlePM|o^A7&ZxXkk|Mn!p>P> ztrUBjdH98FZSri0p3-Q)nC&m1B7TABQxUo6fqzo&Vro_(2J)8BHg1Q^xhvoh6CpZB zw32WFzNO=}J>(&QUX^S`!M6(YWmp15raX}}Ppv@z)d2V}5&0$H&xHBnmh(M>qLi9F zP~|7sxo(}J7+JlOZ!o!TopR?B@X^Bl2jG)c4zFgBsS`dDe4#LNm#h;`E&$I_`Nd#( z4)r-LH3`o#cfXiDAcyWD)k^}{>v6jgDsja?YNT*zo7wRqIxc*AbR}*l2o0qVkf7LF z@FBwSj`%7RI`X5;l$F{3Is6_@KO-T0Ymr{9TK9wB5Vq!+y@=7_G>EVLUTn0m+TM` zX65c#m96c7wpH3mM4ZY}dZe&}wpn@-2G3Yr{FU}oon`oZQ+7h-dl12)imTGfpu&u} zqs)%g+1_>{Y&xz%YaeZf@i4&5S(Dw=V-uc))CsseqM;{|5@>%7;VeubaV@x+FrTg( zYToRF%#yVzbO(sk6@w&}h^jN%>{*Koy-;ZLQuc8R7u@`Ec2yE?RdJ_kOf^eh!Oy>c znQgCRueaKp5$m%3tryMmb@&nZh3U8+XWPw`^|;H!XPanwc=KwKkQ6vMrHR%DKibfw zn9bk89YrUE{52{1)3e~y_T{g91M=6v^xlyDCigDZ@S&x!z+6n!43{Hwx5sAM0owPQ zL9e1g9RZQrAV%&ks$8Vq?C>I+dtc4=uX`UNI66~u$YX_*$AV#E$^-tJaGc3a-j7jM z>Tqs%Gj*nb=Zf6M<(irOc%iUM`MtR9FtU5N>DjuZqHybL*|SUQ;P@Vd{ImZ+hp+6w zN*wFvpM$IIdxVBlB#QF$k=r6aj@DS@|Dv@hyXYE9ij15UmkD$3ef=WLH{mj>nzjmq>>8r*q3;&n`Bl(1!->Q;Zc*?fy0TW z^NwuZ?th>;cgMa*ohL>|8asy`(pesL+PH;xcVv?#;c3C6j`!D(I{)MT=YKszu==-b z57$f^kS%NVSC28HE**aHV0n(Y{hZt_rse1o&%_6|&zj#4wW`fPD>vHw`<+%@{$x_2 z$=JD$W^1HfSJSsUb_19gZ5J*4YUeNqa8(&LF2GK4=|V3z_nF;q|G6R}Jv_VANyv0I~!X*5a;H|>WmEfJq=p`-uvHfVsyZ2bwW=bg_7q`vh?yVF)!1&-tc>O|R%^2@n(LoK_v%bijrHIs zge_dmS)r-?(+rB`y63u~CNvK=dTY10M!N%yCeDnwznkT;Tx}2hwsLP55vMxvW0^tl z1TeaxfYCL%dIblaqx-7LFTrZ%T!sryIJKFo&Ld_ZM7hsldvtn%2&ME67v>B;?<8UG zMYAxTYggyNaNJ2PxDq_VNBxmK+#LK~%CHXS(ot?N0vGEPh4fJ=l!s7h{*A(XKJw>i z-1cCc2Wj>LuTw_%@4tuPy&&K)oM%>yQ*u#< zkz-ZZyIHNVPiVC#m?Jha06Zxe{9x%k~56f0BE~K5S>#F(cNZVc@A5RVn0%ZEXIDMIDCZtNONt?cgt!Un4J~5 zQrvg;R^(cFD{$QnrcGls#2ZZC#yQ>~W;Kabn3;`pCAjKBirz4@&am=!lLO5zIW4cu z6&KBO2+-|%C_f!oiN5r-!nDfVF-^k*gL}qZ|G(ZdN;~KJyTJzn|9oxzsFA}iydUge6V2O&tD?;NR#iA ztF4<1(V-&pjsW8ygTuhkvBI${z$XevmVt36pbnow@f z#MPGE=7e&tFn1TI{6;XkH_GFveYYU&+zNhK`6%!^s)I~&05C`&Cg-GlvI`rys3o!= z!`+Ensqw^4;DTk!Xg>UDA4EX2<6fX-E?ehbpk&?zyxzjmzk~a$d^LE8Fze47EzA#T zc-JaV22Uf`!K58=f}2i|DE!-7BJ7Po4v!Xg!eFh%SO$!YP@itiy+Fy)Gr{n8GN+yU zYDN1Vuv#(BG}Ve8oX@XQGe%L@e$iZCgNyZzUpkyl&O~iojC+BSBa6UlEf201R%^va zfz?`}>0q^%i_C|6OWfG8V6~Qcu5T{MuiJ5lP$tZm-rOOS9DUbp>5JPh)44}P&UWxp zVec+53QASCCwPOf56ec>FS&(8q?yR$&w%y1917zXCxWsdy@=LKd;%CXOSz3E6@fbq z3Y5;k$;T4F(P+-44lcX~{DUwDaygfp@+iu~xeGx;=()IyD4DaCi<{^K#53oel51Z1J5JiF(t20hlYbS2QG{ozgu*oDYFjIgKq|^W5lmRF#1EL&Y$m`vP=%$3I0vkzZ^pb z4K#_#V0G*;oQQL(gB(8zR{O-7fP0CYzuObqN}bN&L8uf)h;1;V`=O#yfeEc>K5TK! zg~5@3gNqeC0<0CyDe{S;v)>HXiss!Wp%&&(w#0jq4$G0yijL#j379D;AKF(E{ukWE zV*_wftr>=gaON_V+_S-lDh~zUCmfw@y7kZ14uCVJU|y>7HC3usI5HWGvQqA&Crcfv z{0{g$#;FI+h#k~&F zXGs7zK}jQ@OelH_xK23oC3w1U3?}D%Ug~%sg4LQH<&TS;3z5>ec%U;Eyk6K^0oDRX zzYlc}rGJ)yC~{L`3kRLGmJGuqp^_FN4=uz|>&fYFdJcdA4~OV@366Ki5gx#6#^1zo zh;aBe9JN~TwmejV@&@_pfFtr&{HjNZ-l*btL4JSzz*Y$iO?|FnEkXH;t6e!@Y~CM` zE3Ld30VsTN$gV`&p;u@24#;)y09%wEj6NJ`@UQeJNso)SO3~j0qjXoV#Z-v#~v<&FQ)BLz^M^Y)yAD z_(EZ8D;V7YRr$T0vMcvvt#c3gE4yCg0Z&!_3i266HtSBuGdoOHrfv`;!>^gNa}rov zxpPt>bw=)bx5I<=xwT)YFQ5Hky@|N!qG(O0msxsVqVG!K2w$({m`!#+X?=JZH8H&9$`#nb` z+c;MK(ZcfKxnHjd_YI!SF8%9gvzGJT_xqYB-t$i}L$*1s8vW_0ocW)>@&5DH-1>+) zt&dmsm-7>@7&q*K^M_x2DHi9x_+{>ZKO4WB`FpOS@Y|QUAM8T<>)d>6?orDsOjVa? z%=|6c{!BB;=@2WN^-ZqC=f@383V-`4H??6US~8#JIJ?UF54e%A-P^Q?<+*oi-&nr9 z&JQC9?VD<0+?P0Gfy~*joUuT*p916l5F`b!;f#eqj=L#mERdsH!MHh-xlk#DzJbgU ztdJ2-+zh^38J$4rfzVljlJ^}>o{<1<-4sH%%E){&2(1&2pw)BTF6D_!!5dZH8~ll| zht|O_Jp`GEnx64|FjJMgom0e7ZGP8*9A0ilBY5Zzh;YlIDEc-SDU%&sjh}HKC(yU> zGY(|$Rq$-#SYz-5Dt`z3w6Kq(wMy8XX|~7nnE^duMXd}jG_%o$m>hqa+L}9?I){jy zBPRBdsboAgh&PWLf!*#& zQ6YT9BRf9$7u7-k%qP4+=WH;ZSpr5pKH-t^a}SS!xViAeLT}4Qyg;c37@k4q6BHlu z$f3#LA;Rvj;7f$VXMnF(M)i8Q83gHk0iLJ&e+Q#tf;4-Ap_jGH##BCC_bx6oOoI5^ z-5;%LkAbfdrljm_qAd}pMf`uJaGf~cVQb@3deBH z2+>E)Md^HI=#`KmdlZGQ!@m=RV=frQq@06B;q!$f1HfZd|6;JVgwQH5?t|3#o&(=0 zoa}9OrO_)q57BB7C18p0KQxI0OpB6yMXm}ZXeS~rLgW}NQ}R(M5xttz*$gVlx2xk6 z*{CDou@}K9;SjtbS}Dx^@;Cq+@OaQt83JB1TX!N?SK_+k4P+8)_^ z84T+MO#PzooCj9l;ddiq{}mnfFR{H~gS%@Z<50=xP$UAoU$wAaS~I1c`DHdyt`9!Iud8H-WDbcHxkm$wD2sH5ht9 zUzR`{Olai?dzw8YO0h+dKPwzx3tl74iHuy*&4jq_H?dhbOdS*=kiQ4sE$ocO6B=|W z=WDIxP?bLfPfTh~9b|%wPJ`UVz_$o5?9?FD zc?qnZ9*5ER{78My!%AHv>|X>%;VI{wj})v==JdtX-NM%O;0NFuTN~!xI=%->JtZM{ zunMJ$u8z7+!C@IYavd0^COa*`NR8}%4*pU&&I0}@ocIF#hsvw*=mtwu-(Lkrx@7K0 zkgme-yWr#8m~bo$KCb@dKR@O`{n*8jj|}abI+I4-Q*O5?Jk==wl4l)a z#y3Tm{Rrk9^v4P<1VugrYoEbygj5U{Io~o>Tqx1m>?_8p9LZOxA17ObXRG}0;M+AD z=N0xe&2Mt>8S-~q<};PJT(f_P8gtsLXr_rKRh6%>UNHHpJl?Gqj<3qUU{!vKC1(RP z-|N72!v4voMGX=|9$P*mi8bg5eqQsq$P7ZTb-0;`1GgHhf|06F!UiwnctBAL+)3rX z;;4S+9b(>P?8SxMHTkv{wqCEv%C)N3i+1@DSR3(1F%@$zg0YeOb*fdPX_mi>RTG+K zWRY2!&0{w$e8_;>iwk?QOnZ~b=OyjT`;vBLXRNP)fml_DH4MR=c!2}Uk;Rp(5K_4T zd`wXbN3;dXIY}scn#ggj&5XUcus5G?X<^1ki`H_j985{=W^l($ zUMmla23p^P^$x=U-29OuZw@==d+)o}yNnH+wdS?XFO;{*-)C7L7nZlpueb0}dEG(z zr?C#9bG!U1tBcuv`|`=Q;%!Wr?ugUcPUQbu4H=z_;JX&IAMSm2e2d_W_Q8ur&&)4*H(NNoK{sL|;;c>LI_SO3_S`E|SFXZ+I7TL7vkk8~w zAUaA!F>)W}v%qNoj21h~jD>2Fsh%gIWdFjw9rEG+b+BTwAT~-{eCD^|Tl*$GH9-%k zg>_(veG{F~N{SPmTwlf;Xb=we?LWDRd&ULw)iTkE%#U$%o)anrCpCC*RV5E*-#5`| z7CMNc{EPbWAP>!O-$bVy>nA#ek1dS9F+bL`?@pK<)AD`oyR)X-^!&*fbeP7&-DWcn zADA{X5V)YBxq1dppD?fSFx51f3F)Ht=AxN6JWb^F&1f2D|6~eCO-dmA&gJ$OYThX5TnHF=<3VNBN z=Hy%P6;ASUGn$fZGOg*MIr+3VCjuWdLpx-#eC4%d+OBD4wox4&3YKMXm-o~>*v_rO zf8Ft~m1&o-n%MKJ%%HjX;@j(z*VB!ij$JyNMP)T@td9zB&dqOX7k(=kAbIYu2S|bm zPu@(6?{KKZi6f!EOMtft zjNd?%^D9@Of^e|?*b3qFE0Cj4pib;V@VmnP5b(#s$%bYx%E$W~=S)$REyijk9R1p~ z`vSuoXsgxg3fo~Q$e;wHm2uIQ7+Rq5H1ompxc@~TY!d!EMLHh$?yDKVMv!2=p)~qKk z2P5l8F@n7nC+M&PQ=r3j1_|>kc+Ln-2xf6`)1wZ5_&L*ry@=WUB}O{_3DI&9x#)bPao=-X7sJb5sJ1Dmcqf^dbj_z(@?!fFh z%D;h2REMiAJvaa(*c%bhM%a573@4#H5(cAY$e~@}Q&k5><;H%L^9`nVvGPjrRl;E( ze3R-Q4ZdCFGr(xZ?JP6zD~xoY1^ay^D6s*o^%%*4FAzDMhA-oIIgTv&lZ7MbUwpM) zA_G?2#a4sWcGhgL+Aa_5P2qcCg~RvSeh1*?q` zd%yyAnSA*3?RuAx%BKPmaPQ>9G<)mbtS-KP52MWQxr5TU=|AwE} zG@6(#2+lo+YEdUleFttO!F+2I(aSlXnla^&xyW zO^#m%Zm9aNf?Eo6gPW+9+<~RI7Z~-q8BMgeu=f&JOU}*fqWD!2n3msheKjcea7yzQyo~4?+bY`z6#@)F9RM1MjUeV zBk&vKI+*AkoP3}G>%gB0$KZK<0Uktt52jb=iysYE=i@s;-V>=~!4c!t!h9@_YtNTJ ztB<1>piaC4{v9KnhIQh_`bd6c`hJ6M`!&d}&@__Z$->bi!FrG6euVM+Mb7b6E_w{E zzZv|gaC!k4#-f~CMa2Ir?9IjxPyA4%+(kJP>ZKeC;A`=~9b5z^G!wBqz>_3`k7muC zycjwBAF$DcJ_g^X{66?`;q;4OxD)l0*Miq8zYT^#Dd)c7iGK@YS8Z$=^_852VEx1| z!ogrgMA(7@^W``rb3Z#SAtG}ROD_E(yJ$#B&8UkDB-I_9C&7=Y4*5A@z9mft8A5_C zOqJXs0qI-8UkXPL0RJe=d9_JYcW~hpZd@^8&gD(1J8-#EN*e>$x~AHy&LO7vcWC%9 zQVK4~BudcsxK|fB_5ZN;Cg4#O+24Qn?Y)y;(g_I(5JE!IovoVy0uo?=VOU(EEH2|H zn}{2t0|I;hP5`@N?w$vn@z zzQ5=Hd-I6(xu;HTr--CdBS5LVQeKeL( z=4oWH4$3@}DwZ;GG|yN!@7Pn)L?9p zGLO-XEmaP50uh4^Cuy!;v=eYj%mfaoQnXN_-=Qy# zK+P1Yh|7lK<;s!aV8p|GdHREUD|4?~e6V2{BaZOYakT@FR`#N{;;3QDV}9^FqYop+ z7b@HD{Fj&-@*!XGmFf{jABwM04n7CoX!sj21`bBb8SMDG$}~=Vw{q-i@P1`CWc)Qr z{ctfjSD7Cz&TFfTOys!oI_rgRg`~g79MRP>_octojbP0c$p7d+j%dP^*`XJ)-c)e1FU+x9Q>gw zQ;Y)S!-CFnANgi13&f<~K|FE12ye6nPCoFD2c$8sK%q=NSXEf!tAOnNmdVKco$4Q6 zElUqpozJ7y3rQvPGr74ARF${(u^S-!Ze_z5{XJG6 zvDVP%1#nQc;wxkdy+=ZXanqSADe0}={?BCf&oJEz*}}LQW#7+uHGj60{8E(}hT@fM zQ@to^pC8(^t$ro=OJ&!2;9pwg?M$+KMr>z#K<<^Y=$EQ7C%p!du@*OOwnH?Gj{ED| zUDJwhRQAEj?f%k=mnetPaM~?(SO))!js#P+GabNBen!2$eZiYr@r%k)xb0qU#b~e0 zO7thl|K5sCiTS;ac24IZqYYA@A5(9K_GWk&jdM z-v>rNVsbX0q8v#>{-;(v-sr4@d}1p$x77gif+lHan>8yUe0WhhL9zm$6}C4AK3I^9^RySYG@O8s2)t2{%)?yWZYqyO|Gh-l6%C#yUE3s+n9Mt^ zP12b*vp0Qo>vpu+DcEIDc3Yd|+C*T6%R%jA_yjPUW@mK|5s#3pXupM6zRg8;rh7_ML&l zf0E}#eeF?aXz;fG%W}9!vIsM#g*}r)u$*ah&t&he{(QtT$b`BHj4nrQ{_3~RF#IU^ zQf1HAvbATjvG{$6cB{z3UC%NJ`%jV5Udb`;zsu}i$)e(YFvM092_oRnK|6cHWHr1S zwxRrfBSQD~CX_utf=f*>bW>-io!~P8lWG#^8G)nxP`^3vw8uVr0+XUqw7>*MGbTJx_Y~hW)cLx;F~-E_|L> zAI^37|7Ntlk%jcen9QjQmXmX4oVl()d3QunaPn?U_4gQpk!Oyq9)clfrW~eolQa#*$TN3AS%KUz zG#RrpWwLZ=GRZ9mesOyP`SQU~3@pFn;Y%DvW*1^}S^Y3-)=9r%7;IoH*RML*w0}Sr zLWF~{)(tx{*z7#sU*v5#y1O}nX?Sk7=9uKtj)AxA!RFcD9&G-f&CB)Sr9<-EqX)@@GtVOXguGpU<-i-VXAauWjS`*<=LJd6O%_GQA#ltnUn(Q$^QlayGfS4hsr(8G zx2r@~6SD1PpP zWXFRMh5M{}*cUK}_X_oJ_XcBNrkn={@!5*({tUcIInq@QTmk!{^K+dYy}5vf>+HzB zEEv~z6z@y#E0dXqF%X;f6Z#a4infDc7~<+Va%d-btTJr42J~ zHu;AtdyZB6+R?3({a50ivqAh1O9?yzICN!`v+rou4ck zhjti*x$QJi2fX?f34Tu5cNh%oP$z`e z$W@5s0D2dz)8_5qZgh_fw}hx^IstCN|?0wAi&R$VDeu1+>q4ui<_Pp&iMx-&Zj zYM1NIY}Iyh=;~y7RRHaodkiV_-vc)Fl=By~y|~JAu9AV*pyT>G$;4|=FQ3SQYw$?q z56gO9o+LZqa7vE{!ZM;ru|%&;mUj){2AJDVWt^1d;q7+fKZ8$J=Dr}V`l3ANei?r) z?%x=}xUh>N7p%f{U3M@Ga@V32{#({TYZ%71Tw^0^F4)wR|1B`=YKOiBnQ5b(3mbB& z4dwPRLr!(=mGT8>N1w=u1<4`J3-PO9oNBTCMkgr;9s}QKcq#Y}+_%7Ulp~|S*C_{43HaqA%h^((WL5 zu=oRDDTo;qQ~Ua+VY z-`k2GZ^bVvdz+yDwsHs!qQKOO_ge5l$Qda;cA+lJK2)ynInkyED1e>d{3G-HB(Lcg#DIc96CoXzSrC~fr%xXaDm3bV0SlLLHm`5VdW{_{Ya!6I)a zo9(?YEvKWNKI7bTT~p4w=&W(mWK%F*=)Y*nS!bR*RSs`*7yjls2x%#Nc^%HogvLC5h7;@}#MZjZ~EwpUQ+!uVk!05fU4(?mlmCBfLe|NV& zFK}9v-h2YI95WPx_p98C#aAEW1~gYr`xwm_d%r$Tj%(umiOa!6Cb)cv*LpJeaM2HYh=TR5#Qzyz+DWN zf-$n$@=xUXPjHV%m2elkE$Si%AgUY#(S1gQ79y)DY0Q}#`f-k;);d?9Wjw-^zc zlz+K0C#3wVO|br8Q-eIZ&2I|f>IB|x^pTAJYs08v|1XANu7D{B_W}e=LHH;gKtU$j z`GREv$7lfGBj8h%T^RcV6O{Ruk>4AmzW*ffY$M+QHn$)DIPh&IEHcdRjZxn>UYhpc zSGUhC6Za&CG$2a8H=`G~$pjJ1R>MsoXoB;n1~+-x@+Gok4;pw^4AZ85eEHyV_2xWL zsGH%p!Tk(>10JT#?Lj=ZhSB*?!>M8zzR`KPq1IU-$WMaVsa+BpFTTT3JZv0@=7Xxe0!=KSzLTWyR;oE4bo4*ObLKRJ!g%LxGj~ z*(W;>)3W3DCG(4lQAFo{V6}(EkU#!;&dx4$r)F60&f@o`c*OR}ba3<;9UOM!P2G*N z(iZztGqB1q>W2^q+|YSLR{K*p;ATH|gnj8xE6)@_>gb2XG7E%6!WCStJ*py2##tf-#bi`Si(IRh!QRqlel$XMoW|$({$nS0Okr zcqib8Q^^#%mY4vD#I;=6KNkFea^PAphA%rTo5x0FPRw$%4CVfLGW+OM(Xg8leXdcR z32v)wJq)f?_M-oC4u-)z=)-PPZqIvQJSE!6^pzcq4v$A%iAa$TId#u9-k*UVRpvm% z5>dw*3C6w7j$%Ie?}jH!zuu{$V)TAD?%#HFxI@s=w(1{nN<32Q1QE(dkt+>8N}21f ztO3e?6p(u_sS_9nHWd=s4n~0~_b!)hy;0XFBae|d5}nBmzfo#^q;gLd{Dq0`GVoz# zp7`UbHDT`n_f+O=vgZUNUj+V>(MMMK8`w_kSMXH4Ww-N!y7e@xM*xv?$qeNll+$CZ z7OVmrs|8kqP3HKkiqk;Uw{ZX9v^AOEdf=20nLh(KPLsVTthb#qW+a{Qw{F{%U69;!D33Msnj*Oa-gkDt+CJb?gs59){)d>r(Dryjn~;fW&J ziOmH^On|-M5@i<(#Q72G@R={r-RKm62N<1+;3j2G=m-8}L+lqUbusj z?w2ZW_IwSQ={7t?Fn|WbguK1LXxes$??597D+fD(O`_Z=8a!U*zMsJ7DF;xv;93** zM(`%11B-Esv>iWsHYT{#BK~V}vC9NF3l9kiWiB@6!bCe0sLoK8GIyqiYLz`>!KS~u zG1hVZiuxW@ZRiALE>jH|i}3XT*C^VVIJ+}0rs{=-2zl~1Jvav*5@pZHGUa!vOy4?) zzQJ}Ic=L~I$*Agj0l$yoRv9^uyP@1d!w%<}=zOx{cNh@2LxhpeS(*{i$X?IQoQ!;_CCL ziNQM)Y?_OAri>nxs;ERiilRievB@7Qb31Z$m&4hWgHkoV=Kna^a43prY-vr#FL8$# zBcQ_@F;C?12ReU(I(1oJQ=8+*ID*7 z;mPm`>2U&_UNWD~9C??{Pf~RvoKs~wor`1(oj0U#IGjE*kB;Agf2g_cl2^3eTJP(nx{yJt-B(V`bAxc-};V4A#l4lTzhYWhYq*5saOF zrlCkaq}DgGpISRnxHt8kSJjo$?__9AlZhw)=Tl~nUcI`=qbH|o+;3#JpPcGf6?oKs z%A94-E)@SCUqi{wyFG1w^SE94^W~{$|987quA7}I^Zb`5&+MwXsYwl2qaAA0)j`t84Luj*o(Fqp|)x$afzQZuaCD((> zuIs=^#7>|boK@yeRX%P~Zht=I6=gRD3D?_(z2J|G{s{1Q%J?*Uv&(f@FZ_36kU+$Y z$o(Y#VbmjY69*qa$$ay~2T)s%0fh^4ZTT4R>B{augK_(!+`Y4dcv?JFt@Sj!gJ{Nqs;X?4W zrtR>xo#$5d2vKRdvS%0ASTY2&^XN7vz|)>QCUZO}jSIf*3{3_*)>{lV*5ji+7eZ3U zhm3I>lpRk!A761(<^|^?`0A4ELZaSz%HACCjmqxhz-VK3;8|dlnry+yUR0OOSAtR1 zwhk=ieM32jO7NNjc=m$#Q4aI-8QA-yDsd-?4=tU6-M@hIlxb#PsWP`Q`D&H%aOdJ2 z9Q6Z#2misycY)DMC`U~%Sb~~H?f4cLZy10tKFBQBm%k01=oNiAC`0LHzK%(Fc> zsYSLrpj;tk|7I|n4dq;8!^ti?EHcRvgv@zbPIi$!XMm4U#(Szpd$P+`LTNbJMdlh8 zPIlRHbYxC;kpti3-*w9FPO|3?81O=fOjq$Ro!8XcyA65HH>&S}%alWCKtaNR zhn?i#z;lewXz(j0EaD5kV|4BT?^5<4&ES_#S4rc-G?oBrA!M1rE5H%uAR0*ML?eF| z>||mm_;i(f(a1t(gyRHvXqw7BKY>l={OC5ED`Td;|3Fs>nI^*)8oF0Ktm)vaav%yu zS6~2cB?zHKlHEPQJCr>~;epW9C<_wqq;f8K;6p0)UEhL_Hu{~xcB@A11lQwYxKV;$ z7*)&wo_E3LDsv3y@&r5KZ@_bv`D=hjlTgkN!t)iet&;)Yr_71v@bgAz4fu6sAL0x1 z>p6B{w?voXxwr(6dEu5vx13`2cHM^eF{$%;gfe%$I8S*w#&&#rkb}x{o&<9qcY;BV zo?)-CJOtisI+7r?!kz7>*0r+ZI8uxVD@PM z3pZsRHbc3;57^}0I!8v|ohou~$xgpJb++5RT6Qc;4Ys@=NY(PxkiHnzqK}y5VKuJj zWelG4z;Cybf28a}k)vNI2Nuh!<*CNv$*@Ro&4lL@@bA<+_?aADjvo`ZNqR-JAu{lu)Q|?Wp1eBM^PL3lWx{j?AFs@f>Un24a#?>*YDOiDm?%(@i`-6`V{@XT z!*cSysmA6DAR1s)$*?mEX1^~mDcFqEDd!1Mi9fdDvC6?XHz7wDTTVuw zA-m8I603Ko8iJMGdvM5{VorybIF&Y&k^}<|!!WfBtCLQttNnJZHrB1>_BHo=Ij zrP&oLQ)?sG^074GFB$U9rz4A_PeEUCR^PakK8@c@eY?x#r}3NVID9k=&IF0Bhcik>(-|wP=}eNtbnq+c z88}zU(r56S3*YSAka`Kf*>-G5O}9?$A}2o!&pER4S;YFMxEy>oRf~m=G8jxWoN>d82z}b<2C$4Bo?LbV0G;Q;)6Q>He?IOMLY7>Zf!5 z+wZEg+m$%hwIcM98IK{<2Mg;URx4wI|K{G!GR3n0 zVb*+1F=Pf0-=qjP{U+<<+R(a2DJ~8DGzO zYejVhdnbQm(L0y{W8fnD2Y`=L=C>F4yNdD%Mp{nelS6aB8JDSdL@M(}OQd{T7XV*+0UeoQ$w1^lFP&R@Zsl>_KL zJX4YJB)Ws&RrU-5?=pNJ_)F!`2L8tSQ7wavrS1qZujByBd5J8R^HK#sw0g2Y=PLuT+kr6LXT3 z@)!d0l>wPkiF{>14lD#C44I$Z<0}I)4_|WcRJJY$<90P?F%G`r#ywYR;Iqo%wmWzQTi+ADRee}MZd^U!P>j`GAVFfvXKB5n@Tqx1?r$oH+YSxI5y8ui~kLZKo z&B~z(;MYyyP2lay9G3#0Dbt@F(T?;qSOam8IUWY1%2D|9ljFAhDsW0UelzMXc$8jP zhrk1sgF&z{7vIAKPgi*e)e<~cIj{k2x>?RJ@UtrS&H!UbVq*C@u!hMH8zX-XQqJwP zJX&FDGcFQu;$o@^d=eO$q7u)?;}i=y_%;~h0GSK0L(7$8l%t_i?m;Q}vyYrt3w~bN zg+DIowc|m(hu%~6y^8+NQ?2O{8wn2#|KxxVY}!QN3-o0Lp z_}c3#44h*iLc64hJuSS^Fv`H?g0?CKP`&^mvyF#M2MaWU_p6*=Qs4>Ww$5`fu3tHU zww#kt&g%d+WewgBM$Op+XAYV|P7hV$Tgn{Md~#5mIZY~$yah(PWCA&tmHkLG_NX$y zU>tkH=qv%7>f={AVqdE~_yPE5GjRGZLe3G03Ahkx+|*zEQm|8hYru$rI({#>r-=w1 zE&hAu#3kStm2+XC_}`R$e+O?@<`$9or-pAs{pTS~Mw<6e{L4|ct_F`(_Vx##rkqHC z$0&zj!aO9-uzbeJn_=XzR^AoL5!8F$jmn&w$#Z%HGM0Bg$x+4lfAt87gGKW`#JbtJYa^8k{BF{z7kM8?E|aQPeE&ctzG43cE;y||5pmGiy@ z7uwwHilcGlmzw}VFwDmQVU#TYSQFq)@Sl`pXgK*(mE8=BDx|&}7REpOn?1KoFW*q$G zQgF4hcO3XH%GMvjcPsP$Sn!b19|b<3>_amtFtx&Rw=uQCRiSOPR$PHA!KPBUPoPZ( zn+=$77?y9-TO-Or`)V`T`CX@UF0B@D2dqZW8}M_C0~1k4VXr)%-T#q9<|nf;|5ug5EEM>#8fpq49C$ z4ukUfwghd*u6vlT1nt9?H-QUO?nd+_9gTbzxU&@L8G8 ztDj^EotrU724PU%eY!eRj7POnw6$XpBmYVt*4U$4rF1>C4oQ#o2y>pCw!S)D!W(MG zJ}%cVqutRoZtq@M0kz_-@V;2H%A=1uqS9<2lx9!bKA9nlPinn=oE5NaWk ze$P}_G$4|)UK$Cf7s~oNk${I9IV!KrJe@>-kVVfR)^j1kkUYeR^-UA(X4y{fGMogA z@n*2`?$qXpclic1)SWV71B|&?7SgGetrVV$56`3Uk4ovY$o-Gf<5@(6(X|{U=xrh@ zH-iki)of@Lqd%9g)?DU$!D}@g_s6mtq1|W74#xE{CKhq^rc`Z&*$&|(;qe-#pe^`p z4HJ7n#&1M!ie>3W#0*bqH*Hdi-}L+q75x?Ek2 zcNNS@Z@$o|%F~qFqAshzGAM6sRu`@Wjv-K(=OGfA(u`Bn}*E2&DE#kQ!PxO^fg?Zp%LZ4tv*L1>ev;0fy(n90?#z^ zN#M&>&L@rPYm6L~R(*q!*NgQc%Gpz@UabDP8F$NCv?Eqw{5&uWMs}lb)&5?Ys|0IL zSN2T+qh;1Whkv!xTZNsgsgECEgAP)U@vV~+8smVI znfe!s>+*Jv(e`!Q}g@%`EoUplDaDtn_PMvjEr zj%*+|hnX9UJZZF_jwW;(IdgK8o?}9P2_5|6p`5u%;||C&R!sxndL-8KUdG_gJ%#C= zXnIb3Upw*1nwL=_x61C9@x#Pc5B%83QCT*DqArq43(;_XerOg z_^t43lto)HiX!F)JPteSCL7SE?U;wkHY(4S@T<0R?^hAgR2ls$GK<#Kb%>@~`!@JE z4dc5)7QR~DyTn41=!&-L9K_SrG*t}tyBS#zNxX)X(ayS|!8i*#yVYnc&}w=Ok9B1 z@BU7Fy}AR|GfsY8?bqE@b_0sm-BfmHhb(;^_BlhgyD(gk(pe@|L*aZN(}zOm-L|rYm!qU`7@SEmk?K*0CC_|P$3tj0JI?gw3D z@`=!zDI4iLA<^M*zLC*%ddX@!)8sIn$E0ZloG)eR2n5`blKs4#ApJ(dStbkVd>}hU z!ttx*-DCw1w9t~fdPe5m^ zY#Uuui}g~6M%PrJV5MVfs{9XlFq)LeF=J}Vt!FyOTcO@3S|2RP%ArULVqO#GQR4z?d0lPP_1e@nh_jAg=KjPn>wx zlEJ~MmA7d7Lp zz?g}X$4xnVYSy#A<}#1W+h|qDW8c=4|KCs4J9p|tuH5f`b1b>;Kut%tTt3$m&o+El zQ`Divk8yxA)*Mtq&w<;R0cNg@kJnZ-{|%yyiu~Vz`zqV#f}w^O%zr-Q$0~;of=^Tq zwg;bK_!IC1qmMhH>s)0E124}+VLV)F$(dh!e8aF}uO;CHPxj$j5}TKUZ&UW44!%#B ztLk|0tQ`>|b?GWUDR9$3K*v)Y*(2uAhT3E&}>t8B>L(Fku!!v)e-fyx6PgUgIQ241U9 zncEHdxe12#2f#8nQJdfFLnE;e6~$ZvY~hwl=1WX#hGAsWy43`Q9jq0~ETe^M>U&TO z3x+4VH-NV&^D`%w$$p4gHreO0a8D4GU?&D+dSH06wH7?o1V#d$QOaCT;F)CPu#IP? zvimvkm4@MZZc_H&0EV&c_|Y0X4=8)T0Kcc4<3%NK0jRBXIoRYbcmWJ-jLQ=PypC~S z02|{5F9jRpaxo7V`q=TH0DQi+8RL@oGG#Z6?!8vomj*8e^Iq#mEB+BI!Br7q-@W;cGh78m+ozms>3wG_d*^~LHhd2F3gr+=&ey8c4+!{fWqwhF zzic6Iwi}1v)HhE-_MfCmY+T%BWM={<^_!06{VUj*kqy^RGa`X7s)lE0k-3J&Z>$(9 z1siLHkukrqRtRmy|1IjD0j!m{Fy;#SkXvIe-%(&=t}uEBH`P#|?|}oxT3qrIFxKMP z-vMJS*K)A27C+$`m}tTxqk*Z)p=LC$z#P4BW1I`1)iMF^6fo+U>_M9d+^_7r7mRVw z)?uX2Df2{BuHc}Y`)|0bnH>HZY%&x^W8^7pl=GCfAgZj{R(cy38%^M2!KR@F-T;57 za%^z2zpz1l9&W)eY>@pkz>ejfLxT*d-2FWmiBN|JiE<+=nLD^by_LQE1Z@Z_+|I z81O!FGfHp^E)J>(4{8m^l=)hO%R1}?(6z$-mAT!PhZEYFKzj(AI_8?T@C23n(Kf;; zDRo?kj}4FPMjHx0pv+bK;pQid5=b|Ru$J)V7c=)I&L{oTsxw~joOa9*z!}6AHL8s%IK2XB2K$S_G@GoT5#mM zBatmEsm&mkjU}}s8}7u60P^Gf_T(2OG!n?)*U&tHA-YrL-mDC4SDP7@k46Q%Gp8QZ zQ7o?BTq734KtMV7i^a-R&W00%S#5b8xQojDgJgX>yJS1)xW#H;JF<8VW(cg7-^TGg zRrWn6liSx8;oRQ&?Q1i|$O0GYF-k7biw}3QAlsl-j1=ROjQ6qNKOaf)FhV1#bcfoJ zn9QEn0avfcnhv!U#cT1jdZUI3pj3J2mo$bIko_GHWiCXIsyFv$@tX(q_PeFDwDx@W zA7nwP9oPC&lqDcLN;OQv*fE51C5#;rCfc#~{D$TDX@Vx=Y--PM)kN}56S3dkn-&7| zuj;7gFTm)-va^#HM4YmN+Zs7qWI+d&)BFV~BmWd!Z*o3J%FAr?52oXm^U7e88rfKe zoIi)h^%4z}+X(KcVUUIWWhiF8ly-s^D!k2Usuj5iJjO{;n&6FP{1ZFb)?VBRG0&BK zosiDoC0ef5F1$g5#$%YvS!6QhmSf6m8?owsKD3~`iVh}=%MsC9Ib4ot-BMTqm9&hg zKubU=+hQ2(2y5`KZFh|b?PW;?g07W~blkGL0*z}XW`uk#GdslvN0gg7+c}-xxprhT z?hpK=fist0Y({5}ADly?;R`T6mEh*dCcs&g5;RlF+hD9JG2;+N?~+bN-Va=5^v?%3 z82NeN9x8XE7$pNZms?re0U4iMX=i*6n9e)$ z7L?tarAsW1NFRekO)1^m^M%rC>GsUY6}V5_Ehmv}VgvIP5>2ZqWqF$ANEGEgY|P0Fj__3+wEdd)L*TPv!Cp zRk>m}c-j%=jdgal?XN?tT!2Z%UKl-*PySU5Q7yL03RCHwp8}goXRGAf$A;%bu%w91M_XqB7m?N+&?-p;s{MtAxVbDMbla5e*V zKF7(DOipWS?TjZ6<{)W7^%^G!vXtIPu=72}dl2{mCqdbkwu^ljX*8f?RbGZW7$V_c zCE63Kip8$H)r3X|tz4pV&v`O0gV1Yb4V;F%;Pb0$RsR9AugC^Nb4y?qMs#M)mLnC@ z01{nLFchllX553}&A+N;PNFiq3tG{6vbam_5cgfO16Rd}D+yyWu38Vc?UA^m4d`xf z%J>GD>~WdjP}?}{EZo}4kbM(#Dx=EQM97aek&FXlys(S87Ch9*(E?JaF_Y17*V><( zFGc=gM~WCl_4Jlt)pH$H$T8H~(ZPDvu*ng9V{;#psm4Ez8jQ|i^G@*JTIp|Bw)HjJ%Q&{I$hCzG&DM%`7I-p=WRT38M)VoMz8#)rW(!%61Fn z5XC3TF?Yb(AWQCm?;|PM$IFMM_no+0-9;AMiA#KinwO6TrRFYNPLo-8)xLx!U;~%d zPPg9aBI}nzI#j}U!}&>0ySuj5{g%wX8$)YwN?K5It&??>#00<43Z^~St|sbd#@_ z)s}dA9@Rs}miUt%tH*?FkL9&vzrb5K+)k_~{+}Gn^N@@!&+YdcuLu4I$3tE`b-XN` zofFVWmy}WY&@@{3axv4z=);SFY@^wy^-0UA$)?MzG7u}V= zeOeEa!7kEw91J_mWpOCEST@_1e0ZQqfoxhHit;F~jcoI_lx~>&D=#Bcng4 zD{S@^!|MX|iebd#PEV@k<$=)&$-FnXu2;@Sg}QE5F2MbQtCy+6H4i*YhaC7Tc(rmO z4Sq&Bf^o#PSvmh=@T)HQ?t{7xRy-w%59@|h?n28zmt-8VN5B)5IdSQpten7yZ$7Lm za-SxPKdh^8e}L$vf(bicf>+MI-72#semE=)-xX@UHv=Y>I)<&NS|Oo>FBG?k?O@M|rS9 zwj(orQK$sG(*!#T{FQRzRq!EYdoCB_rk%ANC<%r{a^ib%CuI-r1)Pzl zJb*g$H7bWaU_AR!?)HLD!c*wjopnBUlT6%Mm$m`{oKszwDPD(mGunhng7HAaF!9rH zGvk{zsXwcbm_ONu6LB*><*Y@;=joJU3HC>Xq|z@8jGhh_#WjL1{6;0 zF!q9g?Ae9HQR6HmMVvq6w*bgE?>N1?F4I8KcPh#o20pBegIMgjN~(HsujO1NId6b0 z++A03(kBr0SCRi*@UhATcwh)kH1emw+m*eDn%|1BQ^qJ4`dK*+9iEA2NByJtKSpJb zg(#zJVfRB9i-{wy2g|CLj)B&)(v2&ka?aPcYoQjz5vGK3YiO*xciID z4>WW47ddeQ7;)M9J#mgTn)2-!tYLUtGzDC$oP&PN&0duI8>QqE^s7-2U8f@NJ77~W z0Td+XVWYYToK?;{9lT4~cfHK|q|W}rPVUi0bt;}_(2UoOfN9uJT4uz_7}EC~&08@I&CfMt7(T{uH`_JjkZ0EcOf7jC2vSXnwcD zE-7xtpVnpij)CYo6%`BsqbBK{w-<~iX)~iRcI9kO?S1Z2PRP zJnGLy|MjaZF`3p52(V4F57%4;X3U!r#YmYw)zT}O9i zHJ;ZUo5LPO#^(ONfrn|3__MO=E7a@Bvh6F}X786hU)2q^+E|j_kIU<2@cz2#yxh3I z?mWw1C^cW#?S`9;ep5Hq9k~M!^`@c6GqUj8x{6|?!>>tl-4EADw}*M`;(e0c`fc5x zuwoz2`^GH%3T&w{3u>|7cL`T9^Yjh`N`**naKpOrY z<^4)Ve2?b#PyBi?tAa1u82cP9bkabXPgsYfb-_ursg#4=Xb_wNESalM-Cl%-q}Y>@@l)R_&L{c04~BIqId( z=L*;X@BzSshfx$fmDC-rdF@;P?x(uGd!*~XSwk}Z-*rE`kG*wteMRvUytaB>b*o^J z`nOa!_T{Zh>Th(PoUL)!=esf2-p{IUY=Cm+LshQ!fp@EN;AAi|!p>EVHpJ!Pw)tO? zRaSilKLEGW`BK83`uig=Y=fy>KbBW{>MJS{Z^JStVX!fb?;G$_D$oBCr~lVi^c?|_ z8Eu1`v2xLjw((2Ag{tbO+;kbftnP|1%#QCHnTRMN&qK68MHqq?d+V=oeDIH8KNBA0KdXB|F0P6%DXYZ_^i;QLct$=JIxeBPLg<=*D8@z!d44gL1_N}6EGSY<*{?K10(g< zxiMX^En0tmGm6o_9=9lX@vna$qlQfMAELpJ#!avPaVlqk14huPrJ*8ggkEBjQe{w{arewSzl_tu0hRm5K%V2Utm{x;(TpI&JE zk8%QL9S(EZCLucyx0iuU>&_>eXTV&fIeZj;N}XC-KOk}zE~cAE&ytm;=sP1Jatt{# z`)+Cd-48WChpvU<^N$-nooPZ3x}!5q$OChZOby-yQyG0u-8oHzKhvD)J+7Q_mTmjj zw@m5zVNPe+HW%Bor=pc(th}aWPA~9e%bXq$%y8!Pf=J9+x6PwPoGHEFYTQ;$hPX)G znbOO-vSmsy=gpRBJf2YHOx@ui!R8}#cRWtPd0!q`h5_3|8bvMD8;&)#EW?hSi5}?4 zFK$_S9lO0{>2(aZEKcR}FZNQ)(rcb4pi8g2<1u6o)?OQ>_}-SK*KstR-bS8Rf)T;t zbhhfX`j2zu!T0KOrOkWwgD~H9+I#i(m!;pUZ?aN#a)_66I4{Z+I&aAHbUu*8M{qXFcsj4i8ah9TwG+`C<&_aTafz+0biS7Zl=du> zfxGC|$s*hBCA)2RkaXP*wG(9?ozvwlI=4yr$8a8#DRf?z=jl8piBI6%gzqB3IZ@Wo zIbEzz;oK%8=-iuK@oD`+x7FyCuAkLUw`S+cs?U&WURycz8T@z3F?;K4>;?_0F-Zn9->eYr2u8C5EI%RTvvKd;Z@QmvrmHFVCG6fR-E-k(GNPW;r} zBCEG1%B_+Ovf%UjDyyQ8togj&`S#2=%W8`)=cC&_x@W8Q)h{UwjB;7%jKltytB#ZZ z^|(0at22|&ns)BQ%(y9Mo+Iwf?)=|8Ts&K6rO)-s>#t^lw+^bzlkNWW%lch2YqLA? z-w)7x%%3ii7hcOWN=`7n`oB$9J{3&=;MNJoXT#}1RxyTot}5mW2G4SE8)ffSDT$;9 zTh{k7K9bHfEQHqu>cu6RoNKg$;BnP8SJ@f|p0DhS%kz&31Q6-|{&Q6Lr z0q4F;nFqGHA2h1-@yYmfh5J|8j}U!vFXG8-cBb0t<29L|rr;hTJM!zmxKY?T-+_N` z$AWBecmqwtQB6|r==<@r^%#E_9H*%wO>X?Owl zzu#yet6ZRGYa{F2c13pMpXY03tj8E1Pd8Sk5uwQsmml+!D0VR1aJ*L={#Krkr!#%= zDCB)vMJ^0%ocpm=&j;@|4BL853Z5Qd42HJOI7#QFDmc>Lf>X8QPU1&=jcCi|f^%nQ*iDstg2<6o}q{R?=tQAIZWD3u*W zAF#=$52f@whNzOJM7pT?Bizt%_oS-(eQeD(0Sz^HaRz#U+dfEP8x zLz`{+OW--muG_({D0?3To9f~5X2D%5_n>?5&}KXAFz}B?J`_`w7Jh)ygKOn^N*9^0 z5kqZFfQ!JV8TpCwe15v(q$v=YLU{sU6o$cgiZ~Z$+Ufiayh53e7+jc1xgTZXHUzTk zDDYd#*4xs%06iaO2)9v@XD&Etf;}P&3)1CL3so6DS!F)IY%D;#nJe!Wq;D*ScFswd zBt*p4Wnd@Im&xol=^^g+*)46-&ji~e@R3I-L}tI~Kvt}Op+e;G3Bj`Lv!&^7mQ|4} z2g=e-Rz+JG*eN~Ts=%u+x^=jtmZy31od<`Dn_V!Yt3)=A_Z8)W_*aP5=aI*sDk+d( z3oBz*_ZOwSB3c?o@XP!rdy!mQk&b)6K^V#Nl^1kC^W9^5_{piWf*6&H5SQ$A0tKdFx zHrj-zQWoT7xBz5zPNs;z%xGi!gwQoycxonxXTZjpie`c6TovUU0#8@YeH?tLvUei* z8f7loblspF8xBU-W_0$)B<@q@VqI=vq1=8imQ@a~fP8~;l<}i?m)d#3nBzkCAak<9 z^`UZZ7g?H%A|T6djCAyNp|iTtRmhgW6K?$tQ zM(1hpYs%c7VZEo!^Hn`2>ydZBChIxS_aN&sDw@e_7>A3~Gyu;e^q|(63HPU9jDh6H zL*NCj5R1S>*Kd;QQ$GjM~8J0%{ z@|01s2QAq9xpEZs=QRc3D={B#Shju`95*^c@k`CuK`$&M;Hy#Qs(c?T!vI0FZf-Io zyPg80+mL<8fDi4A9O?l+-!Lr18#v{G0`S#FzZrb1k)!+g?jcK$cqZ0-H*C9@y9}Tn9F`bN2@u+eNp4jg5Fu0_-QF_FlMmuc(7vzDJjRs9Ki+lo3syEfxxvA=TN7mVTu)B;~;cq|xA$7*VUc5~{LBYy-Rt;}83Ie$rP$U))^96-r(HYjr| zBTv?(Jc?@JZIbLkXX2+F$UY>TYuW^tBIG)w+ArV}jXvVYouwQu1Yf1x?7truFpZt? z9`K#Y-tWK<82%gh3FRp2J9o2kF07YphJ1dQjaxk!Pvi?Q+C4djUdn?q$u5NBIhABS zwMHT?`M4mHcZ~gtxwCp$yWnx9vKO+*GQ)nbNh~@Ej8fYX!3umwO!lvrer?eIV5q1^ zMY*Wvs2Tpl$P3>WQ`L8t%xZ)FcLzkqMzIUQe^T$rW#Ea1?*ji>IW`y!KSmKjYvTK2 zGLKY^qOQn+SHK8Ejy{Ed#*Ch^;I%5Z!r+Z&@Cq!IbRq7<$XfIx^$*Vh?^E_bFN&_k z__#AO=2DIf0p}>kknb4kl{%4gz@3zX*MsW}Bc2!VrdbB3 zK)$Kv=z}~A+AI!#sPO>NGaY?n-xyj}9_-6$cK+r4t3^NIHTs<}?H*Ej81>0di%9?C zOa~NpbTRV(j!Z8`{$YuP8LU`Mi8)SGvJqO9$U)+M75UKkx%9+2Vj}U}5!FM*Fycrl zEy>(54E;2JRm<5B`A<7qkiV#T}-4b7?Oun1DP&y#(0VciFB|KmwH@`DlrQ4lUrL-b5rY|l#j&MZa^OgC9qK>A6vGO`%v}Iv(M}qG( z+*8(9WIpbTUSBr7C5p0n%Ctur`Xhsd{tjN*GErRiq@yp}JEJ*mf%jfVq%-AqumRvi zD|xN5Zw2IiTFFmR_V$H*Vk*##wQ+$|Gn`700yF!QFo%14Pge zE2g#bFn38GDzjo~EBW)vcEYBUbM;aM8ZhJGZqbS_Tl71}m2=OPeO2gU??^P6X)KFHPHJ?6)_{pyNq{7@M=dD zywA~*iPd)E3#v1X?p0Zw1J}{be#w;s8Zp?^Ba2frPURtFg3I)e=qy&YbskmDxnHn_ zWJdAHctLY4@{2t4ul6)2m~4diuqzMIfAtRpvc53ibFv`P}-54F~YLvrW zWp-VrsPBysVTh-z`H{Z*Fs$yD@x526k#@{&!Lh@g4*PpRDIjL}&Gc{hjUaGy+L z-)A5irJ@-5PsY0$Jf; z`&-M;dDr{aTD8va?z2zc=iGG8xlL2_QOAd8<@@`h%}hjo^vy(`(T-dI#9tuP^qP-P zPV=X>07lBg8z!wn`uSIN!RPV*-2@JP*tAO$zkQHDSA^oIL8BAu)^w%`oz`>~3$1B7 zLq?K#X>If)^-a4cMb5xuJxAUWXAoH6u)NZBO{f0IqTJvmi6J3uqBH-&1ok=VB0C&+ zkkmbd<99pC+=mjJjlYG?Bx$`I&UrF}&dt(DXPZPHhOwx&^cM^R>1S4K{9s*4)2pKbRLw}kHOg{GwAG* zMmX~5%0xseS0)D9yW7Zwl?b(akgQk2^_iN38?@0cw!LVK=xe) z`DZep&Udn76~cb%!Y0ggD{^z6NVIm_pSG7Jt8p@aM9Okdn<>+B@SfI2R_79(W$6Jd zEBG##C_-YsHHi-1l`!3ZV>e(7a`#KLSNn1~e@!BW_nULqBx>wA5m^Q;RN59gugLdw z9>IsR68YDD{34Y*)1!w>Y~kx=^}aVFJD?OWsP9_2tLvtX?X!FaTH>JRMzJ z-B=S0<1EI9l9XFW+`2^BJ4C*HD^XR6q1t*uMXs;GZ!7!8O5NM=#+lW|=qT z#&Vpuae@AmEP_@6(zDUKoV0!N5=7S1a)8b@iNBK=RgE#$eWg)29}Lr>vTF}`or&@? znfFejSM^Sm)udu$ROjyFPP`bGJQ%hezE}3YlSovvTK;ZgLe+RM{5ak?LGXo*!(r*W z6_@SBGI}erGfd`eMYc!FavohETX58{9A~o{Rd;U&rf71Nqr=>5bsR?FL(&Z5=>$T{PM~M=-k%(pQ1+(r?6GYWA3+xt_Zdp|<`#9Ng?% zet&SA`#Z~|es{DJE7Rs&X_E;2mqGC%PqMe?H%7GFo&y$MVA)hdG&#U6xqfXn$|LdQbKEekW$wn}zsW6OKrh_qiM*Tp>{_i0=CEQN( zZRO3D$-1b!0)~Tein8DyiMC3XHynZp9f=|fLzO*7IdlVfno;cvo~0Z>=Iy!4+~D7y zXY|n$_5#C<^B!f-AHge(d@y*eG9T01o6${}u)B{eZCIc~aQslwV;YRH^-iX7E zVv<8i@D^Q77CZ)d}4Xe6g~(27Hy#SuC><3@5||a0)Oc`!E7HA)b`Y^f_Mk z)2WeYn`HSg45z-Cs=yCH@bx5>`MRFlaybFfj(mno=BLDb7>dck#o!G_{{xxP2I-;P ze!uY!%Mzr3Z)L2e&#UmcMt$6m%icE0gwG9SA2)FiKAxe546~kDLVWVMrlx znTlux0aT%*dJz0KWlmKIELG+XSDc+l9p4M!XOu%*rLirl8+I4Sw?Gf@SL*F~N)FH) z_bI_L69T5o{gIs17D(%MsI@v7&<;8ORA#~9ek~zmYd$E3CaH38v8<)?JF){#C8~)l zw-}9`1)CIuMbe@wnW%1rWx-JC9h?L1WB6O}aAp5inE_RtF_u&%%c4OvTKInT3cn+p z;8hvJ-A5Z0d3S%fO zU%}gyIhVcQW1~MGd_dVg1^lD3H4{&+(Oc!b>SU{7=p4~%_3(cQPMQFZfzcJ10N)x# z(UHiZ^T23va`-3kI3pK%vpPA78>dHKQjxC!{E2cPC4FmP+4E#{4O*p}TvwAEh0BTe zam3Fr6t2U<4@Bwe2i~Y*+{>k1hvaO0_hC^7)rw71EenapP`S(mw03t$uD9Nmdpg2^ zK9S8Glh-iHB3Lq`wC@I+s)F(vostjGJ3dRjovYi~hvRBjixf|kMYYKxxVPM0n{3y@ zF2~c`3si$!ofVr-?mi@~JH!4FS@D{D1mM?{J=aJ*ylJe(hnl=gFp@j@MhlcA3@?;< zos;KQp9ayRCN$ZM8unRWlY)JgwCIxTRsA4D@2M(3BUu6iW~{;Mz*%~KD+VTO>`Y9y^6&&XG%(q0dtP^sqkBmILG3%+N1mLUH7I#@#J|(IVb1;Ut||NP zb{{EM?yoo@_v?wtd))Qn3e3Sf6uZxy-Y za>lr1&$JuE4X39%YHsjy<9`MCDP`+!Fvdtn2X~L-&;jcq!mvn@8!1^o8`VYV4gsTj zpM=Jv&5x0~@ff8J$Y2~*J_H4f&rU!LR zoGl5{N;a6*|QP+x-xE* zU4CO-p4k$gj1j!QjG3Hlmu7ti@>cNy_#+b)>^a!cM1^h;G?nVPR#r?-Uc;3s!Mr(7 zmA+>rkHflw8D-Y#xsT6C&ayCBfAka#E9+$06bv@4E2Q;Q9AcAmIzy##YO*s%qWx1* z!;>UBE!lx9SiL_;&uNfMl?jl@Rg){qWzuc_nBDq3SwWp^QLnG-ULYmwHDwX0 zIqUyB#`HK^mfluV>$Zk}om+HP^4RMFA=|lg-TwQd%>Qu{@OED%H-)?tr=4@&R4F-_ z94O-tCSU)p`_wK!CBL+sap||`-T(SyvMg8mOY&ViaQ4LWrp`F)qO+eWOqB$4wZYU; zZr{{Prp~zNLOCarYSbOQk1j~P-nz0a>IMyUJZ<6xaH+Bz8wqwvRW>LXFw&qe(xdQmsqdO9Z$P0fQwe+o&qV?Bb{z#i(Wo|pO~DIMf!0|n z=S(?kmNLH_Wnq|Q*kC#M&&pgLWZiA#-N3kPrB3Kl@EQykJn*-c{aw*Gdr)a1^)KEH zE>jLK1h-Rm_X4AV7>w6!c2DKV-@tTyhV1qB3Vw+PFGp*pfwHQ$JP>HkE0O0h`JUzX>*#85j$`LG?Y$!3**hje>ZPI3w~^ zfLAIOZ#FD%^vS^y;G2~FBf)nX`FG%l zm0gI|i<6NP^%n5!%ABt0J72kQKKL@DGYgFNbGkk)#|JBM5_=zPx(08Wd}~!6eGZH+ zPn`lE*jSeZgYfNAIp>!61Iq5(!7yR!7pB0bbzS#>6Gq2}S9$*4dJw9D$1vsa2jI~r z@HX(7%0)+jXDV~sRKMxl;eUYVsoW|Ai*n#6@O{dqHu!O68~*-Aa!ce6&F+UuFsCI! zFcKu=&bTg}DzC*uv9xhT3FZxipgK`XJ95&rB-Whz1%0qt#n}nJ9F#5EU>HEQBl}lQHry2c! zfzfxU6Mqkk%#!&L<1jZG70 z_Q>Tb$HscD$e)#q-C)#`lkhU|Qst7>;75)AMDSX)Kb81N;mGsq!D;7_HFj0 ziuQr=Cl{hkBmY(|co4M*8RhZkzy(Hs6xi64)dpOxaz6@OfYHT?^FFjc_YmR%tDMiX z$Ubzdf=S9;(^O!L$a)EUm&%J#`hw-kRz3JBWv-m&r?{PXU~~mrm5b)%4DC|(pny?k zq5+9!w#Yks17f`LQ&IqBcmmHRI03j3;ehpITPZ_hr(XUUervX$(RRKSUADxz%IBA z5%r5t1z)5bhFuh*b}4th>23_&eI(?@Hn^;=@NU)NoUB@V_{(bQL_4| zRHETZh%h!$RKmD1W|8?Z^BC;S;UpMU?C5j{o92(hUSsW5UTA|8%FYtBp321!Lw>BX z8@)7kf-+xS#KxL|GKhTf$s7~lA|7saPUei;7&1jJK;dH7D|5MG487LTfeFR#R4#fK zj8>t%1ZKo76v*86DAuSPLdS_AUdk~%g&)`*S*cU5*HouZ?S zd>z;ns^nSli7GFd4K^Lxi=nCr738Fk1}ieJ%ifpTm#c(HPrao(dGfI+b9Gb|S_#2-^; zg~gx2L-8rSQbi5l;$Vk*aKTo5zX`kw{JpaOYjo`bI@eT^J4 zp4=$+!O}S_klo9`uy!&Z{_;t)w#sH4{8c?dsDtkW7$Ev1L2uB8>D( zMyV>750^~DV?)HpA2*$3+*nWI;x?$q=H(ZwJT@HitD2^Wamz32hfaX})~4_4l?Ym; zq))1)?T<*hPb!gut(R=Yjeb5tWS#*%r$PRordh?MFj>lrXUMGx##^aU3;}5qtTb=6 zG00JdbdJ z_f56JLhlKEQxmOHY3!RS=PRhP&KiW%gUXWmq~!p;ky05D%Ixnf)>U`qHoCx zcyj~87U+{E-8ToMrrSZk^c|QgABK86;wB9l`ULzpRrBruo3Vgjw?1N}%DK#w-~MJ) zp&P*_zcGA)aA2yc0Krx?kMBEB>PPOQ2u<78e^HyfKLJhV)7C|C~(*4-f$CgNo!Kjge zGI}styR*!p^Q0`HGf+0sFDi!yYjw1NwVCQ@Hzaj1jehKEi}F*(&nC6~#`vS!+Ww-< zHfa}94(*frp)ez;w(Fz$BEtQ>tz0LEqeQHhm%@Gg`dTD9Fp3M_k0+F7-eN07>&cE+^Cf5%Z+?4 z7>!OjGhKb>;h3f!htj?(n~zH+Xl*s7v!jjd5vfu9dPmJ3OqfPM{%X+UoXG2B#)wn` z-<4Q0LNnLln8Q(S8j+e^xfk=$f5ci06R;zCl~Vyf$VnrS6o#~p=1l5eB=bk2E1Rs>*4dHz!*ElkT^&fZRtsivq^NlP?5{^Xr6qcNs-3eraxF$)CKkp^ z+2d0$_dzG?j4>hq>Fv(*Oh}9e+(?c!cjN)^B9+Hq1us`Fm@k7*Kqu%e^G`r|N8`hu zsj?QuFs3fERf9&?tGWJn*beNRq-8Bq=96+PE+spe*s^n-tKO)<3y)(<-R{Lb&Soa z6v>xx;xG-7H2prXO6pHWUe?RBlT%fx^_W|I1jccrm8#X)0?1R!jJ7pP!Dh7ee=TcI zMl(``T4cVw3*~#nRDgb$+ODF~La8|gwN@#kPeBWPCv)gnvP7Ltj+5JaO6o0(+qY&> z?~KX5NH(8}ha~+W`q<=yyx$~*VI_;^auOx~TbT=1voJZz$;h_DysGNvX~se2FnV#f zf@Ta`cjCm5)vY4`kc0=V)PpxU-P$%|GZcAFguIK&9nL7*7@oTw)r|Wp$8jOj&5Sn= z4^ug(baoqgnDODPll7pq4j!j9KD9&X>m1 z(YiT^V3!ne0!X(vm3c1hwzV05sLV~ly6sZtfZgrWX7VqTL+?S3A%bx_{DX4fI>>)+ z;_ev3<4zvYRmyp|QI6g?|o452&^#Eq0;8b`h#@?Ij}+dK<#HpuIs42PFme2XF7$h|(DY{0bm{P+mS8=Qk< znnpH$x-maKdLL*SeSNU1{5EaA^IV75Y54BONzx?X!w|qV8~kzZZ6S9VaXZS2CsN1b8wQ8y%#`{k;ao0D z=sY3^=$tHlpMtYk=F@pncF@@%b*m9iBPLm_#^Kqrg@^0$vF9Az4KA7Cxb3Ae2k(<5 zx(3drGJ(!wSwUx;9HN5-{7=K#DNE>lAqVKZE`8U+*)H?xU@gYl)Ft+F5gGjq4u{Gz zI+x1#bQa6tb#OMw0y;fpFP$rM-JeapW@Fbi-v(SCRngXM4Y*RGn^MlyVy{@IS|u`aQ!0j6 zyb~bBtKsW5rSe1_3k-6~3UCe@Z z>8k4I;q!s|cyNMr?N#QB3~uu8guVk45z|!#7|<=8C@JzRlV}wpIaX?_5J?I?=+*S$ zr%5dgm1O&2@CzoAi!cW<-K!u0G5VsTx=mIi^f2Vz?yn-(1TgA>-a%L!rwEe+7^(T3 zjU4I$zR>XF;9Hb^BJJ9zdvS)Q{ez0U?J?MzQiS@;CGFE(MzN@UI?-?@d={EW-T~jI z%*U>74CPKjXax68!x#zOCe{E>oxC!p4&R4z0SMW@28;_ea^Uaaj>^8fz**(cL*VJ? zMpO#^AobPhvKC&{yXRI_;G1P`i9!F+2Qs%B)!P8kTPh0Ta>--z#3hCN$OBcq*U0AT zbX}S|ta$5G7U%@-Wx@r)Lyf#W_!MPST1`#5>Xa1_-KZizPSD;vlsU7;*F)KU6+B2e zcqjNoWjET48;Lr_-T+4RkUdysP?Ij7{4_+SKzvW>d&ER>5!jR}1k?4IQUzg!K2s{r zIPx7dQM*yYeq}FQo@<;+S}$cC(pB65kDra8$aM+W6p(M({AU>XdN8has1rP1rgumu zP8kK!N)@@^2jfISZ|}=!!+aYL2N$V4^fA~Z!&Sq9lU2@*P6K~1IxoqA4(ak?|Agp0 z6}kI?_b79h9Znl>e!V8>)~4XijdZLgp59+)#z=`AX_L!eWO&G{=a31mi-*QAJna zjz^9vau-~p%pK;q1q$Upl!W!_@Gvm4K(;>t!}`gA@nF;YIgLB`tZ0tuSZX@KYHx?=G~<0O_)NpCz<)HVhh#>lba}xQ5Iv=$P+Peb zp-*`mw`53!33-v5aDfR8I}TSGo(Ha04&Dn+8GYoO)1aNOX! zYKZ-Vk6qs&>xRJQivNy=-7mFv1X$`iV#XIEZ^C$LYekM96@v*GD- zpet;314KWoh%*;r0p$=17ArBTC`Am7$J_^?8|!6sP+)%i)se53`Z}B!_RF+7r2S`E zP=_%emRIz!iR3}qL7$ZpO`xE^zz2Wk-Tfpkv~AV$ZkE0Y)C%^XO{7Ovq7~w|tCnXe z*jTtPE?W=@XQstpFzIiRZyE4#ptbURJxZQu*lGU0!u?p&_Rl=&apH0<6ZZ7en+b=n zY`SOg&TP6*@XpW8J0U&8YoCsNc~42#+ovaG_-MMlWzpy~uYLE^IZt|?3g=pxN9PrJ zpUxhsJq^y+GKbDMd5O+CX>mHjkL@VaPsia*SxaY)gvO-rvi^}8zC6@#)Uk^JVmSn8OJ&XMDN?XWfKlY1%H9HRIDoc+^lgGFHx64K7m` zEZzw%QO~mRA6P~F#h4=t-LCl_X)ytz&!c>D3ZY{WD`uaxN2WuJOX*uDq|FD))=x;c zu#f7l3xyy2Th2EzeOG^fXI}4O-`Er1@>TuzG{Dr&ne*iCVSZgG{J&mRx9c%0o%?cW zy2$$*a}nj2W$EK2b9ZHhOn)GK|9@X7cjg5%xV-qax?n{v`(Qd|%arBmy>eFX>Mpqj z52rVIBIlnm3v(7HUU<>ui!d>?OUHEXhL!25mi)TGZk-FRN?%z~*%LKdqz|Atp@LHt z`6SJCn%whJx~c*Fhf@_P3WdNulmi%9I8~AI;3P0c8M40v_(WxQ3XH1{Cu~L>oeO=SflB-o3a^pLUW_mUry#m88aetqz&Yi> zMsTAtH{Wu-sBGbU%BhOf=Q9#cRU`+#0sl+cdnE784;c@PyH-18dp5XE*>f%!jj&d@FH`ZyGR|IriKxN%+(E=6|YL^vBw;^en92CG`F8nwhn;TE4zk+P4!?RdD!o}c+l-<9AVHHj$P%6)J z%KRFc=XK>EPBI=-05AGGHvy);mtj#$Wcvslqj?-&14c&3p3Bh*y{%1vRq*Jn96-B! z&1eur2lAqw8GyH7-jkGR2i{4_oL%XiVHkzsr6cu&FM{V8eN?%3p|Tft;C;;D2Hdc~ zeut=s`vmYP?c9h_8l!EU%gHRXIx$PKE= z!5!dJjn1XuDawH>!GAFFhK)FwYXZRK{eu%2x%Zpu;-26B`&I5a4veOvj+gTFMt(i` z6=iNJz_ppwv5~nz8|5(UfE!v<&f5u26LSXP03v0s9FI@IXg4SDd@vFr2hiSuT}F;t z;f~gn(`LA%HQ9%z;f~hiAZm~sT9a*bx#01JQR94%N_prC^#9;kJ@BGUgJ&6~rQi#V z{A93cCjU!dQ$xOoz@j=nG#T$j7^xd}!n-bV;4bi6%KWTf5PFpRn7NP0h}iGN!6)ir zRe(QN=B)YPH_D!I$Zft09R!C|ZchfsltZn+#y&icf;*|)nhs7VyFLSVQ)aIUHS{up zuf;*VvIn^fq14Q&JrX=d*@a(dk}{`mg)oXcrC9(z&*;1lo@I2#gJF2o38Rpl!a??; znLgUK1%Ht1-o?>%vWd<@IrJ`6W=PpKJmP{O#cP@#<;P7sx^XQ^Z&XAa!#W@P z^A|U^Y44Rrc;oiu;I?$n7H;&N;+{=!4T^_pUhRja{ynJuAoJ+lE1Ta-_q5&k=E(av ztdhQTCdnK+ZDlo`-tsM-{ZjVvwNbRq@oDo^V~7T&{^o4RB_ zD(|myKDR0#Z0dE0jM-k(+e@~pOEhv9yW>5@fJ^O=kZX6o%JNm~VmKTm@6$P3 zYK!3X!`Hmv^vJzbl)2u6?;4y`mYI#{UMhohoU|y1^SVqg&vceu>r=(@V0oqpn}4k> z&p5l-gllDQd8VCrR3)sy`ACnnsmK(0`oSh-atXdAKC~hevzG*9Oa(%0gOOuJVAyJB zpN220Lxg>(-mJ*zOQ+0&%1nhjo$VnvompLLRpbU&X4YKdU(9=O`{3{2ga4oQvpFv} z_?FCqpuEs05|I_3RR?pQF3N1Pe&bF&*SI+Iq9=zBe;*x|lZSc#f4<2xb48{!xBrpM zxfXY*X_dQY1xo6?VUqDvBQe2dHL;v`WoG-4m9L}Xa3VYvMqE4xT&nCoT@JpMsp7cA zyKH*9-vswiw$A_`tIYE&?~|w#>jOSjxo9I8y_$0Fq{an-lBJh36ew^N1k1I#fySX5cI-wtA$LpDL&Y0t7 zHx$Lg;7^Pyo+-YODQhUfKyUd}R`fD>p0axl`0vWR;;|k!IyetnxJ+~6LwT&{lzGiz zy`~(b{B32=GVn)6=Ns_n%KRj(^&eMfC!!Jz=(bxuq7Q)!mAP_*cR@~>2gsH;GUW}! zAsV5gqPxMy!)7{(NIcc?=f>o+ZjfZ-bXB7k>gac2(L2yh-JJGR3beFl;0TrY$*l z-}10OG9kA}3C1?tsV3%Jy;Kt;z+Tf)6T3?vf>M!*GY7Qd*l}UBR7{c~Wdw zQyKgY2D;v`2E^~ghsNQ`Kynyr{$9$wzxN~ml*g|Jk5Vo`pY=~Pd@LBzQ>S!2_)=y2 z8t|Wt9M$GGbsa?;`0sSNx;v4gLi~A4SOfM;tu4y z)rDZwtqQ*aXI0gWHsz!kCKIT^A8kpFj0In*Y+nIhs9f9vjP6Gr-&R?$6;*`J6?j`k zUUY<@N12=V^SvWgxkVQj5|X(%oErj={awJOS91j%SCTsVw}Vep4on75F?=+5kuvAm zvtu_fKmZVYN-SLR!$@Y~AP{oq~7C7-}P0?HgcBgmH12(cgzU{H+6g>gKRFiL4K zI+By2D0rAMKQJB{tsFzeN6u6(S^=J^%r6^6V1NwEgd+2lErg4Ra$u{gmx~`dp;DO* z510noMkPfWm1AY#mz7IlcKmz;b;3`|-1jo&)u-S-<7gEXzXBet%tcsyr%YAP7_&FT>Sv>;Rfd6I!^atOi>^~B0#*G*vk3OaHg0sLIlzsmJn`+^e zNE8`&st(l{McExj`$fM{E?EwPk0KB~N(B}JMRNQDFnXB7Ux6!(4jQTuC8fL=m0Vb- zT=*>5R5%|<6`GDyf|@8iUUfXhU~~Y6wPCG=sNqvNl_b)*bB*zQu$? zWfU$}_GiHlD08t=;VNY=DPbO*{5}tUK{NZ`OTasni(v7EKPnd>&Y0J<1Q$)l ziqyk@9=MgV3x$YvQVyO8?q>K`aDQc9>BQ=lEetiW(~bN#uv1vnJmdd^%ANSHP>!F1 zmWUY>;AT*^z67K6 z)V00`pQBuY4idlE=)*QRJ%KvhD=NNBIfhX$j?7VBhT4w5qwL42D85VCdmH#mbM?!% zj{m40_H*cYUc)WGMare;f>9HUl#^JBJ1Lj+1b0&|LrIJKD+i{7M=JB1W5rXIi!ino z|3TUJ9BiT(HsM72G1xRw6uB!lO%y~`7MmvGQ;lNNM8226rin^XDjFK&@s)!y=#ss& zz&|Ow9)^ARl;c%k7K~TFo&*kBss}&uUD83BS5zfwW$P+%ALS?lmJC()LB-ovzg0J$$k zGt}qh4{CtI?T|l-hXi@~(<--afc&4BH<6c{8j4{|Dc#z%5q{|hs?W!ErJw2}Rg@nG zUlxqhDkmk8YN=yECI2(5&VCG@jBv;Nx%= zYvL&%t#ZEkD?dw_uNcZNG;)-$90g@kzURPyQD(0!U#MKP6a0{}6ZR>i&#)WKxyuRs zYO}!ao4_-n^tlPZ1pcEOLFp^dxtMVHQ7{rDGvSIMMjuKQrUUtqSj9Az$KC^Dm@v;p zCA=py7*p0x+Jh?DE?4i#)Qx67x&CMrqU0?@!ZYR)W2-z> z^*Jc;IlE>}e4k{7;CW^JCz(1s?3KBn;K2`KY=Mr*koIzL-u|DH6`y3vqKu)1sqJ7d zd6O|TN{hXjMCA%R^X;x7-7v-@Oclgi$r*by?VONDm|laBx9-i1>T?So4a3B`BQgG3 zqUoKcLrt~pVi+~m5>YuiBfuyYbv&b_-KUvE!xa#rgv>9u=xw=Jy;(CYA29MB;73%> z25Ffy@+sh#RbJc`j7Cl|E2p6`TB@8ItF-E%^WvDrR{c%b+29lLVCVHuGp%692R_Y| zTV2KX8O(X6)P9EgKuWDKsxW6cWmRq(z^Sp(1l{3C@5?S&^<|{1lo&TkC)c9qloEvR$qfl0Q ziBEQai3@#$UWHJy};o&k4Lj{gEiWl_idEO?~Rxea`}G8?02sxl3$2EBm# z{48Y+8kQV*4E#4`KN_)SDdx%1gOA>7(ACI1r`4=gb}@4=DhILBWmzP?T}G8>v z(Z7QGD|0`UP9u~{Ftl_+j;OxAq(H@BfaIGC#*ezZv^V{T4h({N5;*ipW2J1uV( z(Q0M;JcNDKFb0NBA1m{zT&I0#A0*6Qryo>~tFCfaEiS!TN3m026@K;bJS=O!$s{JP zhv;Y+lL=QlRK1z`S~E7r)_{!xy5nF}O8#YAttpeEj}xzx42J638#SKTTe;!iX72Dc zJdY>-MJnUgdYKC4k^-<9MI5d&;qHOFLo;1bA&ZN{eS74?U_QsoY}Q7%LsWZO4m(yPzT)L%AT(W;ePNy>FD9` zrOFnDs_f;>_!?zDWZCPR@qA@pSIBQ|#*38sswlgp89Ua1fi;Q_nlCJ=ewJhGkDS1bw=)ku_yApsp-PQ z_l>zYL8kpjpaf~7;r+P#FA5Qo3WHO%Ge zYjlDWn!d;tywXg&$z9PsJ27ZKoRuBNWM|{8^yq$BE_GZ+=W_X;&Oc;u|7^YeNKzK` z$KhhxOJ|RC9{^{eTt{b}Y^5_oY6e2}v4~vaxb0>0K!|%w*&sNt$h1N5T^W$oj@w0i z$0E@+GWS^czAjtnY?s!9p|q;K%%J;ZOd1D6JVK&F;M^b+hCuq1OIGl(w;ZDLB(|P_ z^R+CY^RpbFGfw&r%id)z%mHsV4#j<^5wg^)M4p0wcq4!#St-cuBh}UO3 zAf{>c+2(6Gt)ryh%keIDxJ~Z;`s~SWe>GpLTZRASwfgUW3+D5avS&%dsBEbWj1|YL ze{ad;}zu0Sjd@I0_u;oru1A7RG^|EeUwm{w+ zn{8utl7nMmo?WE%I2hs*MErvc9|y?-nE?rxYInhB+a4X4jbSQGBSaq7oZNDTw?uxS zbh|{yLvg!wA8!mcBV2s!$!1e&X&9fa<$96v+4@Yt+s2s+((wB>>nz8(^nbe&BiHNJ ztj8l0dsGJ$?g~Zb+T?@cD?jF(O+@f1uLs_+iuVH3bJ#=@AcBjs?$Db|Y@r70UdAyX$K794c{11gDLVL)*YO7dwou%UL62KQ8xN zI7^Z_SImWz6*)qk4a&4m*UN^7fVV316YtzEn);m9<@&dBa563|tYV{tNUb)?oB(Te zQTF@=j6@iiXFto-3SZ4zs8A}JL4#f4 z@sLqM2CR3LL&%u*v61J%Un$!dA2?r?5plMJjcX7xXX@LgF#f6FBUR4#r*>y$#%CX; z?A{4(7^nx_Ue`t!V??h0;PJ}g`@rWYhpqx&tjy(+HrkK+kvqV5D{~6C{irfaY(H%n znYS@YQ{O^u*>5N}IEk6kgfplnQyO14uqh2+TDogYL>1ss%C7%_Cn|F$fqS-*9{^vY z%qc!@)PR#Pn#+yMlKq>(51{>>61;+gC)C6HAQ;u;$lM#SG zoI>Wba*wI%5HiX+R+I;h01q^A-T=N#IlQI;2iNO?6#)ND+4}`}sga{McyP7kWav%s zGsD^l z-lPdI6pa4MNP~#nJ6t)m7JRCaBQstz2G9=pE`a*{q=WZL!>@wpEAu6IgBLk;BJBu| z<;p%(HCJa)?k0~i0Vabd899uLt23y>t@F4#gUl)6K2wV}jF-=7DUYlKn_Be2xcL?r z@&*_8`{D8oN9i=Msje_1GSy{&4ufHJA)?>|U{hP(e}PSHMOK4NZEI~|0VGUPj zki#fBS7(r2s9paQw7(PSw>bEN@jyHJ=PHL_2mZe(Tc}$9LS=3<&ea)C0tMhz%Dzj% z>x~?`ei$}&{Kvrv(IjO1PH-FLNW=R$FgXgZ0iUTJT+9$KZ5G)Geo^HX65{F%C(~zx zcPYD}%hef_NBW_byhi7Ca3|&PkKk^~Hqr|AH{(AiUj*ybgDb9rryIT=Yz&Iebb=SC zoa+v_KHe#f4gQmI_$=_v%6#_ARTz%WR4@waWDa)5RTyONhiHGUyx@U_fWiM5kLO`j zZslNGaG|mv{X2xdOnv_q;10@eBpm8#^kFlcK|-AX5)NHsbdY(jb8ymv&4lhCv;SX> zg9p@uE7LIk{K`J` zws3o+vkTmi(1XxLIOt_OW`c((ySIQxDf>{>;fcx-gbSNe`q8JuvsKP77lciTeee$> zF3;x9fMh$UB3w5|nMFchDl=uj6Ya?F^ zHii~KGe)52#EC*hj#1_*J(BN=5inoTQ^|$gL?)>c+caWIW}gDS!~|wUS1H>q!GAUS z%fO<{p*C`lvil+MqegxK7#7d8Lg*2Z=M3MN!~v?99^OUZ_mtfmz~~8%dFXnWEr6Wlo|jcud(lN>;4RmRF)N`5B)4ql|)G z>TS)z?nWriv+zFD^mHSNwqXi3nju=D9DgNKd--)7{fyTXMgi7_&LUG^F-Ia-HEE)?Ih*-`jH+?Z#xiH6T`8-V1anxw0! zi-zIL+@hm2F6(ZvsY})w_YG&-7Q>EIeSb^vc*9qK&o?|4jJl-0jX}N$eoj@+0Hb?I zpfNiY4>x8sB4;1m|U^xP5w#XkB!bJV3fy+VywhBWG7lz=VoolwyZS8<1`V(GT4VxzJJ!>_;)!ze;O!m6v3`CSk0UF$>*6Rtd? z8BaGl9>`H8)Zyyo%8Qk)FTs~JUndiP16?vBW z&DpBz?;ygMV{~{Z_~<<67HrPmTf_-!`Ny}sBk?0i{@kS)>+%c(59fIghGN5> zeodXpGY_3GFMkm4f%3c=#-C@{ZvJtv3)!!RJhx_Bwui^AFOhGz<1xuaGT_7P@xiyz z;{wPi68p+eJ{BOLb2ZTcvC zmW3_sYIorg%pkdE7o++E`uV>fcV}as z4d}|UYf!eN=uBh>*6QkqKYo84C+Uyz^ksyMfx}n1o+QNlcaXY>)uLYATZ G3;z%2=30~h delta 276821 zcmd?Sdz_ck`u~3)-{;dD-*c#GnrRxHW|~SU9aK6YDJ7wU4oC+=*`areQj#>Z2%Qi@ zR2aw5CWH_|DwTvJgb=lVuh)I8ceQQ%Yj1mhKA%5+Jsx-W^S;)#PS?8Dy4St#b-!oJ z_IJ!xFTZ2XuI*MG+qCNFn@Ubg4KU1zJ__p_=5LRFdkynX9#-?k#vdN3e?{rPtYh~n zGSWxNgTL{;0RlaCr>b{`bd(<7{29)55H>}{&?Sie&o(F{C{+)oreDpj)2q52n5F(ffWDy?Q!9`Mqu>Z|CJ;4 zzm*a52{kPE?UDMe;NQ9qm##Mcvm^DNCh#A|PyNR=kOD-%?Qi^9Elzw<9Cmn)))ynQfc@(sAe}BxGYn1%29jUoSz2h?v zADv=Gy|aA(onzNnquvomS$;#~AC6R7IHbQ(_9u_})uWBy9_2Zs4e#i-)+kRO3uYPR z`Zy}k%ixhp!#_RuonRdGuO82hHIDlCj?}*!;lHe(`u!3&9Ms+TUpZ2LkWr(B8;t+S zBlTwzZ}P<&BYjlV>tXx{N9rFUS3cRyICN~=XjI~8+9}g$dS0vlfg|f* W|&~podB{3-nZj7PKgj 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 z%0D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

    9A)GY_p+;m)p>-Z^MEfER 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